{ "version": "1.0.0", "project": { "name": "vdi-starter-v5", "languages": [ "config", "css", "javascript", "json", "markdown", "php", "xml", "yaml" ], "frameworks": [ "WordPress", "Tailwind CSS", "GitHub Actions", "Playwright" ], "description": "VDI-Starter-v5 is a minimal WordPress theme designed as a starting point for custom theme development. It focuses on modern development approaches with a lean architecture that avoids the overhead of theme frameworks.", "analyzedAt": "2026-05-03T17:54:59.903Z", "gitCommitHash": "7a578c67c0c0eec7abbe4ad40a01db0e4c67aeb7" }, "nodes": [ { "id": "file:functions.php", "type": "file", "name": "functions.php", "filePath": "functions.php", "summary": "Theme bootstrap file that loads all lib/ modules via glob and registers ACF custom Gutenberg blocks on the init hook.", "tags": [ "entry-point", "bootstrap", "acf", "block-registration" ], "complexity": "simple" }, { "id": "file:header.php", "type": "file", "name": "header.php", "filePath": "header.php", "summary": "Theme header template rendering the HTML head, skip link, auxiliary and main navigation, and conditional page hero section.", "tags": [ "template", "navigation", "component", "layout" ], "complexity": "moderate" }, { "id": "file:footer.php", "type": "file", "name": "footer.php", "filePath": "footer.php", "summary": "Theme footer template with logo, description, social media links, three footer widget areas, footer navigation, and copyright bar.", "tags": [ "template", "navigation", "component", "layout" ], "complexity": "moderate" }, { "id": "file:front-page.php", "type": "file", "name": "front-page.php", "filePath": "front-page.php", "summary": "Static front page template that renders the WordPress loop content within a container, used when the homepage is set to a static page.", "tags": [ "template", "page", "entry-point" ], "complexity": "simple" }, { "id": "file:index.php", "type": "file", "name": "index.php", "filePath": "index.php", "summary": "Blog posts listing template displaying a responsive grid of post cards with thumbnails, categories, excerpts, and pagination, with optional sidebar.", "tags": [ "template", "blog", "archive", "loop" ], "complexity": "moderate" }, { "id": "file:page.php", "type": "file", "name": "page.php", "filePath": "page.php", "summary": "Single page template rendering page content with the WordPress loop and an optional sidebar controlled by the hasSidebar filter.", "tags": [ "template", "page", "loop" ], "complexity": "simple" }, { "id": "file:search.php", "type": "file", "name": "search.php", "filePath": "search.php", "summary": "Search results template displaying matching posts in a responsive card grid with categories, bylines, pagination, and optional sidebar.", "tags": [ "template", "search", "archive", "loop" ], "complexity": "moderate" }, { "id": "file:single.php", "type": "file", "name": "single.php", "filePath": "single.php", "summary": "Single post template rendering the post title, metadata (date, author, categories, tags), and content with an optional sidebar.", "tags": [ "template", "single-post", "loop" ], "complexity": "moderate" }, { "id": "file:404.php", "type": "file", "name": "404.php", "filePath": "404.php", "summary": "Error 404 page template showing a not-found message with a search form and quick navigation links to home, posts, and contact.", "tags": [ "template", "error-page", "search" ], "complexity": "simple" }, { "id": "file:sidebar.php", "type": "file", "name": "sidebar.php", "filePath": "sidebar.php", "summary": "Primary sidebar template rendering the sidebar-primary widget area within an aside element.", "tags": [ "template", "sidebar", "widget" ], "complexity": "simple" }, { "id": "file:sidebar-page.php", "type": "file", "name": "sidebar-page.php", "filePath": "sidebar-page.php", "summary": "Page-specific sidebar template rendering the sidebar-page widget area with a heading.", "tags": [ "template", "sidebar", "widget" ], "complexity": "simple" }, { "id": "file:whitelist.php", "type": "file", "name": "whitelist.php", "filePath": "whitelist.php", "summary": "Tailwind CSS class whitelist file listing utility classes (grids, buttons, gaps, col-spans) that must be included in the editor stylesheet because they do not appear in the theme source code.", "tags": [ "utility", "configuration", "tailwind", "build-system" ], "complexity": "moderate", "languageNotes": "Tailwind scans source files for class names to include in CSS output; this file ensures editor-only classes are not purged." }, { "id": "file:lib/activation.php", "type": "file", "name": "activation.php", "filePath": "lib/activation.php", "summary": "Theme activation handler that creates default pages (Home, News, 404, Contact), configures reading settings, removes sample content, and installs/activates a predefined list of plugins including ACF Pro and Gravity Forms.", "tags": [ "entry-point", "setup", "plugin-management", "configuration" ], "complexity": "complex", "languageNotes": "Uses a custom Silent_Upgrader_Skin class to suppress WordPress upgrader UI output during automated plugin installation." }, { "id": "file:lib/class-acf.php", "type": "file", "name": "class-acf.php", "filePath": "lib/class-acf.php", "summary": "ACF support class that configures JSON load and save paths for Advanced Custom Fields field groups, pointing them to the theme's /acf directory.", "tags": [ "service", "acf", "data-model" ], "complexity": "simple" }, { "id": "file:lib/class-breadcrumbs.php", "type": "file", "name": "class-breadcrumbs.php", "filePath": "lib/class-breadcrumbs.php", "summary": "Breadcrumb navigation generator and renderer that builds context-aware breadcrumb trails for all WordPress page types (posts, pages, archives, taxonomies, search, 404) with Schema.org structured data markup.", "tags": [ "service", "navigation", "seo", "component" ], "complexity": "complex", "languageNotes": "All methods are static; the class is used as a namespace-like container. Schema.org BreadcrumbList JSON-LD is injected alongside the HTML nav." }, { "id": "file:lib/class-enqueue.php", "type": "file", "name": "class-enqueue.php", "filePath": "lib/class-enqueue.php", "summary": "Script and style enqueueing class managing frontend (theme.css, theme.js, button.js), admin (admin.css, admin.js), and block editor (editor.css) assets with cache-busting via filemtime.", "tags": [ "service", "asset-management", "enqueue" ], "complexity": "moderate", "languageNotes": "Uses wp_enqueue_script_module for JS modules with dependency declarations, and filemtime for automatic cache-busting on each asset." }, { "id": "file:lib/class-menuitems.php", "type": "file", "name": "class-menuitems.php", "filePath": "lib/class-menuitems.php", "summary": "Navigation menu items management class that resolves WordPress nav menu locations into top-level and nested items, providing callable properties for template rendering.", "tags": [ "service", "navigation", "menu" ], "complexity": "moderate", "languageNotes": "Uses PHP callable properties ($this->hasChildren, $this->nestedNavItems) assigned as closures in the constructor, enabling template-friendly invocation." }, { "id": "file:lib/class-resources.php", "type": "file", "name": "class-resources.php", "filePath": "lib/class-resources.php", "summary": "Registers the Resources custom post type and resource_type hierarchical taxonomy, with custom permalink structure that includes the taxonomy term slug.", "tags": [ "service", "data-model", "custom-post-type" ], "complexity": "moderate", "languageNotes": "The postTypeLink filter rewrites resource URLs to /resources/{term-slug}/{post-name} for SEO-friendly hierarchical URLs." }, { "id": "file:lib/extras.php", "type": "file", "name": "extras.php", "filePath": "lib/extras.php", "summary": "Miscellaneous theme extras: sidebar visibility filter, child page retrieval, Owner role creation, contextual page titles, iframe/embed wrapping, and an ACF field group for the per-page sidebar toggle.", "tags": [ "utility", "filter", "roles", "acf" ], "complexity": "complex" }, { "id": "file:lib/helpers.php", "type": "file", "name": "helpers.php", "filePath": "lib/helpers.php", "summary": "Theme helper functions providing ACF dot-notation field access, block wrapper attributes, an ACF Global Fields options page, admin menu reordering, custom block categories, embed HTML escaping, multi-needle string search, custom excerpts, and a console.log bridge.", "tags": [ "utility", "helper", "acf", "admin" ], "complexity": "complex" }, { "id": "file:lib/hooks.php", "type": "file", "name": "hooks.php", "filePath": "lib/hooks.php", "summary": "WordPress hooks configuration: Google Fonts preconnect, nav menu registration, five widget areas, basic SEO title filter, excerpt customization, comprehensive WP head cleanup, theme support declarations, SVG upload support, and outgoing email sender override.", "tags": [ "hook", "configuration", "cleanup", "setup" ], "complexity": "complex", "languageNotes": "The init() function performs aggressive WordPress cleanup by removing emoji scripts, block library styles, generator tags, and REST API discovery links." }, { "id": "file:lib/search-features.php", "type": "file", "name": "search-features.php", "filePath": "lib/search-features.php", "summary": "Enhanced search functionality that extends WordPress default search to also match posts by tag and category names, deduplicates combined results, and sorts by recency.", "tags": [ "service", "search", "query" ], "complexity": "moderate", "languageNotes": "Temporarily removes its own posts_results filter during the secondary WP_Query to avoid infinite recursion, then restores it." }, { "id": "file:lib/show-template.php", "type": "file", "name": "show-template.php", "filePath": "lib/show-template.php", "summary": "Debug utility class that detects the active WordPress template via template_redirect and outputs it as an HTML comment in the footer, with logic to detect template overrides.", "tags": [ "utility", "debugging", "template" ], "complexity": "moderate", "languageNotes": "Uses debug_backtrace() to compare the chosen template against the actually rendered template, detecting plugin template overrides." }, { "id": "file:style.css", "type": "file", "name": "style.css", "filePath": "style.css", "summary": "WordPress theme stylesheet header declaring the VDI Starter v5 theme identity, version 5.0, author, and text domain.", "tags": [ "configuration", "theme-metadata", "entry-point" ], "complexity": "simple" }, { "id": "config:theme.json", "type": "config", "name": "theme.json", "filePath": "theme.json", "summary": "WordPress block editor theme configuration (v3 schema) defining layout sizes, a 12-color CSS variable palette, custom font family and 15 font size presets, spacing units, and global typography/link styles.", "tags": [ "configuration", "theme-settings", "block-editor", "design-system" ], "complexity": "moderate", "languageNotes": "Uses CSS custom properties (var(--color-primary), var(--text-base)) as palette values, bridging the Tailwind config and the block editor." }, { "id": "function:functions.php:regACFBlocks", "type": "function", "name": "regACFBlocks", "filePath": "functions.php", "lineRange": [ 26, 36 ], "summary": "Registers ACF custom Gutenberg blocks by scanning the views/blocks directory and calling register_block_type for each block folder.", "tags": [ "block-registration", "acf", "utility" ], "complexity": "simple" }, { "id": "class:lib/class-acf.php:ACF", "type": "class", "name": "ACF", "filePath": "lib/class-acf.php", "lineRange": [ 19, 55 ], "summary": "ACF JSON path handler that redirects ACF field group load and save operations to the theme's /acf directory for version-controlled field group storage.", "tags": [ "service", "acf", "data-persistence" ], "complexity": "simple" }, { "id": "class:lib/class-breadcrumbs.php:Breadcrumbs", "type": "class", "name": "Breadcrumbs", "filePath": "lib/class-breadcrumbs.php", "lineRange": [ 14, 396 ], "summary": "Static breadcrumb generator that builds hierarchical navigation trails for all WordPress content types and renders them with Schema.org JSON-LD structured data.", "tags": [ "service", "navigation", "seo", "component" ], "complexity": "complex" }, { "id": "class:lib/class-enqueue.php:Enqueue", "type": "class", "name": "Enqueue", "filePath": "lib/class-enqueue.php", "lineRange": [ 19, 109 ], "summary": "Asset enqueueing class that registers and loads frontend, admin, and editor CSS/JS with versioned cache-busting and JS module dependencies.", "tags": [ "service", "asset-management", "enqueue" ], "complexity": "moderate" }, { "id": "class:lib/class-menuitems.php:MenuItems", "type": "class", "name": "MenuItems", "filePath": "lib/class-menuitems.php", "lineRange": [ 19, 185 ], "summary": "Navigation menu resolver that loads WordPress nav menu items by location, separates top-level from nested items, and provides callable properties for use in templates.", "tags": [ "service", "navigation", "menu" ], "complexity": "moderate" }, { "id": "class:lib/class-resources.php:Resources", "type": "class", "name": "Resources", "filePath": "lib/class-resources.php", "lineRange": [ 18, 127 ], "summary": "Registers the Resources custom post type and resource_type taxonomy with a custom permalink structure including the taxonomy term slug.", "tags": [ "service", "data-model", "custom-post-type" ], "complexity": "moderate" }, { "id": "class:lib/show-template.php:ShowTemplate", "type": "class", "name": "ShowTemplate", "filePath": "lib/show-template.php", "lineRange": [ 20, 172 ], "summary": "Debug utility class that determines the active WordPress template and outputs it as an HTML comment in the footer, detecting plugin-based template overrides via backtrace analysis.", "tags": [ "utility", "debugging", "template" ], "complexity": "moderate" }, { "id": "function:lib/extras.php:getChildrenPages", "type": "function", "name": "getChildrenPages", "filePath": "lib/extras.php", "lineRange": [ 15, 29 ], "summary": "Retrieves child pages of the current page sorted by menu order, with URLs appended to each page object.", "tags": [ "utility", "page", "navigation" ], "complexity": "simple" }, { "id": "function:lib/extras.php:createOwnerRole", "type": "function", "name": "createOwnerRole", "filePath": "lib/extras.php", "lineRange": [ 105, 136 ], "summary": "Creates a custom Owner role with Administrator capabilities minus plugin/theme/core management permissions, registered on the init hook.", "tags": [ "utility", "roles", "security" ], "complexity": "moderate" }, { "id": "function:lib/extras.php:getTheTitle", "type": "function", "name": "getTheTitle", "filePath": "lib/extras.php", "lineRange": [ 147, 167 ], "summary": "Returns a context-aware page title for blog index, archives, search results, 404, and singular pages.", "tags": [ "utility", "title", "template" ], "complexity": "simple" }, { "id": "function:lib/extras.php:divWrapper", "type": "function", "name": "divWrapper", "filePath": "lib/extras.php", "lineRange": [ 179, 193 ], "summary": "Content filter that wraps iframe and embed elements in a div with class 'embed' for responsive styling, applied via the_content filter.", "tags": [ "utility", "filter", "content" ], "complexity": "simple" }, { "id": "function:lib/helpers.php:getFieldValue", "type": "function", "name": "getFieldValue", "filePath": "lib/helpers.php", "lineRange": [ 23, 32 ], "summary": "Retrieves nested ACF option field values using dot-notation path syntax (e.g., 'header.header_logo.url'), used throughout templates for global field access.", "tags": [ "utility", "acf", "helper" ], "complexity": "simple" }, { "id": "function:lib/helpers.php:blockWrapperAttributes", "type": "function", "name": "blockWrapperAttributes", "filePath": "lib/helpers.php", "lineRange": [ 42, 52 ], "summary": "Returns block wrapper attributes for both editor preview and frontend contexts, handling the difference in attribute generation.", "tags": [ "utility", "block", "acf" ], "complexity": "simple" }, { "id": "function:lib/helpers.php:customMenuOrder", "type": "function", "name": "customMenuOrder", "filePath": "lib/helpers.php", "lineRange": [ 83, 113 ], "summary": "Reorders the WordPress admin menu to prioritize Global Fields, ACF, and content types above settings and appearance items.", "tags": [ "utility", "admin", "configuration" ], "complexity": "moderate" }, { "id": "function:lib/helpers.php:blockCategories", "type": "function", "name": "blockCategories", "filePath": "lib/helpers.php", "lineRange": [ 123, 132 ], "summary": "Adds a custom VDI Blocks category to the top of the Gutenberg block inserter for organizing theme-specific blocks.", "tags": [ "utility", "block", "configuration" ], "complexity": "simple" }, { "id": "function:lib/helpers.php:escEmbeds", "type": "function", "name": "escEmbeds", "filePath": "lib/helpers.php", "lineRange": [ 142, 165 ], "summary": "Returns an array of allowed HTML tags and attributes for safely escaping iframe, figure, and div embed content.", "tags": [ "utility", "security", "escaping" ], "complexity": "simple" }, { "id": "function:lib/helpers.php:strposArray", "type": "function", "name": "strposArray", "filePath": "lib/helpers.php", "lineRange": [ 175, 189 ], "summary": "Finds the position of the first occurrence of any needle from an array within a haystack string, used by customExcerpt for sentence boundary detection.", "tags": [ "utility", "string", "search" ], "complexity": "simple" }, { "id": "function:lib/helpers.php:customExcerpt", "type": "function", "name": "customExcerpt", "filePath": "lib/helpers.php", "lineRange": [ 200, 209 ], "summary": "Generates a custom excerpt that truncates at the nearest sentence boundary rather than mid-word, used in the blog post card listings.", "tags": [ "utility", "content", "excerpt" ], "complexity": "simple" }, { "id": "function:lib/hooks.php:init", "type": "function", "name": "init", "filePath": "lib/hooks.php", "lineRange": [ 143, 190 ], "summary": "Aggressive WordPress cleanup function that removes emoji scripts, block library styles, generator tags, and REST API links while adding theme support for thumbnails, HTML5, wide alignment, and responsive embeds.", "tags": [ "hook", "cleanup", "theme-support" ], "complexity": "moderate" }, { "id": "function:lib/search-features.php:searchResultFilter", "type": "function", "name": "searchResultFilter", "filePath": "lib/search-features.php", "lineRange": [ 77, 120 ], "summary": "Posts results filter that augments WordPress search by querying posts matching the search term in tags and categories, deduplicating and sorting the combined results.", "tags": [ "service", "search", "filter" ], "complexity": "moderate" }, { "id": "function:lib/search-features.php:dedupe", "type": "function", "name": "dedupe", "filePath": "lib/search-features.php", "lineRange": [ 55, 67 ], "summary": "Removes duplicate WP_Post objects from a combined post array based on a specified object property key.", "tags": [ "utility", "search", "deduplication" ], "complexity": "simple" }, { "id": "function:lib/search-features.php:postSort", "type": "function", "name": "postSort", "filePath": "lib/search-features.php", "lineRange": [ 34, 45 ], "summary": "Returns a comparison function for sorting WP_Post objects in reverse chronological order with title as a secondary sort key.", "tags": [ "utility", "search", "sorting" ], "complexity": "simple" }, { "id": "file:views/blocks/accordion/accordion.php", "type": "file", "name": "accordion.php", "filePath": "views/blocks/accordion/accordion.php", "summary": "PHP template for the Accordion ACF block that renders a collapsible details/summary list with ACF field data for open state, grouping, and item titles/content.", "tags": [ "component", "api-handler", "wordpress-block", "acf" ], "complexity": "moderate" }, { "id": "file:views/blocks/accordion/accordion.css", "type": "file", "name": "accordion.css", "filePath": "views/blocks/accordion/accordion.css", "summary": "CSS styles for the Accordion block using native details/summary elements with CSS custom properties, max-height transitions, and open-state styling for collapsible sections.", "tags": [ "component", "styling", "css-nesting" ], "complexity": "moderate" }, { "id": "config:views/blocks/accordion/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/accordion/block.json", "summary": "ACF block registration config for the Accordion block, declaring it as acf/accordion with preview mode, enqueueing accordion.css, and enabling alignment, color, and JSX support.", "tags": [ "configuration", "wordpress-block", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/boilerplate/boilerplate.php", "type": "file", "name": "boilerplate.php", "filePath": "views/blocks/boilerplate/boilerplate.php", "summary": "Starter PHP template for creating new ACF blocks, providing the minimal required structure with blockWrapperAttributes and a section wrapper.", "tags": [ "utility", "wordpress-block", "template", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/boilerplate/boilerplate.css", "type": "file", "name": "boilerplate.css", "filePath": "views/blocks/boilerplate/boilerplate.css", "summary": "Empty placeholder CSS file for the Boilerplate block template, intended to be populated when creating new blocks.", "tags": [ "component", "styling", "placeholder" ], "complexity": "simple" }, { "id": "config:views/blocks/boilerplate/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/boilerplate/block.json", "summary": "ACF block registration config for the Boilerplate starter block, declaring it as acf/boilerplate with preview mode and limited support (no HTML rendering, no JSX).", "tags": [ "configuration", "wordpress-block", "acf", "template" ], "complexity": "simple" }, { "id": "file:views/blocks/button/button.php", "type": "file", "name": "button.php", "filePath": "views/blocks/button/button.php", "summary": "PHP template for the Button ACF block that retrieves ACF fields (element type, link, color, variant, size, width, aria label) and renders an x-button web component with all styling attributes.", "tags": [ "component", "api-handler", "wordpress-block", "acf" ], "complexity": "moderate" }, { "id": "config:views/blocks/button/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/button/block.json", "summary": "ACF block registration config for the Button block, declaring it as acf/button with preview mode, restricted to be a child of acf/buttons only.", "tags": [ "configuration", "wordpress-block", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/buttons/buttons.php", "type": "file", "name": "buttons.php", "filePath": "views/blocks/buttons/buttons.php", "summary": "PHP template for the Buttons container ACF block that renders a flex wrapper with InnerBlocks for nesting individual Button blocks.", "tags": [ "component", "api-handler", "wordpress-block", "acf" ], "complexity": "simple" }, { "id": "config:views/blocks/buttons/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/buttons/block.json", "summary": "ACF block registration config for the Buttons container block, declaring it as acf/buttons and restricting allowed inner blocks to acf/button only.", "tags": [ "configuration", "wordpress-block", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/contact-info/contact-info.php", "type": "file", "name": "contact-info.php", "filePath": "views/blocks/contact-info/contact-info.php", "summary": "PHP template for the Contact Info ACF block that displays mailing address, email, and phone from ACF global option fields alongside an InnerBlocks area for a contact form.", "tags": [ "component", "api-handler", "wordpress-block", "acf" ], "complexity": "moderate" }, { "id": "file:views/blocks/contact-info/contact-info.css", "type": "file", "name": "contact-info.css", "filePath": "views/blocks/contact-info/contact-info.css", "summary": "Empty placeholder CSS file for the Contact Info block, with styles intended to be added as needed.", "tags": [ "component", "styling", "placeholder" ], "complexity": "simple" }, { "id": "config:views/blocks/contact-info/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/contact-info/block.json", "summary": "ACF block registration config for the Contact Info block, declaring it as acf/contact-info with preview mode, enqueueing contact-info.css, and enabling JSX inner blocks.", "tags": [ "configuration", "wordpress-block", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/grid/grid.php", "type": "file", "name": "grid.php", "filePath": "views/blocks/grid/grid.php", "summary": "PHP template for the Grid ACF block that reads column count, responsive breakpoints, and gap settings from ACF fields to build dynamic Tailwind CSS grid classes, wrapping InnerBlocks for grid-cell children.", "tags": [ "component", "api-handler", "wordpress-block", "acf", "layout" ], "complexity": "moderate" }, { "id": "file:views/blocks/grid/grid.css", "type": "file", "name": "grid.css", "filePath": "views/blocks/grid/grid.css", "summary": "Empty placeholder CSS file for the Grid block, with layout handled via Tailwind utility classes generated dynamically in grid.php.", "tags": [ "component", "styling", "placeholder" ], "complexity": "simple" }, { "id": "config:views/blocks/grid/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/grid/block.json", "summary": "ACF block registration config for the Grid block, declaring it as acf/grid with preview mode, enqueueing grid.css, and restricting inner blocks to acf/grid-cell only.", "tags": [ "configuration", "wordpress-block", "acf", "layout" ], "complexity": "simple" }, { "id": "file:views/blocks/grid-cell/grid-cell.php", "type": "file", "name": "grid-cell.php", "filePath": "views/blocks/grid-cell/grid-cell.php", "summary": "PHP template for the Grid Cell ACF block that reads column span and responsive breakpoint span settings from ACF fields, composing dynamic Tailwind col-span classes with InnerBlocks for cell content.", "tags": [ "component", "api-handler", "wordpress-block", "acf", "layout" ], "complexity": "moderate" }, { "id": "file:views/blocks/grid-cell/grid-cell.css", "type": "file", "name": "grid-cell.css", "filePath": "views/blocks/grid-cell/grid-cell.css", "summary": "Empty placeholder CSS file for the Grid Cell block, with layout handled via Tailwind utility classes generated dynamically in grid-cell.php.", "tags": [ "component", "styling", "placeholder" ], "complexity": "simple" }, { "id": "config:views/blocks/grid-cell/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/grid-cell/block.json", "summary": "ACF block registration config for the Grid Cell block, declaring it as acf/grid-cell with preview mode, enqueueing grid-cell.css, and restricting it as a child of acf/grid only.", "tags": [ "configuration", "wordpress-block", "acf", "layout" ], "complexity": "simple" }, { "id": "config:acf/group_5f7f85a2a3e13.json", "type": "config", "name": "group_5f7f85a2a3e13.json", "filePath": "acf/group_5f7f85a2a3e13.json", "summary": "ACF field group configuration for the Button block, defining fields for element type (a/button), link, color, variant, size, width, and ARIA label, scoped to the acf/button block.", "tags": [ "configuration", "acf", "wordpress-block", "field-group" ], "complexity": "moderate" }, { "id": "config:acf/group_5fd3e006e5da5.json", "type": "config", "name": "group_5fd3e006e5da5.json", "filePath": "acf/group_5fd3e006e5da5.json", "summary": "ACF field group configuration for Global Fields options page, defining contact info (email, phone, fax, address, hours), social media URLs, header logo, footer settings (logo, description, copyright, credit), and admin 404 page reference.", "tags": [ "configuration", "acf", "field-group", "global-settings" ], "complexity": "complex" }, { "id": "config:acf/group_600f5a9e242c3.json", "type": "config", "name": "group_600f5a9e242c3.json", "filePath": "acf/group_600f5a9e242c3.json", "summary": "ACF field group configuration for the Grid block, defining responsive column counts (with breakpoint checkboxes), and gap X/Y selectors using Tailwind scale values, scoped to acf/grid.", "tags": [ "configuration", "acf", "wordpress-block", "field-group", "layout" ], "complexity": "complex" }, { "id": "config:acf/group_60106ed700da3.json", "type": "config", "name": "group_60106ed700da3.json", "filePath": "acf/group_60106ed700da3.json", "summary": "ACF field group configuration for the Grid Cell block, defining default and responsive breakpoint column span ranges (1-12) with conditional visibility, scoped to acf/grid-cell.", "tags": [ "configuration", "acf", "wordpress-block", "field-group", "layout" ], "complexity": "moderate" }, { "id": "config:acf/group_60bfb84ae973c.json", "type": "config", "name": "group_60bfb84ae973c.json", "filePath": "acf/group_60bfb84ae973c.json", "summary": "ACF field group configuration for Page Heading, defining hero style, background color, dark mode toggle, heading text, intro textarea, and a repeater for call-to-action links, scoped to pages and posts.", "tags": [ "configuration", "acf", "field-group", "page-template" ], "complexity": "moderate" }, { "id": "config:acf/group_60bfdb328901d.json", "type": "config", "name": "group_60bfdb328901d.json", "filePath": "acf/group_60bfdb328901d.json", "summary": "ACF field group configuration for the Homepage Hero block, defining heading text, WYSIWYG intro content, and a repeater for call-to-action links, scoped to the acf/homepage-hero block.", "tags": [ "configuration", "acf", "wordpress-block", "field-group" ], "complexity": "moderate" }, { "id": "file:views/blocks/homepage-hero/homepage-hero.php", "type": "file", "name": "homepage-hero.php", "filePath": "views/blocks/homepage-hero/homepage-hero.php", "summary": "ACF block template rendering the homepage hero section with a heading, intro text, and calls-to-action buttons using Tailwind CSS utility classes.", "tags": [ "component", "api-handler", "block-template", "acf" ], "complexity": "moderate" }, { "id": "file:views/blocks/homepage-hero/homepage-hero.css", "type": "file", "name": "homepage-hero.css", "filePath": "views/blocks/homepage-hero/homepage-hero.css", "summary": "Empty placeholder stylesheet for the Homepage Hero ACF block, referenced by block.json for block-scoped styles.", "tags": [ "markup", "block-template", "stylesheet" ], "complexity": "simple" }, { "id": "config:views/blocks/homepage-hero/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/homepage-hero/block.json", "summary": "WordPress block registration config for the Homepage Hero ACF block, defining its title, category, keywords, render template, and editor supports.", "tags": [ "configuration", "block-template", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/media-text/media-text.php", "type": "file", "name": "media-text.php", "filePath": "views/blocks/media-text/media-text.php", "summary": "ACF block template for a two-column media-with-text layout supporting image or video alongside heading, subheading, content, and call-to-action buttons.", "tags": [ "component", "api-handler", "block-template", "acf" ], "complexity": "moderate" }, { "id": "file:views/blocks/media-text/media-text.css", "type": "file", "name": "media-text.css", "filePath": "views/blocks/media-text/media-text.css", "summary": "Empty placeholder stylesheet for the Media With Text ACF block, referenced by block.json for block-scoped styles.", "tags": [ "markup", "block-template", "stylesheet" ], "complexity": "simple" }, { "id": "config:views/blocks/media-text/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/media-text/block.json", "summary": "WordPress block registration config for the Media With Text ACF block, defining its title, category, keywords, render template, and editor supports.", "tags": [ "configuration", "block-template", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/media-text-innerblocks/media-text-innerblocks.php", "type": "file", "name": "media-text-innerblocks.php", "filePath": "views/blocks/media-text-innerblocks/media-text-innerblocks.php", "summary": "ACF block template for a two-column media-with-text layout using WordPress InnerBlocks for the content column, supporting image/video on one side and editable inner blocks on the other.", "tags": [ "component", "api-handler", "block-template", "acf" ], "complexity": "moderate" }, { "id": "file:views/blocks/media-text-innerblocks/media-text-innerblocks.css", "type": "file", "name": "media-text-innerblocks.css", "filePath": "views/blocks/media-text-innerblocks/media-text-innerblocks.css", "summary": "Empty placeholder stylesheet for the Media Text InnerBlocks ACF block, referenced by block.json for block-scoped styles.", "tags": [ "markup", "block-template", "stylesheet" ], "complexity": "simple" }, { "id": "config:views/blocks/media-text-innerblocks/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/media-text-innerblocks/block.json", "summary": "WordPress block registration config for the Media Text InnerBlocks variant ACF block, defining its title, category, keywords, render template, and editor supports.", "tags": [ "configuration", "block-template", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/page-children/page-children.php", "type": "file", "name": "page-children.php", "filePath": "views/blocks/page-children/page-children.php", "summary": "ACF block template that dynamically queries and displays child pages of the current page as a card grid, including featured images, titles, and grandchild page listings.", "tags": [ "component", "data-model", "block-template", "acf" ], "complexity": "complex" }, { "id": "file:views/blocks/page-children/page-children.css", "type": "file", "name": "page-children.css", "filePath": "views/blocks/page-children/page-children.css", "summary": "Empty placeholder stylesheet for the Page Children ACF block, referenced by block.json for block-scoped styles.", "tags": [ "markup", "block-template", "stylesheet" ], "complexity": "simple" }, { "id": "config:views/blocks/page-children/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/page-children/block.json", "summary": "WordPress block registration config for the Page Children ACF block, defining its title, category, render template, and restricted editor supports (no align, anchor, or color).", "tags": [ "configuration", "block-template", "acf" ], "complexity": "simple" }, { "id": "file:views/blocks/section/section.php", "type": "file", "name": "section.php", "filePath": "views/blocks/section/section.php", "summary": "ACF block template for a configurable section wrapper with background color/image, overlay, font color, and content width options, using InnerBlocks for nested content.", "tags": [ "component", "api-handler", "block-template", "acf" ], "complexity": "moderate" }, { "id": "file:views/blocks/section/section.css", "type": "file", "name": "section.css", "filePath": "views/blocks/section/section.css", "summary": "Empty placeholder stylesheet for the Section ACF block, referenced by block.json for block-scoped styles.", "tags": [ "markup", "block-template", "stylesheet" ], "complexity": "simple" }, { "id": "config:views/blocks/section/block.json", "type": "config", "name": "block.json", "filePath": "views/blocks/section/block.json", "summary": "WordPress block registration config for the Section ACF block, defining its title, category, keywords, render template, and editor supports.", "tags": [ "configuration", "block-template", "acf" ], "complexity": "simple" }, { "id": "file:views/components/nav-aux.php", "type": "file", "name": "nav-aux.php", "filePath": "views/components/nav-aux.php", "summary": "Auxiliary navigation component rendering the top-bar menu with social media links and a search form, using the MenuItems class for menu rendering.", "tags": [ "component", "navigation", "event-handler" ], "complexity": "simple" }, { "id": "file:views/components/nav-main.php", "type": "file", "name": "nav-main.php", "filePath": "views/components/nav-main.php", "summary": "Main navigation component that renders the primary menu with a mobile toggle button, using the MenuItems class for recursive menu rendering.", "tags": [ "component", "navigation", "event-handler" ], "complexity": "simple" }, { "id": "file:views/components/nav-main__toggle.php", "type": "file", "name": "nav-main__toggle.php", "filePath": "views/components/nav-main__toggle.php", "summary": "Mobile navigation toggle button component rendering either a custom ACF icon or default hamburger/close SVG icons for the main menu.", "tags": [ "component", "navigation", "event-handler" ], "complexity": "simple" }, { "id": "file:views/components/menu-items/has-children.php", "type": "file", "name": "has-children.php", "filePath": "views/components/menu-items/has-children.php", "summary": "Menu item template for navigation items with child pages, rendering a toggle button and nested submenu list supporting up to three levels of depth.", "tags": [ "component", "navigation", "event-handler" ], "complexity": "moderate" }, { "id": "file:views/components/menu-items/index.php", "type": "file", "name": "index.php", "filePath": "views/components/menu-items/index.php", "summary": "Outer menu list template that iterates top-level navigation items, delegating to has-children or single templates based on whether items have sub-items, and includes a mobile search form.", "tags": [ "component", "navigation", "entry-point" ], "complexity": "simple" }, { "id": "file:views/components/menu-items/single.php", "type": "file", "name": "single.php", "filePath": "views/components/menu-items/single.php", "summary": "Menu item template for simple navigation items without children, rendering a single link with current-page detection and class generation.", "tags": [ "component", "navigation" ], "complexity": "simple" }, { "id": "file:views/forms/search.php", "type": "file", "name": "search.php", "filePath": "views/forms/search.php", "summary": "Global search form component rendering a search input with an SVG icon and submit button, using WordPress home_url and get_search_query template tags.", "tags": [ "component", "form", "search" ], "complexity": "simple" }, { "id": "file:views/partials/page-hero.php", "type": "file", "name": "page-hero.php", "filePath": "views/partials/page-hero.php", "summary": "Page hero partial displaying a heading and intro text with dark-mode support and breadcrumbs, used as a reusable banner component across page templates.", "tags": [ "component", "partial", "page-layout" ], "complexity": "moderate" }, { "id": "file:views/partials/social-media.php", "type": "file", "name": "social-media.php", "filePath": "views/partials/social-media.php", "summary": "Social media links partial that dynamically renders icon links for configured social platforms (Facebook, Twitter, Pinterest, Instagram, YouTube, LinkedIn) from ACF options fields.", "tags": [ "component", "partial", "navigation" ], "complexity": "simple" }, { "id": "config:acf/group_6261bc658dd80.json", "type": "config", "name": "group_6261bc658dd80.json", "filePath": "acf/group_6261bc658dd80.json", "summary": "ACF field group configuration for the Section block, defining background color, background image, overlay, font color, content width, and dark mode fields used in the section block template.", "tags": [ "configuration", "acf", "block-template" ], "complexity": "complex", "languageNotes": "WordPress ACF field group JSON with accordion, color_picker, true_false, image, and range field types." }, { "id": "config:acf/group_645e51f721207.json", "type": "config", "name": "group_645e51f721207.json", "filePath": "acf/group_645e51f721207.json", "summary": "ACF field group configuration for the Accordion Block, defining fields for first-item-open toggle, group name, and repeater-based accordion items.", "tags": [ "configuration", "acf", "block-template" ], "complexity": "moderate" }, { "id": "config:acf/group_645e7cf448e66.json", "type": "config", "name": "group_645e7cf448e66.json", "filePath": "acf/group_645e7cf448e66.json", "summary": "ACF field group configuration for the Media With Text Block, defining background color, dark mode, media position, video/image, heading, subheading, content, and calls-to-action fields.", "tags": [ "configuration", "acf", "block-template" ], "complexity": "complex", "languageNotes": "WordPress ACF field group JSON with color_picker, true_false, select, oembed, image, text, wysiwyg, and repeater (with link sub-fields) field types." }, { "id": "file:views/icons/facebook.php", "type": "file", "name": "facebook.php", "filePath": "views/icons/facebook.php", "summary": "Icon partial template rendering the Facebook icon using a Lineicons icon-font class reference.", "tags": [ "component", "icon", "social", "template" ], "complexity": "simple" }, { "id": "file:views/icons/heart.php", "type": "file", "name": "heart.php", "filePath": "views/icons/heart.php", "summary": "Icon partial template rendering an inline SVG heart icon with stroke-based path drawing.", "tags": [ "component", "icon", "svg", "template" ], "complexity": "simple", "languageNotes": "Uses inline SVG with currentColor stroke for theme-aware icon coloring." }, { "id": "file:views/icons/instagram.php", "type": "file", "name": "instagram.php", "filePath": "views/icons/instagram.php", "summary": "Icon partial template rendering the Instagram icon using a Lineicons icon-font class reference.", "tags": [ "component", "icon", "social", "template" ], "complexity": "simple" }, { "id": "file:views/icons/linkedin.php", "type": "file", "name": "linkedin.php", "filePath": "views/icons/linkedin.php", "summary": "Icon partial template rendering the LinkedIn icon using a Lineicons icon-font class reference.", "tags": [ "component", "icon", "social", "template" ], "complexity": "simple" }, { "id": "file:views/icons/menu.php", "type": "file", "name": "menu.php", "filePath": "views/icons/menu.php", "summary": "Icon partial template rendering a hamburger menu icon using the Font Awesome bars icon class.", "tags": [ "component", "icon", "navigation", "template" ], "complexity": "simple" }, { "id": "file:views/icons/pinterest.php", "type": "file", "name": "pinterest.php", "filePath": "views/icons/pinterest.php", "summary": "Icon partial template rendering the Pinterest icon using a Lineicons icon-font class reference.", "tags": [ "component", "icon", "social", "template" ], "complexity": "simple" }, { "id": "file:views/icons/search.php", "type": "file", "name": "search.php", "filePath": "views/icons/search.php", "summary": "Icon partial template rendering an inline SVG search icon with a circle and diagonal line magnifying glass.", "tags": [ "component", "icon", "svg", "search" ], "complexity": "simple", "languageNotes": "Uses inline SVG with currentColor stroke for theme-aware icon coloring." }, { "id": "file:views/icons/shop.php", "type": "file", "name": "shop.php", "filePath": "views/icons/shop.php", "summary": "Icon partial template rendering the shop/storefront icon using a Lineicons icon-font class reference.", "tags": [ "component", "icon", "ecommerce", "template" ], "complexity": "simple" }, { "id": "file:views/icons/shopping-basket.php", "type": "file", "name": "shopping-basket.php", "filePath": "views/icons/shopping-basket.php", "summary": "Icon partial template rendering an inline SVG shopping basket icon with basket body, handle, and items arc paths.", "tags": [ "component", "icon", "svg", "ecommerce" ], "complexity": "simple", "languageNotes": "Uses inline SVG with currentColor stroke for theme-aware icon coloring." }, { "id": "file:views/icons/twitter-.php", "type": "file", "name": "twitter-.php", "filePath": "views/icons/twitter-.php", "summary": "Icon partial template rendering the X (formerly Twitter) rebrand icon using an icon-x class reference.", "tags": [ "component", "icon", "social", "template" ], "complexity": "simple" }, { "id": "file:views/icons/twitter.php", "type": "file", "name": "twitter.php", "filePath": "views/icons/twitter.php", "summary": "Icon partial template rendering the classic Twitter bird icon using a Lineicons icon-twitter class reference.", "tags": [ "component", "icon", "social", "template" ], "complexity": "simple" }, { "id": "file:views/icons/user.php", "type": "file", "name": "user.php", "filePath": "views/icons/user.php", "summary": "Icon partial template rendering an inline SVG user icon with a circular head and body arc path.", "tags": [ "component", "icon", "svg", "user" ], "complexity": "simple", "languageNotes": "Uses inline SVG with currentColor stroke for theme-aware icon coloring." }, { "id": "file:views/icons/youtube.php", "type": "file", "name": "youtube.php", "filePath": "views/icons/youtube.php", "summary": "Icon partial template rendering the YouTube icon using a Lineicons icon-font class reference.", "tags": [ "component", "icon", "social", "template" ], "complexity": "simple" }, { "id": "file:styles/base/break-out.css", "type": "file", "name": "break-out.css", "filePath": "styles/base/break-out.css", "summary": "Defines break-out utility classes using Tailwind @utility and @theme directives, allowing elements to extend beyond their container to full viewport width.", "tags": [ "utility", "layout", "css", "tailwind" ], "complexity": "simple", "languageNotes": "Uses Tailwind CSS v4 @utility directive to register custom utilities with scrollbar-width compensation." }, { "id": "file:styles/base/colors.css", "type": "file", "name": "colors.css", "filePath": "styles/base/colors.css", "summary": "Defines the theme color palette using oklch color space with primary/secondary scales, semantic feedback colors, and link color variables.", "tags": [ "configuration", "design-tokens", "css", "tailwind" ], "complexity": "simple", "languageNotes": "Uses oklch color space and CSS color-mix() for automatic shade generation (100-900 scales) from base primary/secondary colors." }, { "id": "file:styles/base/forms.css", "type": "file", "name": "forms.css", "filePath": "styles/base/forms.css", "summary": "Styles form inputs, Gravity Forms wrappers, and the WordPress search block using Tailwind @apply directives with focus-visible states.", "tags": [ "form-styling", "gravity-forms", "wordpress", "css" ], "complexity": "moderate" }, { "id": "file:styles/base/global.css", "type": "file", "name": "global.css", "filePath": "styles/base/global.css", "summary": "Core layout and spacing styles defining breakpoints, container widths, section spacing, WordPress alignment classes, and responsive embed wrappers.", "tags": [ "layout", "configuration", "css", "tailwind" ], "complexity": "moderate", "languageNotes": "Defines custom Tailwind breakpoints (xxs through 2xl) using @theme and uses clamp() for responsive container padding." }, { "id": "file:styles/base/index.css", "type": "file", "name": "index.css", "filePath": "styles/base/index.css", "summary": "Barrel stylesheet that imports all base CSS partials (global, colors, prose, typography, skip-link, misc, forms) in load order.", "tags": [ "barrel", "entry-point", "css", "imports" ], "complexity": "simple" }, { "id": "file:styles/base/misc.css", "type": "file", "name": "misc.css", "filePath": "styles/base/misc.css", "summary": "Placeholder file for miscellaneous extra styles, currently containing only a comment.", "tags": [ "placeholder", "css", "utility" ], "complexity": "simple" }, { "id": "file:styles/base/prose.css", "type": "file", "name": "prose.css", "filePath": "styles/base/prose.css", "summary": "Configures Tailwind Typography plugin prose color tokens using the theme's primary and secondary color variables for both normal and inverted modes.", "tags": [ "typography", "configuration", "design-tokens", "tailwind" ], "complexity": "simple", "languageNotes": "Maps all --tw-prose-* custom properties to theme color variables, ensuring the Tailwind Typography plugin matches the theme palette." }, { "id": "file:styles/base/skip-link.css", "type": "file", "name": "skip-link.css", "filePath": "styles/base/skip-link.css", "summary": "Accessibility skip-link styling that hides the link off-screen until focused, then reveals it as a high-visibility yellow bar at the top of the viewport.", "tags": [ "accessibility", "a11y", "css", "navigation" ], "complexity": "simple" }, { "id": "file:styles/base/typography.css", "type": "file", "name": "typography.css", "filePath": "styles/base/typography.css", "summary": "Comprehensive fluid typography system defining a 14-size clamp-based scale from 14px to 75px, heading sizes, font family variables, and base element styling for headings, links, lists, code, and horizontal rules.", "tags": [ "typography", "design-tokens", "css", "fluid-type" ], "complexity": "moderate", "languageNotes": "Uses CSS clamp() for each text size to create a fluid scale that interpolates between minimum and maximum pixel values, with a detailed viewport-width reference table in comments." }, { "id": "file:styles/backend/admin.css", "type": "file", "name": "admin.css", "filePath": "styles/backend/admin.css", "summary": "Placeholder file for light WordPress admin panel styles, currently containing only a comment to avoid overriding core wp-admin UI.", "tags": [ "placeholder", "wordpress", "admin", "css" ], "complexity": "simple" }, { "id": "file:styles/backend/editor.css", "type": "file", "name": "editor.css", "filePath": "styles/backend/editor.css", "summary": "WordPress Gutenberg editor styles that mirror the frontend layout, applying consistent max-widths, gutter padding, and break-out utility alignment within the block editor.", "tags": [ "wordpress", "gutenberg", "editor", "css" ], "complexity": "moderate", "languageNotes": "Imports the compiled theme.css and then overrides layout constraints with editor-specific gutter variables using clamp() for responsive padding." }, { "id": "file:styles/theme.css", "type": "file", "name": "theme.css", "filePath": "styles/theme.css", "summary": "Main theme CSS entry point that loads Tailwind, all base styles, navigation, icon fonts, break-out utilities, components, blocks, and the typography plugin.", "tags": [ "entry-point", "css", "tailwind", "configuration" ], "complexity": "simple" }, { "id": "file:styles/components/breadcrumbs.css", "type": "file", "name": "breadcrumbs.css", "filePath": "styles/components/breadcrumbs.css", "summary": "Styles for the breadcrumb navigation element using oklch color values with hover color-mix transitions.", "tags": [ "component", "navigation", "styling" ], "complexity": "simple" }, { "id": "file:styles/components/index.css", "type": "file", "name": "index.css", "filePath": "styles/components/index.css", "summary": "Barrel file that aggregates all theme component stylesheets via CSS @import directives for site-header, breadcrumbs, post-list, sidebar, pagination, and site-footer.", "tags": [ "barrel", "component", "styling" ], "complexity": "simple" }, { "id": "file:styles/components/pagination.css", "type": "file", "name": "pagination.css", "filePath": "styles/components/pagination.css", "summary": "Styles for post index pagination including page numbers, prev/next links, and current page highlighting with responsive visibility toggling.", "tags": [ "component", "pagination", "styling" ], "complexity": "simple" }, { "id": "file:styles/components/post-list.css", "type": "file", "name": "post-list.css", "filePath": "styles/components/post-list.css", "summary": "Placeholder stylesheet for blog/post index listing with commented-out BEM-style selectors for future customization.", "tags": [ "component", "layout", "styling" ], "complexity": "simple" }, { "id": "file:styles/components/sidebar.css", "type": "file", "name": "sidebar.css", "filePath": "styles/components/sidebar.css", "summary": "Styles for the sidebar widget area including widget containers, titles, and nested list styling with a left border accent.", "tags": [ "component", "sidebar", "widget" ], "complexity": "simple" }, { "id": "file:styles/components/site-footer.css", "type": "file", "name": "site-footer.css", "filePath": "styles/components/site-footer.css", "summary": "Styles for the site footer including footer column layouts, widget areas, footer menu links, and copyright section with hover transitions.", "tags": [ "component", "footer", "styling" ], "complexity": "moderate" }, { "id": "file:styles/components/site-header.css", "type": "file", "name": "site-header.css", "filePath": "styles/components/site-header.css", "summary": "Styles for the site header auxiliary navigation container including link hover effects and global search input styling.", "tags": [ "component", "header", "styling" ], "complexity": "simple" }, { "id": "file:styles/blocks/buttons.css", "type": "file", "name": "buttons.css", "filePath": "styles/blocks/buttons.css", "summary": "Comprehensive button styling system with CSS custom properties for variants (outline, secondary, light, white, black), sizes (small, medium, large), widths, and a back-to-top button component using Tailwind @theme directive.", "tags": [ "component", "buttons", "styling" ], "complexity": "moderate", "languageNotes": "Uses Tailwind CSS v4 @theme directive to define custom CSS properties for the button system, with data-attribute-driven variants." }, { "id": "file:styles/blocks/core.css", "type": "file", "name": "core.css", "filePath": "styles/blocks/core.css", "summary": "Minimal core block style for full-width alignment using viewport-width calculations to break out of container constraints.", "tags": [ "block", "layout", "styling" ], "complexity": "simple" }, { "id": "file:styles/blocks/index.css", "type": "file", "name": "index.css", "filePath": "styles/blocks/index.css", "summary": "Barrel file that aggregates block stylesheets via CSS @import for buttons and core alignment styles.", "tags": [ "barrel", "block", "styling" ], "complexity": "simple" }, { "id": "file:styles/navigation/index.css", "type": "file", "name": "index.css", "filePath": "styles/navigation/index.css", "summary": "Barrel file that aggregates navigation stylesheets via CSS @import, with commented-out alternatives for choosing between default vs mega menu and accordion vs sliding mobile navigation styles.", "tags": [ "barrel", "navigation", "styling" ], "complexity": "simple", "languageNotes": "Uses commented @import lines to allow theme developers to swap between navigation style alternatives (dropdown vs mega menu, accordion vs sliding mobile)." }, { "id": "file:styles/navigation/nav-aux.css", "type": "file", "name": "nav-aux.css", "filePath": "styles/navigation/nav-aux.css", "summary": "Styles for the auxiliary navigation bar with flexible wrapping layout, toggle button styling, and desktop-specific overrides for wider spacing.", "tags": [ "navigation", "auxiliary", "styling" ], "complexity": "simple" }, { "id": "file:styles/navigation/nav-footer.css", "type": "file", "name": "nav-footer.css", "filePath": "styles/navigation/nav-footer.css", "summary": "Footer navigation styles with responsive breakpoints for desktop vertical lists and mobile collapsible sections with toggle and submenu styling.", "tags": [ "navigation", "footer", "responsive" ], "complexity": "moderate" }, { "id": "file:styles/navigation/nav-functional.css", "type": "file", "name": "nav-functional.css", "filePath": "styles/navigation/nav-functional.css", "summary": "Core functional navigation styles for the menu-vdi system including submenu toggling, aria-expanded state handling, and responsive mobile/desktop layout shifts with hamburger toggle behavior.", "tags": [ "navigation", "functional", "responsive" ], "complexity": "moderate" }, { "id": "file:styles/navigation/nav-main-default.css", "type": "file", "name": "nav-main-default.css", "filePath": "styles/navigation/nav-main-default.css", "summary": "Desktop-only main navigation styles with standard dropdown submenus, bold top-level links, and shadowed dropdown panels for the default navigation variant.", "tags": [ "navigation", "desktop", "dropdown" ], "complexity": "moderate" }, { "id": "file:styles/navigation/nav-main-mega.css", "type": "file", "name": "nav-main-mega.css", "filePath": "styles/navigation/nav-main-mega.css", "summary": "Mega menu navigation styles with multi-column dropdown panels for desktop and mobile, using CSS :has() selector for grandchild detection and horizontal layout expansion.", "tags": [ "navigation", "mega-menu", "desktop" ], "complexity": "moderate", "languageNotes": "Uses CSS :has() pseudo-class for detecting grandchild elements to trigger mega menu layout, a modern CSS feature with progressive enhancement." }, { "id": "file:styles/navigation/nav-mobile-accordion.css", "type": "file", "name": "nav-mobile-accordion.css", "filePath": "styles/navigation/nav-mobile-accordion.css", "summary": "Mobile accordion-style navigation with full-height slide-down menu, toggle-controlled visibility via aria-expanded, and vertically stacked submenu items.", "tags": [ "navigation", "mobile", "accordion" ], "complexity": "moderate" }, { "id": "file:styles/navigation/nav-mobile-sliding.css", "type": "file", "name": "nav-mobile-sliding.css", "filePath": "styles/navigation/nav-mobile-sliding.css", "summary": "Mobile sliding viewport navigation with level-to-level transitions, back buttons, level indicators, and nested item indentation where users slide between menu depth levels.", "tags": [ "navigation", "mobile", "sliding" ], "complexity": "moderate" }, { "id": "file:styles/fonts/lineicons.css", "type": "file", "name": "lineicons.css", "filePath": "styles/fonts/lineicons.css", "summary": "Lineicons icon font definition with @font-face declarations, base icon class selectors, circular icon styling, spin/rotate/flip transforms, and 600+ individual icon glyph mappings using Unicode content values.", "tags": [ "fonts", "icons", "styling" ], "complexity": "complex" }, { "id": "config:package.json", "type": "config", "name": "package.json", "filePath": "package.json", "summary": "Node.js project configuration defining the VDI-Starter-v5 WordPress theme with Tailwind CSS v4 build pipeline, BrowserSync watch mode, and Playwright accessibility testing dependencies.", "tags": [ "configuration", "build-system", "npm" ], "complexity": "simple" }, { "id": "config:composer.json", "type": "config", "name": "composer.json", "filePath": "composer.json", "summary": "PHP Composer configuration for the WordPress theme with PHP_CodeSniffer and WordPress Coding Standards as dev dependencies, plus lint and fix scripts.", "tags": [ "configuration", "php", "linting" ], "complexity": "simple" }, { "id": "config:.phpcs.xml", "type": "config", "name": ".phpcs.xml", "filePath": ".phpcs.xml", "summary": "PHP_CodeSniffer ruleset based on WordPress coding standards with targeted exclusions for naming conventions, indentation, commenting, and Yoda conditions to suit the theme's development style.", "tags": [ "configuration", "linting", "coding-standards" ], "complexity": "moderate" }, { "id": "config:.env.example", "type": "config", "name": ".env.example", "filePath": ".env.example", "summary": "Environment variable template providing the local development URL and BrowserSync port configuration for the watch workflow.", "tags": [ "configuration", "development", "environment" ], "complexity": "simple" }, { "id": "document:README.md", "type": "document", "name": "README.md", "filePath": "README.md", "summary": "Comprehensive project documentation covering VDI-Starter-v5 features, directory structure, core files, installation, development workflows, build commands, and coding standards for the WordPress theme.", "tags": [ "documentation", "entry-point", "overview" ], "complexity": "moderate" }, { "id": "file:bin/.build.js", "type": "file", "name": ".build.js", "filePath": "bin/.build.js", "summary": "Production build script that compiles Tailwind CSS to the static/dist output directory, ensuring the directory exists before compilation.", "tags": [ "build-system", "utility", "css-compilation" ], "complexity": "simple" }, { "id": "file:bin/.utils.js", "type": "file", "name": ".utils.js", "filePath": "bin/.utils.js", "summary": "Shared build utilities exporting a debounced Tailwind-to-CSS compilation function used by both the build and watch scripts.", "tags": [ "utility", "build-system", "shared-utilities" ], "complexity": "simple" }, { "id": "file:bin/.watch.js", "type": "file", "name": ".watch.js", "filePath": "bin/.watch.js", "summary": "Development watch script using BrowserSync to proxy a local WordPress site, auto-reloading JS changes and recompiling Tailwind CSS on PHP/CSS file changes.", "tags": [ "utility", "development", "hot-reload" ], "complexity": "moderate" }, { "id": "file:static/js/admin.js", "type": "file", "name": "admin.js", "filePath": "static/js/admin.js", "summary": "WordPress admin JavaScript entry point that registers the ButtonComponent custom element on DOM ready.", "tags": [ "entry-point", "admin", "component" ], "complexity": "simple" }, { "id": "function:static/js/admin.js:app", "type": "function", "name": "app", "filePath": "static/js/admin.js", "lineRange": [ 6, 8 ], "summary": "Initializes the ButtonComponent custom element for the WordPress admin context.", "tags": [ "component", "initialization" ], "complexity": "simple" }, { "id": "file:static/js/theme.js", "type": "file", "name": "theme.js", "filePath": "static/js/theme.js", "summary": "Main frontend theme entry point that imports all components and modules, patches passive event listeners, and initializes navigation, external link tagging, header height, and back-to-top button on DOMContentLoaded.", "tags": [ "entry-point", "initialization", "component" ], "complexity": "moderate", "languageNotes": "Includes an inline polyfill that patches EventTarget.prototype.addEventListener to default scroll/touch events to passive:true for better scrolling performance." }, { "id": "file:static/js/components/backToTop.js", "type": "file", "name": "backToTop.js", "filePath": "static/js/components/backToTop.js", "summary": "Custom element providing a back-to-top button that appears on upward scroll after scrolling past 300px, with smooth scroll-to-top on click.", "tags": [ "component", "ui", "accessibility" ], "complexity": "simple" }, { "id": "class:static/js/components/backToTop.js:BackToTopButton", "type": "class", "name": "BackToTopButton", "filePath": "static/js/components/backToTop.js", "lineRange": [ 2, 27 ], "summary": "Web Component that renders a back-to-top button, tracking scroll direction to show the button only when scrolling up past 300px.", "tags": [ "component", "ui", "scroll" ], "complexity": "simple" }, { "id": "function:static/js/components/backToTop.js:registerBackToTopButton", "type": "function", "name": "registerBackToTopButton", "filePath": "static/js/components/backToTop.js", "lineRange": [ 29, 33 ], "summary": "Registers the BackToTopButton custom element with the browser's CustomElementRegistry if not already defined.", "tags": [ "component", "registration" ], "complexity": "simple" }, { "id": "file:static/js/components/button.js", "type": "file", "name": "button.js", "filePath": "static/js/components/button.js", "summary": "Web Component for rendering customizable buttons with configurable attributes for element type, URL, target, title, ARIA label, color, variant, size, and width, updating reactively on attribute changes.", "tags": [ "component", "ui", "accessibility" ], "complexity": "moderate" }, { "id": "class:static/js/components/button.js:ButtonComponent", "type": "class", "name": "ButtonComponent", "filePath": "static/js/components/button.js", "lineRange": [ 1, 95 ], "summary": "HTMLElement subclass that renders a configurable button/link element, reacting to observed attribute changes by re-rendering the button's classes, attributes, and content.", "tags": [ "component", "ui", "reactive" ], "complexity": "moderate" }, { "id": "function:static/js/components/button.js:registerButtonComponent", "type": "function", "name": "registerButtonComponent", "filePath": "static/js/components/button.js", "lineRange": [ 97, 99 ], "summary": "Registers the ButtonComponent custom element with the browser's CustomElementRegistry.", "tags": [ "component", "registration" ], "complexity": "simple" }, { "id": "file:static/js/modules/GetHeaderHeight.js", "type": "file", "name": "GetHeaderHeight.js", "filePath": "static/js/modules/GetHeaderHeight.js", "summary": "Measures the main navigation header height and sets a CSS custom property (--hgtHeader) on the document root for use in layout calculations.", "tags": [ "utility", "layout", "css-variables" ], "complexity": "simple" }, { "id": "function:static/js/modules/GetHeaderHeight.js:getHeaderHeight", "type": "function", "name": "getHeaderHeight", "filePath": "static/js/modules/GetHeaderHeight.js", "lineRange": [ 7, 10 ], "summary": "Reads the header navigation element's bounding rect height and applies it as a CSS custom property on the root element.", "tags": [ "utility", "layout", "css-variables" ], "complexity": "simple" }, { "id": "file:static/js/modules/Navigation.js", "type": "file", "name": "Navigation.js", "filePath": "static/js/modules/Navigation.js", "summary": "Comprehensive navigation module handling mobile menu toggling, desktop dropdown menus, keyboard accessibility (escape key, focus management), and a sliding viewport pattern for multi-level mobile navigation with animation.", "tags": [ "service", "navigation", "accessibility", "mobile" ], "complexity": "complex" }, { "id": "class:static/js/modules/Navigation.js:Navigation", "type": "class", "name": "Navigation", "filePath": "static/js/modules/Navigation.js", "lineRange": [ 16, 574 ], "summary": "Main navigation controller class managing mobile menu toggle, desktop dropdown behavior, ARIA expanded states, blur/escape-key dismissal, and a sliding viewport system for multi-level mobile navigation with back-button and animation support.", "tags": [ "navigation", "accessibility", "mobile", "event-handler" ], "complexity": "complex" }, { "id": "file:static/js/modules/TagExternalLinks.js", "type": "file", "name": "TagExternalLinks.js", "filePath": "static/js/modules/TagExternalLinks.js", "summary": "Utility function that identifies external anchor links and enhances them with accessibility attributes, target=_blank, rel=noopener noreferrer, and a custom CSS class for visual styling.", "tags": [ "utility", "accessibility", "security" ], "complexity": "simple" }, { "id": "function:static/js/modules/TagExternalLinks.js:tagExternalLinks", "type": "function", "name": "tagExternalLinks", "filePath": "static/js/modules/TagExternalLinks.js", "lineRange": [ 19, 37 ], "summary": "Scans all anchor elements for external hosts and applies ARIA labels, target, rel, and CSS class attributes for security and accessibility.", "tags": [ "utility", "accessibility", "security" ], "complexity": "simple" }, { "id": "file:tests/site-a11y.spec.js", "type": "file", "name": "site-a11y.spec.js", "filePath": "tests/site-a11y.spec.js", "summary": "Playwright accessibility test suite using Axe-core to scan the homepage, blog index, and 404 page for WCAG 2.x and 2.2 violations across levels A and AA.", "tags": [ "test", "accessibility", "a11y" ], "complexity": "moderate" }, { "id": "file:playwright.config.js", "type": "file", "name": "playwright.config.js", "filePath": "playwright.config.js", "summary": "Playwright test configuration defining test directory, parallel execution, CI-specific retry/worker settings, Chromium-only browser project, and HTML reporter.", "tags": [ "configuration", "testing", "test-runner" ], "complexity": "moderate" }, { "id": "pipeline:.github/workflows/phpcs.yml", "type": "pipeline", "name": "phpcs.yml", "filePath": ".github/workflows/phpcs.yml", "summary": "GitHub Actions workflow that runs PHP CodeSniffer checks on pull requests using PHP 8.2, installing Composer dependencies and reporting violations as PR annotations via cs2pr.", "tags": [ "ci-cd", "code-quality", "php" ], "complexity": "simple" }, { "id": "pipeline:.github/workflows/todos.yml", "type": "pipeline", "name": "todos.yml", "filePath": ".github/workflows/todos.yml", "summary": "GitHub Actions workflow that syncs code TODO comments with GitHub Issues on push (excluding markdown files), using the TODO-Sync action.", "tags": [ "ci-cd", "automation", "task-management" ], "complexity": "simple" }, { "id": "pipeline:.github/workflows/wpengine.yml", "type": "pipeline", "name": "wpengine.yml", "filePath": ".github/workflows/wpengine.yml", "summary": "GitHub Actions workflow for deploying the theme to WP Engine, installing Composer and npm dependencies, running the build task, and rsyncing the production artifact to the WP Engine server.", "tags": [ "ci-cd", "deployment", "infrastructure" ], "complexity": "moderate" }, { "id": "config:content/basic-wp-test-content.xml", "type": "config", "name": "basic-wp-test-content.xml", "filePath": "content/basic-wp-test-content.xml", "summary": "WordPress WXR export file containing test content (posts, pages, comments, categories) for seeding a local development environment with realistic data.", "tags": [ "configuration", "test-data", "wordpress" ], "complexity": "complex" } ], "edges": [ { "source": "file:functions.php", "target": "function:functions.php:regACFBlocks", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:functions.php", "target": "function:functions.php:regACFBlocks", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:header.php", "target": "file:views/components/nav-aux.php", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:header.php", "target": "file:views/components/nav-main.php", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:header.php", "target": "file:views/partials/page-hero.php", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:footer.php", "target": "file:views/partials/social-media.php", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:lib/class-acf.php", "target": "class:lib/class-acf.php:ACF", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/class-acf.php", "target": "class:lib/class-acf.php:ACF", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/class-breadcrumbs.php", "target": "class:lib/class-breadcrumbs.php:Breadcrumbs", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/class-breadcrumbs.php", "target": "class:lib/class-breadcrumbs.php:Breadcrumbs", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/class-enqueue.php", "target": "class:lib/class-enqueue.php:Enqueue", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/class-enqueue.php", "target": "class:lib/class-enqueue.php:Enqueue", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/class-menuitems.php", "target": "class:lib/class-menuitems.php:MenuItems", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/class-menuitems.php", "target": "class:lib/class-menuitems.php:MenuItems", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/class-resources.php", "target": "class:lib/class-resources.php:Resources", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/class-resources.php", "target": "class:lib/class-resources.php:Resources", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/show-template.php", "target": "class:lib/show-template.php:ShowTemplate", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/show-template.php", "target": "class:lib/show-template.php:ShowTemplate", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/extras.php", "target": "function:lib/extras.php:getChildrenPages", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/extras.php", "target": "function:lib/extras.php:createOwnerRole", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/extras.php", "target": "function:lib/extras.php:getTheTitle", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/extras.php", "target": "function:lib/extras.php:divWrapper", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:getFieldValue", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:blockWrapperAttributes", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:customMenuOrder", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:blockCategories", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:escEmbeds", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:strposArray", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:customExcerpt", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:getFieldValue", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:blockWrapperAttributes", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/helpers.php", "target": "function:lib/helpers.php:customExcerpt", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:lib/hooks.php", "target": "function:lib/hooks.php:init", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/search-features.php", "target": "function:lib/search-features.php:searchResultFilter", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/search-features.php", "target": "function:lib/search-features.php:dedupe", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/search-features.php", "target": "function:lib/search-features.php:postSort", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:lib/search-features.php", "target": "function:lib/search-features.php:searchResultFilter", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "function:lib/search-features.php:searchResultFilter", "target": "function:lib/search-features.php:dedupe", "type": "calls", "direction": "forward", "weight": 0.8 }, { "source": "function:lib/search-features.php:searchResultFilter", "target": "function:lib/search-features.php:postSort", "type": "calls", "direction": "forward", "weight": 0.8 }, { "source": "function:lib/helpers.php:customExcerpt", "target": "function:lib/helpers.php:strposArray", "type": "calls", "direction": "forward", "weight": 0.8 }, { "source": "file:functions.php", "target": "file:lib/activation.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/class-acf.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/class-breadcrumbs.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/class-enqueue.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/class-menuitems.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/class-resources.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/extras.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/helpers.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/hooks.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/search-features.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:functions.php", "target": "file:lib/show-template.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:header.php", "target": "file:lib/helpers.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:footer.php", "target": "file:lib/helpers.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:search.php", "target": "file:lib/search-features.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:theme.json", "target": "file:style.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:theme.json", "target": "file:functions.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:style.css", "target": "file:functions.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/accordion/block.json", "target": "file:views/blocks/accordion/accordion.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/accordion/block.json", "target": "file:views/blocks/accordion/accordion.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/boilerplate/block.json", "target": "file:views/blocks/boilerplate/boilerplate.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/boilerplate/block.json", "target": "file:views/blocks/boilerplate/boilerplate.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/button/block.json", "target": "file:views/blocks/button/button.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/buttons/block.json", "target": "file:views/blocks/buttons/buttons.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/contact-info/block.json", "target": "file:views/blocks/contact-info/contact-info.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/contact-info/block.json", "target": "file:views/blocks/contact-info/contact-info.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/grid/block.json", "target": "file:views/blocks/grid/grid.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/grid/block.json", "target": "file:views/blocks/grid/grid.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/grid-cell/block.json", "target": "file:views/blocks/grid-cell/grid-cell.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/grid-cell/block.json", "target": "file:views/blocks/grid-cell/grid-cell.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/buttons/buttons.php", "target": "file:views/blocks/button/button.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/grid/grid.php", "target": "file:views/blocks/grid-cell/grid-cell.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/contact-info/contact-info.php", "target": "config:acf/group_5fd3e006e5da5.json", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/button/button.php", "target": "config:acf/group_5f7f85a2a3e13.json", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/grid/grid.php", "target": "config:acf/group_600f5a9e242c3.json", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/grid-cell/grid-cell.php", "target": "config:acf/group_60106ed700da3.json", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:acf/group_5f7f85a2a3e13.json", "target": "config:views/blocks/button/block.json", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:acf/group_600f5a9e242c3.json", "target": "config:views/blocks/grid/block.json", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:acf/group_60106ed700da3.json", "target": "config:views/blocks/grid-cell/block.json", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:acf/group_60bfdb328901d.json", "target": "config:acf/group_60bfb84ae973c.json", "type": "related", "direction": "forward", "weight": 0.5 }, { "source": "file:views/blocks/accordion/accordion.php", "target": "config:acf/group_5fd3e006e5da5.json", "type": "related", "direction": "forward", "weight": 0.5 }, { "source": "file:views/blocks/homepage-hero/homepage-hero.php", "target": "file:views/blocks/homepage-hero/homepage-hero.css", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/homepage-hero/block.json", "target": "file:views/blocks/homepage-hero/homepage-hero.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/homepage-hero/block.json", "target": "file:views/blocks/homepage-hero/homepage-hero.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/media-text/media-text.php", "target": "file:views/blocks/media-text/media-text.css", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/media-text/block.json", "target": "file:views/blocks/media-text/media-text.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/media-text/block.json", "target": "file:views/blocks/media-text/media-text.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/media-text-innerblocks/media-text-innerblocks.php", "target": "file:views/blocks/media-text-innerblocks/media-text-innerblocks.css", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/media-text-innerblocks/block.json", "target": "file:views/blocks/media-text-innerblocks/media-text-innerblocks.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/media-text-innerblocks/block.json", "target": "file:views/blocks/media-text-innerblocks/media-text-innerblocks.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/page-children/page-children.php", "target": "file:views/blocks/page-children/page-children.css", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/page-children/block.json", "target": "file:views/blocks/page-children/page-children.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/page-children/block.json", "target": "file:views/blocks/page-children/page-children.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:views/blocks/section/section.php", "target": "file:views/blocks/section/section.css", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/section/block.json", "target": "file:views/blocks/section/section.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:views/blocks/section/block.json", "target": "file:views/blocks/section/section.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:views/components/nav-aux.php", "target": "file:views/partials/social-media.php", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:views/components/nav-aux.php", "target": "file:views/forms/search.php", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:views/components/nav-main.php", "target": "file:views/components/nav-main__toggle.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:views/components/menu-items/index.php", "target": "file:views/forms/search.php", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:views/components/menu-items/index.php", "target": "file:views/components/menu-items/has-children.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:views/components/menu-items/index.php", "target": "file:views/components/menu-items/single.php", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "config:acf/group_6261bc658dd80.json", "target": "file:views/blocks/section/section.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:acf/group_645e7cf448e66.json", "target": "file:views/blocks/media-text/media-text.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:acf/group_645e7cf448e66.json", "target": "file:views/blocks/media-text-innerblocks/media-text-innerblocks.php", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "file:styles/base/index.css", "target": "file:styles/base/global.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/base/index.css", "target": "file:styles/base/colors.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/base/index.css", "target": "file:styles/base/prose.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/base/index.css", "target": "file:styles/base/typography.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/base/index.css", "target": "file:styles/base/skip-link.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/base/index.css", "target": "file:styles/base/misc.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/base/index.css", "target": "file:styles/base/forms.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/base/index.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/base/break-out.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/navigation/index.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/fonts/lineicons.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/components/index.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/blocks/index.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/components/index.css", "target": "file:styles/components/site-header.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/components/index.css", "target": "file:styles/components/breadcrumbs.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/components/index.css", "target": "file:styles/components/post-list.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/components/index.css", "target": "file:styles/components/sidebar.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/components/index.css", "target": "file:styles/components/pagination.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/components/index.css", "target": "file:styles/components/site-footer.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/blocks/index.css", "target": "file:styles/blocks/buttons.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/blocks/index.css", "target": "file:styles/blocks/core.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/navigation/index.css", "target": "file:styles/navigation/nav-functional.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/navigation/index.css", "target": "file:styles/navigation/nav-aux.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/navigation/index.css", "target": "file:styles/navigation/nav-main-default.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/navigation/index.css", "target": "file:styles/navigation/nav-mobile-sliding.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/navigation/index.css", "target": "file:styles/navigation/nav-footer.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "config:package.json", "target": "file:styles/blocks/buttons.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:package.json", "target": "file:styles/fonts/lineicons.css", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:composer.json", "target": "config:.phpcs.xml", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "config:.phpcs.xml", "target": "config:composer.json", "type": "related", "direction": "forward", "weight": 0.5 }, { "source": "config:.env.example", "target": "config:package.json", "type": "configures", "direction": "forward", "weight": 0.6 }, { "source": "document:README.md", "target": "file:styles/components/index.css", "type": "documents", "direction": "forward", "weight": 0.5 }, { "source": "document:README.md", "target": "file:styles/blocks/index.css", "type": "documents", "direction": "forward", "weight": 0.5 }, { "source": "document:README.md", "target": "file:styles/navigation/index.css", "type": "documents", "direction": "forward", "weight": 0.5 }, { "source": "document:README.md", "target": "file:styles/fonts/lineicons.css", "type": "documents", "direction": "forward", "weight": 0.5 }, { "source": "document:README.md", "target": "config:package.json", "type": "documents", "direction": "forward", "weight": 0.5 }, { "source": "document:README.md", "target": "config:composer.json", "type": "documents", "direction": "forward", "weight": 0.5 }, { "source": "file:static/js/admin.js", "target": "file:static/js/components/button.js", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:static/js/admin.js", "target": "function:static/js/admin.js:app", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:static/js/theme.js", "target": "file:static/js/components/button.js", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:static/js/theme.js", "target": "file:static/js/components/backToTop.js", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:static/js/theme.js", "target": "file:static/js/modules/GetHeaderHeight.js", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:static/js/theme.js", "target": "file:static/js/modules/TagExternalLinks.js", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:static/js/theme.js", "target": "file:static/js/modules/Navigation.js", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:static/js/components/backToTop.js", "target": "class:static/js/components/backToTop.js:BackToTopButton", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:static/js/components/backToTop.js", "target": "function:static/js/components/backToTop.js:registerBackToTopButton", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:static/js/components/backToTop.js", "target": "function:static/js/components/backToTop.js:registerBackToTopButton", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:static/js/components/button.js", "target": "class:static/js/components/button.js:ButtonComponent", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:static/js/components/button.js", "target": "function:static/js/components/button.js:registerButtonComponent", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:static/js/components/button.js", "target": "function:static/js/components/button.js:registerButtonComponent", "type": "exports", "direction": "forward", "weight": 0.8 }, { "source": "file:static/js/modules/GetHeaderHeight.js", "target": "function:static/js/modules/GetHeaderHeight.js:getHeaderHeight", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:static/js/modules/Navigation.js", "target": "class:static/js/modules/Navigation.js:Navigation", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:static/js/modules/TagExternalLinks.js", "target": "function:static/js/modules/TagExternalLinks.js:tagExternalLinks", "type": "contains", "direction": "forward", "weight": 1 }, { "source": "file:bin/.build.js", "target": "file:bin/.utils.js", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:bin/.watch.js", "target": "file:bin/.utils.js", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "file:tests/site-a11y.spec.js", "target": "file:playwright.config.js", "type": "depends_on", "direction": "forward", "weight": 0.6 }, { "source": "pipeline:.github/workflows/wpengine.yml", "target": "file:bin/.build.js", "type": "triggers", "direction": "forward", "weight": 0.6 }, { "source": "pipeline:.github/workflows/phpcs.yml", "type": "triggers", "target": "pipeline:.github/workflows/wpengine.yml", "direction": "forward", "weight": 0.5 }, { "source": "file:styles/theme.css", "target": "file:styles/navigation/index.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/fonts/lineicons.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/components/index.css", "type": "imports", "direction": "forward", "weight": 0.7 }, { "source": "file:styles/theme.css", "target": "file:styles/blocks/index.css", "type": "imports", "direction": "forward", "weight": 0.7 } ], "layers": [ { "id": "layer:entry", "name": "Entry", "description": "Theme bootstrap and WordPress entry points that initialize the theme and declare its identity to WordPress", "nodeIds": [ "file:functions.php", "file:style.css" ] }, { "id": "layer:ui", "name": "UI Templates and Components", "description": "WordPress template hierarchy files, Gutenberg blocks (with their PHP templates, CSS, and block.json manifests), reusable components, navigation partials, forms, and SVG icons that render the front-end presentation layer", "nodeIds": [ "file:header.php", "file:footer.php", "file:front-page.php", "file:index.php", "file:page.php", "file:search.php", "file:single.php", "file:404.php", "file:sidebar.php", "file:sidebar-page.php", "file:views/blocks/accordion/accordion.php", "file:views/blocks/accordion/accordion.css", "config:views/blocks/accordion/block.json", "file:views/blocks/boilerplate/boilerplate.php", "file:views/blocks/boilerplate/boilerplate.css", "config:views/blocks/boilerplate/block.json", "file:views/blocks/button/button.php", "config:views/blocks/button/block.json", "file:views/blocks/buttons/buttons.php", "config:views/blocks/buttons/block.json", "file:views/blocks/contact-info/contact-info.php", "file:views/blocks/contact-info/contact-info.css", "config:views/blocks/contact-info/block.json", "file:views/blocks/grid/grid.php", "file:views/blocks/grid/grid.css", "config:views/blocks/grid/block.json", "file:views/blocks/grid-cell/grid-cell.php", "file:views/blocks/grid-cell/grid-cell.css", "config:views/blocks/grid-cell/block.json", "file:views/blocks/homepage-hero/homepage-hero.php", "file:views/blocks/homepage-hero/homepage-hero.css", "config:views/blocks/homepage-hero/block.json", "file:views/blocks/media-text/media-text.php", "file:views/blocks/media-text/media-text.css", "config:views/blocks/media-text/block.json", "file:views/blocks/media-text-innerblocks/media-text-innerblocks.php", "file:views/blocks/media-text-innerblocks/media-text-innerblocks.css", "config:views/blocks/media-text-innerblocks/block.json", "file:views/blocks/page-children/page-children.php", "file:views/blocks/page-children/page-children.css", "config:views/blocks/page-children/block.json", "file:views/blocks/section/section.php", "file:views/blocks/section/section.css", "config:views/blocks/section/block.json", "file:views/components/nav-aux.php", "file:views/components/nav-main.php", "file:views/components/nav-main__toggle.php", "file:views/components/menu-items/has-children.php", "file:views/components/menu-items/index.php", "file:views/components/menu-items/single.php", "file:views/forms/search.php", "file:views/partials/page-hero.php", "file:views/partials/social-media.php", "file:views/icons/facebook.php", "file:views/icons/heart.php", "file:views/icons/instagram.php", "file:views/icons/linkedin.php", "file:views/icons/menu.php", "file:views/icons/pinterest.php", "file:views/icons/search.php", "file:views/icons/shop.php", "file:views/icons/shopping-basket.php", "file:views/icons/twitter-.php", "file:views/icons/twitter.php", "file:views/icons/user.php", "file:views/icons/youtube.php" ] }, { "id": "layer:service", "name": "Service Layer", "description": "Theme service classes and utility functions providing core functionality: asset enqueueing, navigation menus, breadcrumbs, ACF configuration, custom post types, search features, WordPress hooks, and helper functions", "nodeIds": [ "file:lib/activation.php", "file:lib/class-acf.php", "file:lib/class-breadcrumbs.php", "file:lib/class-enqueue.php", "file:lib/class-menuitems.php", "file:lib/class-resources.php", "file:lib/extras.php", "file:lib/helpers.php", "file:lib/hooks.php", "file:lib/search-features.php", "file:lib/show-template.php" ] }, { "id": "layer:styling", "name": "Styling", "description": "CSS stylesheets organized into base reset/typography, component-specific styles, block styles, navigation styles, backend/editor styles, and the main theme.css entry point that composes them all via Tailwind CSS directives", "nodeIds": [ "file:styles/base/break-out.css", "file:styles/base/colors.css", "file:styles/base/forms.css", "file:styles/base/global.css", "file:styles/base/index.css", "file:styles/base/misc.css", "file:styles/base/prose.css", "file:styles/base/skip-link.css", "file:styles/base/typography.css", "file:styles/backend/admin.css", "file:styles/backend/editor.css", "file:styles/theme.css", "file:styles/components/breadcrumbs.css", "file:styles/components/index.css", "file:styles/components/pagination.css", "file:styles/components/post-list.css", "file:styles/components/sidebar.css", "file:styles/components/site-footer.css", "file:styles/components/site-header.css", "file:styles/blocks/buttons.css", "file:styles/blocks/core.css", "file:styles/blocks/index.css", "file:styles/navigation/index.css", "file:styles/navigation/nav-aux.css", "file:styles/navigation/nav-footer.css", "file:styles/navigation/nav-functional.css", "file:styles/navigation/nav-main-default.css", "file:styles/navigation/nav-main-mega.css", "file:styles/navigation/nav-mobile-accordion.css", "file:styles/navigation/nav-mobile-sliding.css", "file:styles/fonts/lineicons.css" ] }, { "id": "layer:client-scripts", "name": "Client Scripts", "description": "Frontend JavaScript modules including the theme entry point, navigation toggle, header height detection, external link tagging, back-to-top button, and admin editor scripts", "nodeIds": [ "file:static/js/admin.js", "file:static/js/theme.js", "file:static/js/components/backToTop.js", "file:static/js/components/button.js", "file:static/js/modules/GetHeaderHeight.js", "file:static/js/modules/Navigation.js", "file:static/js/modules/TagExternalLinks.js" ] }, { "id": "layer:data", "name": "Data Layer", "description": "ACF field group JSON schemas that define custom data structures for Gutenberg blocks, enabling version-controlled field group configuration for Advanced Custom Fields", "nodeIds": [ "config:acf/group_5f7f85a2a3e13.json", "config:acf/group_5fd3e006e5da5.json", "config:acf/group_600f5a9e242c3.json", "config:acf/group_60106ed700da3.json", "config:acf/group_60bfb84ae973c.json", "config:acf/group_60bfdb328901d.json", "config:acf/group_6261bc658dd80.json", "config:acf/group_645e51f721207.json", "config:acf/group_645e7cf448e66.json" ] }, { "id": "layer:infrastructure", "name": "Infrastructure", "description": "Build and development tooling, CI/CD pipelines, project configuration, test infrastructure, content fixtures, and documentation that support the development and deployment workflow", "nodeIds": [ "file:bin/.build.js", "file:bin/.utils.js", "file:bin/.watch.js", "pipeline:.github/workflows/phpcs.yml", "pipeline:.github/workflows/todos.yml", "pipeline:.github/workflows/wpengine.yml", "config:package.json", "config:composer.json", "config:.phpcs.xml", "config:.env.example", "config:theme.json", "config:content/basic-wp-test-content.xml", "file:whitelist.php", "file:playwright.config.js", "file:tests/site-a11y.spec.js", "document:README.md" ] } ], "tour": [ { "order": 1, "title": "Project Overview", "description": "Start by reading the README to understand VDI-Starter-v5's purpose: a minimal WordPress theme starter built for custom theme development using Tailwind CSS and ACF blocks. The README outlines the directory structure, core files, development workflows, and coding standards -- providing the map for the rest of this tour.", "nodeIds": [ "document:README.md" ] }, { "order": 2, "title": "Theme Bootstrap", "description": "The functions.php file is the theme's entry point and central hub -- it loads every lib/ module via glob and registers ACF custom Gutenberg blocks on the WordPress init hook. Understanding this file reveals how the entire theme wires together, since every service class and utility is pulled in from here. style.css declares the theme's identity to WordPress.", "nodeIds": [ "file:functions.php", "file:style.css" ] }, { "order": 3, "title": "Service Layer Core", "description": "The lib/ directory contains the theme's service classes that provide foundational functionality. class-enqueue.php manages all frontend and admin asset loading with cache-busting, class-menuitems.php resolves WordPress nav menus into renderable item trees, class-breadcrumbs.php generates context-aware breadcrumb trails with Schema.org markup, and class-acf.php configures ACF JSON load/save paths. These classes are the engine the rest of the theme depends on.", "nodeIds": [ "file:lib/class-enqueue.php", "file:lib/class-menuitems.php", "file:lib/class-breadcrumbs.php", "file:lib/class-acf.php" ] }, { "order": 4, "title": "Hooks and Helpers", "description": "Building on the service classes, hooks.php wires theme features into WordPress via action and filter hooks -- registering menus, widget areas, SEO title filters, and a comprehensive WP head cleanup. Meanwhile helpers.php provides the utility functions used throughout templates, including ACF dot-notation field access, block wrapper attributes, and custom excerpts. Together these files form the glue between WordPress APIs and the theme's presentation layer.", "nodeIds": [ "file:lib/hooks.php", "file:lib/helpers.php" ] }, { "order": 5, "title": "Template Hierarchy", "description": "WordPress uses a template hierarchy to decide which PHP file renders each URL. The theme's templates follow this convention: header.php and footer.php frame every page, front-page.php handles the homepage, index.php renders blog listings, single.php displays individual posts, page.php renders static pages, and search.php shows search results. Each template composes the service layer from Steps 3-4 with reusable components.", "nodeIds": [ "file:header.php", "file:footer.php", "file:front-page.php", "file:index.php", "file:single.php" ] }, { "order": 6, "title": "Navigation Components", "description": "The navigation system is built from composable partials: nav-aux.php renders the auxiliary top-bar menu with social links and search, nav-main.php renders the primary menu with a mobile toggle, and the menu-items/ directory provides recursive templates for rendering navigation items at multiple depths. The MenuItems class from Step 3 feeds structured data into these templates.", "nodeIds": [ "file:views/components/nav-aux.php", "file:views/components/nav-main.php", "file:views/components/menu-items/index.php", "file:views/components/menu-items/has-children.php", "file:views/components/menu-items/single.php" ] }, { "order": 7, "title": "ACF Block Architecture", "description": "The theme's content blocks follow a consistent pattern: each block has a block.json manifest (registration config), a PHP template (rendering logic), and a CSS file (scoped styles). The Section block wraps content with background and layout options, the Grid and Grid-Cell blocks provide responsive column layouts, and the Button/Buttons blocks create styled call-to-action elements. This pattern -- manifest plus template plus styles -- is the blueprint for creating new blocks.", "nodeIds": [ "file:views/blocks/section/section.php", "config:views/blocks/section/block.json", "file:views/blocks/grid/grid.php", "config:views/blocks/grid/block.json", "file:views/blocks/button/button.php" ] }, { "order": 8, "title": "ACF Field Definitions", "description": "Each ACF block is backed by a JSON field group in the acf/ directory that defines the editor UI for content editors. The Global Fields options page (group_5fd3e006e5da5) provides site-wide contact info, social media, and footer settings, while block-specific groups like the Section fields (group_6261bc658dd80) and Grid fields (group_600f5a9e242c3) define per-block editing interfaces. These JSON schemas are version controlled alongside the block templates.", "nodeIds": [ "config:acf/group_5fd3e006e5da5.json", "config:acf/group_6261bc658dd80.json", "config:acf/group_600f5a9e242c3.json" ] }, { "order": 9, "title": "CSS Architecture", "description": "The styling system is organized as a layered cascade: theme.css imports base styles (typography, colors, forms), navigation styles (functional, default, sliding, accordion), component styles (header, footer, breadcrumbs, pagination), and block styles (buttons, core alignment). The base/index.css barrel file loads all foundational partials in order, while theme.json configures the WordPress block editor's color palette, font families, and spacing units.", "nodeIds": [ "file:styles/theme.css", "file:styles/base/index.css", "file:styles/base/typography.css", "file:styles/base/colors.css", "config:theme.json" ] }, { "order": 10, "title": "Client-Side JavaScript", "description": "The frontend JavaScript entry point (theme.js) imports and initializes all interactive modules: Navigation.js handles mobile menu toggling with keyboard accessibility and a sliding viewport pattern, GetHeaderHeight.js sets a CSS custom property for sticky header offset, TagExternalLinks.js enhances external links with accessibility attributes, and backToTop.js provides a scroll-aware button component. The ButtonComponent web element is registered for both frontend and admin contexts.", "nodeIds": [ "file:static/js/theme.js", "file:static/js/modules/Navigation.js", "file:static/js/components/backToTop.js", "file:static/js/components/button.js" ] }, { "order": 11, "title": "Project Configuration", "description": "The build pipeline is defined in package.json with Tailwind CSS v4 compilation, BrowserSync watch mode, and Playwright testing. The .env.example provides local development URL and BrowserSync port settings, while composer.json configures PHP_CodeSniffer with WordPress coding standards. Together these files establish the development workflow from local editing through CSS compilation to deployment.", "nodeIds": [ "config:package.json", "config:composer.json", "config:.env.example" ] }, { "order": 12, "title": "CI/CD and Deployment", "description": "GitHub Actions pipelines automate quality and deployment: phpcs.yml runs PHP CodeSniffer checks on pull requests, wpengine.yml builds the theme (installing Composer and npm dependencies, running the Tailwind build) and deploys the artifact to WP Engine via rsync, and todos.yml syncs code TODO comments to GitHub Issues. The build scripts in bin/ handle Tailwind compilation and BrowserSync watching.", "nodeIds": [ "pipeline:.github/workflows/wpengine.yml", "pipeline:.github/workflows/phpcs.yml", "file:bin/.build.js", "file:bin/.watch.js" ] } ] }