diff --git a/src/app/components/product-card/product-card.component.html b/src/app/components/product-card/product-card.component.html
index 38c121b..804a856 100644
--- a/src/app/components/product-card/product-card.component.html
+++ b/src/app/components/product-card/product-card.component.html
@@ -12,10 +12,10 @@
@if (showFavoriteControl() || showCompareControl() || showShareAction || showQuickViewPlaceholder) {
@if (showFavoriteControl()) {
-
+
}
@if (showCompareControl()) {
-
+
}
@if (showShareAction) {
diff --git a/src/app/components/product-card/product-card.component.scss b/src/app/components/product-card/product-card.component.scss
index 614d2cd..6032ad7 100644
--- a/src/app/components/product-card/product-card.component.scss
+++ b/src/app/components/product-card/product-card.component.scss
@@ -5,11 +5,11 @@
display: flex;
flex-direction: column;
overflow: hidden;
- transition: transform 0.2s ease, box-shadow 0.2s ease;
+ transition: transform var(--transition-normal), box-shadow var(--transition-normal);
&:hover {
transform: translateY(-2px);
- box-shadow: 0 10px 26px rgba(15, 23, 42, 0.12);
+ box-shadow: var(--shadow-lg);
}
}
@@ -26,14 +26,14 @@
width: 100%;
aspect-ratio: 1 / 1;
min-height: 220px;
- border: 1px solid #d3dad9;
+ border: 1px solid var(--border-color);
border-radius: 13px 13px 0 0;
box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15);
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
- background: #f0f0f0;
+ background: var(--bg-tertiary);
img {
width: 100%;
@@ -72,7 +72,7 @@
align-items: center;
padding: 2px 8px;
border-radius: var(--radius-full, 999px);
- background: rgba(22, 163, 74, 0.9);
+ background: color-mix(in srgb, var(--success-color) 90%, black);
color: #fff;
font-size: var(--font-size-xs, 0.75rem);
font-weight: var(--font-weight-bold, 700);
@@ -80,7 +80,7 @@
}
.stock-badge.out {
- background: rgba(239, 68, 68, 0.9);
+ background: color-mix(in srgb, var(--error-color) 90%, black);
}
.product-actions-overlay {
@@ -98,7 +98,7 @@
border: 1px solid rgba(30, 60, 56, 0.15);
border-radius: 50%;
background: rgba(255, 255, 255, 0.95);
- color: #1e3c38;
+ color: var(--text-primary);
font-size: var(--font-size-lg, 1rem);
font-weight: var(--font-weight-bold, 700);
display: inline-flex;
@@ -110,12 +110,12 @@
.product-action-btn:hover {
transform: translateY(-1px);
- border-color: #497671;
+ border-color: var(--primary-color);
}
.product-action-btn.active {
- border-color: #497671;
- color: #497671;
+ border-color: var(--primary-color);
+ color: var(--primary-color);
}
.product-action-btn:focus-visible,
@@ -158,7 +158,7 @@
min-height: 24px;
padding: 3px 8px;
border-radius: var(--radius-full, 999px);
- background: #497671;
+ background: var(--primary-color);
color: #fff;
font-size: var(--font-size-xs, 0.75rem);
font-weight: var(--font-weight-bold, 700);
@@ -167,12 +167,12 @@
.product-details {
width: 100%;
- border: 1px solid #d3dad9;
+ border: 1px solid var(--border-color);
border-top: none;
border-radius: 0 0 13px 13px;
padding: 16px;
box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.15);
- background: #f5f3f9;
+ background: var(--bg-secondary);
flex: 1;
display: flex;
flex-direction: column;
@@ -182,7 +182,7 @@
.product-name {
font-weight: var(--font-weight-bold, 700);
font-size: clamp(14px, 1.4vw, 18px);
- color: #1e3c38;
+ color: var(--text-primary);
margin: 0;
line-height: 1.3;
display: -webkit-box;
@@ -196,7 +196,7 @@
.product-description {
margin: 0;
- color: #697777;
+ color: var(--text-secondary);
font-size: var(--font-size-base, 0.875rem);
line-height: 1.45;
display: -webkit-box;
@@ -211,7 +211,7 @@
align-items: center;
gap: 6px;
font-size: var(--font-size-sm, 0.8125rem);
- color: #697777;
+ color: var(--text-secondary);
.rating-stars {
color: #b45309;
@@ -234,7 +234,7 @@
.discounted-price,
.current-price {
- color: #1e3c38;
+ color: var(--text-primary);
font-size: var(--font-size-xl, 1.125rem);
font-weight: 800;
}
@@ -252,18 +252,18 @@
.bar-segment {
flex: 1;
border-radius: var(--radius-full, 999px);
- background: #d3dad9;
+ background: var(--border-color);
&.filled.high {
- background: #16a34a;
+ background: var(--success-color);
}
&.filled.medium {
- background: #f59e0b;
+ background: var(--warning-color);
}
&.filled.low {
- background: #ef4444;
+ background: var(--error-color);
}
}
@@ -273,14 +273,14 @@
min-height: 42px;
border: 0;
border-radius: var(--radius-lg, 13px);
- background: #497671;
+ background: var(--primary-color);
color: #fff;
font-weight: var(--font-weight-bold, 700);
cursor: pointer;
- transition: background 0.2s ease, transform 0.15s ease;
+ transition: background var(--transition-normal), transform var(--transition-fast);
&:hover {
- background: #3d635f;
+ background: var(--primary-hover);
transform: translateY(-1px);
}
diff --git a/src/app/features/website/catalog/components/category-grid/category-grid.component.scss b/src/app/features/website/catalog/components/category-grid/category-grid.component.scss
index 3c1fb3e..5593f75 100644
--- a/src/app/features/website/catalog/components/category-grid/category-grid.component.scss
+++ b/src/app/features/website/catalog/components/category-grid/category-grid.component.scss
@@ -18,7 +18,7 @@
}
&:focus-visible {
- outline: 3px solid rgba(73, 118, 113, 0.28);
+ outline: 3px solid color-mix(in srgb, var(--primary-color) 28%, white);
outline-offset: 4px;
border-radius: var(--radius-lg, 13px);
}
@@ -27,14 +27,14 @@
.catalog-category-image {
width: 100%;
aspect-ratio: 4 / 3;
- border: 1px solid #d3dad9;
+ border: 1px solid var(--border-color);
border-radius: 13px 13px 0 0;
box-shadow: 0 3px 4px rgba(0, 0, 0, 0.15);
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
- background: #f5f5f5;
+ background: var(--bg-secondary);
img {
width: 100%;
@@ -49,7 +49,7 @@
height: 100%;
align-items: center;
justify-content: center;
- color: #497671;
+ color: var(--primary-color);
font-size: 4rem;
font-weight: 800;
background: linear-gradient(135deg, #f7f8f8 0%, #e6eceb 100%);
@@ -58,18 +58,18 @@
.catalog-category-content {
min-height: 88px;
padding: 13px 16px;
- border: 1px solid #d3dad9;
+ border: 1px solid var(--border-color);
border-top: 0;
border-radius: 0 0 13px 13px;
box-shadow: 0 3px 4px rgba(0, 0, 0, 0.15);
- background: #f5f3f9;
+ background: var(--bg-secondary);
display: flex;
flex-direction: column;
gap: 8px;
}
.catalog-category-title {
- color: #1e3c38;
+ color: var(--text-primary);
font-size: var(--font-size-lg, 1rem);
font-weight: 800;
line-height: 1.25;
diff --git a/src/app/features/website/catalog/components/filters-panel/filters-panel.component.html b/src/app/features/website/catalog/components/filters-panel/filters-panel.component.html
index 3e654d1..b796570 100644
--- a/src/app/features/website/catalog/components/filters-panel/filters-panel.component.html
+++ b/src/app/features/website/catalog/components/filters-panel/filters-panel.component.html
@@ -95,9 +95,14 @@
type="button"
class="color-swatch"
[class.active]="isSelected(filter.id, option.value)"
+ [attr.aria-pressed]="isSelected(filter.id, option.value)"
[style.background]="option.colorHex ?? '#94a3b8'"
[attr.aria-label]="option.label"
- (click)="toggleOption(filter.id, option.value)">
+ (click)="toggleOption(filter.id, option.value)">
+ @if (isSelected(filter.id, option.value)) {
+ ✓
+ }
+
}
}
@@ -109,6 +114,7 @@
type="button"
class="size-chip"
[class.active]="isSelected(filter.id, option.value)"
+ [attr.aria-pressed]="isSelected(filter.id, option.value)"
(click)="toggleOption(filter.id, option.value)">{{ option.label }}
}
@@ -121,6 +127,7 @@
type="button"
class="rating-chip"
[class.active]="isSelected(filter.id, option.value)"
+ [attr.aria-pressed]="isSelected(filter.id, option.value)"
(click)="toggleOption(filter.id, option.value)">
★
{{ option.label }}
diff --git a/src/app/features/website/catalog/components/filters-panel/filters-panel.component.scss b/src/app/features/website/catalog/components/filters-panel/filters-panel.component.scss
index 6c0f4f8..92f0060 100644
--- a/src/app/features/website/catalog/components/filters-panel/filters-panel.component.scss
+++ b/src/app/features/website/catalog/components/filters-panel/filters-panel.component.scss
@@ -185,6 +185,9 @@
.color-swatch {
width: 30px;
height: 30px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
border: 2px solid transparent;
border-radius: 50%;
cursor: pointer;
@@ -193,6 +196,14 @@
.color-swatch.active {
border-color: var(--text-primary);
+ box-shadow: 0 0 0 2px var(--bg-primary), 0 0 0 3px var(--text-primary);
+}
+
+.color-swatch-check {
+ color: #fff;
+ font-size: var(--font-size-sm, 0.8125rem);
+ font-weight: var(--font-weight-bold, 700);
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}
.color-swatch:hover {
diff --git a/src/app/features/website/catalog/components/layout-switcher/layout-switcher.component.html b/src/app/features/website/catalog/components/layout-switcher/layout-switcher.component.html
index f47e19a..7abd8c1 100644
--- a/src/app/features/website/catalog/components/layout-switcher/layout-switcher.component.html
+++ b/src/app/features/website/catalog/components/layout-switcher/layout-switcher.component.html
@@ -5,6 +5,7 @@
class="layout-btn"
[class.active]="layout === active"
[attr.aria-label]="labels[layout] | translate"
+ [attr.aria-pressed]="layout === active"
(click)="activeChange.emit(layout)">
@switch (layout) {
@case ('grid') {
diff --git a/src/app/features/website/catalog/components/search-results/search-results.component.scss b/src/app/features/website/catalog/components/search-results/search-results.component.scss
index 6ceab9a..8f5fe2b 100644
--- a/src/app/features/website/catalog/components/search-results/search-results.component.scss
+++ b/src/app/features/website/catalog/components/search-results/search-results.component.scss
@@ -28,11 +28,11 @@
.skeleton-card {
min-height: 340px;
- border: 1px solid #d3dad9;
+ border: 1px solid var(--border-color);
border-radius: var(--radius-lg, 13px);
background:
linear-gradient(90deg, #edf1f1 25%, #e2ebea 50%, #edf1f1 75%) 16px 16px / calc(100% - 32px) calc(100% - 32px) no-repeat,
- #f5f3f9;
+ var(--bg-secondary);
background-size: 200% 100%;
animation: shimmer 1.2s linear infinite;
}
diff --git a/src/app/features/website/catalog/components/sorting-control/sorting-control.component.scss b/src/app/features/website/catalog/components/sorting-control/sorting-control.component.scss
index 354bf35..bc1ecb7 100644
--- a/src/app/features/website/catalog/components/sorting-control/sorting-control.component.scss
+++ b/src/app/features/website/catalog/components/sorting-control/sorting-control.component.scss
@@ -19,6 +19,12 @@
border-radius: var(--radius-sm);
padding: 0 8px;
font: inherit;
+ cursor: pointer;
+ transition: border-color var(--transition-fast);
+}
+
+.catalog-sorting select:hover {
+ border-color: var(--primary-color);
}
@media (max-width: 640px) {
diff --git a/src/app/features/website/catalog/containers/catalog-container.component.html b/src/app/features/website/catalog/containers/catalog-container.component.html
index 8b1ec44..442c3dd 100644
--- a/src/app/features/website/catalog/containers/catalog-container.component.html
+++ b/src/app/features/website/catalog/containers/catalog-container.component.html
@@ -262,7 +262,7 @@
@for (option of mobileSortOptions(); track option.id) {
-