{
  "slug": "bw-dev",
  "name": "BW Dev",
  "version": "1.13.1",
  "download_url": "https://plugins.bowden.works/wp-content/uploads/plugin-updates/bw-dev-1.13.1.zip",
  "download_hash": "sha256:85409975990772aae7f5590537e46303643e13f37a8afd8f795bde7cdca2587c",
  "download_size": 478776,
  "requires": "6.0",
  "tested": "",
  "requires_php": "7.4",
  "last_updated": "2026-05-29",
  "homepage": "https://plugins.bowden.works/bw-dev/",
  "author": "Bowden Works",
  "description": "Bowden Works dev toolkit — admin columns, favicon, sticky elements, post-link blocks, YouTube embed, menu visibility, SVG uploads, admin notes, and Flywheel auto-update support in one actively-maintained plugin. Required for several site features. See Settings → BW Dev → About.",
  "changelog": "## [1.13.1] - 2026-05-29\n\n### Fixed\n- **Animate Row: blank above-the-fold content on live sites.** Reported on promptvictoria.ca (Flywheel). The module was blanket-stamping `data-aos=\"fade-up\"` on every Kadence row/section, including the hero. AOS's `[data-aos^=fade] { opacity: 0 }` rule kicked in immediately, but AOS's reveal logic reliably failed to add `aos-animate` to elements that were already in the initial viewport (a known weakness with tall heroes, bg-video parents, and transformed ancestors) — leaving the hero stuck at opacity 0 forever, rendering a blank page. **Two fixes:** (1) `applyAnimations()` now skips any element that intersects the initial viewport (`getBoundingClientRect().top < viewportH && bottom > 0`), so above-the-fold rows are never opacity-hidden in the first place — they just appear normally, which is what you want for hero content anyway. (2) Added a `window.load` listener that calls `AOS.refreshHard()` so the offsets-cache is rebuilt after images / iframes / bg videos finish loading and shift the layout (this catches the secondary class of stuck elements just below the fold).\n\n### Changed\n- **Analytics: removed the \"Emit GTM tags\" toggle.** GTM emission is now keyed solely off the `gtm_id` field — non-empty → emit, empty → skip. Eliminates the separate checkbox and the `GTM-NOIDSET` placeholder behavior (placeholder injection no longer happens; an empty field means no GTM markup at all, which is what users expected). One less click to configure. The settings tab also drops the \"Markup that will be emitted\" preview block — it was wall-of-code clutter and the real source of truth is viewing the live site. Migration is implicit: any saved `gtm_enabled` key is ignored. Sites with a non-empty `gtm_id` keep emitting; sites with an empty ID stop (matching the new and clearer behavior). To pause GTM on a live site after this update, clear the GTM ID field (or disable the whole Analytics module on the Modules tab)."
}
