@bytebrand/fe-ui-core-autobahn 1.0.111 → 1.0.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cards/CarRow.tsx +2 -0
- package/cards/cardParts.tsx +50 -18
- package/locales/de/autobahn.json +5 -5
- package/locales/en/autobahn.json +5 -5
- package/package.json +2 -2
- package/theme/md3.css +126 -13
- package/vdp/VdpModules.tsx +4050 -4008
- package/vdp/types.ts +1 -1
package/cards/CarRow.tsx
CHANGED
|
@@ -250,6 +250,7 @@ const CarRow: React.FunctionComponent<CarRowProps> = ({
|
|
|
250
250
|
{car.rating && (
|
|
251
251
|
<StatChip tone={ratingTone(car.rating)} icon={ratingTone(car.rating) === 'good' ? 'check' : 'minus'}>
|
|
252
252
|
{t('autobahn:tier.' + car.rating)}
|
|
253
|
+
{ratingTone(car.rating) === 'good' && <sup>4</sup>}
|
|
253
254
|
</StatChip>
|
|
254
255
|
)}
|
|
255
256
|
</div>
|
|
@@ -296,6 +297,7 @@ const CarRow: React.FunctionComponent<CarRowProps> = ({
|
|
|
296
297
|
{car.rating && (
|
|
297
298
|
<StatChip tone={ratingTone(car.rating)} icon={ratingTone(car.rating) === 'good' ? 'check' : 'minus'}>
|
|
298
299
|
{t('autobahn:tier.' + car.rating)}
|
|
300
|
+
{ratingTone(car.rating) === 'good' && <sup>4</sup>}
|
|
299
301
|
</StatChip>
|
|
300
302
|
)}
|
|
301
303
|
<div style={{ flex: 1 }}>
|
package/cards/cardParts.tsx
CHANGED
|
@@ -600,7 +600,7 @@ export const PriceHero: React.FunctionComponent<PriceHeroProps> = ({ car, mode,
|
|
|
600
600
|
<div className={'pp-hero' + (isMoney ? ' pp-hero--buy' : '')}>
|
|
601
601
|
<div className="pp-hero-rate">
|
|
602
602
|
<b className={'num pp-hero-val' + rateLenClass + buyLen6Class}>
|
|
603
|
-
{isMoney ? value.toLocaleString('de-DE') : fmtRate(value)} €
|
|
603
|
+
{isMoney ? value.toLocaleString('de-DE') : fmtRate(value)} €{isMoney && <sup>1</sup>}
|
|
604
604
|
</b>
|
|
605
605
|
{/* z.B./old-rate/unit grouped in one stacked column beside the hero figure — mirrors
|
|
606
606
|
the VDP finance-calculator's .fin-rate-unit layout (FinanceCalculator.tsx) exactly.
|
|
@@ -900,28 +900,60 @@ interface PpRowProps {
|
|
|
900
900
|
focus?: boolean;
|
|
901
901
|
/** format as a full euro price (Kaufen) instead of a rounded rate. */
|
|
902
902
|
money?: boolean;
|
|
903
|
+
t: TranslationFunction;
|
|
903
904
|
}
|
|
904
905
|
|
|
905
906
|
/**
|
|
906
907
|
* One payment-path row: label (+ a quiet info marker) on the left, the price right-aligned
|
|
907
908
|
* with an optional struck-through previous price above it. Even row spacing reproduces the
|
|
908
|
-
* production "Finanzierung / Leasing / Kaufen" price table the design references.
|
|
909
|
+
* production "Finanzierung / Leasing / Kaufen" price table the design references. The struck
|
|
910
|
+
* `old` price gets the same "²" UvpBadge + click-to-open popover as PriceHero's own Kaufen
|
|
911
|
+
* old-price (same n, same body/close copy) — one-to-one, not a re-styled variant.
|
|
909
912
|
*/
|
|
910
|
-
const PpRow: React.FunctionComponent<PpRowProps> = ({ label, value, unit, old, focus, money }) =>
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
<span className="pp-
|
|
919
|
-
{
|
|
920
|
-
<
|
|
913
|
+
const PpRow: React.FunctionComponent<PpRowProps> = ({ label, value, unit, old, focus, money, t }) => {
|
|
914
|
+
const [uvpTooltipOpen, setUvpTooltipOpen] = useState(false);
|
|
915
|
+
// 5-plus-digit prices (e.g. 60.248 €) shrink to keep the row from crowding — 4-digit values
|
|
916
|
+
// stay at the base size. Same digit-length technique as PriceHero's buyLen6Class.
|
|
917
|
+
const valDigits = String(Math.round(value)).length;
|
|
918
|
+
const valLenClass = valDigits >= 5 ? ' pp-val--len5' : '';
|
|
919
|
+
return (
|
|
920
|
+
<div className={'pp-row' + (focus ? ' pp-row--focus' : '')}>
|
|
921
|
+
<span className="pp-row-label">
|
|
922
|
+
{label}
|
|
923
|
+
<Icon name="info" size={13} stroke={1.9} cls="pp-row-i" />
|
|
921
924
|
</span>
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
+
<span className="pp-row-price">
|
|
926
|
+
{old != null && (
|
|
927
|
+
<span
|
|
928
|
+
className="pp-old"
|
|
929
|
+
role="button"
|
|
930
|
+
tabIndex={0}
|
|
931
|
+
onClick={(e) => {
|
|
932
|
+
e.stopPropagation();
|
|
933
|
+
setUvpTooltipOpen((v) => !v);
|
|
934
|
+
}}
|
|
935
|
+
>
|
|
936
|
+
{old.toLocaleString('de-DE')} €
|
|
937
|
+
<UvpBadge
|
|
938
|
+
n={2}
|
|
939
|
+
open={uvpTooltipOpen}
|
|
940
|
+
onToggle={() => setUvpTooltipOpen((v) => !v)}
|
|
941
|
+
onClose={() => setUvpTooltipOpen(false)}
|
|
942
|
+
closeLabel={t('autobahn:modal.close')}
|
|
943
|
+
body={t('autobahn:card.price.uvpListTooltipBody')}
|
|
944
|
+
/>
|
|
945
|
+
</span>
|
|
946
|
+
)}
|
|
947
|
+
<span className="pp-now">
|
|
948
|
+
{unit && <span className="pp-unit">{unit}</span>}
|
|
949
|
+
<b className={'num pp-val' + valLenClass}>
|
|
950
|
+
{money ? value.toLocaleString('de-DE') : fmtRate(value)} €{money && <sup>1</sup>}
|
|
951
|
+
</b>
|
|
952
|
+
</span>
|
|
953
|
+
</span>
|
|
954
|
+
</div>
|
|
955
|
+
);
|
|
956
|
+
};
|
|
925
957
|
|
|
926
958
|
/**
|
|
927
959
|
* Monthly-rate payment paths (SRP price column, TOP group) — modelled on the legacy design:
|
|
@@ -978,7 +1010,7 @@ export const PricePaths: React.FunctionComponent<PricePathsProps> = ({ car, t, c
|
|
|
978
1010
|
</div>
|
|
979
1011
|
{hasLease && (
|
|
980
1012
|
<div className="pp-lease-row">
|
|
981
|
-
<PpRow label={t('autobahn:card.price.leasing')} value={car.lease as number} unit="mtl." />
|
|
1013
|
+
<PpRow label={t('autobahn:card.price.leasing')} value={car.lease as number} unit="mtl." t={t} />
|
|
982
1014
|
{hasLeasTerms && (
|
|
983
1015
|
<div className="pp-sub-terms">
|
|
984
1016
|
{/* dedicated keys (not a rework of leaseTerms) so mobile/VDP's own reviewed
|
|
@@ -1009,7 +1041,7 @@ export const PricePaths: React.FunctionComponent<PricePathsProps> = ({ car, t, c
|
|
|
1009
1041
|
export const PriceKauf: React.FunctionComponent<PricePathsProps> = ({ car, t }) => {
|
|
1010
1042
|
const showStrike = car.savings != null && car.savings > 600 && car.listPrice != null;
|
|
1011
1043
|
return (
|
|
1012
|
-
<PpRow label={t('autobahn:card.price.buy')} value={car.price} old={showStrike ? (car.listPrice as number) : null} money />
|
|
1044
|
+
<PpRow label={t('autobahn:card.price.buy')} value={car.price} old={showStrike ? (car.listPrice as number) : null} money t={t} />
|
|
1013
1045
|
);
|
|
1014
1046
|
};
|
|
1015
1047
|
|
package/locales/de/autobahn.json
CHANGED
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
"srp": {
|
|
281
281
|
"trust": {
|
|
282
282
|
"topQuality": "Top Qualität",
|
|
283
|
-
"warranty": "
|
|
283
|
+
"warranty": "12 Monate Garantie",
|
|
284
284
|
"financing": "Günstige Finanzierung",
|
|
285
285
|
"testDrive": "14 Tage Probefahrt"
|
|
286
286
|
},
|
|
@@ -497,7 +497,7 @@
|
|
|
497
497
|
"seo": {
|
|
498
498
|
"title": "{{name}} gebraucht kaufen | auto.de",
|
|
499
499
|
"regPrefix": "EZ",
|
|
500
|
-
"descriptionSuffix": " – online kaufen oder finanzieren bei auto.de. Inkl.
|
|
500
|
+
"descriptionSuffix": " – online kaufen oder finanzieren bei auto.de. Inkl. 12 Monate Garantie & 14 Tage Rückgaberecht."
|
|
501
501
|
}
|
|
502
502
|
},
|
|
503
503
|
"fuel": {
|
|
@@ -582,14 +582,14 @@
|
|
|
582
582
|
"heading": "Fahrzeugbeschreibung",
|
|
583
583
|
"showMore": "Mehr anzeigen",
|
|
584
584
|
"showLess": "Weniger anzeigen",
|
|
585
|
-
"defaultBody": "Dieser {{make}} {{model}} ({{trim}}) überzeugt mit {{power}} und {{gear}}. Das Fahrzeug ist scheckheftgepflegt, unfallfrei und stammt aus {{owners}}. Hand. Erstzulassung {{reg}}, Laufleistung {{km}} km, Außenfarbe {{color}}. Jedes auto.de-Fahrzeug durchläuft einen 130-Punkte-Check und kommt mit
|
|
585
|
+
"defaultBody": "Dieser {{make}} {{model}} ({{trim}}) überzeugt mit {{power}} und {{gear}}. Das Fahrzeug ist scheckheftgepflegt, unfallfrei und stammt aus {{owners}}. Hand. Erstzulassung {{reg}}, Laufleistung {{km}} km, Außenfarbe {{color}}. Jedes auto.de-Fahrzeug durchläuft einen 130-Punkte-Check und kommt mit 12 Monate Garantie sowie 14 Tagen Rückgaberecht. Lieferung deutschlandweit bis vor die Tür oder Abholung nach Vereinbarung. Finanzierung und Leasing zu fairen Konditionen direkt online — die monatliche Rate berechnest du oben im Rechner."
|
|
586
586
|
},
|
|
587
587
|
"trust": {
|
|
588
|
-
"warranty": "
|
|
588
|
+
"warranty": "12 Monate Garantie",
|
|
589
589
|
"return": "14 Tage Rückgabe",
|
|
590
590
|
"delivery": "Lieferung o. Abholung",
|
|
591
591
|
"inspection": "130-Punkte-Check",
|
|
592
|
-
"warrantySub": "Sicher fahren -
|
|
592
|
+
"warrantySub": "Sicher fahren - 12 Monate lang",
|
|
593
593
|
"returnSub": "Ohne Angabe von Gründen",
|
|
594
594
|
"deliverySub": "Deutschlandweit flexibel wählen",
|
|
595
595
|
"inspectionSub": "Geprüfte Qualität für mehr Sicherheit"
|
package/locales/en/autobahn.json
CHANGED
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
"srp": {
|
|
281
281
|
"trust": {
|
|
282
282
|
"topQuality": "Top Quality",
|
|
283
|
-
"warranty": "
|
|
283
|
+
"warranty": "12 months warranty",
|
|
284
284
|
"financing": "Affordable financing",
|
|
285
285
|
"testDrive": "14 days test drive"
|
|
286
286
|
},
|
|
@@ -497,7 +497,7 @@
|
|
|
497
497
|
"seo": {
|
|
498
498
|
"title": "{{name}} used car for sale | auto.de",
|
|
499
499
|
"regPrefix": "Reg.",
|
|
500
|
-
"descriptionSuffix": " – buy or finance online at auto.de. Incl.
|
|
500
|
+
"descriptionSuffix": " – buy or finance online at auto.de. Incl. 12-month warranty & 14-day return policy."
|
|
501
501
|
}
|
|
502
502
|
},
|
|
503
503
|
"fuel": {
|
|
@@ -582,14 +582,14 @@
|
|
|
582
582
|
"heading": "Vehicle description",
|
|
583
583
|
"showMore": "Show more",
|
|
584
584
|
"showLess": "Show less",
|
|
585
|
-
"defaultBody": "This {{make}} {{model}} ({{trim}}) impresses with {{power}} and {{gear}}. The vehicle has a full service history, is accident-free and comes from owner no. {{owners}}. First registration {{reg}}, mileage {{km}} km, exterior colour {{color}}. Every auto.de vehicle passes a 130-point check and comes with a
|
|
585
|
+
"defaultBody": "This {{make}} {{model}} ({{trim}}) impresses with {{power}} and {{gear}}. The vehicle has a full service history, is accident-free and comes from owner no. {{owners}}. First registration {{reg}}, mileage {{km}} km, exterior colour {{color}}. Every auto.de vehicle passes a 130-point check and comes with a 12-month warranty as well as a 14-day right of return. Delivery throughout Germany to your door, or collection by appointment. Financing and leasing at fair terms directly online — calculate your monthly rate in the calculator above."
|
|
586
586
|
},
|
|
587
587
|
"trust": {
|
|
588
|
-
"warranty": "
|
|
588
|
+
"warranty": "12-month warranty",
|
|
589
589
|
"return": "14-day returns",
|
|
590
590
|
"delivery": "Delivery or collection",
|
|
591
591
|
"inspection": "130-point check",
|
|
592
|
-
"warrantySub": "Drive safe —
|
|
592
|
+
"warrantySub": "Drive safe — for 12 months",
|
|
593
593
|
"returnSub": "No questions asked",
|
|
594
594
|
"deliverySub": "Flexible across Germany",
|
|
595
595
|
"inspectionSub": "Inspected quality for extra peace of mind"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytebrand/fe-ui-core-autobahn",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.113",
|
|
4
4
|
"description": "auto.de md3 (Autobahn) design system — UI primitives, cards, chrome, VDP modules, theme CSS and locales. Ships raw TypeScript source (like fe-ui-core before it); each consumer's bundler compiles it.",
|
|
5
5
|
"main": "index.ts",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@bytebrand/car-schema-selectors": "^2.0.7",
|
|
13
|
-
"@bytebrand/fe-financing": "^5.14.
|
|
13
|
+
"@bytebrand/fe-financing": "^5.14.19",
|
|
14
14
|
"classnames": "2.2.6",
|
|
15
15
|
"clsx": "^2.1.1",
|
|
16
16
|
"d3-format": "1.4.5",
|
package/theme/md3.css
CHANGED
|
@@ -55,10 +55,12 @@
|
|
|
55
55
|
--md-secondary-container: #e7e9f1;
|
|
56
56
|
--md-on-secondary-container: #3a4150;
|
|
57
57
|
|
|
58
|
-
/* price-rating + deal accent (green)
|
|
58
|
+
/* price-rating + deal accent (green) — same "good" tier green (TIER_COLORS[0], #168A45) and
|
|
59
|
+
16%-tint background as .fin-eval-pill--good (FinanceCalculator/VdpModules), so the
|
|
60
|
+
search-list/VDP-header StatChip and the finance-card rating pill read as the same color. */
|
|
59
61
|
--md-good: #0f7b43;
|
|
60
|
-
--md-good-container: #
|
|
61
|
-
--md-on-good-container: #
|
|
62
|
+
--md-good-container: color-mix(in srgb, #168a45 16%, transparent);
|
|
63
|
+
--md-on-good-container: #168a45;
|
|
62
64
|
--md-warn-container: #fce3b4;
|
|
63
65
|
--md-on-warn-container: #4a3204;
|
|
64
66
|
--md-error: #ba1a1a;
|
|
@@ -437,6 +439,16 @@ line-height: 31px;
|
|
|
437
439
|
background: var(--md-warn-container);
|
|
438
440
|
color: var(--md-on-warn-container);
|
|
439
441
|
}
|
|
442
|
+
/* "4" footnote (VDP header's "Guter Preis" chip) — .statchip is a flex container like
|
|
443
|
+
.fin-eval-pill, so the same position:relative/top lift technique applies, just re-tuned for
|
|
444
|
+
this chip's smaller 12px text. */
|
|
445
|
+
.md3 .statchip sup {
|
|
446
|
+
position: relative;
|
|
447
|
+
top: -3px;
|
|
448
|
+
left: -3px;
|
|
449
|
+
font-size: 8px;
|
|
450
|
+
line-height: 8px;
|
|
451
|
+
}
|
|
440
452
|
.md3 .statchip .lucide {
|
|
441
453
|
width: 14px;
|
|
442
454
|
height: 14px;
|
|
@@ -4503,11 +4515,15 @@ line-height: 31px;
|
|
|
4503
4515
|
top: -7px;
|
|
4504
4516
|
right: -7px;
|
|
4505
4517
|
}
|
|
4518
|
+
/* positioned against .pp-eyebrow (line ~4476) — a tiny (8px text) span, so stretching between
|
|
4519
|
+
left/right offsets alone (as this used to do) computed a near-zero box width and forced the
|
|
4520
|
+
body text into a tall, narrow, wrapped column. Explicit width, same as the .cc-price/
|
|
4521
|
+
.fin-calc-card/.listcard-price .pp-old tooltip elsewhere, fixes that. */
|
|
4506
4522
|
.md3 .listcard-price .pricepaths .pp-uvp-tooltip {
|
|
4507
4523
|
position: absolute;
|
|
4508
|
-
top:
|
|
4509
|
-
right: -
|
|
4510
|
-
|
|
4524
|
+
top: 9px;
|
|
4525
|
+
right: -35px;
|
|
4526
|
+
width: 281px;
|
|
4511
4527
|
z-index: 20;
|
|
4512
4528
|
padding: 10px 12px;
|
|
4513
4529
|
border-radius: 15px;
|
|
@@ -4608,7 +4624,7 @@ line-height: 31px;
|
|
|
4608
4624
|
display: flex;
|
|
4609
4625
|
flex-direction: row;
|
|
4610
4626
|
align-items: baseline;
|
|
4611
|
-
gap:
|
|
4627
|
+
gap: 13px;
|
|
4612
4628
|
line-height: 1.08;
|
|
4613
4629
|
min-width: 0;
|
|
4614
4630
|
}
|
|
@@ -4634,6 +4650,27 @@ line-height: 31px;
|
|
|
4634
4650
|
letter-spacing: -0.4px;
|
|
4635
4651
|
white-space: nowrap;
|
|
4636
4652
|
}
|
|
4653
|
+
/* 5-plus-digit price (e.g. 60.248 €) shrinks so it doesn't crowd the row — 4-digit values keep
|
|
4654
|
+
the base 19px above untouched, same digit-length technique as .pp-hero-val--buy-len6/7. */
|
|
4655
|
+
.md3 .pp-val.pp-val--len5 {
|
|
4656
|
+
font-size: 16px;
|
|
4657
|
+
}
|
|
4658
|
+
/* Kaufen row's "1" price footnote marker (desktop .pricepaths stacked rows, PpRow money=true
|
|
4659
|
+
only) — same small/quiet sup treatment as the card's other footnote markers (.fin-eval-pill
|
|
4660
|
+
sup, .fin-rate-main sup, etc.): vertical-align:super does the actual lift, position:relative
|
|
4661
|
+
top just fine-tunes it for this specific 19px price size. */
|
|
4662
|
+
.md3 .pp-val sup {
|
|
4663
|
+
position: relative;
|
|
4664
|
+
top: 4px;
|
|
4665
|
+
left: 1px;
|
|
4666
|
+
vertical-align: super;
|
|
4667
|
+
font-family: 'Arial', Helvetica, sans-serif;
|
|
4668
|
+
font-style: normal;
|
|
4669
|
+
font-weight: 400;
|
|
4670
|
+
font-size: 8px;
|
|
4671
|
+
line-height: 9px;
|
|
4672
|
+
color: #111820;
|
|
4673
|
+
}
|
|
4637
4674
|
/* financing is the ONLY blue, dominant figure — big hero rate */
|
|
4638
4675
|
.md3 .pp-row--focus .pp-row-label {
|
|
4639
4676
|
color: var(--md-on-surface);
|
|
@@ -4854,13 +4891,22 @@ line-height: 31px;
|
|
|
4854
4891
|
color: #0e2238;
|
|
4855
4892
|
margin-bottom: 2px;
|
|
4856
4893
|
}
|
|
4894
|
+
/* .pp-old itself needs to be the positioned ancestor for its badge below (same reasoning as
|
|
4895
|
+
.cc-price/.fin-calc-card's own scoped `.pp-hero-old { position: relative }` override) —
|
|
4896
|
+
the base .pp-old rule has no position, so without this the badge would anchor to whatever
|
|
4897
|
+
positioned ancestor happens to be further up instead of sitting on the price text itself. */
|
|
4898
|
+
.md3 .listcard-price .pp-old {
|
|
4899
|
+
position: relative;
|
|
4900
|
+
}
|
|
4857
4901
|
/* footnote badge (small bordered circle, not a plain <sup>) pinned to the eyebrow's top-right
|
|
4858
4902
|
corner — absolute against .pp-eyebrow's own position:relative above. Shared by the CarCard
|
|
4859
|
-
hero (.cc-price)
|
|
4903
|
+
hero (.cc-price), the VDP FinanceCalculator's own rate example (.fin-calc-card), and
|
|
4904
|
+
CarRow's desktop stacked Kaufen row (.listcard-price .pp-old, PpRow's "2" badge). */
|
|
4860
4905
|
.md3 .cc-price .pp-eyebrow-badge,
|
|
4861
4906
|
.md3 .fin-calc-card .pp-eyebrow-badge,
|
|
4862
4907
|
.md3 .vdp-bottom-bar .pp-eyebrow-badge,
|
|
4863
|
-
.md3 .fin-modal .pp-eyebrow-badge
|
|
4908
|
+
.md3 .fin-modal .pp-eyebrow-badge,
|
|
4909
|
+
.md3 .listcard-price .pp-old .pp-eyebrow-badge {
|
|
4864
4910
|
display: inline-flex;
|
|
4865
4911
|
align-items: center;
|
|
4866
4912
|
justify-content: center;
|
|
@@ -4881,6 +4927,11 @@ line-height: 31px;
|
|
|
4881
4927
|
color: #0e2238;
|
|
4882
4928
|
cursor: pointer;
|
|
4883
4929
|
}
|
|
4930
|
+
/* CarRow's desktop stacked Kaufen row sits closer to the price text than the card contexts
|
|
4931
|
+
above, so the shared -8px offset sits a touch too far right. */
|
|
4932
|
+
.md3 .listcard-price .pp-old .pp-eyebrow-badge {
|
|
4933
|
+
right: -10px;
|
|
4934
|
+
}
|
|
4884
4935
|
/* mobile-only nudge: same badge, tucked slightly closer to the eyebrow text on narrow cards. */
|
|
4885
4936
|
@media (max-width: 1024px) {
|
|
4886
4937
|
.md3 .cc-price .pp-eyebrow-badge,
|
|
@@ -4899,11 +4950,14 @@ line-height: 31px;
|
|
|
4899
4950
|
top: -7px;
|
|
4900
4951
|
right: -12px;
|
|
4901
4952
|
}
|
|
4902
|
-
/* "3" footnote popover — click the badge above to open, the × or an outside click to close.
|
|
4953
|
+
/* "3" footnote popover — click the badge above to open, the × or an outside click to close.
|
|
4954
|
+
Also covers CarRow's desktop stacked Kaufen row (.listcard-price .pp-old, PpRow's "2"
|
|
4955
|
+
badge) — same popover, reused rather than re-styled. */
|
|
4903
4956
|
.md3 .cc-price .pp-uvp-tooltip,
|
|
4904
4957
|
.md3 .fin-calc-card .pp-uvp-tooltip,
|
|
4905
4958
|
.md3 .vdp-bottom-bar .pp-uvp-tooltip,
|
|
4906
|
-
.md3 .fin-modal .pp-uvp-tooltip
|
|
4959
|
+
.md3 .fin-modal .pp-uvp-tooltip,
|
|
4960
|
+
.md3 .listcard-price .pp-old .pp-uvp-tooltip {
|
|
4907
4961
|
position: absolute;
|
|
4908
4962
|
top: 6px;
|
|
4909
4963
|
right: -84px;
|
|
@@ -4922,6 +4976,12 @@ line-height: 31px;
|
|
|
4922
4976
|
top: -20px;
|
|
4923
4977
|
right: -110px;
|
|
4924
4978
|
}
|
|
4979
|
+
/* CarRow's desktop stacked Kaufen row is narrower still (.pp-old sits inline in the price
|
|
4980
|
+
row, not a full-width card), so the shared -84px offset overhangs it — pull it in closer. */
|
|
4981
|
+
.md3 .listcard-price .pp-old .pp-uvp-tooltip {
|
|
4982
|
+
top: 6px;
|
|
4983
|
+
right: -40px;
|
|
4984
|
+
}
|
|
4925
4985
|
/* .fin-calc-card is narrower than .cc-price / .fin-modal, so the shared -84px offset lets
|
|
4926
4986
|
the popover overhang the card's right edge — this rule itself is unscoped (applies at
|
|
4927
4987
|
every width, see the file-wide note above), so the max-width:600px block right below
|
|
@@ -4950,7 +5010,8 @@ line-height: 31px;
|
|
|
4950
5010
|
.md3 .cc-price .pp-uvp-tooltip-close,
|
|
4951
5011
|
.md3 .fin-calc-card .pp-uvp-tooltip-close,
|
|
4952
5012
|
.md3 .vdp-bottom-bar .pp-uvp-tooltip-close,
|
|
4953
|
-
.md3 .fin-modal .pp-uvp-tooltip-close
|
|
5013
|
+
.md3 .fin-modal .pp-uvp-tooltip-close,
|
|
5014
|
+
.md3 .listcard-price .pp-old .pp-uvp-tooltip-close {
|
|
4954
5015
|
position: absolute;
|
|
4955
5016
|
top: -38px;
|
|
4956
5017
|
right: -35px;
|
|
@@ -4968,7 +5029,8 @@ line-height: 31px;
|
|
|
4968
5029
|
.md3 .cc-price .pp-uvp-tooltip-body,
|
|
4969
5030
|
.md3 .fin-calc-card .pp-uvp-tooltip-body,
|
|
4970
5031
|
.md3 .vdp-bottom-bar .pp-uvp-tooltip-body,
|
|
4971
|
-
.md3 .fin-modal .pp-uvp-tooltip-body
|
|
5032
|
+
.md3 .fin-modal .pp-uvp-tooltip-body,
|
|
5033
|
+
.md3 .listcard-price .pp-old .pp-uvp-tooltip-body {
|
|
4972
5034
|
font-family: Arial, Helvetica, sans-serif;
|
|
4973
5035
|
font-weight: 400;
|
|
4974
5036
|
font-size: 11px;
|
|
@@ -5075,6 +5137,21 @@ line-height: 31px;
|
|
|
5075
5137
|
font-size: 43px;
|
|
5076
5138
|
line-height: 47px;
|
|
5077
5139
|
}
|
|
5140
|
+
/* CarCard Kaufen hero "1" price footnote marker — same treatment as
|
|
5141
|
+
.fin-rate-main .num.hide-mobile sup (see the desktop .cc-price .pp-hero--buy .pp-hero-val
|
|
5142
|
+
block below for the matching rule at that breakpoint). */
|
|
5143
|
+
.md3 .cc-price .pp-hero--buy .pp-hero-val sup {
|
|
5144
|
+
position: relative;
|
|
5145
|
+
top: 2px;
|
|
5146
|
+
left: 3px;
|
|
5147
|
+
vertical-align: super;
|
|
5148
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
5149
|
+
font-style: normal;
|
|
5150
|
+
font-weight: 400;
|
|
5151
|
+
font-size: 8px;
|
|
5152
|
+
line-height: 9px;
|
|
5153
|
+
color: #111820;
|
|
5154
|
+
}
|
|
5078
5155
|
/* Preisbewertung pill + segmented tier bar, grouped in one column exactly like the VDP
|
|
5079
5156
|
finance-calculator's MOBILE .fin-eval-col (FinanceCalculator.tsx) — replaces the old
|
|
5080
5157
|
StatChip pill + full-width gradient .pp-bar (see PriceEvalCol in cardParts.tsx). No
|
|
@@ -6641,6 +6718,12 @@ line-height: 31px;
|
|
|
6641
6718
|
.md3 .gitem {
|
|
6642
6719
|
padding: 20px 18px;
|
|
6643
6720
|
}
|
|
6721
|
+
/* title font-size 16→14 on mobile only — desktop keeps the inline style={{ fontSize: 16 }}
|
|
6722
|
+
set in NewMainPage.tsx's GuaranteeBand unchanged; !important is required here to beat
|
|
6723
|
+
that inline style (icon sizes are untouched, only the title text shrinks). */
|
|
6724
|
+
.md3 .gitem .md-title-sm {
|
|
6725
|
+
font-size: 14px !important;
|
|
6726
|
+
}
|
|
6644
6727
|
/* steps/hiw: the ≤980 Figma vertical-list card already applies here */
|
|
6645
6728
|
/* --- VDP header card: structured phone layout (desktop-composed VdpHeaderCard,
|
|
6646
6729
|
hidden on phone via hide-mobile — kept for tablet widths 600-980px where the
|
|
@@ -6744,6 +6827,13 @@ line-height: 31px;
|
|
|
6744
6827
|
.md3 .zustand-tile:nth-child(n + 3) {
|
|
6745
6828
|
border-top: 1px solid #d4dde7;
|
|
6746
6829
|
}
|
|
6830
|
+
/* Garantie label's "more info" link icon — 15x15 on mobile only (desktop keeps the
|
|
6831
|
+
Icon component's own size={14} prop, untouched); higher specificity than any
|
|
6832
|
+
.zustand-tile .lucide sizing rule beats it regardless of source order. */
|
|
6833
|
+
.md3 .zustand-tile a .lucide {
|
|
6834
|
+
width: 15px;
|
|
6835
|
+
height: 15px;
|
|
6836
|
+
}
|
|
6747
6837
|
.md3 .curated-grid {
|
|
6748
6838
|
grid-template-columns: 1fr;
|
|
6749
6839
|
gap: 12px;
|
|
@@ -6952,6 +7042,14 @@ line-height: 31px;
|
|
|
6952
7042
|
height: 22px;
|
|
6953
7043
|
margin-top: 1px;
|
|
6954
7044
|
}
|
|
7045
|
+
/* "12 Monate Garantie" label's "more info" link icon — 15x15 on mobile only (desktop
|
|
7046
|
+
keeps the Icon component's own size={14} prop) — higher specificity than the 22px
|
|
7047
|
+
rule above beats it regardless of source order. */
|
|
7048
|
+
.md3 .trust-strip a .lucide {
|
|
7049
|
+
width: 15px;
|
|
7050
|
+
height: 15px;
|
|
7051
|
+
margin-top: 0;
|
|
7052
|
+
}
|
|
6955
7053
|
.md3 .trust-strip > div > span {
|
|
6956
7054
|
display: block;
|
|
6957
7055
|
font-family: Arial, Helvetica, sans-serif;
|
|
@@ -10432,6 +10530,21 @@ color: #005CFF;
|
|
|
10432
10530
|
font-size: 43px;
|
|
10433
10531
|
line-height: 47px;
|
|
10434
10532
|
}
|
|
10533
|
+
/* CarCard Kaufen hero "1" price footnote marker — same treatment as
|
|
10534
|
+
.fin-rate-main .num.hide-mobile sup, not scoped to a media query since the same offset
|
|
10535
|
+
reads fine against both the mobile and desktop .pp-hero--buy .pp-hero-val sizes above. */
|
|
10536
|
+
.md3 .cc-price .pp-hero--buy .pp-hero-val sup {
|
|
10537
|
+
position: relative;
|
|
10538
|
+
top: 2px;
|
|
10539
|
+
left: 3px;
|
|
10540
|
+
vertical-align: super;
|
|
10541
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
10542
|
+
font-style: normal;
|
|
10543
|
+
font-weight: 400;
|
|
10544
|
+
font-size: 8px;
|
|
10545
|
+
line-height: 9px;
|
|
10546
|
+
color: #111820;
|
|
10547
|
+
}
|
|
10435
10548
|
|
|
10436
10549
|
/* Finanzierung/Leasing/Kaufen tabs — Figma: only the ACTIVE tab is bold + Deep Navy #0e2238
|
|
10437
10550
|
inactive text (the shared .fin-tab rule bolds both and uses #111820, since the VDP
|