diff --git a/src/app/components/footer/footer.component.html b/src/app/components/footer/footer.component.html index 1f15d27..dd7e89b 100644 --- a/src/app/components/footer/footer.component.html +++ b/src/app/components/footer/footer.component.html @@ -24,15 +24,21 @@
© {{ currentYear }} {{ brandName }}. {{ 'footer.allRightsReserved' | translate }}
++ @if (copyrightText()) { + {{ copyrightText() }} + } @else { + © {{ currentYear }} {{ brandName }}. {{ 'footer.allRightsReserved' | translate }} + } +
@if (contactEmail) { {{ contactEmail }} } diff --git a/src/app/components/footer/footer.component.ts b/src/app/components/footer/footer.component.ts index 26a6f2d..9d33f68 100644 --- a/src/app/components/footer/footer.component.ts +++ b/src/app/components/footer/footer.component.ts @@ -5,22 +5,7 @@ import { TranslatePipe } from '../../i18n/translate.pipe'; import { LogoComponent } from '../logo/logo.component'; import { UiRuntimeFacade } from '../../facades/runtime/ui-runtime.facade'; import { LangRoutePipe } from '../../pipes/lang-route.pipe'; -import { ConfigService } from '../../core/config/config.service'; -import { StaticPageResolverService } from '../../core/config/static-page-resolver.service'; -import { BootstrapConfig, FooterNavigationGroupConfig, NavigationConfig, NavigationItemConfig, FooterNavigationItemConfig } from '../../shared/models/config'; -import { LanguageService } from '../../services/language.service'; - -interface FooterResolvedItem { - id: string; - label: string; - route: string; -} - -interface FooterResolvedGroup { - id: string; - title: string; - items: FooterResolvedItem[]; -} +import { FooterPaymentIcon, FooterResolvedGroup, FooterResolverService } from '../../core/config/footer-resolver.service'; @Component({ selector: 'app-footer', @@ -31,19 +16,23 @@ interface FooterResolvedGroup { }) export class FooterComponent { readonly footerGroups = signalMarketplace — мультиарендная B2B commerce-платформа.
", + "en": "Marketplace is a multi-tenant B2B commerce platform.
", + "hy": "Marketplace-ը բազմավարձակալ B2B առևտրային հարթակ է։
" + } + }, + "privacy-policy": { + "route": "/privacy-policy", + "title": { + "ru": "Политика конфиденциальности", + "en": "Privacy Policy", + "hy": "Գաղտնիության քաղաքականություն" + }, + "content": { + "ru": "Мы обрабатываем только необходимые данные.
", + "en": "We process only the data required for service operations.
", + "hy": "Մենք մշակում ենք միայն ծառայության համար անհրաժեշտ տվյալները։
" + } + }, + "terms-of-service": { + "route": "/terms-of-service", + "title": { + "ru": "Условия использования", + "en": "Terms of Service", + "hy": "Օգտագործման պայմաններ" + }, + "content": { + "ru": "Использование платформы регулируется публичной офертой.
", + "en": "Platform usage is governed by public offer terms.
", + "hy": "Հարթակի օգտագործումը կարգավորվում է հրապարակային առաջարկի պայմաններով։
" + } + } + }, "pages": [ { "id": "page-home", @@ -224,7 +299,9 @@ "path": "/", "exact": true }, - "layout": "default-public", + "layout": { + "type": "default" + }, "seoKey": "home", "visible": true, "sections": [ @@ -249,6 +326,13 @@ "id": "widget-hero-main", "type": "hero", "version": "1.0.0", + "order": 1, + "padding": "0.5rem 0", + "visibility": { + "desktop": true, + "tablet": true, + "mobile": true + }, "visible": true, "props": { "title": "Welcome to Marketplace Platform", @@ -279,6 +363,13 @@ "id": "widget-categories-root", "type": "categories", "version": "1.0.0", + "order": 1, + "padding": "0.25rem 0", + "visibility": { + "desktop": true, + "tablet": true, + "mobile": true + }, "visible": true, "props": { "title": "Categories", @@ -309,6 +400,13 @@ "id": "widget-featured-products", "type": "product-collection", "version": "1.0.0", + "order": 1, + "padding": "0", + "visibility": { + "desktop": true, + "tablet": true, + "mobile": true + }, "visible": true, "props": { "title": "Featured Products", diff --git a/src/styles.scss b/src/styles.scss index 5982fa4..5ffb604 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -147,7 +147,9 @@ a, button, input, textarea, select { } .section { - margin: 24px 0; + margin: 0; + padding-block: clamp(16px, 2.5vw, 32px); + animation: section-fade-in 320ms ease-out both; } .grid { @@ -155,6 +157,94 @@ a, button, input, textarea, select { gap: 16px; } +.card { + background: var(--bg-primary); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + box-shadow: var(--shadow-sm); + transition: transform 180ms ease, box-shadow 180ms ease; +} + +.card:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.product-card, +.item-card, +.catalog-product-card { + transition: transform 180ms ease, box-shadow 180ms ease; +} + +.product-card:hover, +.item-card:hover, +.catalog-product-card:hover { + transform: translateY(-2px) scale(1.01); +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + border: 1px solid transparent; + border-radius: var(--radius-md); + padding: 0.625rem 1rem; + font-weight: 600; + line-height: 1.2; + cursor: pointer; + text-decoration: none; + transition: transform 180ms ease, box-shadow 180ms ease, background-color 180ms ease, color 180ms ease, border-color 180ms ease; +} + +.btn:hover { + transform: translateY(-1px); +} + +.btn-primary { + background: var(--primary-color); + color: #fff; + border-color: var(--primary-color); +} + +.btn-primary:hover { + background: var(--primary-hover); + border-color: var(--primary-hover); +} + +.btn-secondary { + background: var(--secondary-color); + color: #fff; + border-color: var(--secondary-color); +} + +.btn-secondary:hover { + background: var(--secondary-hover); + border-color: var(--secondary-hover); +} + +.btn-ghost { + background: transparent; + color: var(--text-primary); + border-color: var(--border-color); +} + +.btn-ghost:hover { + background: rgba(73, 118, 113, 0.08); + border-color: var(--primary-color); +} + +@keyframes section-fade-in { + from { + opacity: 0; + transform: translateY(6px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + .grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }