@bytebrand/fe-ui-core-autobahn 1.0.153 → 1.0.155
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/package.json +1 -1
- package/theme/md3.css +574 -169
- package/ui/MfieldCheckIcon.tsx +13 -13
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.155",
|
|
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",
|
package/theme/md3.css
CHANGED
|
@@ -1491,6 +1491,10 @@ line-height: 31px;
|
|
|
1491
1491
|
line-height: 15px;
|
|
1492
1492
|
color: #44464F;
|
|
1493
1493
|
margin-bottom: 2px;
|
|
1494
|
+
/* long submodels (e.g. "C4 1.2 Plus/Rückfahrkamera/Sitzheizung/Tempomat") use "/" instead of
|
|
1495
|
+
spaces between items, so the browser's default word-wrap sees one unbreakable "word" and
|
|
1496
|
+
overflows past the 296px aside instead of wrapping (ADV-238). */
|
|
1497
|
+
overflow-wrap: break-word;
|
|
1494
1498
|
}
|
|
1495
1499
|
.md3 .co-aside-finance {
|
|
1496
1500
|
font-family: 'Arial';
|
|
@@ -1653,6 +1657,7 @@ line-height: 31px;
|
|
|
1653
1657
|
font-size: 11px;
|
|
1654
1658
|
line-height: 150%;
|
|
1655
1659
|
color: #5B6B7F;
|
|
1660
|
+
text-align: justify;
|
|
1656
1661
|
}
|
|
1657
1662
|
.md3 .co-footer-inner p b {
|
|
1658
1663
|
font-weight: 700;
|
|
@@ -2400,7 +2405,7 @@ line-height: 31px;
|
|
|
2400
2405
|
.md3 .co-form {
|
|
2401
2406
|
display: flex;
|
|
2402
2407
|
flex-direction: column;
|
|
2403
|
-
gap:
|
|
2408
|
+
gap: 20px;
|
|
2404
2409
|
padding-bottom: 20px;
|
|
2405
2410
|
border-bottom: 1px solid #C5C6D2;
|
|
2406
2411
|
}
|
|
@@ -2418,10 +2423,19 @@ line-height: 31px;
|
|
|
2418
2423
|
.md3 .co-form.co-form--payment-details {
|
|
2419
2424
|
border-bottom: 0;
|
|
2420
2425
|
}
|
|
2421
|
-
/* order-overview step only — same reasoning, see OrderOverviewNext.tsx's "co-form oo-page".
|
|
2426
|
+
/* order-overview step only — same reasoning, see OrderOverviewNext.tsx's "co-form oo-page".
|
|
2427
|
+
gap also overridden to the shared ≤600px value (14px) at ALL widths, desktop included, per
|
|
2428
|
+
explicit request — the base .co-form's 20px (every other checkout step, except
|
|
2429
|
+
additional-services below) is untouched. */
|
|
2422
2430
|
.md3 .co-form.oo-page {
|
|
2431
|
+
gap: 14px;
|
|
2423
2432
|
border-bottom: 0;
|
|
2424
2433
|
}
|
|
2434
|
+
/* additional-services step only — see AdditionalServicesNext.tsx's "co-form co-form--additional-
|
|
2435
|
+
services". Same reasoning/value as .oo-page above, desktop included, per explicit request. */
|
|
2436
|
+
.md3 .co-form.co-form--additional-services {
|
|
2437
|
+
gap: 14px;
|
|
2438
|
+
}
|
|
2425
2439
|
.md3 .co-step-title {
|
|
2426
2440
|
font: 700 22px var(--md-font-display, var(--md-font));
|
|
2427
2441
|
margin: 0;
|
|
@@ -2923,6 +2937,13 @@ line-height: 31px;
|
|
|
2923
2937
|
height: 48px;
|
|
2924
2938
|
padding: 0 40px 0 10px;
|
|
2925
2939
|
}
|
|
2940
|
+
/* ADV-238: mandatory-but-empty Geburtsdatum must show the same red border as the other
|
|
2941
|
+
required fields. Same specificity as the rule above (two classes) so it only wins because
|
|
2942
|
+
it comes later in source order — .co-personal-grid .mfield--error can't reach in here, its
|
|
2943
|
+
border gets overridden by .co-birthdate .mfield right above for the same reason. */
|
|
2944
|
+
.md3 .co-birthdate .mfield--error {
|
|
2945
|
+
border: 1px solid #BA1A1A;
|
|
2946
|
+
}
|
|
2926
2947
|
/* on-the-border notch, matching .mfield-label--notch exactly (same mechanic as Vorwahl/
|
|
2927
2948
|
Telefonnummer's own label) instead of the earlier stacked-inside-the-box layout. */
|
|
2928
2949
|
.md3 .co-birthdate .mfield-label {
|
|
@@ -3090,6 +3111,25 @@ line-height: 31px;
|
|
|
3090
3111
|
.md3 .co-borrower-relationship .mselect-btn {
|
|
3091
3112
|
position: relative;
|
|
3092
3113
|
}
|
|
3114
|
+
/* ADV-240 QA (comment 35891): mandatory-but-empty red border — Dropdown has no built-in visual
|
|
3115
|
+
error state, so this keys off the `is-error` wrapper class PaymentDetailsNext.tsx adds. Three
|
|
3116
|
+
classes deep so it outranks both the base .mselect-btn idle box-shadow and this file's own
|
|
3117
|
+
.co-borrower-relationship .mselect-btn above without needing !important. */
|
|
3118
|
+
.md3 .co-borrower-relationship.is-error .mselect-btn {
|
|
3119
|
+
box-shadow: inset 0 0 0 1px #BA1A1A;
|
|
3120
|
+
}
|
|
3121
|
+
/* same chevron glyph as the ::after above, just stroke='%23BA1A1A' (red) instead of '%23005CFF'. */
|
|
3122
|
+
.md3 .co-borrower-relationship.is-error .mselect-btn::after {
|
|
3123
|
+
background-image: url("data:image/svg+xml,%3Csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3E%3Cpath%20d='M4%206L8%2010L12%206'%20stroke='%23BA1A1A'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
3124
|
+
}
|
|
3125
|
+
/* .co-borrower-relationship .mselect-btn:hover below is the SAME specificity (3 classes) as the
|
|
3126
|
+
.is-error border rule above and comes later in the file, so hovering an errored field was
|
|
3127
|
+
winning the box-shadow back to idle gray. One more class (:hover added to .is-error's own
|
|
3128
|
+
selector) outranks it regardless of source order — same fix shape as the co-birthdate
|
|
3129
|
+
:focus-within override above. */
|
|
3130
|
+
.md3 .co-borrower-relationship.is-error .mselect-btn:hover {
|
|
3131
|
+
box-shadow: inset 0 0 0 1px #BA1A1A;
|
|
3132
|
+
}
|
|
3093
3133
|
.md3 .co-borrower-relationship .mselect-btn:hover {
|
|
3094
3134
|
box-shadow: inset 0 0 0 1px var(--md-outline-variant);
|
|
3095
3135
|
}
|
|
@@ -3558,6 +3598,35 @@ line-height: 31px;
|
|
|
3558
3598
|
color: #1A1B22;
|
|
3559
3599
|
background: #FFFFFF;
|
|
3560
3600
|
}
|
|
3601
|
+
/* ADV-249 QA: Lieferadresse's "Abweichende Lieferadresse" form had no validation at all — this
|
|
3602
|
+
is its red error state, same red as .co-error (--md-error). Each field is now wrapped in
|
|
3603
|
+
.co-addr-form-item (the actual grid cell) so a per-field hint can sit directly under its own
|
|
3604
|
+
input instead of one generic message for the whole form. */
|
|
3605
|
+
.md3 .co-addr-form-item {
|
|
3606
|
+
display: flex;
|
|
3607
|
+
flex-direction: column;
|
|
3608
|
+
gap: 4px;
|
|
3609
|
+
min-width: 0;
|
|
3610
|
+
}
|
|
3611
|
+
.md3 .co-addr-form-field.is-error {
|
|
3612
|
+
border-color: var(--md-error);
|
|
3613
|
+
}
|
|
3614
|
+
/* native focus outline stacked on top of the red border looked like two rings at once
|
|
3615
|
+
(browser default blue + our red) — same inset-ring swap as .mtextarea:focus, red instead of
|
|
3616
|
+
blue while the field is still invalid. */
|
|
3617
|
+
.md3 .co-addr-form-field:focus {
|
|
3618
|
+
outline: 0;
|
|
3619
|
+
box-shadow: inset 0 0 0 2px #005CFF;
|
|
3620
|
+
}
|
|
3621
|
+
.md3 .co-addr-form-field.is-error:focus {
|
|
3622
|
+
box-shadow: inset 0 0 0 2px var(--md-error);
|
|
3623
|
+
}
|
|
3624
|
+
.md3 .co-addr-field-hint {
|
|
3625
|
+
color: var(--md-error);
|
|
3626
|
+
font-family: 'Arimo';
|
|
3627
|
+
font-size: 12px;
|
|
3628
|
+
line-height: 14px;
|
|
3629
|
+
}
|
|
3561
3630
|
.md3 .co-addr-form-actions {
|
|
3562
3631
|
grid-column: 1 / -1;
|
|
3563
3632
|
display: flex;
|
|
@@ -4608,79 +4677,189 @@ line-height: 31px;
|
|
|
4608
4677
|
border-left: 0 !important;
|
|
4609
4678
|
}
|
|
4610
4679
|
}
|
|
4611
|
-
/* "5. Monatlich zu zahlen" / "5. Gesamtpreis" (Figma
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
|
|
4616
|
-
|
|
4617
|
-
(
|
|
4618
|
-
.md3 .oo-
|
|
4619
|
-
|
|
4620
|
-
|
|
4621
|
-
|
|
4622
|
-
|
|
4680
|
+
/* "5. Monatlich zu zahlen" / "5. Gesamtpreis" (Figma: Finanzierung 64763:107263, Leasing
|
|
4681
|
+
64794:110315, Kaufen 64794:109673) — own "oo-pay-*" namespace, NOT the shared
|
|
4682
|
+
.cf-rate-row/.fin-eval-* classes CheckoutFinancePanelNext.tsx (step 3) uses: that component
|
|
4683
|
+
still renders the OLDER rate-hero pattern, and this card's Figma ("auto.de / Price Block") is
|
|
4684
|
+
a newer, differently-proportioned design (54px/38px amounts, different UVP layout) — reusing
|
|
4685
|
+
the old shared classes here would either look wrong or risk step 3 regressions if tweaked to
|
|
4686
|
+
fit. EvalBar is still the shared component (only the pill/bar's own wrapper sizing is new). */
|
|
4687
|
+
.md3 .oo-pay-rate {
|
|
4688
|
+
display: flex;
|
|
4689
|
+
flex-direction: column;
|
|
4690
|
+
gap: 6px;
|
|
4691
|
+
width: 100%;
|
|
4692
|
+
}
|
|
4693
|
+
/* Mobile-only condensed line under the price block (Figma: 63571:28425 financing / 64794:110041
|
|
4694
|
+
leasing) — see .show-mobile below for the display toggle. */
|
|
4695
|
+
.md3 .oo-pay-mobile-summary {
|
|
4623
4696
|
margin: 0;
|
|
4697
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4698
|
+
font-size: 13px;
|
|
4699
|
+
color: #0E2238;
|
|
4700
|
+
width: 100%;
|
|
4624
4701
|
}
|
|
4625
|
-
.md3 .oo-
|
|
4702
|
+
.md3 .oo-pay-price-row {
|
|
4626
4703
|
display: flex;
|
|
4627
4704
|
align-items: center;
|
|
4628
4705
|
justify-content: space-between;
|
|
4629
4706
|
gap: 16px;
|
|
4630
4707
|
width: 100%;
|
|
4631
4708
|
}
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
|
|
4709
|
+
.md3 .oo-pay-left {
|
|
4710
|
+
display: flex;
|
|
4711
|
+
align-items: center;
|
|
4712
|
+
gap: 8px;
|
|
4713
|
+
flex: 1 0 0;
|
|
4714
|
+
min-width: 0;
|
|
4715
|
+
}
|
|
4716
|
+
.md3 .oo-pay-amount {
|
|
4717
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4718
|
+
font-weight: 700;
|
|
4719
|
+
font-size: 54px;
|
|
4720
|
+
line-height: 58px;
|
|
4721
|
+
color: #005CFF;
|
|
4722
|
+
white-space: nowrap;
|
|
4723
|
+
}
|
|
4724
|
+
.md3 .oo-pay-secondary {
|
|
4635
4725
|
display: flex;
|
|
4636
4726
|
flex-direction: column;
|
|
4637
|
-
align-items: flex-end;
|
|
4638
4727
|
gap: 2px;
|
|
4728
|
+
align-items: flex-start;
|
|
4639
4729
|
}
|
|
4640
|
-
.md3 .oo-
|
|
4730
|
+
.md3 .oo-pay-uvp-row {
|
|
4641
4731
|
display: flex;
|
|
4642
4732
|
align-items: center;
|
|
4643
|
-
gap:
|
|
4733
|
+
gap: 3px;
|
|
4644
4734
|
}
|
|
4645
|
-
.md3 .oo-
|
|
4646
|
-
font-family: Arial;
|
|
4735
|
+
.md3 .oo-pay-uvp-label {
|
|
4736
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4737
|
+
font-size: 11px;
|
|
4738
|
+
color: #0E2238;
|
|
4739
|
+
white-space: nowrap;
|
|
4740
|
+
}
|
|
4741
|
+
/* Buy's own "UVP" label (17.14px, no footnote circle immediately after it — the circle sits
|
|
4742
|
+
after the struck amount instead) — kept separate from .oo-pay-uvp-label (11px, financing/
|
|
4743
|
+
leasing) since the two aren't the same text node in Figma. */
|
|
4744
|
+
.md3 .oo-pay-buy-uvp-label {
|
|
4745
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4647
4746
|
font-size: 17px;
|
|
4648
|
-
line-height: normal;
|
|
4649
|
-
/* Figma's "text-primary" token (#0e2238) — NOT var(--md-on-surface)/"text/strong" (#1a1b22),
|
|
4650
|
-
same distinction as .oo-mzz-cond below; matches the literal #0E2238 already hardcoded on
|
|
4651
|
-
.cf-rate-old/.co-card-title/.cf-panel .co-aside-cond elsewhere in this file. */
|
|
4652
4747
|
color: #0E2238;
|
|
4748
|
+
white-space: nowrap;
|
|
4653
4749
|
}
|
|
4654
|
-
.md3 .oo-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4750
|
+
.md3 .oo-pay-footnote {
|
|
4751
|
+
display: flex;
|
|
4752
|
+
align-items: center;
|
|
4753
|
+
justify-content: center;
|
|
4754
|
+
flex: none;
|
|
4755
|
+
width: 13px;
|
|
4756
|
+
height: 13px;
|
|
4757
|
+
border-radius: 999px;
|
|
4758
|
+
border: 1px solid #005CFF;
|
|
4759
|
+
background: #FFFFFF;
|
|
4760
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4761
|
+
font-size: 7px;
|
|
4659
4762
|
color: #005CFF;
|
|
4660
4763
|
}
|
|
4661
|
-
|
|
4662
|
-
|
|
4764
|
+
/* Buy's "①" next to the big price — plain text, no circle (Figma: no border/background on that
|
|
4765
|
+
node, unlike .oo-pay-footnote's "②"/"③"). */
|
|
4766
|
+
.md3 .oo-pay-footnote-plain {
|
|
4767
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4768
|
+
font-size: 9px;
|
|
4769
|
+
color: #005CFF;
|
|
4663
4770
|
}
|
|
4664
|
-
/*
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4771
|
+
/* Struck UVP amount — same mechanism as the shared .cf-rate-old::after (red bar, -10deg), kept
|
|
4772
|
+
as its own rule since .cf-rate-old itself is step 3's shared class (see file header above). */
|
|
4773
|
+
.md3 .oo-pay-uvp-amount {
|
|
4774
|
+
position: relative;
|
|
4775
|
+
display: inline-block;
|
|
4776
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4777
|
+
font-size: 20px;
|
|
4778
|
+
color: #0E2238;
|
|
4779
|
+
white-space: nowrap;
|
|
4780
|
+
}
|
|
4781
|
+
.md3 .oo-pay-uvp-amount::after {
|
|
4782
|
+
content: '';
|
|
4783
|
+
position: absolute;
|
|
4784
|
+
left: -2px;
|
|
4785
|
+
right: -2px;
|
|
4786
|
+
top: 50%;
|
|
4787
|
+
height: 2px;
|
|
4788
|
+
background: #D92D20;
|
|
4789
|
+
transform: rotate(-10deg);
|
|
4790
|
+
transform-origin: center;
|
|
4671
4791
|
}
|
|
4672
|
-
.md3 .oo-
|
|
4792
|
+
.md3 .oo-pay-unit {
|
|
4793
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4794
|
+
font-weight: 700;
|
|
4795
|
+
font-size: 18px;
|
|
4796
|
+
color: #5B6B7F;
|
|
4797
|
+
}
|
|
4798
|
+
.md3 .oo-pay-rating-col {
|
|
4799
|
+
display: flex;
|
|
4800
|
+
flex-direction: column;
|
|
4801
|
+
align-items: center;
|
|
4802
|
+
gap: 8px;
|
|
4803
|
+
flex: none;
|
|
4673
4804
|
width: 120px;
|
|
4674
4805
|
}
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
4806
|
+
/* Buy's price block uses its own 108px rating column (Figma: 64794:109673 desktop and 64833:89153
|
|
4807
|
+
mobile both specify 108px, not 120px) — same value at both breakpoints, unlike Financing/
|
|
4808
|
+
Leasing's column which only changes WIDTH BEHAVIOUR (fixed → flexible) on mobile, not this
|
|
4809
|
+
number, so this rule isn't itself inside a media query. */
|
|
4810
|
+
.md3 .oo-pay-rating-col--buy {
|
|
4811
|
+
width: 108px;
|
|
4812
|
+
}
|
|
4813
|
+
.md3 .oo-pay-rating-badge {
|
|
4814
|
+
display: flex;
|
|
4815
|
+
align-items: center;
|
|
4816
|
+
justify-content: center;
|
|
4817
|
+
width: 100%;
|
|
4818
|
+
padding: 5px 10px;
|
|
4819
|
+
border-radius: 16px;
|
|
4820
|
+
box-sizing: border-box;
|
|
4821
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4822
|
+
font-weight: 700;
|
|
4823
|
+
font-size: 12px;
|
|
4824
|
+
line-height: 18px;
|
|
4825
|
+
white-space: nowrap;
|
|
4826
|
+
}
|
|
4827
|
+
.md3 .oo-pay-rating-bar {
|
|
4828
|
+
width: 100%;
|
|
4829
|
+
}
|
|
4830
|
+
/* Buy's price block — right-aligned column (UVP above, big price below), unlike Financing/
|
|
4831
|
+
Leasing's side-by-side .oo-pay-left/.oo-pay-secondary. */
|
|
4832
|
+
.md3 .oo-pay-buy-price-col {
|
|
4833
|
+
display: flex;
|
|
4834
|
+
flex-direction: column;
|
|
4835
|
+
align-items: flex-end;
|
|
4836
|
+
gap: 2px;
|
|
4837
|
+
}
|
|
4838
|
+
.md3 .oo-pay-buy-uvp-row {
|
|
4839
|
+
display: flex;
|
|
4840
|
+
align-items: center;
|
|
4841
|
+
gap: 2px;
|
|
4842
|
+
}
|
|
4843
|
+
.md3 .oo-pay-buy-leftgroup {
|
|
4844
|
+
display: flex;
|
|
4845
|
+
align-items: flex-start;
|
|
4846
|
+
gap: 2px;
|
|
4847
|
+
}
|
|
4848
|
+
.md3 .oo-pay-buy-amount {
|
|
4849
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4850
|
+
font-weight: 700;
|
|
4851
|
+
font-size: 38px;
|
|
4852
|
+
line-height: 52px;
|
|
4853
|
+
color: #005CFF;
|
|
4854
|
+
white-space: nowrap;
|
|
4855
|
+
}
|
|
4856
|
+
.md3 .oo-pay-cond {
|
|
4857
|
+
margin: 0;
|
|
4858
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4678
4859
|
font-size: 13px;
|
|
4679
|
-
line-height: normal;
|
|
4680
|
-
/* Figma's "text-primary" (#0e2238), not "text/strong" — see .oo-mzz-uvp-label above. */
|
|
4681
4860
|
color: #0E2238;
|
|
4682
4861
|
}
|
|
4683
|
-
.md3 .oo-
|
|
4862
|
+
.md3 .oo-pay-cond-link {
|
|
4684
4863
|
background: none;
|
|
4685
4864
|
border: 0;
|
|
4686
4865
|
padding: 0;
|
|
@@ -4690,137 +4869,296 @@ line-height: 31px;
|
|
|
4690
4869
|
text-decoration: underline;
|
|
4691
4870
|
cursor: pointer;
|
|
4692
4871
|
}
|
|
4693
|
-
.md3 .oo-
|
|
4872
|
+
.md3 .oo-pay-row {
|
|
4694
4873
|
display: flex;
|
|
4695
4874
|
align-items: flex-start;
|
|
4696
4875
|
width: 100%;
|
|
4697
|
-
margin-top: 12px;
|
|
4698
4876
|
}
|
|
4699
|
-
|
|
4700
|
-
.md3 .oo-mzz-buy-list {
|
|
4877
|
+
.md3 .oo-pay-col-left {
|
|
4701
4878
|
display: flex;
|
|
4702
4879
|
flex-direction: column;
|
|
4703
4880
|
gap: 8px;
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
padding-
|
|
4707
|
-
border-top: 1px solid var(--md-outline-variant);
|
|
4881
|
+
flex: none;
|
|
4882
|
+
width: 266px;
|
|
4883
|
+
padding-right: 20px;
|
|
4708
4884
|
box-sizing: border-box;
|
|
4885
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4886
|
+
font-size: 14px;
|
|
4887
|
+
line-height: 1.4;
|
|
4709
4888
|
}
|
|
4710
|
-
.md3 .oo-
|
|
4889
|
+
.md3 .oo-pay-col-right {
|
|
4711
4890
|
display: flex;
|
|
4712
4891
|
flex-direction: column;
|
|
4892
|
+
gap: 10px;
|
|
4713
4893
|
flex: 1 0 0;
|
|
4714
4894
|
min-width: 0;
|
|
4895
|
+
padding-left: 20px;
|
|
4896
|
+
box-sizing: border-box;
|
|
4897
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4898
|
+
font-size: 14px;
|
|
4899
|
+
line-height: 1.4;
|
|
4715
4900
|
}
|
|
4716
|
-
.md3 .oo-
|
|
4717
|
-
gap: 8px;
|
|
4718
|
-
padding-right: 24px;
|
|
4719
|
-
}
|
|
4720
|
-
.md3 .oo-mzz-kv-col--right {
|
|
4721
|
-
gap: 10px;
|
|
4722
|
-
padding-left: 24px;
|
|
4723
|
-
}
|
|
4724
|
-
.md3 .oo-mzz-kv-rule {
|
|
4901
|
+
.md3 .oo-pay-divider {
|
|
4725
4902
|
flex: none;
|
|
4726
4903
|
align-self: stretch;
|
|
4727
4904
|
width: 1px;
|
|
4728
|
-
background:
|
|
4905
|
+
background: #C5C6D2;
|
|
4729
4906
|
}
|
|
4730
|
-
.md3 .oo-
|
|
4907
|
+
.md3 .oo-pay-kv-row {
|
|
4731
4908
|
display: flex;
|
|
4732
4909
|
align-items: baseline;
|
|
4733
|
-
|
|
4734
|
-
gap: 12px;
|
|
4910
|
+
gap: 8px;
|
|
4735
4911
|
width: 100%;
|
|
4736
|
-
font-family: Arial;
|
|
4737
|
-
font-size: 14px;
|
|
4738
|
-
line-height: 1.4;
|
|
4739
4912
|
}
|
|
4740
|
-
.
|
|
4913
|
+
/* Left column: short fixed label, value fills/right-aligns. Right column: label fills/wraps,
|
|
4914
|
+
value stays fixed — same inversion Figma itself uses between the two columns. */
|
|
4915
|
+
.md3 .oo-pay-kv-row--left .oo-pay-kv-label {
|
|
4916
|
+
flex: none;
|
|
4917
|
+
white-space: nowrap;
|
|
4918
|
+
}
|
|
4919
|
+
.md3 .oo-pay-kv-row--left .oo-pay-kv-value {
|
|
4741
4920
|
flex: 1 0 0;
|
|
4742
4921
|
min-width: 0;
|
|
4743
|
-
|
|
4922
|
+
text-align: right;
|
|
4744
4923
|
}
|
|
4745
|
-
.md3 .oo-
|
|
4924
|
+
.md3 .oo-pay-kv-row--right {
|
|
4925
|
+
gap: 12px;
|
|
4926
|
+
align-items: center;
|
|
4927
|
+
}
|
|
4928
|
+
.md3 .oo-pay-kv-row--right .oo-pay-kv-label {
|
|
4929
|
+
flex: 1 0 0;
|
|
4930
|
+
min-width: 0;
|
|
4931
|
+
display: flex;
|
|
4932
|
+
align-items: center;
|
|
4933
|
+
gap: 8px;
|
|
4934
|
+
}
|
|
4935
|
+
.md3 .oo-pay-kv-row--right .oo-pay-kv-value {
|
|
4936
|
+
flex: none;
|
|
4937
|
+
text-align: right;
|
|
4938
|
+
}
|
|
4939
|
+
/* Icon rows (Anschluss-Garantie / Rundum-Sorglos) invert the Fahrzeugrate row's flex roles in
|
|
4940
|
+
Figma: there the LABEL is the fixed, non-wrapping element (shrink-0 whitespace-nowrap) and the
|
|
4941
|
+
VALUE flexes/right-aligns into the remaining space — not the other way around, which is what
|
|
4942
|
+
made the long "2 Jahre Anschluss-Garantie"/icon combination wrap onto a second line. */
|
|
4943
|
+
.md3 .oo-pay-kv-row--icon .oo-pay-kv-label {
|
|
4746
4944
|
flex: none;
|
|
4747
|
-
color: var(--md-on-surface);
|
|
4748
4945
|
white-space: nowrap;
|
|
4749
4946
|
}
|
|
4750
|
-
.md3 .oo-
|
|
4751
|
-
|
|
4752
|
-
|
|
4753
|
-
|
|
4947
|
+
.md3 .oo-pay-kv-row--icon .oo-pay-kv-value {
|
|
4948
|
+
flex: 1 0 0;
|
|
4949
|
+
min-width: 0;
|
|
4950
|
+
white-space: nowrap;
|
|
4754
4951
|
}
|
|
4755
|
-
.md3 .oo-
|
|
4952
|
+
.md3 .oo-pay-kv-label {
|
|
4953
|
+
color: #44464F;
|
|
4954
|
+
}
|
|
4955
|
+
.md3 .oo-pay-kv-value {
|
|
4956
|
+
color: #1A1B22;
|
|
4957
|
+
}
|
|
4958
|
+
.md3 .oo-pay-info-icon {
|
|
4959
|
+
flex: none;
|
|
4960
|
+
}
|
|
4961
|
+
/* Same "open the Garantie explainer in a new tab" onClick behaviour as the Zulassung card's
|
|
4962
|
+
info trigger elsewhere in OrderOverviewNext.tsx — unstyled button wrapper so the icon keeps
|
|
4963
|
+
its inline position in the kv-label. */
|
|
4964
|
+
.md3 .oo-pay-info-trigger {
|
|
4965
|
+
display: inline-flex;
|
|
4966
|
+
align-items: center;
|
|
4967
|
+
justify-content: center;
|
|
4968
|
+
flex: none;
|
|
4969
|
+
width: 18px;
|
|
4970
|
+
height: 18px;
|
|
4971
|
+
background: none;
|
|
4972
|
+
border: 0;
|
|
4973
|
+
padding: 0;
|
|
4974
|
+
margin: 0;
|
|
4975
|
+
appearance: none;
|
|
4976
|
+
line-height: 0;
|
|
4977
|
+
cursor: pointer;
|
|
4978
|
+
}
|
|
4979
|
+
.md3 .oo-pay-rule-h {
|
|
4756
4980
|
width: 100%;
|
|
4757
4981
|
height: 1px;
|
|
4758
4982
|
border: 0;
|
|
4759
4983
|
margin: 0;
|
|
4760
|
-
background:
|
|
4984
|
+
background: #C5C6D2;
|
|
4761
4985
|
}
|
|
4762
|
-
.md3 .oo-
|
|
4763
|
-
|
|
4764
|
-
|
|
4986
|
+
.md3 .oo-pay-total-row {
|
|
4987
|
+
display: flex;
|
|
4988
|
+
align-items: baseline;
|
|
4989
|
+
gap: 3px;
|
|
4990
|
+
width: 100%;
|
|
4991
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4992
|
+
font-weight: 700;
|
|
4993
|
+
font-size: 14px;
|
|
4994
|
+
color: #1A1B22;
|
|
4995
|
+
}
|
|
4996
|
+
.md3 .oo-pay-total-row .oo-pay-kv-label {
|
|
4997
|
+
color: #1A1B22;
|
|
4998
|
+
}
|
|
4999
|
+
.md3 .oo-pay-total-row .oo-pay-kv-value {
|
|
5000
|
+
flex: 1 0 0;
|
|
5001
|
+
text-align: right;
|
|
5002
|
+
color: #1A1B22;
|
|
5003
|
+
}
|
|
5004
|
+
.md3 .oo-pay-vat-line {
|
|
5005
|
+
margin: 0;
|
|
5006
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4765
5007
|
font-size: 13px;
|
|
5008
|
+
color: #44464F;
|
|
5009
|
+
width: 100%;
|
|
5010
|
+
}
|
|
5011
|
+
.md3 .oo-pay-kaufpreis {
|
|
5012
|
+
width: 100%;
|
|
5013
|
+
padding-bottom: 12px;
|
|
5014
|
+
border-bottom: 1px solid #AAB3BF;
|
|
5015
|
+
box-sizing: border-box;
|
|
5016
|
+
}
|
|
5017
|
+
.md3 .oo-pay-kaufpreis p {
|
|
5018
|
+
margin: 0;
|
|
5019
|
+
font-family: Arimo, Arial, sans-serif;
|
|
5020
|
+
font-size: 15px;
|
|
5021
|
+
line-height: 1.35;
|
|
5022
|
+
color: #0E2238;
|
|
5023
|
+
}
|
|
5024
|
+
/* Kaufen only — single list (no left/right KV split), Figma's own "list" node. */
|
|
5025
|
+
.md3 .oo-pay-buy-list {
|
|
5026
|
+
display: flex;
|
|
5027
|
+
flex-direction: column;
|
|
5028
|
+
gap: 8px;
|
|
5029
|
+
width: 100%;
|
|
5030
|
+
padding-top: 12px;
|
|
5031
|
+
border-top: 1px solid #C5C6D2;
|
|
5032
|
+
box-sizing: border-box;
|
|
5033
|
+
font-family: Arimo, Arial, sans-serif;
|
|
5034
|
+
font-size: 14px;
|
|
4766
5035
|
line-height: 1.4;
|
|
4767
|
-
color: var(--md-on-surface);
|
|
4768
5036
|
}
|
|
4769
|
-
.md3 .oo-
|
|
5037
|
+
.md3 .oo-pay-buy-row {
|
|
5038
|
+
display: flex;
|
|
5039
|
+
align-items: baseline;
|
|
5040
|
+
gap: 12px;
|
|
5041
|
+
width: 100%;
|
|
5042
|
+
}
|
|
5043
|
+
.md3 .oo-pay-buy-row--icon {
|
|
5044
|
+
align-items: center;
|
|
5045
|
+
}
|
|
5046
|
+
.md3 .oo-pay-buy-row .oo-pay-kv-label {
|
|
5047
|
+
flex: 1 0 0;
|
|
5048
|
+
min-width: 0;
|
|
5049
|
+
display: flex;
|
|
5050
|
+
align-items: center;
|
|
5051
|
+
gap: 8px;
|
|
5052
|
+
}
|
|
5053
|
+
.md3 .oo-pay-buy-row .oo-pay-kv-value {
|
|
5054
|
+
flex: none;
|
|
5055
|
+
text-align: right;
|
|
5056
|
+
}
|
|
5057
|
+
/* Same Figma inversion as .oo-pay-kv-row--icon above: icon rows fix the label and flex the value. */
|
|
5058
|
+
.md3 .oo-pay-buy-row--icon .oo-pay-kv-label {
|
|
5059
|
+
flex: none;
|
|
5060
|
+
white-space: nowrap;
|
|
5061
|
+
}
|
|
5062
|
+
.md3 .oo-pay-buy-row--icon .oo-pay-kv-value {
|
|
5063
|
+
flex: 1 0 0;
|
|
5064
|
+
min-width: 0;
|
|
5065
|
+
white-space: nowrap;
|
|
5066
|
+
}
|
|
5067
|
+
.md3 .oo-pay-buy-total {
|
|
5068
|
+
display: flex;
|
|
5069
|
+
align-items: baseline;
|
|
5070
|
+
gap: 12px;
|
|
5071
|
+
width: 100%;
|
|
5072
|
+
font-weight: 700;
|
|
5073
|
+
color: #1A1B22;
|
|
5074
|
+
}
|
|
5075
|
+
.md3 .oo-pay-buy-total .oo-pay-kv-label {
|
|
5076
|
+
flex: 1 0 0;
|
|
5077
|
+
color: #1A1B22;
|
|
5078
|
+
}
|
|
5079
|
+
.md3 .oo-pay-buy-total .oo-pay-kv-value {
|
|
5080
|
+
flex: none;
|
|
5081
|
+
color: #1A1B22;
|
|
5082
|
+
}
|
|
5083
|
+
.md3 .oo-pay-hinweis {
|
|
4770
5084
|
display: flex;
|
|
4771
5085
|
align-items: center;
|
|
4772
5086
|
gap: 10px;
|
|
4773
5087
|
width: 100%;
|
|
4774
|
-
margin-top: 12px;
|
|
4775
5088
|
padding: 12px 14px;
|
|
4776
5089
|
border-radius: 12px;
|
|
4777
5090
|
background: #F4F5FA;
|
|
4778
5091
|
box-sizing: border-box;
|
|
4779
5092
|
}
|
|
4780
|
-
.md3 .oo-
|
|
5093
|
+
.md3 .oo-pay-hinweis svg {
|
|
4781
5094
|
flex: none;
|
|
4782
5095
|
}
|
|
4783
|
-
.md3 .oo-
|
|
4784
|
-
flex: 1 0 0;
|
|
4785
|
-
min-width: 0;
|
|
4786
|
-
font-family: Arial;
|
|
4787
|
-
font-size: 13px;
|
|
4788
|
-
line-height: 1.4;
|
|
4789
|
-
color: var(--md-on-surface-variant);
|
|
4790
|
-
margin: 0;
|
|
4791
|
-
}
|
|
4792
|
-
.md3 .oo-mzz-hinweis-link {
|
|
5096
|
+
.md3 .oo-pay-hinweis-link {
|
|
4793
5097
|
flex: none;
|
|
4794
5098
|
background: none;
|
|
4795
5099
|
border: 0;
|
|
4796
5100
|
padding: 0;
|
|
4797
|
-
font-family: Arial;
|
|
5101
|
+
font-family: Arimo, Arial, sans-serif;
|
|
4798
5102
|
font-weight: 700;
|
|
4799
5103
|
font-size: 13px;
|
|
4800
|
-
|
|
4801
|
-
color: var(--md-primary);
|
|
5104
|
+
color: #005CFF;
|
|
4802
5105
|
cursor: pointer;
|
|
4803
5106
|
}
|
|
4804
|
-
.md3 .oo-
|
|
5107
|
+
.md3 .oo-pay-hinweis-link:hover {
|
|
4805
5108
|
text-decoration: underline;
|
|
4806
5109
|
}
|
|
4807
|
-
|
|
4808
|
-
|
|
4809
|
-
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
|
|
4815
|
-
|
|
5110
|
+
/* Figma's "CK / Content" wrapper holds rate/row(-or-buy-list)/kaufpreis(-or-vat-line)/hinweis in
|
|
5111
|
+
a flex-col with gap:12px — .co-card itself isn't a flex container, so that inter-section gap
|
|
5112
|
+
has to be reproduced as margin-top on each section that can follow .oo-pay-rate. */
|
|
5113
|
+
.md3 .co-card > .oo-pay-row,
|
|
5114
|
+
.md3 .co-card > .oo-pay-buy-list,
|
|
5115
|
+
.md3 .co-card > .oo-pay-kaufpreis,
|
|
5116
|
+
.md3 .co-card > .oo-pay-vat-line,
|
|
5117
|
+
.md3 .co-card > .oo-pay-hinweis {
|
|
5118
|
+
margin-top: 12px;
|
|
5119
|
+
}
|
|
5120
|
+
/* Leasing only: "inkl. 19 % MwSt." is grouped with Monatliche Gesamtbelastung in its own
|
|
5121
|
+
gap-[12px] sub-wrapper in Figma, not the surrounding .oo-pay-col-right's gap:10px. */
|
|
5122
|
+
.md3 .oo-pay-col-right .oo-pay-vat-line {
|
|
5123
|
+
margin-top: 2px;
|
|
5124
|
+
}
|
|
5125
|
+
/* 600px to match the project-wide .show-mobile/.hide-mobile breakpoint (and the real Figma mobile
|
|
5126
|
+
frames: 63571:28425 financing / 64794:110041 leasing / 64833:89153 buy) — the earlier 800px
|
|
5127
|
+
generic-reflow rule guessed at a mobile layout before those frames existed; this replaces it. */
|
|
5128
|
+
@media (max-width: 600px) {
|
|
5129
|
+
/* Figma mobile swaps which side of the price row grows: the rating column flexes/shrinks and
|
|
5130
|
+
the price+UVP group stays at its natural width, the reverse of desktop's fixed 120px rating
|
|
5131
|
+
column + flexible price group. Buy's own price row (.oo-pay-buy-price-col/-leftgroup, 108px
|
|
5132
|
+
rating column) is unchanged between breakpoints, hence the :not() scope. */
|
|
5133
|
+
.md3 .oo-pay-left {
|
|
5134
|
+
flex: none;
|
|
4816
5135
|
}
|
|
4817
|
-
.md3 .oo-
|
|
4818
|
-
|
|
4819
|
-
|
|
5136
|
+
.md3 .oo-pay-rating-col:not(.oo-pay-rating-col--buy) {
|
|
5137
|
+
flex: 1 0 0;
|
|
5138
|
+
min-width: 0;
|
|
5139
|
+
width: auto;
|
|
4820
5140
|
}
|
|
4821
|
-
|
|
5141
|
+
/* The desktop two-column Laufzeit/Anzahlung/… | Fahrzeugrate/Garantie/RSP/… layout collapses
|
|
5142
|
+
into a single full-width list on mobile — col-left and the vertical divider disappear, and
|
|
5143
|
+
col-right (unchanged content, already exactly Figma's mobile "list") picks up the divider's
|
|
5144
|
+
old job as a border-top + padding-top instead of a padding-left. Figma's mobile "list" node
|
|
5145
|
+
also uses gap:8px row-to-row, not the desktop "rechts" column's gap:10px — same 8px buy's
|
|
5146
|
+
own (unchanged) list already uses. */
|
|
5147
|
+
.md3 .oo-pay-col-left,
|
|
5148
|
+
.md3 .oo-pay-divider {
|
|
4822
5149
|
display: none;
|
|
4823
5150
|
}
|
|
5151
|
+
.md3 .oo-pay-col-right {
|
|
5152
|
+
width: 100%;
|
|
5153
|
+
gap: 8px;
|
|
5154
|
+
padding-left: 0;
|
|
5155
|
+
padding-top: 12px;
|
|
5156
|
+
border-top: 1px solid #C5C6D2;
|
|
5157
|
+
box-sizing: border-box;
|
|
5158
|
+
}
|
|
5159
|
+
.md3 .oo-pay-hinweis {
|
|
5160
|
+
align-items: flex-start;
|
|
5161
|
+
}
|
|
4824
5162
|
}
|
|
4825
5163
|
.md3 .oo-car {
|
|
4826
5164
|
display: flex;
|
|
@@ -4997,11 +5335,15 @@ line-height: 31px;
|
|
|
4997
5335
|
muted gray as the body copy (var(--md-on-surface-variant) === Figma's var(--text/muted,
|
|
4998
5336
|
#44464f) fallback exactly), not the design system's usual blue link color (.oo-underline,
|
|
4999
5337
|
used elsewhere), so links here are styled with underline only. No border per explicit
|
|
5000
|
-
request. Sits
|
|
5001
|
-
|
|
5002
|
-
|
|
5338
|
+
request. Sits right after card 10, at the very bottom of the card stack (before .oo-next) on
|
|
5339
|
+
both desktop and mobile per explicit request — a spot this exact node isn't shown at in Figma
|
|
5340
|
+
(its own component description has it above the buy button instead). margin: 0 (not just
|
|
5341
|
+
margin-top) per explicit request — a bare <p> otherwise keeps the UA stylesheet's default
|
|
5342
|
+
margin-top AND margin-bottom (~1em each), which was still showing even after margin-top alone
|
|
5343
|
+
was removed. Spacing on every side now comes only from the parent .co-form.oo-page's own flex
|
|
5344
|
+
gap (14px), same as every other direct child in this step. */
|
|
5003
5345
|
.md3 .oo-legal-notice {
|
|
5004
|
-
margin
|
|
5346
|
+
margin: 0;
|
|
5005
5347
|
font-family: Arial;
|
|
5006
5348
|
font-size: 13px;
|
|
5007
5349
|
line-height: 1.5;
|
|
@@ -5020,7 +5362,6 @@ line-height: 31px;
|
|
|
5020
5362
|
display: flex;
|
|
5021
5363
|
align-items: center;
|
|
5022
5364
|
gap: 16px;
|
|
5023
|
-
margin-top: 24px;
|
|
5024
5365
|
padding-top: 18px;
|
|
5025
5366
|
border-top: 1px solid #C5C6D2;
|
|
5026
5367
|
}
|
|
@@ -5080,6 +5421,24 @@ line-height: 31px;
|
|
|
5080
5421
|
}
|
|
5081
5422
|
.md3 .oo-buy-btn {
|
|
5082
5423
|
width: 100%;
|
|
5424
|
+
height: 48px;
|
|
5425
|
+
font-size: 24px;
|
|
5426
|
+
}
|
|
5427
|
+
/* Figma 63492:4515 ("auto.de / Checkout CTA Bar") — mobile only, per explicit request: only
|
|
5428
|
+
the full-width buy button remains visible (Zurück/Schritt X already hidden above), so .oo-next
|
|
5429
|
+
itself becomes just that button's own white, padded shell instead of the desktop 3-up row.
|
|
5430
|
+
margin: 0 -23px breaks it out of .contentWrapper.nextLayout's own 23px mobile side padding
|
|
5431
|
+
(CheckoutPage.styl) for a true full-bleed white bar + top border — exact same technique/value
|
|
5432
|
+
already proven for .co-next's identical breakout a few hundred lines up in this file; that
|
|
5433
|
+
padding's parent (.contentContainer) already has overflow:visible at this width for exactly
|
|
5434
|
+
this purpose, so nothing else needs touching. */
|
|
5435
|
+
.md3 .oo-next {
|
|
5436
|
+
flex-direction: column;
|
|
5437
|
+
align-items: flex-start;
|
|
5438
|
+
margin: 0 -23px;
|
|
5439
|
+
gap: 8px;
|
|
5440
|
+
padding: 24px 16px;
|
|
5441
|
+
background: #FFFFFF;
|
|
5083
5442
|
}
|
|
5084
5443
|
}
|
|
5085
5444
|
@media (max-width: 800px) {
|
|
@@ -5092,9 +5451,13 @@ line-height: 31px;
|
|
|
5092
5451
|
800px the row collapses to 4 full-width stacked rows (adding "Hinweise zur Beschaffenheit"),
|
|
5093
5452
|
each divided by a horizontal rule instead — unlike .oo-ls-row's mobile stack, this card's own
|
|
5094
5453
|
Figma mobile variant keeps dividers between every row, so it can't reuse .oo-ls-cell as-is. */
|
|
5454
|
+
/* .oo-fb-notes is now a 4th (conditional) child of .oo-fb-row instead of a separate sibling —
|
|
5455
|
+
flex-wrap + its own flex-basis:100% drops it to its own full-width line on desktop, same as
|
|
5456
|
+
before; on mobile (below) the row becomes one plain stacked column so wrap no longer matters. */
|
|
5095
5457
|
.md3 .oo-fb-row {
|
|
5096
5458
|
display: flex;
|
|
5097
5459
|
align-items: flex-start;
|
|
5460
|
+
flex-wrap: wrap;
|
|
5098
5461
|
gap: 20px;
|
|
5099
5462
|
}
|
|
5100
5463
|
.md3 .oo-fb-cell {
|
|
@@ -5105,15 +5468,15 @@ line-height: 31px;
|
|
|
5105
5468
|
}
|
|
5106
5469
|
.md3 .oo-fb-row .oo-fb-cell {
|
|
5107
5470
|
flex: 1 0 0;
|
|
5108
|
-
padding: 0 20px;
|
|
5109
5471
|
}
|
|
5110
|
-
|
|
5111
|
-
|
|
5112
|
-
|
|
5113
|
-
|
|
5114
|
-
|
|
5115
|
-
|
|
5116
|
-
.md3 .oo-fb-row .oo-fb-cell:not(:first-child) {
|
|
5472
|
+
/* Figma (64755:99667) has no padding on the cells themselves — the 41px total gap between two
|
|
5473
|
+
cells' content is the row's own 20px gap, a 1px divider, then another 20px gap, modelled here
|
|
5474
|
+
as a border-left (no extra divider element needed) plus 20px padding-left so the border doesn't
|
|
5475
|
+
sit flush against the next cell's icon. Padding on every cell (both sides) double-counted with
|
|
5476
|
+
the row gap and made the gap 61px instead of 41px. Excludes .oo-fb-notes — that one gets its own
|
|
5477
|
+
full-width/horizontal-divider treatment below, never this vertical one. */
|
|
5478
|
+
.md3 .oo-fb-row .oo-fb-cell:not(:first-child):not(.oo-fb-notes) {
|
|
5479
|
+
padding-left: 20px;
|
|
5117
5480
|
border-left: 1px solid var(--md-outline-variant);
|
|
5118
5481
|
}
|
|
5119
5482
|
.md3 .oo-fb-cell svg {
|
|
@@ -5143,20 +5506,37 @@ line-height: 31px;
|
|
|
5143
5506
|
color: var(--md-on-surface-variant);
|
|
5144
5507
|
overflow-wrap: break-word;
|
|
5145
5508
|
}
|
|
5146
|
-
.md3 .oo-fb-notes {
|
|
5509
|
+
.md3 .oo-fb-row .oo-fb-cell.oo-fb-notes {
|
|
5510
|
+
flex-basis: 100%;
|
|
5147
5511
|
width: 100%;
|
|
5148
5512
|
margin-top: 14px;
|
|
5149
5513
|
padding-top: 14px;
|
|
5150
5514
|
border-top: 1px solid var(--md-outline-variant);
|
|
5151
5515
|
}
|
|
5152
|
-
|
|
5516
|
+
/* Mobile (Figma 63571:28484 used-car / 64800:111786 new-car, 3 rows, no Hinweise): the 3-cell row
|
|
5517
|
+
+ separate full-width notes strip both collapse into ONE vertical list — every item gets the
|
|
5518
|
+
same icon+text row with a horizontal divider, first row has no top border/padding, last row has
|
|
5519
|
+
no bottom padding. :last-child picks whichever row (Fahrzeughalter or Hinweise) actually ends up
|
|
5520
|
+
last, since .oo-fb-notes is a real (conditionally-rendered) child of .oo-fb-row now, not a
|
|
5521
|
+
sibling CSS couldn't reach from here. 600px to match the project-wide mobile breakpoint — this
|
|
5522
|
+
used to be 800px, a guess from before any mobile Figma frame for this card existed. */
|
|
5523
|
+
@media (max-width: 600px) {
|
|
5153
5524
|
.md3 .oo-fb-row {
|
|
5154
5525
|
flex-direction: column;
|
|
5526
|
+
flex-wrap: nowrap;
|
|
5155
5527
|
gap: 0;
|
|
5156
5528
|
}
|
|
5157
5529
|
.md3 .oo-fb-row .oo-fb-cell {
|
|
5530
|
+
flex-basis: auto;
|
|
5158
5531
|
width: 100%;
|
|
5159
5532
|
padding: 12px 0;
|
|
5533
|
+
}
|
|
5534
|
+
/* Same selector (and so the same specificity) as the desktop vertical-divider rule above —
|
|
5535
|
+
.oo-fb-row .oo-fb-cell{border-left:0} alone is LESS specific than that :not():not() rule
|
|
5536
|
+
(5 selector components vs 3), so it was silently losing to it and leaving the desktop
|
|
5537
|
+
border-left:1px/padding-left:20px active on mobile, stacked on top of the new border-top. */
|
|
5538
|
+
.md3 .oo-fb-row .oo-fb-cell:not(:first-child):not(.oo-fb-notes) {
|
|
5539
|
+
padding-left: 0;
|
|
5160
5540
|
border-left: 0;
|
|
5161
5541
|
}
|
|
5162
5542
|
.md3 .oo-fb-row .oo-fb-cell:first-child {
|
|
@@ -5165,7 +5545,15 @@ line-height: 31px;
|
|
|
5165
5545
|
.md3 .oo-fb-row .oo-fb-cell:not(:first-child) {
|
|
5166
5546
|
border-top: 1px solid var(--md-outline-variant);
|
|
5167
5547
|
}
|
|
5168
|
-
.md3 .oo-fb-
|
|
5548
|
+
.md3 .oo-fb-row .oo-fb-cell:last-child {
|
|
5549
|
+
padding-bottom: 0;
|
|
5550
|
+
}
|
|
5551
|
+
/* Same specificity as the desktop .oo-fb-row .oo-fb-cell.oo-fb-notes rule (not just .oo-fb-notes
|
|
5552
|
+
alone) — otherwise that rule's margin-top:14px/flex-basis:100%/width:100% would still win here
|
|
5553
|
+
even inside this media query, since media nesting doesn't change specificity. */
|
|
5554
|
+
.md3 .oo-fb-row .oo-fb-cell.oo-fb-notes {
|
|
5555
|
+
flex-basis: auto;
|
|
5556
|
+
width: 100%;
|
|
5169
5557
|
margin-top: 0;
|
|
5170
5558
|
padding-top: 12px;
|
|
5171
5559
|
}
|
|
@@ -5460,15 +5848,7 @@ line-height: 31px;
|
|
|
5460
5848
|
the JSX, not here. Both graphic blocks (the EU statutory-warranty notice, the GARAN
|
|
5461
5849
|
certificate) are static images, not hand-coded — see the long comment above WARRANTY_NOTICE_IMG
|
|
5462
5850
|
in OrderOverviewNext.tsx for why (Figma ships them fully vector-flattened). */
|
|
5463
|
-
/* same fix as .oo-promo-card above — .co-card-title's shared margin-bottom:16px leaves a
|
|
5464
|
-
stray gap under the title when the card is collapsed; .oo-warranty-body's own margin-top
|
|
5465
|
-
restores that 16px only once actually expanded (both cards default expanded, but the user can
|
|
5466
|
-
still collapse them). */
|
|
5467
|
-
.md3 .oo-warranty-card .co-card-title {
|
|
5468
|
-
margin-bottom: 0;
|
|
5469
|
-
}
|
|
5470
5851
|
.md3 .oo-warranty-body {
|
|
5471
|
-
margin-top: 16px;
|
|
5472
5852
|
display: flex;
|
|
5473
5853
|
flex-direction: column;
|
|
5474
5854
|
gap: 12px;
|
|
@@ -5476,13 +5856,61 @@ line-height: 31px;
|
|
|
5476
5856
|
.md3 .oo-warranty-notice-img {
|
|
5477
5857
|
display: block;
|
|
5478
5858
|
width: 100%;
|
|
5479
|
-
max-width:
|
|
5859
|
+
max-width: 331px; /* Figma desktop (node 64763:84703): "Amtliche Mitteilung" 330.5x467.4, not stretched */
|
|
5480
5860
|
height: auto;
|
|
5481
5861
|
}
|
|
5862
|
+
@media (max-width: 600px) {
|
|
5863
|
+
.md3 .oo-warranty-notice-img {
|
|
5864
|
+
max-width: 251px; /* Figma mobile (node 64850:108036): 251.2x355.2 */
|
|
5865
|
+
}
|
|
5866
|
+
}
|
|
5867
|
+
/* Card 9 only — its image+link are centered (Figma: items-center). Card 10's open-state image+
|
|
5868
|
+
link are left-aligned (Figma: both sit at x=0 in their 572px-wide content), so this centering
|
|
5869
|
+
must NOT live on the shared .oo-warranty-notice-img/.oo-warranty-link rules themselves. */
|
|
5870
|
+
.md3 .oo-warranty-body--centered .oo-warranty-notice-img,
|
|
5871
|
+
.md3 .oo-warranty-body--centered .oo-warranty-link {
|
|
5872
|
+
align-self: center;
|
|
5873
|
+
}
|
|
5482
5874
|
.md3 .oo-warranty-garan-img {
|
|
5483
5875
|
display: block;
|
|
5484
5876
|
width: 100%;
|
|
5485
|
-
max-width: 320px;
|
|
5877
|
+
max-width: 320px; /* Figma (node 64669:36509): "vollständig" label, 320x336.8 */
|
|
5878
|
+
height: auto;
|
|
5879
|
+
}
|
|
5880
|
+
@media (max-width: 600px) {
|
|
5881
|
+
.md3 .oo-warranty-garan-img {
|
|
5882
|
+
/* Figma (node 64669:105484, dev-mode inspect): 215x226.31, centered — desktop (64669:36509)
|
|
5883
|
+
is left-aligned at 320px; mobile is centered and narrower, a real per-breakpoint
|
|
5884
|
+
difference in the file, not a mistake. */
|
|
5885
|
+
max-width: 215px;
|
|
5886
|
+
}
|
|
5887
|
+
/* .oo-warranty-garan-img-wrap (the role="img" host) is the actual flex child of
|
|
5888
|
+
.oo-warranty-body — align-self on .oo-warranty-garan-img itself (a grandchild) would be a
|
|
5889
|
+
no-op. */
|
|
5890
|
+
.md3 .oo-warranty-garan-img-wrap {
|
|
5891
|
+
align-self: center;
|
|
5892
|
+
}
|
|
5893
|
+
/* Card 10's "Weitere Informationen" link is left-aligned on desktop (confirmed, node
|
|
5894
|
+
64669:36509) but centered on mobile along with the image above it — same real
|
|
5895
|
+
per-breakpoint difference, not scoped via .oo-warranty-body--centered since that's card 9's
|
|
5896
|
+
own (desktop-centered-too) modifier. */
|
|
5897
|
+
.md3 .oo-warranty-link {
|
|
5898
|
+
align-self: center;
|
|
5899
|
+
}
|
|
5900
|
+
}
|
|
5901
|
+
.md3 .oo-warranty-garan-strip-btn {
|
|
5902
|
+
display: block;
|
|
5903
|
+
width: 208px; /* Figma (node 64535:6410): "nested display" strip, 208x32 */
|
|
5904
|
+
max-width: 100%;
|
|
5905
|
+
background: none;
|
|
5906
|
+
border: 0;
|
|
5907
|
+
padding: 0;
|
|
5908
|
+
margin: 0;
|
|
5909
|
+
cursor: pointer;
|
|
5910
|
+
}
|
|
5911
|
+
.md3 .oo-warranty-garan-nested-img {
|
|
5912
|
+
display: block;
|
|
5913
|
+
width: 100%;
|
|
5486
5914
|
height: auto;
|
|
5487
5915
|
}
|
|
5488
5916
|
.md3 .oo-warranty-link {
|
|
@@ -5498,35 +5926,11 @@ line-height: 31px;
|
|
|
5498
5926
|
font-family: Arial, Helvetica, Arimo, sans-serif;
|
|
5499
5927
|
font-weight: 400;
|
|
5500
5928
|
font-size: 13px;
|
|
5929
|
+
line-height: 1.35;
|
|
5501
5930
|
color: var(--md-primary);
|
|
5502
5931
|
text-decoration: underline;
|
|
5503
5932
|
text-align: left;
|
|
5504
5933
|
}
|
|
5505
|
-
a.oo-warranty-link--icon {
|
|
5506
|
-
text-decoration: none;
|
|
5507
|
-
}
|
|
5508
|
-
a.oo-warranty-link--icon:hover {
|
|
5509
|
-
text-decoration: underline;
|
|
5510
|
-
}
|
|
5511
|
-
.md3 .oo-warranty-link--pending {
|
|
5512
|
-
cursor: default;
|
|
5513
|
-
}
|
|
5514
|
-
.md3 .oo-warranty-years-title {
|
|
5515
|
-
margin: 0;
|
|
5516
|
-
font-family: Arial, Helvetica, Arimo, sans-serif;
|
|
5517
|
-
font-weight: 700;
|
|
5518
|
-
font-size: 14px;
|
|
5519
|
-
line-height: 1.35;
|
|
5520
|
-
color: #0E2238;
|
|
5521
|
-
}
|
|
5522
|
-
.md3 .oo-warranty-years-desc {
|
|
5523
|
-
margin: 0;
|
|
5524
|
-
font-family: Arial, Helvetica, Arimo, sans-serif;
|
|
5525
|
-
font-weight: 400;
|
|
5526
|
-
font-size: 13px;
|
|
5527
|
-
line-height: 1.35;
|
|
5528
|
-
color: #44464F;
|
|
5529
|
-
}
|
|
5530
5934
|
|
|
5531
5935
|
/* ---------- Bestellungen (orders) ---------- */
|
|
5532
5936
|
.md3 .mo-page {
|
|
@@ -6419,7 +6823,8 @@ a.oo-warranty-link--icon:hover {
|
|
|
6419
6823
|
.md3 .enq-float input:focus-visible,
|
|
6420
6824
|
.md3 .enq-float textarea:focus-visible,
|
|
6421
6825
|
.md3 .enquiry-name-row input:focus-visible,
|
|
6422
|
-
.md3 .enquiry-email-wrap input:focus-visible
|
|
6826
|
+
.md3 .enquiry-email-wrap input:focus-visible,
|
|
6827
|
+
.md3 .co-addr-form-field:focus-visible {
|
|
6423
6828
|
box-shadow: none !important;
|
|
6424
6829
|
}
|
|
6425
6830
|
.md3 .link-accent {
|
package/ui/MfieldCheckIcon.tsx
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
// Figma-exact valid-field checkmark (.mfield-ok, FormField/MdField's showValid) — a distinct
|
|
4
|
-
// path/stroke from the generic lucide Check that Icon name="check" renders elsewhere, so it's
|
|
5
|
-
// its own tiny component rather than a REGISTRY entry in Icon.tsx (which would change every
|
|
6
|
-
// other "check" usage in the app too).
|
|
7
|
-
const MfieldCheckIcon: React.FunctionComponent = () => (
|
|
8
|
-
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
9
|
-
<path d="M13.3334 4L6.00002 11.3333L2.66669 8" stroke="#168A45" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" />
|
|
10
|
-
</svg>
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
export default MfieldCheckIcon;
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
// Figma-exact valid-field checkmark (.mfield-ok, FormField/MdField's showValid) — a distinct
|
|
4
|
+
// path/stroke from the generic lucide Check that Icon name="check" renders elsewhere, so it's
|
|
5
|
+
// its own tiny component rather than a REGISTRY entry in Icon.tsx (which would change every
|
|
6
|
+
// other "check" usage in the app too).
|
|
7
|
+
const MfieldCheckIcon: React.FunctionComponent = () => (
|
|
8
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
9
|
+
<path d="M13.3334 4L6.00002 11.3333L2.66669 8" stroke="#168A45" strokeWidth={2} strokeLinecap="round" strokeLinejoin="round" />
|
|
10
|
+
</svg>
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
export default MfieldCheckIcon;
|