@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytebrand/fe-ui-core-autobahn",
3
- "version": "1.0.153",
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: 18px;
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 63794:27213 / 63898:29799 / 63895:9796) — the
4612
- rate hero (.oo-mzz-price-row down to .cf-rate-old) intentionally reuses CheckoutFinancePanelNext's
4613
- own .cf-rate-row/.cf-rate-amount/.cf-rate-side/.cf-rate-unit/.cf-rate-old (global) plus its
4614
- .pp-eyebrow/.pp-eyebrow-badge/.pp-uvp-tooltip/.fin-eval-* rules (scoped to .cf-panel) — the JSX
4615
- wraps this card's price block in a bare <div className="cf-panel"> (display:flex/column only, no
4616
- box styling of its own) purely so those already-pixel-verified scoped rules apply here too
4617
- (including .pp-uvp-tooltip's own left-anchor fix, further up this file). */
4618
- .md3 .oo-mzz-rate-label {
4619
- font-family: Arial;
4620
- font-size: 13px;
4621
- line-height: 1.4;
4622
- color: var(--md-on-surface-variant);
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-mzz-price-row {
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
- /* Kaufen only — UVP-struck price sits ABOVE the flat total (right-aligned column), unlike
4633
- Financing/Leasing where it sits beside the rate in .cf-rate-side. */
4634
- .md3 .oo-mzz-uvp-col {
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-mzz-uvp-row {
4730
+ .md3 .oo-pay-uvp-row {
4641
4731
  display: flex;
4642
4732
  align-items: center;
4643
- gap: 6px;
4733
+ gap: 3px;
4644
4734
  }
4645
- .md3 .oo-mzz-uvp-label {
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-mzz-total-amount {
4655
- font-family: 'Arial';
4656
- font-weight: 700;
4657
- font-size: 46px;
4658
- line-height: 52px;
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
- .md3 .oo-mzz-price-wrap {
4662
- margin-top: 6px;
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
- /* auto.de / Price Rating is 120px wide in this card (vs. the shared .fin-eval-pill/-bar's other,
4665
- narrower usages elsewhere on the site) — scoped here rather than touching those shared base
4666
- rules. .fin-eval-bar already has width:100%, so sizing the -cell wrapper is enough for the bar;
4667
- the pill itself needs an explicit box since it only auto-sizes to its text otherwise. */
4668
- .md3 .oo-mzz-price-wrap .fin-eval-pill--good {
4669
- width: 120px;
4670
- height: 28px;
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-mzz-price-wrap .fin-eval-bar-cell {
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
- .md3 .oo-mzz-cond {
4676
- margin: 6px 0 0;
4677
- font-family: Arial;
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-mzz-cond-link {
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-mzz-row {
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
- /* Kaufen only — single list (no left/right KV split), Figma's own "list" node. */
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
- width: 100%;
4705
- margin-top: 12px;
4706
- padding-top: 12px;
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-mzz-kv-col {
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-mzz-kv-col--left {
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: var(--md-outline-variant);
4905
+ background: #C5C6D2;
4729
4906
  }
4730
- .md3 .oo-mzz-kv-row {
4907
+ .md3 .oo-pay-kv-row {
4731
4908
  display: flex;
4732
4909
  align-items: baseline;
4733
- justify-content: space-between;
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
- .md3 .oo-mzz-kv-label {
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
- color: var(--md-on-surface-variant);
4922
+ text-align: right;
4744
4923
  }
4745
- .md3 .oo-mzz-kv-value {
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-mzz-kv-row--total .oo-mzz-kv-label,
4751
- .md3 .oo-mzz-kv-row--total .oo-mzz-kv-value {
4752
- font-weight: 700;
4753
- color: var(--md-on-surface);
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-mzz-kv-hr {
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: var(--md-outline-variant);
4984
+ background: #C5C6D2;
4761
4985
  }
4762
- .md3 .oo-mzz-note {
4763
- margin: 12px 0 0;
4764
- font-family: Arial;
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-mzz-hinweis {
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-mzz-hinweis svg {
5093
+ .md3 .oo-pay-hinweis svg {
4781
5094
  flex: none;
4782
5095
  }
4783
- .md3 .oo-mzz-hinweis-text {
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
- line-height: 1.4;
4801
- color: var(--md-primary);
5104
+ color: #005CFF;
4802
5105
  cursor: pointer;
4803
5106
  }
4804
- .md3 .oo-mzz-hinweis-link:hover {
5107
+ .md3 .oo-pay-hinweis-link:hover {
4805
5108
  text-decoration: underline;
4806
5109
  }
4807
- @media (max-width: 800px) {
4808
- .md3 .oo-mzz-price-row {
4809
- flex-direction: column;
4810
- align-items: flex-start;
4811
- gap: 10px;
4812
- }
4813
- .md3 .oo-mzz-row {
4814
- flex-direction: column;
4815
- gap: 12px;
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-mzz-kv-col--left,
4818
- .md3 .oo-mzz-kv-col--right {
4819
- padding: 0;
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
- .md3 .oo-mzz-kv-rule {
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 below .oo-next (order-overview's own bottom bar) — a spot this exact node
5001
- isn't shown at in Figma (its own component description has it above the buy button instead),
5002
- so this margin-top is this page's own established gap rhythm, not a value read off the design. */
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-top: 16px;
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
- .md3 .oo-fb-row .oo-fb-cell:first-child {
5111
- padding-left: 0;
5112
- }
5113
- .md3 .oo-fb-row .oo-fb-cell:last-child {
5114
- padding-right: 0;
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
- @media (max-width: 800px) {
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-notes {
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: 400px;
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 {
@@ -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;