@bytebrand/fe-ui-core-autobahn 1.0.148 → 1.0.150

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.148",
3
+ "version": "1.0.150",
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
@@ -5446,6 +5446,24 @@ line-height: 31px;
5446
5446
  order: -1;
5447
5447
  align-self: flex-end;
5448
5448
  }
5449
+ /* ...but without adding a line to the price row: the struck UVP overlays the empty space
5450
+ above the (52px on a 58px line) Kaufen figure, right-aligned over it — so Kaufen's hero is
5451
+ exactly as tall as the Finanzierung/Leasing one (15px Figma gap from the tab underline to
5452
+ the figure on every tab, nothing below it moves on a tab switch; see .cc-hero-stack). */
5453
+ .md3 .cc-price .pp-hero--buy .pp-hero-rate {
5454
+ position: relative;
5455
+ }
5456
+ .md3 .cc-price .pp-hero--buy .pp-hero-unit-group {
5457
+ position: absolute;
5458
+ right: 0;
5459
+ bottom: calc(100% - 11px);
5460
+ }
5461
+ /* nudge the Kaufen figure 3px down (visual only, layout untouched) so the overlaid struck UVP
5462
+ line clears its glyph tops */
5463
+ .md3 .cc-price .pp-hero--buy .pp-hero-val {
5464
+ position: relative;
5465
+ top: 3px;
5466
+ }
5449
5467
  /* Kaufen hero price on mobile — was falling through to the generic (rate-sized) .pp-hero-val
5450
5468
  above (65px, shrinking only via the rate-digit len4/5/6 classes cardParts.tsx never applies
5451
5469
  in Kaufen mode), so real purchase prices had no digit-based shrink at all here and could
@@ -6590,8 +6608,16 @@ line-height: 31px;
6590
6608
  Both capped to the fixed inset:0 scrim's CURRENT visible height (%, not vh — on iOS Safari
6591
6609
  100vh > the visible area while the toolbar shows, which pushed the sheet's top off-screen). */
6592
6610
  .md3 .fin-modal {
6611
+ /* room under the fold for whatever overlays the bottom of the screen: the home-indicator
6612
+ inset, and on iOS 26+ Safari its floating bottom toolbar (.fin-modal--ios-toolbar below) —
6613
+ without it the "Finanzierungs-Details" link ended up hidden behind the toolbar. */
6614
+ --fin-sheet-bottom-gap: env(safe-area-inset-bottom, 0px);
6593
6615
  max-width: none;
6594
- height: min(var(--fin-sheet-fold, 85vh), calc(100% - 24px));
6616
+ /* capped at the full visible height (not 100% - 24px): when the rate AND the details link
6617
+ don't fit otherwise (small iPhones behind Safari's floating toolbar), the sheet goes all the
6618
+ way up — both must be visible on open */
6619
+ --fin-sheet-collapsed: min(calc(var(--fin-sheet-fold, 85vh) + var(--fin-sheet-bottom-gap)), 100%);
6620
+ height: var(--fin-sheet-collapsed);
6595
6621
  max-height: none;
6596
6622
  background: #FFFFFF;
6597
6623
  box-shadow: 0px -4px 18px rgba(0, 0, 0, 0.13);
@@ -6599,7 +6625,16 @@ line-height: 31px;
6599
6625
  animation: sheet-up var(--dur-2);
6600
6626
  }
6601
6627
  .md3 .fin-modal.fin-modal--expanded {
6602
- height: calc(100% - 24px);
6628
+ /* never shorter than the collapsed sheet (which may already be full height) */
6629
+ height: max(var(--fin-sheet-collapsed), calc(100% - 24px));
6630
+ }
6631
+ .md3 .fin-modal .fin-modal-body {
6632
+ padding-bottom: calc(13px + var(--fin-sheet-bottom-gap));
6633
+ }
6634
+ /* iOS 26+ Safari: its floating bottom toolbar sits ON TOP of fixed content (~86pt from the
6635
+ screen bottom incl. the home indicator) — class set by FinanceDetailsModal from the UA */
6636
+ .md3 .fin-modal.fin-modal--ios-toolbar {
6637
+ --fin-sheet-bottom-gap: max(env(safe-area-inset-bottom, 0px), 84px);
6603
6638
  }
6604
6639
  /* set from the frame after the first fold measure (not on open — no 85vh -> fold shrink) */
6605
6640
  .md3 .fin-modal.fin-modal--animated {
@@ -2270,6 +2270,16 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
2270
2270
  const sheetRef = React.useRef<HTMLDivElement | null>(null);
2271
2271
  const [sheetFold, setSheetFold] = React.useState<number | null>(null);
2272
2272
  const [sheetAnimated, setSheetAnimated] = React.useState(false);
2273
+ // iOS 26+ Safari only (UA "Version/26…", not Chrome/Firefox/Edge for iOS): its floating bottom
2274
+ // toolbar overlays fixed content, so the sheet reserves room under its fold (md3.css
2275
+ // .fin-modal--ios-toolbar). Older iOS Safari keeps content above its toolbar by itself.
2276
+ const iosToolbarOverlay = React.useMemo((): boolean => {
2277
+ if (typeof navigator === 'undefined') return false;
2278
+ const ua = navigator.userAgent;
2279
+ if (!/iP(hone|od)/.test(ua) || /CriOS|FxiOS|EdgiOS/.test(ua)) return false;
2280
+ const m = /Version\/(\d+)/.exec(ua);
2281
+ return !!m && Number(m[1]) >= 26;
2282
+ }, []);
2273
2283
  React.useLayoutEffect(() => {
2274
2284
  if (!open) return;
2275
2285
  const sheet = sheetRef.current;
@@ -2554,7 +2564,12 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
2554
2564
  return (
2555
2565
  <div className="fin-modal-scrim" onClick={onClose}>
2556
2566
  <div
2557
- className={'fin-modal' + (showBreakdown ? ' fin-modal--expanded' : '') + (sheetAnimated ? ' fin-modal--animated' : '')}
2567
+ className={
2568
+ 'fin-modal' +
2569
+ (showBreakdown ? ' fin-modal--expanded' : '') +
2570
+ (sheetAnimated ? ' fin-modal--animated' : '') +
2571
+ (iosToolbarOverlay ? ' fin-modal--ios-toolbar' : '')
2572
+ }
2558
2573
  style={sheetFold != null ? ({ '--fin-sheet-fold': `${sheetFold}px` } as React.CSSProperties) : undefined}
2559
2574
  role="dialog"
2560
2575
  aria-modal="true"