2026-07-09 02:29:12 +04:00
|
|
|
<!-- platform VERSION - Redesigned 2026 -->
|
2026-07-17 15:29:55 +04:00
|
|
|
<header class="platform-header" [class.platform-header--static]="headerConfig().sticky === false" [class.platform-header--centered]="headerConfig().layout === 'centered'">
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-header-container">
|
2026-02-14 00:45:17 +04:00
|
|
|
<!-- Logo -->
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showLogo) {
|
|
|
|
|
<a [attr.href]="homeUrl" class="platform-logo" (click)="navigateHome($event)">
|
|
|
|
|
<app-logo />
|
|
|
|
|
</a>
|
|
|
|
|
}
|
2026-01-18 18:57:06 +04:00
|
|
|
|
2026-02-14 02:59:26 +04:00
|
|
|
<!-- Navigation Buttons (desktop) -->
|
2026-07-09 02:29:12 +04:00
|
|
|
<nav class="platform-nav">
|
|
|
|
|
<div class="platform-nav-group">
|
2026-07-16 23:32:31 +04:00
|
|
|
<a [routerLink]="'/' | langRoute" routerLinkActive="platform-active" [routerLinkActiveOptions]="{exact: true}"
|
|
|
|
|
(click)="closeMenu()" class="platform-nav-btn">
|
2026-02-26 23:09:20 +04:00
|
|
|
{{ 'header.home' | translate }}
|
2026-02-14 00:45:17 +04:00
|
|
|
</a>
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showCategories) {
|
2026-07-16 23:32:31 +04:00
|
|
|
<button type="button" (click)="navigateToCatalog()" class="platform-nav-btn">
|
2026-07-10 13:43:53 +04:00
|
|
|
{{ 'header.catalog' | translate }}
|
|
|
|
|
</button>
|
|
|
|
|
}
|
2026-07-10 13:52:01 +04:00
|
|
|
@for (page of headerPages(); track page.id) {
|
2026-07-16 23:32:31 +04:00
|
|
|
<button type="button" (click)="navigateToStatic(page.route)" class="platform-nav-btn">
|
2026-07-10 13:52:01 +04:00
|
|
|
{{ page.title }}
|
|
|
|
|
</button>
|
|
|
|
|
}
|
2026-02-14 00:45:17 +04:00
|
|
|
</div>
|
|
|
|
|
</nav>
|
|
|
|
|
|
2026-02-14 02:34:11 +04:00
|
|
|
<!-- Search Box (desktop) -->
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showSearch) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-search-wrapper">
|
|
|
|
|
<div class="platform-search-box">
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="search" [size]="20" class="platform-search-icon" />
|
2026-07-09 02:29:12 +04:00
|
|
|
<input type="text" [placeholder]="'header.searchPlaceholder' | translate" class="platform-search-input" (click)="navigateToSearch()" readonly />
|
2026-02-14 00:45:17 +04:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
2026-02-14 00:45:17 +04:00
|
|
|
|
2026-02-14 02:34:11 +04:00
|
|
|
<!-- Search Icon (mobile only) -->
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showSearch) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<button class="platform-search-mobile" (click)="navigateToSearch()" [attr.aria-label]="'header.search' | translate">
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="search" [size]="18" />
|
2026-02-14 02:34:11 +04:00
|
|
|
</button>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
2026-02-14 02:34:11 +04:00
|
|
|
|
2026-02-14 00:45:17 +04:00
|
|
|
<!-- Right Actions -->
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-actions">
|
2026-07-10 15:55:38 +04:00
|
|
|
@if (headerConfig().showWishlist && features().wishlist && userExperienceConfig().wishlist.enabled) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<button type="button" class="platform-ux-btn" (click)="navigateToWishlist()" [attr.aria-label]="'header.wishlist' | translate">
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="heart" [size]="16" class="platform-ux-icon" />
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (userExperienceConfig().wishlist.headerBadgeEnabled && wishlistCount() > 0) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<span class="platform-ux-badge">{{ wishlistCount() }}</span>
|
2026-07-09 01:13:54 +04:00
|
|
|
}
|
|
|
|
|
</button>
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-10 15:55:38 +04:00
|
|
|
@if (headerConfig().showCompare && features().compare && userExperienceConfig().compare.enabled) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<button type="button" class="platform-ux-btn" (click)="navigateToCompare()" [attr.aria-label]="'header.compare' | translate">
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="scale" [size]="16" class="platform-ux-icon" />
|
2026-07-09 01:13:54 +04:00
|
|
|
@if (compareCount() > 0) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<span class="platform-ux-badge">{{ compareCount() }}</span>
|
2026-07-09 01:13:54 +04:00
|
|
|
}
|
|
|
|
|
</button>
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-14 00:45:17 +04:00
|
|
|
<!-- Cart Button -->
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showCart) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<a [routerLink]="'/cart' | langRoute" routerLinkActive="platform-cart-active" class="platform-cart-btn" (click)="closeMenu()">
|
|
|
|
|
<span class="platform-cart-icon">
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="cart" [size]="24" />
|
2026-06-20 14:00:28 +04:00
|
|
|
@if (cartItemCount() > 0) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<span class="platform-cart-badge">{{ cartItemCount() }}</span>
|
2026-06-20 14:00:28 +04:00
|
|
|
}
|
|
|
|
|
</span>
|
2026-01-18 18:57:06 +04:00
|
|
|
@if (cartItemCount() > 0) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<span class="platform-cart-total">{{ formatCartTotal(cartTotal()) }}</span>
|
2026-01-18 18:57:06 +04:00
|
|
|
}
|
|
|
|
|
</a>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
2026-01-18 18:57:06 +04:00
|
|
|
|
2026-02-28 17:18:24 +04:00
|
|
|
<!-- Region Selector (desktop only) -->
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showRegion) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-region-selector platform-lang-desktop">
|
2026-02-28 17:18:24 +04:00
|
|
|
<app-region-selector />
|
|
|
|
|
</div>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
2026-02-28 17:18:24 +04:00
|
|
|
|
2026-02-14 02:59:26 +04:00
|
|
|
<!-- Language Selector (desktop only) -->
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showLanguages) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-lang-selector platform-lang-desktop">
|
2026-02-14 00:45:17 +04:00
|
|
|
<app-language-selector />
|
|
|
|
|
</div>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
2026-01-18 18:57:06 +04:00
|
|
|
|
2026-02-14 00:45:17 +04:00
|
|
|
<!-- Mobile Menu Toggle -->
|
2026-07-09 02:29:12 +04:00
|
|
|
<button class="platform-menu-toggle" (click)="toggleMenu()" [class.active]="menuOpen" [attr.aria-label]="menuOpen ? ('header.closeMenu' | translate) : ('header.openMenu' | translate)" [attr.aria-expanded]="menuOpen">
|
2026-02-14 00:45:17 +04:00
|
|
|
<span></span>
|
|
|
|
|
<span></span>
|
|
|
|
|
<span></span>
|
|
|
|
|
</button>
|
2026-01-18 18:57:06 +04:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</header>
|
2026-02-14 02:59:26 +04:00
|
|
|
|
|
|
|
|
<!-- Mobile Menu Backdrop (outside header to blur page content) -->
|
|
|
|
|
@if (menuOpen) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-menu-backdrop" (click)="closeMenu()"></div>
|
2026-02-14 02:59:26 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
<!-- Mobile Menu Panel (outside header for correct stacking) -->
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-mobile-menu" [class.platform-mobile-menu-open]="menuOpen">
|
|
|
|
|
<a [routerLink]="'/' | langRoute" routerLinkActive="platform-mobile-active" [routerLinkActiveOptions]="{exact: true}"
|
|
|
|
|
(click)="closeMenu()" class="platform-mobile-item">
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="home" [size]="24" />
|
2026-02-26 23:09:20 +04:00
|
|
|
<span>{{ 'header.home' | translate }}</span>
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="chevronRight" [size]="16" class="platform-mobile-chevron" />
|
2026-02-14 02:59:26 +04:00
|
|
|
</a>
|
|
|
|
|
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showCategories) {
|
2026-07-19 23:22:40 +04:00
|
|
|
<button type="button" (click)="navigateToCatalog()" class="platform-mobile-item">
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="layoutGrid" [size]="24" />
|
2026-02-26 23:09:20 +04:00
|
|
|
<span>{{ 'header.catalog' | translate }}</span>
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="chevronRight" [size]="16" class="platform-mobile-chevron" />
|
2026-07-19 23:22:40 +04:00
|
|
|
</button>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
2026-02-14 02:59:26 +04:00
|
|
|
|
2026-07-10 13:52:01 +04:00
|
|
|
@for (page of headerPages(); track page.id) {
|
2026-07-19 23:22:40 +04:00
|
|
|
<button type="button" (click)="navigateToStatic(page.route)" class="platform-mobile-item">
|
2026-07-10 13:52:01 +04:00
|
|
|
<span>{{ page.title }}</span>
|
fix(icons): replace hand-rolled inline SVGs with Lucide (header, search)
Header: same magnifying-glass path was hand-duplicated twice with two
different hex fills (#576463 desktop, #1e3c38 mobile) - now one
app-icon name="search", color inherited via currentColor. Wishlist/
compare buttons used bare '♥'/'⇄' text glyphs, entirely outside any
icon system - replaced with heart/scale icons. Cart icon, mobile-menu
home/catalog icons, and three duplicated inline chevron SVGs replaced
with app-icon equivalents. Cleaned up now-dead CSS that targeted the
old raw svg/path selectors.
Search: the same magnifying-glass path was hand-duplicated 4 times
(input icon, empty-query state, no-results state, no-query state) at
three sizes and three colors. Replaced all four with app-icon,
preserving each state's intended color via a color property on the
wrapper (icons default to currentColor).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 02:37:23 +04:00
|
|
|
<app-icon name="chevronRight" [size]="16" class="platform-mobile-chevron" />
|
2026-07-19 23:22:40 +04:00
|
|
|
</button>
|
2026-07-10 13:52:01 +04:00
|
|
|
}
|
2026-02-14 02:59:26 +04:00
|
|
|
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-mobile-controls">
|
2026-07-10 13:43:53 +04:00
|
|
|
@if (headerConfig().showRegion) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-mobile-lang">
|
2026-06-10 17:49:22 +04:00
|
|
|
<app-region-selector />
|
|
|
|
|
</div>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
|
|
|
|
@if (headerConfig().showLanguages) {
|
2026-07-09 02:29:12 +04:00
|
|
|
<div class="platform-mobile-lang">
|
2026-06-10 17:49:22 +04:00
|
|
|
<app-language-selector />
|
|
|
|
|
</div>
|
2026-07-10 13:43:53 +04:00
|
|
|
}
|
2026-02-14 02:59:26 +04:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-07-09 02:29:12 +04:00
|
|
|
|
|
|
|
|
|