{
  "theme": "United Pets",
  "source": "reference/United-Pets",
  "target": "themes/united-pets",
  "architecture": "hybrid-gutenberg",
  "allowedGlobalDeviations": [
    "Static .html URLs become WordPress permalinks.",
    "Static navigation becomes wp_nav_menu output while retaining source classes/Bootstrap disclosure hooks.",
    "Contact and newsletter source forms become nonce-protected WordPress handlers; source sendmail.php/PHPMailer runtime is not shipped.",
    "Relative source asset URLs resolve through get_template_directory_uri().",
    "Dynamic Blog/Services/Adoption/Events/Team records use WordPress posts/CPTs and featured images/meta.",
    "The runtime plugin bundle is mechanically identical to source/js/plugins.js except its obsolete Mailchimp-only tail is omitted because newsletter submission migrated to nonce-protected WordPress storage; visual, carousel, gallery, animation, filtering and map plugin code remains unchanged.",
    "The supplied Elements stylesheet references /img/example.jpg from the web root; WordPress compatibility CSS resolves that same bundled image from source/img/example.jpg to prevent a 404 without changing the component DOM.",
    "WordPress compatibility JavaScript adds Enter/Space/ArrowDown/Escape keyboard operation and aria-expanded state to the supplied hover-driven desktop dropdown navigation; mouse layout and source DOM remain unchanged.",
    "WordPress editor previews are generated from the same frozen source fragments locally in Gutenberg instead of requesting ServerSideRender block-renderer REST previews; frontend render ownership remains server-side and source-preserving.",
    "Repeated service, adoption, blog and team carousel cards receive a narrow equal-height compatibility invariant so content-length differences do not create uneven card bottoms.",
    "The Elements component showcase uses accessible dark-blue palette variants for source combinations that fail WCAG contrast, labels source progressbars, and underlines attribution links; component DOM/structure is preserved.",
    "Demo import is a deterministic reset-and-rebuild operation: WordPress pages/posts/theme content types/media/comments/navigation are cleared before the supplied demo content and dedicated page templates are recreated.",
    "Carousel card shells are re-equalized at runtime after Owl initialization/load/resize so content-length and carousel geometry cannot leave visibly unequal repeated cards."
  ],
  "components": [
    {
      "id": "global.topbar",
      "sourceFile": "index.html",
      "selector": ".top-bar",
      "css": [
        "vendor/bootstrap/css/bootstrap.min.css",
        "css/style.css",
        "css/plugins.css",
        "styles/maincolors.css"
      ],
      "js": [],
      "output": "header.php",
      "editable": [
        "address",
        "email",
        "phone",
        "social links"
      ],
      "deviations": [
        "Customizer-backed content"
      ]
    },
    {
      "id": "global.navbar",
      "sourceFile": "index.html",
      "selector": ".navbar.container-fluid",
      "css": [
        "vendor/bootstrap/css/bootstrap.min.css",
        "css/style.css",
        "styles/maincolors.css"
      ],
      "js": [
        "vendor/bootstrap/js/bootstrap.min.js",
        "js/custom.js"
      ],
      "output": "header.php + United_Pets_Nav_Walker",
      "editable": [
        "custom logo",
        "menu hierarchy/labels/URLs"
      ],
      "deviations": [
        "WordPress menu IDs/classes and current-menu state"
      ]
    },
    {
      "id": "global.newsletter",
      "sourceFile": "index.html",
      "selector": ".footer-bg",
      "css": [
        "css/style.css",
        "styles/maincolors.css"
      ],
      "js": [],
      "output": "footer.php + forms.php",
      "editable": [
        "heading",
        "description",
        "email"
      ],
      "deviations": [
        "Mailchimp action replaced with local WordPress subscription storage"
      ]
    },
    {
      "id": "global.footer",
      "sourceFile": "index.html",
      "selector": "footer.bg-light.pattern1",
      "css": [
        "css/style.css",
        "styles/maincolors.css"
      ],
      "js": [
        "js/custom.js"
      ],
      "output": "footer.php",
      "editable": [
        "logo",
        "about text",
        "contact info",
        "hours",
        "social links"
      ],
      "deviations": [
        "Dynamic year/site URL"
      ]
    },
    {
      "id": "global.page-banner",
      "sourceFile": "about.html",
      "selector": ".jumbotron.jumbotron-fluid",
      "css": [
        "css/style.css",
        "styles/maincolors.css"
      ],
      "js": [],
      "output": "template-parts/page-banner.php",
      "editable": [
        "title",
        "breadcrumb"
      ],
      "deviations": [
        "WordPress current object/breadcrumb URLs"
      ]
    },
    {
      "id": "front.slider",
      "sourceFile": "index.html",
      "selector": "#slider",
      "css": [
        "css/style.css",
        "vendor/layerslider/css/layerslider.css"
      ],
      "js": [
        "vendor/layerslider/js/greensock.js",
        "vendor/layerslider/js/layerslider.transitions.js",
        "vendor/layerslider/js/layerslider.kreaturamedia.jquery.js",
        "vendor/layerslider/js/layerslider.load.js"
      ],
      "output": "Gutenberg source fragment front-slider",
      "editable": [
        "slide text",
        "buttons",
        "media"
      ],
      "deviations": [
        "WordPress-resolved links/media URLs"
      ]
    },
    {
      "id": "front.intro",
      "sourceFile": "index.html",
      "selector": "#intro-home",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "Gutenberg source fragment front-intro",
      "editable": [
        "text",
        "media",
        "links"
      ],
      "deviations": []
    },
    {
      "id": "front.call",
      "sourceFile": "index.html",
      "selector": "#call-widget",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "Gutenberg source fragment front-call",
      "editable": [
        "text",
        "link"
      ],
      "deviations": []
    },
    {
      "id": "front.services",
      "sourceFile": "index.html",
      "selector": "#services-home",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "dynamic Gutenberg services block",
      "editable": [
        "heading",
        "service selection/query"
      ],
      "deviations": [
        "Cards resolve up_service records"
      ]
    },
    {
      "id": "front.about",
      "sourceFile": "index.html",
      "selector": "#about-home",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "Gutenberg source fragment front-about",
      "editable": [
        "text",
        "media",
        "links"
      ],
      "deviations": []
    },
    {
      "id": "front.adoptions",
      "sourceFile": "index.html",
      "selector": "#adoption-home",
      "css": [
        "css/style.css"
      ],
      "js": [
        "js/plugins.js"
      ],
      "output": "dynamic Gutenberg adoption block",
      "editable": [
        "heading",
        "pet query"
      ],
      "deviations": [
        "Cards resolve up_pet records"
      ]
    },
    {
      "id": "front.gallery",
      "sourceFile": "index.html",
      "selector": "#gallery-home",
      "css": [
        "css/style.css",
        "css/plugins.css"
      ],
      "js": [
        "js/plugins.js"
      ],
      "output": "Gutenberg source fragment front-gallery",
      "editable": [
        "images",
        "captions/links"
      ],
      "deviations": []
    },
    {
      "id": "front.features",
      "sourceFile": "index.html",
      "selector": "#feature-section",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "Gutenberg source fragment front-features",
      "editable": [
        "text",
        "features"
      ],
      "deviations": []
    },
    {
      "id": "front.blog",
      "sourceFile": "index.html",
      "selector": "#blogprev-home",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "dynamic Gutenberg blog block",
      "editable": [
        "heading",
        "post query"
      ],
      "deviations": [
        "Cards resolve native posts"
      ]
    },
    {
      "id": "front.team",
      "sourceFile": "index.html",
      "selector": "#team-home",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "dynamic Gutenberg team block",
      "editable": [
        "heading",
        "team query"
      ],
      "deviations": [
        "Cards resolve up_team_member records"
      ]
    },
    {
      "id": "front.counter",
      "sourceFile": "index.html",
      "selector": "#counter-section",
      "css": [
        "css/style.css"
      ],
      "js": [
        "js/counter.js"
      ],
      "output": "Gutenberg source fragment front-counter",
      "editable": [
        "numbers",
        "labels"
      ],
      "deviations": []
    },
    {
      "id": "front.contact",
      "sourceFile": "index.html",
      "selector": "#contact-home",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "contact Gutenberg block + forms.php",
      "editable": [
        "heading",
        "contact copy",
        "form labels"
      ],
      "deviations": [
        "Source AJAX form replaced by WordPress handler"
      ]
    },
    {
      "id": "archive.pets",
      "sourceFile": "adoption.html",
      "selector": ".page.container #gallery-isotope",
      "css": [
        "css/style.css",
        "css/plugins.css"
      ],
      "js": [
        "js/plugins.js"
      ],
      "output": "archive-up_pet.php",
      "editable": [
        "up_pet records/meta/featured images"
      ],
      "deviations": [
        "WordPress loop/filter URLs"
      ]
    },
    {
      "id": "single.pet",
      "sourceFile": "adoption-single.html",
      "selector": ".page.container",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "single-up_pet.php",
      "editable": [
        "Gutenberg body",
        "pet meta",
        "featured/gallery media"
      ],
      "deviations": [
        "Dynamic record data"
      ]
    },
    {
      "id": "archive.services",
      "sourceFile": "services.html",
      "selector": ".page",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "archive-up_service.php",
      "editable": [
        "up_service records"
      ],
      "deviations": [
        "Dynamic record data"
      ]
    },
    {
      "id": "single.service",
      "sourceFile": "services-single.html",
      "selector": ".page",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "single-up_service.php",
      "editable": [
        "Gutenberg body",
        "featured image",
        "service meta"
      ],
      "deviations": [
        "Dynamic record data"
      ]
    },
    {
      "id": "archive.events",
      "sourceFile": "events.html",
      "selector": ".page.container",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "archive-up_event.php",
      "editable": [
        "up_event records/meta"
      ],
      "deviations": [
        "Dynamic record data"
      ]
    },
    {
      "id": "single.event",
      "sourceFile": "event-single.html",
      "selector": ".page",
      "css": [
        "css/style.css"
      ],
      "js": [
        "js/plugins.js",
        "js/map.js"
      ],
      "output": "single-up_event.php",
      "editable": [
        "Gutenberg body",
        "event date/location/meta"
      ],
      "deviations": [
        "Source OpenStreetMap behavior is retained; map initialization resolves the bundled marker through the WordPress theme URL instead of the static relative path. No API key is required."
      ]
    },
    {
      "id": "archive.team",
      "sourceFile": "team.html",
      "selector": ".page",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "archive-up_team_member.php",
      "editable": [
        "team records/meta"
      ],
      "deviations": [
        "Dynamic record data"
      ]
    },
    {
      "id": "single.team",
      "sourceFile": "team-single.html",
      "selector": ".page.container",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "single-up_team_member.php",
      "editable": [
        "Gutenberg body",
        "role/social/meta"
      ],
      "deviations": [
        "Dynamic record data"
      ]
    },
    {
      "id": "archive.blog",
      "sourceFile": "blog.html",
      "selector": "#blog-home",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "home.php/archive.php",
      "editable": [
        "native posts/categories/featured images"
      ],
      "deviations": [
        "Dynamic WordPress loop"
      ]
    },
    {
      "id": "single.blog",
      "sourceFile": "blog-single.html",
      "selector": ".page",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "single.php",
      "editable": [
        "Gutenberg post body",
        "featured image",
        "comments"
      ],
      "deviations": [
        "Dynamic post metadata/comments"
      ]
    },
    {
      "id": "static.pages",
      "sourceFile": "about.html/about2.html/adoption-stories.html/careers.html/contact*.html/gallery*.html/elements.html",
      "selector": ".page and adjacent source sections",
      "css": [
        "css/style.css",
        "css/plugins.css"
      ],
      "js": [
        "js/plugins.js"
      ],
      "output": "structured source-fragment Gutenberg blocks + page.php",
      "editable": [
        "per-component text/media/URLs"
      ],
      "deviations": [
        "Secure WordPress form handler where a form exists"
      ]
    },
    {
      "id": "error.404",
      "sourceFile": "404.html",
      "selector": ".page.pattern1 #not-found",
      "css": [
        "css/style.css"
      ],
      "js": [],
      "output": "404.php",
      "editable": [
        "theme strings/search"
      ],
      "deviations": [
        "Home/search use WordPress URLs"
      ]
    }
  ]
}
