# P0 Architecture Analysis — `sf_card.svg` → `BaseCard.vue` **Dátum:** 2026-06-18 **Szerző:** Fast Coder (Core Developer) **Státusz:** Elemzés kész — Jóváhagyásra vár **Cél:** Az [`sf_card.svg`](Pictures/sf_card.svg) vizuális paramétereinek elemzése és az univerzális `BaseCard.vue` komponens megvalósítási tervének elkészítése. --- ## 1. SVG Vizuális Elemzés ### 1.1 Fájl Áttekintés | Tulajdonság | Érték | |-------------|-------| | **Dokumentum típusa** | Inkscape SVG (v1.4.3) | | **Méret** | 959 × 1322 px | | **Rétegek** | 1 réteg (`g1` — "Image") | | **Vektoros elemek** | 2 darab `` elem | | **Komplexitás** | Alacsony — tiszta geometriai formák, nincs gradient, nincs pattern | ### 1.2 Pontos Színkódok | Elem | HEX | RGB | Leírás | |------|-----|-----|--------| | **Kártya teste (felső rész)** | `#306081` | `rgb(48, 96, 129)` | Sötét kékesszürke — a kártya alsó/fő panel színe | | **Kártya teste (alsó rész)** | `#ffffff` | `rgb(255, 255, 255)` | Fehér — a kártya felső panel színe (a path-ok közötti üres terület) | | **Háttér (pagecolor)** | `#ffffff` | `rgb(255, 255, 255)` | Inkscape vászon színe | > **Megjegyzés:** Az SVG-ben nincs explicit gradient vagy árnyék. A kártya vizuálisan két színblokkból áll: egy sötétkék (`#306081`) alsó rész és egy fehér felső rész, amelyeket a két `` elem határol. ### 1.3 Geometriai Elemzés #### Path 1 — Alsó kártyarész (sötétkék panel) ```svg ``` - **Pozíció:** A kártya alján helyezkedik el - **Sarokkerekítés:** Enyhén lekerekített sarkok (bezier görbék) - **Felső szegély:** Íves átmenet a fehér rész felé (enyhe "hullám") #### Path 2 — Felső kártyarész (fehér panel) ```svg ``` - **Pozíció:** A kártya tetején helyezkedik el - **Felső sarkok:** Enyhén lekerekítettek (bezier görbék) - **Alsó szegély:** Íves átmenet a sötétkék rész felé ### 1.4 Következtetés az SVG-ről Az SVG egy **klasszikus "kártya" formát** ábrázol, amely két színblokkból áll: 1. **Fehér felső rész** — a tartalom fő területe 2. **Sötétkék (`#306081`) alsó rész** — footer/akciósáv A forma **nem tartalmaz** gradient-eket, árnyékokat, ikonokat vagy komplex vektorgrafikát. A kártya **100%-ban reprodukálható tiszta CSS-sel** (Tailwind osztályokkal), az SVG beágyazása nem szükséges. --- ## 2. Meglévő Komponensek Auditja ### 2.1 Felfedezett Kártya Komponensek | Komponens | Fájl | Header | Body | Footer | Magasság | |-----------|------|--------|------|--------|----------| | **GlassCard** | [`ui/GlassCard.vue`](frontend/src/components/ui/GlassCard.vue) | ❌ (csak slot) | ✅ slot | ❌ | Változó | | **FinancialCard** | [`dashboard/FinancialCard.vue`](frontend/src/components/dashboard/FinancialCard.vue) | ✅ `h-12 bg-slate-700` | ✅ | ✅ CTA gomb | `h-[350px]` | | **MyVehiclesCard** | [`dashboard/MyVehiclesCard.vue`](frontend/src/components/dashboard/MyVehiclesCard.vue) | ✅ `h-12 bg-slate-700` | ✅ | ❌ | `h-[350px]` | | **CostsActionsCard** | [`dashboard/CostsActionsCard.vue`](frontend/src/components/dashboard/CostsActionsCard.vue) | ✅ `h-12 bg-slate-700` | ✅ | ❌ | `h-[350px]` | | **ServiceFinderCard** | [`dashboard/ServiceFinderCard.vue`](frontend/src/components/dashboard/ServiceFinderCard.vue) | ✅ `h-12 bg-slate-700` | ✅ | ❌ | `h-[350px]` | | **GamificationCard** | [`dashboard/GamificationCard.vue`](frontend/src/components/dashboard/GamificationCard.vue) | ✅ `h-12 bg-slate-700` | ✅ | ✅ CTA gomb | `h-[350px]` | | **ProfileTrustCard** | [`dashboard/ProfileTrustCard.vue`](frontend/src/components/dashboard/ProfileTrustCard.vue) | ✅ `h-12 bg-slate-700` | ✅ | ✅ CTA gomb | `h-[350px]` | | **SubscriptionPlansView** | [`views/SubscriptionPlansView.vue`](frontend/src/views/SubscriptionPlansView.vue) | ❌ (inline div) | ✅ | ✅ gomb | Változó | ### 2.2 Duplikált Kód Minta Minden dashboard kártya (6 db) **szinte azonos** külső struktúrát használ: ```html
ICON {{ t('title') }}
``` **Ez 6× duplikált kód.** A `BaseCard.vue` bevezetésével ez egyetlen komponensre redukálható. ### 2.3 GlassCard Elemzése A [`GlassCard.vue`](frontend/src/components/ui/GlassCard.vue) egy üvegdesign (glassmorphism) kártya, amely: - `backdrop-blur-xl` és `bg-white/[0.05]` átlátszóságot használ - Két variánsa van: `standard` és `premium` (gradiens border) - **Nincs** beépített header/footer slot-ja — csak egyetlen `` - **Nem kompatibilis** a dashboard kártyák struktúrájával (azok tömör fehér hátteret használnak) **Következtetés:** A `GlassCard` egy másik design rendszerhez készült (átlátszó/üveg). A dashboard kártyákhoz egy **új, dedikált `BaseCard`** komponens kell, amely a meglévő `bg-white/95` stílust használja. --- ## 3. BaseCard.vue — Megvalósítási Terv ### 3.1 Tervezési Döntések | Kérdés | Döntés | Indoklás | |--------|--------|----------| | **SVG beágyazás?** | ❌ **Nem** | Az SVG csak 2 színblokk — 100%-ban CSS-sel reprodukálható | | **Tailwind CSS?** | ✅ **Igen** | A meglévő kártyák is Tailwind-et használnak | | **Slot struktúra?** | ✅ **3 slot** | `header`, `body` (default), `footer` | | **Magasság?** | Prop: `height` | Alapértelmezett `h-[350px]`, de felülírható | | **Hover effekt?** | Prop: `hoverable` | A dashboard kártyák hover animációt használnak | | **Színrendszer?** | Prop: `headerColor` | Alapértelmezett `bg-slate-700`, de testreszabható | ### 3.2 Tervezett Komponens Struktúra ```vue ``` ### 3.3 Props Tervezés | Prop | Típus | Alapértelmezett | Leírás | |------|-------|-----------------|--------| | `hoverable` | `boolean` | `false` | Hover animáció (emelés + árnyék) | | `clickable` | `boolean` | `false` | cursor-pointer (ha nincs hover) | | `height` | `string` | `'h-[350px]'` | Kártya magasság (Tailwind class) | | `headerColor` | `string` | `'bg-slate-700'` | Header háttérszín | | `bodyPadding` | `'sm' \| 'md' \| 'lg' \| 'none'` | `'md'` | Body belső padding | | `customClass` | `string` | `''` | Extra CSS osztályok | ### 3.4 Slots Tervezés | Slot neve | Kötelező? | Használat | |-----------|-----------|-----------| | `header` | ❌ | Kártya fejléc (ikon + cím + badge-ek) | | `default` (body) | ✅ | Fő tartalom | | `footer` | ❌ | CTA gombok, akciósáv | ### 3.5 Migrációs Terv — Dashboard Kártyák | Jelenlegi komponens | Header tartalom | Footer | Migráció | |--------------------|-----------------|--------|----------| | `FinancialCard.vue` | `💰 Wallet` | ✅ "Top Up" gomb | Header → slot, Footer → slot | | `MyVehiclesCard.vue` | `🚗 My Vehicles` + count | ❌ | Header → slot | | `CostsActionsCard.vue` | `💰 Costs` | ❌ | Header → slot | | `ServiceFinderCard.vue` | `🔍 Service Finder` | ❌ | Header → slot | | `GamificationCard.vue` | `🏆 Stats & Points` + "Live" badge | ✅ "Refresh" gomb | Header → slot, Footer → slot | | `ProfileTrustCard.vue` | `🛡️ Profile` | ✅ "Profile →" gomb | Header → slot, Footer → slot | ### 3.6 SubscriptionPlansView Kártyák A [`SubscriptionPlansView.vue`](frontend/src/views/SubscriptionPlansView.vue) jelenleg **inline** `
`-eket használ kártyaként: ```html
``` Ezek **nem** használják a dashboard kártyák header/footer struktúráját. A `BaseCard` itt is használható lenne, de alacsonyabb prioritású, mivel a subscription kártyák más layoutot igényelnek (nincs header sáv, helyette cím + ár + feature lista). ### 3.7 Létrehozandó Fájlok | Fájl | Művelet | Leírás | |------|---------|--------| | [`frontend/src/components/ui/BaseCard.vue`](frontend/src/components/ui/) | **Új** | Univerzális kártya komponens 3 slot-tal | | `frontend/src/components/dashboard/FinancialCard.vue` | **Refaktor** | BaseCard használata | | `frontend/src/components/dashboard/MyVehiclesCard.vue` | **Refaktor** | BaseCard használata | | `frontend/src/components/dashboard/CostsActionsCard.vue` | **Refaktor** | BaseCard használata | | `frontend/src/components/dashboard/ServiceFinderCard.vue` | **Refaktor** | BaseCard használata | | `frontend/src/components/dashboard/GamificationCard.vue` | **Refaktor** | BaseCard használata | | `frontend/src/components/dashboard/ProfileTrustCard.vue` | **Refaktor** | BaseCard használata | --- ## 4. Összefoglalás ### Az SVG-ből kinyert vizuális paraméterek: - **Fő szín:** `#306081` (sötét kékesszürke) — header/footer háttér - **Másodlagos szín:** `#ffffff` (fehér) — body háttér - **Sarokkerekítés:** `rounded-2xl` (~16px) — megfelel a meglévő dashboard kártyáknak - **Forma:** Tiszta geometriai doboz, íves átmenettel a két szín között ### Javaslat: 1. **Hozzuk létre** a [`BaseCard.vue`](frontend/src/components/ui/BaseCard.vue) komponenst a fenti terv alapján 2. **Refaktoráljuk** a 6 dashboard kártyát a `BaseCard` használatára 3. **Ne ágyazzuk be** az SVG-t — a CSS/Tailwind megoldás elegendő és flexibilisebb 4. A `SubscriptionPlansView` kártyáit **később** lehet átállítani, mivel azok más struktúrát használnak ### Függőségek: - **Bemenet:** Jóváhagyás a Tervezőtől a fenti tervre - **Kimenet:** A dashboard kártyák egységes megjelenése, könnyebb karbantarthatóság