Conversation
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
There was a problem hiding this comment.
Pull request overview
This PR completes a comprehensive template refactoring for the Tour Operator plugin, modernizing all archive and single templates to use WordPress patterns, template parts, and CSS variables instead of hardcoded HTML and inline styles. The refactoring improves maintainability, enables full Site Editor customization, and aligns with WordPress best practices.
Key Changes
- Replaced hardcoded template structures with pattern-based layouts
- Implemented WordPress CSS variables throughout (spacing, colors, typography)
- Added sticky menu block with configurable colors for section navigation
- Consolidated "Fast Facts" sections into reusable template parts
- Removed search-results template and archive-travel-style template
- Updated placeholder image handling to use a single default placeholder
Reviewed changes
Copilot reviewed 34 out of 37 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| templates/single-tour.html | Refactored with sticky menu, template parts for fast facts, pattern-based sections (itinerary, gallery, pricing, reviews), WordPress spacing variables |
| templates/single-accommodation.html | Modernized with sticky menu, fast-facts template part, room cards pattern, WordPress CSS variables for all styling |
| templates/single-destination.html | Enhanced with sticky menu, regions section, travel information pattern, template parts integration |
| templates/single-country.html | Aligned with destination template structure using patterns and WordPress variables |
| templates/single-region.html | Modernized following country template patterns with consistent styling |
| templates/archive-tour.html | Simplified to use tour-card pattern with WordPress spacing presets |
| templates/archive-review.html | Refactored to use review-card pattern with consistent spacing |
| templates/search-results.html | Deleted (non-functional) |
| templates/archive-travel-style.html | Deleted (now uses pattern) |
| src/css/_additional.scss | Added border-radius reset for card images, removed unused styles |
| src/blocks/sticky-menu/style.scss | Added sticky positioning, z-index, mobile hide, configurable colors |
| src/blocks/sticky-menu/block.json | Added color configuration attributes for active/hover states |
| includes/classes/legacy/class-placeholders.php | Unified placeholder to use single default image |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/blocks/sticky-menu/style.scss (1)
14-32: Consolidate duplicate.lsx-to-sticky-menuselector definitions.The
.lsx-to-sticky-menuselector is defined twice with conflictingpositionproperties (relative at line 16, sticky at line 26). The cascade means sticky will override relative, but this is confusing and violates DRY. Consolidate into a single definition:.lsx-to-sticky-menu { position: sticky; top: 0; z-index: 100; opacity: 0; background: var(--wp--preset--color--background, #fff); @media (max-width: 767px) { display: none; } } .block-editor-iframe__body .lsx-to-sticky-menu { opacity: 1; } .admin-bar .lsx-to-sticky-menu { top: 32px; }This eliminates the duplicate selector and makes the intent (sticky positioning by default) immediately clear.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (3)
build/blocks/sticky-menu/style-index-rtl.css(1 hunks)build/blocks/sticky-menu/style-index.css(1 hunks)src/blocks/sticky-menu/style.scss(5 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{js,jsx,ts,tsx,php,scss,css}
📄 CodeRabbit inference engine (GEMINI.md)
Use camelCase for variable and function names, kebab-case for CSS classes, and snake_case for PHP variable names per WordPress Coding Standards
Files:
build/blocks/sticky-menu/style-index-rtl.cssbuild/blocks/sticky-menu/style-index.csssrc/blocks/sticky-menu/style.scss
**/*.{js,jsx,ts,tsx,scss,css}
📄 CodeRabbit inference engine (GEMINI.md)
For performance optimization, implement code splitting, lazy loading, and minimize CSS/JavaScript bundle sizes in block components
Files:
build/blocks/sticky-menu/style-index-rtl.cssbuild/blocks/sticky-menu/style-index.csssrc/blocks/sticky-menu/style.scss
**/blocks/**/*.scss
📄 CodeRabbit inference engine (CLAUDE.md)
Sass/SCSS files for blocks must include both editor.scss and style.scss for editor and frontend styling respectively
Files:
src/blocks/sticky-menu/style.scss
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Summary
🔇 Additional comments (7)
build/blocks/sticky-menu/style-index-rtl.css (1)
1-1: Build artifact properly minified and RTL-adjusted.The RTL variant correctly inverts text alignment directives (text-align: right where SCSS has left) and preserves all CSS variable references through minification. No issues detected.
src/blocks/sticky-menu/style.scss (5)
2-12: Outer wrapper sticky positioning is correct.The addition of
position: sticky; top: 0; z-index: 100to the outer wrapper with proper admin-bar offset (32px) correctly moves the sticky behaviour to the block level. The z-index strategy is appropriate for controlling stacking context.
55-80: CSS variable strategy for button states is sound; verify variable assignment.The button styling correctly uses CSS variables (
--button-bg-color,--button-text-color,--hover-*,--active-*) with sensible fallbacks (transparent, inherit, currentColor). Fallback values likergba(0, 0, 0, 0.1)for hover provide acceptable defaults.However, ensure that these CSS variables are being explicitly set in the block's JavaScript (index.js) or block.json attributes. If the variables are never assigned, all buttons will use fallback values only, defeating the customization intent.
122-124: Verify that outer wrapperdisplay: noneon mobile doesn't break JavaScript expectations.The outer wrapper is hidden on mobile via
display: none, which is visually correct but may affect any JavaScript that expects the wrapper to be present in the DOM (e.g., event listeners, measurements). Ensure that client-side scripts gracefully handle the hidden state or that no critical logic depends on wrapper visibility.
83-93: Screen reader text pattern is correct.The
.lsx-to-sr-onlyimplementation follows WordPress/WCAG best practices with properclip: rect(0, 0, 0, 0),overflow: hidden, andwhite-space: nowrapto hide content visually while keeping it accessible to assistive technologies. No changes needed.
178-215: Section header button styling is semantically sound.The
button.lsx-to-section-headeris properly hidden by default (display: none) and shown only on mobile (display: flexat line 213). Font-weight: 600 adds visual hierarchy appropriately, and the active state with semi-transparent overlay is accessible. The caret icon transition respects motion preferences.build/blocks/sticky-menu/style-index.css (1)
1-1: Build artifact properly minified for LTR context.The minified CSS correctly preserves all CSS variable references, media queries, and selectors. LTR text alignment (text-align: left) is appropriately applied in contrast to the RTL variant. No issues detected in the build output.
There was a problem hiding this comment.
Actionable comments posted: 4
♻️ Duplicate comments (7)
templates/single-tour.html (2)
154-156: Price paragraph correctly uses class "amount" with no placeholder text.Line 155 correctly uses
class="amount"(notclass="unit-price") and contains no placeholder text. The binding at line 154 will populate the price dynamically.
3-7: CSS variable fallbacks are missing from inline spacing styles throughout the template.Same issue as single-country.html and single-accommodation.html. All inline styles using
var(--wp--preset--spacing--*)require fallback values per coding guidelines. Affected throughout: lines 4, 10, 26, 28–29, 56, 70, 80, 98, 113, 131, 145, 206, 220, 230, 245, 254, 269.Also applies to: 9-19, 25-53
templates/single-accommodation.html (2)
176-177: Placeholder text "Price" should be removed from empty paragraph.Line 177 contains a paragraph with class
unit-priceand placeholder text "Price". The binding on line 176 will populate this dynamically, so the placeholder text should be removed for consistency. The paragraph should remain empty, like other bound paragraphs in the template (see line 15, 209, 219).-<p class="unit-price has-medium-font-size">Price</p> +<p class="unit-price has-medium-font-size"></p>
3-7: CSS variable fallbacks are missing from inline spacing styles throughout the template.This matches the issue flagged in single-country.html. All inline styles using
var(--wp--preset--spacing--*)require fallback values per coding guidelines. Affected throughout lines 4, 10, 26, 28–29, 56, 70, 80, 98, 113, 122, 131, 145, 154, 169, 181, 203, 213, 243, 267, and 291.Also applies to: 9-19, 25-53
templates/single-destination.html (3)
3-7: CSS variable fallbacks are systematically missing throughout the template (unresolved from past reviews).This file has extensive past review comments (6 separate comments) flagging missing CSS fallbacks in inline spacing variables. The issue remains unresolved across:
- Line 4: spacing-20 without fallback
- Line 10: spacing-40 without fallback
- Lines 26, 28–29, 56, 70, 80, 98, 113, 130, 145, 154, 169: All spacing variables missing fallbacks
Per coding guidelines, all inline styles must include fallback values:
var(--wp--preset--spacing--20, 16px).Recommendation: Apply a consolidated fix across all affected templates (single-country.html, single-accommodation.html, single-tour.html, single-destination.html) to ensure consistent CSS variable fallback implementation.
Also applies to: 9-19, 25-53, 55-77, 79-95, 97-127, 129-151, 153-175
113-125: Gallery images use empty alt attributes, creating accessibility gaps (unresolved from past review).Past review commented on this at lines 97–127. Gallery images at lines 114–124 use empty
alt=""attributes. This differs from the pattern file approach which includes localisable fallback text. Consider fetching attachment alt text or using a localisable placeholder (e.g.,__("Gallery image", "lsx-tour-operator")) to improve accessibility.
145-145: Related Tours query lacks destination relationship filtering (unresolved from past review).Past review flagged this at lines 129–151. The query at line 145 fetches 6 tours ordered by title with no filtering by destination relationship. This displays all tours instead of only tours related to the current destination. Verify whether the query should include a relationship filter (e.g.,
meta_queryortax_queryfor destination_to_tour relationship).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (4)
templates/single-accommodation.html(5 hunks)templates/single-country.html(2 hunks)templates/single-destination.html(1 hunks)templates/single-tour.html(7 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{php,html}
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
**/*.{php,html}: Always useLSX_TO_URLandLSX_TO_PATHconstants for asset paths in plugin files
Include CSS variable fallbacks with absolute hex values in inline styles for plugin compatibility with any theme
Use CSS variable formatvar(--wp--preset--[type]--[name], fallback_value)in inline styles, notvar:preset|[type]|[name]format
Usevar:preset|[type]|[name]format only within JSON block attributes, not in inline styles
Use the correct spacing preset names: 'tiny' (10px), 'small' (16px), 'medium' (32px), 'large' (48px), and 'x-small' (8px)
Files:
templates/single-country.htmltemplates/single-tour.htmltemplates/single-accommodation.htmltemplates/single-destination.html
**/templates/*.html
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
**/templates/*.html: Use<!-- wp:template-part {"slug":"[name]"} /-->syntax to include template parts in block templates
Use<!-- wp:pattern {"slug":"lsx-tour-operator/[pattern-name]"} /-->syntax to include patterns in block templates
Files:
templates/single-country.htmltemplates/single-tour.htmltemplates/single-accommodation.htmltemplates/single-destination.html
**/{patterns,templates,parts}/*.{php,html}
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
**/{patterns,templates,parts}/*.{php,html}: For icon blocks, use self-closing syntax and never embed HTML content inside icon block markup to prevent validation errors
Use primary color preset for buttons, borders, and main brand elements; use 'contrast' preset for text/links; use 'base' for white backgrounds
Files:
templates/single-country.htmltemplates/single-tour.htmltemplates/single-accommodation.htmltemplates/single-destination.html
**/{templates,patterns,parts}/*.{php,html}
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
Use wide alignment constraint for main content containers in single templates and align-full for full-width sections like breadcrumbs
Files:
templates/single-country.htmltemplates/single-tour.htmltemplates/single-accommodation.htmltemplates/single-destination.html
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Summary
🔇 Additional comments (6)
templates/single-country.html (3)
21-23: Sticky menu block integration is correctly configured with colour and accessibility attributes.The sticky menu block at lines 21–23 properly includes:
- Colour attributes:
activeBackgroundColor,activeTextColor,hoverBackgroundColor,hoverTextColor- CSS variable mappings:
--active-bg-color,--active-text-color,--hover-bg-color,--hover-text-color- Menu items array with section IDs and titles
- Accessibility:
aria-labelon nav and ul elements
71-76: Regions Query pattern reference is correct, but verify section filtering.The query at line 71 fetches 3 destinations with no relationship filtering. Verify whether this should filter destinations related to the current country (if the post type supports a country relationship) or display all destinations. Currently, all destinations ordered by date will display.
93-93: Travel Information pattern reference uses correct syntax and section metadata.Line 93 correctly embeds the
lsx-tour-operator/travel-informationpattern, and the section metadata at line 79 properly references it via"patternName":"lsx-tour-operator/travel-information".templates/single-accommodation.html (1)
94-95: Room card pattern binding is correctly configured.Line 94–95 wraps the room-card pattern with a binding source
lsx/accommodation-unitsof typerooms, enabling data binding for multiple room entries. The pattern reference at line 95 uses correct syntax.templates/single-tour.html (2)
71-76: Map container correctly omits hardcoded image path and uses overlay only.Unlike single-accommodation.html, the map container at lines 71–75 does not include a hardcoded image src. It relies on the overlay colour (
background-color:#e2f0f7) and minHeight (500px) instead. This is a good approach that avoids the plugin path issue.
95-95: Itinerary pattern reference uses correct binding source for tour itinerary data.Line 94–95 binds the itinerary-list pattern to
lsx/tour-itinerarysource, enabling dynamic rendering of itinerary days. The pattern syntax is correct.
There was a problem hiding this comment.
Actionable comments posted: 3
♻️ Duplicate comments (6)
templates/single-country.html (1)
4-4: CSS variable fallbacks remain missing from inline spacing styles (unresolved duplicate issue).The past review flagged this issue, but it persists throughout the template. Per coding guidelines, all inline
var(--wp--preset--spacing--*)declarations must include fallback pixel values for plugin compatibility when themes lack these CSS variables.Affected lines still missing fallbacks:
- Lines 4, 10: Breadcrumbs and Hero padding
- Lines 26, 28: Overview section and content padding
- Line 56: Regions section padding
- Line 80: Travel Information section padding
- Line 98: Gallery section padding
- Lines 130, 154: Related Tours and Reviews section padding
Update each to format:
var(--wp--preset--spacing--20, 16px)with appropriate fallback values (10px for x-small, 16px for small, 32px for medium, 48px for large, 50px for large+ sections).Also applies to: 10-10, 26-26, 28-28, 56-56, 80-80, 98-98, 130-130, 154-154
templates/single-destination.html (5)
56-56: Add CSS variable fallback to Regions section spacing.Line 56 uses
var(--wp--preset--spacing--50)without fallback values in padding declarations.Proposed fix:
-style="padding-top:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50)" +style="padding-top:var(--wp--preset--spacing--50, 48px);padding-bottom:var(--wp--preset--spacing--50, 48px)"
154-154: Add CSS variable fallback to Reviews section spacing.Line 154 uses
var(--wp--preset--spacing--50)without fallback values in padding declarations.Proposed fix:
-style="padding-top:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50)" +style="padding-top:var(--wp--preset--spacing--50, 48px);padding-bottom:var(--wp--preset--spacing--50, 48px)"
10-10: Add CSS variable fallback for hero cover section spacing.Line 10 uses
var(--wp--preset--spacing--40)without fallback values in padding declarations, which violates the requirement to include CSS variable fallbacks with absolute values in inline styles for plugin compatibility.-style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40)" +style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40, 40px);padding-bottom:var(--wp--preset--spacing--40, 40px)"
130-130: Add CSS variable fallback and review Related Tours query filtering.Line 130 is missing CSS variable fallback values per guidelines:
-style="padding-top:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50)" +style="padding-top:var(--wp--preset--spacing--50, 48px);padding-bottom:var(--wp--preset--spacing--50, 48px)"Line 145: The query currently fetches all tours without filtering by the destination relationship. The query should be updated to filter by
destination_to_tourrelationship to show only tours connected to the current destination. Verify the block query API syntax for relationship/meta filtering parameters, as the suggested approach may require different parameter names depending on your bindings infrastructure.
26-28: Voeg CSS-veranderlike terugvalle by Oorsig-afdeling by.Lyne 26 en 29 gebruik afstandCSS-veranderlikes sonder terugvalwaardes in aanlyn-style. Per koderingsriglyne moet alle aanlyn CSS-veranderlikes terugvalwaardes met absolute waarde hê:
-style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50)" +style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--50, 48px);padding-bottom:var(--wp--preset--spacing--50, 48px)"-style="padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10)" +style="padding-top:var(--wp--preset--spacing--10, 8px);padding-bottom:var(--wp--preset--spacing--10, 8px)"
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (2)
templates/single-country.html(3 hunks)templates/single-destination.html(1 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{php,html}
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
**/*.{php,html}: Always useLSX_TO_URLandLSX_TO_PATHconstants for asset paths in plugin files
Include CSS variable fallbacks with absolute hex values in inline styles for plugin compatibility with any theme
Use CSS variable formatvar(--wp--preset--[type]--[name], fallback_value)in inline styles, notvar:preset|[type]|[name]format
Usevar:preset|[type]|[name]format only within JSON block attributes, not in inline styles
Use the correct spacing preset names: 'tiny' (10px), 'small' (16px), 'medium' (32px), 'large' (48px), and 'x-small' (8px)
Files:
templates/single-country.htmltemplates/single-destination.html
**/templates/*.html
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
**/templates/*.html: Use<!-- wp:template-part {"slug":"[name]"} /-->syntax to include template parts in block templates
Use<!-- wp:pattern {"slug":"lsx-tour-operator/[pattern-name]"} /-->syntax to include patterns in block templates
Files:
templates/single-country.htmltemplates/single-destination.html
**/{patterns,templates,parts}/*.{php,html}
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
**/{patterns,templates,parts}/*.{php,html}: For icon blocks, use self-closing syntax and never embed HTML content inside icon block markup to prevent validation errors
Use primary color preset for buttons, borders, and main brand elements; use 'contrast' preset for text/links; use 'base' for white backgrounds
Files:
templates/single-country.htmltemplates/single-destination.html
**/{templates,patterns,parts}/*.{php,html}
📄 CodeRabbit inference engine (.github/instructions/patterns-templates-refactoring.instructions.md)
Use wide alignment constraint for main content containers in single templates and align-full for full-width sections like breadcrumbs
Files:
templates/single-country.htmltemplates/single-destination.html
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Summary
🔇 Additional comments (2)
templates/single-country.html (1)
97-98: Gallery section lacksalign="wide"attribute, creating alignment inconsistency.The Overview section (line 25) and Travel Information section (line 79) explicitly use
align="wide"for main content containers, aligning with coding guidelines: "Use wide alignment constraint for main content containers in single templates." Gallery section (line 97) omits this attribute despite having similar constrained layout requirements.Verify whether Gallery should include
align="wide"to match the pattern of other main single-template sections:- <!-- wp:group {"tagName":"section","metadata":{"name":"Gallery"},"className":"lsx-gallery-wrapper","style":{"spacing":{"padding":{"top":"var:preset|spacing|50","bottom":"var:preset|spacing|50"},"blockGap":"var:preset|spacing|50"}},"layout":{"type":"constrained"},"addToStickyMenu":true,"stickyMenuId":"gallery","stickyMenuTitle":"Gallery"} --> + <!-- wp:group {"tagName":"section","metadata":{"name":"Gallery"},"align":"wide","className":"lsx-gallery-wrapper","style":{"spacing":{"padding":{"top":"var:preset|spacing|50","bottom":"var:preset|spacing|50"},"blockGap":"var:preset|spacing|50"}},"layout":{"type":"constrained"},"addToStickyMenu":true,"stickyMenuId":"gallery","stickyMenuTitle":"Gallery"} -->templates/single-destination.html (1)
4-4: Add CSS variable fallback values to inline styles with correct preset mapping.Line 4 uses
var(--wp--preset--spacing--20)without fallback values. Per coding guidelines, inline CSS variables must include fallback values. However, the proposed fallback of 16px is incorrect—WordPress spacing preset 20 equals 0.44rem (~7px), not 16px. The correct fallback should be:-style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--20)" +style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--20, 0.44rem);padding-bottom:var(--wp--preset--spacing--20, 0.44rem)"Note: Spacing preset 40 (which equals 1rem or 16px) should be used if the intended spacing is actually 16px.
Likely an incorrect or invalid review comment.
name: "Template System Refactoring with Patterns & Parts"
about: "Complete template modernization using patterns, template parts, and WordPress CSS variables"
title: "feat: Complete Template Refactoring with Patterns, Template Parts, and WordPress Design Tokens"
Summary
This PR completes the template restructuring epic by refactoring all archive and single templates to use patterns and template parts instead of hardcoded HTML. All inline styles have been replaced with WordPress CSS variables, enabling full Site Editor customization while maintaining design consistency with the Figma Design System. This builds upon the infrastructure established in PR #809 and fulfills the requirements of Issue #798.
Linked issues: Closes #798
Changes
Template Refactoring
Archive Templates
Standardized structure for all archive templates following this pattern:
archive-tour.html- Refactored with card-based layout using patternsvar(--wp--preset--spacing--*))archive-accommodation.html- Modernized archive displayarchive-destination.html- Enhanced destination archivearchive-review.html- Review archive with new patternSingle Templates
single-tour.html- Complete pattern-based refactoringsingle-accommodation.html- Modernized accommodation templatesingle-destination.html- Enhanced destination displaysingle-country.html- Country template refactoringsingle-region.html- Region template modernizationPatterns Created/Enhanced
review-card.php)CSS Variables Implementation
Replaced all hardcoded styles with WordPress CSS variables:
Colors:
var(--wp--preset--color--base)var(--wp--preset--color--contrast)var(--wp--preset--color--primary)Spacing:
var(--wp--preset--spacing--30)throughvar(--wp--preset--spacing--70)Typography:
Code Quality & Improvements
Files Removed
search.html- Non-functional search template removedTest Notes
Template Rendering:
Pattern Integration:
Template Parts:
WordPress CSS Variables:
Conditional Display:
Site Editor Compatibility:
Image Handling:
Sticky Menu:
Responsive Testing:
Edge cases covered:
Risk & Rollback
Checklist (Global DoD / PR)
Additional Notes
This PR is part of the Template Restructuring Epic (#794) and specifically completes Task #798. It builds upon the infrastructure established in PR #809 by:
Benefits
Technical Decisions
Alignment with Figma Design System
Future Work (Not in this PR)
Reference Documentation
Summary by CodeRabbit
New Features
Improvements
Bug Fixes
Removed
✏️ Tip: You can customize this high-level summary in your review settings.