feat(builder): implement professional brand management experience

New BrandOverviewComponent, mounted at the top of the existing
Branding section page (no route/schema/business-logic changes):

- Completion ring + recommended next step + last-modified timestamp,
  computed from real facade signals (branding.logoUrl/faviconUrl/
  socialImageUrl, theme.palette, theme.typography, lastSavedAt) -
  nothing fabricated.
- Brand Health checklist (6 items: logo, favicon, colors, typography,
  social image, accessibility) - icon+text, never color alone.
- Color palette preview: 10 swatches from the real ThemePaletteConfig
  (primary/secondary/accent/success/warning/danger/backgrounds/text/
  border), each with a readable label.
- Real WCAG contrast check (contrast.util.ts, relative-luminance
  formula) between configured text and background colors - shows an
  inline warning when below 4.5:1, never blocks publishing.
- Typography live preview using the configured heading/body font
  families and base size.
- Social share preview card (Open Graph-style) using the existing
  socialImageUrl + seo.default.title/description, with an explicit
  empty state when no image is set yet.

Scope cut from the full brief given this session's cost already well
over budget entering this sprint - see Known limitations in the final
report (no multi-variant logo/favicon management, no live responsive
device preview, no new media library/asset picker; all reuse the
existing single-logo/single-favicon fields and image-field upload
component as-is).

Could not verify live in-browser this sprint: port 4200 is held by
another chat's dev server. Verified via `tsc --noEmit` (clean) and
manual template/binding review only; one binding (`--pct` custom-
property style binding) was replaced with a plain computed string to
remove an unverifiable risk rather than ship it unverified.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-18 10:13:35 +04:00
parent f2038a93d2
commit a83cfdfe4d
10 changed files with 532 additions and 1 deletions

View File

@@ -762,6 +762,24 @@ export const hy: Translations = {
groupPreviewPurpose: 'Ստուգեք ձեր մարկետփլեյսը գնորդի աչքերով նախքան հրապարակելը՝ տարբեր էկրանների վրա։',
groupPreviewWhere: 'Սա նախադիտում է՝ գնորդները այն երբեք չեն տեսնում։',
groupPreviewSkip: 'Կարող եք հրապարակել փոփոխությունները առանց ստուգելու։',
brandOverviewTitle: 'Բրենդի ինքնություն',
brandOverviewSubtitle: 'Լոգոն, գույները և տառատեսակները, որոնք գնորդները տեսնում են յուրաքանչյուր էջում։',
brandOverviewComplete: 'Ձեր բրենդը ամբողջությամբ կարգավորված է։',
brandLastModified: 'Վերջին փոփոխությունը',
brandFaviconUploaded: 'Կայքի պատկերակը վերբեռնված է',
brandColorsSelected: 'Բրենդի գույները ընտրված են',
brandTypographyConfigured: 'Տառատեսակները կարգավորված են',
brandSocialImageUploaded: 'Սոցիալական ցանցերի պատկերը վերբեռնված է',
brandAccessibilityPassed: 'Տեքստի հակադրությունը լավ է',
brandColorsPreviewTitle: 'Մարկետփլեյսի գույները',
brandTypographyPreviewTitle: 'Տառատեսակներ',
brandSocialPreviewTitle: 'Ինչպես է սա երևում հղումը կիսելիս',
brandTypeSampleHeading: 'Վերնագրի օրինակ',
brandTypeSampleBody: 'Հիմնական տեքստի օրինակ, ինչպես գնորդները կտեսնեն։',
brandContrastWarning: 'Տեքստը ֆոնի վրա դժվար է կարդալ․ դիտարկեք ավելի հակադիր գույներ։ Սա չի արգելափակում հրապարակումը։',
brandSocialEmpty: 'Սոցիալական պատկեր դեռ վերբեռնված չէ․ հղումը կիսելիս գնորդները կտեսնեն դատարկ քարտ։',
brandAccentColor: 'Ընդգծող',
brandBorderColor: 'Եզրագծեր',
},
dashboard: {
title: 'Կառավարման վահանակ',