@bytebrand/fe-ui-core-autobahn 1.0.141 → 1.0.142

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.141",
3
+ "version": "1.0.142",
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
@@ -6544,15 +6544,15 @@ line-height: 31px;
6544
6544
  align-items: flex-end;
6545
6545
  padding: 0;
6546
6546
  }
6547
- /* one fixed height, whatever is inside (collapsed rate controls, the details below them, or
6548
- the Kaufen tab) — sized off the fixed inset:0 scrim, i.e. the CURRENT visible height, not
6549
- vh (on iOS Safari 100vh > the visible area while the toolbar shows, which pushed the sheet's
6550
- top off-screen). No height change on "Finanzierungs-Details" = no jump; the details are
6551
- already rendered below the CTAs and only get scrolled to. */
6547
+ /* one fixed height (the original 85vh look), whatever is inside — collapsed rate controls,
6548
+ the expanded details, or the Kaufen tab. Opening "Finanzierungs-Details" no longer grows the
6549
+ sheet (was min-height 85vh -> 100vh, which jumped it over the page header and, on iOS
6550
+ Safari where 100vh > the visible area, pushed its top off-screen); the details scroll
6551
+ inside instead. max-height caps it to the fixed inset:0 scrim's CURRENT visible height. */
6552
6552
  .md3 .fin-modal {
6553
6553
  max-width: none;
6554
- height: calc(100% - 24px);
6555
- max-height: none;
6554
+ height: 85vh;
6555
+ max-height: calc(100% - 24px);
6556
6556
  background: #FFFFFF;
6557
6557
  box-shadow: 0px -4px 18px rgba(0, 0, 0, 0.13);
6558
6558
  border-radius: 26px 26px 0px 0px;
@@ -2216,16 +2216,19 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
2216
2216
  // modal's mobile "Rate anpassen" sheet renders its own separate copy of that hero row, so it
2217
2217
  // needs its own tooltip-open state (not shared with FinanceCalculator's instance).
2218
2218
  const [uvpTooltipOpen, setUvpTooltipOpen] = React.useState(false);
2219
- // opened directly via the page's "Finanzierungsdetails" link (initialShowBreakdown): open the
2220
- // sheet scrolled to the breakdown instead of the rate controls at its top. Desktop always shows
2221
- // the breakdown inline but it can sit below the fold of .fin-modal-body's own scroll area too —
2222
- // whichever of the two refs is actually visible (show-mobile/hide-mobile via CSS) is used.
2219
+ // mobile-only: the Finanzierungs-/Leasingdetails breakdown starts collapsed (opened via "Rate
2220
+ // anpassen") or expanded (opened directly via the page's details link) — reset on every open,
2221
+ // since this component stays mounted (the page always renders it, gated by `open`).
2222
+ const [showBreakdown, setShowBreakdown] = React.useState(!!initialShowBreakdown);
2223
+ // Desktop always shows the breakdown inline but it can sit below the fold of .fin-modal-body's
2224
+ // own scroll area too — whichever of the two refs is actually visible (show-mobile/hide-mobile
2225
+ // via CSS) is the one scrolled to.
2223
2226
  const desktopBreakdownRef = React.useRef<HTMLDivElement | null>(null);
2224
2227
  const mobileBreakdownRef = React.useRef<HTMLDivElement | null>(null);
2225
- // mobile: the breakdown is always rendered below the CTAs (it peeks in at the bottom of the
2226
- // fixed-height sheet); the "Finanzierungs-/Leasing-Details" button just scrolls the sheet body
2227
- // until the "Repräsentatives Beispiel" headline sits at its top — the sheet itself never
2228
- // changes height, so nothing jumps. Hand-rolled rAF ease-out so the duration is ours.
2228
+ // mobile (ADV-276): revealing the breakdown scrolls the sheet body until the "Repräsentatives
2229
+ // Beispiel" headline sits at its top — not all the way down to the CTA row under the breakdown.
2230
+ // The sheet keeps its fixed height (see .fin-modal in md3.css), so nothing jumps; only the
2231
+ // body scrolls. Hand-rolled rAF ease-out so the duration is ours, not the browser's.
2229
2232
  const breakdownScrollRaf = React.useRef(0);
2230
2233
  const scrollSheetToBreakdown = React.useCallback((): void => {
2231
2234
  const el = mobileBreakdownRef.current;
@@ -2247,14 +2250,25 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
2247
2250
  breakdownScrollRaf.current = window.requestAnimationFrame(step);
2248
2251
  }, []);
2249
2252
  React.useEffect(() => () => window.cancelAnimationFrame(breakdownScrollRaf.current), []);
2253
+ // opened directly via the page's details link: open expanded and scrolled to the breakdown.
2250
2254
  React.useEffect(() => {
2251
- if (!open || !initialShowBreakdown) return;
2255
+ if (!open) return;
2256
+ setShowBreakdown(!!initialShowBreakdown);
2257
+ if (!initialShowBreakdown) return;
2252
2258
  const timer = window.setTimeout(() => {
2253
2259
  if (mobileBreakdownRef.current?.offsetParent) scrollSheetToBreakdown();
2254
2260
  else desktopBreakdownRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' });
2255
2261
  }, 50);
2256
2262
  return () => window.clearTimeout(timer);
2257
- }, [open, initialShowBreakdown, scrollSheetToBreakdown]);
2263
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2264
+ }, [open, initialShowBreakdown]);
2265
+ // in-sheet details toggle: scroll once the expanded breakdown has rendered. Collapsing doesn't scroll.
2266
+ const revealBreakdownRef = React.useRef(false);
2267
+ React.useEffect(() => {
2268
+ if (!showBreakdown || !revealBreakdownRef.current) return;
2269
+ revealBreakdownRef.current = false;
2270
+ scrollSheetToBreakdown();
2271
+ }, [showBreakdown, scrollSheetToBreakdown]);
2258
2272
 
2259
2273
  // mobile-only: swipe-down-to-dismiss on the grabber/header (the mockup's drag handle).
2260
2274
  // The sheet follows the finger (imperative transform — no re-renders while dragging);
@@ -3429,7 +3443,10 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3429
3443
  {/* centered ⓘ details link (mockup shows no chevron) — scrolls to the breakdown below */}
3430
3444
  <button
3431
3445
  type="button"
3432
- onClick={scrollSheetToBreakdown}
3446
+ onClick={() => {
3447
+ revealBreakdownRef.current = !showBreakdown;
3448
+ setShowBreakdown((v) => !v);
3449
+ }}
3433
3450
  style={{ ...expanderBtnStyle, justifyContent: 'center', padding: '2px 0 20px' }}>
3434
3451
  <span
3435
3452
  style={{
@@ -3447,86 +3464,58 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3447
3464
  {isLease ? t('autobahn:modal.leasingDetails') : t('autobahn:modal.financingDetails')}
3448
3465
  </span>
3449
3466
  </button>
3450
- {/* same row-by-row breakdown table as desktop (breakdownRows, built once above),
3451
- always rendered below the CTAs so it peeks in at the sheet's bottom. */}
3452
- <div ref={mobileBreakdownRef} style={{ marginBottom: 5 }}>
3453
- <p
3454
- style={{
3455
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3456
- fontWeight: 700,
3457
- fontSize: 16,
3458
- lineHeight: '18px',
3459
- color: '#0E2238',
3460
- margin: 0,
3461
- marginBottom: 5,
3462
- paddingTop: 10,
3463
- borderTop: '1px solid rgba(212, 221, 231, 0.95)',
3464
- }}
3465
- >
3466
- {t('autobahn:modal.representativeExample')}
3467
- </p>
3468
- <p
3469
- style={{
3470
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3471
- fontWeight: 700,
3472
- fontSize: 9,
3473
- lineHeight: '12px',
3474
- color: '#5B6B7F',
3475
- marginBottom: 5,
3476
- }}
3477
- >
3478
- {t('autobahn:modal.vatDisclaimer')}
3479
- </p>
3480
- {breakdownRows}
3481
- </div>
3482
- <div
3483
- style={{
3484
- display: 'flex',
3485
- alignItems: 'flex-start',
3486
- gap: 10,
3487
- background: '#FAFBFD',
3488
- border: '1px solid #D4DDE7',
3489
- borderRadius: 6,
3490
- padding: 10,
3491
- marginBottom: 10,
3492
- }}
3493
- >
3494
- <svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none' }}>
3495
- <path d="M2.7002 9.00001L13.5002 3.60001L24.3002 9.00001H2.7002Z" stroke="#0E2238" strokeWidth="1.6" strokeLinejoin="round" />
3496
- <path d="M4.49961 10.8H22.4996M5.39961 21.6H21.5996M3.59961 24.3H23.3996" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3497
- <path d="M7.2002 10.8V21.6M11.7002 10.8V21.6M15.3002 10.8V21.6M19.8002 10.8V21.6" stroke="#0E2238" strokeWidth="1.6" />
3498
- </svg>
3499
- <div style={{ width: '100%' }}>
3500
- <p
3501
- style={{
3502
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3503
- fontWeight: 700,
3504
- fontSize: 14,
3505
- lineHeight: '13px',
3506
- color: '#0E2238',
3507
- margin: 0,
3508
- marginBottom: 3,
3509
- }}
3510
- >
3511
- {isLease ? t('autobahn:modal.leaseLenderLabel') : t('autobahn:modal.lenderLabel')}
3512
- </p>
3513
- <p
3467
+ {/* mobile "Finanzierungsdetails" toggle reveals the same row-by-row breakdown
3468
+ table as desktop (breakdownRows, built once above). */}
3469
+ {showBreakdown && (
3470
+ <>
3471
+ <div ref={mobileBreakdownRef} style={{ marginBottom: 5 }}>
3472
+ <p
3473
+ style={{
3474
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3475
+ fontWeight: 700,
3476
+ fontSize: 16,
3477
+ lineHeight: '18px',
3478
+ color: '#0E2238',
3479
+ margin: 0,
3480
+ marginBottom: 5,
3481
+ paddingTop: 10,
3482
+ borderTop: '1px solid rgba(212, 221, 231, 0.95)',
3483
+ }}
3484
+ >
3485
+ {t('autobahn:modal.representativeExample')}
3486
+ </p>
3487
+ <p
3488
+ style={{
3489
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3490
+ fontWeight: 700,
3491
+ fontSize: 9,
3492
+ lineHeight: '12px',
3493
+ color: '#5B6B7F',
3494
+ marginBottom: 5,
3495
+ }}
3496
+ >
3497
+ {t('autobahn:modal.vatDisclaimer')}
3498
+ </p>
3499
+ {breakdownRows}
3500
+ </div>
3501
+ <div
3514
3502
  style={{
3515
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3516
- fontWeight: 400,
3517
- fontSize: 12,
3518
- lineHeight: '13px',
3519
- color: '#0E2238',
3520
- margin: 0,
3503
+ display: 'flex',
3504
+ alignItems: 'flex-start',
3505
+ gap: 10,
3506
+ background: '#FAFBFD',
3507
+ border: '1px solid #D4DDE7',
3508
+ borderRadius: 6,
3509
+ padding: 10,
3510
+ marginBottom: 10,
3521
3511
  }}
3522
3512
  >
3523
- {lenderName || (isLease ? t('autobahn:modal.leaseLenderName') : t('autobahn:modal.lenderName'))}
3524
- </p>
3525
- {/* leasing's Darlehensgeber-style card also discloses the contract type
3526
- (Figma: "Vertragsart: Restwertleasing"), split off by its own divider */}
3527
- {isLease && (
3528
- <>
3529
- <div style={{ height: 1, background: '#D6DEE8', margin: '8px 0' }} />
3513
+ <svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none' }}>
3514
+ <path d="M2.7002 9.00001L13.5002 3.60001L24.3002 9.00001H2.7002Z" stroke="#0E2238" strokeWidth="1.6" strokeLinejoin="round" />
3515
+ <path d="M4.49961 10.8H22.4996M5.39961 21.6H21.5996M3.59961 24.3H23.3996" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3516
+ <path d="M7.2002 10.8V21.6M11.7002 10.8V21.6M15.3002 10.8V21.6M19.8002 10.8V21.6" stroke="#0E2238" strokeWidth="1.6" />
3517
+ </svg>
3518
+ <div style={{ width: '100%' }}>
3530
3519
  <p
3531
3520
  style={{
3532
3521
  fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
@@ -3538,7 +3527,7 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3538
3527
  marginBottom: 3,
3539
3528
  }}
3540
3529
  >
3541
- {t('autobahn:modal.contractTypeLabel')}
3530
+ {isLease ? t('autobahn:modal.leaseLenderLabel') : t('autobahn:modal.lenderLabel')}
3542
3531
  </p>
3543
3532
  <p
3544
3533
  style={{
@@ -3550,122 +3539,198 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3550
3539
  margin: 0,
3551
3540
  }}
3552
3541
  >
3553
- {t('autobahn:modal.contractTypeValue')}
3542
+ {lenderName || (isLease ? t('autobahn:modal.leaseLenderName') : t('autobahn:modal.lenderName'))}
3554
3543
  </p>
3555
- </>
3544
+ {/* leasing's Darlehensgeber-style card also discloses the contract type
3545
+ (Figma: "Vertragsart: Restwertleasing"), split off by its own divider */}
3546
+ {isLease && (
3547
+ <>
3548
+ <div style={{ height: 1, background: '#D6DEE8', margin: '8px 0' }} />
3549
+ <p
3550
+ style={{
3551
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3552
+ fontWeight: 700,
3553
+ fontSize: 14,
3554
+ lineHeight: '13px',
3555
+ color: '#0E2238',
3556
+ margin: 0,
3557
+ marginBottom: 3,
3558
+ }}
3559
+ >
3560
+ {t('autobahn:modal.contractTypeLabel')}
3561
+ </p>
3562
+ <p
3563
+ style={{
3564
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3565
+ fontWeight: 400,
3566
+ fontSize: 12,
3567
+ lineHeight: '13px',
3568
+ color: '#0E2238',
3569
+ margin: 0,
3570
+ }}
3571
+ >
3572
+ {t('autobahn:modal.contractTypeValue')}
3573
+ </p>
3574
+ </>
3575
+ )}
3576
+ </div>
3577
+ </div>
3578
+ {/* leasing-only mandatory-package disclosure (Figma "Hinweisbox") — the
3579
+ Rundum-Sorglos-Paket is compulsory for leasing (unlike financing, where
3580
+ it's an optional add-on), so it gets its own callout instead of a bullet. */}
3581
+ {isLease && hasAddServicesRow && (
3582
+ <div
3583
+ style={{
3584
+ display: 'flex',
3585
+ alignItems: 'flex-start',
3586
+ gap: 10,
3587
+ background: '#F7FAFE',
3588
+ border: '0.5px solid #D6DEE8',
3589
+ borderRadius: 5,
3590
+ padding: '7px 8px',
3591
+ marginBottom: 10,
3592
+ }}
3593
+ >
3594
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none', marginTop: 2 }}>
3595
+ <circle cx="12" cy="12" r="10" stroke="#0E2238" strokeWidth="1.6" />
3596
+ <path d="M12 16v-4" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3597
+ <path d="M12 8h.01" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3598
+ </svg>
3599
+ <p
3600
+ style={{
3601
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3602
+ fontWeight: 400,
3603
+ fontSize: 10,
3604
+ lineHeight: '10px',
3605
+ textAlign: 'justify',
3606
+ color: '#0E2238',
3607
+ margin: 0,
3608
+ }}
3609
+ >
3610
+ {t('autobahn:modal.packageMandatoryNotice', { amount: eur(addServicesCostRaw ?? 0) })}
3611
+ </p>
3612
+ </div>
3556
3613
  )}
3557
- </div>
3558
- </div>
3559
- {/* leasing-only mandatory-package disclosure (Figma "Hinweisbox") — the
3560
- Rundum-Sorglos-Paket is compulsory for leasing (unlike financing, where
3561
- it's an optional add-on), so it gets its own callout instead of a bullet. */}
3562
- {isLease && hasAddServicesRow && (
3563
- <div
3564
- style={{
3565
- display: 'flex',
3566
- alignItems: 'flex-start',
3567
- gap: 10,
3568
- background: '#F7FAFE',
3569
- border: '0.5px solid #D6DEE8',
3570
- borderRadius: 5,
3571
- padding: '7px 8px',
3572
- marginBottom: 10,
3573
- }}
3574
- >
3575
- <svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none', marginTop: 2 }}>
3576
- <circle cx="12" cy="12" r="10" stroke="#0E2238" strokeWidth="1.6" />
3577
- <path d="M12 16v-4" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3578
- <path d="M12 8h.01" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3579
- </svg>
3580
3614
  <p
3581
3615
  style={{
3582
3616
  fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3583
- fontWeight: 400,
3584
- fontSize: 10,
3585
- lineHeight: '10px',
3586
- textAlign: 'justify',
3587
- color: '#0E2238',
3588
- margin: 0,
3589
- }}
3590
- >
3591
- {t('autobahn:modal.packageMandatoryNotice', { amount: eur(addServicesCostRaw ?? 0) })}
3592
- </p>
3593
- </div>
3594
- )}
3595
- <p
3596
- style={{
3597
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3598
- fontWeight: 700,
3599
- fontSize: 13.3,
3600
- lineHeight: '17px',
3601
- color: '#0E2238',
3602
- margin: 0,
3603
- marginBottom: 7,
3604
- }}
3605
- >
3606
- {t('autobahn:modal.legalNoticesTitle')}
3607
- </p>
3608
- {isLease ? (
3609
- <>
3610
- <p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 5 }}>
3611
- {t('autobahn:modal.legalFootnoteAcquisitionPrice')}
3612
- </p>
3613
- <p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 10 }}>
3614
- {t('autobahn:modal.legalFootnoteListPriceLease')}
3615
- </p>
3616
- <p
3617
- style={{
3618
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3619
- fontWeight: 400,
3620
- fontSize: 12,
3621
- lineHeight: '12px',
3617
+ fontWeight: 700,
3618
+ fontSize: 13.3,
3619
+ lineHeight: '17px',
3622
3620
  color: '#0E2238',
3623
3621
  margin: 0,
3624
- paddingBottom: 10,
3622
+ marginBottom: 7,
3625
3623
  }}
3626
3624
  >
3627
- {t('autobahn:modal.closingDisclaimerLine1')}
3628
- <br />
3629
- {t('autobahn:modal.closingDisclaimerLine2')}
3625
+ {t('autobahn:modal.legalNoticesTitle')}
3630
3626
  </p>
3631
- </>
3632
- ) : (
3633
- <>
3634
- <ul style={{ margin: 0, marginBottom: 3, paddingLeft: 16, display: 'flex', flexDirection: 'column', gap: 3 }}>
3635
- {[
3636
- t('autobahn:modal.legalNoticeCreditworthiness'),
3637
- t('autobahn:modal.legalNoticeExample'),
3638
- t('autobahn:modal.legalNoticeTwoThirds'),
3639
- t('autobahn:modal.legalNoticeVat'),
3640
- t('autobahn:modal.legalNoticeAddServices'),
3641
- ].map((notice) => (
3642
- <li
3643
- key={notice}
3627
+ {isLease ? (
3628
+ <>
3629
+ <p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 5 }}>
3630
+ {t('autobahn:modal.legalFootnoteAcquisitionPrice')}
3631
+ </p>
3632
+ <p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 10 }}>
3633
+ {t('autobahn:modal.legalFootnoteListPriceLease')}
3634
+ </p>
3635
+ <p
3644
3636
  style={{
3645
3637
  fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3646
3638
  fontWeight: 400,
3647
3639
  fontSize: 12,
3648
3640
  lineHeight: '12px',
3649
3641
  color: '#0E2238',
3642
+ margin: 0,
3643
+ paddingBottom: 10,
3650
3644
  }}
3651
3645
  >
3652
- {notice}
3653
- </li>
3654
- ))}
3655
- </ul>
3656
- <p
3657
- style={{
3658
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3659
- fontWeight: 400,
3660
- fontSize: 12,
3661
- lineHeight: '12px',
3662
- color: '#0E2238',
3663
- margin: 0,
3664
- paddingBottom: 10,
3665
- }}
3666
- >
3667
- {t('autobahn:modal.listPriceFootnote')}
3668
- </p>
3646
+ {t('autobahn:modal.closingDisclaimerLine1')}
3647
+ <br />
3648
+ {t('autobahn:modal.closingDisclaimerLine2')}
3649
+ </p>
3650
+ </>
3651
+ ) : (
3652
+ <>
3653
+ <ul style={{ margin: 0, marginBottom: 3, paddingLeft: 16, display: 'flex', flexDirection: 'column', gap: 3 }}>
3654
+ {[
3655
+ t('autobahn:modal.legalNoticeCreditworthiness'),
3656
+ t('autobahn:modal.legalNoticeExample'),
3657
+ t('autobahn:modal.legalNoticeTwoThirds'),
3658
+ t('autobahn:modal.legalNoticeVat'),
3659
+ t('autobahn:modal.legalNoticeAddServices'),
3660
+ ].map((notice) => (
3661
+ <li
3662
+ key={notice}
3663
+ style={{
3664
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3665
+ fontWeight: 400,
3666
+ fontSize: 12,
3667
+ lineHeight: '12px',
3668
+ color: '#0E2238',
3669
+ }}
3670
+ >
3671
+ {notice}
3672
+ </li>
3673
+ ))}
3674
+ </ul>
3675
+ <p
3676
+ style={{
3677
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3678
+ fontWeight: 400,
3679
+ fontSize: 12,
3680
+ lineHeight: '12px',
3681
+ color: '#0E2238',
3682
+ margin: 0,
3683
+ paddingBottom: 10,
3684
+ }}
3685
+ >
3686
+ {t('autobahn:modal.listPriceFootnote')}
3687
+ </p>
3688
+ </>
3689
+ )}
3690
+ <div className="fin-sheet-cta-row" style={{ display: 'flex', gap: 7, paddingBottom: 15 }}>
3691
+ <Button
3692
+ variant="filled"
3693
+ size="lg"
3694
+ style={{
3695
+ width: 286,
3696
+ height: 50,
3697
+ background: '#005CFF',
3698
+ borderRadius: 16,
3699
+ justifyContent: 'flex-start',
3700
+ paddingLeft: 47,
3701
+ paddingRight: 47,
3702
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3703
+ fontWeight: 700,
3704
+ fontSize: 16,
3705
+ lineHeight: '18px',
3706
+ textAlign: 'center',
3707
+ color: '#FFFFFF',
3708
+ }}
3709
+ onClick={onSecure}
3710
+ >
3711
+ <span style={{ display: 'inline-flex', marginRight: 18 }}>
3712
+ <DocCheckIcon size={23} />
3713
+ </span>
3714
+ {t('autobahn:finance.requestRate')}
3715
+ </Button>
3716
+ {/* padding:0 — mbtn--lg's 30px side padding left no room for the icon at width 52 */}
3717
+ <Button
3718
+ variant="outlined"
3719
+ size="lg"
3720
+ icon="phone"
3721
+ className="fin-sheet-call-btn"
3722
+ style={{
3723
+ width: 50,
3724
+ height: 50,
3725
+ flex: 'none',
3726
+ padding: 0,
3727
+ background: '#FFFFFF',
3728
+ border: '1.6px solid #005CFF',
3729
+ borderRadius: 16,
3730
+ }}
3731
+ onClick={onCall}
3732
+ />
3733
+ </div>
3669
3734
  </>
3670
3735
  )}
3671
3736
  </>