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

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.143",
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,24 +2216,33 @@ 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 — but never so far that the CTA row under the breakdown
2230
+ // comes into view (on tall screens the breakdown is shorter than the sheet, so the headline
2231
+ // then stops lower, with the bottom CTA row still just below the fold).
2232
+ // The sheet keeps its fixed height (see .fin-modal in md3.css), so nothing jumps; only the
2233
+ // body scrolls. Hand-rolled rAF ease-out so the duration is ours, not the browser's.
2234
+ const mobileBottomCtaRef = React.useRef<HTMLDivElement | null>(null);
2229
2235
  const breakdownScrollRaf = React.useRef(0);
2230
2236
  const scrollSheetToBreakdown = React.useCallback((): void => {
2231
2237
  const el = mobileBreakdownRef.current;
2232
2238
  const body = el?.closest('.fin-modal-body') as HTMLElement | null | undefined;
2233
2239
  if (!el || !body) return;
2234
2240
  const from = body.scrollTop;
2235
- const headlineTop = el.getBoundingClientRect().top - body.getBoundingClientRect().top + from;
2236
- const to = Math.max(0, Math.min(headlineTop - 8, body.scrollHeight - body.clientHeight));
2241
+ const bodyTop = body.getBoundingClientRect().top;
2242
+ const headlineTop = el.getBoundingClientRect().top - bodyTop + from;
2243
+ const cta = mobileBottomCtaRef.current;
2244
+ const ctaLimit = cta ? cta.getBoundingClientRect().top - bodyTop + from - body.clientHeight : Infinity;
2245
+ const to = Math.max(0, Math.min(headlineTop - 8, ctaLimit, body.scrollHeight - body.clientHeight));
2237
2246
  if (to === from) return;
2238
2247
  window.cancelAnimationFrame(breakdownScrollRaf.current);
2239
2248
  const duration = 400;
@@ -2247,14 +2256,25 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
2247
2256
  breakdownScrollRaf.current = window.requestAnimationFrame(step);
2248
2257
  }, []);
2249
2258
  React.useEffect(() => () => window.cancelAnimationFrame(breakdownScrollRaf.current), []);
2259
+ // opened directly via the page's details link: open expanded and scrolled to the breakdown.
2250
2260
  React.useEffect(() => {
2251
- if (!open || !initialShowBreakdown) return;
2261
+ if (!open) return;
2262
+ setShowBreakdown(!!initialShowBreakdown);
2263
+ if (!initialShowBreakdown) return;
2252
2264
  const timer = window.setTimeout(() => {
2253
2265
  if (mobileBreakdownRef.current?.offsetParent) scrollSheetToBreakdown();
2254
2266
  else desktopBreakdownRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' });
2255
2267
  }, 50);
2256
2268
  return () => window.clearTimeout(timer);
2257
- }, [open, initialShowBreakdown, scrollSheetToBreakdown]);
2269
+ // eslint-disable-next-line react-hooks/exhaustive-deps
2270
+ }, [open, initialShowBreakdown]);
2271
+ // in-sheet details toggle: scroll once the expanded breakdown has rendered. Collapsing doesn't scroll.
2272
+ const revealBreakdownRef = React.useRef(false);
2273
+ React.useEffect(() => {
2274
+ if (!showBreakdown || !revealBreakdownRef.current) return;
2275
+ revealBreakdownRef.current = false;
2276
+ scrollSheetToBreakdown();
2277
+ }, [showBreakdown, scrollSheetToBreakdown]);
2258
2278
 
2259
2279
  // mobile-only: swipe-down-to-dismiss on the grabber/header (the mockup's drag handle).
2260
2280
  // The sheet follows the finger (imperative transform — no re-renders while dragging);
@@ -3429,7 +3449,10 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3429
3449
  {/* centered ⓘ details link (mockup shows no chevron) — scrolls to the breakdown below */}
3430
3450
  <button
3431
3451
  type="button"
3432
- onClick={scrollSheetToBreakdown}
3452
+ onClick={() => {
3453
+ revealBreakdownRef.current = !showBreakdown;
3454
+ setShowBreakdown((v) => !v);
3455
+ }}
3433
3456
  style={{ ...expanderBtnStyle, justifyContent: 'center', padding: '2px 0 20px' }}>
3434
3457
  <span
3435
3458
  style={{
@@ -3447,86 +3470,58 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3447
3470
  {isLease ? t('autobahn:modal.leasingDetails') : t('autobahn:modal.financingDetails')}
3448
3471
  </span>
3449
3472
  </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
3473
+ {/* mobile "Finanzierungsdetails" toggle reveals the same row-by-row breakdown
3474
+ table as desktop (breakdownRows, built once above). */}
3475
+ {showBreakdown && (
3476
+ <>
3477
+ <div ref={mobileBreakdownRef} style={{ marginBottom: 5 }}>
3478
+ <p
3479
+ style={{
3480
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3481
+ fontWeight: 700,
3482
+ fontSize: 16,
3483
+ lineHeight: '18px',
3484
+ color: '#0E2238',
3485
+ margin: 0,
3486
+ marginBottom: 5,
3487
+ paddingTop: 10,
3488
+ borderTop: '1px solid rgba(212, 221, 231, 0.95)',
3489
+ }}
3490
+ >
3491
+ {t('autobahn:modal.representativeExample')}
3492
+ </p>
3493
+ <p
3494
+ style={{
3495
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3496
+ fontWeight: 700,
3497
+ fontSize: 9,
3498
+ lineHeight: '12px',
3499
+ color: '#5B6B7F',
3500
+ marginBottom: 5,
3501
+ }}
3502
+ >
3503
+ {t('autobahn:modal.vatDisclaimer')}
3504
+ </p>
3505
+ {breakdownRows}
3506
+ </div>
3507
+ <div
3514
3508
  style={{
3515
- fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3516
- fontWeight: 400,
3517
- fontSize: 12,
3518
- lineHeight: '13px',
3519
- color: '#0E2238',
3520
- margin: 0,
3509
+ display: 'flex',
3510
+ alignItems: 'flex-start',
3511
+ gap: 10,
3512
+ background: '#FAFBFD',
3513
+ border: '1px solid #D4DDE7',
3514
+ borderRadius: 6,
3515
+ padding: 10,
3516
+ marginBottom: 10,
3521
3517
  }}
3522
3518
  >
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' }} />
3519
+ <svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none' }}>
3520
+ <path d="M2.7002 9.00001L13.5002 3.60001L24.3002 9.00001H2.7002Z" stroke="#0E2238" strokeWidth="1.6" strokeLinejoin="round" />
3521
+ <path d="M4.49961 10.8H22.4996M5.39961 21.6H21.5996M3.59961 24.3H23.3996" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3522
+ <path d="M7.2002 10.8V21.6M11.7002 10.8V21.6M15.3002 10.8V21.6M19.8002 10.8V21.6" stroke="#0E2238" strokeWidth="1.6" />
3523
+ </svg>
3524
+ <div style={{ width: '100%' }}>
3530
3525
  <p
3531
3526
  style={{
3532
3527
  fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
@@ -3538,7 +3533,7 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3538
3533
  marginBottom: 3,
3539
3534
  }}
3540
3535
  >
3541
- {t('autobahn:modal.contractTypeLabel')}
3536
+ {isLease ? t('autobahn:modal.leaseLenderLabel') : t('autobahn:modal.lenderLabel')}
3542
3537
  </p>
3543
3538
  <p
3544
3539
  style={{
@@ -3550,122 +3545,198 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3550
3545
  margin: 0,
3551
3546
  }}
3552
3547
  >
3553
- {t('autobahn:modal.contractTypeValue')}
3548
+ {lenderName || (isLease ? t('autobahn:modal.leaseLenderName') : t('autobahn:modal.lenderName'))}
3554
3549
  </p>
3555
- </>
3550
+ {/* leasing's Darlehensgeber-style card also discloses the contract type
3551
+ (Figma: "Vertragsart: Restwertleasing"), split off by its own divider */}
3552
+ {isLease && (
3553
+ <>
3554
+ <div style={{ height: 1, background: '#D6DEE8', margin: '8px 0' }} />
3555
+ <p
3556
+ style={{
3557
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3558
+ fontWeight: 700,
3559
+ fontSize: 14,
3560
+ lineHeight: '13px',
3561
+ color: '#0E2238',
3562
+ margin: 0,
3563
+ marginBottom: 3,
3564
+ }}
3565
+ >
3566
+ {t('autobahn:modal.contractTypeLabel')}
3567
+ </p>
3568
+ <p
3569
+ style={{
3570
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3571
+ fontWeight: 400,
3572
+ fontSize: 12,
3573
+ lineHeight: '13px',
3574
+ color: '#0E2238',
3575
+ margin: 0,
3576
+ }}
3577
+ >
3578
+ {t('autobahn:modal.contractTypeValue')}
3579
+ </p>
3580
+ </>
3581
+ )}
3582
+ </div>
3583
+ </div>
3584
+ {/* leasing-only mandatory-package disclosure (Figma "Hinweisbox") — the
3585
+ Rundum-Sorglos-Paket is compulsory for leasing (unlike financing, where
3586
+ it's an optional add-on), so it gets its own callout instead of a bullet. */}
3587
+ {isLease && hasAddServicesRow && (
3588
+ <div
3589
+ style={{
3590
+ display: 'flex',
3591
+ alignItems: 'flex-start',
3592
+ gap: 10,
3593
+ background: '#F7FAFE',
3594
+ border: '0.5px solid #D6DEE8',
3595
+ borderRadius: 5,
3596
+ padding: '7px 8px',
3597
+ marginBottom: 10,
3598
+ }}
3599
+ >
3600
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none', marginTop: 2 }}>
3601
+ <circle cx="12" cy="12" r="10" stroke="#0E2238" strokeWidth="1.6" />
3602
+ <path d="M12 16v-4" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3603
+ <path d="M12 8h.01" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
3604
+ </svg>
3605
+ <p
3606
+ style={{
3607
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3608
+ fontWeight: 400,
3609
+ fontSize: 10,
3610
+ lineHeight: '10px',
3611
+ textAlign: 'justify',
3612
+ color: '#0E2238',
3613
+ margin: 0,
3614
+ }}
3615
+ >
3616
+ {t('autobahn:modal.packageMandatoryNotice', { amount: eur(addServicesCostRaw ?? 0) })}
3617
+ </p>
3618
+ </div>
3556
3619
  )}
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
3620
  <p
3581
3621
  style={{
3582
3622
  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',
3623
+ fontWeight: 700,
3624
+ fontSize: 13.3,
3625
+ lineHeight: '17px',
3622
3626
  color: '#0E2238',
3623
3627
  margin: 0,
3624
- paddingBottom: 10,
3628
+ marginBottom: 7,
3625
3629
  }}
3626
3630
  >
3627
- {t('autobahn:modal.closingDisclaimerLine1')}
3628
- <br />
3629
- {t('autobahn:modal.closingDisclaimerLine2')}
3631
+ {t('autobahn:modal.legalNoticesTitle')}
3630
3632
  </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}
3633
+ {isLease ? (
3634
+ <>
3635
+ <p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 5 }}>
3636
+ {t('autobahn:modal.legalFootnoteAcquisitionPrice')}
3637
+ </p>
3638
+ <p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 10 }}>
3639
+ {t('autobahn:modal.legalFootnoteListPriceLease')}
3640
+ </p>
3641
+ <p
3644
3642
  style={{
3645
3643
  fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3646
3644
  fontWeight: 400,
3647
3645
  fontSize: 12,
3648
3646
  lineHeight: '12px',
3649
3647
  color: '#0E2238',
3648
+ margin: 0,
3649
+ paddingBottom: 10,
3650
3650
  }}
3651
3651
  >
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>
3652
+ {t('autobahn:modal.closingDisclaimerLine1')}
3653
+ <br />
3654
+ {t('autobahn:modal.closingDisclaimerLine2')}
3655
+ </p>
3656
+ </>
3657
+ ) : (
3658
+ <>
3659
+ <ul style={{ margin: 0, marginBottom: 3, paddingLeft: 16, display: 'flex', flexDirection: 'column', gap: 3 }}>
3660
+ {[
3661
+ t('autobahn:modal.legalNoticeCreditworthiness'),
3662
+ t('autobahn:modal.legalNoticeExample'),
3663
+ t('autobahn:modal.legalNoticeTwoThirds'),
3664
+ t('autobahn:modal.legalNoticeVat'),
3665
+ t('autobahn:modal.legalNoticeAddServices'),
3666
+ ].map((notice) => (
3667
+ <li
3668
+ key={notice}
3669
+ style={{
3670
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3671
+ fontWeight: 400,
3672
+ fontSize: 12,
3673
+ lineHeight: '12px',
3674
+ color: '#0E2238',
3675
+ }}
3676
+ >
3677
+ {notice}
3678
+ </li>
3679
+ ))}
3680
+ </ul>
3681
+ <p
3682
+ style={{
3683
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3684
+ fontWeight: 400,
3685
+ fontSize: 12,
3686
+ lineHeight: '12px',
3687
+ color: '#0E2238',
3688
+ margin: 0,
3689
+ paddingBottom: 10,
3690
+ }}
3691
+ >
3692
+ {t('autobahn:modal.listPriceFootnote')}
3693
+ </p>
3694
+ </>
3695
+ )}
3696
+ <div ref={mobileBottomCtaRef} className="fin-sheet-cta-row" style={{ display: 'flex', gap: 7, paddingBottom: 15 }}>
3697
+ <Button
3698
+ variant="filled"
3699
+ size="lg"
3700
+ style={{
3701
+ width: 286,
3702
+ height: 50,
3703
+ background: '#005CFF',
3704
+ borderRadius: 16,
3705
+ justifyContent: 'flex-start',
3706
+ paddingLeft: 47,
3707
+ paddingRight: 47,
3708
+ fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
3709
+ fontWeight: 700,
3710
+ fontSize: 16,
3711
+ lineHeight: '18px',
3712
+ textAlign: 'center',
3713
+ color: '#FFFFFF',
3714
+ }}
3715
+ onClick={onSecure}
3716
+ >
3717
+ <span style={{ display: 'inline-flex', marginRight: 18 }}>
3718
+ <DocCheckIcon size={23} />
3719
+ </span>
3720
+ {t('autobahn:finance.requestRate')}
3721
+ </Button>
3722
+ {/* padding:0 — mbtn--lg's 30px side padding left no room for the icon at width 52 */}
3723
+ <Button
3724
+ variant="outlined"
3725
+ size="lg"
3726
+ icon="phone"
3727
+ className="fin-sheet-call-btn"
3728
+ style={{
3729
+ width: 50,
3730
+ height: 50,
3731
+ flex: 'none',
3732
+ padding: 0,
3733
+ background: '#FFFFFF',
3734
+ border: '1.6px solid #005CFF',
3735
+ borderRadius: 16,
3736
+ }}
3737
+ onClick={onCall}
3738
+ />
3739
+ </div>
3669
3740
  </>
3670
3741
  )}
3671
3742
  </>