= 1.3.1 =
* Fixed link colours changing after the 1.3.0 update on sites that set a different colour for links and for buttons. Both were being written to the same internal colour slot, so whichever was saved last won and links took the button's colour
* Fixed child themes that swap out the theme's Bootstrap, FlexSlider or Owl Carousel. 1.3.0 renamed those asset handles, which silently turned `wp_dequeue_style( 'bootstrap' )` into a no-op -- the parent's stylesheet came back on top of the child's replacement, with no error to explain it. The old handle names work again, while the rename that stopped plugins suppressing the theme's own stylesheets stays in place

= 1.3.0 =
* Removed the vendored Epsilon customizer framework. It was 144 files and 1.3 MB -- 52% of the theme -- and provided 31 toggle controls, one slider, two customizer sections and the welcome screen. All of those are now built on core WordPress APIs. The download is roughly a third smaller and the theme ships 51 PHP files instead of 88
* Added theme.json, so the palette, type scale and layout widths have a single source of truth that the block editor reads. Colour options in the customizer still work exactly as before -- each one now overrides the matching theme.json value rather than maintaining a second palette
* Fixed "Wide width" and "Full width" doing nothing on blocks. The theme has declared support for them since 2018 without ever shipping the CSS they need
* Fixed images in post content overflowing their column. Bootstrap 3 only makes images responsive via a class that block markup never carries
* Rebuilt the welcome screen and the demo importer on core APIs. The old AJAX endpoint accepted a class name and a method name from the request and called them; dismissals now run through a single handler with a nonce and a capability check
* Fixed 11 customizer controls that would have disappeared entirely if the framework had ever failed to load, because their fallback registrations were incomplete
* Renamed the bootstrap, flexslider, owl.carousel and owl.carousel.theme asset handles to be theme-specific. Generic handles can be claimed by a plugin first, which silently suppresses the theme's own file -- the same fault that blanked every icon on sites running Elementor in 1.2.20
* The block editor now offers the theme's palette, and the editor canvas matches the front end

= 1.2.21 =
* Fixed the back-to-top arrow sitting off-centre in its button. The 36px button's content box was 22px tall and 10px wide after border and padding, so a 18px glyph with a 27px line box could not centre on either axis; measured 2.8px right and 1.9px high before, sub-pixel after
* Fixed one-page section links in the menu, and the page-builder customizer, using site_url() where home_url() was meant. On installs with WordPress in its own subdirectory those pointed at /wp/ instead of the site address
* Added add_theme_support( 'wp-block-styles' ) and add_editor_style(), so core block styles apply on the front end and the editor canvas matches the theme's typography
* Added three block styles (two button styles and a short rule) and two block patterns, built from the theme's own button and colour values
* Removed two orphaned Font Awesome 5 stylesheets that nothing enqueued
* Fixed the arrow on submenu items that have a further submenu sitting well below its label, near the bottom edge of the row. It was centred with the 55px top menu bar's line height rather than the submenu row's, putting it 11.5px too low on desktop and 6px too high on mobile
* Fixed Font Awesome 6 loading its glyphs from a leftover Font Awesome 5.15.3 font directory. The bundled stylesheet asked for "../webfonts/", which resolves out of assets/css/fontawesome6/ and into the old assets/css/webfonts/, so every icon added after 5.15.3 rendered as a blank gap -- the X (Twitter) icon in the footer social links being the visible one
* Removed the orphaned Font Awesome 5 font files, which nothing referenced once the path above was corrected. The release zip drops from 3.16 MB to 1.88 MB
* Fixed the theme's Font Awesome 6 never loading on sites running Elementor or any other plugin that registers the generic "font-awesome" handle. WordPress keeps only the first registration of a handle, so the theme's stylesheet was silently dropped and every fa-brands / fa-solid icon -- the social links, the search button, the menu and pagination arrows -- rendered as a blank box. It now uses its own "shapely-font-awesome" handle
* Fixed the customizer loading Font Awesome from .../shapely/inc/assets/css/..., a path that has never existed, so the customizer's own icons 404'd
* Fixed related posts on portfolio items returning the wrong posts when the portfolio taxonomies are not registered: wp_get_object_terms() returns a WP_Error there, and it was being passed straight into the query
* Regenerated languages/shapely.pot, which had been built before the text domain unification and was missing 86 translatable strings
* Added a version check to the build so style.css, readme.txt, changelog.txt and package.json can no longer drift apart (readme.txt had been left at 1.2.19)
* Fixed the coding-standards CI job, which had been failing to install PHPCS rather than actually checking anything

= 1.2.20 =
* PHP 8.5 compatibility: removed every runtime deprecation and warning raised by the theme
* Verified on WordPress 7.0.2 / PHP 8.5: zero PHP notices across all templates, the customizer, the welcome screen and the block editor
* Verified alongside the Shapely Companion plugin (1.2.10): homepage widget sections, parallax, features, call-to-action and contact all render with zero PHP notices
* Replaced the Grunt build with plain npm scripts (tools/*.mjs): eliminates all 39 npm audit findings (1 critical, 24 high), which came entirely from grunt-contrib-imagemin and grunt-contrib-compress
* Replaced JSHint and the deprecated JSCS with ESLint 10; added Stylelint 17 for CSS
* Fixed the release zip shipping developer files: CLAUDE.md, .scss sources, README.md, tsconfig.json, webpack.config.js and a nested package.json were all being published to users
* Fixed image optimisation never running: the Grunt task was pointed at assets/img/, which does not exist (the images are in assets/images/)
* languages/shapely.pot is now generated with WP-CLI and filtered to the shapely text domain, dropping 83 epsilon-framework strings that could never be translated through it and picking up 19 theme strings the old task missed
* Replaced the dead Travis CI config with GitHub Actions covering PHP 7.4 through 8.5
* package-lock.json and phpcs.ruleset.xml are now tracked instead of gitignored
* Fixed the "Requires at least" header reading "WordPress 6.4" instead of "6.4". The stray prefix made WordPress' minimum-version check pass on every release, so the theme could be activated on WordPress 4.9 where it would fatal
* Added the missing "Domain Path: /languages" header
* Corrected the theme tags: removed five surplus subject tags (WordPress.org allows three), dropped custom-menu, threaded-comments and translation-ready (retired in WordPress 4.6) and three-columns/four-columns (not actual content layouts), and added custom-header, grid-layout and wide-blocks, which the theme does support
* Rewrote the style.css description: shorter, factual, and without the two typos it had carried since 2016
* Moved the version headers out of the functions.php docblock; style.css is the only file WordPress reads them from and the two copies had drifted
* Aligned readme.txt's Theme URI, Author and version fields with style.css
* Featured-image links in the blog, search and portfolio listings now carry an accessible name; when an attachment has no alt text WordPress emits alt="", which left those links unnamed
* Fixed FlexSlider and OwlCarousel calling jQuery event aliases (.blur/.focus/.resize) and jQuery.type that jQuery 4 removes
* Fixed a duplicate id="main" and a duplicate role="main" landmark on the search, 404 and portfolio archive templates
* Fixed pagination arrows using an invalid <icon> element, leaving the prev/next links with no accessible name
* Fixed the back-to-top link, related-posts carousel arrows and related-posts thumbnails having no accessible name
* Fixed the search results template hardcoding a placeholder image, ignoring the placeholder customizer settings
* Fixed an empty author byline linking to a bare /author/ URL on posts with no valid author
* Fixed pagination nesting a <nav> landmark inside another <nav>
* Fixed fatal-prone breadcrumb code that read an array offset on `false` and an undefined variable when Rank Math was active without Yoast
* Fixed `strcasecmp(): Passing null` deprecation in the nav walker that fired once per menu item on every page load
* Fixed "Attempt to read property on null" in the excerpt and thumbnail helpers when no post is in scope
* Security: escaped unescaped portfolio term names, thumbnail URLs in `style` attributes, header nav style, and nav-menu fallback markup
* Security: rebuilt the search form so it no longer reflects filtered `<form>` attributes into the page
* Fixed excerpts splitting multibyte characters mid-glyph and blanking out on single-word content
* Fixed category/archive widget counts mangling any name or URL containing a closing parenthesis
* Fixed brand icons (Twitter/X, Facebook, GitHub, Dribbble, Vimeo) rendering blank under Font Awesome 6
* Fixed the missing `fa-folder-open-o` post-category icon, removed in Font Awesome 5+
* Fixed the RSS social icon rendering blank by using the solid rather than the brands font family
* Social links now expose an accessible name; the label span was previously rendered empty
* Fixed the "Skip to content" link never moving keyboard focus (`element.trigger()` on a DOM node)
* Fixed the header search panel closing on focus; its handlers targeted ids the form never rendered
* Fixed plugin detection failing on installs with a relocated `wp-content` directory
* Fixed lazy loading being stripped from listing images by an outdated kses allowlist
* Fixed the Builder/portfolio archive missing its Bootstrap `.row` wrapper
* Fixed the wide blog layout ignoring the placeholder-image customizer settings
* Fixed malformed `</<div>` markup in the Home page template
* Replaced `get_page_by_title()`, deprecated in WordPress 6.2, in the demo importer
* Forward compatibility with jQuery 4: replaced removed event shorthands and shimmed the aliases FlexSlider still uses
* Theme class is now a singleton; it was instantiated three times, registering every admin hook and the Epsilon framework three times over
* Assets now carry the theme version so browsers pick up CSS/JS changes after an update
* Customizer CSS is attached via `wp_add_inline_style()` instead of a raw `wp_head` style block
* Added `responsive-embeds` and `align-wide` block editor support
* Removed dead code: duplicate `require` block and a plugin-callback loop that never had callbacks to run

= 1.2.19 =
* Fixed Builder Page template functionality that wasn't working properly
* Added proper initialization for the Shapely_Builder class
* Removed debug code and improved code quality
* Enhanced widget area registration for Builder Page templates
* Fixed issues with dynamic sidebar registration for Builder Pages
* Improved error handling in theme template files

= 1.2.18 =
* Fixed issue with "Import Demo Content" functionality
* Added proper null checks in contact form widget to prevent PHP warnings
* Improved error handling in demo content importer
* Enhanced AJAX response handling for better user feedback
* Fixed static frontpage setting during demo import

= 1.2.17 =
* Added a new customizer setting to control placeholder images for posts without featured images
* Added an option to upload custom placeholder images
* Added a global setting to show/hide categories across all blog layouts
* Improved customizer UI with clearer section headings for blog hero image
* Fixed issue with WP_Customize_Control class loading
* Added custom CSS for better visual separation in customizer settings
* Fixed compatibility issues with WordPress 6.8

= 1.2.16 =
* Added accessibility improvements for dropdown menu arrows
* Fixed dropdown menu arrow display for submenu items
* Improved menu item spacing for items with children
* Updated Font Awesome to version 6
* Enhanced CSS for better dropdown menu visibility
* Fixed navigation menu styling for mobile devices
* Improved theme documentation in README.md
* Added Git submodule information and setup instructions
* Added support for Kali Forms plugin
* Fixed custom excerpt function to properly handle content
* Enhanced thumbnail handling with fallback placeholder images
* Improved theme customizer with selective refresh support
* Updated styling for buttons and form elements
* Fixed header text color customization
* Added responsive design improvements

## 1.2.14
	Breadcrumbs Support For Rank Math Plugin
	Fix php 8.0 deprecation issue and more

## 1.2.13 
	Bug fixed issue #271
	updated font awesome to 5
	Merged with wpChill

## 1.2.12 
	Improves : Escaping

## 1.2.11
	Compatibility with jQuery 3.0

## 1.2.10
	Updated dependacies
	Tested with WP 5.6

## 1.2.8
	Security Fix

## 1.2.7
	Improved accesibility with keyboard navigation.
	Improved compatibility with Kali Forms plugin.

### 1.2.6
	Replace notification design with core design.
	Removed demo.json
	Fixed "About Shapely" page.

### 1.2.5
	Added Modula to recommended plugins

### 1.2.4
	Implemented milestone https://github.com/ColorlibHQ/shapely/milestone/8?closed=1

### 1.2.2
	Implemented milestone https://github.com/puikinsh/shapely/milestone/6?closed=1

### 1.2.1
	Implemented milestone https://github.com/puikinsh/shapely/milestone/5

### 1.1.6
	Implemented milestone https://github.com/puikinsh/shapely/milestone/2

### 1.1.0

	#119 - changed prefixed
	#120 - fixed
	#121 - fixed
	#122 - fixed
	#123 - fixed
	#124 - fixed
	#125 - fixed
	#126 - added a notice in readme file about this limitation
	#128 - fixed
	#129 - fixed
	#130 - fixed
	#131 - fixed
	#112 - #1 - there's nothing wrong in using abspath, it's a WordPress core define, nothing added by the theme/plugin. Changed it to incorporate MU
	#2 - removed from global scope
        #3 - removed custom sanitize for hex
	#4 - removed shapely_sanitize_strip_slashes
	#5 - escaped variable
	#6 - I don't think Colorlib and WordPress are translatable
	#7 - escaped where needed
	#8 - removed registration of menu from socialnav.php
	#9 - removed theme support for post formats
	#10 - escaped where needed
	#11 - translated
        #12 - escaped where needed
	#79 - restyled <q> a little bit ( added a bg, set font style to italic )
	#66 - woo-setup.php was not deleted from the theme files, fixed
	#63 - escaped echoes
	#52 - changed esc_html to wp_kses_post to allow some html tags
	#51 - related to #66, deleted woo-setup.php
	#47 - added support for Post thumb in page as well
	#35 - fixed in the first update
	#46 - reworked script that fixes the navbar top ( listen event, wait for a specific offset, animate it )
	#48 - added prev / next for content
	#29 - this does not happen in the current version of the theme
	#50 - Content is escaped with wp_kses_post where appropriate
	#49 - seems to be fixed in the current theme version ( also, added a clearfix after the section - just in case )
	#39 - sticky navigation removed for hamburger menus ( larger menus could not be used, you can't scroll in a fixed element )
	#30 - archive page did not implement layout styles
	#45 - added border-bottom checkbox toggle for widget
	#79 - added epsilon toggles for widgets
	#95 - changed import demo content to required action
	#103 - removed margin bottom from the widgets only in the main content
	#16 - added the first option

### 1.0.7
<a href="https://github.com/puikinsh/shapely/issues">Issues</a>
	#23 - html was missing a closing tag
	#85 - sanitized with strip_tags
	#85 - sanitized dropdown with strip_tags
	#56 - removed admin styles
	#66 - moved to plugin
	#79 - re-added the quotes for q element
	#82 - this was no longer used, widgets were moved to a plugin
	#68 - this should be in the plugin repo, fixed
	#93 #47 - Post thumb is now shown in content ( above the title )
	#63 - escapes/sanitizes where needed
	#60 - Default string is now translatable
	#58 - removed sanitization function that's no longer used
	#28 - this should be in the companion plugin, fixed.

### 1.0.6
<a href="https://github.com/puikinsh/shapely/issues">Issues</a>

 #83 - don't register widgets if jetpack is not installed/activated (testimonials and portfolio)
 #82 - changed loading files method
 #69 - changed pagination

### 1.0.5
<a href="https://github.com/puikinsh/shapely/issues">Issues</a>

 #62 - done
 #89 - in plugin
 #87 - removed from theme - ADDED TO COMPANION
 #86 - widgets are in the plugin
 #85 - sanitized the dropdown instead of escaping it
 #84 - found in the plugin
 #82 - widget files are found in the plugin, this is no longer an issue
 #81 - removed if condition in the social menu
 #80 - followed guide
 #79 - already fixed
 #78 - removed REM font size declaration, fixed
 #77 - figure had a margin left/right that was messing up the columns, changed it to padding . works
 #76 - added tags in single post
 #75 - seems to be fixed
 #74 - redone title section ( if yoast seo is not installed/breadcrumbs not used, title will have a 12 column size )
 #72 - removed custom css
 #71 - remooved from extras.php
 #67 - no longer relevant - widgets are in the companion plugin now
 #65 - moved to style.css
 #61 - prefixed
 #60 - made them translation ready
 #59 - removed sanitization
 #58 - added custom logo functionality
 #57 - moved them in the after theme setup hook
 #55 - removed one of the enqueues
 #54 - changed handler names
 #53 - license changed to gpl v3
 #52 - this should definitely be esc_html
 #51 - changed get_template_directory to get_stylesheet_directory (allowed to be overridden in child themes) - but i don`t think this is quite OK
 #50 - echo esc_html(). esc_attr is used inside html tags (value=<?php echo esc_attr() ?>, etc)
 #47 - design? or just throw it in there?
 #44 - no longer relevant
 #43 - no longer relevant ?
 #37 - fixed problems during activation
 #35 - no longer relevant, widgets moved to plugin
 #21 - added custom header image
 #25 - fixed

