Recent Activities
This page shows what are we working on.
-
head
-
Productpage. Review in progress. 669824
-
BCB featured product component. 0651cf
-
Add styles for featured product details, SKU, and price row in BCB d65f2d
-
BCB accordion styles at product info main. 1a262b
-
Installer. Add accordion for products. 466a5b
-
Add padding to swatch options in product add form for improved layout f10f77
-
Product main info ... in progress bf5c3f
-
Enhance product quantity input with increment/decrement buttons and update styles for better usability 72192e
-
Update product page medium image dimensions to 590x590 012c72
-
Fix minicart styles: set empty counter opacity to 0 79fcd1
-
Increased h2 bottom margin dff6ea
-
Product page action buttons. d008f0
-
Updated footer content links and section titles for improved clarity and user experience 241039
-
BCB homepage: fixed wrong image name b1a4f4
-
Rating stars styles in product listing f17a0f
-
BCB homepage: updated full width banner and sections spacings 2076c7
-
Fixed sort order of product details inside grid listing 9ad360
-
BCB homepage: updated Videos and full width banner sections 072733
-
Product page title font-size. d0987c
-
Footer. Minor fix for ring reval animation. Restore missing divider in footer. (#3) 54cdc4
-
Footer ring reveal animation added (#3) 4a8be8
-
BCB homepage: added animated badges to top banners grid 197e37
-
BCB homepage: added rotation animation for Full Width Banner 1420f9
-
BCB homepage: top banner updated a53bd5
-
Update favicon color 5ea666
-
Update favicon 18d8dc
-
Slightly update footer background. 5fcbfc
-
Footer content update. Add contact block (#3) dea42e
-
Fixed missing minicart overlay on first open (#2) 54feaa
-
BCB homepage: updated Browse categories block dbfa89
-
Breadcrumbs 196469
-
Done with search (#2) d8e0f3
-
Enhance minisearch functionality with slideout behavior and styling adjustments without Ajaxsearch (#2) 8c4a9d
-
Minisearch styles when ajaxsearch disabled... in progress (#2) 259fac
-
Remove unused styles from viewcart action and update empty subtitle styles in minicart (#2) dba7a5
-
Minicart complete (#2) 56efd2
-
Search on desktop (#2) 9c587e
-
BCB homepage: added videos section 7ee864
-
Minicart inprogress (only buttons to adjust)... (#2) c1be91
-
Minicart update in progress.... c3d18b
-
Minicart update in progress... (#2) 55e7b9
-
INstaller. Create dummy CMS block header_panel_info to allow user add custom content (#2) f70d58
-
Adjust minicart counter (#2) 03e843
-
BCB homepage: Added brand logos section b905f1
-
BCB homepage: Added testimonials section 2ab2cf
-
Update newsletter styles: adjust input border and add consent positioning (#2) 02d37d
-
Header. Update search behaviou and look of the result dropown. 993432
-
BCB homepage: Added FAQ a0bfde
-
Add focused search styles. d80f88
-
BCB homepage: added new sections 875068
-
BCB homepage: added ECI and full-width banner d40cfa
-
Top navigation added. 8fa9a3
-
Remove color from menu links dec081
-
Clone currency and store switchers in header slideout menu for improved functionality de36e3
-
Enhance header and newsletter styles for improved layout and responsiveness in header slideout menu. b63dd0
-
Installer. Update header slideout menu styles. 825795
-
Update footer top content HTML to enhance newsletter section styling.
Don't set font familiy for header in Page Builder ba0b81 -
BCB homepage WIP b228af
-
Basic navpro slideout styles 75ac0e
-
Refactor header slideout menu and newsletter styles for improved layout and consistency 3b42ff
-
Header slideout menu... d4f174
-
Listing styles for the list mode and old price update. cbff61
-
Update README.md to clarify usage of `with-bottom-divider` CSS class and provide detailed instructions 1b9ea5
-
Pagination and make with-bottom-divider general. 37ea17
-
Added list banner 5 config; updated installer, moved it to json a43985
-
Add new layout configuration and remove easybanner references; update footer content and styles 87165b
-
Refactor easybanner configuration and installer for product listing banners 8b1d0d
-
Installer. Listing grid banner added. 914c01
-
Add swatches variables and layout styles d59581
-
Update positioning for filter title and content in layered navigation 8cbd21
-
Add image dimensions for product listings and related widgets in view.xml 6985cd
-
layout and styles for category view, product toolbar, shop by button 08fd27
-
Add layered navigation styles and update imports 944ff1
-
Keep working on prodcut listing and category page. 411088
-
Keep working on product listing toolbar. ebcfac
-
Working on product listing and toolbar look. 1ab39d
-
Add Cooper* font 132906
-
Add listing item styles and variables e725b5
-
Product lisnting in progress - grey bg and border radius. 4e7c35
-
Add new variable files for colors, typography, header, footer, icons, navigation, popover, minisearch, and gradient ba122c
-
Refactor footer and newsletter styles for improved consistency and responsiveness d831e4
-
Footer top newsletter - some updates. 452ca5
-
Add footer top content block and styles for newsletter integration (WIP) 128131
-
Footer bottom. 8d58ea
-
Add footer content block and styles for enhanced footer layout 4d6b1b
-
Header. Hide menu on medium screens. Update search look on monile. e0146d
-
Installer. Add navigation slideout menu a89fd5
-
-
head
-
1.8.0
-
chore(release): 1.8.0 da63cd
-
Merge pull request #140 from breezefront/feat/137-build-cost-estimate
feat(content-builder): state the provider, tier and caps behind the build cost estimate (#137) d6c111 -
Merge master into feat/137-build-cost-estimate
Estimate reads the image credential through GeneratorTarget (#138).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 73729f -
Merge pull request #139 from breezefront/feat/136-138-generation-default-on
feat(content-builder): generation on by default, with the image key as a Breeze AI model row (#136, #138) f9755b -
fix(content-builder): no empty brackets on a migrated row (#138)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> bc3564 -
fix(content-builder): say nothing about a switch turned off (#136)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 9554a8 -
test(content-builder): one place that builds ImagePrice (#137)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> c2b186 -
refactor(content-builder): one provider lookup for the estimate (#137)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 2996c9 -
fix(content-builder): name a tier only where it is billed (#137)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 0118db -
chore(content-builder): drop the orphaned image source (#138)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 6955f2 -
fix(content-builder): name the real fallback (#136)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 5ab3f1 -
feat(content-builder): state the provider, tier and caps behind the build cost estimate (#137)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> dce887 -
feat(content-builder): generate images out of the box, falling back to extraction without a key (#136)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 6144e1 -
feat(content-builder): keep the image credential as a Breeze AI model row (#138)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 01dc56
-
-
1.19.1
-
Version 1.19.1
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 2e1f10 -
fix(lazyload): never lazy-load the LCP image (#119)
The lazy-load optimizer skipped only two hardcoded Luma class names
(gallery-placeholder__image, product-image-photo), so on Argento/Breeze
storefronts it added loading="lazy" to the product page main image -
the LCP element. The image kept the theme's fetchpriority="high" while
also being lazy, which delays the LCP request and fails Lighthouse's
"Largest Contentful Paint image was lazily loaded" audit.
Skip any image the page already marks as fetchpriority="high". That is
a theme-agnostic LCP hint, so it also covers themes we do not know
about. Add main-image to the class ignore list as a fallback for themes
that mark the LCP element without setting fetchpriority.
Found on minisport (Argento/Breeze): enabling the optimizer pipeline
added loading="lazy" to the LCP product image and dropped the audit to
a failure.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com> 221998 -
fix(lazyload): never lazy-load the LCP image
The lazy-load optimizer skipped only two hardcoded Luma class names
(gallery-placeholder__image, product-image-photo), so on Argento/Breeze
storefronts it added loading="lazy" to the product page main image -
the LCP element. The image kept the theme's fetchpriority="high" while
also being lazy, which delays the LCP request and fails Lighthouse's
"Largest Contentful Paint image was lazily loaded" audit.
Skip any image the page already marks as fetchpriority="high". That is
a theme-agnostic LCP hint, so it also covers themes we do not know
about. Add main-image to the class ignore list as a fallback for themes
that mark the LCP element without setting fetchpriority.
Found on minisport (Argento/Breeze): enabling the optimizer pipeline
added loading="lazy" to the LCP product image and dropped the audit to
a failure.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> e975df
-
-
1.19.0
-
Version 1.19.0
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 94fd39 -
fix(preload): cap font preloads and fix @font-face parsing (#117)
Font preloads had no cap and no notion of whether a face blocks rendering, while the url() parsing dropped most real-world forms and could aim a preload at a nonexistent host. Measured on a live Argento product page, 138 KB of preloaded fonts plus an eager 219 KB footer PNG stretched a 68 KB LCP JPEG into a 3.1 s download; removing them took LCP from 3.83 s to 2.11 s on Slow 4G.
- pagespeed/main/font_preload_limit (default 0, opt-in) caps the preloads per response
- pagespeed/main/font_preload_ignore skips urls by substring, for icon fonts
- candidates ranked by effective font-display: render-blocking first, then fallback, then swap; optional never preloaded
- url() values unquoted, fragments dropped, queries kept, hrefs mirroring the protocol-relative form the delivered css uses
- @font-face delimited and read on a comment-masked copy, with offset-based injection
- collection armed one-shot per process() call, so it no longer depends on caller order
Preload gained a Config constructor argument, so deploys need setup:di:compile.
Fixes #117 9a26a2 -
fix(preload): make font preloading from stylesheets opt-in (#117)
Default font_preload_limit goes from 2 to 0.
Fixing the url parsing means stores whose @font-face urls are quoted or
absolute — most of them — start getting font preloads they never had,
because the old code silently dropped those urls. Shipping a default of 2
would therefore add up to two High priority requests into the LCP window
on upgrade, which is the exact regression this branch exists to remove:
on the store that prompted it, 138 KB of preloaded fonts cost 1.7 s of
LCP. With font-display:swap injected the fonts do not block rendering
anyway, so the bandwidth buys little.
The budget and the ranking stay; an admin who knows which weight renders
above the fold raises it to 1 or 2.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> a6c93d -
fix(preload): make font collection one-shot per armed call (#117)
Sixth review pass pointed out that CssResolver calls process() without
ever calling setResponse(), so merged stylesheets never contribute
candidates — my claim that the ranking converges across every stylesheet
was wrong. Only the critical style blocks feed it.
Rather than widen collection, which would pull fonts out of every merged
stylesheet in a change meant to cap them, the gate is now honest and
deterministic. setResponse() arms exactly the next process() call, so a
bare process() never pushes. Left armed, whether a merged stylesheet
contributed depended on the order the two callers happened to run in for
a given request, which made the preload set vary between requests.
CriticalCss already chains setResponse() before each process() call, so
production behaviour is unchanged. The multi-call tests now re-arm the
same way, which also makes them mirror that caller.
Also pins the two remaining shapes of the mask's documented limit — a }
and a ; inside a quoted value — as misses rather than corruption.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 95ecf9 -
docs(preload): record the comment mask's limit and pin its failure mode (#117)
The mask cannot tell a real comment from a comment opener inside a css
string or data uri, so a fake opener can blank a whole @font-face. That
limit is now stated at maskCssComments(), together with why a css
tokenizer is not worth carrying to read one descriptor.
The test pins the direction the failure takes: the face is skipped, so it
gets no injection and contributes no preload candidate, and the
stylesheet passes through unchanged. Skipping is acceptable; rewriting a
stylesheet we could not read is not.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 48133a -
fix(preload): delimit @font-face on a comment-masked copy (#117)
Fifth review pass.
A } inside a comment ended the face body early for the plain regex, so
@font-face{/* } */src:url(a.woff2)} yielded the body "/* " — the url was
never collected, and worse, the injection then ran
str_replace('/* ', 'font-display:swap;/* ') across the whole stylesheet.
The truncation predates this branch; the injection path made it harmful.
Comments are now blanked to spaces of the same byte length before the
faces are delimited, so a masked } cannot end a body while every offset
still points into the original text. Injection splices at those offsets,
from the end so earlier ones stay valid. That also fixes a second
injection bug: two identical face bodies in one stylesheet had their
swap injected by str_replace on the body text, which rewrote both and
then did it again on the next iteration.
Invalid duplicate descriptors no longer beat a valid one either. The
browser drops invalid declarations at parse time, so
font-display:optional;font-display:garbage stays optional; the last
valid value wins and auto applies only when nothing valid was declared.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 7b87f1 -
fix(preload): validate the whole font-display value (#117)
Fourth review pass. The value pattern captured the leading alphabetic
token, so font-display: optional garbage read as optional and its
preload was suppressed — but the whole value is invalid css and the
browser falls back to auto, which blocks. Same for a descriptor written
with !important, which is dropped entirely.
The value is now taken up to the declaration terminator, trimmed, then
checked against the five valid keywords, so anything invalid resolves to
auto as the browser does.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 9ca057 -
fix(preload): read @font-face without its comments (#117)
Third review pass. A css comment may sit wherever whitespace may, so
font-family:A;/* keep */font-display:optional; hid the declaration from
the boundary matcher. The face then got a swap injected in front of a
declaration that stays effective, and was ranked as swap and preloaded
even though the author marked it optional.
Every read of a @font-face body now works on a comment-free copy, which
fixes the same class of bug in url extraction too: a commented-out
url(old.woff2) was being harvested as a preload candidate and could
spend the budget on a file the browser never requests. The injection
itself still targets the original text.
While there: a face declaring font-display twice resolved to the first
declaration, where the cascade takes the last.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> d0f213 -
fix(preload): match font-display as a declaration, mirror scheme case (#117)
Second review pass found two more holes.
The injection guard tested for the substring "font-display" anywhere in
the @font-face body, so a family named after the descriptor or a font
path containing the word suppressed the swap injection and left the face
blocking. Both the guard and the value read now require the descriptor
at a declaration boundary — start of the body, or after a previous
declaration.
Scheme stripping accepted any spelling, but the css rewrite in process()
is a case-sensitive str_replace: HTTPS://host/f.woff2 stays absolute in
the delivered css while the preload became protocol-relative, which is a
different url on an http storefront. The href now mirrors that replace
exactly and keeps an unusual spelling absolute. The http(s) check also
moved off filter_var, which accepts file:// happily.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> ba6b69 -
fix(preload): move the font budget to Preload and tighten parsing (#117)
Review follow-up. Four defects in the first pass:
Selection ran per process() call, but CriticalCss calls the improver
once per critical <style> block and the css resolver plugin once per
stylesheet. A swap face in the first block could spend the whole budget
before a render-blocking face in a later one was seen, and the same href
in two blocks consumed two slots. Candidates now accumulate in Preload
and the ranked selection happens in getAssets(), once, when every
stylesheet has been through the improver. Selection is pure, so
repeated getAssets() calls agree.
Deduplication kept the least urgent rank. Wrong: when one woff2 backs
two families, the family that blocks still blocks, so the file is
render-critical and the most urgent declaration has to win.
The font-display regex was case-sensitive and matched only the
alphabetic prefix of a value, so FONT-DISPLAY: OPTIONAL read as
render-blocking while the invalid optional-invalid read as optional and
was skipped. It is now case-insensitive, takes the whole token, and
resolves anything outside the five valid values to auto.
Preload hrefs forced https. process() rewrites absolute css urls to
protocol-relative, so on an http storefront the preload pointed at a
url the stylesheet never requests. Hrefs now mirror the delivered css:
protocol-relative for absolute and protocol-relative sources,
root-relative left alone, non-http schemes skipped.
Also adds declare(strict_types=1) to the new test file.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 8b22be -
fix(preload): cap font preloads and fix url() parsing (#117)
Improver pushed a preload for every woff2 it could parse out of a
stylesheet, with no cap and no check on whether the face blocks
rendering. Chrome fetches preloaded fonts at High priority, so each one
competes with the LCP image on the same connection and fetchpriority
cannot outrank it. Measured on a live Argento product page: dropping
138 KB of preloaded fonts (plus an eager 219 KB footer PNG) took LCP
from 3.83 s to 2.11 s on Slow 4G.
The url handling was broken in both directions. str_replace('//', '/')
ran before the validity check, so absolute and quoted urls were
silently dropped, while a root-relative url became https://<first path
segment> — a preload aimed at a host named "static". The cache-busting
query was stripped too, so a preload that did survive missed the css
request and the font downloaded twice.
- pagespeed/main/font_preload_limit (default 2, 0 disables) caps the
preloads per response, shared across every stylesheet processed
- pagespeed/main/font_preload_ignore skips urls by substring, for
decorative icon fonts
- candidates are ranked by effective font-display: render-blocking
first, then fallback, then swap; optional is never preloaded
- url() values are unquoted, fragments dropped, queries kept, and
root-relative hrefs left alone; hrefs are deduped
The budget lands together with the parsing fix on purpose: fixing the
parsing alone would start emitting the preloads that were being dropped
and ship the regression by default.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> c16e23
-
-
head
-
Added width 100% for the contact form 4a1acf
-
Replaced PB footer top content with BCB version f1006d
-
Removed unused overlay header config bf9be6
-
Added Overlay Header settings to Theme Editor c859d3
-
Fixed layout shift when js is placed between price and swatches 7c4cc4
-
Move price styles to enterprise-blank 54a350
-
-
3.3.3
-
head
-
Fixed preview issue after previous commit ea8cea
-
Updating page selector links when store view switched 0d3d12
-
Added page visibility control and installer support for header/footer content 796f48
-
Fixed not working theme editor colors for overlay header 2660ce
-
Do not show overlay header toggles for native layout b000f5
-
WIP. Header layouts: added overlay mode support 8122c9
-
Correct page cleanup when BLB is closed 45b825
-
Improved header/footer preview 07c294
-
Header/Footer management with Header Layouts 7a0a82
-
-
1.2.0
-
head
-
Sync code with Magento ("style" position inside listing) bf79c2
-
-
1.49.5
-
head
-
1.1.5
-
head
-
1.1.0
-
Version 1.1.0 adaf76
-
Improve spacing for text and headings #7 4d669d
-
fix: accessibility improve #54 793c44
-
Improve spacing for text and headings #7 3f5bc1
-
style: adjust EasyTabs layout and borders for expanded state e5db6c
-
style: implement container-based layout for more flexible product sliders cde87a
-
feat: implement brands block a37b3b
-
feat: implement contact map CMS block 5221b0
-
style: home page 933872
-
style: implement advanced product card hover effect and fix slider shadow clipping ca693c
-
style: use div wrappers instead of li for product carousel f17016
-
fix: correct mobile menu 18eb40
-
-
v1.8.4
-
Version v1.8.4 eac18a
-
Merge pull request #27 from swissup/fix/duplicate-switcher-language-id
Fix duplicate switcher-language ID on mobile header switcher a8be67 -
Fix duplicate switcher-language ID on mobile header switcher
store_language_mobile rendered the same Swissup_Easyflags flags.phtml
template as the desktop store_language switcher but never passed
id_modifier, so both blocks emitted id="switcher-language" and stayed
in the DOM together across breakpoints (only CSS toggled visibility).
Pass id_modifier="mobile" for the mobile block, matching the pattern
already used by navigation.language.switcher (id_modifier="menu").
Desktop store_language keeps the unmodified id for backward compat. 2b04a8 -
Move easyslide mixin into the swiper bundle group
The easyslide widget itself is bundled under the "swiper" group
(declared by module-easy-slide's own breeze_default.xml), not
"default" - a mixin in the wrong group never loads on pages that use
the slider, since bundle groups only fetch when one of their own
items' load trigger fires. 92057e -
Merge pull request #26 from swissup/fix/easyslide-centered-slides-cls
Fix CLS from EasySlide centeredSlides re-center on init 9855dc -
Fix CLS from EasySlide centeredSlides re-center on init
centeredSlides re-centers the active slide via a CSS transform once
Swiper mounts, moving already-painted content and counting as a
layout shift on every page load that uses this admin option.
startRandomSlide already hides the slider (opacity: 0) until Swiper
reports init - reuse that same reveal step for centeredSlides via a
theme-level mixin, so the re-center happens before anything is shown. 5f9992
-
-
v1.8.3
-
Version v1.8.3 cf5afd
-
Merge pull request #25 from swissup/claude/busy-chebyshev-550a8e
Fix remaining homepage CLS contributors on 420shop.nl 38a7a7 -
Fix hero slider CLS regression on autoplay transitions
Live Lighthouse re-test on staging (after the earlier round of homepage
CLS fixes) surfaced a new contributor: switching to the next autoplay
slide caused a ~0.106 layout shift on its own, larger than everything
fixed in the previous commit combined.
Root cause: Swiper's autoHeight option resizes .swiper-wrapper to match
the currently active slide's own box. slider.phtml computes a real
per-image aspect-ratio for every slide, so any two slides with
different native image ratios produce a different wrapper height -
autoHeight then reflows the page on every transition between them.
Fix, scoped to this theme's slider.phtml/// _slider.less override only:
- Force autoHeight off in the JS config passed to the Swiper widget,
regardless of what's stored in the admin slider config.
- Only give the first (initially visible) slide its own precise inline
aspect-ratio, to still reserve the correct box before it loads.
Other slides fall back to the shared CSS aspect-ratio in
_slider.less, so the wrapper's reserved height is fixed once and
never changes as autoplay rotates through slides.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> f90c23 -
Fix remaining homepage CLS contributors on 420shop.nl
Follow-up to the hero-slider CLS fix (#24) — a fresh mobile Lighthouse
run against staging still showed CLS 0.244, unrelated to the slider.
Root causes traced and fixed:
- .jumbotron.hero.block-news (the "Nieuw op 420shop" carousel) was
excluded from the existing min-height reservation, and
#hr_frontPage_box_1/_2 placeholders had no reservation at all —
both left main#maincontent > div.columns to reflow as content
loaded. Added both to the reserved-height selector groups
(mobile + critical-CSS duplicate, kept in sync).
- Hot-stuff promo images (bong/rolling-tray/grinder) have width/height
HTML attrs but no matching CSS aspect-ratio, because their
argento-grid/col-md-4/.image markup was copied from the unrelated
Argento theme family and never got real grid/image CSS in this
Breeze-family theme. Added a scoped aspect-ratio + object-fit rule
for .block-hot-stuff .image img, mirroring the EasySlide fix
pattern, plus flex on .argento-grid to remove the unclearfixed
float ambiguity.
- Same missing-aspect-ratio gap existed on .swiper-slide
.product-image-photo (Bestsellers/NewList carousels); added
aspect-ratio matching the theme's category_page_grid image config.
- Child theme's own Barlow Semi Condensed font-family declarations
used a plain sans-serif fallback instead of the metric-matched
fallback faces already defined in the parent theme, causing
avoidable reflow on font swap. Switched to the full fallback chain
in the 6 places that had it wrong.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 278dfe -
Merge pull request #24 from swissup/fix/hero-slide-cls
Fix high CLS on hero slider (theme override of easyslide templates) 4ef475 -
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> be0239 -
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> 465ba1 -
Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> efa291 -
Move slider CLS-fix CSS into custom/vendor/_slider.less
Follows the existing _cart.less/_faq.less/etc convention instead of
growing the already-700+-line _custom.less further.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> c25841 -
Fix high CLS on hero slider (autoHeight collapses slide before Swiper init)
Same root cause and fix as swissup/module-easy-slide#42: slide has no
reserved height before JS runs, and Swiper's autoHeight only sets the
real height after init/image load - visible jump, reported as
0.36-0.47 CLS on the homepage.
Overriding here (rather than waiting on the module release) so it
ships to 420shop.nl now:
- Swissup_EasySlide/templates/{slider,image}.phtml: theme override
of the module templates, carrying the same fix (inline aspect-ratio
per slide, eager+fetchpriority=high on the first slide)
- web/css/_custom.less: matching aspect-ratio/object-fit rules next
to the existing .easyslide-description customizations
Once module-easy-slide#42 is merged and released, these template
overrides can be removed (composer bump + delete the two files).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 2611d4
-
-
head
-
feat(FeaturedProduct): introduce less variables 9d348a
-
refactor(FeaturedProductRenderer): replace image URL and alt text with pre-rendered HTML 623392
-
Fixed FAQ items readability on light theme, closes #44 091320
-
Fixed avoid using self-closing tag with non-void html element 9a3123
-
Added hide on pages checkbox list prop type ccf9e8
-
Updated dependent fields logic 278125
-
feat(accordion): enable product attribute as body source for FAQ items b26684
-
feat(accordion): add support for per-item icons in FAQ items b7607f
-
Correct page cleanup when BCB is closed a40061
-
Merge pull request #38 from breezefront/feat/108-newsletter-and-missing-components
feat(components): inline newsletter layout (#108) 57dafb -
fix(components): newsletter heading follows an inherited text colour (#108)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> c56d7d -
fix(a11y): real heading elements and decorative icons (#41)
Newsletter rendered its section heading as <div class="...__heading h2">:
invisible to assistive technology and absent from the document outline,
even though it is the heading of a page band. It now emits a real h1-h6
element chosen by a new heading_type prop (default h2), matching what
text_block already does. Same fix for the featured_product name, which
was also a styled div.
Breeze styles the tag and the class off a single selector list -
`h2, .h2 { ... }` in theme-frontend-breeze-blank/web/css/base/
_typography.less - so under a Breeze theme, dropping the class for the
tag is visually neutral. Under a non-Breeze theme .h2 is not styled at
all, so those headings were rendering as plain body text and now pick up
the theme's own h2 size: a fix rather than a regression, but not a no-op.
Either way it changes the markup of existing pages, which is why this is
split out of #38.
text_block borrowed the heading text for its icon alt and wrapped inline
SVG in a plain div, so a screen reader announced the heading twice, or
three times when the SVG carried its own <title>. The icon is decorative
in every design that uses it: alt="" on the image branch, aria-hidden on
the SVG wrapper. A case that needs a real name should get an explicit
icon_alt prop rather than reusing the heading.
The admin H1 guard only fired on banner's headline_type, so raising a
text_block - and now a newsletter - to H1 skipped the warning. It now
watches heading_type too; _countH1 already counted both.
Also corrects the selector these three comments cite: the rule is
`h1, .h1` in the Breeze theme, not `:where(h1), .h1` in the module.
product_grid was checked and already emits a real h2. Accordion item
titles remain divs wrapping an <a> trigger; the heading+button pattern
there is a larger change and stays open.
Refs #41 53edaa -
fix(components): collage layout for flat-colour CTA, decorative icon a11y (#108)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 6e2743 -
feat(components): inline newsletter layout (#108)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 85ed20 -
Changes for header/footer page: publish spinner, layout picker with images 25b2ae
-
-
1.2.2