12 KiB
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 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 <path> 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<path>elem határol.
1.3 Geometriai Elemzés
Path 1 — Alsó kártyarész (sötétkék panel)
<path style="fill:#306081"
d="m 168.62859,1261.8279 c -12.47141,-1.784 -25.24506,-11.5824 -31.03975,-23.81
L 134.5,1231.5 v -50.5204 -50.5205 l 3.35087,-6.8071
c 6.04108,-12.2723 16.85005,-21.1247 28.92039,-23.6854
3.12028,-0.662 110.34418,-0.912 315.22874,-0.7349
l 310.5,0.2683 5.78122,2.709
c 11.5255,5.4006 22.2104,18.6273 24.47002,30.291
0.56162,2.899 0.87028,24.5394 0.73454,51.5
-0.25606,50.8602 -0.20337,50.3688 -6.36068,59.3182
-6.1975,9.0077 -18.01232,16.8142 -27.55689,18.2078
-5.68739,0.8304 -615.17342,1.1267 -620.93962,0.3019 z" />
- 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)
<path style="fill:#ffffff"
d="M 2.25,185.33772 C 0.76962389,184.74037 0.38857818,47.208733 1.8590642,44.236431
2.3315495,43.281394 3.4982244,40.025 4.4516751,37
6.7993569,29.551542 13.230286,19.833498 19.405639,14.402448
25.056145,9.4329844 36.999577,3 40.57534,3
41.843984,3 43.160081,2.55 43.5,2
44.357522,0.61249997 915,0.61249997 915,2
c 0,0.55 1.05312,1 2.34028,1
4.22935,0 14.80939,6.1765597 21.67638,12.654527
7.89958,7.452064 13.30582,16.865801 14.84285,25.845473
1.00124,5.849387 1.33477,138.95439 0.35771,142.75
-0.42827,1.66372 -23.87631,1.74611 -475.58385,1.67105
C 217.31002,185.87763 2.9375,185.61513 2.25,185.33772 Z" />
- 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:
- Fehér felső rész — a tartalom fő területe
- 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 |
❌ (csak slot) | ✅ slot | ❌ | Változó |
| FinancialCard | dashboard/FinancialCard.vue |
✅ h-12 bg-slate-700 |
✅ | ✅ CTA gomb | h-[350px] |
| MyVehiclesCard | dashboard/MyVehiclesCard.vue |
✅ h-12 bg-slate-700 |
✅ | ❌ | h-[350px] |
| CostsActionsCard | dashboard/CostsActionsCard.vue |
✅ h-12 bg-slate-700 |
✅ | ❌ | h-[350px] |
| ServiceFinderCard | dashboard/ServiceFinderCard.vue |
✅ h-12 bg-slate-700 |
✅ | ❌ | h-[350px] |
| GamificationCard | dashboard/GamificationCard.vue |
✅ h-12 bg-slate-700 |
✅ | ✅ CTA gomb | h-[350px] |
| ProfileTrustCard | dashboard/ProfileTrustCard.vue |
✅ h-12 bg-slate-700 |
✅ | ✅ CTA gomb | h-[350px] |
| SubscriptionPlansView | 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:
<div class="bg-white/95 rounded-2xl shadow-[0_8px_30px_rgb(0,0,0,0.12)]
overflow-hidden flex flex-col h-[350px] relative
cursor-pointer transition-all duration-300 ease-out
transform hover:-translate-y-3 hover:scale-[1.02] hover:shadow-2xl">
<!-- Top header bar -->
<div class="h-12 bg-slate-700 w-full shrink-0 flex items-center px-4">
<span class="text-white font-bold text-sm tracking-wide">ICON {{ t('title') }}</span>
</div>
<!-- Content -->
<div class="p-4 flex-1 flex flex-col text-slate-800 overflow-hidden">
<!-- ... egyedi tartalom ... -->
</div>
</div>
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 egy üvegdesign (glassmorphism) kártya, amely:
backdrop-blur-xlésbg-white/[0.05]átlátszóságot használ- Két variánsa van:
standardéspremium(gradiens border) - Nincs beépített header/footer slot-ja — csak egyetlen
<slot /> - 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
<template>
<div
class="bg-white/95 rounded-2xl shadow-[0_8px_30px_rgb(0,0,0,0.12)]
overflow-hidden flex flex-col relative
transition-all duration-300 ease-out"
:class="[
heightClass,
hoverable ? 'cursor-pointer hover:-translate-y-3 hover:scale-[1.02] hover:shadow-2xl' : '',
clickable ? 'cursor-pointer' : '',
customClass,
]"
@click="$emit('click')"
>
<!-- ═══ HEADER SLOT ═══ -->
<div
v-if="$slots.header"
class="h-12 w-full shrink-0 flex items-center px-4"
:class="headerColorClass"
>
<slot name="header" />
</div>
<!-- ═══ BODY SLOT (default) ═══ -->
<div
class="flex-1 flex flex-col text-slate-800 overflow-hidden"
:class="bodyPaddingClass"
>
<slot />
</div>
<!-- ═══ FOOTER SLOT ═══ -->
<div v-if="$slots.footer" class="shrink-0 px-4 pb-4">
<slot name="footer" />
</div>
</div>
</template>
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 jelenleg inline <div>-eket használ kártyaként:
<div class="rounded-2xl border-2 border-slate-800 bg-white p-6 flex flex-col
shadow-lg hover:shadow-xl transition-all duration-200"
:class="{ 'ring-2 ring-emerald-500 border-emerald-500': ... }">
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 |
Ú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:
- Hozzuk létre a
BaseCard.vuekomponenst a fenti terv alapján - Refaktoráljuk a 6 dashboard kártyát a
BaseCardhasználatára - Ne ágyazzuk be az SVG-t — a CSS/Tailwind megoldás elegendő és flexibilisebb
- A
SubscriptionPlansViewká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