@bytebrand/fe-ui-core-autobahn 1.0.1 → 1.0.2

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.
Files changed (621) hide show
  1. package/assets/autode-logo.svg +6 -6
  2. package/cards/CarCard.tsx +174 -174
  3. package/cards/CarRow.tsx +186 -182
  4. package/cards/cardParts.tsx +529 -489
  5. package/cards/index.ts +37 -35
  6. package/cards/types.ts +122 -114
  7. package/chrome/Footer.tsx +189 -189
  8. package/chrome/TopBar.tsx +405 -405
  9. package/chrome/index.ts +20 -20
  10. package/chrome/svg.d.ts +11 -11
  11. package/compat/AccardionSection/AccardionSection.styl +45 -45
  12. package/compat/AccardionSection/AccardionSection.tsx +56 -56
  13. package/compat/AccordionWidget/AccordionWidget.styl +220 -220
  14. package/compat/AccordionWidget/AccordionWidget.tsx +257 -257
  15. package/compat/AccordionWrapper/AccordionItem/AccordionItem.styl +34 -34
  16. package/compat/AccordionWrapper/AccordionItem/AccordionItem.tsx +64 -64
  17. package/compat/AccordionWrapper/AccordionWrapper.tsx +34 -34
  18. package/compat/AdvantageItem/AdvantageItem.styl +47 -47
  19. package/compat/AdvantageItem/AdvantageItem.tsx +26 -26
  20. package/compat/Alternative/DealerInfo.styl +116 -116
  21. package/compat/Alternative/DealerInfo.tsx +171 -171
  22. package/compat/Badge/Badge.styl +44 -44
  23. package/compat/Badge/Badge.tsx +25 -25
  24. package/compat/BodyTypeIcons/Audi.tsx +9 -9
  25. package/compat/BodyTypeIcons/Bmw.tsx +860 -860
  26. package/compat/BodyTypeIcons/Ford.tsx +31 -31
  27. package/compat/BodyTypeIcons/IconsConfig.tsx +44 -44
  28. package/compat/BodyTypeIcons/IconsConfigCompact.tsx +30 -30
  29. package/compat/BodyTypeIcons/Mazda.tsx +44 -44
  30. package/compat/BodyTypeIcons/MercedesBenz.tsx +38 -38
  31. package/compat/BodyTypeIcons/Opel.tsx +19 -19
  32. package/compat/BodyTypeIcons/Search.tsx +19 -19
  33. package/compat/BodyTypeIcons/SelectorCategoryCombi.tsx +68 -68
  34. package/compat/BodyTypeIcons/SelectorCategoryCompact.tsx +20 -20
  35. package/compat/BodyTypeIcons/SelectorCategoryConvertible.tsx +68 -68
  36. package/compat/BodyTypeIcons/SelectorCategoryCoupe.tsx +60 -60
  37. package/compat/BodyTypeIcons/SelectorCategoryMinibus.tsx +64 -64
  38. package/compat/BodyTypeIcons/SelectorCategorySedan.tsx +69 -69
  39. package/compat/BodyTypeIcons/SelectorCategorySuv.tsx +77 -77
  40. package/compat/BodyTypeIcons/SelectorCategoryTransporter.tsx +68 -68
  41. package/compat/BodyTypeIcons/SelectorCategoryVan.tsx +72 -72
  42. package/compat/BodyTypeIcons/Volkswagen.tsx +330 -330
  43. package/compat/BodyTypeIcons/index.ts +17 -17
  44. package/compat/Button/Button.tsx +65 -65
  45. package/compat/ButtonOld/Button.styl +65 -65
  46. package/compat/ButtonOld/Button.tsx +84 -84
  47. package/compat/Checkbox/Checkbox.styl +119 -119
  48. package/compat/Checkbox/Checkbox.tsx +151 -151
  49. package/compat/Checkbox/FormCheckbox.styl +22 -22
  50. package/compat/Checkbox/FormCheckbox.tsx +86 -86
  51. package/compat/Co2Widget/CO2Efficiency.styl +219 -219
  52. package/compat/Co2Widget/CO2Efficiency.tsx +93 -93
  53. package/compat/ContactInfo/ContactInfo.styl +22 -22
  54. package/compat/ContactInfo/ContactInfo.tsx +161 -161
  55. package/compat/ContactInfo/TemporaryTranslation.ts +11 -11
  56. package/compat/CookieModal/CookieModal.tsx +49 -49
  57. package/compat/CookieModal/Modal.tsx +43 -43
  58. package/compat/CookieModal/ModalsConfig.tsx +23 -23
  59. package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.styl +86 -86
  60. package/compat/CookieModal/modals/ManageCookieModal/ManageCookieModal.tsx +184 -184
  61. package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.styl +66 -66
  62. package/compat/CookieModal/modals/PreviewCookieModal/PreviewCookieModal.tsx +51 -51
  63. package/compat/CookieModal/modals/TestModal.tsx +7 -7
  64. package/compat/CookieModal/useModal.ts +13 -13
  65. package/compat/CustomerQuote/CustomerQuote.styl +79 -79
  66. package/compat/CustomerQuote/CustomerQuote.tsx +68 -68
  67. package/compat/CustomerQuotesSlider/CustomerQuotesSlider.styl +46 -46
  68. package/compat/CustomerQuotesSlider/CustomerQuotesSlider.tsx +79 -79
  69. package/compat/CustomerQuotesSlider/SliderArrow.tsx +20 -20
  70. package/compat/CustomerQuotesSlider/slider.global.styl +2 -2
  71. package/compat/ExpansionPanel/ExpansionPanel.tsx +68 -68
  72. package/compat/FirstInfoBlock/FirstInfoBlock.styl +33 -33
  73. package/compat/FirstInfoBlock/FirstInfoBlock.tsx +49 -49
  74. package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.styl +66 -66
  75. package/compat/FirstInfoBlock/FirstInfoBlockItem/FirstInfoBlockItem.tsx +21 -21
  76. package/compat/FormattedNumber/FormattedNumber.styl +1 -1
  77. package/compat/FormattedNumber/FormattedNumber.tsx +90 -90
  78. package/compat/IconContainer/IconContainer.styl +23 -23
  79. package/compat/IconContainer/IconContainer.tsx +34 -34
  80. package/compat/Image/Image.styl +109 -109
  81. package/compat/Image/Image.tsx +302 -302
  82. package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.styl +7 -7
  83. package/compat/ImageSettings/EditableOptionsTable/CustomCheckbox/CustomCheckbox.tsx +30 -30
  84. package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.styl +122 -122
  85. package/compat/ImageSettings/EditableOptionsTable/EditableOptionsTable.tsx +199 -199
  86. package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.styl +3 -3
  87. package/compat/ImageSettings/EditableOptionsTable/ImageIcon/ImageIcon.tsx +15 -15
  88. package/compat/ImageSettings/OptionsTable/OptionsTable.styl +47 -47
  89. package/compat/ImageSettings/OptionsTable/OptionsTable.tsx +122 -122
  90. package/compat/ImageSettings/PricePlan/PricePlan.styl +63 -63
  91. package/compat/ImageSettings/PricePlan/PricePlan.tsx +32 -32
  92. package/compat/ImageSettings/index.ts +42 -42
  93. package/compat/ImagesSet/ImagesSet.styl +27 -27
  94. package/compat/ImagesSet/ImagesSet.tsx +76 -76
  95. package/compat/InfoBlockWrapper/InfoBlockWrapper.styl +41 -41
  96. package/compat/InfoBlockWrapper/InfoBlockWrapper.tsx +46 -46
  97. package/compat/Loader/Loader.styl +39 -39
  98. package/compat/Loader/Loader.tsx +32 -32
  99. package/compat/MagnifyGlass/MagnifyGlass.styl +33 -33
  100. package/compat/MagnifyGlass/MagnifyGlass.tsx +213 -213
  101. package/compat/MdAccordionGroup/MdAccordionGroup.tsx +53 -53
  102. package/compat/MdCheckbox/MdCheckbox.tsx +69 -69
  103. package/compat/MdField/MdField.tsx +100 -100
  104. package/compat/MdSelect/MdSelect.tsx +103 -103
  105. package/compat/MdSwitch/MdSwitch.tsx +29 -29
  106. package/compat/MdTabs/MdTabs.tsx +47 -47
  107. package/compat/MdTooltip/MdTooltip.tsx +31 -31
  108. package/compat/OfferDetailedSection/OfferDetailedSection.styl +31 -31
  109. package/compat/OfferDetailedSection/OfferDetailedSection.tsx +100 -100
  110. package/compat/OfferDetailedSection/partials/PanelConfig.styl +131 -131
  111. package/compat/OfferDetailedSection/partials/PanelConfig.tsx +121 -121
  112. package/compat/OfferPanel/AboAccordion/AboAccordion.styl +24 -24
  113. package/compat/OfferPanel/AboAccordion/AboAccordion.tsx +128 -128
  114. package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.styl +11 -11
  115. package/compat/OfferPanel/AboAccordion/AboColorOptions/AboColorOptions.tsx +35 -35
  116. package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.styl +20 -20
  117. package/compat/OfferPanel/AboAccordion/AboFaq/AboFaq.tsx +25 -25
  118. package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.styl +13 -13
  119. package/compat/OfferPanel/AboAccordion/AboIncludedServices/AboIncludedServices.tsx +39 -39
  120. package/compat/OfferPanel/MuiOfferPeriod/MuiOfferPeriod.tsx +42 -42
  121. package/compat/OfferPanel/OfferCheckboxGroup/CheckboxContainer.tsx +140 -140
  122. package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.styl +144 -144
  123. package/compat/OfferPanel/OfferCheckboxGroup/OfferCheckboxGroup.tsx +23 -23
  124. package/compat/OfferPanel/OfferPanel.styl +193 -193
  125. package/compat/OfferPanel/OfferPanel.tsx +81 -81
  126. package/compat/OfferPanel/OfferPeriod/OfferPeriod.styl +24 -24
  127. package/compat/OfferPanel/OfferPeriod/OfferPeriod.tsx +45 -45
  128. package/compat/OfferPanel/RangeGroup/RangeGroup.tsx +39 -39
  129. package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styl +119 -119
  130. package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.styled.tsx +33 -33
  131. package/compat/OfferRequestButtonWrapper/OfferRequestButtonWrapper.tsx +122 -122
  132. package/compat/PriceRating/PriceRating.styl +47 -47
  133. package/compat/PriceRating/PriceRating.tsx +64 -64
  134. package/compat/PriceRatingDetailed/PriceRatingDetailed.styl +120 -120
  135. package/compat/PriceRatingDetailed/PriceRatingDetailed.tsx +191 -191
  136. package/compat/PricingToolBlock/PricingTool.styl +6 -6
  137. package/compat/PricingToolBlock/PricingTool.tsx +29 -29
  138. package/compat/Radio/Radio.styl +115 -115
  139. package/compat/Radio/Radio.tsx +141 -141
  140. package/compat/Radio/RadioGroup.styl +5 -5
  141. package/compat/Radio/RadioGroup.tsx +65 -65
  142. package/compat/Range/Range.tsx +79 -79
  143. package/compat/RateSearchValue/RateSearchValue.styl +22 -22
  144. package/compat/RateSearchValue/RateSearchValue.tsx +55 -55
  145. package/compat/RateSearchWidget/RateSearchWidget.styl +106 -106
  146. package/compat/RateSearchWidget/RateSearchWidget.tsx +163 -163
  147. package/compat/ServiceBlockItem/ServiceBlockItem.styl +47 -47
  148. package/compat/ServiceBlockItem/ServiceBlockItem.tsx +25 -25
  149. package/compat/SkeletonItem/SkeletonItem.styl +80 -80
  150. package/compat/SkeletonItem/SkeletonItem.tsx +80 -80
  151. package/compat/StarButton/StarButton.styl +39 -39
  152. package/compat/StarButton/StarButton.tsx +31 -31
  153. package/compat/TabPanel/TabPanel.tsx +28 -28
  154. package/compat/TimePicker/TimePicker.styl +22 -22
  155. package/compat/TimePicker/TimePicker.tsx +156 -156
  156. package/compat/Tooltip/Tooltip.styl +117 -117
  157. package/compat/Tooltip/Tooltip.tsx +63 -63
  158. package/compat/Usp/Usp.styl +78 -78
  159. package/compat/Usp/Usp.tsx +30 -30
  160. package/compat/Usp/uspTranslate.ts +12 -12
  161. package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.styl +36 -36
  162. package/compat/VehicleDetailedSidebar/VehicleDetailedSidebar.tsx +178 -178
  163. package/compat/VehicleDetailedSidebar/partials/Price.styl +27 -27
  164. package/compat/VehicleDetailedSidebar/partials/Price.tsx +41 -41
  165. package/compat/VehicleDetailedSidebar/partials/PriceContent.styl +123 -123
  166. package/compat/VehicleDetailedSidebar/partials/PriceContent.tsx +128 -128
  167. package/compat/VehicleDetailedSidebar/partials/Properties.styl +58 -58
  168. package/compat/VehicleDetailedSidebar/partials/Properties.tsx +155 -155
  169. package/compat/VehicleDetailedSidebar/partials/Title.styl +35 -35
  170. package/compat/VehicleDetailedSidebar/partials/Title.tsx +33 -33
  171. package/compat/VehicleDetailedSlider/VehicleDetailedSlider.styl +146 -146
  172. package/compat/VehicleDetailedSlider/VehicleDetailedSlider.tsx +382 -382
  173. package/compat/VehicleDetailedSlider/partials/MobileStast.tsx +61 -61
  174. package/compat/VehicleDetailedSlider/partials/MobileStats.styl +71 -71
  175. package/compat/VehicleDetailedSlider/partials/PriceData.styl +50 -50
  176. package/compat/VehicleDetailedSlider/partials/PriceData.tsx +67 -67
  177. package/compat/VehicleDetailedSlider/partials/Stats.styl +80 -80
  178. package/compat/VehicleDetailedSlider/partials/Stats.tsx +62 -62
  179. package/compat/VehicleDetailedSlider/partials/Title.styl +44 -44
  180. package/compat/VehicleDetailedSlider/partials/Title.tsx +36 -36
  181. package/compat/VehicleFormattedPrice/VehicleFormattedPrice.styl +148 -148
  182. package/compat/VehicleFormattedPrice/VehicleFormattedPrice.tsx +163 -163
  183. package/compat/VehicleSlider/VehicleSlider.styl +62 -62
  184. package/compat/VehicleSlider/VehicleSlider.tsx +125 -125
  185. package/compat/VehicleSlider/VehicleSliderForSRL.tsx +175 -175
  186. package/compat/VehicleSmallCard/SeoText/SeoText.styl +8 -8
  187. package/compat/VehicleSmallCard/SeoText/SeoText.tsx +16 -16
  188. package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.styl +204 -204
  189. package/compat/VehicleSmallCard/VehicleData/VechiclePriceItem/VechiclePriceItem.tsx +199 -199
  190. package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.styl +273 -273
  191. package/compat/VehicleSmallCard/VehicleData/VehicleInfo/VehicleInfo.tsx +179 -179
  192. package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.styl +165 -165
  193. package/compat/VehicleSmallCard/VehicleData/VehiclePrice/VehiclePrice.tsx +299 -299
  194. package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.styl +32 -32
  195. package/compat/VehicleSmallCard/VehicleData/VehicleProperty/VehicleProperty.tsx +35 -35
  196. package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.styl +135 -135
  197. package/compat/VehicleSmallCard/VehicleData/VehicleTitle/VehicleTitle.tsx +91 -91
  198. package/compat/VehicleSmallCard/VehicleSmallCard.styl +309 -309
  199. package/compat/VehicleSmallCard/VehicleSmallCard.tsx +448 -448
  200. package/compat/index.ts +77 -77
  201. package/compat/legacy-theme/mixins.styl +93 -93
  202. package/compat/legacy-theme/priceReviewColors.styl +12 -12
  203. package/compat/legacy-theme/slider.global.styl +5 -5
  204. package/compat/legacy-theme/theme.styl +136 -136
  205. package/compat/withLabel/withLabel.styl +33 -33
  206. package/compat/withLabel/withLabel.tsx +44 -44
  207. package/compat/withStats/withStats.styl +174 -174
  208. package/compat/withStats/withStats.tsx +238 -238
  209. package/constants/RateSearchWidget.ts +15 -15
  210. package/constants/Search.ts +290 -290
  211. package/constants/SearchWidget.ts +108 -108
  212. package/constants/app.ts +223 -223
  213. package/constants/common.ts +127 -127
  214. package/constants/core.ts +131 -131
  215. package/constants/highlights.ts +165 -165
  216. package/constants/price.ts +9 -9
  217. package/constants/selectors.ts +38 -38
  218. package/constants.ts +91 -91
  219. package/data/DataTransformers.ts +88 -88
  220. package/data/fieldMapping.ts +364 -342
  221. package/data/toAutobahnCar.ts +455 -442
  222. package/iconsvg/IconSVG.tsx +30 -30
  223. package/iconsvg/IconSVGConfig.tsx +768 -768
  224. package/iconsvg/SVG/AboPartner.tsx +16 -16
  225. package/iconsvg/SVG/ArrowQuotes.tsx +22 -22
  226. package/iconsvg/SVG/CloseIcon.tsx +17 -17
  227. package/iconsvg/SVG/CloseIconSelect.tsx +18 -18
  228. package/iconsvg/SVG/ClosedLockIcon.tsx +18 -18
  229. package/iconsvg/SVG/DealerCheckIcon.tsx +18 -18
  230. package/iconsvg/SVG/DealerPopoverMail.tsx +21 -21
  231. package/iconsvg/SVG/DealerPopoverPhone.tsx +21 -21
  232. package/iconsvg/SVG/GrayPhoneIcon.tsx +22 -22
  233. package/iconsvg/SVG/InternetIcon.tsx +18 -18
  234. package/iconsvg/SVG/WhiteEnvelopeIcon.tsx +21 -21
  235. package/iconsvg/SVG/bodyType/Cabrio.tsx +23 -23
  236. package/iconsvg/SVG/bodyType/Coupe.tsx +22 -22
  237. package/iconsvg/SVG/bodyType/Minibus.tsx +22 -22
  238. package/iconsvg/SVG/bodyType/Other.tsx +25 -25
  239. package/iconsvg/SVG/bodyType/Sedan.tsx +22 -22
  240. package/iconsvg/SVG/bodyType/SelectorCategoryCombi.tsx +68 -68
  241. package/iconsvg/SVG/bodyType/SelectorCategoryCompact.tsx +20 -20
  242. package/iconsvg/SVG/bodyType/SelectorCategoryConvertible.tsx +68 -68
  243. package/iconsvg/SVG/bodyType/SelectorCategoryCoupe.tsx +60 -60
  244. package/iconsvg/SVG/bodyType/SelectorCategoryMinibus.tsx +64 -64
  245. package/iconsvg/SVG/bodyType/SelectorCategoryOther.tsx +60 -60
  246. package/iconsvg/SVG/bodyType/SelectorCategorySedan.tsx +69 -69
  247. package/iconsvg/SVG/bodyType/SelectorCategorySuv.tsx +77 -77
  248. package/iconsvg/SVG/bodyType/SelectorCategoryTransporter.tsx +68 -68
  249. package/iconsvg/SVG/bodyType/SelectorCategoryVan.tsx +72 -72
  250. package/iconsvg/SVG/bodyType/Small.tsx +23 -23
  251. package/iconsvg/SVG/bodyType/Suv.tsx +23 -23
  252. package/iconsvg/SVG/bodyType/Van.tsx +23 -23
  253. package/iconsvg/SVG/bodyType/Wagon.tsx +23 -23
  254. package/iconsvg/SVG/common/AddIcon.tsx +16 -16
  255. package/iconsvg/SVG/common/AddPlus.tsx +16 -16
  256. package/iconsvg/SVG/common/AddressDashboard.tsx +29 -29
  257. package/iconsvg/SVG/common/AddressIcon.tsx +20 -20
  258. package/iconsvg/SVG/common/ArrowDetailedAccordionBlue.tsx +26 -26
  259. package/iconsvg/SVG/common/ArrowDownBlue.tsx +21 -21
  260. package/iconsvg/SVG/common/ArrowSelect.tsx +23 -23
  261. package/iconsvg/SVG/common/ArrowStepDown.tsx +18 -18
  262. package/iconsvg/SVG/common/Autocheck.tsx +19 -19
  263. package/iconsvg/SVG/common/AutodeLogo.tsx +36 -36
  264. package/iconsvg/SVG/common/Avatar.tsx +17 -17
  265. package/iconsvg/SVG/common/BellGray.tsx +19 -19
  266. package/iconsvg/SVG/common/BigInfoTransparent.tsx +13 -13
  267. package/iconsvg/SVG/common/Browse.tsx +20 -20
  268. package/iconsvg/SVG/common/Calendar.tsx +24 -24
  269. package/iconsvg/SVG/common/CallbackDashboard.tsx +30 -30
  270. package/iconsvg/SVG/common/Camera.tsx +17 -17
  271. package/iconsvg/SVG/common/Car.tsx +16 -16
  272. package/iconsvg/SVG/common/CarBody.tsx +19 -19
  273. package/iconsvg/SVG/common/CarFront.tsx +43 -43
  274. package/iconsvg/SVG/common/CarInspectionCheck.tsx +21 -21
  275. package/iconsvg/SVG/common/CarInspectionScheme0.tsx +32 -32
  276. package/iconsvg/SVG/common/CarInspectionScheme1.tsx +53 -53
  277. package/iconsvg/SVG/common/CarInspectionScheme2.tsx +52 -52
  278. package/iconsvg/SVG/common/CarInspectionScheme3.tsx +32 -32
  279. package/iconsvg/SVG/common/CarInspectionScheme4.tsx +32 -32
  280. package/iconsvg/SVG/common/CarInspectionScheme5.tsx +32 -32
  281. package/iconsvg/SVG/common/CarInspectionScheme6.tsx +32 -32
  282. package/iconsvg/SVG/common/CarInspectionSchemeGeneral copy.tsx +24 -24
  283. package/iconsvg/SVG/common/CarInspectionSchemeGeneral.tsx +24 -24
  284. package/iconsvg/SVG/common/CheckBlue.tsx +18 -18
  285. package/iconsvg/SVG/common/CheckGreen.tsx +22 -22
  286. package/iconsvg/SVG/common/CheckMark.tsx +16 -16
  287. package/iconsvg/SVG/common/CheckWhite.tsx +19 -19
  288. package/iconsvg/SVG/common/Chevron.tsx +17 -17
  289. package/iconsvg/SVG/common/CircledCheckmark.tsx +25 -25
  290. package/iconsvg/SVG/common/Clock.tsx +18 -18
  291. package/iconsvg/SVG/common/Close.tsx +19 -19
  292. package/iconsvg/SVG/common/CloseGrey.tsx +22 -22
  293. package/iconsvg/SVG/common/ContactEmail.tsx +21 -21
  294. package/iconsvg/SVG/common/ContactPhone.tsx +28 -28
  295. package/iconsvg/SVG/common/CopyIcon copy.tsx +22 -22
  296. package/iconsvg/SVG/common/CopyIcon.tsx +22 -22
  297. package/iconsvg/SVG/common/CopyIconForDealer.tsx +21 -21
  298. package/iconsvg/SVG/common/DashboardIcon.tsx +20 -20
  299. package/iconsvg/SVG/common/DashboardQuestionMark.tsx +20 -20
  300. package/iconsvg/SVG/common/DealersIcon.tsx +20 -20
  301. package/iconsvg/SVG/common/DeleteCircle.tsx +31 -31
  302. package/iconsvg/SVG/common/DeleteV1Icon.tsx +18 -18
  303. package/iconsvg/SVG/common/DeliveryDashboard.tsx +25 -25
  304. package/iconsvg/SVG/common/DeliveryMail.tsx +24 -24
  305. package/iconsvg/SVG/common/Discount100De.tsx +18 -18
  306. package/iconsvg/SVG/common/Discount100En.tsx +19 -19
  307. package/iconsvg/SVG/common/Discount66De.tsx +28 -28
  308. package/iconsvg/SVG/common/Discount66En.tsx +20 -20
  309. package/iconsvg/SVG/common/DoneIcon.tsx +18 -18
  310. package/iconsvg/SVG/common/EditCircle.tsx +32 -32
  311. package/iconsvg/SVG/common/EditPriceIcon.tsx +20 -20
  312. package/iconsvg/SVG/common/EuroCurrency.tsx +18 -18
  313. package/iconsvg/SVG/common/Export.tsx +20 -20
  314. package/iconsvg/SVG/common/Eye.tsx +17 -17
  315. package/iconsvg/SVG/common/EyeCatch.tsx +19 -19
  316. package/iconsvg/SVG/common/FavoritesIcon.tsx +20 -20
  317. package/iconsvg/SVG/common/FilterRange.tsx +16 -16
  318. package/iconsvg/SVG/common/FilterToolBlack.tsx +23 -23
  319. package/iconsvg/SVG/common/FlagDe.tsx +21 -21
  320. package/iconsvg/SVG/common/FlagEn.tsx +43 -43
  321. package/iconsvg/SVG/common/GrayEnvelopeIcon.tsx +19 -19
  322. package/iconsvg/SVG/common/HamburgerMenuIcon.tsx +18 -18
  323. package/iconsvg/SVG/common/HandingOverDashboard.tsx +32 -32
  324. package/iconsvg/SVG/common/ImageSettingsIcon.tsx +20 -20
  325. package/iconsvg/SVG/common/Info.tsx +16 -16
  326. package/iconsvg/SVG/common/InfoIcon.tsx +17 -17
  327. package/iconsvg/SVG/common/InfoTransparent.tsx +18 -18
  328. package/iconsvg/SVG/common/LogoutIcon.tsx +20 -20
  329. package/iconsvg/SVG/common/MagnifyingGlass.tsx +31 -31
  330. package/iconsvg/SVG/common/MenuArrow.tsx +16 -16
  331. package/iconsvg/SVG/common/MenuGrey.tsx +22 -22
  332. package/iconsvg/SVG/common/MobileDeLogo.tsx +108 -108
  333. package/iconsvg/SVG/common/MyOrderIcon.tsx +20 -20
  334. package/iconsvg/SVG/common/MyVehiclesIcon.tsx +20 -20
  335. package/iconsvg/SVG/common/NewFlagDe.tsx +25 -25
  336. package/iconsvg/SVG/common/NewFlagEn.tsx +34 -34
  337. package/iconsvg/SVG/common/OrderReceivedDashboard.tsx +27 -27
  338. package/iconsvg/SVG/common/Package.tsx +30 -30
  339. package/iconsvg/SVG/common/Phone.tsx +18 -18
  340. package/iconsvg/SVG/common/PhoneGrey.tsx +22 -22
  341. package/iconsvg/SVG/common/PickupDashboard.tsx +30 -30
  342. package/iconsvg/SVG/common/Picture.tsx +24 -24
  343. package/iconsvg/SVG/common/Pictures.tsx +32 -32
  344. package/iconsvg/SVG/common/Plus.tsx +16 -16
  345. package/iconsvg/SVG/common/PlusNew.tsx +16 -16
  346. package/iconsvg/SVG/common/PreparationDashboard.tsx +29 -29
  347. package/iconsvg/SVG/common/ProfileDashboard.tsx +24 -24
  348. package/iconsvg/SVG/common/ProfileIcon.tsx +17 -17
  349. package/iconsvg/SVG/common/Question.tsx +19 -19
  350. package/iconsvg/SVG/common/QuestionBold.tsx +25 -25
  351. package/iconsvg/SVG/common/RegistrationDashboard.tsx +31 -31
  352. package/iconsvg/SVG/common/SavedSearchsIcon.tsx +20 -20
  353. package/iconsvg/SVG/common/Search.tsx +19 -19
  354. package/iconsvg/SVG/common/SearchGrey.tsx +22 -22
  355. package/iconsvg/SVG/common/SettingPenIcon.tsx +20 -20
  356. package/iconsvg/SVG/common/Share.tsx +16 -16
  357. package/iconsvg/SVG/common/ShoppingCart.tsx +18 -18
  358. package/iconsvg/SVG/common/SliderArrow.tsx +21 -21
  359. package/iconsvg/SVG/common/SliderEye.tsx +17 -17
  360. package/iconsvg/SVG/common/SortUpDownArrows.tsx +18 -18
  361. package/iconsvg/SVG/common/Speedometer.tsx +23 -23
  362. package/iconsvg/SVG/common/Star.tsx +20 -20
  363. package/iconsvg/SVG/common/StarNew.tsx +16 -16
  364. package/iconsvg/SVG/common/StarOutline.tsx +20 -20
  365. package/iconsvg/SVG/common/StarRoundedCorners.tsx +18 -18
  366. package/iconsvg/SVG/common/Stats.tsx +17 -17
  367. package/iconsvg/SVG/common/Step1.tsx +21 -21
  368. package/iconsvg/SVG/common/Step2.tsx +20 -20
  369. package/iconsvg/SVG/common/Step3.tsx +21 -21
  370. package/iconsvg/SVG/common/SupportCallbackIcon.tsx +20 -20
  371. package/iconsvg/SVG/common/Telephone.tsx +22 -22
  372. package/iconsvg/SVG/common/Time.tsx +17 -17
  373. package/iconsvg/SVG/common/Timetable.tsx +18 -18
  374. package/iconsvg/SVG/common/Trash.tsx +22 -22
  375. package/iconsvg/SVG/common/TrashRed.tsx +23 -23
  376. package/iconsvg/SVG/common/Upload.tsx +17 -17
  377. package/iconsvg/SVG/common/UserGrey.tsx +22 -22
  378. package/iconsvg/SVG/common/UserProfileIcon.tsx +20 -20
  379. package/iconsvg/SVG/common/ValidateFailure.tsx +21 -21
  380. package/iconsvg/SVG/common/ValidateSuccess.tsx +21 -21
  381. package/iconsvg/SVG/common/WarningTriangle.tsx +20 -20
  382. package/iconsvg/SVG/common/WhiteArrowUp.tsx +21 -21
  383. package/iconsvg/SVG/common/WhiteKey.tsx +21 -21
  384. package/iconsvg/SVG/common/WhitePeople.tsx +23 -23
  385. package/iconsvg/SVG/common/WhiteTick.tsx +19 -19
  386. package/iconsvg/SVG/flags/AT.tsx +19 -19
  387. package/iconsvg/SVG/flags/BE.tsx +20 -20
  388. package/iconsvg/SVG/flags/BG.tsx +20 -20
  389. package/iconsvg/SVG/flags/CH.tsx +22 -22
  390. package/iconsvg/SVG/flags/CZ.tsx +18 -18
  391. package/iconsvg/SVG/flags/DE.tsx +18 -18
  392. package/iconsvg/SVG/flags/DK.tsx +18 -18
  393. package/iconsvg/SVG/flags/ES.tsx +2585 -2585
  394. package/iconsvg/SVG/flags/FI.tsx +18 -18
  395. package/iconsvg/SVG/flags/FR.tsx +20 -20
  396. package/iconsvg/SVG/flags/GB.tsx +26 -26
  397. package/iconsvg/SVG/flags/HR.tsx +135 -135
  398. package/iconsvg/SVG/flags/HU.tsx +20 -20
  399. package/iconsvg/SVG/flags/IT.tsx +20 -20
  400. package/iconsvg/SVG/flags/LI.tsx +106 -106
  401. package/iconsvg/SVG/flags/LU.tsx +18 -18
  402. package/iconsvg/SVG/flags/NL.tsx +18 -18
  403. package/iconsvg/SVG/flags/NO.tsx +20 -20
  404. package/iconsvg/SVG/flags/PL.tsx +19 -19
  405. package/iconsvg/SVG/flags/RO.tsx +20 -20
  406. package/iconsvg/SVG/flags/RU.tsx +20 -20
  407. package/iconsvg/SVG/flags/SE.tsx +20 -20
  408. package/iconsvg/SVG/flags/SI.tsx +54 -54
  409. package/iconsvg/SVG/flags/SK.tsx +34 -34
  410. package/iconsvg/SVG/flags/UA.tsx +19 -19
  411. package/iconsvg/SVG/infoBlocks/14DaysReturnPolicy.tsx +18 -18
  412. package/iconsvg/SVG/infoBlocks/AlertInfo.tsx +19 -19
  413. package/iconsvg/SVG/infoBlocks/Autocheck.tsx +19 -19
  414. package/iconsvg/SVG/infoBlocks/CheckTheStory.tsx +22 -22
  415. package/iconsvg/SVG/infoBlocks/CustomerServiceWhite.tsx +16 -16
  416. package/iconsvg/SVG/infoBlocks/Guarantee.tsx +16 -16
  417. package/iconsvg/SVG/infoBlocks/OrderWhite.tsx +13 -13
  418. package/iconsvg/SVG/infoBlocks/PriceGuarantee.tsx +19 -19
  419. package/iconsvg/SVG/infoBlocks/PriceGuaranteeWhite.tsx +17 -17
  420. package/iconsvg/SVG/infoBlocks/TransportAndDelivery.tsx +21 -21
  421. package/iconsvg/SVG/infoBlocks/Warranty.tsx +23 -23
  422. package/iconsvg/SVG/popower/Mail.tsx +18 -18
  423. package/iconsvg/SVG/popower/Phone.tsx +19 -19
  424. package/iconsvg/SVG/popower/Schedule.tsx +18 -18
  425. package/iconsvg/SVG/searchWidgets/drive/AAllWheelDrive.tsx +26 -26
  426. package/iconsvg/SVG/searchWidgets/drive/AllWheelDrive.tsx +26 -26
  427. package/iconsvg/SVG/searchWidgets/drive/FrontWheelDrive.tsx +25 -25
  428. package/iconsvg/SVG/searchWidgets/drive/OtherWheelDrive.tsx +26 -26
  429. package/iconsvg/SVG/searchWidgets/drive/RearWheelDrive.tsx +25 -25
  430. package/iconsvg/SVG/searchWidgets/fuel/FuelDiesel.tsx +18 -18
  431. package/iconsvg/SVG/searchWidgets/fuel/FuelElectrical.tsx +19 -19
  432. package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalDiesel.tsx +34 -34
  433. package/iconsvg/SVG/searchWidgets/fuel/FuelElectricalPetrol.tsx +20 -20
  434. package/iconsvg/SVG/searchWidgets/fuel/FuelEthanol.tsx +53 -53
  435. package/iconsvg/SVG/searchWidgets/fuel/FuelHydrogen.tsx +24 -24
  436. package/iconsvg/SVG/searchWidgets/fuel/FuelLpg.tsx +24 -24
  437. package/iconsvg/SVG/searchWidgets/fuel/FuelNaturalGas.tsx +23 -23
  438. package/iconsvg/SVG/searchWidgets/fuel/FuelOther.tsx +28 -28
  439. package/iconsvg/SVG/searchWidgets/fuel/FuelPetrol.tsx +18 -18
  440. package/iconsvg/SVG/settings/Account.tsx +17 -17
  441. package/iconsvg/SVG/settings/DataUsage.tsx +17 -17
  442. package/iconsvg/SVG/settings/MarketResearch.tsx +17 -17
  443. package/iconsvg/SVG/settings/Newsletter.tsx +17 -17
  444. package/iconsvg/SVG/settings/RemoveEye.tsx +17 -17
  445. package/iconsvg/SVG/settings/RemoveEyeOff.tsx +17 -17
  446. package/iconsvg/SVG/settings/Security.tsx +17 -17
  447. package/iconsvg/SVG/settings/Warning.tsx +17 -17
  448. package/iconsvg/SVG/slider/360.tsx +23 -23
  449. package/iconsvg/SVG/slider/360New.tsx +20 -20
  450. package/iconsvg/SVG/slider/Checked.tsx +19 -19
  451. package/iconsvg/SVG/slider/DiscountRibbon.tsx +51 -51
  452. package/iconsvg/SVG/slider/DiscountRibbonMobile.tsx +47 -47
  453. package/iconsvg/SVG/slider/DiscountRibbonNew.tsx +29 -29
  454. package/iconsvg/SVG/slider/Easy.tsx +19 -19
  455. package/iconsvg/SVG/slider/Fullscreen.tsx +16 -16
  456. package/iconsvg/SVG/slider/FullscreenWindow.tsx +23 -23
  457. package/iconsvg/SVG/slider/Safe.tsx +19 -19
  458. package/iconsvg/SVG/slider/ToBuy.tsx +19 -19
  459. package/iconsvg/SVG/slider/YoutubeButton.tsx +26 -26
  460. package/iconsvg/SVG/slider/ZoomIn.tsx +21 -21
  461. package/iconsvg/SVG/slider/ZoomOut.tsx +21 -21
  462. package/iconsvg/SVG/social/AndroidLogo.tsx +18 -18
  463. package/iconsvg/SVG/social/Apple.tsx +19 -19
  464. package/iconsvg/SVG/social/FacebookF.tsx +19 -19
  465. package/iconsvg/SVG/social/GooglePlusG.tsx +19 -19
  466. package/iconsvg/SVG/social/Instagram.tsx +17 -17
  467. package/iconsvg/SVG/social/Pinterest.tsx +19 -19
  468. package/iconsvg/SVG/social/SharingInterface.tsx +21 -21
  469. package/iconsvg/SVG/social/Twitter.tsx +19 -19
  470. package/iconsvg/SVG/social/Youtube.tsx +19 -19
  471. package/iconsvg/SVG/vehicle/AboIcon.tsx +11 -11
  472. package/iconsvg/SVG/vehicle/Abs.tsx +24 -24
  473. package/iconsvg/SVG/vehicle/AirCond.tsx +34 -34
  474. package/iconsvg/SVG/vehicle/Airbag.tsx +21 -21
  475. package/iconsvg/SVG/vehicle/AuxiliaryHeating.tsx +23 -23
  476. package/iconsvg/SVG/vehicle/Bluetooth.tsx +22 -22
  477. package/iconsvg/SVG/vehicle/BuyIcon.tsx +15 -15
  478. package/iconsvg/SVG/vehicle/CarAvailability.tsx +22 -22
  479. package/iconsvg/SVG/vehicle/CarInspectionCheck.tsx +21 -21
  480. package/iconsvg/SVG/vehicle/CarInspectionCross.tsx +21 -21
  481. package/iconsvg/SVG/vehicle/CheckoutChecked.tsx +15 -15
  482. package/iconsvg/SVG/vehicle/Co2.tsx +24 -24
  483. package/iconsvg/SVG/vehicle/CruiseControl.tsx +25 -25
  484. package/iconsvg/SVG/vehicle/Date.tsx +21 -21
  485. package/iconsvg/SVG/vehicle/Delivery.tsx +12 -12
  486. package/iconsvg/SVG/vehicle/Diesel.tsx +28 -28
  487. package/iconsvg/SVG/vehicle/Display.tsx +25 -25
  488. package/iconsvg/SVG/vehicle/Done.tsx +11 -11
  489. package/iconsvg/SVG/vehicle/Door.tsx +19 -19
  490. package/iconsvg/SVG/vehicle/DoubleDone.tsx +18 -18
  491. package/iconsvg/SVG/vehicle/EditIcon.tsx +11 -11
  492. package/iconsvg/SVG/vehicle/EmergencyBrakeAssistant.tsx +27 -27
  493. package/iconsvg/SVG/vehicle/Eps.tsx +24 -24
  494. package/iconsvg/SVG/vehicle/Esp.tsx +24 -24
  495. package/iconsvg/SVG/vehicle/FinancingIcon.tsx +20 -20
  496. package/iconsvg/SVG/vehicle/FuelConsumption.tsx +20 -20
  497. package/iconsvg/SVG/vehicle/Fueling.tsx +22 -22
  498. package/iconsvg/SVG/vehicle/FullDrive.tsx +24 -24
  499. package/iconsvg/SVG/vehicle/GasElectric.tsx +28 -28
  500. package/iconsvg/SVG/vehicle/HandsFreePhoneSystem.tsx +24 -24
  501. package/iconsvg/SVG/vehicle/Kw.tsx +23 -23
  502. package/iconsvg/SVG/vehicle/LastCrawledAt.tsx +22 -22
  503. package/iconsvg/SVG/vehicle/LeasingIcon.tsx +14 -14
  504. package/iconsvg/SVG/vehicle/Led.tsx +24 -24
  505. package/iconsvg/SVG/vehicle/LightSensor.tsx +22 -22
  506. package/iconsvg/SVG/vehicle/LinkAlternative.tsx +15 -15
  507. package/iconsvg/SVG/vehicle/Location.tsx +17 -17
  508. package/iconsvg/SVG/vehicle/MinusIcon.tsx +11 -11
  509. package/iconsvg/SVG/vehicle/Mirror.tsx +19 -19
  510. package/iconsvg/SVG/vehicle/Navigation.tsx +27 -27
  511. package/iconsvg/SVG/vehicle/NewCar.tsx +21 -21
  512. package/iconsvg/SVG/vehicle/NoImage.tsx +17 -17
  513. package/iconsvg/SVG/vehicle/Owner.tsx +18 -18
  514. package/iconsvg/SVG/vehicle/PanoramicRoof.tsx +23 -23
  515. package/iconsvg/SVG/vehicle/ParkingAssistants.tsx +24 -24
  516. package/iconsvg/SVG/vehicle/PickYourself.tsx +18 -18
  517. package/iconsvg/SVG/vehicle/PlusIcon.tsx +11 -11
  518. package/iconsvg/SVG/vehicle/Power.tsx +21 -21
  519. package/iconsvg/SVG/vehicle/Ps.tsx +19 -19
  520. package/iconsvg/SVG/vehicle/Question.tsx +24 -24
  521. package/iconsvg/SVG/vehicle/Seats.tsx +21 -21
  522. package/iconsvg/SVG/vehicle/SeatsHeating.tsx +26 -26
  523. package/iconsvg/SVG/vehicle/SelectorGearboxAutomatic.tsx +24 -24
  524. package/iconsvg/SVG/vehicle/SelectorGearboxManualShift.tsx +19 -19
  525. package/iconsvg/SVG/vehicle/SelectorGearboxOther.tsx +24 -24
  526. package/iconsvg/SVG/vehicle/SelectorGearboxSemiAutomatic.tsx +30 -30
  527. package/iconsvg/SVG/vehicle/SelectorInteriorTypeAlcantara.tsx +225 -225
  528. package/iconsvg/SVG/vehicle/SelectorInteriorTypeFabric.tsx +29 -29
  529. package/iconsvg/SVG/vehicle/SelectorInteriorTypeFullLeather.tsx +29 -29
  530. package/iconsvg/SVG/vehicle/SelectorInteriorTypeOther.tsx +26 -26
  531. package/iconsvg/SVG/vehicle/SelectorInteriorTypePartLeather.tsx +142 -142
  532. package/iconsvg/SVG/vehicle/SelectorInteriorTypeSyntheticLeather.tsx +27 -27
  533. package/iconsvg/SVG/vehicle/SelectorInteriorTypeVelours.tsx +39 -39
  534. package/iconsvg/SVG/vehicle/Shield.tsx +39 -39
  535. package/iconsvg/SVG/vehicle/Speedometer.tsx +17 -17
  536. package/iconsvg/SVG/vehicle/StartStopSystem.tsx +30 -30
  537. package/iconsvg/SVG/vehicle/Stop.tsx +25 -25
  538. package/iconsvg/SVG/vehicle/TickMark.tsx +21 -21
  539. package/iconsvg/SVG/vehicle/TrafficSignRecognition.tsx +29 -29
  540. package/iconsvg/SVG/vehicle/TrailerCoupling.tsx +24 -24
  541. package/iconsvg/SVG/vehicle/Transmission.tsx +27 -27
  542. package/iconsvg/SVG/vehicle/Wheel.tsx +43 -43
  543. package/iconsvg/SVG/vehicle/Wipers.tsx +22 -22
  544. package/iconsvg/SVG/vehicle/Wrench.tsx +17 -17
  545. package/iconsvg/index.ts +7 -7
  546. package/index.ts +18 -18
  547. package/locales/de/autobahn.json +676 -671
  548. package/locales/en/autobahn.json +676 -671
  549. package/locales/legacy/SearchDetailedPage.ts +205 -205
  550. package/locales/legacy/cbd.ts +719 -719
  551. package/locales/legacy/common.ts +109 -109
  552. package/locales/legacy/data.ts +1118 -1118
  553. package/locales/legacy/priceRating.ts +10 -10
  554. package/locales/legacy/sortingOptions.ts +21 -21
  555. package/media/images/raiting-stars-min.svg +7 -7
  556. package/media/images/refresh-button.svg +49 -49
  557. package/media/images/user-icon.svg +16 -16
  558. package/media/svg/infoBlocks/whyAutodeIconSet-F.svg +9 -9
  559. package/media/svg/infoBlocks/whyAutodeIconSet-G.svg +8 -8
  560. package/media/svg/infoBlocks/whyAutodeIconSet-Q.svg +6 -6
  561. package/media/svg/infoBlocks/whyAutodeIconSet-R.svg +9 -9
  562. package/media/svg/usp/icon1.svg +16 -16
  563. package/media/svg/usp/icon2.svg +13 -13
  564. package/media/svg/usp/icon3.svg +10 -10
  565. package/media/svg/usp/icon4.svg +14 -14
  566. package/package.json +30 -30
  567. package/schemes/AggregationScheme.ts +73 -73
  568. package/searchFilters/filterOptions.ts +119 -119
  569. package/searchFilters/filterProps.ts +35 -35
  570. package/searchFilters/index.ts +15 -15
  571. package/theme/autobahn.css +25 -25
  572. package/theme/colors_and_type.css +113 -113
  573. package/theme/md3.css +2045 -2034
  574. package/types/types.ts +373 -373
  575. package/types.ts +8 -8
  576. package/ui/Accordion.tsx +134 -134
  577. package/ui/Button.tsx +62 -62
  578. package/ui/CardCarousel.tsx +133 -133
  579. package/ui/Chip.tsx +29 -29
  580. package/ui/DatePicker.tsx +145 -145
  581. package/ui/Dropdown.tsx +205 -205
  582. package/ui/FileUpload.tsx +154 -154
  583. package/ui/FormCheckbox.tsx +79 -79
  584. package/ui/FormDropdown.tsx +327 -327
  585. package/ui/FormField.tsx +88 -88
  586. package/ui/FormRadio.tsx +93 -93
  587. package/ui/FormRadioGroup.tsx +106 -106
  588. package/ui/Icon.tsx +391 -391
  589. package/ui/IconButton.tsx +44 -44
  590. package/ui/Modal.tsx +187 -187
  591. package/ui/Pagination.tsx +140 -140
  592. package/ui/Price.tsx +25 -25
  593. package/ui/PriceEvalBar.tsx +48 -48
  594. package/ui/SaveChip.tsx +34 -34
  595. package/ui/Segmented.tsx +48 -48
  596. package/ui/Skeleton.tsx +75 -75
  597. package/ui/Spec.tsx +24 -24
  598. package/ui/Stars.tsx +29 -29
  599. package/ui/StatChip.tsx +21 -21
  600. package/ui/Stepper.tsx +106 -106
  601. package/ui/Switch.tsx +65 -65
  602. package/ui/Table.tsx +156 -156
  603. package/ui/Textarea.tsx +58 -58
  604. package/ui/index.ts +88 -88
  605. package/utils/CommonUtils.ts +648 -648
  606. package/utils/DateUtils.ts +101 -101
  607. package/utils/index.ts +74 -74
  608. package/utils/power.ts +11 -11
  609. package/utils/query.ts +21 -21
  610. package/vdp/FinanceCalculator.tsx +465 -465
  611. package/vdp/VdpModules.tsx +1490 -1490
  612. package/vdp/VdpViewer.tsx +209 -209
  613. package/vdp/index.ts +75 -75
  614. package/vdp/types.ts +197 -197
  615. package/vehiclesProps/cbdSelectors.ts +117 -117
  616. package/vehiclesProps/decoratedLightProps.tsx +572 -572
  617. package/vehiclesProps/decoratedProps.tsx +1746 -1746
  618. package/vehiclesProps/equipment.ts +129 -129
  619. package/vehiclesProps/vehicleDetails.ts +428 -428
  620. package/widgets/SearchBox.tsx +256 -256
  621. package/widgets/index.ts +5 -5
package/theme/md3.css CHANGED
@@ -1,2034 +1,2045 @@
1
- /* ==========================================================================
2
- AUTOBAHN — scoped port of docs/redesign/design-source/ui_kits/website/md3.css
3
- --------------------------------------------------------------------------
4
- Every selector is nested under `.md3` (the design's `:root` token block is
5
- emitted as `.md3 {...}`) so the utility classes (.mbtn/.mcard/.mfield/.chip/
6
- .statchip/.segmented/.num/.md-x ...) and CSS vars (--md-/--autode- prefixes)
7
- only apply inside a `.md3` subtree and cannot bleed into existing fe-main styles.
8
- The responsive layers (1024/980/900/820/600px) are preserved. The Google-
9
- Fonts @import was removed here and centralised in ./autobahn.css.
10
- Loaded globally via source/App.global.styl -> ./autobahn.css.
11
- ADDITIVE ONLY — do not retheme legacy components.
12
- ==========================================================================
13
-
14
- auto.de — DESIGN SYSTEM · "Autobahn"
15
- A custom, brand-led system on MD3 bones (tokens, spacing, elevation,
16
- responsive discipline) with a distinct auto.de identity:
17
- · auto.de Blau primary · Signal-Cyan accent (from the logo swoosh)
18
- · Schibsted Grotesk (display) + Hanken Grotesk (text)
19
- · deal-green for price/savings · defined motion
20
- This file is the single source of truth the UI kit is built from.
21
- ========================================================================== */
22
-
23
- .md3 {
24
- /* ---- Brand ---- */
25
- --autode-blau: #0B53CC; /* auto.de Blau — primary, used with intent */
26
- --autode-blau-strong: #0A47AE; /* hover / pressed */
27
- --autode-cyan: #16B8E8; /* Signal-Cyan accent (logo swoosh) */
28
- --autode-swoosh: linear-gradient(90deg,#0B53CC 0%,#1E7BDA 55%,#16B8E8 100%); /* @kind color */
29
-
30
- /* ---- MD3 tonal roles (mapped to the brand) ---- */
31
- --md-primary: var(--autode-blau);
32
- --md-on-primary: #FFFFFF;
33
- --md-primary-container: #DBE4FF;
34
- --md-on-primary-container:#001A45;
35
-
36
- /* accent (cyan) roles — highlights, focus, on-dark links */
37
- --md-accent: var(--autode-cyan);
38
- --md-accent-container: #C6EEFB;
39
- --md-on-accent-container:#04323F;
40
-
41
- --md-secondary-container:#E7E9F1;
42
- --md-on-secondary-container:#3A4150;
43
-
44
- /* price-rating + deal accent (green) */
45
- --md-good: #0F7B43;
46
- --md-good-container: #C8EFCF;
47
- --md-on-good-container: #04391F;
48
- --md-warn-container: #FCE3B4;
49
- --md-on-warn-container: #4A3204;
50
- --md-error: #BA1A1A;
51
-
52
- /* surfaces (neutral, a hair cooler to sit under the blue) */
53
- --md-surface: #FBFBFE;
54
- --md-surface-dim: #DAD9E0;
55
- --md-surface-bright: #FBFBFE;
56
- --md-sc-lowest: #FFFFFF;
57
- --md-sc-low: #F4F5FA;
58
- --md-sc: #EEEFF5;
59
- --md-sc-high: #E8E9F1;
60
- --md-sc-highest: #E2E3EC;
61
-
62
- --md-on-surface: #1A1B22;
63
- --md-on-surface-variant: #44464F;
64
- --md-outline: #74767F;
65
- --md-outline-variant: #C5C6D2;
66
-
67
- --md-inverse-surface: #2E2F36;
68
- --md-inverse-on-surface: #F1F0F6;
69
-
70
- /* elevation (soft, tonal) */
71
- --md-e1: 0 1px 2px rgba(16,22,42,.10), 0 1px 3px rgba(16,22,42,.06);
72
- --md-e2: 0 2px 6px rgba(16,22,42,.10), 0 1px 2px rgba(16,22,42,.10);
73
- --md-e3: 0 8px 20px rgba(16,22,42,.12), 0 2px 6px rgba(16,22,42,.08);
74
-
75
- /* shape */
76
- --md-r-xs: 8px;
77
- --md-r-sm: 12px;
78
- --md-r-md: 16px;
79
- --md-r-lg: 24px;
80
- --md-r-xl: 28px;
81
- --md-r-full: 999px;
82
-
83
- /* type */
84
- --md-font: 'Hanken Grotesk', system-ui, sans-serif;
85
- --md-font-display: 'Schibsted Grotesk', 'Hanken Grotesk', system-ui, sans-serif;
86
- --md-font-hero: var(--md-font-display); /* hero uses the system display face, weight 800 */
87
-
88
- /* motion */
89
- --ease-standard: cubic-bezier(.2,0,0,1); /* @kind other */
90
- --ease-emphasized: cubic-bezier(.3,0,0,1); /* @kind other */
91
- --dur-1: 120ms; /* @kind other */
92
- --dur-2: 200ms; /* @kind other */
93
- --dur-3: 320ms; /* @kind other */
94
- }
95
-
96
- /* ---------- base ---------- */
97
- .md3 { font-family: var(--md-font); color: var(--md-on-surface); background: var(--md-surface);
98
- -webkit-font-smoothing: antialiased; }
99
- .md3 *, .md3 *::before, .md3 *::after { box-sizing: border-box; }
100
- .md3 ::selection { background: var(--md-primary-container); }
101
-
102
- /* type scale — display family for headlines, text family for UI */
103
- .md3 .md-display { font-family: var(--md-font-display); font-size: 46px; font-weight: 700; line-height: 1.04; letter-spacing: -1px; }
104
- .md3 .md-headline { font-family: var(--md-font-display); font-size: 29px; font-weight: 700; line-height: 1.14; letter-spacing: -.4px; }
105
- .md3 .md-headline-sm{ font-family: var(--md-font-display); font-size: 22px; font-weight: 600; line-height: 1.2; letter-spacing: -.2px; }
106
- .md3 .md-title { font-size: 17px; font-weight: 600; line-height: 1.3; }
107
- .md3 .md-title-sm { font-size: 14px; font-weight: 600; line-height: 1.35; letter-spacing: .1px; }
108
- .md3 .md-body { font-size: 14px; font-weight: 400; line-height: 1.5; color: var(--md-on-surface-variant); }
109
- .md3 .md-body-sm { font-size: 12.5px; font-weight: 400; line-height: 1.45; color: var(--md-on-surface-variant); }
110
- .md3 .md-label { font-size: 13px; font-weight: 500; letter-spacing: .1px; }
111
- .md3 .md-label-sm { font-size: 11px; font-weight: 600; letter-spacing: .4px; color: var(--md-on-surface-variant); }
112
- /* tabular figures for prices & specs */
113
- .md3 .num { font-family: var(--md-font-display); font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; }
114
-
115
- /* ---------- buttons (pill) ---------- */
116
- .md3 .mbtn { font-family: var(--md-font); font-size: 14px; font-weight: 600; letter-spacing: .1px;
117
- height: 40px; padding: 0 24px; border-radius: var(--md-r-full); border: 0; cursor: pointer;
118
- display: inline-flex; align-items: center; justify-content: center; gap: 8px; white-space: nowrap;
119
- transition: box-shadow var(--dur-1) var(--ease-standard), background var(--dur-1) var(--ease-standard),
120
- color var(--dur-1) var(--ease-standard), transform var(--dur-1) var(--ease-standard); }
121
- .md3 .mbtn:active { transform: translateY(1px); }
122
- .md3 .mbtn .lucide { width: 18px; height: 18px; }
123
- .md3 .mbtn--filled { background: var(--md-primary); color: var(--md-on-primary); }
124
- .md3 .mbtn--filled:hover { box-shadow: var(--md-e2); background: var(--autode-blau-strong); }
125
- .md3 .mbtn--tonal { background: var(--md-primary-container); color: var(--md-on-primary-container); }
126
- .md3 .mbtn--tonal:hover { box-shadow: var(--md-e1); }
127
- .md3 .mbtn--outlined { background: transparent; color: var(--md-primary); box-shadow: inset 0 0 0 1px var(--md-outline-variant); }
128
- .md3 .mbtn--outlined:hover { background: rgba(11,83,204,.06); }
129
- .md3 .mbtn--text { background: transparent; color: var(--md-primary); padding: 0 12px; }
130
- .md3 .mbtn--text:hover { background: rgba(11,83,204,.06); }
131
- .md3 .mbtn--sm { height: 34px; padding: 0 16px; font-size: 13px; }
132
- .md3 .mbtn--lg { height: 48px; padding: 0 30px; font-size: 15px; }
133
- .md3 .mbtn--block { width: 100%; }
134
-
135
- /* icon button */
136
- .md3 .icon-btn { width: 40px; height: 40px; border-radius: var(--md-r-full); border: 0; cursor: pointer;
137
- background: transparent; color: var(--md-on-surface-variant); display: inline-flex; align-items: center;
138
- justify-content: center; transition: background .15s; }
139
- .md3 .icon-btn:hover { background: var(--md-sc-high); }
140
- .md3 .icon-btn--filled { background: rgba(255,255,255,.9); box-shadow: var(--md-e1); color: var(--md-on-surface); }
141
- .md3 .icon-btn .lucide { width: 20px; height: 20px; }
142
-
143
- /* ---------- chips (MD3 assist / filter) ---------- */
144
- .md3 .chip { height: 38px; padding: 0 16px; border-radius: 10px; cursor: pointer;
145
- display: inline-flex; align-items: center; gap: 7px; font-size: 14px; font-weight: 500; line-height: 1;
146
- background: var(--md-surface); color: var(--md-on-surface-variant);
147
- border: 1px solid var(--md-outline-variant); box-shadow: none;
148
- transition: background .15s, border-color .15s, color .15s; white-space: nowrap; }
149
- .md3 .chip .lucide { width: 16px; height: 16px; color: var(--md-primary); }
150
- .md3 .chip:hover { background: var(--md-sc); border-color: var(--md-outline); }
151
- .md3 .chip--selected { background: var(--md-secondary-container); color: var(--md-on-secondary-container); border-color: transparent; }
152
- .md3 .chip--selected .lucide { color: currentColor; }
153
- .md3 .chip--filter.chip--selected { background: var(--md-primary-container); color: var(--md-on-primary-container); border-color: transparent; }
154
- /* list-card equipment tags: compact, non-interactive info chips (design CarCard.jsx — h24/11.5px),
155
- NOT the 38px tappable filter-chip the base .chip is. */
156
- .md3 .listcard-chips .chip { height: 24px; padding: 0 10px; font-size: 11.5px; border-radius: 8px; cursor: default; }
157
- .md3 .listcard-chips .chip:hover { background: var(--md-surface); border-color: var(--md-outline-variant); }
158
-
159
- /* status / rating chip (no CTA) */
160
- .md3 .statchip { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 10px;
161
- border-radius: var(--md-r-xs); font-size: 12px; font-weight: 600; }
162
- .md3 .statchip--good { background: var(--md-good-container); color: var(--md-on-good-container); }
163
- .md3 .statchip--warn { background: var(--md-warn-container); color: var(--md-on-warn-container); }
164
- .md3 .statchip .lucide { width: 14px; height: 14px; }
165
-
166
- /* small image label (views, photo count) */
167
- .md3 .imglabel { display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 10px;
168
- border-radius: var(--md-r-full); background: rgba(0,0,0,.55); color: #fff; font-size: 12px; font-weight: 500; backdrop-filter: blur(2px); }
169
- .md3 .imglabel .lucide { width: 14px; height: 14px; }
170
-
171
- /* ---------- cards ---------- */
172
- .md3 .mcard { background: var(--md-sc-lowest); border-radius: var(--md-r-md); border: 1px solid var(--md-outline-variant);
173
- overflow: hidden; transition: box-shadow var(--dur-2) var(--ease-standard), border-color var(--dur-2) var(--ease-standard), transform var(--dur-2) var(--ease-standard); }
174
- .md3 .mcard--elevated { border: 0; box-shadow: var(--md-e1); }
175
- .md3 .mcard--interactive { cursor: pointer; }
176
- .md3 .mcard--interactive:hover { box-shadow: var(--md-e3); border-color: transparent; transform: translateY(-3px); }
177
- .md3 .mcard--filled { background: var(--md-sc-low); border: 0; }
178
-
179
- /* ---------- search bar ---------- */
180
- .md3 .msearch { display: flex; align-items: center; gap: 12px; height: 56px; padding: 0 18px;
181
- border-radius: var(--md-r-full); background: var(--md-sc-high); color: var(--md-on-surface); }
182
- .md3 .msearch input { border: 0; outline: 0; background: transparent; flex: 1; font: 400 16px var(--md-font); color: inherit; min-width: 0; }
183
- .md3 .msearch .lucide { width: 22px; height: 22px; color: var(--md-on-surface-variant); flex: none; }
184
-
185
- /* ---------- text field (outlined, MD3) ---------- */
186
- .md3 .mfield { position: relative; display: flex; align-items: center; gap: 10px; height: 48px; padding: 0 14px;
187
- border-radius: var(--md-r-xs); background: transparent; box-shadow: inset 0 0 0 1px var(--md-outline-variant);
188
- font-size: 14px; color: var(--md-on-surface); transition: box-shadow .15s; }
189
- .md3 .mfield:focus-within { box-shadow: inset 0 0 0 2px var(--md-accent); }
190
- .md3 .mfield select, .md3 .mfield input { border: 0; outline: 0; background: transparent; flex: 1; font: inherit; color: inherit; min-width: 0; text-overflow: ellipsis; }
191
- .md3 .mfield select { -webkit-appearance: none; appearance: none; cursor: pointer; }
192
- .md3 .mfield .lucide { width: 20px; height: 20px; color: var(--md-on-surface-variant); flex: none; }
193
- .md3 .mfield .lucide:last-child { margin-left: auto; }
194
- /* compact field — dense Detailsuche range/value inputs (von/bis, monthly rate). */
195
- .md3 .mfield--sm { height: 44px; padding: 0 12px; gap: 8px; font-size: 14px; }
196
- .md3 .mfield--sm input { font-variant-numeric: tabular-nums; }
197
- /* von/bis range pair (Detailsuche, no slider). */
198
- .md3 .ds-range { display: flex; align-items: center; gap: 10px; }
199
- .md3 .ds-range-dash { flex: none; color: var(--md-on-surface-variant); }
200
-
201
- /* labelled form field (FormField — label + outlined input + error). */
202
- .md3 .mfield-group { display: flex; flex-direction: column; gap: 6px; }
203
- .md3 .mfield-label { color: var(--md-on-surface-variant); font-weight: 600; }
204
- .md3 .mfield--error { box-shadow: inset 0 0 0 2px var(--md-error); }
205
- .md3 .mfield-eye { display: flex; align-items: center; justify-content: center; border: 0; background: none;
206
- cursor: pointer; color: var(--md-on-surface-variant); padding: 0 2px; flex: none; }
207
- .md3 .mfield-error-text { color: var(--md-error); font-size: 12px; line-height: 1.35; }
208
-
209
- /* ---------- Auth (Anmelden / Registrierung / Passwort) ---------- */
210
- .md3 .auth-main { padding: 36px 24px 80px; }
211
- .md3 .auth-card { max-width: 940px; margin: 0 auto; display: grid; grid-template-columns: 1fr;
212
- background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
213
- border-radius: var(--md-r-lg, 20px); overflow: hidden; box-shadow: var(--md-e1, 0 2px 10px rgba(0,0,0,.06)); }
214
- .md3 .auth-card--split { grid-template-columns: 1.08fr .92fr; }
215
- .md3 .auth-formside { padding: 34px 38px; min-width: 0; }
216
- .md3 .auth-aside { padding: 38px; background: var(--md-primary); color: #fff; display: flex;
217
- flex-direction: column; justify-content: center; }
218
- .md3 .auth-aside h4 { font: 700 21px var(--md-font-display, var(--md-font)); margin: 0 0 20px; }
219
- .md3 .auth-aside ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; }
220
- .md3 .auth-aside li { display: flex; gap: 12px; align-items: flex-start; font-size: 15px; line-height: 1.4; }
221
- .md3 .auth-aside li svg { flex: none; margin-top: 1px; opacity: .95; }
222
- .md3 .auth-tabs { display: flex; gap: 6px; margin-bottom: 24px; border-bottom: 1px solid var(--md-outline-variant); }
223
- .md3 .auth-tab { padding: 10px 14px; font: 600 15px var(--md-font); color: var(--md-on-surface-variant);
224
- text-decoration: none; border-bottom: 2px solid transparent; margin-bottom: -1px; }
225
- .md3 .auth-tab:hover { color: var(--md-on-surface); }
226
- .md3 .auth-tab.is-active { color: var(--md-primary); border-bottom-color: var(--md-primary); }
227
- .md3 .auth-sub { color: var(--md-on-surface-variant); font-size: 14px; line-height: 1.5; margin: 0 0 4px; }
228
- .md3 .auth-form { display: flex; flex-direction: column; gap: 18px; }
229
- .md3 .auth-error { background: var(--md-error-container, #fdeceb); color: var(--md-error);
230
- border-radius: var(--md-r-sm, 12px); padding: 10px 14px; font-size: 14px; }
231
- .md3 .auth-row-between { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
232
- .md3 .auth-link { color: var(--md-primary); font-weight: 600; text-decoration: none; font-size: 14px; cursor: pointer; }
233
- .md3 .auth-link:hover { text-decoration: underline; }
234
- .md3 .auth-foot { margin-top: 22px; font-size: 14px; color: var(--md-on-surface-variant); line-height: 1.5; }
235
- .md3 .auth-check { display: flex; gap: 10px; align-items: flex-start; font-size: 13px; line-height: 1.5; color: var(--md-on-surface); cursor: pointer; }
236
- .md3 .auth-check input { margin-top: 2px; accent-color: var(--md-primary); width: 18px; height: 18px; flex: none; }
237
- .md3 .auth-loading { display: flex; justify-content: center; align-items: center; min-height: 200px; }
238
- .md3 .auth-spinner { width: 32px; height: 32px; border-radius: 50%; border: 3px solid var(--md-outline-variant);
239
- border-top-color: var(--md-primary); animation: auth-spin .8s linear infinite; }
240
- @keyframes auth-spin { to { transform: rotate(360deg); } }
241
- @media (max-width: 860px) {
242
- .md3 .auth-card--split { grid-template-columns: 1fr; }
243
- .md3 .auth-aside { display: none; }
244
- .md3 .auth-formside { padding: 26px 22px; }
245
- }
246
-
247
- /* ---------- Checkout (md3 chrome — header · stepper · next button) ---------- */
248
- .md3 .co-page { background: var(--md-sc, #f4f5f7); min-height: 100vh; }
249
- .md3 .co-header { background: var(--md-sc-lowest, #fff); border-bottom: 1px solid var(--md-outline-variant);
250
- position: sticky; top: 0; z-index: 30; }
251
- .md3 .co-header-row { display: flex; align-items: center; gap: 16px; padding: 12px 24px; min-height: 64px; }
252
- .md3 .co-back { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; flex: none;
253
- border: 0; border-radius: 50%; background: none; cursor: pointer; color: var(--md-on-surface); }
254
- .md3 .co-back:hover { background: var(--md-sc); }
255
- .md3 .co-logo { display: flex; align-items: center; text-decoration: none; }
256
- .md3 .co-logo img { height: 36px; display: block; }
257
- .md3 .co-header-car { display: flex; align-items: center; gap: 16px; margin-left: auto; }
258
- .md3 .co-header-price { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.1; }
259
- .md3 .co-price-amount { font: 700 20px var(--md-font); color: var(--md-on-surface); white-space: nowrap; }
260
- .md3 .co-price-unit { font-size: 13px; font-weight: 600; color: var(--md-on-surface-variant); }
261
- .md3 .co-price-vat { font-size: 11px; color: var(--md-on-surface-variant); }
262
- .md3 .co-header-info { display: flex; flex-direction: column; text-align: right; line-height: 1.2; }
263
- .md3 .co-car-model { font-weight: 600; font-size: 14px; color: var(--md-on-surface); }
264
- .md3 .co-car-sub { font-size: 12px; color: var(--md-on-surface-variant); }
265
- .md3 .co-car-img { width: 64px; height: 44px; object-fit: contain; border-radius: var(--md-r-sm, 10px); }
266
- /* stepper */
267
- .md3 .co-stepper { display: flex; align-items: center; gap: 0; max-width: 880px; margin: 28px auto 4px;
268
- padding: 0 24px; overflow-x: auto; }
269
- .md3 .co-step { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; color: var(--md-on-surface-variant); }
270
- .md3 .co-step-dot { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; flex: none;
271
- border-radius: 50%; border: 2px solid var(--md-outline-variant); font: 700 13px var(--md-font);
272
- background: var(--md-sc-lowest, #fff); }
273
- .md3 .co-step-label { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
274
- .md3 .co-step-bar { flex: 1; height: 2px; min-width: 16px; background: var(--md-outline-variant); margin: 0 10px; }
275
- .md3 .co-step.is-active { color: var(--md-primary); }
276
- .md3 .co-step.is-active .co-step-dot { border-color: var(--md-primary); color: var(--md-primary); }
277
- .md3 .co-step.is-done { color: var(--md-on-surface); }
278
- .md3 .co-step.is-done .co-step-dot { border-color: var(--md-primary); background: var(--md-primary); color: #fff; }
279
- .md3 .co-step.is-done .co-step-bar { background: var(--md-primary); }
280
- /* vertical left rail (desktop) — mirrors the legacy fixed 376px stepper, md3 skin.
281
- Each step: number/check dot · title · "x min" · chevron; active = primary-container
282
- pill rounded on the right; done = filled primary dot. */
283
- .md3 .co-rail { position: fixed; top: 65px; bottom: 0; left: 0; width: 376px; box-sizing: border-box;
284
- background: var(--md-sc-lowest, #fff); box-shadow: 2px 0 8px rgba(0,0,0,.08); z-index: 2;
285
- padding: 28px 16px 28px 0; display: flex; flex-direction: column; gap: 4px; overflow-y: auto; }
286
- .md3 .co-rail-step { display: flex; align-items: center; gap: 16px; width: 100%; border: 0; background: none;
287
- cursor: pointer; text-align: left; padding: 14px 18px 14px 28px; border-radius: 0 999px 999px 0;
288
- color: var(--md-on-surface-variant); }
289
- .md3 .co-rail-step:hover:not(:disabled) { background: var(--md-sc); }
290
- .md3 .co-rail-step:disabled { cursor: default; }
291
- .md3 .co-rail-dot { position: relative; display: flex; align-items: center; justify-content: center; width: 44px; height: 44px;
292
- flex: none; border-radius: 50%; border: 2px solid var(--md-outline-variant); font: 700 17px var(--md-font);
293
- background: var(--md-sc-lowest, #fff); color: var(--md-on-surface-variant); }
294
- /* connector line so the step sequence reads as a progression (like the legacy stepper).
295
- Drawn downward from each dot to the next; turns primary once the step is done. */
296
- .md3 .co-rail-step:not(:last-child) .co-rail-dot::after { content: ''; position: absolute; top: calc(100% + 2px);
297
- left: 50%; transform: translateX(-50%); width: 2px; height: 30px; background: var(--md-outline-variant); }
298
- .md3 .co-rail-step.is-done .co-rail-dot::after { background: var(--md-primary); }
299
- .md3 .co-rail-body { display: flex; flex-direction: column; min-width: 0; }
300
- .md3 .co-rail-label { font: 700 18px var(--md-font); color: var(--md-on-surface); }
301
- .md3 .co-rail-min { font-size: 13px; color: var(--md-on-surface-variant); margin-top: 2px; }
302
- .md3 .co-rail-chev { margin-left: auto; color: var(--md-on-surface-variant); flex: none; }
303
- .md3 .co-rail-step.is-active { background: var(--md-primary-container); }
304
- .md3 .co-rail-step.is-active .co-rail-dot { border-color: var(--md-primary); color: var(--md-primary); }
305
- .md3 .co-rail-step.is-active .co-rail-label { color: var(--md-primary); }
306
- .md3 .co-rail-step.is-done .co-rail-dot { border-color: var(--md-primary); background: var(--md-primary); color: #fff; }
307
- /* brand row at the rail top (wide desktop, where the top header is hidden) */
308
- .md3 .co-rail-brand { display: flex; align-items: center; gap: 10px; padding: 0 18px 22px 16px; }
309
- @media (max-width: 1279px) { .md3 .co-rail-brand { display: none; } }
310
- /* completed steps read as "done" in green (active stays primary) */
311
- .md3 .co-rail-step.is-done .co-rail-dot { border-color: var(--md-good); background: var(--md-good); }
312
- .md3 .co-rail-step.is-done .co-rail-dot::after { background: var(--md-good); }
313
- /* summary aside (right rail, desktop ≥1280) — single car + offer + price + trust panel */
314
- .md3 .co-aside { position: fixed; top: 65px; bottom: 0; right: 0; width: 348px; box-sizing: border-box;
315
- padding: 40px 24px; overflow-y: auto; z-index: 1; }
316
- .md3 .co-aside-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
317
- border-radius: var(--md-r-lg, 18px); padding: 18px; box-shadow: var(--md-e1); position: sticky; top: 0; }
318
- .md3 .co-aside-img { display: block; width: 100%; aspect-ratio: 16 / 10; height: auto; object-fit: cover;
319
- border-radius: var(--md-r-md, 12px); background: var(--md-sc); margin-bottom: 16px; }
320
- .md3 .co-aside-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
321
- .md3 .co-aside-title { min-width: 0; }
322
- .md3 .co-aside-name { font: 700 17px var(--md-font); color: var(--md-on-surface); line-height: 1.25; }
323
- .md3 .co-aside-sub { font-size: 12.5px; color: var(--md-on-surface-variant); margin-top: 3px; line-height: 1.35; }
324
- .md3 .co-aside-offer { flex: none; padding: 4px 10px; border-radius: 999px;
325
- background: var(--md-primary-container); color: var(--md-primary); font-size: 11.5px; font-weight: 700; white-space: nowrap; }
326
- .md3 .co-aside-price { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--md-outline-variant); }
327
- .md3 .co-aside-plabel { display: block; font-size: 12px; color: var(--md-on-surface-variant); margin-bottom: 2px; }
328
- .md3 .co-aside-prow { display: flex; align-items: baseline; gap: 4px; }
329
- .md3 .co-aside-amount { font: 800 26px var(--md-font); color: var(--md-primary); }
330
- .md3 .co-aside-unit { font-size: 14px; font-weight: 600; color: var(--md-on-surface-variant); }
331
- .md3 .co-aside-vat { display: block; font-size: 11.5px; color: var(--md-on-surface-variant); margin-top: 4px; }
332
- .md3 .co-trust { list-style: none; margin: 16px 0 0; padding: 16px 0 0; border-top: 1px solid var(--md-outline-variant);
333
- display: flex; flex-direction: column; gap: 11px; }
334
- .md3 .co-trust li { display: flex; align-items: center; gap: 9px; font-size: 12.5px; color: var(--md-on-surface); }
335
- .md3 .co-trust svg { color: var(--md-good); flex: none; }
336
- @media (max-width: 1279px) { .md3 .co-aside { display: none; } }
337
- /* wide desktop (≥1280): car lives in the aside and brand/back move into the rail, so the
338
- top header is dropped entirely and the rail + aside run from the very top. */
339
- @media (min-width: 1280px) {
340
- .md3 .co-header { display: none; }
341
- .md3 .co-rail { top: 0; }
342
- .md3 .co-aside { top: 0; }
343
- }
344
- /* card-title leading icon */
345
- .md3 .co-card-title { display: flex; align-items: center; gap: 8px; }
346
- .md3 .co-card-ic { color: var(--md-primary); flex: none; }
347
- /* valid field — green ring (matches the --error ring treatment) + trailing green check.
348
- .mfield draws its outline via inset box-shadow, not a CSS border, so colour the ring. */
349
- .md3 .mfield--valid { box-shadow: inset 0 0 0 1.5px var(--md-good); }
350
- .md3 .mfield-ok { display: flex; align-items: center; flex: none; }
351
- .md3 .mfield-ok .lucide { color: var(--md-good); }
352
- /* md3 checkout finance panel (Zahlungsdetails) — replaces the legacy OfferBlock */
353
- .md3 .cf-panel { display: flex; flex-direction: column; gap: 20px; }
354
- .md3 .cf-rate { display: flex; flex-direction: column; gap: 2px; }
355
- .md3 .cf-rate-label { font-size: 13px; color: var(--md-on-surface-variant); }
356
- .md3 .cf-rate-row { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
357
- .md3 .cf-rate-amount { font: 800 30px var(--md-font); color: var(--md-primary); }
358
- .md3 .cf-rate-amount small { font-size: 14px; font-weight: 600; color: var(--md-on-surface-variant); }
359
- .md3 .cf-rate-old { font-size: 13px; color: var(--md-on-surface-variant); text-decoration: line-through; }
360
- .md3 .cf-slider { display: flex; flex-direction: column; gap: 8px; }
361
- .md3 .cf-slider-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
362
- .md3 .cf-slider-val { font-weight: 700; color: var(--md-on-surface); }
363
- .md3 .cf-period { display: flex; flex-direction: column; gap: 10px; }
364
- .md3 .cf-opts { display: flex; flex-direction: column; gap: 12px; }
365
- .md3 .cf-check { display: flex; align-items: center; gap: 10px; font-size: 14px; color: var(--md-on-surface); cursor: pointer; }
366
- .md3 .cf-check input { width: 20px; height: 20px; accent-color: var(--md-primary); cursor: pointer; flex: none; }
367
- .md3 .cf-check-cost { margin-left: auto; font-weight: 700; color: var(--md-on-surface); white-space: nowrap; }
368
- .md3 .cf-details { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; background: none; border: 0;
369
- padding: 0; cursor: pointer; color: var(--md-primary); font: inherit; font-size: 13px; font-weight: 600; }
370
- .md3 .cf-details-ic { color: var(--md-primary); }
371
- /* content + next button */
372
- .md3 .co-content { max-width: 880px; margin: 0 auto; padding: 24px; }
373
- .md3 .co-next { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; margin-top: 28px; }
374
- .md3 .co-error { color: var(--md-error); font-size: 13px; font-weight: 600; }
375
- /* desktop: pin the action bar to the viewport bottom so "Weiter" is always reachable
376
- without scrolling. Negative margins cancel the content padding so the bar spans from
377
- the rail edge to the right edge; it sits above the rail (z below the header). */
378
- @media (min-width: 992px) {
379
- .md3 .co-next {
380
- position: sticky; bottom: 0; z-index: 5;
381
- flex-direction: row; align-items: center; justify-content: flex-end; gap: 16px;
382
- /* margin-top:auto pins the bar to the bottom of the min-height-filled content column,
383
- so its position is identical on every step (no jump on submit). */
384
- margin: auto -48px 0; padding: 16px 48px 20px;
385
- /* fade the page surface up behind the buttons instead of a hard divider bar */
386
- background: linear-gradient(to top, var(--md-surface) 62%, rgba(251, 251, 254, 0));
387
- border-top: 0;
388
- }
389
- .md3 .co-next .co-error { margin-right: auto; }
390
- }
391
- /* checkout step content (md3) */
392
- .md3 .co-form { display: flex; flex-direction: column; gap: 20px; }
393
- .md3 .co-step-title { font: 700 22px var(--md-font-display, var(--md-font)); margin: 0; color: var(--md-on-surface); }
394
- .md3 .co-step-sub { color: var(--md-on-surface-variant); font-size: 14px; margin: 6px 0 0; }
395
- /* the step's leading title + sub form a header band, separated from the cards below. */
396
- .md3 .co-step-title + .co-step-sub { padding-bottom: 18px; border-bottom: 1px solid var(--md-outline-variant); }
397
- /* two cards side-by-side on wide desktop (contact step); stacks when the column narrows. */
398
- .md3 .co-cards-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: start; }
399
- @media (max-width: 1200px) { .md3 .co-cards-2 { grid-template-columns: 1fr; } }
400
- .md3 .co-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
401
- border-radius: var(--md-r-lg, 18px); padding: 22px 24px; }
402
- .md3 .co-card-title { font: 700 16px var(--md-font); margin: 0 0 18px; color: var(--md-on-surface); }
403
- .md3 .co-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 20px; }
404
- .md3 .co-col-2 { grid-column: 1 / -1; }
405
- .md3 .co-phone { grid-column: 1 / -1; display: grid; grid-template-columns: 110px 1fr 1.6fr; gap: 12px; align-items: start; }
406
- .md3 .mfield--disabled { background: var(--md-sc); opacity: .7; }
407
- /* Zahlart — selectable offer cards */
408
- .md3 .co-pay-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
409
- .md3 .co-pay-card { position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 8px;
410
- padding: 20px; text-align: left; cursor: pointer; background: var(--md-sc-lowest, #fff);
411
- border: 1.5px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); color: var(--md-on-surface);
412
- transition: border-color var(--dur-1), background var(--dur-1); }
413
- .md3 .co-pay-card:hover:not(.is-disabled):not(.is-on) { border-color: var(--md-primary); }
414
- .md3 .co-pay-card.is-on { border-color: var(--md-primary); background: var(--md-primary-container); }
415
- .md3 .co-pay-card.is-disabled { opacity: .45; cursor: not-allowed; }
416
- .md3 .co-pay-card svg { color: var(--md-primary); }
417
- .md3 .co-pay-radio { position: absolute; top: 16px; right: 16px; width: 20px; height: 20px; border-radius: 50%;
418
- border: 2px solid var(--md-outline); }
419
- .md3 .co-pay-card.is-on .co-pay-radio { border-color: var(--md-primary); background: radial-gradient(circle, var(--md-primary) 0 5px, transparent 6px); }
420
- .md3 .co-pay-label { font: 700 16px var(--md-font); }
421
- .md3 .co-pay-info { font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.4; }
422
- /* Zahlungsart explanatory block — fills the otherwise-empty step + sets expectations. */
423
- .md3 .co-pay-note { display: flex; align-items: flex-start; gap: 10px; margin-top: 4px; padding: 14px 16px;
424
- background: var(--md-primary-container); border-radius: var(--md-r-md); color: var(--md-on-surface); font-size: 13.5px; line-height: 1.5; }
425
- .md3 .co-pay-note svg { color: var(--md-primary); flex: none; margin-top: 1px; }
426
- .md3 .co-pay-benes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 4px; }
427
- .md3 .co-pay-bene { display: flex; align-items: flex-start; gap: 10px; padding: 14px 16px;
428
- border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-md); background: var(--md-sc-lowest, #fff); }
429
- .md3 .co-pay-bene svg { color: var(--md-good); flex: none; margin-top: 1px; }
430
- .md3 .co-pay-bene b { display: block; font-size: 13.5px; color: var(--md-on-surface); }
431
- .md3 .co-pay-bene span { font-size: 12.5px; color: var(--md-on-surface-variant); line-height: 1.4; }
432
- @media (max-width: 700px) { .md3 .co-pay-benes { grid-template-columns: 1fr; } }
433
- /* Zahldetails — borrower block + accordion */
434
- .md3 .co-borrower-head { font-size: 14px; color: var(--md-on-surface); }
435
- .md3 .co-borrower-role { font-weight: 700; }
436
- .md3 .co-accordion { margin-top: 16px; border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-md, 12px); overflow: hidden; }
437
- .md3 .co-accordion-head { display: flex; align-items: center; justify-content: space-between; width: 100%;
438
- padding: 14px 16px; background: var(--md-sc); border: 0; cursor: pointer; font: 600 15px var(--md-font); color: var(--md-on-surface); }
439
- .md3 .co-accordion-body { padding: 18px 16px; }
440
- /* Zusatzleistungen — warranty/registration/delivery card extras */
441
- .md3 .co-section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
442
- .md3 .co-toggle { display: inline-flex; background: var(--md-sc); border-radius: 999px; padding: 3px; }
443
- .md3 .co-toggle-btn { border: 0; background: none; cursor: pointer; padding: 6px 16px; border-radius: 999px;
444
- font: 600 13px var(--md-font); color: var(--md-on-surface-variant); }
445
- .md3 .co-toggle-btn.is-on { background: var(--md-sc-lowest, #fff); color: var(--md-primary); box-shadow: var(--md-e1, 0 1px 3px rgba(0,0,0,.12)); }
446
- .md3 .co-pay-price { font: 700 15px var(--md-font); color: var(--md-on-surface); }
447
- .md3 .co-pay-list { margin: 4px 0 0; padding-left: 18px; font-size: 12px; color: var(--md-on-surface-variant); line-height: 1.5; }
448
- .md3 .co-pay-check { position: absolute; top: 16px; right: 16px; width: 22px; height: 22px; border-radius: 6px;
449
- border: 2px solid var(--md-outline); display: flex; align-items: center; justify-content: center;
450
- font-size: 14px; font-weight: 700; color: #fff; }
451
- .md3 .co-pay-card.is-on .co-pay-check { background: var(--md-primary); border-color: var(--md-primary); }
452
- .md3 .co-addr-link { display: inline-flex; align-items: center; gap: 5px; margin-top: 6px; color: var(--md-primary);
453
- font-weight: 600; font-size: 13px; cursor: pointer; }
454
-
455
- /* ---------- 404 ---------- */
456
- .md3 .nf-page { padding: 24px 0 64px; }
457
- .md3 .nf-hero { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: center; padding: 48px 24px; }
458
- .md3 .nf-hero-text { display: flex; flex-direction: column; align-items: flex-start; gap: 14px; }
459
- .md3 .nf-eyebrid { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; font-size: 14px;
460
- color: var(--md-on-surface-variant); }
461
- .md3 .nf-code { font: 800 96px/1 var(--md-font-display, var(--md-font)); color: var(--md-primary); letter-spacing: -2px; margin: 0; }
462
- .md3 .nf-sub { font-size: 18px; color: var(--md-on-surface); margin: 0; max-width: 36ch; line-height: 1.5; }
463
- .md3 .nf-search { min-width: 0; }
464
- .md3 .nf-reco { padding: 24px; }
465
- .md3 .nf-reco .md-title { margin-bottom: 16px; }
466
- @media (max-width: 860px) {
467
- .md3 .nf-hero { grid-template-columns: 1fr; gap: 24px; padding: 24px; }
468
- .md3 .nf-code { font-size: 72px; }
469
- }
470
-
471
- /* ---------- shared textarea ---------- */
472
- .md3 .mtextarea { width: 100%; min-height: 96px; padding: 12px 14px; border-radius: var(--md-r-xs, 8px);
473
- border: 0; box-shadow: inset 0 0 0 1px var(--md-outline-variant); background: transparent; resize: vertical;
474
- font: 400 14px/1.5 var(--md-font); color: var(--md-on-surface); }
475
- .md3 .mtextarea:focus { outline: 0; box-shadow: inset 0 0 0 2px var(--md-accent); }
476
-
477
- /* ---------- Impressum ---------- */
478
- .md3 .imp-page { padding: 28px 24px 64px; display: flex; flex-direction: column; gap: 20px; }
479
- .md3 .imp-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
480
- border-radius: var(--md-r-lg, 16px); padding: 24px 28px; }
481
- .md3 .imp-title { font: 700 18px var(--md-font); margin: 0 0 14px; color: var(--md-on-surface);
482
- padding-bottom: 12px; border-bottom: 1px solid var(--md-outline-variant); }
483
- .md3 .imp-text { white-space: pre-line; font-size: 14px; line-height: 1.6; color: var(--md-on-surface-variant); }
484
-
485
- /* ---------- Kontakt ---------- */
486
- .md3 .kt-page { display: grid; grid-template-columns: 1fr 320px; gap: 32px; padding: 28px 24px 64px; align-items: start; }
487
- .md3 .kt-intro { font-size: 15px; color: var(--md-on-surface); margin: 0 0 20px; line-height: 1.5; }
488
- .md3 .kt-form { display: flex; flex-direction: column; gap: 18px; }
489
- .md3 .kt-honeypot { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; }
490
- .md3 .kt-buttons { display: flex; justify-content: flex-end; gap: 12px; margin-top: 24px; }
491
- .md3 .kt-success { display: flex; align-items: center; gap: 8px; margin-top: 16px; color: var(--md-good);
492
- font-weight: 600; font-size: 14px; }
493
- .md3 .kt-aside { background: var(--md-sc); border-radius: var(--md-r-lg, 16px); padding: 24px; display: flex;
494
- flex-direction: column; gap: 22px; }
495
- .md3 .kt-aside-row { display: flex; gap: 14px; align-items: flex-start; }
496
- .md3 .kt-aside-icon { color: var(--md-primary); flex: none; }
497
- .md3 .kt-aside-label { margin: 0; font-size: 13px; color: var(--md-on-surface-variant); }
498
- .md3 .kt-aside-value { margin: 2px 0 0; font-weight: 700; color: var(--md-on-surface); }
499
- @media (max-width: 860px) { .md3 .kt-page { grid-template-columns: 1fr; } }
500
-
501
- /* ---------- Suchaufträge ---------- */
502
- .md3 .ms-page { padding: 28px 24px 64px; }
503
- .md3 .ms-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; }
504
- .md3 .ms-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 18px; }
505
- .md3 .ms-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
506
- border-radius: var(--md-r-lg, 16px); padding: 20px; display: flex; flex-direction: column; gap: 14px; }
507
- .md3 .ms-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
508
- .md3 .ms-card-title { font: 700 17px var(--md-font); margin: 0; color: var(--md-on-surface); }
509
- .md3 .ms-card-desc { font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.5; margin: 0; }
510
- .md3 .ms-card-info { display: flex; gap: 24px; flex-wrap: wrap; padding: 12px 0; border-top: 1px solid var(--md-outline-variant); border-bottom: 1px solid var(--md-outline-variant); }
511
- .md3 .ms-card-info > div { display: flex; flex-direction: column; gap: 2px; }
512
- .md3 .ms-info-label { font-size: 12px; color: var(--md-on-surface-variant); }
513
- .md3 .ms-info-val { font-weight: 700; font-size: 14px; color: var(--md-on-surface); }
514
- .md3 .ms-card-actions { display: flex; justify-content: flex-end; gap: 10px; }
515
- .md3 .ms-empty { text-align: center; padding: 64px 24px; color: var(--md-on-surface-variant); }
516
- .md3 .ms-empty svg { margin-bottom: 12px; }
517
- @media (max-width: 600px) { .md3 .ms-grid { grid-template-columns: 1fr; } }
518
-
519
- /* ---------- Einstellungen (Profile settings) ---------- */
520
- .md3 .st-page { padding: 24px 24px 64px; }
521
- /* st-shell — vertical breathing room for the legacy settings card in `next` mode.
522
- The legacy .container is margin:0 on desktop, so the card sits flush against the
523
- header/footer. Vertical only; horizontal margin stays from .container so the card
524
- width is unchanged. Compound .md3.st-shell (0,2,0) beats .container (0,1,0). */
525
- .md3.st-shell { margin-top: 28px; margin-bottom: 56px; }
526
- @media (max-width: 980px) { .md3.st-shell { margin-top: 14px; margin-bottom: 32px; } }
527
- .md3 .st-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--md-outline-variant); margin-bottom: 24px; overflow-x: auto; }
528
- .md3 .st-tab { display: inline-flex; align-items: center; gap: 8px; padding: 12px 18px; border: 0; background: none;
529
- cursor: pointer; font: 600 15px var(--md-font); color: var(--md-on-surface-variant); border-bottom: 2px solid transparent;
530
- margin-bottom: -1px; white-space: nowrap; }
531
- .md3 .st-tab:hover { color: var(--md-on-surface); }
532
- .md3 .st-tab.is-active { color: var(--md-primary); border-bottom-color: var(--md-primary); }
533
- .md3 .st-tab svg { flex: none; }
534
-
535
- /* md3 settings forms (Account tab rebuilt on the autobahn primitives) */
536
- .md3 .st-panels { max-width: 900px; }
537
- .md3 .st-loading { display: flex; justify-content: center; padding: 56px; }
538
- .md3 .st-form { display: flex; flex-direction: column; gap: 24px; }
539
- .md3 .st-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 20px; }
540
- @media (max-width: 600px) { .md3 .st-grid { grid-template-columns: 1fr; } }
541
- .md3 .st-phone { grid-column: 1 / -1; display: grid; grid-template-columns: 140px 120px 1fr; gap: 12px; align-items: end; }
542
- @media (max-width: 600px) { .md3 .st-phone { grid-template-columns: 1fr; } }
543
- .md3 .st-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 16px; border-top: 1px solid var(--md-outline-variant); flex-wrap: wrap; }
544
- .md3 .st-actions-right { display: flex; gap: 12px; }
545
- .md3 .st-del .mbtn, .md3 .st-del { color: var(--md-error); }
546
-
547
- /* data-usage toggle rows */
548
- .md3 .du-row { display: flex; align-items: center; gap: 16px; padding: 18px; border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); }
549
- .md3 .du-ic { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; flex: none; border-radius: var(--md-r-full); background: var(--md-surface-variant, #eef1f6); color: var(--md-primary); }
550
- .md3 .du-copy { display: flex; flex-direction: column; gap: 2px; flex: 1; }
551
- .md3 .du-label { font: 700 15px var(--md-font); color: var(--md-on-surface); }
552
- .md3 .du-text { font-size: 13px; color: var(--md-on-surface-variant); }
553
- /* md3 switch */
554
- .md3 .mswitch { position: relative; display: inline-flex; flex: none; cursor: pointer; }
555
- .md3 .mswitch input { position: absolute; opacity: 0; width: 0; height: 0; }
556
- .md3 .mswitch-track { display: inline-block; width: 46px; height: 26px; border-radius: var(--md-r-full); background: var(--md-outline-variant); transition: background .15s; position: relative; }
557
- .md3 .mswitch-thumb { position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: var(--md-r-full); background: #fff; box-shadow: var(--md-e1); transition: transform .15s; }
558
- .md3 .mswitch input:checked + .mswitch-track { background: var(--md-primary); }
559
- .md3 .mswitch input:checked + .mswitch-track .mswitch-thumb { transform: translateX(20px); }
560
-
561
- /* md3 address cards (Einstellungen → Adressen) */
562
- .md3 .adr-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }
563
- .md3 .adr-card { border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); padding: 18px; box-shadow: var(--md-e1); }
564
- .md3 .adr-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
565
- .md3 .adr-title { font: 700 16px var(--md-font); color: var(--md-on-surface); }
566
- .md3 .adr-row { display: flex; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--md-outline-variant); font-size: 13.5px; }
567
- .md3 .adr-row:last-child { border-bottom: 0; }
568
- .md3 .adr-k { flex: none; width: 110px; color: var(--md-on-surface-variant); }
569
- .md3 .adr-v { color: var(--md-on-surface); }
570
- .md3 .adr-v--empty { color: var(--md-error); }
571
- .md3 .adr-add { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 160px; border: 2px dashed var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: none; cursor: pointer; color: var(--md-on-surface-variant); font: 600 14px var(--md-font); transition: border-color .12s, color .12s; }
572
- .md3 .adr-add:hover { border-color: var(--md-primary); color: var(--md-primary); }
573
- .md3 .adr-add-ic { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--md-r-full); background: var(--md-surface-variant, #eef1f6); }
574
-
575
- /* dealer dashboard — md3 odometer + chart-period buttons */
576
- .md3 .dash-card .employeesCountWrapper, .md3 .dash-odo { display: inline-flex; gap: 6px; margin: 12px 0; }
577
- .md3 .dash-odo span { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 46px; border-radius: var(--md-r-sm, 10px); background: var(--md-primary); color: #fff; font: 700 24px var(--md-font); }
578
-
579
- /* dealer Mitarbeiter (employees) — md3 polish over the legacy structure */
580
- .md3 .emp-info { border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); padding: 20px; box-shadow: var(--md-e1); margin-bottom: 20px; }
581
- .md3 .emp-controls { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; }
582
- .md3 .emp-add { background: var(--md-primary) !important; color: #fff !important; border-radius: var(--md-r-full) !important; padding: 10px 20px !important; font: 600 14px var(--md-font) !important; text-transform: none !important; box-shadow: var(--md-e1) !important; }
583
- .md3 .emp-table { border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); overflow: hidden; box-shadow: var(--md-e1); }
584
- .md3 .emp-thead { background: var(--md-surface-variant, #eef1f6); color: var(--md-on-surface-variant); font: 600 12.5px var(--md-font); }
585
-
586
- /* ---------- Meine Fahrzeuge (vehicle list) ---------- */
587
- .md3 .mv-page { padding: 24px 24px 64px; }
588
- .md3 .mv-warning { background: var(--md-error-container, #fdeceb); color: var(--md-error); border-radius: var(--md-r-sm, 12px); padding: 12px 16px; margin-bottom: 16px; font-size: 14px; }
589
- .md3 .mv-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; }
590
- .md3 .mv-tools { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
591
- .md3 .mv-search { width: 260px; max-width: 100%; padding-right: 4px; }
592
- .md3 .mv-search input { border: 0; outline: 0; background: transparent; flex: 1; font: inherit; color: inherit; min-width: 0; }
593
- .md3 .mv-search-btn { display: flex; align-items: center; justify-content: center; border: 0; background: none; cursor: pointer; color: var(--md-on-surface-variant); flex: none; padding: 0 4px; }
594
- .md3 .mv-loading { display: flex; justify-content: center; padding: 64px; }
595
-
596
- /* ---------- Meine Fahrzeuge — md3 owner/dealer card (.mvc-*) ---------- */
597
- .md3 .mvc-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(440px, 1fr)); gap: 20px; }
598
- @media (max-width: 600px) { .md3 .mvc-list { grid-template-columns: 1fr; gap: 16px; } }
599
- .md3 .mvc { display: flex; flex-direction: column; background: var(--md-surface, #fff); border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); box-shadow: var(--md-e1); overflow: hidden; }
600
- .md3 .mvc-media { position: relative; display: block; aspect-ratio: 16 / 10; background: var(--md-surface-variant, #eef1f6); border-bottom: 1px solid var(--md-outline-variant); }
601
- .md3 .mvc-media img { width: 100%; height: 100%; object-fit: contain; }
602
- .md3 .mvc-imgcount { position: absolute; bottom: 8px; right: 8px; display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border-radius: var(--md-r-full); background: rgba(0,0,0,.62); color: #fff; font-size: 11px; font-weight: 600; }
603
- .md3 .mvc-status { position: absolute; top: 10px; left: 10px; display: inline-flex; align-items: center; height: 26px; padding: 0 12px; border-radius: var(--md-r-full); background: var(--md-surface, #fff); color: var(--md-on-surface-variant); font-size: 12px; font-weight: 700; box-shadow: var(--md-e1); cursor: pointer; }
604
- .md3 .mvc-status--on { background: var(--md-good, #0F7B43); color: #fff; }
605
- .md3 .mvc-body { padding: 14px 16px; display: flex; flex-direction: column; gap: 6px; }
606
- .md3 .mvc-title { font: 700 18px var(--md-font); color: var(--md-on-surface); text-decoration: none; line-height: 1.25; }
607
- .md3 a.mvc-title:hover { color: var(--md-primary); }
608
- .md3 .mvc-trim { font-size: 13.5px; color: var(--md-on-surface-variant); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
609
- .md3 .mvc-specs { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; font-size: 12.5px; color: var(--md-on-surface-variant); margin-top: 2px; }
610
- .md3 .mvc-dot { color: var(--md-outline-variant); }
611
- .md3 .mvc-ids { display: flex; flex-wrap: wrap; gap: 2px 14px; font-size: 11.5px; color: var(--md-on-surface-variant); margin-top: 4px; }
612
- .md3 .mvc-ids b { color: var(--md-on-surface); font-weight: 600; }
613
- .md3 .mvc-price { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
614
- .md3 .mvc-price-main { font-weight: 700; font-size: 22px; color: var(--md-primary); letter-spacing: -.4px; }
615
- .md3 .mvc-price-rate { font-size: 12.5px; color: var(--md-on-surface-variant); }
616
- .md3 .mvc-price-rate b { color: var(--md-on-surface); }
617
- .md3 .mvc-aggs { display: grid; grid-template-columns: repeat(auto-fit, minmax(88px, 1fr)); gap: 8px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--md-outline-variant); }
618
- .md3 .mvc-agg { display: flex; flex-direction: column; gap: 1px; }
619
- .md3 .mvc-agg-k { font-size: 11px; color: var(--md-on-surface-variant); }
620
- .md3 .mvc-agg-v { font-size: 15px; font-weight: 700; color: var(--md-on-surface); }
621
- .md3 .mvc-dealer { border-top: 1px solid var(--md-outline-variant); }
622
- .md3 .mvc-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; border-top: 1px solid var(--md-outline-variant); margin-top: auto; flex-wrap: wrap; }
623
- .md3 .mvc-controls { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
624
- .md3 .mvc-ctrl { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-full); background: var(--md-surface, #fff); color: var(--md-on-surface-variant); cursor: pointer; transition: background .12s, color .12s, border-color .12s; }
625
- .md3 .mvc-ctrl:hover { background: var(--md-surface-variant, #eef1f6); color: var(--md-primary); border-color: var(--md-primary); }
626
- .md3 .mvc-ctrl--disabled { opacity: .4; cursor: not-allowed; }
627
- .md3 .mvc-ctrl--disabled:hover { background: var(--md-surface, #fff); color: var(--md-on-surface-variant); border-color: var(--md-outline-variant); }
628
-
629
- /* ---------- Checkout OrderOverview (Übersicht) ---------- */
630
- .md3 .oo-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
631
- .md3 .oo-car { display: flex; gap: 16px; align-items: center; padding-bottom: 16px; border-bottom: 1px solid var(--md-outline-variant); margin-bottom: 16px; }
632
- .md3 .oo-car-img { width: 96px; height: 66px; object-fit: contain; border-radius: var(--md-r-sm, 10px); flex: none; }
633
- .md3 .oo-car-name { font: 700 17px var(--md-font); color: var(--md-on-surface); }
634
- .md3 .oo-car-sub { font-size: 13px; color: var(--md-on-surface-variant); margin-bottom: 4px; }
635
- .md3 .oo-seller { font-size: 13px; color: var(--md-on-surface-variant); cursor: pointer; }
636
- .md3 .oo-underline { color: var(--md-primary); text-decoration: underline; cursor: pointer; }
637
- .md3 .oo-row { padding: 12px 0; border-bottom: 1px solid var(--md-outline-variant); }
638
- .md3 .oo-row:last-child { border-bottom: 0; }
639
- .md3 .oo-row-title { font-weight: 700; font-size: 14px; color: var(--md-on-surface); margin-bottom: 6px; display: flex; justify-content: space-between; }
640
- .md3 .oo-row-add { font-weight: 400; font-size: 12px; color: var(--md-on-surface-variant); }
641
- .md3 .oo-row-val { font-size: 14px; color: var(--md-on-surface-variant); }
642
- .md3 .oo-line { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; padding: 3px 0; }
643
- .md3 .oo-line-name { color: var(--md-on-surface-variant); }
644
- .md3 .oo-line-rate { color: var(--md-on-surface); font-weight: 600; text-align: right; }
645
- .md3 .oo-summary { align-self: start; }
646
- .md3 .oo-total { display: flex; flex-direction: column; padding-bottom: 14px; margin-bottom: 8px; border-bottom: 1px solid var(--md-outline-variant); }
647
- .md3 .oo-total-label { font-size: 14px; color: var(--md-on-surface-variant); }
648
- .md3 .oo-total-amount { font: 800 28px var(--md-font); color: var(--md-primary); }
649
- .md3 .oo-total-unit { font-size: 15px; font-weight: 600; color: var(--md-on-surface-variant); }
650
- .md3 .oo-vat { font-size: 12px; color: var(--md-on-surface-variant); }
651
- .md3 .oo-finance-link { display: inline-block; margin: 8px 0; color: var(--md-primary); font-weight: 600; font-size: 13px; cursor: pointer; }
652
- .md3 .oo-terms { margin-top: 20px; font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.6; }
653
- .md3 .oo-buy { display: flex; justify-content: flex-end; margin-top: 16px; }
654
- @media (max-width: 800px) { .md3 .oo-grid { grid-template-columns: 1fr; } }
655
-
656
- /* ---------- Bestellungen (orders) ---------- */
657
- .md3 .mo-page { padding: 28px 24px 64px; }
658
- .md3 .mo-list { display: flex; flex-direction: column; gap: 18px; }
659
- .md3 .mo-card { padding: 20px 22px; }
660
- .md3 .mo-status { font-size: 13px; color: var(--md-on-surface-variant); margin-bottom: 12px; }
661
- .md3 .mo-status-val { color: var(--md-primary); font-weight: 700; }
662
- .md3 .mo-head { display: flex; align-items: center; gap: 16px; padding-bottom: 14px; border-bottom: 1px solid var(--md-outline-variant); }
663
- .md3 .mo-head > div:nth-child(2) { flex: 1; min-width: 0; }
664
- .md3 .mo-delivered { font-size: 12px; color: var(--md-good); margin-top: 4px; }
665
- .md3 .mo-rows { padding: 12px 0; border-bottom: 1px solid var(--md-outline-variant); }
666
- .md3 .mo-total { display: flex; justify-content: space-between; align-items: baseline; padding-top: 14px; font-weight: 700; }
667
- .md3 .mo-total-val { font-size: 20px; color: var(--md-primary); }
668
-
669
- /* ---------- Vergleich ---------- */
670
- .md3 .cmp-page { padding: 24px 24px 64px; }
671
- .md3 .cmp-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }
672
-
673
- /* ---------- Abrechnung (Billing) ---------- */
674
- .md3 .bl-page { padding: 28px 24px 64px; }
675
- .md3 .bl-allprices { font-size: 13px; color: var(--md-on-surface-variant); margin: 12px 0 20px; }
676
- .md3 .bl-search { background: var(--md-sc); border-radius: var(--md-r-md, 12px); padding: 16px; margin-bottom: 20px; }
677
- .md3 .bl-range { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; }
678
- .md3 .bl-range .mfield { width: 200px; flex-direction: row; gap: 8px; }
679
- .md3 .bl-active { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; font-size: 14px; }
680
- .md3 .bl-active-btns { display: flex; align-items: center; gap: 10px; }
681
- .md3 .bl-reset { border: 0; background: none; cursor: pointer; color: var(--md-on-surface-variant); display: flex; }
682
- .md3 .bl-section { margin: 24px 0 12px; }
683
- .md3 .bl-noresult, .md3 .bl-error { color: var(--md-on-surface-variant); font-size: 14px; }
684
-
685
- /* ---------- Daten-Export / Import ---------- */
686
- .md3 .dx-page { padding: 28px 24px 64px; display: flex; flex-direction: column; gap: 18px; }
687
- .md3 .dx-info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
688
- .md3 .dx-text { font-size: 14px; line-height: 1.55; color: var(--md-on-surface-variant); margin: 0; }
689
- .md3 .dx-contacts { display: flex; gap: 28px; flex-wrap: wrap; margin-top: 14px; }
690
- .md3 .dx-contact { display: flex; gap: 12px; align-items: center; color: var(--md-on-surface); }
691
- .md3 .dx-contact svg { color: var(--md-primary); flex: none; }
692
- .md3 .dx-c-title { font-size: 12px; color: var(--md-on-surface-variant); }
693
- .md3 .dx-steps { display: flex; flex-wrap: wrap; gap: 16px; margin: 8px 0 16px; }
694
- .md3 .dx-step { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 180px; }
695
- .md3 .dx-step-num { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; flex: none;
696
- border-radius: 50%; background: var(--md-primary); color: #fff; font-weight: 700; font-size: 14px; }
697
- @media (max-width: 700px) { .md3 .dx-info-grid { grid-template-columns: 1fr; } }
698
-
699
- /* shared dealer/owner page frame — md3 padding + max width (legacy inner blocks preserved) */
700
- .md3 .dlr-page { padding: 24px; }
701
- @media (min-width: 1100px) { .md3 .dlr-page { max-width: 1280px; margin: 0 auto; } }
702
- @media (max-width: 700px) {
703
- .md3 .co-grid { grid-template-columns: 1fr; }
704
- .md3 .co-phone { grid-template-columns: 90px 1fr 1fr; }
705
- .md3 .co-pay-grid { grid-template-columns: 1fr; }
706
- }
707
- @media (max-width: 700px) {
708
- .md3 .co-header-info { display: none; }
709
- .md3 .co-step-label { display: none; }
710
- .md3 .co-step { flex: none; }
711
- .md3 .co-step-bar { min-width: 24px; }
712
- }
713
- /* below the 992px desktop breakpoint the content no longer reserves the 424px left
714
- gap, so the fixed rail would overlap the form — hide it (mobile uses the header stepper). */
715
- @media (max-width: 991px) {
716
- .md3 .co-rail { display: none; }
717
- }
718
-
719
- /* ---------- custom select / dropdown ----------
720
- Themeable replacement for native <select> (whose OS-rendered option list can't be
721
- styled). Trigger mirrors .mfield; the menu is a controlled .mcard-style popover. */
722
- .md3 .mselect { position: relative; display: inline-block; }
723
- .md3 .mselect.mselect--block { display: block; width: 100%; }
724
- .md3 .mselect-btn { display: flex; align-items: center; gap: 10px; width: 100%; height: 48px; padding: 0 14px;
725
- border: 0; border-radius: var(--md-r-xs); background: transparent; box-shadow: inset 0 0 0 1px var(--md-outline-variant);
726
- font: inherit; font-size: 14px; color: var(--md-on-surface); cursor: pointer; text-align: left; transition: box-shadow .15s; }
727
- .md3 .mselect-btn:hover { box-shadow: inset 0 0 0 1px var(--md-outline); }
728
- .md3 .mselect-btn[aria-expanded="true"] { box-shadow: inset 0 0 0 2px var(--md-accent); }
729
- .md3 .mselect-btn:disabled { opacity: .5; cursor: not-allowed; }
730
- .md3 .mselect-btn .lucide { width: 20px; height: 20px; color: var(--md-on-surface-variant); flex: none; }
731
- .md3 .mselect-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
732
- .md3 .mselect-label--ph { color: var(--md-on-surface-variant); }
733
- .md3 .mselect-chev { margin-left: auto; transition: transform .15s; }
734
- .md3 .mselect-btn[aria-expanded="true"] .mselect-chev { transform: rotate(180deg); }
735
- .md3 .mselect--sm .mselect-btn { height: 34px; font-size: 13px; padding: 0 10px; gap: 6px; }
736
- .md3 .mselect--sm .mselect-btn .lucide { width: 16px; height: 16px; }
737
- .md3 .mselect-menu { position: absolute; z-index: 60; top: calc(100% + 4px); left: 0; min-width: 100%; max-height: 288px;
738
- overflow-y: auto; padding: 6px; margin: 0; list-style: none; background: var(--md-sc-lowest, #fff);
739
- border-radius: var(--md-r-sm, 12px); border: 1px solid var(--md-outline-variant);
740
- box-shadow: var(--md-e2, 0 8px 24px rgba(0,0,0,.16)); }
741
- .md3 .mselect-menu--right { left: auto; right: 0; }
742
- .md3 .mselect-opt { display: flex; align-items: center; gap: 8px; width: 100%; padding: 9px 10px; border: 0;
743
- border-radius: 8px; background: transparent; font: inherit; font-size: 14px; color: var(--md-on-surface);
744
- text-align: left; cursor: pointer; }
745
- .md3 .mselect-opt-label { flex: 1; min-width: 0; }
746
- .md3 .mselect-opt:hover, .md3 .mselect-opt.is-active { background: var(--md-sc); }
747
- .md3 .mselect-opt[aria-selected="true"] { color: var(--md-primary); font-weight: 600; }
748
- .md3 .mselect-opt:disabled { opacity: .45; cursor: not-allowed; background: transparent; }
749
- .md3 .mselect-check { color: var(--md-primary); flex: none; }
750
-
751
- /* ---------- Detailsuche page ---------- */
752
- /* the sticky submit bar drives "apply" here, so hide FilterContent's own inline footer button. */
753
- .md3 .detailed-page .frail-foot { display: none; }
754
- .md3 .detailed-submitbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; padding: 12px 0;
755
- background: var(--md-sc-lowest, #fff); border-top: 1px solid var(--md-outline-variant);
756
- box-shadow: 0 -4px 16px rgba(0,0,0,.06); }
757
- /* the "Detailsuche" link at the foot of the simple SRP rail. */
758
- .md3 .detailed-link { border-radius: 10px; }
759
- .md3 .detailed-link:hover { background: var(--md-sc); }
760
-
761
- /* sectioned Detailsuche layout (FilterContent variant="page") — full-width sections, multi-col grids */
762
- .md3 .ds-page { display: block; }
763
- .md3 .ds-section { padding: 30px 0; border-top: 1px solid var(--md-outline-variant); }
764
- .md3 .ds-section:first-child { border-top: 0; padding-top: 6px; }
765
- .md3 .ds-section > h2 { font: 700 19px var(--md-font); letter-spacing: -.2px; margin: 0 0 20px; color: var(--md-on-surface); }
766
- .md3 .ds-sub { font: 600 13px var(--md-font); color: var(--md-on-surface-variant); margin: 20px 0 8px; }
767
- .md3 .ds-sub:first-child { margin-top: 0; }
768
- .md3 .ds-grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 28px; }
769
- .md3 .ds-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 28px; }
770
- .md3 .ds-cols-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px 28px; }
771
- @media (max-width: 900px) { .md3 .ds-grid-3, .md3 .ds-cols-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
772
- @media (max-width: 600px) { .md3 .ds-grid-3, .md3 .ds-grid-2, .md3 .ds-cols-3 { grid-template-columns: 1fr; } }
773
-
774
- /* two-column section flow — sections after Grundbasis auto-balance into 2 columns; the
775
- densest (Sicherheit, Ausstattung) span both so their 3-up grids keep full reading width. */
776
- .md3 .ds-flow { column-count: 2; column-gap: 48px; }
777
- .md3 .ds-flow .ds-section { break-inside: avoid; -webkit-column-break-inside: avoid; padding: 26px 0; }
778
- .md3 .ds-flow .ds-section--wide { column-span: all; -webkit-column-span: all; padding: 30px 0; }
779
- /* inside a half-width flow column, collapse the multi-col inner grids so rows aren't cramped. */
780
- .md3 .ds-flow .ds-section:not(.ds-section--wide) .ds-grid-3 { grid-template-columns: 1fr 1fr; gap: 0 24px; }
781
- .md3 .ds-flow .ds-section:not(.ds-section--wide) .ds-cols-3 { grid-template-columns: 1fr; gap: 0; }
782
- .md3 .ds-flow .ds-section:not(.ds-section--wide) .ds-grid-2 { grid-template-columns: 1fr; }
783
- @media (max-width: 900px) { .md3 .ds-flow { column-count: 1; } }
784
-
785
- /* ---------- Merkliste (Favourites) ---------- */
786
- .md3 .fav-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; }
787
- .md3 .fav-cell { display: flex; flex-direction: column; }
788
- .md3 .fav-compare { display: inline-flex; align-items: center; justify-content: center; gap: 8px; margin-top: 8px;
789
- height: 40px; border-radius: var(--md-r-sm, 12px); border: 1px solid var(--md-outline-variant); background: transparent;
790
- font: 600 13px var(--md-font); color: var(--md-on-surface-variant); cursor: pointer;
791
- transition: background .15s, border-color .15s, color .15s; }
792
- .md3 .fav-compare:hover { background: var(--md-sc); }
793
- .md3 .fav-compare--on { background: var(--md-primary-container); color: var(--md-on-primary-container); border-color: transparent; }
794
- .md3 .fav-compare .lucide { width: 18px; height: 18px; }
795
-
796
- /* ---------- segmented buttons ---------- */
797
- .md3 .segmented { display: inline-flex; border-radius: var(--md-r-full); box-shadow: inset 0 0 0 1px var(--md-outline-variant); overflow: hidden; }
798
- .md3 .segmented button { height: 38px; padding: 0 18px; border: 0; background: transparent; cursor: pointer;
799
- font: 600 13px var(--md-font); color: var(--md-on-surface-variant); display: inline-flex; align-items: center; gap: 6px;
800
- border-right: 1px solid var(--md-outline-variant); transition: background .15s; }
801
- .md3 .segmented button:last-child { border-right: 0; }
802
- .md3 .segmented button.on { background: var(--md-secondary-container); color: var(--md-on-secondary-container); }
803
- .md3 .segmented button .lucide { width: 16px; height: 16px; }
804
-
805
- /* ---------- spec item ---------- */
806
- .md3 .specitem { display: flex; align-items: center; gap: 10px; }
807
- .md3 .specitem .lucide { width: 20px; height: 20px; color: var(--md-on-surface-variant); flex: none; stroke-width: 1.75; }
808
- .md3 .specitem b { font-weight: 600; font-size: 14px; color: var(--md-on-surface); }
809
- .md3 .specitem span { display: block; font-size: 11.5px; color: var(--md-on-surface-variant); }
810
-
811
- /* ---------- list divider ---------- */
812
- .md3 .mdivider { height: 1px; background: var(--md-outline-variant); border: 0; margin: 0; }
813
-
814
- /* ---------- accent helpers (Signal-Cyan) ---------- */
815
- .md3 .link-accent:hover { text-decoration: underline; text-decoration-color: var(--md-accent); text-underline-offset: 3px; }
816
- .md3 .accent-rule { height: 3px; width: 44px; border-radius: 2px; background: var(--autode-swoosh); }
817
- .md3 :focus-visible { outline: 2px solid var(--md-accent); outline-offset: 2px; }
818
- .md3 .link-accent { color: var(--md-primary); cursor: pointer; text-decoration: none; }
819
- .md3 .link-accent:hover { text-decoration: underline; text-decoration-color: var(--md-accent); text-underline-offset: 3px; }
820
-
821
- /* ---------- card image carousel ---------- */
822
- .md3 .car-arrow { position: absolute; top: 50%; transform: translateY(-50%); width: 32px; height: 32px; border-radius: var(--md-r-full);
823
- border: 0; background: rgba(255,255,255,.92); color: var(--md-on-surface); box-shadow: var(--md-e1);
824
- display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: 0; transition: opacity var(--dur-1); z-index: 2; }
825
- .md3 .car-arrow--l { left: 8px; } .md3 .car-arrow--r { right: 8px; }
826
- .md3 .cardcar:hover .car-arrow { opacity: 1; }
827
- @media (hover: none) { .md3 .car-arrow { opacity: .92; } }
828
-
829
- /* ==========================================================================
830
- RESPONSIVE LAYOUT LAYER
831
- Layout-critical grids live here (inline React styles can't carry @media).
832
- Breakpoints: tablet ≤ 980px, phone ≤ 600px.
833
- ========================================================================== */
834
- .md3 .container { max-width: 1180px; margin: 0 auto; width: 100%; }
835
-
836
- .md3 .hero-grid { display: grid; grid-template-columns: 1.05fr .95fr; gap: 40px; align-items: center; }
837
- .md3 .hero-inner { padding: 40px 24px 44px; }
838
- .md3 .field-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
839
- .md3 .cards-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 20px; }
840
- .md3 .cards-2 { display: grid; grid-template-columns: repeat(2,1fr); gap: 18px; }
841
- .md3 .cards-offers { display: grid; grid-template-columns: repeat(3,1fr); gap: 20px; }
842
- .md3 .brand-grid { display: grid; grid-template-columns: repeat(6,1fr); gap: 16px; }
843
- .md3 .steps-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 32px; }
844
- /* car-card grids: 2-up across the whole tablet range (incl. landscape ~1024) so cards never cram to 3 narrow columns */
845
- @media (max-width: 1024px) {
846
- .md3 .cards-offers, .md3 .cards-3 { grid-template-columns: repeat(2, 1fr); }
847
- }
848
- /* guarantee band — one cohesive container with hairline columns (not four floating cards) */
849
- .md3 .guarantee-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 0; background: var(--md-sc-low);
850
- border-radius: var(--md-r-lg); overflow: hidden; }
851
- .md3 .gitem { padding: 26px 24px; display: flex; flex-direction: column; gap: 12px; border-left: 1px solid var(--md-outline-variant); }
852
- .md3 .gitem:first-child { border-left: 0; }
853
- /* magazine — editorial: one feature + stacked text rows */
854
- .md3 .mag-grid { display: grid; grid-template-columns: 1.55fr 1fr; gap: 18px; align-items: stretch; }
855
- .md3 .mag-side { display: flex; flex-direction: column; gap: 18px; }
856
- .md3 .mag-item { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 8px;
857
- padding: 22px 24px; background: var(--md-sc-lowest); }
858
- /* lower-page polish: connected 3-step flow band + testimonial accents */
859
- .md3 .steps-flow { position: relative; }
860
- .md3 .steps-flow::before { content: ''; position: absolute; top: 23px; left: 16.6%; right: 16.6%; height: 2px;
861
- background: linear-gradient(90deg, transparent, rgba(22,184,232,.55), transparent); z-index: 0; }
862
- .md3 .steps-flow > * { position: relative; z-index: 1; }
863
- @media (max-width: 980px) { .md3 .steps-flow::before { display: none; } }
864
- .md3 .tcard { position: relative; }
865
- .md3 .tcard::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--autode-swoosh); }
866
- .md3 .mag-tag { display: inline-flex; align-self: flex-start; padding: 3px 10px; border-radius: var(--md-r-full);
867
- background: var(--md-primary-container); color: var(--md-on-primary-container); font-size: 11px; font-weight: 700; letter-spacing: .3px; }
868
- /* VDP: desktop sticky summary bar — docks to top after the calculator scrolls away */
869
- .md3 .vdp-stickytop { position: fixed; top: 0; left: 0; right: 0; z-index: 70; background: var(--md-sc-lowest);
870
- border-bottom: 1px solid var(--md-outline-variant); box-shadow: 0 2px 14px rgba(0,0,0,.08);
871
- transform: translateY(-100%); transition: transform var(--dur-2, .25s); }
872
- .md3 .vdp-stickytop--on { transform: translateY(0); }
873
- /* VDP: header row — title left, rating chip right */
874
- .md3 .vdp-headrow { display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; }
875
- /* VDP: header fact line — plain text with dot separators (market-leader pattern, no pills) */
876
- .md3 .vdp-meta { display: flex; flex-wrap: wrap; align-items: center; row-gap: 8px; margin-top: 12px;
877
- font-size: 14.5px; font-weight: 500; color: var(--md-on-surface); }
878
- .md3 .vdp-meta > span { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
879
- .md3 .vdp-meta > span + span::before { content: ''; width: 4px; height: 4px; border-radius: 50%;
880
- background: var(--md-outline-variant); margin: 0 12px; }
881
- /* VDP: condition row — footer of the header card (hairline-divided, no own box) */
882
- .md3 .zustand-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0;
883
- border-top: 1px solid var(--md-outline-variant); margin-top: 18px; padding-top: 4px; }
884
- .md3 .zustand-tile { display: flex; align-items: center; gap: 11px; padding: 12px 16px 0;
885
- border-left: 1px solid var(--md-outline-variant); min-width: 0; }
886
- .md3 .zustand-tile:first-child { border-left: 0; padding-left: 0; }
887
- .md3 .vdp-anchors { position: sticky; top: 0; z-index: 20; gap: 8px; padding: 10px 0;
888
- background: var(--md-surface); overflow-x: auto; scrollbar-width: none;
889
- width: 0; min-width: 100%; } /* width:0 kills min-content propagation; min-width re-stretches */
890
- .md3 .vdp-anchors::-webkit-scrollbar { display: none; }
891
- /* VDP page tint — white cards on cool gray for depth (mobile.de/AS24 use the same trick) */
892
- .md3 .vdp-tint .mcard--filled { background: var(--md-sc-lowest); border: 1px solid var(--md-outline-variant); }
893
- .md3 .steps-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 26px; }
894
- /* HowItWorks — professional redesign: tinted section bg, white elevated step cards, gradient circles */
895
- .md3 .hiw-section { background: color-mix(in srgb, var(--md-primary) 5%, var(--md-surface));
896
- border-radius: 20px; padding: 36px 28px; }
897
- .md3 .hiw-grid { position: relative; }
898
- .md3 .hiw-step { display: flex; flex-direction: column; align-items: center; text-align: center;
899
- position: relative; z-index: 1;
900
- background: #fff; border-radius: 16px; padding: 28px 16px 22px;
901
- box-shadow: 0 2px 16px rgba(11,83,204,.09); border: 1px solid rgba(11,83,204,.07); }
902
- .md3 .hiw-step:not(:last-child)::after { content: '›'; position: absolute; right: -16px; top: 42px;
903
- font-size: 24px; font-weight: 700; color: var(--md-primary); opacity: .4; z-index: 2; pointer-events: none; }
904
- .md3 .hiw-icon-wrap { position: relative; width: 64px; height: 64px; border-radius: var(--md-r-full);
905
- background: linear-gradient(135deg, var(--md-primary) 0%, #16B8E8 100%);
906
- box-shadow: 0 4px 14px color-mix(in srgb, var(--md-primary) 35%, transparent);
907
- display: flex; align-items: center; justify-content: center; flex: none; margin-bottom: 16px; }
908
- .md3 .hiw-num { position: absolute; top: -4px; right: -4px; min-width: 20px; height: 20px; border-radius: var(--md-r-full);
909
- background: #fff; color: var(--md-primary); font-size: 10px; font-weight: 900;
910
- display: flex; align-items: center; justify-content: center; padding: 0 4px;
911
- box-shadow: 0 2px 8px rgba(0,0,0,.18); }
912
- .md3 .hiw-title { font-size: 15px; font-weight: 700; margin-top: 4px; margin-bottom: 8px; color: var(--md-on-surface); }
913
- .md3 .hiw-desc { margin: 0; font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.55; }
914
- .md3 .footer-grid { display: grid; grid-template-columns: 1.4fr repeat(4,1fr); gap: 28px; }
915
- .md3 .srp-grid { display: grid; grid-template-columns: 244px 1fr; gap: 24px; align-items: start; }
916
- /* SRP grid view sits beside the filter rail — 2 columns, not 3 (cards need ≥340px) */
917
- .md3 .srp-grid .cards-3 { grid-template-columns: repeat(2,1fr); }
918
- .md3 .srp-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
919
- .md3 .srp-chips { flex: 1 1 260px; min-width: 0; }
920
- /* "NEU" badge on car cards (legacy new-car label). */
921
- .md3 .neu-badge { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: var(--md-r-full); background: var(--md-primary); color: #fff; font-size: 10.5px; font-weight: 700; letter-spacing: .3px; white-space: nowrap; box-shadow: var(--md-e1); }
922
- @media (max-width: 820px) { .md3 .srp-chips { order: 3; flex-basis: 100%; } }
923
- .md3 .vdp-grid { display: grid; grid-template-columns: 1fr 372px; gap: 28px; align-items: start; }
924
- .md3 .vdp-gallery { grid-column: 1; grid-row: 1; }
925
- .md3 .vdp-details { grid-column: 1; grid-row: 2; display: flex; flex-direction: column; gap: 22px; }
926
- .md3 .vdp-aside { grid-column: 2; grid-row: 1 / span 2; align-self: start; position: sticky; top: 84px; display: flex; flex-direction: column; gap: 16px; }
927
- .md3 .vdp-gallerybox { height: 440px; } .md3 .vdp-gallerybox .cardcar { height: 100%; }
928
- .md3 .vdp-specs { display: grid; grid-template-columns: 1fr 1fr; gap: 18px 32px; }
929
- .md3 .curated-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 16px; }
930
- .md3 .curated-card { padding: 18px; display: flex; flex-direction: column; gap: 14px; background: var(--md-sc-lowest);
931
- text-align: left; transition: box-shadow var(--dur-2), transform var(--dur-2); }
932
- .md3 .curated-card:hover { box-shadow: var(--md-e2); transform: translateY(-2px); }
933
- .md3 .curated-top { display: flex; align-items: center; gap: 13px; }
934
- .md3 .curated-ic { width: 48px; height: 48px; border-radius: var(--md-r-md); flex: none;
935
- display: inline-flex; align-items: center; justify-content: center; }
936
- .md3 .curated-titles { min-width: 0; }
937
- .md3 .curated-title { display: block; font-family: var(--md-font-display); font-weight: 700; font-size: 16px;
938
- color: var(--md-on-surface); letter-spacing: -.2px; }
939
- .md3 .curated-count { display: block; font-size: 13px; color: var(--md-on-surface-variant); margin-top: 2px; }
940
- .md3 .curated-count b { color: var(--md-primary); font-weight: 700; }
941
- .md3 .curated-chips { display: flex; flex-wrap: wrap; gap: 6px; }
942
- .md3 .curated-chip { display: inline-flex; align-items: center; height: 26px; padding: 0 11px; border-radius: var(--md-r-full);
943
- background: var(--md-sc); color: var(--md-on-surface-variant); font-size: 11.5px; font-weight: 600; white-space: nowrap; }
944
- .md3 .curated-cta { margin-top: auto; padding-top: 2px; display: inline-flex; align-items: center; gap: 5px;
945
- font-size: 13.5px; font-weight: 700; color: var(--md-primary); }
946
- .md3 .curated-cta svg { transition: transform var(--dur-2); }
947
- .md3 .curated-card:hover .curated-cta svg { transform: translateX(3px); }
948
- /* continuation modules: side-by-side on desktop, stacked below tablet */
949
- .md3 .continue-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: start; }
950
- .md3 .continue-grid > div { min-width: 0; }
951
- /* "Zuletzt angesehen" / "Ähnlich" — full-width recommendation rows */
952
- .md3 .seen-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
953
- .md3 .seen-head-ic { width: 30px; height: 30px; border-radius: var(--md-r-full); background: var(--md-primary-container);
954
- display: inline-flex; align-items: center; justify-content: center; flex: none; }
955
- .md3 .seen-head-link { display: inline-flex; align-items: center; gap: 4px; font-size: 13.5px; font-weight: 600; flex: none; cursor: pointer; }
956
- .md3 .seen-list { display: flex; flex-direction: column; gap: 8px; }
957
- .md3 .seen-row { width: 100%; display: flex; align-items: center; gap: 14px; padding: 10px 14px 10px 10px;
958
- background: var(--md-sc-lowest); text-align: left; box-shadow: var(--md-e1); border-color: var(--md-outline-variant);
959
- transition: box-shadow var(--dur-2), transform var(--dur-2); }
960
- .md3 .seen-row:hover { box-shadow: var(--md-e2); transform: translateY(-1px); }
961
- .md3 .seen-row-media { width: 104px; height: 74px; border-radius: var(--md-r-sm); background: var(--md-sc); flex: none;
962
- display: flex; align-items: center; justify-content: center; overflow: hidden; }
963
- .md3 .seen-row-img { width: 100%; height: 100%; object-fit: cover; }
964
- .md3 .seen-row-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
965
- .md3 .seen-row-toprow { display: flex; align-items: center; gap: 8px; min-width: 0; }
966
- .md3 .seen-row-title { font-family: var(--md-font-display); font-weight: 700; font-size: 15.5px; color: var(--md-on-surface);
967
- white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
968
- .md3 .seen-row-rate { flex: none; font-size: 10.5px; font-weight: 700; padding: 2px 8px; border-radius: var(--md-r-full); white-space: nowrap; }
969
- .md3 .seen-row-specs { font-size: 12.5px; color: var(--md-on-surface-variant); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
970
- .md3 .seen-row-price { display: flex; align-items: baseline; gap: 6px; margin-top: 1px; }
971
- .md3 .seen-row-price .num { font-weight: 700; font-size: 17px; color: var(--md-primary); letter-spacing: -.3px; }
972
- .md3 .seen-row-unit { font-size: 12px; color: var(--md-on-surface-variant); }
973
- .md3 .seen-row-cash { font-size: 12px; color: var(--md-on-surface-variant); margin-left: auto; white-space: nowrap; }
974
- /* LP comparison rows */
975
- .md3 .lp-vs-row { display: flex; align-items: center; gap: 16px; width: 100%; padding: 13px 2px;
976
- background: none; border: 0; border-top: 1px solid var(--md-outline-variant); cursor: pointer; text-align: left; }
977
- .md3 .lp-vs-row:first-child { border-top: 0; }
978
- .md3 .lp-vs-verdict { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
979
- /* affordability module */
980
- .md3 .budget-card { display: flex; align-items: center; gap: 28px; padding: 22px 26px; background: var(--md-sc-lowest); }
981
- .md3 .budget-copy { flex: 1.1; min-width: 0; }
982
- .md3 .budget-slider{ flex: 1.4; min-width: 0; }
983
- /* guided finder banner — the cyan accent moment (dark blue stays exclusive to hero + sell band) */
984
- .md3 .finder-banner{ display: flex; align-items: center; justify-content: space-between; gap: 20px; width: 100%;
985
- padding: 18px 22px; background: var(--md-accent-container); text-align: left; }
986
- .md3 .finder-steps { display: inline-flex; align-items: center; gap: 14px; flex: none; }
987
- .md3 .thumb-row { display: grid; grid-template-columns: repeat(5,1fr); gap: 10px; }
988
- .md3 .scroll-row { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; }
989
- .md3 .scroll-row::-webkit-scrollbar { display: none; }
990
- .md3 .carrow { display: grid; grid-template-columns: 300px 1fr; }
991
- .md3 .carrow-media { height: 100%; min-height: 230px; }
992
-
993
- /* grid card media — fixed 4:3, hairline seam so the white photo area reads as a zone */
994
- .md3 .cc-media { aspect-ratio: 4 / 3; width: 100%; border-bottom: 1px solid var(--md-outline-variant); }
995
- .md3 .cc-media .cardcar { height: 100%; }
996
- /* consistent studio treatment for ALL inventory photos: white backdrop + soft grounding floor
997
- shadow, so mixed-source cutouts look uniform (Carvana/Cinch catalog look) */
998
- .md3 .cc-media, .md3 .listcard-media {
999
- background: radial-gradient(58% 13px at 50% 90%, rgba(16,22,42,.15), rgba(16,22,42,0) 72%), #fff; }
1000
- /* offer cards: border + soft shadow so they sit on the page (not borderless-floaty) */
1001
- .md3 .cc-card { box-shadow: var(--md-e1); }
1002
-
1003
- /* horizontal listing card (SRP): image | info | price */
1004
- .md3 .listcard { display: grid; grid-template-columns: 300px 1fr 240px; align-items: stretch; }
1005
- .md3 .listcard-media { position: relative; min-height: 100%; }
1006
- .md3 .listcard-info { padding: 16px 18px; display: flex; flex-direction: column; gap: 11px; min-width: 0; }
1007
- .md3 .listcard-price { position: relative; padding: 16px 18px; border-left: 1px solid var(--md-outline-variant);
1008
- display: flex; flex-direction: column; justify-content: flex-start; gap: 16px; background: var(--md-sc-low); }
1009
- /* NOTE: no own border-radius — the parent .mcard (radius --md-r-md) has overflow:hidden and clips
1010
- every column to the card corner. A larger radius here used to leave a card-bg sliver at the
1011
- bottom-right corner (the reported "corner / color" glitch). */
1012
- /* spec strip (SRP info column) — one soft tinted container, airy icon+value pairs, no lines */
1013
- .md3 .specstrip { display: flex; flex-wrap: wrap; gap: 9px 18px; padding: 11px 14px;
1014
- background: var(--md-sc-low); border-radius: var(--md-r-md); }
1015
- /* filter rail: collapsible sections */
1016
- .md3 .frail-group { border-bottom: 1px solid var(--md-outline-variant); }
1017
- .md3 .frail-head { display: flex; align-items: center; justify-content: space-between; width: 100%;
1018
- padding: 13px 0; background: none; border: 0; cursor: pointer; text-align: left; gap: 12px; }
1019
- .md3 .frail-sum { font-size: 12px; font-weight: 600; color: var(--md-primary); white-space: nowrap;
1020
- overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
1021
- .md3 .frail-body { display: flex; flex-direction: column; gap: 10px; padding-bottom: 16px; }
1022
- .md3 .frail-group:last-of-type { border-bottom: 0 !important; }
1023
- .md3 .frow { display: flex; align-items: center; gap: 10px; font-size: 14px; cursor: pointer; }
1024
- .md3 .frow-label { flex: 1; min-width: 0; color: var(--md-on-surface); }
1025
- .md3 .frow-agg { margin-left: 5px; color: var(--md-on-surface-variant); font-size: 12px; font-variant-numeric: tabular-nums; white-space: nowrap; }
1026
- /* Detailsuche page: give multi-select rows vertical breathing room (legacy list density). */
1027
- .md3 .ds-page .frow { padding: 6px 0; }
1028
- .md3 .frow-toggle { margin-top: 6px; padding-top: 10px; border-top: 1px solid var(--md-outline-variant); }
1029
- /* live-count apply footer — sits at the end of the (non-sticky) filter list */
1030
- .md3 .frail-foot { padding: 14px 0 2px; margin-top: 4px; }
1031
- .md3 .sheet .frail-foot { display: none; }
1032
- /* MD3 slider (standard: thin rounded track, filled active segment, round handle) — .md3 layer, no MUI.
1033
- NOTE: named .exslider (NOT .mslider — that class is the VDP finance-calculator slider further down). */
1034
- .md3 .exslider { position: relative; height: 32px; margin: 6px 0 2px; touch-action: none; }
1035
- .md3 .exslider-track { position: absolute; left: 0; right: 0; top: 50%; height: 4px; transform: translateY(-50%);
1036
- border-radius: 999px; background: var(--md-outline-variant); }
1037
- .md3 .exslider-dots { display: none; }
1038
- .md3 .exslider-fill { position: absolute; top: 50%; height: 4px; transform: translateY(-50%);
1039
- border-radius: 999px; background: var(--md-primary); pointer-events: none; }
1040
- .md3 .exslider-wave { display: none; }
1041
- /* native range inputs drive the interaction; only their round thumbs are hit-tested in range mode */
1042
- .md3 .exslider input[type=range] { position: absolute; left: 0; top: 0; width: 100%; height: 100%; margin: 0;
1043
- background: none; -webkit-appearance: none; appearance: none; pointer-events: none; }
1044
- .md3 .exslider--single input[type=range] { pointer-events: auto; }
1045
- .md3 .exslider input[type=range]::-webkit-slider-runnable-track { height: 32px; background: none; border: 0; }
1046
- .md3 .exslider input[type=range]::-moz-range-track { height: 32px; background: none; border: 0; }
1047
- .md3 .exslider input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; pointer-events: auto;
1048
- width: 18px; height: 18px; margin-top: 7px; border-radius: 50%; background: var(--md-primary); border: 0;
1049
- cursor: pointer; box-shadow: var(--md-e1); transition: box-shadow .15s var(--ease-standard); }
1050
- .md3 .exslider input[type=range]::-moz-range-thumb { pointer-events: auto; width: 18px; height: 18px;
1051
- border-radius: 50%; background: var(--md-primary); border: 0; cursor: pointer; box-shadow: var(--md-e1); }
1052
- .md3 .exslider input[type=range]:hover::-webkit-slider-thumb { box-shadow: 0 0 0 8px rgba(11,83,204,.12); }
1053
- .md3 .exslider input[type=range]:active::-webkit-slider-thumb { box-shadow: 0 0 0 10px rgba(11,83,204,.18); }
1054
- .md3 .exslider input[type=range]:hover::-moz-range-thumb { box-shadow: 0 0 0 8px rgba(11,83,204,.12); }
1055
- .md3 .exslider input[type=range]:active::-moz-range-thumb { box-shadow: 0 0 0 10px rgba(11,83,204,.18); }
1056
- .md3 .exslider input[type=range]:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 3px var(--md-accent); }
1057
- /* body-type tile grid */
1058
- /* body-type tile grid: 2-col in the narrow rail, auto-fill on the full Detailsuche page */
1059
- .md3 .body-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
1060
- .md3 .ds-page .body-tiles { grid-template-columns: repeat(auto-fill, minmax(108px, 1fr)); gap: 12px; margin-bottom: 24px; }
1061
- .md3 .body-tile { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 12px 6px;
1062
- border: 1.5px solid var(--md-outline-variant); border-radius: var(--md-r-md); background: var(--md-surface);
1063
- font: 600 12px/1.3 var(--md-font); color: var(--md-on-surface); cursor: pointer; transition: all var(--dur-1); text-align: center; }
1064
- .md3 .ds-page .body-tile { padding: 16px 10px; gap: 9px; }
1065
- .md3 .body-tile:hover:not(.on) { background: var(--md-surface-variant); border-color: var(--md-primary); }
1066
- .md3 .body-tile.on { border-color: var(--md-primary); background: var(--md-primary-container); color: var(--md-on-primary-container); }
1067
- .md3 .body-tile svg { color: var(--md-on-surface-variant); transition: color var(--dur-1); }
1068
- .md3 .body-tile.on svg { color: var(--md-primary); }
1069
- .md3 .body-tile .md-label-sm { color: var(--md-on-surface-variant); }
1070
- /* payment paths: financing hero (eyebrow + big rate + terms) on top, Leasing/Kaufen quiet rows */
1071
- .md3 .pricepaths { min-width: 0; }
1072
- .md3 .pp-rows { display: flex; flex-direction: column; gap: 15px; }
1073
- /* financing hero (legacy-style): eyebrow → big blue rate → terms line (fills the upper gap) */
1074
- .md3 .pp-eyebrow { font-size: 11px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase;
1075
- color: var(--md-on-surface-variant); margin-bottom: 4px; }
1076
- .md3 .pp-hero-rate { display: flex; align-items: baseline; gap: 5px; }
1077
- .md3 .pp-hero-val { font-size: 32px; font-weight: 700; color: var(--md-primary); letter-spacing: -1px; line-height: 1; }
1078
- .md3 .pp-hero-unit { font-size: 13px; color: var(--md-on-surface-variant); }
1079
- .md3 .pp-hero-terms { margin-top: 9px; font-size: 11.5px; color: var(--md-on-surface-variant); }
1080
- /* separator line between the financing block and the leasing row (legacy-design parity) */
1081
- .md3 .pp-lease-row { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--md-outline-variant); }
1082
- .md3 .pp-sub-terms { margin-top: 3px; font-size: 11px; color: var(--md-on-surface-variant); text-align: right; }
1083
- .md3 .pp-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
1084
- .md3 .pp-row-label { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap;
1085
- font-size: 13.5px; color: var(--md-on-surface-variant); }
1086
- .md3 .pp-row-i { color: var(--md-outline); flex: none; }
1087
- .md3 .pp-row-price { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.08; min-width: 0; }
1088
- .md3 .pp-old { font-size: 11.5px; color: var(--md-error); text-decoration: line-through; }
1089
- .md3 .pp-now { display: inline-flex; align-items: baseline; gap: 4px; }
1090
- .md3 .pp-unit { font-size: 11.5px; color: var(--md-on-surface-variant); }
1091
- /* non-focus rates (Leasing / Kaufen): quiet + neutral so they don't compete with the focus rate */
1092
- .md3 .pp-val { font-size: 19px; font-weight: 700; color: var(--md-on-surface); letter-spacing: -.4px; white-space: nowrap; }
1093
- /* financing is the ONLY blue, dominant figure — big hero rate */
1094
- .md3 .pp-row--focus .pp-row-label { color: var(--md-on-surface); font-weight: 700; }
1095
- .md3 .pp-row--focus .pp-val { font-size: 31px; color: var(--md-primary); letter-spacing: -1px; }
1096
- /* purchase group (Kaufen + meter + CTA) — divider above, anchored to the foot of the column */
1097
- .md3 .pp-purchase { margin-top: auto; padding-top: 16px; border-top: 1px solid var(--md-outline-variant);
1098
- display: flex; flex-direction: column; gap: 14px; }
1099
- /* CTA — spacing handled by the column's gap (no own margin) */
1100
- .md3 .pp-cta { margin-top: 0; }
1101
- /* Preisbewertung meter — top of the bottom zone (no longer auto-pinned; space-between does it) */
1102
- .md3 .pp-meter-block { margin-top: 0; padding-top: 0; }
1103
- .md3 .pp-market { margin-top: 9px; padding-top: 9px; border-top: 1px solid var(--md-outline-variant); }
1104
- .md3 .pp-market-head { display: flex; flex-direction: column; gap: 2px; font-size: 12px; color: var(--md-on-surface-variant); }
1105
- .md3 .pp-kauf { font-size: 11.5px; }
1106
- .md3 .pp-kaufline { font-size: 12.5px; color: var(--md-on-surface-variant); }
1107
- .md3 .pp-kaufline b { color: var(--md-on-surface); font-weight: 700; }
1108
- /* segmented market-position meter (Preisbewertung shape) */
1109
- .md3 .pp-meter { display: flex; gap: 3px; margin-top: 9px; }
1110
- .md3 .pp-seg { flex: 1; height: 7px; border-radius: 3px; transition: opacity var(--dur-2); }
1111
- .md3 .pp-mlabel { display: inline-block; margin-top: 7px; font-size: 11px; color: var(--md-on-surface-variant); }
1112
- .md3 .pp-mlabel--good { color: var(--md-good); font-weight: 700; }
1113
- /* activity now sits under the CTA */
1114
- .md3 .pp-cta + .pp-activity, .md3 .listcard-price > div > .pp-activity { margin-top: 10px; justify-content: center; }
1115
- .md3 .pp-bar { position: relative; height: 6px; border-radius: 999px; margin-top: 9px;
1116
- background: linear-gradient(90deg, var(--md-good) 0%, #E8B500 58%, #E8601A 100%); }
1117
- .md3 .pp-bar-dot { position: absolute; top: 50%; width: 13px; height: 13px; border-radius: 50%; background: #fff;
1118
- border: 2.5px solid var(--md-on-surface); transform: translate(-50%, -50%); box-shadow: var(--md-e1); }
1119
- /* muted buyer activity (#5) */
1120
- .md3 .pp-activity { display: flex; align-items: center; gap: 5px; margin-top: 12px; font-size: 11px;
1121
- color: var(--md-on-surface-variant); white-space: nowrap; }
1122
- .md3 .pp-activity svg { flex: none; }
1123
- .md3 .gallery-img { width: 100%; height: 420px; object-fit: cover; display: block; background: var(--md-sc); }
1124
- .md3 .sec { padding: 48px 24px 0; }
1125
-
1126
- /* mobile app bar / bottom bar visibility */
1127
- .md3 .show-mobile { display: none !important; }
1128
- .md3 .show-tablet { display: none !important; } /* visible ≤980 — tablet AND phone */
1129
- .md3 .srp-sort { width: 186px; }
1130
- .md3 .srp-sort select { font-size: 13px; }
1131
- .md3 .srp-sort .lucide { pointer-events: none; } /* let taps fall through to the native select */
1132
- .md3 .price-card { position: sticky; top: 88px; }
1133
-
1134
- /* CDP offer card — payment-type tabs on top (MD3 underline / primary tabs) */
1135
- .md3 .fin-tabs { display: flex; border-bottom: 1px solid var(--md-outline-variant); margin-bottom: 18px; }
1136
- .md3 .fin-tab { flex: 1; background: none; border: 0; padding: 11px 4px; cursor: pointer; font: inherit;
1137
- font-size: 13.5px; font-weight: 600; color: var(--md-on-surface-variant); border-bottom: 2px solid transparent;
1138
- margin-bottom: -1px; transition: color .15s, border-color .15s; }
1139
- .md3 .fin-tab.on { color: var(--md-primary); border-bottom-color: var(--md-primary); }
1140
- .md3 .fin-tab:hover:not(.on) { color: var(--md-on-surface); }
1141
- /* 2-col grid: left grows, right fixed 148px — pill (row 1) and bar (row 2) share a column edge, never wrap */
1142
- .md3 .fin-price-grid { display: grid; grid-template-columns: 1fr 148px; gap: 6px 16px; align-items: center; margin-top: 8px; }
1143
- .md3 .fin-rate-main { min-width: 0; }
1144
- /* rating pill — light tier-tinted bg, tier-colored text + icon (bg/color set inline per tier) */
1145
- .md3 .fin-eval-pill { display: inline-flex; align-items: center; gap: 5px; padding: 6px 13px;
1146
- border-radius: var(--md-r-full); font-size: 14px; font-weight: 700; line-height: 1; white-space: nowrap; }
1147
- .md3 .fin-eval-pill .lucide { flex: none; }
1148
- /* gradient spectrum bar + circle thumb — replaces opacity-segment design */
1149
- .md3 .fin-eval-bar { position: relative; width: 100%; height: 9px; border-radius: 5px;
1150
- background: linear-gradient(to right, #0F7B43, #72C02C, #FFC107, #FF6B35, #C62828); }
1151
- .md3 .fin-eval-thumb { position: absolute; top: 50%; transform: translate(-50%, -50%);
1152
- width: 17px; height: 17px; border-radius: 50%; background: #fff;
1153
- border: 3px solid currentColor; box-shadow: 0 1px 4px rgba(0,0,0,.3); pointer-events: none; }
1154
- /* UVP (struck list price) — cash mode only */
1155
- .md3 .fin-kauf { margin-top: 8px; font-size: 13px; color: var(--md-on-surface-variant); }
1156
- .md3 .fin-kauf s { color: var(--md-error); }
1157
- /* condition summary — left cell of row 2 in fin-price-grid */
1158
- .md3 .fin-cond { min-width: 0; font-size: 12.5px; color: var(--md-on-surface-variant); }
1159
- /* Rate-edit (Rate anpassen) sits between the rate and the CTA now */
1160
- .md3 .fin-adjust { margin-top: 14px; }
1161
- /* auto.de-ID in front of the Finanzierungs-/Leasingdetails link — one row, divider above */
1162
- .md3 .fin-info { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--md-outline-variant);
1163
- display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
1164
- .md3 .fin-id { font-size: 12px; color: var(--md-on-surface-variant); white-space: nowrap; }
1165
- /* phone CTA — useful only on touch; hidden on desktop, shown ≤980 (tablet + phone) */
1166
- .md3 .fin-call { display: none; margin-top: 8px; }
1167
- /* Laufzeit as selectable chips — 4-column grid, filled selected state */
1168
- .md3 .term-chips { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
1169
- .md3 .term-chip { display: flex; align-items: center; justify-content: center; gap: 3px; height: 42px; padding: 0;
1170
- cursor: pointer; border-radius: 10px; border: 1.5px solid var(--md-outline-variant); background: var(--md-surface);
1171
- color: var(--md-on-surface); font: inherit; font-size: 15px; font-weight: 700;
1172
- transition: background .15s, border-color .15s, color .15s; }
1173
- .md3 .term-chip .tc-unit { font-size: 11px; font-weight: 500; color: var(--md-on-surface-variant); }
1174
- .md3 .term-chip:hover:not(.on) { border-color: var(--md-primary); background: color-mix(in srgb, var(--md-primary) 6%, transparent); }
1175
- .md3 .term-chip.on { background: var(--md-primary); border-color: var(--md-primary); color: #fff; }
1176
- .md3 .term-chip.on .tc-unit { color: rgba(255,255,255,.7); }
1177
-
1178
- /* enriched vehicle enquiry — trust aside + form */
1179
- .md3 .enquiry-grid { display: grid; grid-template-columns: 0.85fr 1.15fr; align-items: stretch; }
1180
- .md3 .enquiry-aside { background: var(--md-sc-low); padding: 24px; border-right: 1px solid var(--md-outline-variant);
1181
- display: flex; flex-direction: column; }
1182
- .md3 .enquiry-ico { width: 36px; height: 36px; border-radius: var(--md-r-full); background: var(--md-primary-container);
1183
- display: flex; align-items: center; justify-content: center; flex: none; }
1184
- .md3 .enquiry-benefits { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 11px; }
1185
- .md3 .enquiry-benefits li { display: flex; align-items: center; gap: 10px; font-size: 13.5px; color: var(--md-on-surface); }
1186
- .md3 .enquiry-benefits li .lucide { flex: none; }
1187
- .md3 .enquiry-phone { display: inline-flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 18px;
1188
- color: var(--md-primary); font-weight: 700; font-size: 16px; text-decoration: none; }
1189
- .md3 .enquiry-form { padding: 24px; }
1190
- @media (max-width: 780px) {
1191
- .md3 .enquiry-grid { grid-template-columns: 1fr; }
1192
- .md3 .enquiry-aside { border-right: 0; border-bottom: 1px solid var(--md-outline-variant); }
1193
- .md3 .enquiry-phone { margin-top: 16px; }
1194
- }
1195
-
1196
- /* sticky mobile CTA bar (VDP) */
1197
- .md3 .vdp-bottom-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; background: var(--md-sc-lowest);
1198
- border-top: 1px solid var(--md-outline-variant); box-shadow: 0 -2px 14px rgba(0,0,0,.10);
1199
- padding: 10px 16px; align-items: center; gap: 14px; }
1200
-
1201
- /* bottom-sheet (SRP filters) — sticky header + scrollable body + sticky action bar, slide-up entrance */
1202
- .md3 .sheet-scrim { position: fixed; inset: 0; background: rgba(16,22,42,.5); z-index: 70;
1203
- animation: sheet-fade var(--dur-2) var(--ease-standard); }
1204
- .md3 .sheet { position: fixed; left: 0; right: 0; bottom: 0; z-index: 71; background: var(--md-surface);
1205
- border-radius: var(--md-r-xl) var(--md-r-xl) 0 0; max-height: 92vh; display: flex; flex-direction: column;
1206
- box-shadow: 0 -8px 30px rgba(16,22,42,.22); animation: sheet-up var(--dur-3) var(--ease-emphasized); }
1207
- /* non-scrolling header: drag handle + title + reset + close */
1208
- .md3 .sheet-head { flex: none; padding: 0 16px; background: var(--md-surface);
1209
- border-radius: var(--md-r-xl) var(--md-r-xl) 0 0; border-bottom: 1px solid var(--md-outline-variant); }
1210
- .md3 .sheet-handle { width: 36px; height: 4px; border-radius: 2px; background: var(--md-outline-variant); margin: 10px auto 6px; }
1211
- .md3 .sheet-head-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 2px 0 10px; }
1212
- .md3 .sheet-head-row h2 { margin: 0; font-size: 16px; font-weight: 700; }
1213
- /* scrollable filter body */
1214
- .md3 .sheet-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch;
1215
- overscroll-behavior: contain; padding: 2px 16px 6px; }
1216
- /* sticky action bar */
1217
- .md3 .sheet-foot { flex: none; padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); background: var(--md-surface);
1218
- border-top: 1px solid var(--md-outline-variant); box-shadow: 0 -6px 18px rgba(16,22,42,.08); }
1219
- @keyframes sheet-up { from { transform: translateY(100%); } to { transform: translateY(0); } }
1220
- @keyframes sheet-fade { from { opacity: 0; } to { opacity: 1; } }
1221
-
1222
- /* Finanzierungs-/Leasingdetails popup — centered modal (desktop), bottom-sheet (mobile) */
1223
- .md3 .fin-modal-scrim { position: fixed; inset: 0; z-index: 60; background: rgba(8,12,24,.5);
1224
- display: flex; align-items: center; justify-content: center; padding: 24px; animation: sheet-fade var(--dur-2); }
1225
- .md3 .fin-modal { background: var(--md-sc-lowest); border-radius: var(--md-r-lg); width: 100%; max-width: 460px;
1226
- max-height: 88vh; display: flex; flex-direction: column; overflow: hidden; box-shadow: var(--md-e3); }
1227
- .md3 .fin-modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px;
1228
- padding: 16px 20px; border-bottom: 1px solid var(--md-outline-variant); flex: none; }
1229
- .md3 .fin-modal-body { padding: 18px 20px 22px; overflow-y: auto; }
1230
- @media (max-width: 600px) {
1231
- .md3 .fin-modal-scrim { align-items: flex-end; padding: 0; }
1232
- .md3 .fin-modal { max-width: none; max-height: 90vh; border-radius: var(--md-r-lg) var(--md-r-lg) 0 0;
1233
- animation: sheet-up var(--dur-2); }
1234
- }
1235
-
1236
- /* mobile dropdown menu (TopBar) */
1237
- .md3 .topbar-menu { position: absolute; top: 100%; left: 0; right: 0; background: var(--md-surface);
1238
- border-bottom: 1px solid var(--md-outline-variant); box-shadow: var(--md-e2); padding: 8px 16px 16px; }
1239
- /* language segmented DE|EN — active tab filled, inactive ghost */
1240
- .md3 .lang-seg { display: inline-flex; align-items: center; border: 1.5px solid var(--md-outline-variant);
1241
- border-radius: var(--md-r-full); overflow: hidden; flex: none; }
1242
- .md3 .lang-seg-btn { display: flex; align-items: center; justify-content: center; height: 32px; padding: 0 11px;
1243
- font: inherit; font-size: 11.5px; font-weight: 700; letter-spacing: .5px; cursor: pointer;
1244
- border: 0; background: transparent; color: var(--md-on-surface-variant); transition: background .15s, color .15s; }
1245
- .md3 .lang-seg-btn:first-child { border-right: 1.5px solid var(--md-outline-variant); }
1246
- .md3 .lang-seg-btn.on { background: var(--md-primary); color: #fff; }
1247
- .md3 .lang-seg-btn:not(.on):hover { background: color-mix(in srgb, var(--md-primary) 8%, transparent); }
1248
- .md3 .hero-spacer { display: none; }
1249
-
1250
- @media (max-width: 980px) {
1251
- .md3 .continue-grid { grid-template-columns: 1fr; gap: 24px; }
1252
- .md3 .hero-grid { grid-template-columns: 1fr; gap: 24px; }
1253
- .md3 .listcard { grid-template-columns: 260px 1fr; }
1254
- /* tablet: price column spans full width below image+info, zones stack in a normal column */
1255
- .md3 .listcard-price { grid-column: 1 / -1; border-left: 0; border-top: 1px solid var(--md-outline-variant);
1256
- flex-direction: column; justify-content: flex-start; gap: 12px; }
1257
- .md3 .listcard-price .pp-activity { display: none; }
1258
- .md3 .hero-inner { padding: 32px 20px 28px; }
1259
- .md3 .cards-3 { grid-template-columns: repeat(2,1fr); }
1260
- .md3 .brand-grid { grid-template-columns: repeat(4,1fr); }
1261
- .md3 .steps-3 { grid-template-columns: 1fr; gap: 20px; }
1262
- .md3 .guarantee-grid { grid-template-columns: repeat(2,1fr); }
1263
- .md3 .gitem { border-left: 0; }
1264
- .md3 .gitem:nth-child(even) { border-left: 1px solid var(--md-outline-variant); }
1265
- .md3 .gitem:nth-child(n+3) { border-top: 1px solid var(--md-outline-variant); }
1266
- .md3 .mag-grid { grid-template-columns: 1fr; }
1267
- .md3 .zustand-grid { grid-template-columns: repeat(2, 1fr); }
1268
- .md3 .steps-4 { grid-template-columns: repeat(2, 1fr); gap: 20px; }
1269
- .md3 .hiw-step:not(:last-child)::after { display: none; }
1270
- .md3 .curated-grid { grid-template-columns: repeat(2,1fr); }
1271
- .md3 .footer-grid { grid-template-columns: repeat(3,1fr); gap: 24px; }
1272
- .md3 .hide-tablet { display: none !important; }
1273
- .md3 .show-tablet { display: flex !important; }
1274
- .md3 .srp-rail { display: none; } /* rail is desktop-only; ≤980 uses the filter sheet */
1275
- .md3 .srp-grid { grid-template-columns: 1fr; }
1276
- .md3 .vdp-grid { display: flex; flex-direction: column; }
1277
- .md3 .vdp-gallery { order: 1; } .md3 .vdp-aside { order: 2; } .md3 .vdp-details { order: 3; }
1278
- .md3 .vdp-aside { position: static; }
1279
- .md3 .price-card { position: static; }
1280
- .md3 .fin-call { display: block; } /* tap-to-call restored on touch */
1281
- .md3 .vdp-gallerybox { height: auto; aspect-ratio: 4 / 3; }
1282
- .md3 .press-wrap { position: static !important; }
1283
- .md3 .press-bar { transform: none !important; margin: 20px 16px 0 !important; height: auto !important;
1284
- padding: 14px 18px !important; flex-wrap: wrap; }
1285
- .md3 .hero-spacer { display: none !important; }
1286
- .md3 .gallery-img { height: 320px; }
1287
- }
1288
-
1289
- @media (max-width: 600px) {
1290
- .md3 .cards-3, .md3 .cards-2 { grid-template-columns: 1fr; }
1291
- /* listing card stacks: image (4:3) → info → price */
1292
- .md3 .listcard { grid-template-columns: 1fr; }
1293
- .md3 .listcard-media { aspect-ratio: 4 / 3; min-height: 0; }
1294
- .md3 .listcard-price { border-left: 0; border-top: 1px solid var(--md-outline-variant); padding: 14px 16px;
1295
- flex-direction: column; justify-content: flex-start; align-items: stretch; gap: 14px; }
1296
- .md3 .listcard-price .pricepaths { flex: none; min-width: 0; }
1297
- /* only the data-less activity line is hidden on phone */
1298
- .md3 .listcard-price .pp-activity { display: none; }
1299
- .md3 .listcard-price .pp-cta { margin-top: 0; }
1300
- .md3 .listcard-price .mbtn { width: 100%; margin-top: 0 !important; }
1301
- .md3 .listcard-price .pp-meter-block { margin-top: 0; padding-top: 0; }
1302
- .md3 .listcard-info { padding: 14px 16px 6px; }
1303
- /* mobile: show all spec facts (km/EZ/Getriebe/Kraftstoff/Leistung/… wrap to 2 lines) — the
1304
- 4-fact cap dropped Leistung (kW/PS) + Verfügbarkeit, which the legacy mobile card shows. */
1305
- .md3 .listcard-chips { flex-wrap: nowrap !important; overflow: hidden; }
1306
- .md3 .listcard-chips > :nth-child(n+3) { display: none; }
1307
- .md3 .srp-main { padding: 12px 16px 64px !important; }
1308
- .md3 .srp-sort { width: 146px; }
1309
- /* save-search banner: full-width button on phone (!important beats the inline desktop flex) */
1310
- .md3 .savesearch { flex-wrap: wrap; }
1311
- .md3 .savesearch > div { flex: 1 1 calc(100% - 56px) !important; }
1312
- .md3 .savesearch .mbtn { flex: 1 1 100% !important; justify-content: center; }
1313
- .md3 .srp-bar { position: sticky; top: 64px; z-index: 20; background: var(--md-surface); padding: 8px 0; margin: 0 0 8px;
1314
- box-shadow: 0 6px 8px -8px rgba(0,0,0,.3); }
1315
- .md3 .field-grid-2 { grid-template-columns: 1fr; gap: 10px; }
1316
- .md3 .hero-search { padding: 18px !important; }
1317
- .md3 .brand-grid { grid-template-columns: repeat(3,1fr); gap: 12px; }
1318
- .md3 .footer-grid { grid-template-columns: repeat(2,1fr); gap: 20px; }
1319
- .md3 .vdp-specs { grid-template-columns: 1fr; gap: 14px; }
1320
- /* spec table clamps to 6 rows on phone until "Alle Daten anzeigen" */
1321
- .md3 .vdp-specs--clamp .specitem:nth-child(n+7) { display: none; }
1322
- .md3 .gitem { padding: 20px 18px; }
1323
- .md3 .steps-4 { grid-template-columns: 1fr; gap: 18px; }
1324
- .md3 .hiw-step { flex-direction: row; align-items: flex-start; text-align: left; gap: 14px; }
1325
- .md3 .hiw-step:not(:last-child)::after { display: none; }
1326
- .md3 .hiw-icon-wrap { margin-bottom: 0; flex: none; }
1327
- /* --- VDP header card: structured phone layout --- */
1328
- /* badge above title (no cramped side-by-side) */
1329
- .md3 .vdp-headrow { flex-direction: column-reverse; align-items: flex-start; gap: 10px; }
1330
- /* facts: aligned 2-column grid instead of a wrapping dot-line */
1331
- .md3 .vdp-meta { display: grid; grid-template-columns: 1fr 1fr; gap: 11px 14px; margin-top: 14px; }
1332
- .md3 .vdp-meta > span + span::before { content: none; }
1333
- .md3 .vdp-meta > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1334
- /* highlights: one swipeable line, no ragged wrap */
1335
- .md3 .vdp-highlights { flex-wrap: nowrap !important; overflow-x: auto; scrollbar-width: none;
1336
- width: 0; min-width: 100%; }
1337
- .md3 .vdp-highlights::-webkit-scrollbar { display: none; }
1338
- .md3 .vdp-highlights .chip { flex: none; }
1339
- /* condition row: 2×2 on phone */
1340
- .md3 .zustand-grid { grid-template-columns: 1fr 1fr; }
1341
- .md3 .zustand-tile { border-left: 0; padding: 12px 0; }
1342
- .md3 .zustand-tile:nth-child(even) { border-left: 1px solid var(--md-outline-variant); padding-left: 14px; }
1343
- .md3 .zustand-tile:nth-child(n+3) { border-top: 1px solid var(--md-outline-variant); }
1344
- .md3 .curated-grid { grid-template-columns: 1fr; gap: 12px; }
1345
- .md3 .seen-row-cash { display: none; }
1346
- .md3 .lp-vs-row { flex-wrap: wrap; gap: 6px 10px; }
1347
- .md3 .lp-vs-verdict { flex: 1 1 100%; white-space: normal; order: 3; }
1348
- .md3 .budget-card { flex-direction: column; align-items: stretch; gap: 18px; padding: 20px; }
1349
- .md3 .budget-card .mbtn { width: 100%; justify-content: center; }
1350
- .md3 .finder-banner { flex-direction: column; align-items: stretch; gap: 16px; }
1351
- .md3 .finder-steps { justify-content: space-between; gap: 8px; }
1352
- .md3 .finder-steps .mbtn { display: none; }
1353
- /* SRP "Mehr laden": results beyond 4 stay hidden until expanded */
1354
- .md3 .srp-list:not(.srp-list--expanded) .srp-extra { display: none !important; }
1355
- .md3 .carrow { grid-template-columns: 1fr; }
1356
- .md3 .thumb-row { grid-template-columns: repeat(4,1fr); }
1357
- .md3 .sec { padding: 36px 16px 0; }
1358
- .md3 .hero-inner { padding: 24px 16px 22px; }
1359
- .md3 .gallery-img { height: 230px; }
1360
- .md3 .hide-mobile { display: none !important; }
1361
- .md3 .show-mobile { display: flex !important; }
1362
- .md3 .press-logos { flex-wrap: wrap; justify-content: center !important; gap: 14px 20px !important; }
1363
- .md3 .mbtn--lg { height: 46px; }
1364
- /* compact hero so the search card + button surface above the fold */
1365
- .md3 .hero-inner { padding: 16px 16px 18px !important; }
1366
- .md3 .hero-badge { margin-bottom: 10px !important; font-size: 12px !important; }
1367
- .md3 .hero-h1 { font-size: 31px !important; letter-spacing: -.9px !important; margin: 0 0 10px !important; }
1368
- .md3 .hero-sub { font-size: 14px !important; margin: 0 0 14px !important; }
1369
- .md3 .hero-stats { gap: 16px !important; }
1370
- .md3 .hero-stats .num{ font-size: 17px !important; }
1371
- .md3 .hero-stats .st-lbl { font-size: 11px !important; }
1372
- .md3 .hero-grid { gap: 16px !important; }
1373
- }
1374
-
1375
- /* ---------- CDP modules ---------- */
1376
- .md3 .mslider { -webkit-appearance: none; appearance: none; width: 100%; height: 6px; border-radius: var(--md-r-full);
1377
- background: var(--md-sc-highest); outline: 0; cursor: pointer; }
1378
- .md3 .mslider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 22px; height: 22px; border-radius: 50%;
1379
- background: var(--md-primary); border: 3px solid #fff; box-shadow: var(--md-e2); cursor: pointer; }
1380
- .md3 .mslider::-moz-range-thumb { width: 22px; height: 22px; border-radius: 50%; background: var(--md-primary); border: 3px solid #fff; box-shadow: var(--md-e2); cursor: pointer; }
1381
- .md3 .eq-cols { column-count: 2; column-gap: 32px; }
1382
- .md3 .pmv-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; }
1383
- /* trust strip — quiet one-line reassurance, NOT a card band */
1384
- .md3 .trust-strip { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; row-gap: 10px; padding: 2px 4px; }
1385
- .md3 .trust-strip > div { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
1386
- font-size: 13.5px; font-weight: 600; color: var(--md-on-surface-variant); }
1387
- .md3 .trust-strip > div + div::before { content: ''; width: 4px; height: 4px; border-radius: 50%;
1388
- background: var(--md-outline-variant); margin: 0 14px; }
1389
-
1390
- @media (max-width: 600px) {
1391
- .md3 .eq-cols { column-count: 1; }
1392
- .md3 .pmv-grid { grid-template-columns: 1fr; gap: 22px; }
1393
- .md3 .trust-strip { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 16px; justify-items: start; }
1394
- .md3 .trust-strip > div + div::before { content: none; }
1395
- }
1396
-
1397
- /* ---------- CO₂ / energy label — compact horizontal scale ---------- */
1398
- .md3 .co2-scale { display: flex; gap: 4px; align-items: stretch; }
1399
- .md3 .co2-seg { flex: 1; height: 32px; border-radius: 7px; color: #fff; font-weight: 800; font-size: 12.5px;
1400
- display: flex; align-items: center; justify-content: center; opacity: .3; transition: opacity var(--dur-2) var(--ease-standard); }
1401
- .md3 .co2-seg--on { opacity: 1; box-shadow: 0 2px 8px rgba(16,22,42,.25), 0 0 0 2px #fff inset; transform: scale(1.06); }
1402
- .md3 .co2-stats { display: flex; flex-wrap: wrap; gap: 10px 26px; margin-bottom: 16px; }
1403
- .md3 .dealer-map { position: relative; height: 130px; border-radius: var(--md-r-sm); overflow: hidden;
1404
- background: #e8edf3;
1405
- background-image:
1406
- linear-gradient(rgba(11,83,204,.07) 1px, transparent 1px),
1407
- linear-gradient(90deg, rgba(11,83,204,.07) 1px, transparent 1px),
1408
- linear-gradient(120deg, #dfe6ee, #eef2f7);
1409
- background-size: 26px 26px, 26px 26px, 100% 100%; }
1410
- .md3 .dealer-map::after { content: ""; position: absolute; left: -10%; top: 60%; width: 130%; height: 10px;
1411
- background: rgba(22,184,232,.35); transform: rotate(-8deg); }
1412
- .md3 .dealer-pin { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-100%);
1413
- width: 34px; height: 34px; border-radius: 50% 50% 50% 0; background: var(--md-primary);
1414
- display: flex; align-items: center; justify-content: center; rotate: 45deg; box-shadow: var(--md-e2); }
1415
- .md3 .dealer-pin .lucide { rotate: -45deg; }
1416
-
1417
- /* VDP: floating back button over the gallery — phone only (breadcrumb is hidden there) */
1418
- .md3 .vdp-back { display: none; position: absolute; top: 12px; left: 14px; z-index: 3; }
1419
-
1420
- @media (max-width: 600px) {
1421
- /* full-bleed gallery: edge-to-edge, app-like (production pattern) */
1422
- .md3 .vdp-back { display: flex; }
1423
- .md3 .vdp-gallerybox { margin: -14px -24px 0; border-radius: 0; border: 0; box-shadow: none; }
1424
- }
1425
-
1426
- /* ---------- save-search bar ---------- */
1427
- .md3 .savesearch { display: flex; align-items: center; gap: 14px; }
1428
-
1429
- /* ---------- home: recent search, brand scroller ---------- */
1430
-
1431
- /* sell-your-car: petrol-cyan image banner (distinct from the hero blue) */
1432
- .md3 .sell-band { position: relative; overflow: hidden; padding: 32px 36px; border: 0; min-height: 190px;
1433
- background: linear-gradient(115deg, #04293C 0%, #075A75 58%, #0A7FA0 100%); display: flex; align-items: center; }
1434
- .md3 .sell-copy { position: relative; z-index: 1; max-width: 60%; min-width: 0; }
1435
- .md3 .sell-steps { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
1436
- .md3 .sell-car { position: absolute; right: -28px; bottom: -24px; width: 400px; max-width: 44%; object-fit: contain;
1437
- filter: drop-shadow(0 24px 32px rgba(0,0,0,.4)); }
1438
-
1439
- /* SEO directory */
1440
- .md3 .seo-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 28px; }
1441
-
1442
- /* offers grid: dense 2-col on phone */
1443
- @media (max-width: 600px) {
1444
- .md3 .cards-offers { grid-template-columns: 1fr; gap: 14px; }
1445
- .md3 .seo-grid { grid-template-columns: 1fr 1fr; gap: 22px; }
1446
- .md3 .sell-band { padding: 22px 18px; }
1447
- .md3 .sell-copy { max-width: 100%; }
1448
- }
1449
- .md3 .recent-search { display: flex; align-items: center; gap: 14px; padding: 12px 16px; background: var(--md-sc-lowest); }
1450
- .md3 .recent-ic { width: 40px; height: 40px; border-radius: var(--md-r-full); background: var(--md-primary-container);
1451
- display: flex; align-items: center; justify-content: center; flex: none; }
1452
- .md3 .brand-scroller { gap: 12px; padding-bottom: 6px; }
1453
- .md3 .brand-chip { flex: none; background: none; border: 0; cursor: pointer; display: flex; flex-direction: column;
1454
- align-items: center; gap: 8px; width: 84px; padding: 4px; }
1455
- .md3 .brand-circle { width: 64px; height: 64px; border-radius: 50%; background: var(--md-sc-lowest);
1456
- box-shadow: var(--md-e1); display: flex; align-items: center; justify-content: center;
1457
- transition: box-shadow var(--dur-1) var(--ease-standard), transform var(--dur-1) var(--ease-standard); }
1458
- .md3 .brand-chip:hover .brand-circle { box-shadow: var(--md-e3); transform: translateY(-2px); }
1459
-
1460
- /* ---------- Landing page ---------- */
1461
- .md3 .lp-hero { display: grid; grid-template-columns: 1fr auto; gap: 32px; align-items: center; }
1462
- .md3 .lp-stats { display: flex; gap: 26px; padding: 18px 24px; border-radius: var(--md-r-md); background: rgba(255,255,255,.10); flex: none; }
1463
- .md3 .lp-text { display: grid; grid-template-columns: 1fr 1fr; gap: 36px; align-items: start; }
1464
- .md3 .lp-models { display: grid; grid-template-columns: repeat(auto-fill, minmax(176px, 1fr)); gap: 12px; }
1465
- .md3 .lp-model-tile { padding: 13px 16px; text-align: left; background: var(--md-sc-lowest); display: flex; flex-direction: column; gap: 3px; }
1466
- .md3 .lp-duo { display: grid; grid-template-columns: 1.25fr 1fr; gap: 18px; align-items: stretch; }
1467
- .md3 .lp-table-head { display: grid; grid-template-columns: 1fr 96px 110px; gap: 12px; padding: 8px 0;
1468
- font-size: 11.5px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase; color: var(--md-on-surface-variant);
1469
- border-bottom: 1px solid var(--md-outline-variant); }
1470
- .md3 .lp-table-head span:nth-child(n+2), .md3 .lp-table-row span:nth-child(n+2) { text-align: right; }
1471
- .md3 .lp-table-row { display: grid; grid-template-columns: 1fr 96px 110px; gap: 12px; align-items: center;
1472
- width: 100%; padding: 11px 0; background: none; border: 0; cursor: pointer; text-align: left;
1473
- border-bottom: 1px solid var(--md-outline-variant); font-family: inherit; font-size: 14px; color: var(--md-on-surface); }
1474
- .md3 .lp-table-row:last-child { border-bottom: 0; }
1475
- .md3 .lp-table-row:hover .md-title-sm { color: var(--md-primary); }
1476
- @media (max-width: 900px) {
1477
- .md3 .lp-hero { grid-template-columns: 1fr; gap: 22px; }
1478
- .md3 .lp-stats { align-self: start; }
1479
- .md3 .lp-text { grid-template-columns: 1fr; gap: 28px; }
1480
- .md3 .lp-duo { grid-template-columns: 1fr; }
1481
- }
1482
- @media (max-width: 600px) {
1483
- .md3 .lp-stats { gap: 18px; padding: 14px 16px; width: 100%; justify-content: space-between; }
1484
- /* phone: model tiles collapse to ONE swipeable row so cars stay near the top */
1485
- .md3 .lp-models { display: flex; overflow-x: auto; gap: 10px; scrollbar-width: none; padding-bottom: 4px; }
1486
- .md3 .lp-models::-webkit-scrollbar { display: none; }
1487
- .md3 .lp-model-tile { flex: none; padding: 10px 14px; }
1488
- .md3 .lp-table-head, .md3 .lp-table-row { grid-template-columns: 1fr 82px 92px; gap: 8px; }
1489
- }
1490
-
1491
- /* ---------- Dealer Dashboard — md3 card chrome (.dash-*) ----------
1492
- Additive: these are scoped under .md3 so they ONLY apply when the dashboard
1493
- renders inside the flagged `md3 dlr-page` root. The legacy variant has no
1494
- .md3 ancestor → none of these match → legacy look is byte-identical. */
1495
- .md3 .dash-page-title { font: 700 28px var(--md-font); color: var(--md-on-surface); margin: 0 0 24px; letter-spacing: -.4px; }
1496
- .md3 .dash-card { background: var(--md-surface, #fff); border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); box-shadow: var(--md-e1); padding: 20px; margin-bottom: 20px; min-height: auto; }
1497
- .md3 .dash-card-title { font: 700 17px var(--md-font); color: var(--md-on-surface); margin: 0 0 14px; }
1498
- .md3 .dash-link { display: inline-block; margin-top: 16px; font: 600 14px var(--md-font); color: var(--md-primary); text-decoration: none; }
1499
- .md3 .dash-link:hover { text-decoration: underline; }
1500
- .md3 .dash-link--primary { background: var(--md-primary); color: #fff; padding: 10px 18px; border-radius: var(--md-r-full); box-shadow: var(--md-e1); }
1501
- .md3 .dash-link--primary:hover { text-decoration: none; opacity: .92; }
1502
- .md3 .dash-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
1503
- .md3 .dash-table th { text-align: left; font: 600 12.5px var(--md-font); color: var(--md-on-surface-variant); padding: 6px 8px; border-bottom: 1px solid var(--md-outline-variant); }
1504
- .md3 .dash-table td { padding: 9px 8px; border-bottom: 1px solid var(--md-outline-variant); color: var(--md-on-surface); vertical-align: middle; }
1505
- .md3 .dash-table tr:last-child td { border-bottom: 0; }
1506
-
1507
- /* ============================================================================
1508
- LEGACY → md3 IN-PLACE BRIDGE (account / dealer / admin pages)
1509
- ----------------------------------------------------------------------------
1510
- Restyles the legacy MUI / fe-ui-core primitives to md3 tokens WITHOUT changing
1511
- any structure or layout. Scoped under `.md3`, so it only affects the flagged
1512
- legacy pages (which wrap their unchanged legacy markup in a `.md3` root).
1513
- • SRP / VDP / Detailsuche / Checkout / Auth use the autobahn primitives (not
1514
- MUI) → unaffected. • MUI Slider is intentionally NOT touched (used by the
1515
- SRP filters). • Modals render in a body portal (outside `.md3`) → unchanged.
1516
- Items move to md3 in place; positions/grids stay exactly as the legacy layout.
1517
- ============================================================================ */
1518
-
1519
- /* — Buttons (fe-ui-core Button === @mui/material Button) — */
1520
- .md3 .MuiButton-root { font-family: var(--md-font) !important; text-transform: none !important; border-radius: var(--md-r-full) !important; font-weight: 600 !important; letter-spacing: normal !important; box-shadow: none !important; }
1521
- .md3 .MuiButton-root:hover { box-shadow: none !important; }
1522
- .md3 .MuiButton-containedPrimary:not(.Mui-disabled) { background-color: var(--md-primary) !important; color: var(--md-on-primary) !important; }
1523
- .md3 .MuiButton-containedPrimary:not(.Mui-disabled):hover { background-color: var(--autode-blau-strong) !important; }
1524
- .md3 .MuiButton-containedSecondary:not(.Mui-disabled) { background-color: var(--md-error) !important; color: #fff !important; }
1525
- .md3 .MuiButton-outlinedPrimary:not(.Mui-disabled) { border: 1px solid var(--md-primary) !important; color: var(--md-primary) !important; background: transparent !important; }
1526
- .md3 .MuiButton-textPrimary, .md3 .MuiButton-text { color: var(--md-primary) !important; }
1527
- .md3 .MuiButton-textError, .md3 .MuiButton-outlinedError { color: var(--md-error) !important; }
1528
-
1529
- /* — Outlined inputs: TextField / FormMaterialField / Autocomplete / DatePicker — */
1530
- .md3 .MuiOutlinedInput-root { border-radius: var(--md-r-sm) !important; font-family: var(--md-font) !important; }
1531
- .md3 .MuiOutlinedInput-notchedOutline { border-color: var(--md-outline-variant) !important; }
1532
- .md3 .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline { border-color: var(--md-outline) !important; }
1533
- .md3 .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: var(--md-primary) !important; border-width: 2px !important; }
1534
- .md3 .MuiInputLabel-root { font-family: var(--md-font) !important; }
1535
- .md3 .MuiInputLabel-root.Mui-focused { color: var(--md-primary) !important; }
1536
- .md3 .MuiInputBase-input, .md3 .MuiInputBase-root { font-family: var(--md-font) !important; }
1537
-
1538
- /* — Tabs (Einstellungen) — */
1539
- .md3 .MuiTab-root { font-family: var(--md-font) !important; text-transform: none !important; font-weight: 600 !important; }
1540
- .md3 .MuiTab-root.Mui-selected { color: var(--md-primary) !important; }
1541
- .md3 .MuiTabs-indicator { background-color: var(--md-primary) !important; }
1542
-
1543
- /* — Selection controls — */
1544
- .md3 .MuiCheckbox-root.Mui-checked, .md3 .MuiRadio-root.Mui-checked { color: var(--md-primary) !important; }
1545
- .md3 .MuiSwitch-switchBase.Mui-checked { color: var(--md-primary) !important; }
1546
- .md3 .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track { background-color: var(--md-primary) !important; }
1547
-
1548
- /* — MUI tables (where used) — */
1549
- .md3 .MuiTableCell-root { font-family: var(--md-font) !important; }
1550
- .md3 .MuiTableCell-head { font-weight: 600 !important; color: var(--md-on-surface-variant) !important; }
1551
-
1552
- /* — headings inside legacy pages pick up the md3 display face — */
1553
- .md3 h1, .md3 h2, .md3 h3 { font-family: var(--md-font-display); }
1554
-
1555
-
1556
- /* =====================================================================
1557
- md3 KIT PRIMITIVES (Group-B in-place rebuild) — auto-integrated
1558
- ===================================================================== */
1559
-
1560
- /* ── FormDropdown (mfd-) — md3 mobx-form dropdown adapter ──────────────────────────
1561
- Single-select reuses the base Dropdown (.mselect-*); only label/error wrapper +
1562
- an error ring are added here. Multi-select reuses .mselect-* and adds chips +
1563
- a checklist. All selectors scoped under .md3, unique `mfd-` prefix. */
1564
- .md3 .mfd { display: flex; flex-direction: column; gap: 6px; }
1565
- .md3 .mfd-label { color: var(--md-on-surface-variant); font-weight: 600; }
1566
- .md3 .mfd-error { color: var(--md-error); font-size: 12px; line-height: 1.35; }
1567
-
1568
- /* error ring on the single-select trigger (base Dropdown puts `className` on the
1569
- .mselect wrapper, so reach the inner button from there). */
1570
- .md3 .mselect.mfd-invalid .mselect-btn,
1571
- .md3 .mselect-btn.mfd-invalid { box-shadow: inset 0 0 0 2px var(--md-error); }
1572
- .md3 .mselect.mfd-invalid .mselect-btn[aria-expanded="true"],
1573
- .md3 .mselect-btn.mfd-invalid[aria-expanded="true"] { box-shadow: inset 0 0 0 2px var(--md-error); }
1574
-
1575
- /* ── multi-select ──────────────────────────────────────────────────────────── */
1576
- .md3 .mfd-multi { position: relative; display: block; width: 100%; }
1577
- /* taller, top-aligned trigger so wrapped chips don't clip; otherwise = .mselect-btn. */
1578
- .md3 .mfd-multi-btn { height: auto; min-height: 48px; align-items: flex-start; padding: 7px 14px; }
1579
- .md3 .mfd-multi-btn .mselect-chev { align-self: center; }
1580
-
1581
- .md3 .mfd-chips { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; gap: 6px; padding: 1px 0; }
1582
- .md3 .mfd-chip { display: inline-flex; align-items: center; gap: 4px; height: 26px; padding: 0 4px 0 10px;
1583
- border-radius: var(--md-r-full); background: var(--md-secondary-container);
1584
- color: var(--md-on-secondary-container); font-size: 12.5px; font-weight: 600; max-width: 100%; }
1585
- .md3 .mfd-chip-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1586
- .md3 .mfd-chip-x { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
1587
- border-radius: var(--md-r-full); cursor: pointer; color: var(--md-on-secondary-container); flex: none; }
1588
- .md3 .mfd-chip-x:hover { background: rgba(0,0,0,.10); }
1589
- .md3 .mfd-chip-x .lucide { width: 13px; height: 13px; }
1590
-
1591
- /* checklist menu — same surface as .mselect-menu (declared explicitly so it works
1592
- even if the base rule is order-sensitive). */
1593
- .md3 .mfd-multi-menu { padding: 6px; }
1594
- .md3 .mfd-multi-opt { gap: 10px; }
1595
- .md3 .mfd-multi-opt.is-checked { color: var(--md-primary); font-weight: 600; }
1596
- .md3 .mfd-check { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
1597
- flex: none; border-radius: var(--md-r-xs); box-shadow: inset 0 0 0 1.5px var(--md-outline-variant);
1598
- color: #fff; transition: background .12s, box-shadow .12s; }
1599
- .md3 .mfd-check--on { background: var(--md-primary); box-shadow: inset 0 0 0 1.5px var(--md-primary); }
1600
- .md3 .mfd-check .lucide { width: 13px; height: 13px; }
1601
-
1602
- /* ── FormCheckbox (md3 checkbox bound to a mobx-react-form field) ─────────── */
1603
- .md3 .mcheck-group { display: flex; flex-direction: column; gap: 6px; }
1604
-
1605
- /* 44px touch target: the label is the hit area; the visual box sits centred inside. */
1606
- .md3 .mcheck { display: inline-flex; align-items: flex-start; gap: 12px; cursor: pointer;
1607
- min-height: 44px; padding: 4px 0; font-family: var(--md-font); color: var(--md-on-surface);
1608
- -webkit-tap-highlight-color: transparent; }
1609
- .md3 .mcheck--disabled { cursor: not-allowed; opacity: .55; }
1610
-
1611
- /* visually-hidden native input — keeps it focusable + semantic; the .mcheck-box is the visual. */
1612
- .md3 .mcheck-input { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
1613
- border: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
1614
-
1615
- .md3 .mcheck-box { flex: none; box-sizing: border-box; display: inline-flex; align-items: center;
1616
- justify-content: center; width: 20px; height: 20px; margin-top: 10px; border-radius: var(--md-r-sm);
1617
- border: 2px solid var(--md-outline-variant); background: var(--md-sc-lowest);
1618
- transition: background .15s, border-color .15s, box-shadow .15s; }
1619
- .md3 .mcheck-input:checked + .mcheck-box { background: var(--md-primary); border-color: var(--md-primary); }
1620
- .md3 .mcheck-tick { color: var(--md-on-primary); }
1621
-
1622
- /* keyboard focus ring on the visual box (input itself is hidden). */
1623
- .md3 .mcheck-input:focus-visible + .mcheck-box { outline: 2px solid var(--md-primary);
1624
- outline-offset: 2px; box-shadow: var(--md-e1); }
1625
-
1626
- .md3 .mcheck:hover .mcheck-input:not(:checked):not(:disabled) + .mcheck-box { border-color: var(--md-on-surface-variant); }
1627
-
1628
- .md3 .mcheck-label { font-size: 14px; line-height: 1.5; padding-top: 7px; color: var(--md-on-surface); }
1629
- /* rich labels (T&C/permission) — links pick up the brand colour. */
1630
- .md3 .mcheck-label a { color: var(--md-primary); text-decoration: underline; }
1631
- .md3 .mcheck-label a:hover { color: var(--autode-blau-strong); }
1632
-
1633
- /* error state ('required' / 'boolean' / 'accepted' rule) — red box + inline message. */
1634
- .md3 .mcheck-group--error .mcheck-input:not(:checked) + .mcheck-box { border-color: var(--md-error); }
1635
- .md3 .mcheck-error-text { color: var(--md-error); font-size: 12px; line-height: 1.35; }
1636
-
1637
- /* ─── md3 radio group + selectable radio (FormRadioGroup / FormRadio) ─────────────
1638
- Drop-in re-skin of the legacy fe-ui-core RadioGroup / CheckboxMaterial(radio) used on
1639
- DealerEmployeeSet, Checkout, and the RICH VehicleEdit/VehicleAdd radios (color swatches,
1640
- emission stickers, interior icons, energy bars, DAT-model grids). The group is a flex-wrap
1641
- set; each radio is a selectable surface wrapping ARBITRARY children with a selected ring.
1642
- Unique prefix: .mradio* (reuses .mfield-error-text for the inline error). */
1643
- .md3 .mradio-group { display: flex; flex-direction: column; gap: 6px; }
1644
- .md3 .mradio-set { display: flex; flex-wrap: wrap; gap: 10px; align-items: stretch; }
1645
-
1646
- /* the selectable wrapper — an md3 outlined surface; the hidden native radio drives state */
1647
- .md3 .mradio {
1648
- position: relative; display: inline-flex; align-items: center; gap: 10px;
1649
- min-height: 44px; padding: 8px 14px; box-sizing: border-box; cursor: pointer;
1650
- border-radius: var(--md-r-sm); background: var(--md-surface); color: var(--md-on-surface);
1651
- box-shadow: inset 0 0 0 1px var(--md-outline-variant);
1652
- font-family: var(--md-font); font-size: 14px; line-height: 1.3;
1653
- transition: box-shadow .15s, background .15s, color .15s;
1654
- -webkit-tap-highlight-color: transparent;
1655
- }
1656
- .md3 .mradio:hover { background: var(--md-surface-variant, var(--md-sc, #eceef4)); }
1657
- .md3 .mradio-body { display: inline-flex; align-items: center; gap: 10px; min-width: 0; }
1658
- .md3 .mradio-body > img { display: block; max-width: 100%; height: auto; }
1659
-
1660
- /* hidden but real radio input: keeps native exclusive-group + keyboard + a11y semantics */
1661
- .md3 .mradio-input {
1662
- position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; padding: 0;
1663
- pointer-events: none;
1664
- }
1665
-
1666
- /* selected: primary ring + tonal fill (md3 selected-state) */
1667
- .md3 .mradio--on {
1668
- background: var(--md-primary-container); color: var(--md-on-primary-container);
1669
- box-shadow: inset 0 0 0 2px var(--md-primary);
1670
- }
1671
- .md3 .mradio--on:hover { background: var(--md-primary-container); }
1672
-
1673
- /* keyboard focus ring on the wrapper when the hidden input is focused */
1674
- .md3 .mradio-input:focus-visible + .mradio-body { outline: none; }
1675
- .md3 .mradio:focus-within { box-shadow: inset 0 0 0 2px var(--md-primary); }
1676
-
1677
- /* error (group invalid, this option not chosen): red outline, matching .mfield--error */
1678
- .md3 .mradio--error { box-shadow: inset 0 0 0 2px var(--md-error); }
1679
- .md3 .mradio-set--error .mradio:not(.mradio--on) { box-shadow: inset 0 0 0 1px var(--md-error); }
1680
-
1681
- /* disabled */
1682
- .md3 .mradio--disabled { opacity: .5; cursor: not-allowed; }
1683
- .md3 .mradio--disabled:hover { background: var(--md-surface); }
1684
-
1685
- /* ── Accordion (macc) — md3 replacement for fe-ui-core ExpansionPanel / MUI Accordion ── */
1686
- .md3 .macc {
1687
- background: var(--md-sc-lowest);
1688
- border: 1px solid var(--md-outline-variant);
1689
- border-radius: var(--md-r-md);
1690
- overflow: hidden; /* clips the collapsing region to the rounded corners */
1691
- }
1692
- .md3 .macc + .macc { margin-top: 12px; }
1693
-
1694
- /* header — full-width button so it's keyboard/AT focusable (legacy AccordionSummary) */
1695
- .md3 .macc-hd {
1696
- display: flex;
1697
- align-items: center;
1698
- gap: 12px;
1699
- width: 100%;
1700
- padding: 16px 18px;
1701
- background: transparent;
1702
- border: 0;
1703
- margin: 0;
1704
- text-align: left;
1705
- font-family: var(--md-font);
1706
- color: var(--md-on-surface);
1707
- cursor: pointer;
1708
- -webkit-tap-highlight-color: transparent;
1709
- }
1710
- .md3 .macc-hd:hover { background: var(--md-sc-low); }
1711
- .md3 .macc-hd:focus-visible {
1712
- outline: 2px solid var(--md-primary);
1713
- outline-offset: -2px;
1714
- }
1715
-
1716
- /* title + subtitle stack; subtitle sits inline-after on wide rows, wraps under on narrow */
1717
- .md3 .macc-hd-text {
1718
- display: flex;
1719
- flex-wrap: wrap;
1720
- align-items: baseline;
1721
- gap: 4px 8px;
1722
- flex: 1 1 auto;
1723
- min-width: 0;
1724
- }
1725
- .md3 .macc-title { color: var(--md-on-surface); }
1726
- .md3 .macc-subtitle { color: var(--md-on-surface-variant); font-weight: 400; }
1727
-
1728
- /* header-right validation/status slot (page passes a <StatChip/> here) */
1729
- .md3 .macc-status { display: inline-flex; align-items: center; flex: 0 0 auto; }
1730
-
1731
- /* chevron rotates 0->180 on open (legacy arrowSelect / iconExpanded) */
1732
- .md3 .macc-chev {
1733
- flex: 0 0 auto;
1734
- color: var(--md-primary);
1735
- transition: transform 250ms ease-out;
1736
- }
1737
- .md3 .macc--open .macc-chev { transform: rotate(180deg); }
1738
-
1739
- /* collapsing region: grid 0fr->1fr is smoothly animatable and needs no magic max-height
1740
- (legacy used max-height:10000px). Children stay mounted so react-scroll anchors inside
1741
- remain measurable for sticky-sidebar jump-to-section. */
1742
- .md3 .macc-region {
1743
- display: grid;
1744
- grid-template-rows: 1fr;
1745
- opacity: 1;
1746
- transition: grid-template-rows 300ms ease, opacity 220ms ease;
1747
- }
1748
- .md3 .macc--closed .macc-region {
1749
- grid-template-rows: 0fr;
1750
- opacity: 0;
1751
- }
1752
- .md3 .macc-region-inner { overflow: hidden; min-height: 0; }
1753
- .md3 .macc-body { padding: 4px 18px 18px; }
1754
- /* closed panel content is non-interactive (mirrors aria-hidden) */
1755
- .md3 .macc--closed .macc-region { pointer-events: none; }
1756
-
1757
- @media (prefers-reduced-motion: reduce) {
1758
- .md3 .macc-chev,
1759
- .md3 .macc-region { transition: none; }
1760
- }
1761
-
1762
- /* ---- Modal (md3 dialog) ---- */
1763
- /* Portal root is a body-level div.md3, so these resolve via the scoped theme. */
1764
- .md3 .mmodal-scrim {
1765
- position: fixed; inset: 0; z-index: 1300;
1766
- display: flex; align-items: center; justify-content: center;
1767
- padding: 16px;
1768
- background: rgba(16, 22, 42, .5);
1769
- overflow-y: auto; overscroll-behavior: contain;
1770
- animation: mmodal-fade .14s ease-out;
1771
- }
1772
- .md3 .mmodal {
1773
- position: relative;
1774
- display: flex; flex-direction: column;
1775
- width: 100%; max-width: 560px;
1776
- max-height: calc(100vh - 32px);
1777
- background: var(--md-sc-lowest, #fff);
1778
- color: var(--md-on-surface);
1779
- border-radius: var(--md-r-lg);
1780
- border: 1px solid var(--md-outline-variant);
1781
- box-shadow: var(--md-e3);
1782
- font-family: var(--md-font);
1783
- outline: none;
1784
- animation: mmodal-pop .16s cubic-bezier(.2, .8, .2, 1);
1785
- }
1786
- .md3 .mmodal--sm { max-width: 420px; }
1787
- .md3 .mmodal--md { max-width: 560px; }
1788
- .md3 .mmodal--lg { max-width: 800px; }
1789
-
1790
- .md3 .mmodal-head {
1791
- flex: none;
1792
- display: flex; align-items: center; gap: 12px;
1793
- padding: 20px 16px 12px 24px;
1794
- }
1795
- .md3 .mmodal-title {
1796
- flex: 1 1 auto; min-width: 0;
1797
- margin: 0;
1798
- color: var(--md-on-surface);
1799
- }
1800
- .md3 .mmodal-head .icon-btn { flex: none; margin: -8px -4px -8px 0; }
1801
-
1802
- .md3 .mmodal-body {
1803
- flex: 1 1 auto; min-height: 0;
1804
- overflow-y: auto; overscroll-behavior: contain;
1805
- padding: 0 24px 4px;
1806
- color: var(--md-on-surface-variant);
1807
- }
1808
- .md3 .mmodal-body:last-child { padding-bottom: 24px; }
1809
-
1810
- .md3 .mmodal-foot {
1811
- flex: none;
1812
- display: flex; align-items: center; justify-content: flex-end; gap: 8px;
1813
- flex-wrap: wrap;
1814
- padding: 16px 24px 20px;
1815
- }
1816
-
1817
- @keyframes mmodal-fade { from { opacity: 0; } to { opacity: 1; } }
1818
- @keyframes mmodal-pop {
1819
- from { opacity: 0; transform: translateY(8px) scale(.98); }
1820
- to { opacity: 1; transform: none; }
1821
- }
1822
-
1823
- @media (max-width: 560px) {
1824
- .md3 .mmodal-scrim { padding: 0; align-items: flex-end; }
1825
- .md3 .mmodal {
1826
- max-width: 100%; max-height: 92vh;
1827
- border-radius: var(--md-r-lg) var(--md-r-lg) 0 0;
1828
- border-bottom: 0;
1829
- }
1830
- }
1831
-
1832
- /* ---------- DatePicker (native <input type=date> styled as .mfield) ---------- */
1833
- /* Reuses .mfield / .mfield-group / .mfield--error / .mfield--disabled wholesale; the rules below
1834
- only tame the native date input's browser chrome so it reads as a real md3 field. */
1835
- .md3 .mdate-input { font: inherit; color: var(--md-on-surface); -webkit-appearance: none; appearance: none;
1836
- cursor: text; line-height: 1.2; }
1837
- /* native date inputs render no value as transparent placeholder text in some browsers — keep it muted. */
1838
- .md3 .mdate-input:invalid,
1839
- .md3 .mdate-input[value=""] { color: var(--md-on-surface-variant); }
1840
- /* the calendar picker indicator: tint it to the md3 accent and make it a clear affordance. */
1841
- .md3 .mdate-input::-webkit-calendar-picker-indicator { cursor: pointer; opacity: .65; padding: 2px;
1842
- border-radius: var(--md-r-xs); filter: grayscale(1); transition: opacity .15s, background .15s; }
1843
- .md3 .mdate-input:hover::-webkit-calendar-picker-indicator { opacity: 1; }
1844
- .md3 .mdate-input:focus::-webkit-calendar-picker-indicator { opacity: 1; }
1845
- .md3 .mdate-field:focus-within .mdate-input::-webkit-calendar-picker-indicator { background: var(--md-sc); }
1846
- /* strip the inner spin/clear quirks so the field stays flat like the rest of the md3 kit. */
1847
- .md3 .mdate-input::-webkit-inner-spin-button,
1848
- .md3 .mdate-input::-webkit-clear-button { display: none; -webkit-appearance: none; appearance: none; }
1849
- .md3 .mdate-input::-webkit-datetime-edit { color: inherit; font: inherit; }
1850
- .md3 .mdate-input::-webkit-datetime-edit-fields-wrapper { padding: 0; }
1851
- /* disabled parity with .mfield--disabled. */
1852
- .md3 .mfield--disabled .mdate-input { cursor: not-allowed; color: var(--md-on-surface-variant); }
1853
- .md3 .mfield--disabled .mdate-input::-webkit-calendar-picker-indicator { opacity: .35; cursor: not-allowed; }
1854
-
1855
- /* ---------- Table (md3 composable data/spec table) ---------- */
1856
- /* Composable wrappers Table/Thead/Tbody/Tr/Th/Td. Header on surface-variant,
1857
- row dividers + hover, dense + sticky-header options, and an overflow-x:auto
1858
- wrapper so wide tables (Vergleich, options matrix) scroll inside their own box. */
1859
- .md3 .mtab-wrap { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch;
1860
- border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-md); background: var(--md-sc-lowest); }
1861
- .md3 .mtab { width: 100%; border-collapse: collapse; font-family: var(--md-font);
1862
- font-size: 14px; color: var(--md-on-surface); }
1863
-
1864
- /* header — surface-variant tone, small uppercase labels */
1865
- .md3 .mtab-thead { background: var(--md-sc-low); }
1866
- .md3 .mtab-th { text-align: left; padding: 12px 16px; font-size: 11px; font-weight: 600;
1867
- letter-spacing: .4px; text-transform: uppercase; color: var(--md-on-surface-variant);
1868
- white-space: nowrap; border-bottom: 1px solid var(--md-outline-variant); }
1869
-
1870
- /* body cells — row dividers via bottom border */
1871
- .md3 .mtab-tbody .mtab-tr { transition: background var(--dur-1) var(--ease-standard); }
1872
- .md3 .mtab-tbody .mtab-tr:not(:last-child) .mtab-td { border-bottom: 1px solid var(--md-outline-variant); }
1873
- .md3 .mtab-td { padding: 14px 16px; vertical-align: middle; line-height: 1.45; }
1874
-
1875
- /* hover + selected */
1876
- .md3 .mtab-tbody .mtab-tr:hover { background: var(--md-sc-low); }
1877
- .md3 .mtab-tr.is-selected { background: var(--md-primary-container); }
1878
- .md3 .mtab-tr.is-selected:hover { background: var(--md-primary-container); }
1879
-
1880
- /* alignment + numeric */
1881
- .md3 .mtab-center { text-align: center; }
1882
- .md3 .mtab-right { text-align: right; }
1883
- .md3 .mtab-td--num { font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; }
1884
-
1885
- /* dense — tighter rows for list-heavy tables (Mitarbeiter, options) */
1886
- .md3 .mtab--dense .mtab-th { padding: 8px 12px; }
1887
- .md3 .mtab--dense .mtab-td { padding: 8px 12px; }
1888
-
1889
- /* sticky header — pins while the body scrolls (caller constrains height) */
1890
- .md3 .mtab--sticky .mtab-th { position: sticky; top: 0; z-index: 1; background: var(--md-sc-low);
1891
- box-shadow: inset 0 -1px 0 var(--md-outline-variant); }
1892
-
1893
- /* md3 Switch — extras for the autobahn ui/Switch.tsx component.
1894
- The base .mswitch / .mswitch-track / .mswitch-thumb (+ :checked) rules already exist
1895
- in this file (md3 switch block, ~L424-430). These only add the optional label + the
1896
- disabled state the React component emits. All scoped under .md3, mswitch- prefix. */
1897
- .md3 .mswitch--labeled { align-items: center; gap: 10px; }
1898
- .md3 .mswitch-label { font: 600 14px var(--md-font); color: var(--md-on-surface); user-select: none; }
1899
- .md3 .mswitch--disabled { cursor: not-allowed; opacity: .5; }
1900
- .md3 .mswitch--disabled .mswitch-track { background: var(--md-outline-variant); }
1901
- .md3 .mswitch input:disabled + .mswitch-track { cursor: not-allowed; }
1902
- .md3 .mswitch input:focus-visible + .mswitch-track { outline: 2px solid var(--md-primary); outline-offset: 2px; }
1903
-
1904
- /* ---------- multiline text field (Textarea — outlined, MD3) ----------
1905
- Reuses .mfield (outline, focus ring, error/disabled states, label/error via
1906
- .mfield-group) but overrides the single-line geometry: a textarea needs auto
1907
- height, top alignment and vertical padding, and must fill the box + resize. */
1908
- .md3 .mfield.mtextarea { height: auto; align-items: stretch; padding: 10px 14px; }
1909
- .md3 .mfield.mtextarea textarea {
1910
- border: 0; outline: 0; background: transparent; flex: 1; width: 100%;
1911
- font: inherit; color: inherit; min-width: 0;
1912
- display: block; resize: vertical; min-height: 96px; line-height: 1.5;
1913
- }
1914
- .md3 .mfield.mtextarea textarea::placeholder { color: var(--md-on-surface-variant); }
1915
-
1916
- /* ── Pagination (md3 pager) — prefix .mpag-, scoped under .md3 ───────────────── */
1917
- .md3 .mpag { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 6px; }
1918
- .md3 .mpag-list { display: flex; align-items: center; gap: 6px; list-style: none; margin: 0; padding: 0; }
1919
-
1920
- /* numbered page buttons */
1921
- .md3 .mpag-page {
1922
- box-sizing: border-box; min-width: 40px; height: 40px; padding: 0 10px;
1923
- display: inline-flex; align-items: center; justify-content: center;
1924
- border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-full);
1925
- background: transparent; color: var(--md-on-surface); cursor: pointer;
1926
- font: 600 14px var(--md-font); transition: background .15s, border-color .15s, color .15s, box-shadow .15s;
1927
- }
1928
- .md3 .mpag-page .num { font-size: 14px; }
1929
- .md3 .mpag-page:hover { background: color-mix(in srgb, var(--md-primary) 8%, transparent); border-color: var(--md-primary); }
1930
- .md3 .mpag-page.is-current {
1931
- background: var(--md-primary); color: var(--md-on-primary);
1932
- border-color: var(--md-primary); cursor: default; box-shadow: var(--md-e1);
1933
- }
1934
- .md3 .mpag-page.is-current:hover { background: var(--md-primary); }
1935
-
1936
- /* ellipsis gap */
1937
- .md3 .mpag-gap {
1938
- min-width: 28px; height: 40px; display: inline-flex; align-items: flex-end; justify-content: center;
1939
- padding-bottom: 8px; color: var(--md-on-surface-variant); font: 600 16px var(--md-font); user-select: none;
1940
- }
1941
-
1942
- /* prev / next pill */
1943
- .md3 .mpag-edge {
1944
- height: 40px; padding: 0 16px; display: inline-flex; align-items: center; gap: 6px;
1945
- border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-full);
1946
- background: transparent; color: var(--md-primary); cursor: pointer;
1947
- font: 600 14px var(--md-font); white-space: nowrap;
1948
- transition: background .15s, border-color .15s, color .15s, opacity .15s;
1949
- }
1950
- .md3 .mpag-edge:hover { background: color-mix(in srgb, var(--md-primary) 8%, transparent); border-color: var(--md-primary); }
1951
- .md3 .mpag-edge:disabled { opacity: .4; cursor: not-allowed; color: var(--md-on-surface-variant); }
1952
- .md3 .mpag-edge:disabled:hover { background: transparent; border-color: var(--md-outline-variant); }
1953
- .md3 .mpag-edge-label { line-height: 1; }
1954
-
1955
- /* compact phones: drop the prev/next text labels, keep the chevrons */
1956
- @media (max-width: 520px) {
1957
- .md3 .mpag-edge { padding: 0 10px; }
1958
- .md3 .mpag-edge-label { display: none; }
1959
- }
1960
-
1961
- /* ── Stepper (md3 step indicator) ───────────────────────────────────────── */
1962
- /* numbered circles + connectors; done=check on primary fill, active=primary
1963
- outline, todo=neutral outline. Non-linear (clickable) via .mstep--clickable.
1964
- Mirrors the inline .co-stepper visual language, generalised for both
1965
- orientations. Unique `mstep-` prefix — no collision with .co-step*. */
1966
- .md3 .mstep { display: block; max-width: 880px; margin: 0 auto; }
1967
- .md3 .mstep-list { display: flex; align-items: center; gap: 0; margin: 0; padding: 0; list-style: none; }
1968
- .md3 .mstep-item { display: flex; align-items: center; flex: 1; min-width: 0; }
1969
- .md3 .mstep-item:last-child { flex: none; }
1970
- .md3 .mstep-btn { display: inline-flex; align-items: center; gap: 10px; min-width: 0; flex: none;
1971
- border: 0; background: transparent; padding: 0; margin: 0; font-family: var(--md-font);
1972
- color: var(--md-on-surface-variant); text-align: left; }
1973
- .md3 .mstep-dot { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px;
1974
- flex: none; border-radius: var(--md-r-full); border: 2px solid var(--md-outline-variant);
1975
- font: 700 13px var(--md-font); background: var(--md-sc-lowest, #fff); transition: border-color .15s, background .15s, color .15s; }
1976
- .md3 .mstep-dot .lucide { width: 16px; height: 16px; }
1977
- .md3 .mstep-label { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1978
- .md3 .mstep-connector { flex: 1; height: 2px; min-width: 16px; margin: 0 10px;
1979
- background: var(--md-outline-variant); transition: background .15s; align-self: center; }
1980
- /* state — active */
1981
- .md3 .mstep-item--active .mstep-btn { color: var(--md-primary); }
1982
- .md3 .mstep-item--active .mstep-dot { border-color: var(--md-primary); color: var(--md-primary); }
1983
- /* state — done (primary-filled dot + primary-tinted connector + check glyph) */
1984
- .md3 .mstep-item--done .mstep-btn { color: var(--md-on-surface); }
1985
- .md3 .mstep-item--done .mstep-dot { border-color: var(--md-primary); background: var(--md-primary); color: var(--md-on-primary); }
1986
- .md3 .mstep-item--done .mstep-dot .lucide { color: var(--md-on-primary); }
1987
- .md3 .mstep-item--done .mstep-connector { background: var(--md-primary); }
1988
- /* clickable (non-linear) affordances */
1989
- .md3 .mstep--clickable .mstep-btn { cursor: pointer; border-radius: var(--md-r-full); }
1990
- .md3 .mstep--clickable .mstep-btn:hover .mstep-dot { box-shadow: var(--md-e1); }
1991
- .md3 .mstep--clickable .mstep-btn:hover .mstep-label { color: var(--md-on-surface); }
1992
- .md3 .mstep--clickable .mstep-btn:focus-visible { outline: 2px solid var(--md-primary); outline-offset: 3px; }
1993
- /* vertical orientation */
1994
- .md3 .mstep--vertical .mstep-list { flex-direction: column; align-items: stretch; }
1995
- .md3 .mstep--vertical .mstep-item { flex: none; flex-direction: column; align-items: flex-start; }
1996
- .md3 .mstep--vertical .mstep-btn { width: 100%; }
1997
- .md3 .mstep--vertical .mstep-connector { width: 2px; height: auto; min-height: 22px; flex: none;
1998
- margin: 4px 0 4px 14px; align-self: flex-start; }
1999
- /* mobile: hide labels on the horizontal variant so dots+connectors stay legible */
2000
- @media (max-width: 720px) {
2001
- .md3 .mstep--horizontal .mstep-label { display: none; }
2002
- .md3 .mstep--horizontal .mstep-btn { gap: 0; }
2003
- }
2004
-
2005
- /* ── FileUpload — md3 dropzone shell (wraps preserved Uppy / react-dropzone engine) ── */
2006
- .md3 .mfu { display: flex; flex-direction: column; gap: 14px; }
2007
- .md3 .mfu-zone {
2008
- position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center;
2009
- gap: 8px; text-align: center; padding: 32px 24px; min-height: 168px;
2010
- border: 2px dashed var(--md-outline-variant); border-radius: var(--md-r-lg);
2011
- background: var(--md-sc-lowest); color: var(--md-on-surface-variant);
2012
- font-family: var(--md-font); cursor: pointer;
2013
- transition: border-color .15s, background .15s, box-shadow .15s;
2014
- }
2015
- .md3 .mfu-zone:hover { border-color: var(--md-primary); background: var(--md-primary-container); }
2016
- .md3 .mfu-zone:focus-visible { outline: none; border-color: var(--md-primary); box-shadow: 0 0 0 3px var(--md-primary-container); }
2017
- /* drag-over highlight (driven by the .mfu--over state class) */
2018
- .md3 .mfu--over .mfu-zone { border-color: var(--md-primary); border-style: solid; background: var(--md-primary-container); box-shadow: var(--md-e1); }
2019
- .md3 .mfu-icon { display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px;
2020
- border-radius: var(--md-r-full); background: var(--md-sc-high); color: var(--md-primary); }
2021
- .md3 .mfu-icon .lucide { width: 28px; height: 28px; color: var(--md-primary); }
2022
- .md3 .mfu--over .mfu-icon { background: var(--md-sc-lowest); }
2023
- .md3 .mfu-prompt { font-size: 15px; font-weight: 500; line-height: 1.4; color: var(--md-on-surface); }
2024
- .md3 .mfu-link { color: var(--md-primary); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }
2025
- .md3 .mfu-or { color: var(--md-on-surface-variant); font-weight: 400; }
2026
- .md3 .mfu-hint { margin-top: 2px; }
2027
- /* visually-hidden native input — click is proxied from the zone */
2028
- .md3 .mfu-input { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
2029
- overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
2030
- /* slot for the preserved engine / file list / progress bar */
2031
- .md3 .mfu-slot { display: block; }
2032
- /* disabled (mirrors react-dropzone/Uppy disabled while uploading) */
2033
- .md3 .mfu--disabled .mfu-zone { cursor: not-allowed; opacity: .5; }
2034
- .md3 .mfu--disabled .mfu-zone:hover { border-color: var(--md-outline-variant); background: var(--md-sc-lowest); box-shadow: none; }
1
+ /* ==========================================================================
2
+ AUTOBAHN — scoped port of docs/redesign/design-source/ui_kits/website/md3.css
3
+ --------------------------------------------------------------------------
4
+ Every selector is nested under `.md3` (the design's `:root` token block is
5
+ emitted as `.md3 {...}`) so the utility classes (.mbtn/.mcard/.mfield/.chip/
6
+ .statchip/.segmented/.num/.md-x ...) and CSS vars (--md-/--autode- prefixes)
7
+ only apply inside a `.md3` subtree and cannot bleed into existing fe-main styles.
8
+ The responsive layers (1024/980/900/820/600px) are preserved. The Google-
9
+ Fonts @import was removed here and centralised in ./autobahn.css.
10
+ Loaded globally via source/App.global.styl -> ./autobahn.css.
11
+ ADDITIVE ONLY — do not retheme legacy components.
12
+ ==========================================================================
13
+
14
+ auto.de — DESIGN SYSTEM · "Autobahn"
15
+ A custom, brand-led system on MD3 bones (tokens, spacing, elevation,
16
+ responsive discipline) with a distinct auto.de identity:
17
+ · auto.de Blau primary · Signal-Cyan accent (from the logo swoosh)
18
+ · Schibsted Grotesk (display) + Hanken Grotesk (text)
19
+ · deal-green for price/savings · defined motion
20
+ This file is the single source of truth the UI kit is built from.
21
+ ========================================================================== */
22
+
23
+ .md3 {
24
+ /* ---- Brand ---- */
25
+ --autode-blau: #0B53CC; /* auto.de Blau — primary, used with intent */
26
+ --autode-blau-strong: #0A47AE; /* hover / pressed */
27
+ --autode-cyan: #16B8E8; /* Signal-Cyan accent (logo swoosh) */
28
+ --autode-swoosh: linear-gradient(90deg,#0B53CC 0%,#1E7BDA 55%,#16B8E8 100%); /* @kind color */
29
+
30
+ /* ---- MD3 tonal roles (mapped to the brand) ---- */
31
+ --md-primary: var(--autode-blau);
32
+ --md-on-primary: #FFFFFF;
33
+ --md-primary-container: #DBE4FF;
34
+ --md-on-primary-container:#001A45;
35
+
36
+ /* accent (cyan) roles — highlights, focus, on-dark links */
37
+ --md-accent: var(--autode-cyan);
38
+ --md-accent-container: #C6EEFB;
39
+ --md-on-accent-container:#04323F;
40
+
41
+ --md-secondary-container:#E7E9F1;
42
+ --md-on-secondary-container:#3A4150;
43
+
44
+ /* price-rating + deal accent (green) */
45
+ --md-good: #0F7B43;
46
+ --md-good-container: #C8EFCF;
47
+ --md-on-good-container: #04391F;
48
+ --md-warn-container: #FCE3B4;
49
+ --md-on-warn-container: #4A3204;
50
+ --md-error: #BA1A1A;
51
+
52
+ /* surfaces (neutral, a hair cooler to sit under the blue) */
53
+ --md-surface: #FBFBFE;
54
+ --md-surface-dim: #DAD9E0;
55
+ --md-surface-bright: #FBFBFE;
56
+ --md-sc-lowest: #FFFFFF;
57
+ --md-sc-low: #F4F5FA;
58
+ --md-sc: #EEEFF5;
59
+ --md-sc-high: #E8E9F1;
60
+ --md-sc-highest: #E2E3EC;
61
+
62
+ --md-on-surface: #1A1B22;
63
+ --md-on-surface-variant: #44464F;
64
+ --md-outline: #74767F;
65
+ --md-outline-variant: #C5C6D2;
66
+
67
+ --md-inverse-surface: #2E2F36;
68
+ --md-inverse-on-surface: #F1F0F6;
69
+
70
+ /* elevation (soft, tonal) */
71
+ --md-e1: 0 1px 2px rgba(16,22,42,.10), 0 1px 3px rgba(16,22,42,.06);
72
+ --md-e2: 0 2px 6px rgba(16,22,42,.10), 0 1px 2px rgba(16,22,42,.10);
73
+ --md-e3: 0 8px 20px rgba(16,22,42,.12), 0 2px 6px rgba(16,22,42,.08);
74
+
75
+ /* shape */
76
+ --md-r-xs: 8px;
77
+ --md-r-sm: 12px;
78
+ --md-r-md: 16px;
79
+ --md-r-lg: 24px;
80
+ --md-r-xl: 28px;
81
+ --md-r-full: 999px;
82
+
83
+ /* type */
84
+ --md-font: 'Hanken Grotesk', system-ui, sans-serif;
85
+ --md-font-display: 'Schibsted Grotesk', 'Hanken Grotesk', system-ui, sans-serif;
86
+ --md-font-hero: var(--md-font-display); /* hero uses the system display face, weight 800 */
87
+
88
+ /* motion */
89
+ --ease-standard: cubic-bezier(.2,0,0,1); /* @kind other */
90
+ --ease-emphasized: cubic-bezier(.3,0,0,1); /* @kind other */
91
+ --dur-1: 120ms; /* @kind other */
92
+ --dur-2: 200ms; /* @kind other */
93
+ --dur-3: 320ms; /* @kind other */
94
+ }
95
+
96
+ /* ---------- base ---------- */
97
+ .md3 { font-family: var(--md-font); color: var(--md-on-surface); background: var(--md-surface);
98
+ -webkit-font-smoothing: antialiased; }
99
+ .md3 *, .md3 *::before, .md3 *::after { box-sizing: border-box; }
100
+ .md3 ::selection { background: var(--md-primary-container); }
101
+
102
+ /* type scale — display family for headlines, text family for UI */
103
+ .md3 .md-display { font-family: var(--md-font-display); font-size: 46px; font-weight: 700; line-height: 1.04; letter-spacing: -1px; }
104
+ .md3 .md-headline { font-family: var(--md-font-display); font-size: 29px; font-weight: 700; line-height: 1.14; letter-spacing: -.4px; }
105
+ .md3 .md-headline-sm{ font-family: var(--md-font-display); font-size: 22px; font-weight: 600; line-height: 1.2; letter-spacing: -.2px; }
106
+ .md3 .md-title { font-size: 17px; font-weight: 600; line-height: 1.3; }
107
+ .md3 .md-title-sm { font-size: 14px; font-weight: 600; line-height: 1.35; letter-spacing: .1px; }
108
+ .md3 .md-body { font-size: 14px; font-weight: 400; line-height: 1.5; color: var(--md-on-surface-variant); }
109
+ .md3 .md-body-sm { font-size: 12.5px; font-weight: 400; line-height: 1.45; color: var(--md-on-surface-variant); }
110
+ .md3 .md-label { font-size: 13px; font-weight: 500; letter-spacing: .1px; }
111
+ .md3 .md-label-sm { font-size: 11px; font-weight: 600; letter-spacing: .4px; color: var(--md-on-surface-variant); }
112
+ /* tabular figures for prices & specs */
113
+ .md3 .num { font-family: var(--md-font-display); font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; }
114
+
115
+ /* ---------- buttons (pill) ---------- */
116
+ .md3 .mbtn { font-family: var(--md-font); font-size: 14px; font-weight: 600; letter-spacing: .1px;
117
+ height: 40px; padding: 0 24px; border-radius: var(--md-r-full); border: 0; cursor: pointer;
118
+ display: inline-flex; align-items: center; justify-content: center; gap: 8px; white-space: nowrap;
119
+ transition: box-shadow var(--dur-1) var(--ease-standard), background var(--dur-1) var(--ease-standard),
120
+ color var(--dur-1) var(--ease-standard), transform var(--dur-1) var(--ease-standard); }
121
+ .md3 .mbtn:active { transform: translateY(1px); }
122
+ .md3 .mbtn .lucide { width: 18px; height: 18px; }
123
+ .md3 .mbtn--filled { background: var(--md-primary); color: var(--md-on-primary); }
124
+ .md3 .mbtn--filled:hover { box-shadow: var(--md-e2); background: var(--autode-blau-strong); }
125
+ .md3 .mbtn--tonal { background: var(--md-primary-container); color: var(--md-on-primary-container); }
126
+ .md3 .mbtn--tonal:hover { box-shadow: var(--md-e1); }
127
+ .md3 .mbtn--outlined { background: transparent; color: var(--md-primary); box-shadow: inset 0 0 0 1px var(--md-outline-variant); }
128
+ .md3 .mbtn--outlined:hover { background: rgba(11,83,204,.06); }
129
+ .md3 .mbtn--text { background: transparent; color: var(--md-primary); padding: 0 12px; }
130
+ .md3 .mbtn--text:hover { background: rgba(11,83,204,.06); }
131
+ .md3 .mbtn--sm { height: 34px; padding: 0 16px; font-size: 13px; }
132
+ .md3 .mbtn--lg { height: 48px; padding: 0 30px; font-size: 15px; }
133
+ .md3 .mbtn--block { width: 100%; }
134
+
135
+ /* icon button */
136
+ .md3 .icon-btn { width: 40px; height: 40px; border-radius: var(--md-r-full); border: 0; cursor: pointer;
137
+ background: transparent; color: var(--md-on-surface-variant); display: inline-flex; align-items: center;
138
+ justify-content: center; transition: background .15s; }
139
+ .md3 .icon-btn:hover { background: var(--md-sc-high); }
140
+ .md3 .icon-btn--filled { background: rgba(255,255,255,.9); box-shadow: var(--md-e1); color: var(--md-on-surface); }
141
+ .md3 .icon-btn .lucide { width: 20px; height: 20px; }
142
+
143
+ /* ---------- chips (MD3 assist / filter) ---------- */
144
+ .md3 .chip { height: 38px; padding: 0 16px; border-radius: 10px; cursor: pointer;
145
+ display: inline-flex; align-items: center; gap: 7px; font-size: 14px; font-weight: 500; line-height: 1;
146
+ background: var(--md-surface); color: var(--md-on-surface-variant);
147
+ border: 1px solid var(--md-outline-variant); box-shadow: none;
148
+ transition: background .15s, border-color .15s, color .15s; white-space: nowrap; }
149
+ .md3 .chip .lucide { width: 16px; height: 16px; color: var(--md-primary); }
150
+ .md3 .chip:hover { background: var(--md-sc); border-color: var(--md-outline); }
151
+ .md3 .chip--selected { background: var(--md-secondary-container); color: var(--md-on-secondary-container); border-color: transparent; }
152
+ .md3 .chip--selected .lucide { color: currentColor; }
153
+ .md3 .chip--filter.chip--selected { background: var(--md-primary-container); color: var(--md-on-primary-container); border-color: transparent; }
154
+ /* list-card equipment tags: compact, non-interactive info chips (design CarCard.jsx — h24/11.5px),
155
+ NOT the 38px tappable filter-chip the base .chip is. */
156
+ .md3 .listcard-chips .chip { height: 24px; padding: 0 10px; font-size: 11.5px; border-radius: 8px; cursor: default; }
157
+ .md3 .listcard-chips .chip:hover { background: var(--md-surface); border-color: var(--md-outline-variant); }
158
+
159
+ /* status / rating chip (no CTA) */
160
+ .md3 .statchip { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 10px;
161
+ border-radius: var(--md-r-xs); font-size: 12px; font-weight: 600; }
162
+ .md3 .statchip--good { background: var(--md-good-container); color: var(--md-on-good-container); }
163
+ .md3 .statchip--warn { background: var(--md-warn-container); color: var(--md-on-warn-container); }
164
+ .md3 .statchip .lucide { width: 14px; height: 14px; }
165
+
166
+ /* small image label (views, photo count) */
167
+ .md3 .imglabel { display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 10px;
168
+ border-radius: var(--md-r-full); background: rgba(0,0,0,.55); color: #fff; font-size: 12px; font-weight: 500; backdrop-filter: blur(2px); }
169
+ .md3 .imglabel .lucide { width: 14px; height: 14px; }
170
+
171
+ /* ---------- cards ---------- */
172
+ .md3 .mcard { background: var(--md-sc-lowest); border-radius: var(--md-r-md); border: 1px solid var(--md-outline-variant);
173
+ overflow: hidden; transition: box-shadow var(--dur-2) var(--ease-standard), border-color var(--dur-2) var(--ease-standard), transform var(--dur-2) var(--ease-standard); }
174
+ .md3 .mcard--elevated { border: 0; box-shadow: var(--md-e1); }
175
+ .md3 .mcard--interactive { cursor: pointer; }
176
+ .md3 .mcard--interactive:hover { box-shadow: var(--md-e3); border-color: transparent; transform: translateY(-3px); }
177
+ .md3 .mcard--filled { background: var(--md-sc-low); border: 0; }
178
+
179
+ /* ---------- search bar ---------- */
180
+ .md3 .msearch { display: flex; align-items: center; gap: 12px; height: 56px; padding: 0 18px;
181
+ border-radius: var(--md-r-full); background: var(--md-sc-high); color: var(--md-on-surface); }
182
+ .md3 .msearch input { border: 0; outline: 0; background: transparent; flex: 1; font: 400 16px var(--md-font); color: inherit; min-width: 0; }
183
+ .md3 .msearch .lucide { width: 22px; height: 22px; color: var(--md-on-surface-variant); flex: none; }
184
+
185
+ /* ---------- text field (outlined, MD3) ---------- */
186
+ .md3 .mfield { position: relative; display: flex; align-items: center; gap: 10px; height: 48px; padding: 0 14px;
187
+ border-radius: var(--md-r-xs); background: transparent; box-shadow: inset 0 0 0 1px var(--md-outline-variant);
188
+ font-size: 14px; color: var(--md-on-surface); transition: box-shadow .15s; }
189
+ .md3 .mfield:focus-within { box-shadow: inset 0 0 0 2px var(--md-accent); }
190
+ .md3 .mfield select, .md3 .mfield input { border: 0; outline: 0; background: transparent; flex: 1; font: inherit; color: inherit; min-width: 0; text-overflow: ellipsis; }
191
+ .md3 .mfield select { -webkit-appearance: none; appearance: none; cursor: pointer; }
192
+ .md3 .mfield .lucide { width: 20px; height: 20px; color: var(--md-on-surface-variant); flex: none; }
193
+ .md3 .mfield .lucide:last-child { margin-left: auto; }
194
+ /* compact field — dense Detailsuche range/value inputs (von/bis, monthly rate). */
195
+ .md3 .mfield--sm { height: 44px; padding: 0 12px; gap: 8px; font-size: 14px; }
196
+ .md3 .mfield--sm input { font-variant-numeric: tabular-nums; }
197
+ /* von/bis range pair (Detailsuche, no slider). */
198
+ .md3 .ds-range { display: flex; align-items: center; gap: 10px; }
199
+ .md3 .ds-range-dash { flex: none; color: var(--md-on-surface-variant); }
200
+
201
+ /* labelled form field (FormField — label + outlined input + error). */
202
+ .md3 .mfield-group { display: flex; flex-direction: column; gap: 6px; }
203
+ .md3 .mfield-label { color: var(--md-on-surface-variant); font-weight: 600; }
204
+ .md3 .mfield--error { box-shadow: inset 0 0 0 2px var(--md-error); }
205
+ .md3 .mfield-eye { display: flex; align-items: center; justify-content: center; border: 0; background: none;
206
+ cursor: pointer; color: var(--md-on-surface-variant); padding: 0 2px; flex: none; }
207
+ .md3 .mfield-error-text { color: var(--md-error); font-size: 12px; line-height: 1.35; }
208
+
209
+ /* ---------- Auth (Anmelden / Registrierung / Passwort) ---------- */
210
+ .md3 .auth-main { padding: 36px 24px 80px; }
211
+ .md3 .auth-card { max-width: 940px; margin: 0 auto; display: grid; grid-template-columns: 1fr;
212
+ background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
213
+ border-radius: var(--md-r-lg, 20px); overflow: hidden; box-shadow: var(--md-e1, 0 2px 10px rgba(0,0,0,.06)); }
214
+ .md3 .auth-card--split { grid-template-columns: 1.08fr .92fr; }
215
+ .md3 .auth-formside { padding: 34px 38px; min-width: 0; }
216
+ .md3 .auth-aside { padding: 38px; background: var(--md-primary); color: #fff; display: flex;
217
+ flex-direction: column; justify-content: center; }
218
+ .md3 .auth-aside h4 { font: 700 21px var(--md-font-display, var(--md-font)); margin: 0 0 20px; }
219
+ .md3 .auth-aside ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 15px; }
220
+ .md3 .auth-aside li { display: flex; gap: 12px; align-items: flex-start; font-size: 15px; line-height: 1.4; }
221
+ .md3 .auth-aside li svg { flex: none; margin-top: 1px; opacity: .95; }
222
+ .md3 .auth-tabs { display: flex; gap: 6px; margin-bottom: 24px; border-bottom: 1px solid var(--md-outline-variant); }
223
+ .md3 .auth-tab { padding: 10px 14px; font: 600 15px var(--md-font); color: var(--md-on-surface-variant);
224
+ text-decoration: none; border-bottom: 2px solid transparent; margin-bottom: -1px; }
225
+ .md3 .auth-tab:hover { color: var(--md-on-surface); }
226
+ .md3 .auth-tab.is-active { color: var(--md-primary); border-bottom-color: var(--md-primary); }
227
+ .md3 .auth-sub { color: var(--md-on-surface-variant); font-size: 14px; line-height: 1.5; margin: 0 0 4px; }
228
+ .md3 .auth-form { display: flex; flex-direction: column; gap: 18px; }
229
+ .md3 .auth-error { background: var(--md-error-container, #fdeceb); color: var(--md-error);
230
+ border-radius: var(--md-r-sm, 12px); padding: 10px 14px; font-size: 14px; }
231
+ .md3 .auth-row-between { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
232
+ .md3 .auth-link { color: var(--md-primary); font-weight: 600; text-decoration: none; font-size: 14px; cursor: pointer; }
233
+ .md3 .auth-link:hover { text-decoration: underline; }
234
+ .md3 .auth-foot { margin-top: 22px; font-size: 14px; color: var(--md-on-surface-variant); line-height: 1.5; }
235
+ .md3 .auth-check { display: flex; gap: 10px; align-items: flex-start; font-size: 13px; line-height: 1.5; color: var(--md-on-surface); cursor: pointer; }
236
+ .md3 .auth-check input { margin-top: 2px; accent-color: var(--md-primary); width: 18px; height: 18px; flex: none; }
237
+ .md3 .auth-loading { display: flex; justify-content: center; align-items: center; min-height: 200px; }
238
+ .md3 .auth-spinner { width: 32px; height: 32px; border-radius: 50%; border: 3px solid var(--md-outline-variant);
239
+ border-top-color: var(--md-primary); animation: auth-spin .8s linear infinite; }
240
+ @keyframes auth-spin { to { transform: rotate(360deg); } }
241
+ @media (max-width: 860px) {
242
+ .md3 .auth-card--split { grid-template-columns: 1fr; }
243
+ .md3 .auth-aside { display: none; }
244
+ .md3 .auth-formside { padding: 26px 22px; }
245
+ }
246
+
247
+ /* ---------- Checkout (md3 chrome — header · stepper · next button) ---------- */
248
+ .md3 .co-page { background: var(--md-sc, #f4f5f7); min-height: 100vh; }
249
+ .md3 .co-header { background: var(--md-sc-lowest, #fff); border-bottom: 1px solid var(--md-outline-variant);
250
+ position: sticky; top: 0; z-index: 30; }
251
+ .md3 .co-header-row { display: flex; align-items: center; gap: 16px; padding: 12px 24px; min-height: 64px; }
252
+ .md3 .co-back { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; flex: none;
253
+ border: 0; border-radius: 50%; background: none; cursor: pointer; color: var(--md-on-surface); }
254
+ .md3 .co-back:hover { background: var(--md-sc); }
255
+ .md3 .co-logo { display: flex; align-items: center; text-decoration: none; }
256
+ .md3 .co-logo img { height: 36px; display: block; }
257
+ .md3 .co-header-car { display: flex; align-items: center; gap: 16px; margin-left: auto; }
258
+ .md3 .co-header-price { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.1; }
259
+ .md3 .co-price-amount { font: 700 20px var(--md-font); color: var(--md-on-surface); white-space: nowrap; }
260
+ .md3 .co-price-unit { font-size: 13px; font-weight: 600; color: var(--md-on-surface-variant); }
261
+ .md3 .co-price-vat { font-size: 11px; color: var(--md-on-surface-variant); }
262
+ .md3 .co-header-info { display: flex; flex-direction: column; text-align: right; line-height: 1.2; }
263
+ .md3 .co-car-model { font-weight: 600; font-size: 14px; color: var(--md-on-surface); }
264
+ .md3 .co-car-sub { font-size: 12px; color: var(--md-on-surface-variant); }
265
+ .md3 .co-car-img { width: 64px; height: 44px; object-fit: contain; border-radius: var(--md-r-sm, 10px); }
266
+ /* stepper */
267
+ .md3 .co-stepper { display: flex; align-items: center; gap: 0; max-width: 880px; margin: 28px auto 4px;
268
+ padding: 0 24px; overflow-x: auto; }
269
+ .md3 .co-step { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; color: var(--md-on-surface-variant); }
270
+ .md3 .co-step-dot { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; flex: none;
271
+ border-radius: 50%; border: 2px solid var(--md-outline-variant); font: 700 13px var(--md-font);
272
+ background: var(--md-sc-lowest, #fff); }
273
+ .md3 .co-step-label { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
274
+ .md3 .co-step-bar { flex: 1; height: 2px; min-width: 16px; background: var(--md-outline-variant); margin: 0 10px; }
275
+ .md3 .co-step.is-active { color: var(--md-primary); }
276
+ .md3 .co-step.is-active .co-step-dot { border-color: var(--md-primary); color: var(--md-primary); }
277
+ .md3 .co-step.is-done { color: var(--md-on-surface); }
278
+ .md3 .co-step.is-done .co-step-dot { border-color: var(--md-primary); background: var(--md-primary); color: #fff; }
279
+ .md3 .co-step.is-done .co-step-bar { background: var(--md-primary); }
280
+ /* vertical left rail (desktop) — mirrors the legacy fixed 376px stepper, md3 skin.
281
+ Each step: number/check dot · title · "x min" · chevron; active = primary-container
282
+ pill rounded on the right; done = filled primary dot. */
283
+ .md3 .co-rail { position: fixed; top: 65px; bottom: 0; left: 0; width: 376px; box-sizing: border-box;
284
+ background: var(--md-sc-lowest, #fff); box-shadow: 2px 0 8px rgba(0,0,0,.08); z-index: 2;
285
+ padding: 28px 16px 28px 0; display: flex; flex-direction: column; gap: 4px; overflow-y: auto; }
286
+ .md3 .co-rail-step { display: flex; align-items: center; gap: 16px; width: 100%; border: 0; background: none;
287
+ cursor: pointer; text-align: left; padding: 14px 18px 14px 28px; border-radius: 0 999px 999px 0;
288
+ color: var(--md-on-surface-variant); }
289
+ .md3 .co-rail-step:hover:not(:disabled) { background: var(--md-sc); }
290
+ .md3 .co-rail-step:disabled { cursor: default; }
291
+ .md3 .co-rail-dot { position: relative; display: flex; align-items: center; justify-content: center; width: 44px; height: 44px;
292
+ flex: none; border-radius: 50%; border: 2px solid var(--md-outline-variant); font: 700 17px var(--md-font);
293
+ background: var(--md-sc-lowest, #fff); color: var(--md-on-surface-variant); }
294
+ /* connector line so the step sequence reads as a progression (like the legacy stepper).
295
+ Drawn downward from each dot to the next; turns primary once the step is done. */
296
+ .md3 .co-rail-step:not(:last-child) .co-rail-dot::after { content: ''; position: absolute; top: calc(100% + 2px);
297
+ left: 50%; transform: translateX(-50%); width: 2px; height: 30px; background: var(--md-outline-variant); }
298
+ .md3 .co-rail-step.is-done .co-rail-dot::after { background: var(--md-primary); }
299
+ .md3 .co-rail-body { display: flex; flex-direction: column; min-width: 0; }
300
+ .md3 .co-rail-label { font: 700 18px var(--md-font); color: var(--md-on-surface); }
301
+ .md3 .co-rail-min { font-size: 13px; color: var(--md-on-surface-variant); margin-top: 2px; }
302
+ .md3 .co-rail-chev { margin-left: auto; color: var(--md-on-surface-variant); flex: none; }
303
+ .md3 .co-rail-step.is-active { background: var(--md-primary-container); }
304
+ .md3 .co-rail-step.is-active .co-rail-dot { border-color: var(--md-primary); color: var(--md-primary); }
305
+ .md3 .co-rail-step.is-active .co-rail-label { color: var(--md-primary); }
306
+ .md3 .co-rail-step.is-done .co-rail-dot { border-color: var(--md-primary); background: var(--md-primary); color: #fff; }
307
+ /* brand row at the rail top (wide desktop, where the top header is hidden) */
308
+ .md3 .co-rail-brand { display: flex; align-items: center; gap: 10px; padding: 0 18px 22px 16px; }
309
+ @media (max-width: 1279px) { .md3 .co-rail-brand { display: none; } }
310
+ /* completed steps read as "done" in green (active stays primary) */
311
+ .md3 .co-rail-step.is-done .co-rail-dot { border-color: var(--md-good); background: var(--md-good); }
312
+ .md3 .co-rail-step.is-done .co-rail-dot::after { background: var(--md-good); }
313
+ /* summary aside (right rail, desktop ≥1280) — single car + offer + price + trust panel */
314
+ .md3 .co-aside { position: fixed; top: 65px; bottom: 0; right: 0; width: 348px; box-sizing: border-box;
315
+ padding: 40px 24px; overflow-y: auto; z-index: 1; }
316
+ .md3 .co-aside-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
317
+ border-radius: var(--md-r-lg, 18px); padding: 18px; box-shadow: var(--md-e1); position: sticky; top: 0; }
318
+ .md3 .co-aside-img { display: block; width: 100%; aspect-ratio: 16 / 10; height: auto; object-fit: cover;
319
+ border-radius: var(--md-r-md, 12px); background: var(--md-sc); margin-bottom: 16px; }
320
+ .md3 .co-aside-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
321
+ .md3 .co-aside-title { min-width: 0; }
322
+ .md3 .co-aside-name { font: 700 17px var(--md-font); color: var(--md-on-surface); line-height: 1.25; }
323
+ .md3 .co-aside-sub { font-size: 12.5px; color: var(--md-on-surface-variant); margin-top: 3px; line-height: 1.35; }
324
+ .md3 .co-aside-offer { flex: none; padding: 4px 10px; border-radius: 999px;
325
+ background: var(--md-primary-container); color: var(--md-primary); font-size: 11.5px; font-weight: 700; white-space: nowrap; }
326
+ .md3 .co-aside-price { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--md-outline-variant); }
327
+ .md3 .co-aside-plabel { display: block; font-size: 12px; color: var(--md-on-surface-variant); margin-bottom: 2px; }
328
+ .md3 .co-aside-prow { display: flex; align-items: baseline; gap: 4px; }
329
+ .md3 .co-aside-amount { font: 800 26px var(--md-font); color: var(--md-primary); }
330
+ .md3 .co-aside-unit { font-size: 14px; font-weight: 600; color: var(--md-on-surface-variant); }
331
+ .md3 .co-aside-vat { display: block; font-size: 11.5px; color: var(--md-on-surface-variant); margin-top: 4px; }
332
+ .md3 .co-trust { list-style: none; margin: 16px 0 0; padding: 16px 0 0; border-top: 1px solid var(--md-outline-variant);
333
+ display: flex; flex-direction: column; gap: 11px; }
334
+ .md3 .co-trust li { display: flex; align-items: center; gap: 9px; font-size: 12.5px; color: var(--md-on-surface); }
335
+ .md3 .co-trust svg { color: var(--md-good); flex: none; }
336
+ @media (max-width: 1279px) { .md3 .co-aside { display: none; } }
337
+ /* wide desktop (≥1280): car lives in the aside and brand/back move into the rail, so the
338
+ top header is dropped entirely and the rail + aside run from the very top. */
339
+ @media (min-width: 1280px) {
340
+ .md3 .co-header { display: none; }
341
+ .md3 .co-rail { top: 0; }
342
+ .md3 .co-aside { top: 0; }
343
+ }
344
+ /* card-title leading icon */
345
+ .md3 .co-card-title { display: flex; align-items: center; gap: 8px; }
346
+ .md3 .co-card-ic { color: var(--md-primary); flex: none; }
347
+ /* valid field — green ring (matches the --error ring treatment) + trailing green check.
348
+ .mfield draws its outline via inset box-shadow, not a CSS border, so colour the ring. */
349
+ .md3 .mfield--valid { box-shadow: inset 0 0 0 1.5px var(--md-good); }
350
+ .md3 .mfield-ok { display: flex; align-items: center; flex: none; }
351
+ .md3 .mfield-ok .lucide { color: var(--md-good); }
352
+ /* md3 checkout finance panel (Zahlungsdetails) — replaces the legacy OfferBlock */
353
+ .md3 .cf-panel { display: flex; flex-direction: column; gap: 20px; }
354
+ .md3 .cf-rate { display: flex; flex-direction: column; gap: 2px; }
355
+ .md3 .cf-rate-label { font-size: 13px; color: var(--md-on-surface-variant); }
356
+ .md3 .cf-rate-row { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
357
+ .md3 .cf-rate-amount { font: 800 30px var(--md-font); color: var(--md-primary); }
358
+ .md3 .cf-rate-amount small { font-size: 14px; font-weight: 600; color: var(--md-on-surface-variant); }
359
+ .md3 .cf-rate-old { font-size: 13px; color: var(--md-on-surface-variant); text-decoration: line-through; }
360
+ .md3 .cf-slider { display: flex; flex-direction: column; gap: 8px; }
361
+ .md3 .cf-slider-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
362
+ .md3 .cf-slider-val { font-weight: 700; color: var(--md-on-surface); }
363
+ .md3 .cf-period { display: flex; flex-direction: column; gap: 10px; }
364
+ .md3 .cf-opts { display: flex; flex-direction: column; gap: 12px; }
365
+ .md3 .cf-check { display: flex; align-items: center; gap: 10px; font-size: 14px; color: var(--md-on-surface); cursor: pointer; }
366
+ .md3 .cf-check input { width: 20px; height: 20px; accent-color: var(--md-primary); cursor: pointer; flex: none; }
367
+ .md3 .cf-check-cost { margin-left: auto; font-weight: 700; color: var(--md-on-surface); white-space: nowrap; }
368
+ .md3 .cf-details { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; background: none; border: 0;
369
+ padding: 0; cursor: pointer; color: var(--md-primary); font: inherit; font-size: 13px; font-weight: 600; }
370
+ .md3 .cf-details-ic { color: var(--md-primary); }
371
+ /* content + next button */
372
+ .md3 .co-content { max-width: 880px; margin: 0 auto; padding: 24px; }
373
+ .md3 .co-next { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; margin-top: 28px; }
374
+ .md3 .co-error { color: var(--md-error); font-size: 13px; font-weight: 600; }
375
+ /* desktop: pin the action bar to the viewport bottom so "Weiter" is always reachable
376
+ without scrolling. Negative margins cancel the content padding so the bar spans from
377
+ the rail edge to the right edge; it sits above the rail (z below the header). */
378
+ @media (min-width: 992px) {
379
+ .md3 .co-next {
380
+ position: sticky; bottom: 0; z-index: 5;
381
+ flex-direction: row; align-items: center; justify-content: flex-end; gap: 16px;
382
+ /* margin-top:auto pins the bar to the bottom of the min-height-filled content column,
383
+ so its position is identical on every step (no jump on submit). */
384
+ margin: auto -48px 0; padding: 16px 48px 20px;
385
+ /* fade the page surface up behind the buttons instead of a hard divider bar */
386
+ background: linear-gradient(to top, var(--md-surface) 62%, rgba(251, 251, 254, 0));
387
+ border-top: 0;
388
+ }
389
+ .md3 .co-next .co-error { margin-right: auto; }
390
+ }
391
+ /* checkout step content (md3) */
392
+ .md3 .co-form { display: flex; flex-direction: column; gap: 20px; }
393
+ .md3 .co-step-title { font: 700 22px var(--md-font-display, var(--md-font)); margin: 0; color: var(--md-on-surface); }
394
+ .md3 .co-step-sub { color: var(--md-on-surface-variant); font-size: 14px; margin: 6px 0 0; }
395
+ /* the step's leading title + sub form a header band, separated from the cards below. */
396
+ .md3 .co-step-title + .co-step-sub { padding-bottom: 18px; border-bottom: 1px solid var(--md-outline-variant); }
397
+ /* two cards side-by-side on wide desktop (contact step); stacks when the column narrows. */
398
+ .md3 .co-cards-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: start; }
399
+ @media (max-width: 1200px) { .md3 .co-cards-2 { grid-template-columns: 1fr; } }
400
+ .md3 .co-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
401
+ border-radius: var(--md-r-lg, 18px); padding: 22px 24px; }
402
+ .md3 .co-card-title { font: 700 16px var(--md-font); margin: 0 0 18px; color: var(--md-on-surface); }
403
+ .md3 .co-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 20px; }
404
+ .md3 .co-col-2 { grid-column: 1 / -1; }
405
+ .md3 .co-phone { grid-column: 1 / -1; display: grid; grid-template-columns: 110px 1fr 1.6fr; gap: 12px; align-items: start; }
406
+ .md3 .mfield--disabled { background: var(--md-sc); opacity: .7; }
407
+ /* Zahlart — selectable offer cards */
408
+ .md3 .co-pay-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
409
+ .md3 .co-pay-card { position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 8px;
410
+ padding: 20px; text-align: left; cursor: pointer; background: var(--md-sc-lowest, #fff);
411
+ border: 1.5px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); color: var(--md-on-surface);
412
+ transition: border-color var(--dur-1), background var(--dur-1); }
413
+ .md3 .co-pay-card:hover:not(.is-disabled):not(.is-on) { border-color: var(--md-primary); }
414
+ .md3 .co-pay-card.is-on { border-color: var(--md-primary); background: var(--md-primary-container); }
415
+ .md3 .co-pay-card.is-disabled { opacity: .45; cursor: not-allowed; }
416
+ .md3 .co-pay-card svg { color: var(--md-primary); }
417
+ .md3 .co-pay-radio { position: absolute; top: 16px; right: 16px; width: 20px; height: 20px; border-radius: 50%;
418
+ border: 2px solid var(--md-outline); }
419
+ .md3 .co-pay-card.is-on .co-pay-radio { border-color: var(--md-primary); background: radial-gradient(circle, var(--md-primary) 0 5px, transparent 6px); }
420
+ .md3 .co-pay-label { font: 700 16px var(--md-font); }
421
+ .md3 .co-pay-info { font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.4; }
422
+ /* Zahlungsart explanatory block — fills the otherwise-empty step + sets expectations. */
423
+ .md3 .co-pay-note { display: flex; align-items: flex-start; gap: 10px; margin-top: 4px; padding: 14px 16px;
424
+ background: var(--md-primary-container); border-radius: var(--md-r-md); color: var(--md-on-surface); font-size: 13.5px; line-height: 1.5; }
425
+ .md3 .co-pay-note svg { color: var(--md-primary); flex: none; margin-top: 1px; }
426
+ .md3 .co-pay-benes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 4px; }
427
+ .md3 .co-pay-bene { display: flex; align-items: flex-start; gap: 10px; padding: 14px 16px;
428
+ border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-md); background: var(--md-sc-lowest, #fff); }
429
+ .md3 .co-pay-bene svg { color: var(--md-good); flex: none; margin-top: 1px; }
430
+ .md3 .co-pay-bene b { display: block; font-size: 13.5px; color: var(--md-on-surface); }
431
+ .md3 .co-pay-bene span { font-size: 12.5px; color: var(--md-on-surface-variant); line-height: 1.4; }
432
+ @media (max-width: 700px) { .md3 .co-pay-benes { grid-template-columns: 1fr; } }
433
+ /* Zahldetails — borrower block + accordion */
434
+ .md3 .co-borrower-head { font-size: 14px; color: var(--md-on-surface); }
435
+ .md3 .co-borrower-role { font-weight: 700; }
436
+ .md3 .co-accordion { margin-top: 16px; border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-md, 12px); overflow: hidden; }
437
+ .md3 .co-accordion-head { display: flex; align-items: center; justify-content: space-between; width: 100%;
438
+ padding: 14px 16px; background: var(--md-sc); border: 0; cursor: pointer; font: 600 15px var(--md-font); color: var(--md-on-surface); }
439
+ .md3 .co-accordion-body { padding: 18px 16px; }
440
+ /* Zusatzleistungen — warranty/registration/delivery card extras */
441
+ .md3 .co-section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
442
+ .md3 .co-toggle { display: inline-flex; background: var(--md-sc); border-radius: 999px; padding: 3px; }
443
+ .md3 .co-toggle-btn { border: 0; background: none; cursor: pointer; padding: 6px 16px; border-radius: 999px;
444
+ font: 600 13px var(--md-font); color: var(--md-on-surface-variant); }
445
+ .md3 .co-toggle-btn.is-on { background: var(--md-sc-lowest, #fff); color: var(--md-primary); box-shadow: var(--md-e1, 0 1px 3px rgba(0,0,0,.12)); }
446
+ .md3 .co-pay-price { font: 700 15px var(--md-font); color: var(--md-on-surface); }
447
+ .md3 .co-pay-list { margin: 4px 0 0; padding-left: 18px; font-size: 12px; color: var(--md-on-surface-variant); line-height: 1.5; }
448
+ .md3 .co-pay-check { position: absolute; top: 16px; right: 16px; width: 22px; height: 22px; border-radius: 6px;
449
+ border: 2px solid var(--md-outline); display: flex; align-items: center; justify-content: center;
450
+ font-size: 14px; font-weight: 700; color: #fff; }
451
+ .md3 .co-pay-card.is-on .co-pay-check { background: var(--md-primary); border-color: var(--md-primary); }
452
+ .md3 .co-addr-link { display: inline-flex; align-items: center; gap: 5px; margin-top: 6px; color: var(--md-primary);
453
+ font-weight: 600; font-size: 13px; cursor: pointer; }
454
+
455
+ /* ---------- 404 ---------- */
456
+ .md3 .nf-page { padding: 24px 0 64px; }
457
+ .md3 .nf-hero { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: center; padding: 48px 24px; }
458
+ .md3 .nf-hero-text { display: flex; flex-direction: column; align-items: flex-start; gap: 14px; }
459
+ .md3 .nf-eyebrid { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; font-size: 14px;
460
+ color: var(--md-on-surface-variant); }
461
+ .md3 .nf-code { font: 800 96px/1 var(--md-font-display, var(--md-font)); color: var(--md-primary); letter-spacing: -2px; margin: 0; }
462
+ .md3 .nf-sub { font-size: 18px; color: var(--md-on-surface); margin: 0; max-width: 36ch; line-height: 1.5; }
463
+ .md3 .nf-search { min-width: 0; }
464
+ .md3 .nf-reco { padding: 24px; }
465
+ .md3 .nf-reco .md-title { margin-bottom: 16px; }
466
+ @media (max-width: 860px) {
467
+ .md3 .nf-hero { grid-template-columns: 1fr; gap: 24px; padding: 24px; }
468
+ .md3 .nf-code { font-size: 72px; }
469
+ }
470
+
471
+ /* ---------- shared textarea ---------- */
472
+ .md3 .mtextarea { width: 100%; min-height: 96px; padding: 12px 14px; border-radius: var(--md-r-xs, 8px);
473
+ border: 0; box-shadow: inset 0 0 0 1px var(--md-outline-variant); background: transparent; resize: vertical;
474
+ font: 400 14px/1.5 var(--md-font); color: var(--md-on-surface); }
475
+ .md3 .mtextarea:focus { outline: 0; box-shadow: inset 0 0 0 2px var(--md-accent); }
476
+
477
+ /* ---------- Impressum ---------- */
478
+ .md3 .imp-page { padding: 28px 24px 64px; display: flex; flex-direction: column; gap: 20px; }
479
+ .md3 .imp-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
480
+ border-radius: var(--md-r-lg, 16px); padding: 24px 28px; }
481
+ .md3 .imp-title { font: 700 18px var(--md-font); margin: 0 0 14px; color: var(--md-on-surface);
482
+ padding-bottom: 12px; border-bottom: 1px solid var(--md-outline-variant); }
483
+ .md3 .imp-text { white-space: pre-line; font-size: 14px; line-height: 1.6; color: var(--md-on-surface-variant); }
484
+
485
+ /* ---------- Kontakt ---------- */
486
+ .md3 .kt-page { display: grid; grid-template-columns: 1fr 320px; gap: 32px; padding: 28px 24px 64px; align-items: start; }
487
+ .md3 .kt-intro { font-size: 15px; color: var(--md-on-surface); margin: 0 0 20px; line-height: 1.5; }
488
+ .md3 .kt-form { display: flex; flex-direction: column; gap: 18px; }
489
+ .md3 .kt-honeypot { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; }
490
+ .md3 .kt-buttons { display: flex; justify-content: flex-end; gap: 12px; margin-top: 24px; }
491
+ .md3 .kt-success { display: flex; align-items: center; gap: 8px; margin-top: 16px; color: var(--md-good);
492
+ font-weight: 600; font-size: 14px; }
493
+ .md3 .kt-aside { background: var(--md-sc); border-radius: var(--md-r-lg, 16px); padding: 24px; display: flex;
494
+ flex-direction: column; gap: 22px; }
495
+ .md3 .kt-aside-row { display: flex; gap: 14px; align-items: flex-start; }
496
+ .md3 .kt-aside-icon { color: var(--md-primary); flex: none; }
497
+ .md3 .kt-aside-label { margin: 0; font-size: 13px; color: var(--md-on-surface-variant); }
498
+ .md3 .kt-aside-value { margin: 2px 0 0; font-weight: 700; color: var(--md-on-surface); }
499
+ @media (max-width: 860px) { .md3 .kt-page { grid-template-columns: 1fr; } }
500
+
501
+ /* ---------- Suchaufträge ---------- */
502
+ .md3 .ms-page { padding: 28px 24px 64px; }
503
+ .md3 .ms-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; }
504
+ .md3 .ms-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 18px; }
505
+ .md3 .ms-card { background: var(--md-sc-lowest, #fff); border: 1px solid var(--md-outline-variant);
506
+ border-radius: var(--md-r-lg, 16px); padding: 20px; display: flex; flex-direction: column; gap: 14px; }
507
+ .md3 .ms-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
508
+ .md3 .ms-card-title { font: 700 17px var(--md-font); margin: 0; color: var(--md-on-surface); }
509
+ .md3 .ms-card-desc { font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.5; margin: 0; }
510
+ .md3 .ms-card-info { display: flex; gap: 24px; flex-wrap: wrap; padding: 12px 0; border-top: 1px solid var(--md-outline-variant); border-bottom: 1px solid var(--md-outline-variant); }
511
+ .md3 .ms-card-info > div { display: flex; flex-direction: column; gap: 2px; }
512
+ .md3 .ms-info-label { font-size: 12px; color: var(--md-on-surface-variant); }
513
+ .md3 .ms-info-val { font-weight: 700; font-size: 14px; color: var(--md-on-surface); }
514
+ .md3 .ms-card-actions { display: flex; justify-content: flex-end; gap: 10px; }
515
+ .md3 .ms-empty { text-align: center; padding: 64px 24px; color: var(--md-on-surface-variant); }
516
+ .md3 .ms-empty svg { margin-bottom: 12px; }
517
+ @media (max-width: 600px) { .md3 .ms-grid { grid-template-columns: 1fr; } }
518
+
519
+ /* ---------- Einstellungen (Profile settings) ---------- */
520
+ .md3 .st-page { padding: 24px 24px 64px; }
521
+ /* st-shell — vertical breathing room for the legacy settings card in `next` mode.
522
+ The legacy .container is margin:0 on desktop, so the card sits flush against the
523
+ header/footer. Vertical only; horizontal margin stays from .container so the card
524
+ width is unchanged. Compound .md3.st-shell (0,2,0) beats .container (0,1,0). */
525
+ .md3.st-shell { margin-top: 28px; margin-bottom: 56px; }
526
+ @media (max-width: 980px) { .md3.st-shell { margin-top: 14px; margin-bottom: 32px; } }
527
+ .md3 .st-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--md-outline-variant); margin-bottom: 24px; overflow-x: auto; }
528
+ .md3 .st-tab { display: inline-flex; align-items: center; gap: 8px; padding: 12px 18px; border: 0; background: none;
529
+ cursor: pointer; font: 600 15px var(--md-font); color: var(--md-on-surface-variant); border-bottom: 2px solid transparent;
530
+ margin-bottom: -1px; white-space: nowrap; }
531
+ .md3 .st-tab:hover { color: var(--md-on-surface); }
532
+ .md3 .st-tab.is-active { color: var(--md-primary); border-bottom-color: var(--md-primary); }
533
+ .md3 .st-tab svg { flex: none; }
534
+
535
+ /* md3 settings forms (Account tab rebuilt on the autobahn primitives) */
536
+ .md3 .st-panels { max-width: 900px; }
537
+ .md3 .st-loading { display: flex; justify-content: center; padding: 56px; }
538
+ .md3 .st-form { display: flex; flex-direction: column; gap: 24px; }
539
+ .md3 .st-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 20px; }
540
+ @media (max-width: 600px) { .md3 .st-grid { grid-template-columns: 1fr; } }
541
+ .md3 .st-phone { grid-column: 1 / -1; display: grid; grid-template-columns: 140px 120px 1fr; gap: 12px; align-items: end; }
542
+ @media (max-width: 600px) { .md3 .st-phone { grid-template-columns: 1fr; } }
543
+ .md3 .st-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 16px; border-top: 1px solid var(--md-outline-variant); flex-wrap: wrap; }
544
+ .md3 .st-actions-right { display: flex; gap: 12px; }
545
+ .md3 .st-del .mbtn, .md3 .st-del { color: var(--md-error); }
546
+
547
+ /* data-usage toggle rows */
548
+ .md3 .du-row { display: flex; align-items: center; gap: 16px; padding: 18px; border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); }
549
+ .md3 .du-ic { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; flex: none; border-radius: var(--md-r-full); background: var(--md-surface-variant, #eef1f6); color: var(--md-primary); }
550
+ .md3 .du-copy { display: flex; flex-direction: column; gap: 2px; flex: 1; }
551
+ .md3 .du-label { font: 700 15px var(--md-font); color: var(--md-on-surface); }
552
+ .md3 .du-text { font-size: 13px; color: var(--md-on-surface-variant); }
553
+ /* md3 switch */
554
+ .md3 .mswitch { position: relative; display: inline-flex; flex: none; cursor: pointer; }
555
+ .md3 .mswitch input { position: absolute; opacity: 0; width: 0; height: 0; }
556
+ .md3 .mswitch-track { display: inline-block; width: 46px; height: 26px; border-radius: var(--md-r-full); background: var(--md-outline-variant); transition: background .15s; position: relative; }
557
+ .md3 .mswitch-thumb { position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: var(--md-r-full); background: #fff; box-shadow: var(--md-e1); transition: transform .15s; }
558
+ .md3 .mswitch input:checked + .mswitch-track { background: var(--md-primary); }
559
+ .md3 .mswitch input:checked + .mswitch-track .mswitch-thumb { transform: translateX(20px); }
560
+
561
+ /* md3 address cards (Einstellungen → Adressen) */
562
+ .md3 .adr-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }
563
+ .md3 .adr-card { border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); padding: 18px; box-shadow: var(--md-e1); }
564
+ .md3 .adr-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
565
+ .md3 .adr-title { font: 700 16px var(--md-font); color: var(--md-on-surface); }
566
+ .md3 .adr-row { display: flex; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--md-outline-variant); font-size: 13.5px; }
567
+ .md3 .adr-row:last-child { border-bottom: 0; }
568
+ .md3 .adr-k { flex: none; width: 110px; color: var(--md-on-surface-variant); }
569
+ .md3 .adr-v { color: var(--md-on-surface); }
570
+ .md3 .adr-v--empty { color: var(--md-error); }
571
+ .md3 .adr-add { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 160px; border: 2px dashed var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: none; cursor: pointer; color: var(--md-on-surface-variant); font: 600 14px var(--md-font); transition: border-color .12s, color .12s; }
572
+ .md3 .adr-add:hover { border-color: var(--md-primary); color: var(--md-primary); }
573
+ .md3 .adr-add-ic { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--md-r-full); background: var(--md-surface-variant, #eef1f6); }
574
+
575
+ /* dealer dashboard — md3 odometer + chart-period buttons */
576
+ .md3 .dash-card .employeesCountWrapper, .md3 .dash-odo { display: inline-flex; gap: 6px; margin: 12px 0; }
577
+ .md3 .dash-odo span { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 46px; border-radius: var(--md-r-sm, 10px); background: var(--md-primary); color: #fff; font: 700 24px var(--md-font); }
578
+
579
+ /* dealer Mitarbeiter (employees) — md3 polish over the legacy structure */
580
+ .md3 .emp-info { border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); padding: 20px; box-shadow: var(--md-e1); margin-bottom: 20px; }
581
+ .md3 .emp-controls { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; }
582
+ .md3 .emp-add { background: var(--md-primary) !important; color: #fff !important; border-radius: var(--md-r-full) !important; padding: 10px 20px !important; font: 600 14px var(--md-font) !important; text-transform: none !important; box-shadow: var(--md-e1) !important; }
583
+ .md3 .emp-table { border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); background: var(--md-surface, #fff); overflow: hidden; box-shadow: var(--md-e1); }
584
+ .md3 .emp-thead { background: var(--md-surface-variant, #eef1f6); color: var(--md-on-surface-variant); font: 600 12.5px var(--md-font); }
585
+
586
+ /* ---------- Meine Fahrzeuge (vehicle list) ---------- */
587
+ .md3 .mv-page { padding: 24px 24px 64px; }
588
+ .md3 .mv-warning { background: var(--md-error-container, #fdeceb); color: var(--md-error); border-radius: var(--md-r-sm, 12px); padding: 12px 16px; margin-bottom: 16px; font-size: 14px; }
589
+ .md3 .mv-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 24px; flex-wrap: wrap; }
590
+ .md3 .mv-tools { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
591
+ .md3 .mv-search { width: 260px; max-width: 100%; padding-right: 4px; }
592
+ .md3 .mv-search input { border: 0; outline: 0; background: transparent; flex: 1; font: inherit; color: inherit; min-width: 0; }
593
+ .md3 .mv-search-btn { display: flex; align-items: center; justify-content: center; border: 0; background: none; cursor: pointer; color: var(--md-on-surface-variant); flex: none; padding: 0 4px; }
594
+ .md3 .mv-loading { display: flex; justify-content: center; padding: 64px; }
595
+
596
+ /* ---------- Meine Fahrzeuge — md3 owner/dealer card (.mvc-*) ---------- */
597
+ .md3 .mvc-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(440px, 1fr)); gap: 20px; }
598
+ @media (max-width: 600px) { .md3 .mvc-list { grid-template-columns: 1fr; gap: 16px; } }
599
+ .md3 .mvc { display: flex; flex-direction: column; background: var(--md-surface, #fff); border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); box-shadow: var(--md-e1); overflow: hidden; }
600
+ .md3 .mvc-media { position: relative; display: block; aspect-ratio: 16 / 10; background: var(--md-surface-variant, #eef1f6); border-bottom: 1px solid var(--md-outline-variant); }
601
+ .md3 .mvc-media img { width: 100%; height: 100%; object-fit: contain; }
602
+ .md3 .mvc-imgcount { position: absolute; bottom: 8px; right: 8px; display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border-radius: var(--md-r-full); background: rgba(0,0,0,.62); color: #fff; font-size: 11px; font-weight: 600; }
603
+ .md3 .mvc-status { position: absolute; top: 10px; left: 10px; display: inline-flex; align-items: center; height: 26px; padding: 0 12px; border-radius: var(--md-r-full); background: var(--md-surface, #fff); color: var(--md-on-surface-variant); font-size: 12px; font-weight: 700; box-shadow: var(--md-e1); cursor: pointer; }
604
+ .md3 .mvc-status--on { background: var(--md-good, #0F7B43); color: #fff; }
605
+ .md3 .mvc-body { padding: 14px 16px; display: flex; flex-direction: column; gap: 6px; }
606
+ .md3 .mvc-title { font: 700 18px var(--md-font); color: var(--md-on-surface); text-decoration: none; line-height: 1.25; }
607
+ .md3 a.mvc-title:hover { color: var(--md-primary); }
608
+ .md3 .mvc-trim { font-size: 13.5px; color: var(--md-on-surface-variant); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
609
+ .md3 .mvc-specs { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 8px; font-size: 12.5px; color: var(--md-on-surface-variant); margin-top: 2px; }
610
+ .md3 .mvc-dot { color: var(--md-outline-variant); }
611
+ .md3 .mvc-ids { display: flex; flex-wrap: wrap; gap: 2px 14px; font-size: 11.5px; color: var(--md-on-surface-variant); margin-top: 4px; }
612
+ .md3 .mvc-ids b { color: var(--md-on-surface); font-weight: 600; }
613
+ .md3 .mvc-price { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
614
+ .md3 .mvc-price-main { font-weight: 700; font-size: 22px; color: var(--md-primary); letter-spacing: -.4px; }
615
+ .md3 .mvc-price-rate { font-size: 12.5px; color: var(--md-on-surface-variant); }
616
+ .md3 .mvc-price-rate b { color: var(--md-on-surface); }
617
+ .md3 .mvc-aggs { display: grid; grid-template-columns: repeat(auto-fit, minmax(88px, 1fr)); gap: 8px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--md-outline-variant); }
618
+ .md3 .mvc-agg { display: flex; flex-direction: column; gap: 1px; }
619
+ .md3 .mvc-agg-k { font-size: 11px; color: var(--md-on-surface-variant); }
620
+ .md3 .mvc-agg-v { font-size: 15px; font-weight: 700; color: var(--md-on-surface); }
621
+ .md3 .mvc-dealer { border-top: 1px solid var(--md-outline-variant); }
622
+ .md3 .mvc-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; border-top: 1px solid var(--md-outline-variant); margin-top: auto; flex-wrap: wrap; }
623
+ .md3 .mvc-controls { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
624
+ .md3 .mvc-ctrl { display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-full); background: var(--md-surface, #fff); color: var(--md-on-surface-variant); cursor: pointer; transition: background .12s, color .12s, border-color .12s; }
625
+ .md3 .mvc-ctrl:hover { background: var(--md-surface-variant, #eef1f6); color: var(--md-primary); border-color: var(--md-primary); }
626
+ .md3 .mvc-ctrl--disabled { opacity: .4; cursor: not-allowed; }
627
+ .md3 .mvc-ctrl--disabled:hover { background: var(--md-surface, #fff); color: var(--md-on-surface-variant); border-color: var(--md-outline-variant); }
628
+
629
+ /* ---------- Checkout OrderOverview (Übersicht) ---------- */
630
+ .md3 .oo-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
631
+ .md3 .oo-car { display: flex; gap: 16px; align-items: center; padding-bottom: 16px; border-bottom: 1px solid var(--md-outline-variant); margin-bottom: 16px; }
632
+ .md3 .oo-car-img { width: 96px; height: 66px; object-fit: contain; border-radius: var(--md-r-sm, 10px); flex: none; }
633
+ .md3 .oo-car-name { font: 700 17px var(--md-font); color: var(--md-on-surface); }
634
+ .md3 .oo-car-sub { font-size: 13px; color: var(--md-on-surface-variant); margin-bottom: 4px; }
635
+ .md3 .oo-seller { font-size: 13px; color: var(--md-on-surface-variant); cursor: pointer; }
636
+ .md3 .oo-underline { color: var(--md-primary); text-decoration: underline; cursor: pointer; }
637
+ .md3 .oo-row { padding: 12px 0; border-bottom: 1px solid var(--md-outline-variant); }
638
+ .md3 .oo-row:last-child { border-bottom: 0; }
639
+ .md3 .oo-row-title { font-weight: 700; font-size: 14px; color: var(--md-on-surface); margin-bottom: 6px; display: flex; justify-content: space-between; }
640
+ .md3 .oo-row-add { font-weight: 400; font-size: 12px; color: var(--md-on-surface-variant); }
641
+ .md3 .oo-row-val { font-size: 14px; color: var(--md-on-surface-variant); }
642
+ .md3 .oo-line { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; padding: 3px 0; }
643
+ .md3 .oo-line-name { color: var(--md-on-surface-variant); }
644
+ .md3 .oo-line-rate { color: var(--md-on-surface); font-weight: 600; text-align: right; }
645
+ .md3 .oo-summary { align-self: start; }
646
+ .md3 .oo-total { display: flex; flex-direction: column; padding-bottom: 14px; margin-bottom: 8px; border-bottom: 1px solid var(--md-outline-variant); }
647
+ .md3 .oo-total-label { font-size: 14px; color: var(--md-on-surface-variant); }
648
+ .md3 .oo-total-amount { font: 800 28px var(--md-font); color: var(--md-primary); }
649
+ .md3 .oo-total-unit { font-size: 15px; font-weight: 600; color: var(--md-on-surface-variant); }
650
+ .md3 .oo-vat { font-size: 12px; color: var(--md-on-surface-variant); }
651
+ .md3 .oo-finance-link { display: inline-block; margin: 8px 0; color: var(--md-primary); font-weight: 600; font-size: 13px; cursor: pointer; }
652
+ .md3 .oo-terms { margin-top: 20px; font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.6; }
653
+ .md3 .oo-buy { display: flex; justify-content: flex-end; margin-top: 16px; }
654
+ @media (max-width: 800px) { .md3 .oo-grid { grid-template-columns: 1fr; } }
655
+
656
+ /* ---------- Bestellungen (orders) ---------- */
657
+ .md3 .mo-page { padding: 28px 24px 64px; }
658
+ .md3 .mo-list { display: flex; flex-direction: column; gap: 18px; }
659
+ .md3 .mo-card { padding: 20px 22px; }
660
+ .md3 .mo-status { font-size: 13px; color: var(--md-on-surface-variant); margin-bottom: 12px; }
661
+ .md3 .mo-status-val { color: var(--md-primary); font-weight: 700; }
662
+ .md3 .mo-head { display: flex; align-items: center; gap: 16px; padding-bottom: 14px; border-bottom: 1px solid var(--md-outline-variant); }
663
+ .md3 .mo-head > div:nth-child(2) { flex: 1; min-width: 0; }
664
+ .md3 .mo-delivered { font-size: 12px; color: var(--md-good); margin-top: 4px; }
665
+ .md3 .mo-rows { padding: 12px 0; border-bottom: 1px solid var(--md-outline-variant); }
666
+ .md3 .mo-total { display: flex; justify-content: space-between; align-items: baseline; padding-top: 14px; font-weight: 700; }
667
+ .md3 .mo-total-val { font-size: 20px; color: var(--md-primary); }
668
+
669
+ /* ---------- Vergleich ---------- */
670
+ .md3 .cmp-page { padding: 24px 24px 64px; }
671
+ .md3 .cmp-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }
672
+
673
+ /* ---------- Abrechnung (Billing) ---------- */
674
+ .md3 .bl-page { padding: 28px 24px 64px; }
675
+ .md3 .bl-allprices { font-size: 13px; color: var(--md-on-surface-variant); margin: 12px 0 20px; }
676
+ .md3 .bl-search { background: var(--md-sc); border-radius: var(--md-r-md, 12px); padding: 16px; margin-bottom: 20px; }
677
+ .md3 .bl-range { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; }
678
+ .md3 .bl-range .mfield { width: 200px; flex-direction: row; gap: 8px; }
679
+ .md3 .bl-active { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; font-size: 14px; }
680
+ .md3 .bl-active-btns { display: flex; align-items: center; gap: 10px; }
681
+ .md3 .bl-reset { border: 0; background: none; cursor: pointer; color: var(--md-on-surface-variant); display: flex; }
682
+ .md3 .bl-section { margin: 24px 0 12px; }
683
+ .md3 .bl-noresult, .md3 .bl-error { color: var(--md-on-surface-variant); font-size: 14px; }
684
+
685
+ /* ---------- Daten-Export / Import ---------- */
686
+ .md3 .dx-page { padding: 28px 24px 64px; display: flex; flex-direction: column; gap: 18px; }
687
+ .md3 .dx-info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
688
+ .md3 .dx-text { font-size: 14px; line-height: 1.55; color: var(--md-on-surface-variant); margin: 0; }
689
+ .md3 .dx-contacts { display: flex; gap: 28px; flex-wrap: wrap; margin-top: 14px; }
690
+ .md3 .dx-contact { display: flex; gap: 12px; align-items: center; color: var(--md-on-surface); }
691
+ .md3 .dx-contact svg { color: var(--md-primary); flex: none; }
692
+ .md3 .dx-c-title { font-size: 12px; color: var(--md-on-surface-variant); }
693
+ .md3 .dx-steps { display: flex; flex-wrap: wrap; gap: 16px; margin: 8px 0 16px; }
694
+ .md3 .dx-step { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 180px; }
695
+ .md3 .dx-step-num { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px; flex: none;
696
+ border-radius: 50%; background: var(--md-primary); color: #fff; font-weight: 700; font-size: 14px; }
697
+ @media (max-width: 700px) { .md3 .dx-info-grid { grid-template-columns: 1fr; } }
698
+
699
+ /* shared dealer/owner page frame — md3 padding + max width (legacy inner blocks preserved) */
700
+ .md3 .dlr-page { padding: 24px; }
701
+ @media (min-width: 1100px) { .md3 .dlr-page { max-width: 1280px; margin: 0 auto; } }
702
+ @media (max-width: 700px) {
703
+ .md3 .co-grid { grid-template-columns: 1fr; }
704
+ .md3 .co-phone { grid-template-columns: 90px 1fr 1fr; }
705
+ .md3 .co-pay-grid { grid-template-columns: 1fr; }
706
+ }
707
+ @media (max-width: 700px) {
708
+ .md3 .co-header-info { display: none; }
709
+ .md3 .co-step-label { display: none; }
710
+ .md3 .co-step { flex: none; }
711
+ .md3 .co-step-bar { min-width: 24px; }
712
+ }
713
+ /* below the 992px desktop breakpoint the content no longer reserves the 424px left
714
+ gap, so the fixed rail would overlap the form — hide it (mobile uses the header stepper). */
715
+ @media (max-width: 991px) {
716
+ .md3 .co-rail { display: none; }
717
+ }
718
+
719
+ /* ---------- custom select / dropdown ----------
720
+ Themeable replacement for native <select> (whose OS-rendered option list can't be
721
+ styled). Trigger mirrors .mfield; the menu is a controlled .mcard-style popover. */
722
+ .md3 .mselect { position: relative; display: inline-block; }
723
+ .md3 .mselect.mselect--block { display: block; width: 100%; }
724
+ .md3 .mselect-btn { display: flex; align-items: center; gap: 10px; width: 100%; height: 48px; padding: 0 14px;
725
+ border: 0; border-radius: var(--md-r-xs); background: transparent; box-shadow: inset 0 0 0 1px var(--md-outline-variant);
726
+ font: inherit; font-size: 14px; color: var(--md-on-surface); cursor: pointer; text-align: left; transition: box-shadow .15s; }
727
+ .md3 .mselect-btn:hover { box-shadow: inset 0 0 0 1px var(--md-outline); }
728
+ .md3 .mselect-btn[aria-expanded="true"] { box-shadow: inset 0 0 0 2px var(--md-accent); }
729
+ .md3 .mselect-btn:disabled { opacity: .5; cursor: not-allowed; }
730
+ .md3 .mselect-btn .lucide { width: 20px; height: 20px; color: var(--md-on-surface-variant); flex: none; }
731
+ .md3 .mselect-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
732
+ .md3 .mselect-label--ph { color: var(--md-on-surface-variant); }
733
+ .md3 .mselect-chev { margin-left: auto; transition: transform .15s; }
734
+ .md3 .mselect-btn[aria-expanded="true"] .mselect-chev { transform: rotate(180deg); }
735
+ .md3 .mselect--sm .mselect-btn { height: 34px; font-size: 13px; padding: 0 10px; gap: 6px; }
736
+ .md3 .mselect--sm .mselect-btn .lucide { width: 16px; height: 16px; }
737
+ .md3 .mselect-menu { position: absolute; z-index: 60; top: calc(100% + 4px); left: 0; min-width: 100%; max-height: 288px;
738
+ overflow-y: auto; padding: 6px; margin: 0; list-style: none; background: var(--md-sc-lowest, #fff);
739
+ border-radius: var(--md-r-sm, 12px); border: 1px solid var(--md-outline-variant);
740
+ box-shadow: var(--md-e2, 0 8px 24px rgba(0,0,0,.16)); }
741
+ .md3 .mselect-menu--right { left: auto; right: 0; }
742
+ .md3 .mselect-opt { display: flex; align-items: center; gap: 8px; width: 100%; padding: 9px 10px; border: 0;
743
+ border-radius: 8px; background: transparent; font: inherit; font-size: 14px; color: var(--md-on-surface);
744
+ text-align: left; cursor: pointer; }
745
+ .md3 .mselect-opt-label { flex: 1; min-width: 0; }
746
+ .md3 .mselect-opt:hover, .md3 .mselect-opt.is-active { background: var(--md-sc); }
747
+ .md3 .mselect-opt[aria-selected="true"] { color: var(--md-primary); font-weight: 600; }
748
+ .md3 .mselect-opt:disabled { opacity: .45; cursor: not-allowed; background: transparent; }
749
+ .md3 .mselect-check { color: var(--md-primary); flex: none; }
750
+
751
+ /* ---------- Detailsuche page ---------- */
752
+ /* the sticky submit bar drives "apply" here, so hide FilterContent's own inline footer button. */
753
+ .md3 .detailed-page .frail-foot { display: none; }
754
+ .md3 .detailed-submitbar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; padding: 12px 0;
755
+ background: var(--md-sc-lowest, #fff); border-top: 1px solid var(--md-outline-variant);
756
+ box-shadow: 0 -4px 16px rgba(0,0,0,.06); }
757
+ /* the "Detailsuche" link at the foot of the simple SRP rail. */
758
+ .md3 .detailed-link { border-radius: 10px; }
759
+ .md3 .detailed-link:hover { background: var(--md-sc); }
760
+
761
+ /* sectioned Detailsuche layout (FilterContent variant="page") — full-width sections, multi-col grids */
762
+ .md3 .ds-page { display: block; }
763
+ .md3 .ds-section { padding: 30px 0; border-top: 1px solid var(--md-outline-variant); }
764
+ .md3 .ds-section:first-child { border-top: 0; padding-top: 6px; }
765
+ .md3 .ds-section > h2 { font: 700 19px var(--md-font); letter-spacing: -.2px; margin: 0 0 20px; color: var(--md-on-surface); }
766
+ .md3 .ds-sub { font: 600 13px var(--md-font); color: var(--md-on-surface-variant); margin: 20px 0 8px; }
767
+ .md3 .ds-sub:first-child { margin-top: 0; }
768
+ .md3 .ds-grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 28px; }
769
+ .md3 .ds-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px 28px; }
770
+ .md3 .ds-cols-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px 28px; }
771
+ @media (max-width: 900px) { .md3 .ds-grid-3, .md3 .ds-cols-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
772
+ @media (max-width: 600px) { .md3 .ds-grid-3, .md3 .ds-grid-2, .md3 .ds-cols-3 { grid-template-columns: 1fr; } }
773
+
774
+ /* two-column section flow — sections after Grundbasis auto-balance into 2 columns; the
775
+ densest (Sicherheit, Ausstattung) span both so their 3-up grids keep full reading width. */
776
+ .md3 .ds-flow { column-count: 2; column-gap: 48px; }
777
+ .md3 .ds-flow .ds-section { break-inside: avoid; -webkit-column-break-inside: avoid; padding: 26px 0; }
778
+ .md3 .ds-flow .ds-section--wide { column-span: all; -webkit-column-span: all; padding: 30px 0; }
779
+ /* inside a half-width flow column, collapse the multi-col inner grids so rows aren't cramped. */
780
+ .md3 .ds-flow .ds-section:not(.ds-section--wide) .ds-grid-3 { grid-template-columns: 1fr 1fr; gap: 0 24px; }
781
+ .md3 .ds-flow .ds-section:not(.ds-section--wide) .ds-cols-3 { grid-template-columns: 1fr; gap: 0; }
782
+ .md3 .ds-flow .ds-section:not(.ds-section--wide) .ds-grid-2 { grid-template-columns: 1fr; }
783
+ @media (max-width: 900px) { .md3 .ds-flow { column-count: 1; } }
784
+
785
+ /* ---------- Merkliste (Favourites) ---------- */
786
+ .md3 .fav-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; }
787
+ .md3 .fav-cell { display: flex; flex-direction: column; }
788
+ .md3 .fav-compare { display: inline-flex; align-items: center; justify-content: center; gap: 8px; margin-top: 8px;
789
+ height: 40px; border-radius: var(--md-r-sm, 12px); border: 1px solid var(--md-outline-variant); background: transparent;
790
+ font: 600 13px var(--md-font); color: var(--md-on-surface-variant); cursor: pointer;
791
+ transition: background .15s, border-color .15s, color .15s; }
792
+ .md3 .fav-compare:hover { background: var(--md-sc); }
793
+ .md3 .fav-compare--on { background: var(--md-primary-container); color: var(--md-on-primary-container); border-color: transparent; }
794
+ .md3 .fav-compare .lucide { width: 18px; height: 18px; }
795
+
796
+ /* ---------- segmented buttons ---------- */
797
+ .md3 .segmented { display: inline-flex; border-radius: var(--md-r-full); box-shadow: inset 0 0 0 1px var(--md-outline-variant); overflow: hidden; }
798
+ .md3 .segmented button { height: 38px; padding: 0 18px; border: 0; background: transparent; cursor: pointer;
799
+ font: 600 13px var(--md-font); color: var(--md-on-surface-variant); display: inline-flex; align-items: center; gap: 6px;
800
+ border-right: 1px solid var(--md-outline-variant); transition: background .15s; }
801
+ .md3 .segmented button:last-child { border-right: 0; }
802
+ .md3 .segmented button.on { background: var(--md-secondary-container); color: var(--md-on-secondary-container); }
803
+ .md3 .segmented button .lucide { width: 16px; height: 16px; }
804
+
805
+ /* ---------- spec item ---------- */
806
+ .md3 .specitem { display: flex; align-items: center; gap: 10px; }
807
+ .md3 .specitem .lucide { width: 20px; height: 20px; color: var(--md-on-surface-variant); flex: none; stroke-width: 1.75; }
808
+ .md3 .specitem b { font-weight: 600; font-size: 14px; color: var(--md-on-surface); }
809
+ .md3 .specitem span { display: block; font-size: 11.5px; color: var(--md-on-surface-variant); }
810
+
811
+ /* ---------- list divider ---------- */
812
+ .md3 .mdivider { height: 1px; background: var(--md-outline-variant); border: 0; margin: 0; }
813
+
814
+ /* ---------- accent helpers (Signal-Cyan) ---------- */
815
+ .md3 .link-accent:hover { text-decoration: underline; text-decoration-color: var(--md-accent); text-underline-offset: 3px; }
816
+ .md3 .accent-rule { height: 3px; width: 44px; border-radius: 2px; background: var(--autode-swoosh); }
817
+ .md3 :focus-visible { outline: 2px solid var(--md-accent); outline-offset: 2px; }
818
+ .md3 .link-accent { color: var(--md-primary); cursor: pointer; text-decoration: none; }
819
+ .md3 .link-accent:hover { text-decoration: underline; text-decoration-color: var(--md-accent); text-underline-offset: 3px; }
820
+
821
+ /* ---------- card image carousel ---------- */
822
+ .md3 .car-arrow { position: absolute; top: 50%; transform: translateY(-50%); width: 32px; height: 32px; border-radius: var(--md-r-full);
823
+ border: 0; background: rgba(255,255,255,.92); color: var(--md-on-surface); box-shadow: var(--md-e1);
824
+ display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: 0; transition: opacity var(--dur-1); z-index: 2; }
825
+ .md3 .car-arrow--l { left: 8px; } .md3 .car-arrow--r { right: 8px; }
826
+ .md3 .cardcar:hover .car-arrow { opacity: 1; }
827
+ @media (hover: none) { .md3 .car-arrow { opacity: .92; } }
828
+
829
+ /* ==========================================================================
830
+ RESPONSIVE LAYOUT LAYER
831
+ Layout-critical grids live here (inline React styles can't carry @media).
832
+ Breakpoints: tablet ≤ 980px, phone ≤ 600px.
833
+ ========================================================================== */
834
+ .md3 .container { max-width: 1180px; margin: 0 auto; width: 100%; }
835
+
836
+ .md3 .hero-grid { display: grid; grid-template-columns: 1.05fr .95fr; gap: 40px; align-items: center; }
837
+ .md3 .hero-inner { padding: 40px 24px 44px; }
838
+ .md3 .field-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
839
+ .md3 .cards-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 20px; }
840
+ .md3 .cards-2 { display: grid; grid-template-columns: repeat(2,1fr); gap: 18px; }
841
+ .md3 .cards-offers { display: grid; grid-template-columns: repeat(3,1fr); gap: 20px; }
842
+ .md3 .brand-grid { display: grid; grid-template-columns: repeat(6,1fr); gap: 16px; }
843
+ .md3 .steps-3 { display: grid; grid-template-columns: repeat(3,1fr); gap: 32px; }
844
+ /* car-card grids: 2-up across the whole tablet range (incl. landscape ~1024) so cards never cram to 3 narrow columns */
845
+ @media (max-width: 1024px) {
846
+ .md3 .cards-offers, .md3 .cards-3 { grid-template-columns: repeat(2, 1fr); }
847
+ }
848
+ /* guarantee band — one cohesive container with hairline columns (not four floating cards) */
849
+ .md3 .guarantee-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 0; background: var(--md-sc-low);
850
+ border-radius: var(--md-r-lg); overflow: hidden; }
851
+ .md3 .gitem { padding: 26px 24px; display: flex; flex-direction: column; gap: 12px; border-left: 1px solid var(--md-outline-variant); }
852
+ .md3 .gitem:first-child { border-left: 0; }
853
+ /* magazine — editorial: one feature + stacked text rows */
854
+ .md3 .mag-grid { display: grid; grid-template-columns: 1.55fr 1fr; gap: 18px; align-items: stretch; }
855
+ .md3 .mag-side { display: flex; flex-direction: column; gap: 18px; }
856
+ .md3 .mag-item { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 8px;
857
+ padding: 22px 24px; background: var(--md-sc-lowest); }
858
+ /* lower-page polish: connected 3-step flow band + testimonial accents */
859
+ .md3 .steps-flow { position: relative; }
860
+ .md3 .steps-flow::before { content: ''; position: absolute; top: 23px; left: 16.6%; right: 16.6%; height: 2px;
861
+ background: linear-gradient(90deg, transparent, rgba(22,184,232,.55), transparent); z-index: 0; }
862
+ .md3 .steps-flow > * { position: relative; z-index: 1; }
863
+ @media (max-width: 980px) { .md3 .steps-flow::before { display: none; } }
864
+ .md3 .tcard { position: relative; }
865
+ .md3 .tcard::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--autode-swoosh); }
866
+ .md3 .mag-tag { display: inline-flex; align-self: flex-start; padding: 3px 10px; border-radius: var(--md-r-full);
867
+ background: var(--md-primary-container); color: var(--md-on-primary-container); font-size: 11px; font-weight: 700; letter-spacing: .3px; }
868
+ /* VDP: desktop sticky summary bar — docks to top after the calculator scrolls away */
869
+ .md3 .vdp-stickytop { position: fixed; top: 0; left: 0; right: 0; z-index: 70; background: var(--md-sc-lowest);
870
+ border-bottom: 1px solid var(--md-outline-variant); box-shadow: 0 2px 14px rgba(0,0,0,.08);
871
+ transform: translateY(-100%); transition: transform var(--dur-2, .25s); }
872
+ .md3 .vdp-stickytop--on { transform: translateY(0); }
873
+ /* VDP: header row — title left, rating chip right */
874
+ .md3 .vdp-headrow { display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; }
875
+ /* VDP: header fact line — plain text with dot separators (market-leader pattern, no pills) */
876
+ .md3 .vdp-meta { display: flex; flex-wrap: wrap; align-items: center; row-gap: 8px; margin-top: 12px;
877
+ font-size: 14.5px; font-weight: 500; color: var(--md-on-surface); }
878
+ .md3 .vdp-meta > span { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
879
+ .md3 .vdp-meta > span + span::before { content: ''; width: 4px; height: 4px; border-radius: 50%;
880
+ background: var(--md-outline-variant); margin: 0 12px; }
881
+ /* VDP: condition row — footer of the header card (hairline-divided, no own box) */
882
+ .md3 .zustand-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0;
883
+ border-top: 1px solid var(--md-outline-variant); margin-top: 18px; padding-top: 4px; }
884
+ .md3 .zustand-tile { display: flex; align-items: center; gap: 11px; padding: 12px 16px 0;
885
+ border-left: 1px solid var(--md-outline-variant); min-width: 0; }
886
+ .md3 .zustand-tile:first-child { border-left: 0; padding-left: 0; }
887
+ .md3 .vdp-anchors { position: sticky; top: 0; z-index: 20; gap: 8px; padding: 10px 0;
888
+ background: var(--md-surface); overflow-x: auto; scrollbar-width: none;
889
+ width: 0; min-width: 100%; } /* width:0 kills min-content propagation; min-width re-stretches */
890
+ .md3 .vdp-anchors::-webkit-scrollbar { display: none; }
891
+ /* VDP page tint — white cards on cool gray for depth (mobile.de/AS24 use the same trick) */
892
+ .md3 .vdp-tint .mcard--filled { background: var(--md-sc-lowest); border: 1px solid var(--md-outline-variant); }
893
+ .md3 .steps-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 26px; }
894
+ /* HowItWorks — professional redesign: tinted section bg, white elevated step cards, gradient circles */
895
+ .md3 .hiw-section { background: color-mix(in srgb, var(--md-primary) 5%, var(--md-surface));
896
+ border-radius: 20px; padding: 36px 28px; }
897
+ .md3 .hiw-grid { position: relative; }
898
+ .md3 .hiw-step { display: flex; flex-direction: column; align-items: center; text-align: center;
899
+ position: relative; z-index: 1;
900
+ background: #fff; border-radius: 16px; padding: 28px 16px 22px;
901
+ box-shadow: 0 2px 16px rgba(11,83,204,.09); border: 1px solid rgba(11,83,204,.07); }
902
+ .md3 .hiw-step:not(:last-child)::after { content: '›'; position: absolute; right: -16px; top: 42px;
903
+ font-size: 24px; font-weight: 700; color: var(--md-primary); opacity: .4; z-index: 2; pointer-events: none; }
904
+ .md3 .hiw-icon-wrap { position: relative; width: 64px; height: 64px; border-radius: var(--md-r-full);
905
+ background: linear-gradient(135deg, var(--md-primary) 0%, #16B8E8 100%);
906
+ box-shadow: 0 4px 14px color-mix(in srgb, var(--md-primary) 35%, transparent);
907
+ display: flex; align-items: center; justify-content: center; flex: none; margin-bottom: 16px; }
908
+ .md3 .hiw-num { position: absolute; top: -4px; right: -4px; min-width: 20px; height: 20px; border-radius: var(--md-r-full);
909
+ background: #fff; color: var(--md-primary); font-size: 10px; font-weight: 900;
910
+ display: flex; align-items: center; justify-content: center; padding: 0 4px;
911
+ box-shadow: 0 2px 8px rgba(0,0,0,.18); }
912
+ .md3 .hiw-title { font-size: 15px; font-weight: 700; margin-top: 4px; margin-bottom: 8px; color: var(--md-on-surface); }
913
+ .md3 .hiw-desc { margin: 0; font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.55; }
914
+ .md3 .footer-grid { display: grid; grid-template-columns: 1.4fr repeat(4,1fr); gap: 28px; }
915
+ .md3 .srp-grid { display: grid; grid-template-columns: 244px 1fr; gap: 24px; align-items: start; }
916
+ /* SRP grid view sits beside the filter rail — 2 columns, not 3 (cards need ≥340px) */
917
+ .md3 .srp-grid .cards-3 { grid-template-columns: repeat(2,1fr); }
918
+ .md3 .srp-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
919
+ .md3 .srp-chips { flex: 1 1 260px; min-width: 0; }
920
+ /* "NEU" badge on car cards (legacy new-car label). */
921
+ .md3 .neu-badge { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: var(--md-r-full); background: var(--md-primary); color: #fff; font-size: 10.5px; font-weight: 700; letter-spacing: .3px; white-space: nowrap; box-shadow: var(--md-e1); }
922
+ @media (max-width: 820px) { .md3 .srp-chips { order: 3; flex-basis: 100%; } }
923
+ .md3 .vdp-grid { display: grid; grid-template-columns: 1fr 372px; gap: 28px; align-items: start; }
924
+ .md3 .vdp-gallery { grid-column: 1; grid-row: 1; }
925
+ .md3 .vdp-details { grid-column: 1; grid-row: 2; display: flex; flex-direction: column; gap: 22px; }
926
+ .md3 .vdp-aside { grid-column: 2; grid-row: 1 / span 2; align-self: start; position: sticky; top: 84px; display: flex; flex-direction: column; gap: 16px; }
927
+ .md3 .vdp-gallerybox { height: 440px; } .md3 .vdp-gallerybox .cardcar { height: 100%; }
928
+ .md3 .vdp-specs { display: grid; grid-template-columns: 1fr 1fr; gap: 18px 32px; }
929
+ .md3 .curated-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 16px; }
930
+ .md3 .curated-card { padding: 18px; display: flex; flex-direction: column; gap: 14px; background: var(--md-sc-lowest);
931
+ text-align: left; transition: box-shadow var(--dur-2), transform var(--dur-2); }
932
+ .md3 .curated-card:hover { box-shadow: var(--md-e2); transform: translateY(-2px); }
933
+ .md3 .curated-top { display: flex; align-items: center; gap: 13px; }
934
+ .md3 .curated-ic { width: 48px; height: 48px; border-radius: var(--md-r-md); flex: none;
935
+ display: inline-flex; align-items: center; justify-content: center; }
936
+ .md3 .curated-titles { min-width: 0; }
937
+ .md3 .curated-title { display: block; font-family: var(--md-font-display); font-weight: 700; font-size: 16px;
938
+ color: var(--md-on-surface); letter-spacing: -.2px; }
939
+ .md3 .curated-count { display: block; font-size: 13px; color: var(--md-on-surface-variant); margin-top: 2px; }
940
+ .md3 .curated-count b { color: var(--md-primary); font-weight: 700; }
941
+ .md3 .curated-chips { display: flex; flex-wrap: wrap; gap: 6px; }
942
+ .md3 .curated-chip { display: inline-flex; align-items: center; height: 26px; padding: 0 11px; border-radius: var(--md-r-full);
943
+ background: var(--md-sc); color: var(--md-on-surface-variant); font-size: 11.5px; font-weight: 600; white-space: nowrap; }
944
+ .md3 .curated-cta { margin-top: auto; padding-top: 2px; display: inline-flex; align-items: center; gap: 5px;
945
+ font-size: 13.5px; font-weight: 700; color: var(--md-primary); }
946
+ .md3 .curated-cta svg { transition: transform var(--dur-2); }
947
+ .md3 .curated-card:hover .curated-cta svg { transform: translateX(3px); }
948
+ /* continuation modules: side-by-side on desktop, stacked below tablet */
949
+ .md3 .continue-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: start; }
950
+ .md3 .continue-grid > div { min-width: 0; }
951
+ /* "Zuletzt angesehen" / "Ähnlich" — full-width recommendation rows */
952
+ .md3 .seen-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
953
+ .md3 .seen-head-ic { width: 30px; height: 30px; border-radius: var(--md-r-full); background: var(--md-primary-container);
954
+ display: inline-flex; align-items: center; justify-content: center; flex: none; }
955
+ .md3 .seen-head-link { display: inline-flex; align-items: center; gap: 4px; font-size: 13.5px; font-weight: 600; flex: none; cursor: pointer; }
956
+ .md3 .seen-list { display: flex; flex-direction: column; gap: 8px; }
957
+ .md3 .seen-row { width: 100%; display: flex; align-items: center; gap: 14px; padding: 10px 14px 10px 10px;
958
+ background: var(--md-sc-lowest); text-align: left; box-shadow: var(--md-e1); border-color: var(--md-outline-variant);
959
+ transition: box-shadow var(--dur-2), transform var(--dur-2); }
960
+ .md3 .seen-row:hover { box-shadow: var(--md-e2); transform: translateY(-1px); }
961
+ .md3 .seen-row-media { width: 104px; height: 74px; border-radius: var(--md-r-sm); background: var(--md-sc); flex: none;
962
+ display: flex; align-items: center; justify-content: center; overflow: hidden; }
963
+ .md3 .seen-row-img { width: 100%; height: 100%; object-fit: cover; }
964
+ .md3 .seen-row-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
965
+ .md3 .seen-row-toprow { display: flex; align-items: center; gap: 8px; min-width: 0; }
966
+ .md3 .seen-row-title { font-family: var(--md-font-display); font-weight: 700; font-size: 15.5px; color: var(--md-on-surface);
967
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
968
+ .md3 .seen-row-rate { flex: none; font-size: 10.5px; font-weight: 700; padding: 2px 8px; border-radius: var(--md-r-full); white-space: nowrap; }
969
+ .md3 .seen-row-specs { font-size: 12.5px; color: var(--md-on-surface-variant); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
970
+ .md3 .seen-row-price { display: flex; align-items: baseline; gap: 6px; margin-top: 1px; }
971
+ .md3 .seen-row-price .num { font-weight: 700; font-size: 17px; color: var(--md-primary); letter-spacing: -.3px; }
972
+ .md3 .seen-row-unit { font-size: 12px; color: var(--md-on-surface-variant); }
973
+ .md3 .seen-row-cash { font-size: 12px; color: var(--md-on-surface-variant); margin-left: auto; white-space: nowrap; }
974
+ /* LP comparison rows */
975
+ .md3 .lp-vs-row { display: flex; align-items: center; gap: 16px; width: 100%; padding: 13px 2px;
976
+ background: none; border: 0; border-top: 1px solid var(--md-outline-variant); cursor: pointer; text-align: left; }
977
+ .md3 .lp-vs-row:first-child { border-top: 0; }
978
+ .md3 .lp-vs-verdict { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
979
+ /* affordability module */
980
+ .md3 .budget-card { display: flex; align-items: center; gap: 28px; padding: 22px 26px; background: var(--md-sc-lowest); }
981
+ .md3 .budget-copy { flex: 1.1; min-width: 0; }
982
+ .md3 .budget-slider{ flex: 1.4; min-width: 0; }
983
+ /* guided finder banner — the cyan accent moment (dark blue stays exclusive to hero + sell band) */
984
+ .md3 .finder-banner{ display: flex; align-items: center; justify-content: space-between; gap: 20px; width: 100%;
985
+ padding: 18px 22px; background: var(--md-accent-container); text-align: left; }
986
+ .md3 .finder-steps { display: inline-flex; align-items: center; gap: 14px; flex: none; }
987
+ .md3 .thumb-row { display: grid; grid-template-columns: repeat(5,1fr); gap: 10px; }
988
+ .md3 .scroll-row { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; }
989
+ .md3 .scroll-row::-webkit-scrollbar { display: none; }
990
+ .md3 .carrow { display: grid; grid-template-columns: 300px 1fr; }
991
+ .md3 .carrow-media { height: 100%; min-height: 230px; }
992
+
993
+ /* grid card media — fixed 4:3, hairline seam so the white photo area reads as a zone */
994
+ .md3 .cc-media { aspect-ratio: 4 / 3; width: 100%; border-bottom: 1px solid var(--md-outline-variant); }
995
+ .md3 .cc-media .cardcar { height: 100%; }
996
+ /* consistent studio treatment for ALL inventory photos: white backdrop + soft grounding floor
997
+ shadow, so mixed-source cutouts look uniform (Carvana/Cinch catalog look) */
998
+ .md3 .cc-media, .md3 .listcard-media {
999
+ background: radial-gradient(58% 13px at 50% 90%, rgba(16,22,42,.15), rgba(16,22,42,0) 72%), #fff; }
1000
+ /* offer cards: border + soft shadow so they sit on the page (not borderless-floaty) */
1001
+ .md3 .cc-card { box-shadow: var(--md-e1); }
1002
+
1003
+ /* horizontal listing card (SRP): image | info | price */
1004
+ .md3 .listcard { display: grid; grid-template-columns: 300px 1fr 240px; align-items: stretch; }
1005
+ .md3 .listcard-media { position: relative; min-height: 100%; display: flex; flex-direction: column; }
1006
+ /* wraps the carousel + its absolute overlays; flexes to fill whatever height the badge row below
1007
+ doesn't need, so the row height stays governed by the grid (like before this row existed). */
1008
+ .md3 .listcard-media-img { position: relative; flex: 1 1 auto; min-height: 0; }
1009
+ /* activity/trust pill row under the SRP card image (availability · views · favorites · Geprüft) */
1010
+ .md3 .gallery-badges { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 8px 10px;
1011
+ border-top: 1px solid var(--md-outline-variant); background: var(--md-sc-lowest); flex: none; }
1012
+ .md3 .gallery-pill { display: inline-flex; align-items: center; gap: 5px; height: 26px; padding: 0 10px;
1013
+ border-radius: var(--md-r-full); border: 1px solid var(--md-outline-variant); background: var(--md-sc-lowest);
1014
+ color: var(--md-on-surface); font-size: 11.5px; font-weight: 600; white-space: nowrap; }
1015
+ .md3 .gallery-pill--good { color: var(--md-good); border-color: var(--md-good); }
1016
+ .md3 .listcard-info { padding: 16px 18px; display: flex; flex-direction: column; gap: 11px; min-width: 0; }
1017
+ .md3 .listcard-price { position: relative; padding: 16px 18px; border-left: 1px solid var(--md-outline-variant);
1018
+ display: flex; flex-direction: column; justify-content: flex-start; gap: 16px; background: var(--md-sc-low); }
1019
+ /* NOTE: no own border-radius — the parent .mcard (radius --md-r-md) has overflow:hidden and clips
1020
+ every column to the card corner. A larger radius here used to leave a card-bg sliver at the
1021
+ bottom-right corner (the reported "corner / color" glitch). */
1022
+ /* spec strip (SRP info column) — one soft tinted container, airy icon+value pairs, no lines */
1023
+ .md3 .specstrip { display: flex; flex-wrap: wrap; gap: 9px 18px; padding: 11px 14px;
1024
+ background: var(--md-sc-low); border-radius: var(--md-r-md); }
1025
+ /* filter rail: collapsible sections */
1026
+ .md3 .frail-group { border-bottom: 1px solid var(--md-outline-variant); }
1027
+ .md3 .frail-head { display: flex; align-items: center; justify-content: space-between; width: 100%;
1028
+ padding: 13px 0; background: none; border: 0; cursor: pointer; text-align: left; gap: 12px; }
1029
+ .md3 .frail-sum { font-size: 12px; font-weight: 600; color: var(--md-primary); white-space: nowrap;
1030
+ overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
1031
+ .md3 .frail-body { display: flex; flex-direction: column; gap: 10px; padding-bottom: 16px; }
1032
+ .md3 .frail-group:last-of-type { border-bottom: 0 !important; }
1033
+ .md3 .frow { display: flex; align-items: center; gap: 10px; font-size: 14px; cursor: pointer; }
1034
+ .md3 .frow-label { flex: 1; min-width: 0; color: var(--md-on-surface); }
1035
+ .md3 .frow-agg { margin-left: 5px; color: var(--md-on-surface-variant); font-size: 12px; font-variant-numeric: tabular-nums; white-space: nowrap; }
1036
+ /* Detailsuche page: give multi-select rows vertical breathing room (legacy list density). */
1037
+ .md3 .ds-page .frow { padding: 6px 0; }
1038
+ .md3 .frow-toggle { margin-top: 6px; padding-top: 10px; border-top: 1px solid var(--md-outline-variant); }
1039
+ /* live-count apply footer — sits at the end of the (non-sticky) filter list */
1040
+ .md3 .frail-foot { padding: 14px 0 2px; margin-top: 4px; }
1041
+ .md3 .sheet .frail-foot { display: none; }
1042
+ /* MD3 slider (standard: thin rounded track, filled active segment, round handle) — .md3 layer, no MUI.
1043
+ NOTE: named .exslider (NOT .mslider — that class is the VDP finance-calculator slider further down). */
1044
+ .md3 .exslider { position: relative; height: 32px; margin: 6px 0 2px; touch-action: none; }
1045
+ .md3 .exslider-track { position: absolute; left: 0; right: 0; top: 50%; height: 4px; transform: translateY(-50%);
1046
+ border-radius: 999px; background: var(--md-outline-variant); }
1047
+ .md3 .exslider-dots { display: none; }
1048
+ .md3 .exslider-fill { position: absolute; top: 50%; height: 4px; transform: translateY(-50%);
1049
+ border-radius: 999px; background: var(--md-primary); pointer-events: none; }
1050
+ .md3 .exslider-wave { display: none; }
1051
+ /* native range inputs drive the interaction; only their round thumbs are hit-tested in range mode */
1052
+ .md3 .exslider input[type=range] { position: absolute; left: 0; top: 0; width: 100%; height: 100%; margin: 0;
1053
+ background: none; -webkit-appearance: none; appearance: none; pointer-events: none; }
1054
+ .md3 .exslider--single input[type=range] { pointer-events: auto; }
1055
+ .md3 .exslider input[type=range]::-webkit-slider-runnable-track { height: 32px; background: none; border: 0; }
1056
+ .md3 .exslider input[type=range]::-moz-range-track { height: 32px; background: none; border: 0; }
1057
+ .md3 .exslider input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; pointer-events: auto;
1058
+ width: 18px; height: 18px; margin-top: 7px; border-radius: 50%; background: var(--md-primary); border: 0;
1059
+ cursor: pointer; box-shadow: var(--md-e1); transition: box-shadow .15s var(--ease-standard); }
1060
+ .md3 .exslider input[type=range]::-moz-range-thumb { pointer-events: auto; width: 18px; height: 18px;
1061
+ border-radius: 50%; background: var(--md-primary); border: 0; cursor: pointer; box-shadow: var(--md-e1); }
1062
+ .md3 .exslider input[type=range]:hover::-webkit-slider-thumb { box-shadow: 0 0 0 8px rgba(11,83,204,.12); }
1063
+ .md3 .exslider input[type=range]:active::-webkit-slider-thumb { box-shadow: 0 0 0 10px rgba(11,83,204,.18); }
1064
+ .md3 .exslider input[type=range]:hover::-moz-range-thumb { box-shadow: 0 0 0 8px rgba(11,83,204,.12); }
1065
+ .md3 .exslider input[type=range]:active::-moz-range-thumb { box-shadow: 0 0 0 10px rgba(11,83,204,.18); }
1066
+ .md3 .exslider input[type=range]:focus-visible::-webkit-slider-thumb { box-shadow: 0 0 0 3px var(--md-accent); }
1067
+ /* body-type tile grid */
1068
+ /* body-type tile grid: 2-col in the narrow rail, auto-fill on the full Detailsuche page */
1069
+ .md3 .body-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
1070
+ .md3 .ds-page .body-tiles { grid-template-columns: repeat(auto-fill, minmax(108px, 1fr)); gap: 12px; margin-bottom: 24px; }
1071
+ .md3 .body-tile { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 12px 6px;
1072
+ border: 1.5px solid var(--md-outline-variant); border-radius: var(--md-r-md); background: var(--md-surface);
1073
+ font: 600 12px/1.3 var(--md-font); color: var(--md-on-surface); cursor: pointer; transition: all var(--dur-1); text-align: center; }
1074
+ .md3 .ds-page .body-tile { padding: 16px 10px; gap: 9px; }
1075
+ .md3 .body-tile:hover:not(.on) { background: var(--md-surface-variant); border-color: var(--md-primary); }
1076
+ .md3 .body-tile.on { border-color: var(--md-primary); background: var(--md-primary-container); color: var(--md-on-primary-container); }
1077
+ .md3 .body-tile svg { color: var(--md-on-surface-variant); transition: color var(--dur-1); }
1078
+ .md3 .body-tile.on svg { color: var(--md-primary); }
1079
+ .md3 .body-tile .md-label-sm { color: var(--md-on-surface-variant); }
1080
+ /* payment paths: financing hero (eyebrow + big rate + terms) on top, Leasing/Kaufen quiet rows */
1081
+ .md3 .pricepaths { min-width: 0; }
1082
+ .md3 .pp-rows { display: flex; flex-direction: column; gap: 15px; }
1083
+ /* financing hero (legacy-style): eyebrow → big blue rate → terms line (fills the upper gap) */
1084
+ .md3 .pp-eyebrow { font-size: 11px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase;
1085
+ color: var(--md-on-surface-variant); margin-bottom: 4px; }
1086
+ .md3 .pp-hero-rate { display: flex; align-items: baseline; gap: 5px; }
1087
+ .md3 .pp-hero-val { font-size: 32px; font-weight: 700; color: var(--md-primary); letter-spacing: -1px; line-height: 1; }
1088
+ .md3 .pp-hero-unit { font-size: 13px; color: var(--md-on-surface-variant); }
1089
+ .md3 .pp-hero-terms { margin-top: 9px; font-size: 11.5px; color: var(--md-on-surface-variant); }
1090
+ /* separator line between the financing block and the leasing row (legacy-design parity) */
1091
+ .md3 .pp-lease-row { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--md-outline-variant); }
1092
+ .md3 .pp-sub-terms { margin-top: 3px; font-size: 11px; color: var(--md-on-surface-variant); text-align: right; }
1093
+ .md3 .pp-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
1094
+ .md3 .pp-row-label { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap;
1095
+ font-size: 13.5px; color: var(--md-on-surface-variant); }
1096
+ .md3 .pp-row-i { color: var(--md-outline); flex: none; }
1097
+ .md3 .pp-row-price { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.08; min-width: 0; }
1098
+ .md3 .pp-old { font-size: 11.5px; color: var(--md-error); text-decoration: line-through; }
1099
+ .md3 .pp-now { display: inline-flex; align-items: baseline; gap: 4px; }
1100
+ .md3 .pp-unit { font-size: 11.5px; color: var(--md-on-surface-variant); }
1101
+ /* non-focus rates (Leasing / Kaufen): quiet + neutral so they don't compete with the focus rate */
1102
+ .md3 .pp-val { font-size: 19px; font-weight: 700; color: var(--md-on-surface); letter-spacing: -.4px; white-space: nowrap; }
1103
+ /* financing is the ONLY blue, dominant figure — big hero rate */
1104
+ .md3 .pp-row--focus .pp-row-label { color: var(--md-on-surface); font-weight: 700; }
1105
+ .md3 .pp-row--focus .pp-val { font-size: 31px; color: var(--md-primary); letter-spacing: -1px; }
1106
+ /* purchase group (Kaufen + meter + CTA) — divider above, anchored to the foot of the column */
1107
+ .md3 .pp-purchase { margin-top: auto; padding-top: 16px; border-top: 1px solid var(--md-outline-variant);
1108
+ display: flex; flex-direction: column; gap: 14px; }
1109
+ /* CTA — spacing handled by the column's gap (no own margin) */
1110
+ .md3 .pp-cta { margin-top: 0; }
1111
+ /* Preisbewertung meter — top of the bottom zone (no longer auto-pinned; space-between does it) */
1112
+ .md3 .pp-meter-block { margin-top: 0; padding-top: 0; }
1113
+ .md3 .pp-market { margin-top: 9px; padding-top: 9px; border-top: 1px solid var(--md-outline-variant); }
1114
+ .md3 .pp-market-head { display: flex; flex-direction: column; gap: 2px; font-size: 12px; color: var(--md-on-surface-variant); }
1115
+ .md3 .pp-kauf { font-size: 11.5px; }
1116
+ .md3 .pp-kaufline { font-size: 12.5px; color: var(--md-on-surface-variant); }
1117
+ .md3 .pp-kaufline b { color: var(--md-on-surface); font-weight: 700; }
1118
+ /* segmented market-position meter (Preisbewertung shape) */
1119
+ .md3 .pp-meter { display: flex; gap: 3px; margin-top: 9px; }
1120
+ .md3 .pp-seg { flex: 1; height: 7px; border-radius: 3px; transition: opacity var(--dur-2); }
1121
+ .md3 .pp-mlabel { display: inline-block; margin-top: 7px; font-size: 11px; color: var(--md-on-surface-variant); }
1122
+ .md3 .pp-mlabel--good { color: var(--md-good); font-weight: 700; }
1123
+ /* activity now sits under the CTA */
1124
+ .md3 .pp-cta + .pp-activity, .md3 .listcard-price > div > .pp-activity { margin-top: 10px; justify-content: center; }
1125
+ .md3 .pp-bar { position: relative; height: 6px; border-radius: 999px; margin-top: 9px;
1126
+ background: linear-gradient(90deg, var(--md-good) 0%, #E8B500 58%, #E8601A 100%); }
1127
+ .md3 .pp-bar-dot { position: absolute; top: 50%; width: 13px; height: 13px; border-radius: 50%; background: #fff;
1128
+ border: 2.5px solid var(--md-on-surface); transform: translate(-50%, -50%); box-shadow: var(--md-e1); }
1129
+ /* muted buyer activity (#5) */
1130
+ .md3 .pp-activity { display: flex; align-items: center; gap: 5px; margin-top: 12px; font-size: 11px;
1131
+ color: var(--md-on-surface-variant); white-space: nowrap; }
1132
+ .md3 .pp-activity svg { flex: none; }
1133
+ .md3 .gallery-img { width: 100%; height: 420px; object-fit: cover; display: block; background: var(--md-sc); }
1134
+ .md3 .sec { padding: 48px 24px 0; }
1135
+
1136
+ /* mobile app bar / bottom bar visibility */
1137
+ .md3 .show-mobile { display: none !important; }
1138
+ .md3 .show-tablet { display: none !important; } /* visible ≤980 — tablet AND phone */
1139
+ .md3 .srp-sort { width: 186px; }
1140
+ .md3 .srp-sort select { font-size: 13px; }
1141
+ .md3 .srp-sort .lucide { pointer-events: none; } /* let taps fall through to the native select */
1142
+ .md3 .price-card { position: sticky; top: 88px; }
1143
+
1144
+ /* CDP offer card — payment-type tabs on top (MD3 underline / primary tabs) */
1145
+ .md3 .fin-tabs { display: flex; border-bottom: 1px solid var(--md-outline-variant); margin-bottom: 18px; }
1146
+ .md3 .fin-tab { flex: 1; background: none; border: 0; padding: 11px 4px; cursor: pointer; font: inherit;
1147
+ font-size: 13.5px; font-weight: 600; color: var(--md-on-surface-variant); border-bottom: 2px solid transparent;
1148
+ margin-bottom: -1px; transition: color .15s, border-color .15s; }
1149
+ .md3 .fin-tab.on { color: var(--md-primary); border-bottom-color: var(--md-primary); }
1150
+ .md3 .fin-tab:hover:not(.on) { color: var(--md-on-surface); }
1151
+ /* 2-col grid: left grows, right fixed 148px — pill (row 1) and bar (row 2) share a column edge, never wrap */
1152
+ .md3 .fin-price-grid { display: grid; grid-template-columns: 1fr 148px; gap: 6px 16px; align-items: center; margin-top: 8px; }
1153
+ .md3 .fin-rate-main { min-width: 0; }
1154
+ /* rating pill — light tier-tinted bg, tier-colored text + icon (bg/color set inline per tier) */
1155
+ .md3 .fin-eval-pill { display: inline-flex; align-items: center; gap: 5px; padding: 6px 13px;
1156
+ border-radius: var(--md-r-full); font-size: 14px; font-weight: 700; line-height: 1; white-space: nowrap; }
1157
+ .md3 .fin-eval-pill .lucide { flex: none; }
1158
+ /* gradient spectrum bar + circle thumb — replaces opacity-segment design */
1159
+ .md3 .fin-eval-bar { position: relative; width: 100%; height: 9px; border-radius: 5px;
1160
+ background: linear-gradient(to right, #0F7B43, #72C02C, #FFC107, #FF6B35, #C62828); }
1161
+ .md3 .fin-eval-thumb { position: absolute; top: 50%; transform: translate(-50%, -50%);
1162
+ width: 17px; height: 17px; border-radius: 50%; background: #fff;
1163
+ border: 3px solid currentColor; box-shadow: 0 1px 4px rgba(0,0,0,.3); pointer-events: none; }
1164
+ /* UVP (struck list price) — cash mode only */
1165
+ .md3 .fin-kauf { margin-top: 8px; font-size: 13px; color: var(--md-on-surface-variant); }
1166
+ .md3 .fin-kauf s { color: var(--md-error); }
1167
+ /* condition summary — left cell of row 2 in fin-price-grid */
1168
+ .md3 .fin-cond { min-width: 0; font-size: 12.5px; color: var(--md-on-surface-variant); }
1169
+ /* Rate-edit (Rate anpassen) sits between the rate and the CTA now */
1170
+ .md3 .fin-adjust { margin-top: 14px; }
1171
+ /* auto.de-ID in front of the Finanzierungs-/Leasingdetails link — one row, divider above */
1172
+ .md3 .fin-info { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--md-outline-variant);
1173
+ display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
1174
+ .md3 .fin-id { font-size: 12px; color: var(--md-on-surface-variant); white-space: nowrap; }
1175
+ /* phone CTA — useful only on touch; hidden on desktop, shown ≤980 (tablet + phone) */
1176
+ .md3 .fin-call { display: none; margin-top: 8px; }
1177
+ /* Laufzeit as selectable chips — 4-column grid, filled selected state */
1178
+ .md3 .term-chips { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
1179
+ .md3 .term-chip { display: flex; align-items: center; justify-content: center; gap: 3px; height: 42px; padding: 0;
1180
+ cursor: pointer; border-radius: 10px; border: 1.5px solid var(--md-outline-variant); background: var(--md-surface);
1181
+ color: var(--md-on-surface); font: inherit; font-size: 15px; font-weight: 700;
1182
+ transition: background .15s, border-color .15s, color .15s; }
1183
+ .md3 .term-chip .tc-unit { font-size: 11px; font-weight: 500; color: var(--md-on-surface-variant); }
1184
+ .md3 .term-chip:hover:not(.on) { border-color: var(--md-primary); background: color-mix(in srgb, var(--md-primary) 6%, transparent); }
1185
+ .md3 .term-chip.on { background: var(--md-primary); border-color: var(--md-primary); color: #fff; }
1186
+ .md3 .term-chip.on .tc-unit { color: rgba(255,255,255,.7); }
1187
+
1188
+ /* enriched vehicle enquiry — trust aside + form */
1189
+ .md3 .enquiry-grid { display: grid; grid-template-columns: 0.85fr 1.15fr; align-items: stretch; }
1190
+ .md3 .enquiry-aside { background: var(--md-sc-low); padding: 24px; border-right: 1px solid var(--md-outline-variant);
1191
+ display: flex; flex-direction: column; }
1192
+ .md3 .enquiry-ico { width: 36px; height: 36px; border-radius: var(--md-r-full); background: var(--md-primary-container);
1193
+ display: flex; align-items: center; justify-content: center; flex: none; }
1194
+ .md3 .enquiry-benefits { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 11px; }
1195
+ .md3 .enquiry-benefits li { display: flex; align-items: center; gap: 10px; font-size: 13.5px; color: var(--md-on-surface); }
1196
+ .md3 .enquiry-benefits li .lucide { flex: none; }
1197
+ .md3 .enquiry-phone { display: inline-flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 18px;
1198
+ color: var(--md-primary); font-weight: 700; font-size: 16px; text-decoration: none; }
1199
+ .md3 .enquiry-form { padding: 24px; }
1200
+ @media (max-width: 780px) {
1201
+ .md3 .enquiry-grid { grid-template-columns: 1fr; }
1202
+ .md3 .enquiry-aside { border-right: 0; border-bottom: 1px solid var(--md-outline-variant); }
1203
+ .md3 .enquiry-phone { margin-top: 16px; }
1204
+ }
1205
+
1206
+ /* sticky mobile CTA bar (VDP) */
1207
+ .md3 .vdp-bottom-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; background: var(--md-sc-lowest);
1208
+ border-top: 1px solid var(--md-outline-variant); box-shadow: 0 -2px 14px rgba(0,0,0,.10);
1209
+ padding: 10px 16px; align-items: center; gap: 14px; }
1210
+
1211
+ /* bottom-sheet (SRP filters) — sticky header + scrollable body + sticky action bar, slide-up entrance */
1212
+ .md3 .sheet-scrim { position: fixed; inset: 0; background: rgba(16,22,42,.5); z-index: 70;
1213
+ animation: sheet-fade var(--dur-2) var(--ease-standard); }
1214
+ .md3 .sheet { position: fixed; left: 0; right: 0; bottom: 0; z-index: 71; background: var(--md-surface);
1215
+ border-radius: var(--md-r-xl) var(--md-r-xl) 0 0; max-height: 92vh; display: flex; flex-direction: column;
1216
+ box-shadow: 0 -8px 30px rgba(16,22,42,.22); animation: sheet-up var(--dur-3) var(--ease-emphasized); }
1217
+ /* non-scrolling header: drag handle + title + reset + close */
1218
+ .md3 .sheet-head { flex: none; padding: 0 16px; background: var(--md-surface);
1219
+ border-radius: var(--md-r-xl) var(--md-r-xl) 0 0; border-bottom: 1px solid var(--md-outline-variant); }
1220
+ .md3 .sheet-handle { width: 36px; height: 4px; border-radius: 2px; background: var(--md-outline-variant); margin: 10px auto 6px; }
1221
+ .md3 .sheet-head-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 2px 0 10px; }
1222
+ .md3 .sheet-head-row h2 { margin: 0; font-size: 16px; font-weight: 700; }
1223
+ /* scrollable filter body */
1224
+ .md3 .sheet-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch;
1225
+ overscroll-behavior: contain; padding: 2px 16px 6px; }
1226
+ /* sticky action bar */
1227
+ .md3 .sheet-foot { flex: none; padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); background: var(--md-surface);
1228
+ border-top: 1px solid var(--md-outline-variant); box-shadow: 0 -6px 18px rgba(16,22,42,.08); }
1229
+ @keyframes sheet-up { from { transform: translateY(100%); } to { transform: translateY(0); } }
1230
+ @keyframes sheet-fade { from { opacity: 0; } to { opacity: 1; } }
1231
+
1232
+ /* Finanzierungs-/Leasingdetails popup — centered modal (desktop), bottom-sheet (mobile) */
1233
+ .md3 .fin-modal-scrim { position: fixed; inset: 0; z-index: 60; background: rgba(8,12,24,.5);
1234
+ display: flex; align-items: center; justify-content: center; padding: 24px; animation: sheet-fade var(--dur-2); }
1235
+ .md3 .fin-modal { background: var(--md-sc-lowest); border-radius: var(--md-r-lg); width: 100%; max-width: 460px;
1236
+ max-height: 88vh; display: flex; flex-direction: column; overflow: hidden; box-shadow: var(--md-e3); }
1237
+ .md3 .fin-modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px;
1238
+ padding: 16px 20px; border-bottom: 1px solid var(--md-outline-variant); flex: none; }
1239
+ .md3 .fin-modal-body { padding: 18px 20px 22px; overflow-y: auto; }
1240
+ @media (max-width: 600px) {
1241
+ .md3 .fin-modal-scrim { align-items: flex-end; padding: 0; }
1242
+ .md3 .fin-modal { max-width: none; max-height: 90vh; border-radius: var(--md-r-lg) var(--md-r-lg) 0 0;
1243
+ animation: sheet-up var(--dur-2); }
1244
+ }
1245
+
1246
+ /* mobile dropdown menu (TopBar) */
1247
+ .md3 .topbar-menu { position: absolute; top: 100%; left: 0; right: 0; background: var(--md-surface);
1248
+ border-bottom: 1px solid var(--md-outline-variant); box-shadow: var(--md-e2); padding: 8px 16px 16px; }
1249
+ /* language segmented DE|EN — active tab filled, inactive ghost */
1250
+ .md3 .lang-seg { display: inline-flex; align-items: center; border: 1.5px solid var(--md-outline-variant);
1251
+ border-radius: var(--md-r-full); overflow: hidden; flex: none; }
1252
+ .md3 .lang-seg-btn { display: flex; align-items: center; justify-content: center; height: 32px; padding: 0 11px;
1253
+ font: inherit; font-size: 11.5px; font-weight: 700; letter-spacing: .5px; cursor: pointer;
1254
+ border: 0; background: transparent; color: var(--md-on-surface-variant); transition: background .15s, color .15s; }
1255
+ .md3 .lang-seg-btn:first-child { border-right: 1.5px solid var(--md-outline-variant); }
1256
+ .md3 .lang-seg-btn.on { background: var(--md-primary); color: #fff; }
1257
+ .md3 .lang-seg-btn:not(.on):hover { background: color-mix(in srgb, var(--md-primary) 8%, transparent); }
1258
+ .md3 .hero-spacer { display: none; }
1259
+
1260
+ @media (max-width: 980px) {
1261
+ .md3 .continue-grid { grid-template-columns: 1fr; gap: 24px; }
1262
+ .md3 .hero-grid { grid-template-columns: 1fr; gap: 24px; }
1263
+ .md3 .listcard { grid-template-columns: 260px 1fr; }
1264
+ /* tablet: price column spans full width below image+info, zones stack in a normal column */
1265
+ .md3 .listcard-price { grid-column: 1 / -1; border-left: 0; border-top: 1px solid var(--md-outline-variant);
1266
+ flex-direction: column; justify-content: flex-start; gap: 12px; }
1267
+ .md3 .listcard-price .pp-activity { display: none; }
1268
+ .md3 .hero-inner { padding: 32px 20px 28px; }
1269
+ .md3 .cards-3 { grid-template-columns: repeat(2,1fr); }
1270
+ .md3 .brand-grid { grid-template-columns: repeat(4,1fr); }
1271
+ .md3 .steps-3 { grid-template-columns: 1fr; gap: 20px; }
1272
+ .md3 .guarantee-grid { grid-template-columns: repeat(2,1fr); }
1273
+ .md3 .gitem { border-left: 0; }
1274
+ .md3 .gitem:nth-child(even) { border-left: 1px solid var(--md-outline-variant); }
1275
+ .md3 .gitem:nth-child(n+3) { border-top: 1px solid var(--md-outline-variant); }
1276
+ .md3 .mag-grid { grid-template-columns: 1fr; }
1277
+ .md3 .zustand-grid { grid-template-columns: repeat(2, 1fr); }
1278
+ .md3 .steps-4 { grid-template-columns: repeat(2, 1fr); gap: 20px; }
1279
+ .md3 .hiw-step:not(:last-child)::after { display: none; }
1280
+ .md3 .curated-grid { grid-template-columns: repeat(2,1fr); }
1281
+ .md3 .footer-grid { grid-template-columns: repeat(3,1fr); gap: 24px; }
1282
+ .md3 .hide-tablet { display: none !important; }
1283
+ .md3 .show-tablet { display: flex !important; }
1284
+ .md3 .srp-rail { display: none; } /* rail is desktop-only; ≤980 uses the filter sheet */
1285
+ .md3 .srp-grid { grid-template-columns: 1fr; }
1286
+ .md3 .vdp-grid { display: flex; flex-direction: column; }
1287
+ .md3 .vdp-gallery { order: 1; } .md3 .vdp-aside { order: 2; } .md3 .vdp-details { order: 3; }
1288
+ .md3 .vdp-aside { position: static; }
1289
+ .md3 .price-card { position: static; }
1290
+ .md3 .fin-call { display: block; } /* tap-to-call restored on touch */
1291
+ .md3 .vdp-gallerybox { height: auto; aspect-ratio: 4 / 3; }
1292
+ .md3 .press-wrap { position: static !important; }
1293
+ .md3 .press-bar { transform: none !important; margin: 20px 16px 0 !important; height: auto !important;
1294
+ padding: 14px 18px !important; flex-wrap: wrap; }
1295
+ .md3 .hero-spacer { display: none !important; }
1296
+ .md3 .gallery-img { height: 320px; }
1297
+ }
1298
+
1299
+ @media (max-width: 600px) {
1300
+ .md3 .cards-3, .md3 .cards-2 { grid-template-columns: 1fr; }
1301
+ /* listing card stacks: image (4:3) → badges → info → price */
1302
+ .md3 .listcard { grid-template-columns: 1fr; }
1303
+ .md3 .listcard-media { min-height: 0; }
1304
+ .md3 .listcard-media-img { aspect-ratio: 4 / 3; flex: none; }
1305
+ .md3 .listcard-price { border-left: 0; border-top: 1px solid var(--md-outline-variant); padding: 14px 16px;
1306
+ flex-direction: column; justify-content: flex-start; align-items: stretch; gap: 14px; }
1307
+ .md3 .listcard-price .pricepaths { flex: none; min-width: 0; }
1308
+ /* only the data-less activity line is hidden on phone */
1309
+ .md3 .listcard-price .pp-activity { display: none; }
1310
+ .md3 .listcard-price .pp-cta { margin-top: 0; }
1311
+ .md3 .listcard-price .mbtn { width: 100%; margin-top: 0 !important; }
1312
+ .md3 .listcard-price .pp-meter-block { margin-top: 0; padding-top: 0; }
1313
+ .md3 .listcard-info { padding: 14px 16px 6px; }
1314
+ /* mobile: show all spec facts (km/EZ/Getriebe/Kraftstoff/Leistung/… wrap to 2 lines) — the
1315
+ 4-fact cap dropped Leistung (kW/PS) + Verfügbarkeit, which the legacy mobile card shows. */
1316
+ .md3 .listcard-chips { flex-wrap: nowrap !important; overflow: hidden; }
1317
+ .md3 .listcard-chips > :nth-child(n+3) { display: none; }
1318
+ .md3 .srp-main { padding: 12px 16px 64px !important; }
1319
+ .md3 .srp-sort { width: 146px; }
1320
+ /* save-search banner: full-width button on phone (!important beats the inline desktop flex) */
1321
+ .md3 .savesearch { flex-wrap: wrap; }
1322
+ .md3 .savesearch > div { flex: 1 1 calc(100% - 56px) !important; }
1323
+ .md3 .savesearch .mbtn { flex: 1 1 100% !important; justify-content: center; }
1324
+ .md3 .srp-bar { position: sticky; top: 64px; z-index: 20; background: var(--md-surface); padding: 8px 0; margin: 0 0 8px;
1325
+ box-shadow: 0 6px 8px -8px rgba(0,0,0,.3); }
1326
+ .md3 .field-grid-2 { grid-template-columns: 1fr; gap: 10px; }
1327
+ .md3 .hero-search { padding: 18px !important; }
1328
+ .md3 .brand-grid { grid-template-columns: repeat(3,1fr); gap: 12px; }
1329
+ .md3 .footer-grid { grid-template-columns: repeat(2,1fr); gap: 20px; }
1330
+ .md3 .vdp-specs { grid-template-columns: 1fr; gap: 14px; }
1331
+ /* spec table clamps to 6 rows on phone until "Alle Daten anzeigen" */
1332
+ .md3 .vdp-specs--clamp .specitem:nth-child(n+7) { display: none; }
1333
+ .md3 .gitem { padding: 20px 18px; }
1334
+ .md3 .steps-4 { grid-template-columns: 1fr; gap: 18px; }
1335
+ .md3 .hiw-step { flex-direction: row; align-items: flex-start; text-align: left; gap: 14px; }
1336
+ .md3 .hiw-step:not(:last-child)::after { display: none; }
1337
+ .md3 .hiw-icon-wrap { margin-bottom: 0; flex: none; }
1338
+ /* --- VDP header card: structured phone layout --- */
1339
+ /* badge above title (no cramped side-by-side) */
1340
+ .md3 .vdp-headrow { flex-direction: column-reverse; align-items: flex-start; gap: 10px; }
1341
+ /* facts: aligned 2-column grid instead of a wrapping dot-line */
1342
+ .md3 .vdp-meta { display: grid; grid-template-columns: 1fr 1fr; gap: 11px 14px; margin-top: 14px; }
1343
+ .md3 .vdp-meta > span + span::before { content: none; }
1344
+ .md3 .vdp-meta > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1345
+ /* highlights: one swipeable line, no ragged wrap */
1346
+ .md3 .vdp-highlights { flex-wrap: nowrap !important; overflow-x: auto; scrollbar-width: none;
1347
+ width: 0; min-width: 100%; }
1348
+ .md3 .vdp-highlights::-webkit-scrollbar { display: none; }
1349
+ .md3 .vdp-highlights .chip { flex: none; }
1350
+ /* condition row: 2×2 on phone */
1351
+ .md3 .zustand-grid { grid-template-columns: 1fr 1fr; }
1352
+ .md3 .zustand-tile { border-left: 0; padding: 12px 0; }
1353
+ .md3 .zustand-tile:nth-child(even) { border-left: 1px solid var(--md-outline-variant); padding-left: 14px; }
1354
+ .md3 .zustand-tile:nth-child(n+3) { border-top: 1px solid var(--md-outline-variant); }
1355
+ .md3 .curated-grid { grid-template-columns: 1fr; gap: 12px; }
1356
+ .md3 .seen-row-cash { display: none; }
1357
+ .md3 .lp-vs-row { flex-wrap: wrap; gap: 6px 10px; }
1358
+ .md3 .lp-vs-verdict { flex: 1 1 100%; white-space: normal; order: 3; }
1359
+ .md3 .budget-card { flex-direction: column; align-items: stretch; gap: 18px; padding: 20px; }
1360
+ .md3 .budget-card .mbtn { width: 100%; justify-content: center; }
1361
+ .md3 .finder-banner { flex-direction: column; align-items: stretch; gap: 16px; }
1362
+ .md3 .finder-steps { justify-content: space-between; gap: 8px; }
1363
+ .md3 .finder-steps .mbtn { display: none; }
1364
+ /* SRP "Mehr laden": results beyond 4 stay hidden until expanded */
1365
+ .md3 .srp-list:not(.srp-list--expanded) .srp-extra { display: none !important; }
1366
+ .md3 .carrow { grid-template-columns: 1fr; }
1367
+ .md3 .thumb-row { grid-template-columns: repeat(4,1fr); }
1368
+ .md3 .sec { padding: 36px 16px 0; }
1369
+ .md3 .hero-inner { padding: 24px 16px 22px; }
1370
+ .md3 .gallery-img { height: 230px; }
1371
+ .md3 .hide-mobile { display: none !important; }
1372
+ .md3 .show-mobile { display: flex !important; }
1373
+ .md3 .press-logos { flex-wrap: wrap; justify-content: center !important; gap: 14px 20px !important; }
1374
+ .md3 .mbtn--lg { height: 46px; }
1375
+ /* compact hero so the search card + button surface above the fold */
1376
+ .md3 .hero-inner { padding: 16px 16px 18px !important; }
1377
+ .md3 .hero-badge { margin-bottom: 10px !important; font-size: 12px !important; }
1378
+ .md3 .hero-h1 { font-size: 31px !important; letter-spacing: -.9px !important; margin: 0 0 10px !important; }
1379
+ .md3 .hero-sub { font-size: 14px !important; margin: 0 0 14px !important; }
1380
+ .md3 .hero-stats { gap: 16px !important; }
1381
+ .md3 .hero-stats .num{ font-size: 17px !important; }
1382
+ .md3 .hero-stats .st-lbl { font-size: 11px !important; }
1383
+ .md3 .hero-grid { gap: 16px !important; }
1384
+ }
1385
+
1386
+ /* ---------- CDP modules ---------- */
1387
+ .md3 .mslider { -webkit-appearance: none; appearance: none; width: 100%; height: 6px; border-radius: var(--md-r-full);
1388
+ background: var(--md-sc-highest); outline: 0; cursor: pointer; }
1389
+ .md3 .mslider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 22px; height: 22px; border-radius: 50%;
1390
+ background: var(--md-primary); border: 3px solid #fff; box-shadow: var(--md-e2); cursor: pointer; }
1391
+ .md3 .mslider::-moz-range-thumb { width: 22px; height: 22px; border-radius: 50%; background: var(--md-primary); border: 3px solid #fff; box-shadow: var(--md-e2); cursor: pointer; }
1392
+ .md3 .eq-cols { column-count: 2; column-gap: 32px; }
1393
+ .md3 .pmv-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; }
1394
+ /* trust strip — quiet one-line reassurance, NOT a card band */
1395
+ .md3 .trust-strip { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; row-gap: 10px; padding: 2px 4px; }
1396
+ .md3 .trust-strip > div { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
1397
+ font-size: 13.5px; font-weight: 600; color: var(--md-on-surface-variant); }
1398
+ .md3 .trust-strip > div + div::before { content: ''; width: 4px; height: 4px; border-radius: 50%;
1399
+ background: var(--md-outline-variant); margin: 0 14px; }
1400
+
1401
+ @media (max-width: 600px) {
1402
+ .md3 .eq-cols { column-count: 1; }
1403
+ .md3 .pmv-grid { grid-template-columns: 1fr; gap: 22px; }
1404
+ .md3 .trust-strip { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 16px; justify-items: start; }
1405
+ .md3 .trust-strip > div + div::before { content: none; }
1406
+ }
1407
+
1408
+ /* ---------- CO₂ / energy label — compact horizontal scale ---------- */
1409
+ .md3 .co2-scale { display: flex; gap: 4px; align-items: stretch; }
1410
+ .md3 .co2-seg { flex: 1; height: 32px; border-radius: 7px; color: #fff; font-weight: 800; font-size: 12.5px;
1411
+ display: flex; align-items: center; justify-content: center; opacity: .3; transition: opacity var(--dur-2) var(--ease-standard); }
1412
+ .md3 .co2-seg--on { opacity: 1; box-shadow: 0 2px 8px rgba(16,22,42,.25), 0 0 0 2px #fff inset; transform: scale(1.06); }
1413
+ .md3 .co2-stats { display: flex; flex-wrap: wrap; gap: 10px 26px; margin-bottom: 16px; }
1414
+ .md3 .dealer-map { position: relative; height: 130px; border-radius: var(--md-r-sm); overflow: hidden;
1415
+ background: #e8edf3;
1416
+ background-image:
1417
+ linear-gradient(rgba(11,83,204,.07) 1px, transparent 1px),
1418
+ linear-gradient(90deg, rgba(11,83,204,.07) 1px, transparent 1px),
1419
+ linear-gradient(120deg, #dfe6ee, #eef2f7);
1420
+ background-size: 26px 26px, 26px 26px, 100% 100%; }
1421
+ .md3 .dealer-map::after { content: ""; position: absolute; left: -10%; top: 60%; width: 130%; height: 10px;
1422
+ background: rgba(22,184,232,.35); transform: rotate(-8deg); }
1423
+ .md3 .dealer-pin { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-100%);
1424
+ width: 34px; height: 34px; border-radius: 50% 50% 50% 0; background: var(--md-primary);
1425
+ display: flex; align-items: center; justify-content: center; rotate: 45deg; box-shadow: var(--md-e2); }
1426
+ .md3 .dealer-pin .lucide { rotate: -45deg; }
1427
+
1428
+ /* VDP: floating back button over the gallery — phone only (breadcrumb is hidden there) */
1429
+ .md3 .vdp-back { display: none; position: absolute; top: 12px; left: 14px; z-index: 3; }
1430
+
1431
+ @media (max-width: 600px) {
1432
+ /* full-bleed gallery: edge-to-edge, app-like (production pattern) */
1433
+ .md3 .vdp-back { display: flex; }
1434
+ .md3 .vdp-gallerybox { margin: -14px -24px 0; border-radius: 0; border: 0; box-shadow: none; }
1435
+ }
1436
+
1437
+ /* ---------- save-search bar ---------- */
1438
+ .md3 .savesearch { display: flex; align-items: center; gap: 14px; }
1439
+
1440
+ /* ---------- home: recent search, brand scroller ---------- */
1441
+
1442
+ /* sell-your-car: petrol-cyan image banner (distinct from the hero blue) */
1443
+ .md3 .sell-band { position: relative; overflow: hidden; padding: 32px 36px; border: 0; min-height: 190px;
1444
+ background: linear-gradient(115deg, #04293C 0%, #075A75 58%, #0A7FA0 100%); display: flex; align-items: center; }
1445
+ .md3 .sell-copy { position: relative; z-index: 1; max-width: 60%; min-width: 0; }
1446
+ .md3 .sell-steps { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
1447
+ .md3 .sell-car { position: absolute; right: -28px; bottom: -24px; width: 400px; max-width: 44%; object-fit: contain;
1448
+ filter: drop-shadow(0 24px 32px rgba(0,0,0,.4)); }
1449
+
1450
+ /* SEO directory */
1451
+ .md3 .seo-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 28px; }
1452
+
1453
+ /* offers grid: dense 2-col on phone */
1454
+ @media (max-width: 600px) {
1455
+ .md3 .cards-offers { grid-template-columns: 1fr; gap: 14px; }
1456
+ .md3 .seo-grid { grid-template-columns: 1fr 1fr; gap: 22px; }
1457
+ .md3 .sell-band { padding: 22px 18px; }
1458
+ .md3 .sell-copy { max-width: 100%; }
1459
+ }
1460
+ .md3 .recent-search { display: flex; align-items: center; gap: 14px; padding: 12px 16px; background: var(--md-sc-lowest); }
1461
+ .md3 .recent-ic { width: 40px; height: 40px; border-radius: var(--md-r-full); background: var(--md-primary-container);
1462
+ display: flex; align-items: center; justify-content: center; flex: none; }
1463
+ .md3 .brand-scroller { gap: 12px; padding-bottom: 6px; }
1464
+ .md3 .brand-chip { flex: none; background: none; border: 0; cursor: pointer; display: flex; flex-direction: column;
1465
+ align-items: center; gap: 8px; width: 84px; padding: 4px; }
1466
+ .md3 .brand-circle { width: 64px; height: 64px; border-radius: 50%; background: var(--md-sc-lowest);
1467
+ box-shadow: var(--md-e1); display: flex; align-items: center; justify-content: center;
1468
+ transition: box-shadow var(--dur-1) var(--ease-standard), transform var(--dur-1) var(--ease-standard); }
1469
+ .md3 .brand-chip:hover .brand-circle { box-shadow: var(--md-e3); transform: translateY(-2px); }
1470
+
1471
+ /* ---------- Landing page ---------- */
1472
+ .md3 .lp-hero { display: grid; grid-template-columns: 1fr auto; gap: 32px; align-items: center; }
1473
+ .md3 .lp-stats { display: flex; gap: 26px; padding: 18px 24px; border-radius: var(--md-r-md); background: rgba(255,255,255,.10); flex: none; }
1474
+ .md3 .lp-text { display: grid; grid-template-columns: 1fr 1fr; gap: 36px; align-items: start; }
1475
+ .md3 .lp-models { display: grid; grid-template-columns: repeat(auto-fill, minmax(176px, 1fr)); gap: 12px; }
1476
+ .md3 .lp-model-tile { padding: 13px 16px; text-align: left; background: var(--md-sc-lowest); display: flex; flex-direction: column; gap: 3px; }
1477
+ .md3 .lp-duo { display: grid; grid-template-columns: 1.25fr 1fr; gap: 18px; align-items: stretch; }
1478
+ .md3 .lp-table-head { display: grid; grid-template-columns: 1fr 96px 110px; gap: 12px; padding: 8px 0;
1479
+ font-size: 11.5px; font-weight: 700; letter-spacing: .4px; text-transform: uppercase; color: var(--md-on-surface-variant);
1480
+ border-bottom: 1px solid var(--md-outline-variant); }
1481
+ .md3 .lp-table-head span:nth-child(n+2), .md3 .lp-table-row span:nth-child(n+2) { text-align: right; }
1482
+ .md3 .lp-table-row { display: grid; grid-template-columns: 1fr 96px 110px; gap: 12px; align-items: center;
1483
+ width: 100%; padding: 11px 0; background: none; border: 0; cursor: pointer; text-align: left;
1484
+ border-bottom: 1px solid var(--md-outline-variant); font-family: inherit; font-size: 14px; color: var(--md-on-surface); }
1485
+ .md3 .lp-table-row:last-child { border-bottom: 0; }
1486
+ .md3 .lp-table-row:hover .md-title-sm { color: var(--md-primary); }
1487
+ @media (max-width: 900px) {
1488
+ .md3 .lp-hero { grid-template-columns: 1fr; gap: 22px; }
1489
+ .md3 .lp-stats { align-self: start; }
1490
+ .md3 .lp-text { grid-template-columns: 1fr; gap: 28px; }
1491
+ .md3 .lp-duo { grid-template-columns: 1fr; }
1492
+ }
1493
+ @media (max-width: 600px) {
1494
+ .md3 .lp-stats { gap: 18px; padding: 14px 16px; width: 100%; justify-content: space-between; }
1495
+ /* phone: model tiles collapse to ONE swipeable row so cars stay near the top */
1496
+ .md3 .lp-models { display: flex; overflow-x: auto; gap: 10px; scrollbar-width: none; padding-bottom: 4px; }
1497
+ .md3 .lp-models::-webkit-scrollbar { display: none; }
1498
+ .md3 .lp-model-tile { flex: none; padding: 10px 14px; }
1499
+ .md3 .lp-table-head, .md3 .lp-table-row { grid-template-columns: 1fr 82px 92px; gap: 8px; }
1500
+ }
1501
+
1502
+ /* ---------- Dealer Dashboard — md3 card chrome (.dash-*) ----------
1503
+ Additive: these are scoped under .md3 so they ONLY apply when the dashboard
1504
+ renders inside the flagged `md3 dlr-page` root. The legacy variant has no
1505
+ .md3 ancestor → none of these match → legacy look is byte-identical. */
1506
+ .md3 .dash-page-title { font: 700 28px var(--md-font); color: var(--md-on-surface); margin: 0 0 24px; letter-spacing: -.4px; }
1507
+ .md3 .dash-card { background: var(--md-surface, #fff); border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-lg, 16px); box-shadow: var(--md-e1); padding: 20px; margin-bottom: 20px; min-height: auto; }
1508
+ .md3 .dash-card-title { font: 700 17px var(--md-font); color: var(--md-on-surface); margin: 0 0 14px; }
1509
+ .md3 .dash-link { display: inline-block; margin-top: 16px; font: 600 14px var(--md-font); color: var(--md-primary); text-decoration: none; }
1510
+ .md3 .dash-link:hover { text-decoration: underline; }
1511
+ .md3 .dash-link--primary { background: var(--md-primary); color: #fff; padding: 10px 18px; border-radius: var(--md-r-full); box-shadow: var(--md-e1); }
1512
+ .md3 .dash-link--primary:hover { text-decoration: none; opacity: .92; }
1513
+ .md3 .dash-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
1514
+ .md3 .dash-table th { text-align: left; font: 600 12.5px var(--md-font); color: var(--md-on-surface-variant); padding: 6px 8px; border-bottom: 1px solid var(--md-outline-variant); }
1515
+ .md3 .dash-table td { padding: 9px 8px; border-bottom: 1px solid var(--md-outline-variant); color: var(--md-on-surface); vertical-align: middle; }
1516
+ .md3 .dash-table tr:last-child td { border-bottom: 0; }
1517
+
1518
+ /* ============================================================================
1519
+ LEGACY → md3 IN-PLACE BRIDGE (account / dealer / admin pages)
1520
+ ----------------------------------------------------------------------------
1521
+ Restyles the legacy MUI / fe-ui-core primitives to md3 tokens WITHOUT changing
1522
+ any structure or layout. Scoped under `.md3`, so it only affects the flagged
1523
+ legacy pages (which wrap their unchanged legacy markup in a `.md3` root).
1524
+ • SRP / VDP / Detailsuche / Checkout / Auth use the autobahn primitives (not
1525
+ MUI) → unaffected. • MUI Slider is intentionally NOT touched (used by the
1526
+ SRP filters). • Modals render in a body portal (outside `.md3`) → unchanged.
1527
+ Items move to md3 in place; positions/grids stay exactly as the legacy layout.
1528
+ ============================================================================ */
1529
+
1530
+ /* — Buttons (fe-ui-core Button === @mui/material Button) — */
1531
+ .md3 .MuiButton-root { font-family: var(--md-font) !important; text-transform: none !important; border-radius: var(--md-r-full) !important; font-weight: 600 !important; letter-spacing: normal !important; box-shadow: none !important; }
1532
+ .md3 .MuiButton-root:hover { box-shadow: none !important; }
1533
+ .md3 .MuiButton-containedPrimary:not(.Mui-disabled) { background-color: var(--md-primary) !important; color: var(--md-on-primary) !important; }
1534
+ .md3 .MuiButton-containedPrimary:not(.Mui-disabled):hover { background-color: var(--autode-blau-strong) !important; }
1535
+ .md3 .MuiButton-containedSecondary:not(.Mui-disabled) { background-color: var(--md-error) !important; color: #fff !important; }
1536
+ .md3 .MuiButton-outlinedPrimary:not(.Mui-disabled) { border: 1px solid var(--md-primary) !important; color: var(--md-primary) !important; background: transparent !important; }
1537
+ .md3 .MuiButton-textPrimary, .md3 .MuiButton-text { color: var(--md-primary) !important; }
1538
+ .md3 .MuiButton-textError, .md3 .MuiButton-outlinedError { color: var(--md-error) !important; }
1539
+
1540
+ /* — Outlined inputs: TextField / FormMaterialField / Autocomplete / DatePicker — */
1541
+ .md3 .MuiOutlinedInput-root { border-radius: var(--md-r-sm) !important; font-family: var(--md-font) !important; }
1542
+ .md3 .MuiOutlinedInput-notchedOutline { border-color: var(--md-outline-variant) !important; }
1543
+ .md3 .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline { border-color: var(--md-outline) !important; }
1544
+ .md3 .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: var(--md-primary) !important; border-width: 2px !important; }
1545
+ .md3 .MuiInputLabel-root { font-family: var(--md-font) !important; }
1546
+ .md3 .MuiInputLabel-root.Mui-focused { color: var(--md-primary) !important; }
1547
+ .md3 .MuiInputBase-input, .md3 .MuiInputBase-root { font-family: var(--md-font) !important; }
1548
+
1549
+ /* — Tabs (Einstellungen) — */
1550
+ .md3 .MuiTab-root { font-family: var(--md-font) !important; text-transform: none !important; font-weight: 600 !important; }
1551
+ .md3 .MuiTab-root.Mui-selected { color: var(--md-primary) !important; }
1552
+ .md3 .MuiTabs-indicator { background-color: var(--md-primary) !important; }
1553
+
1554
+ /* — Selection controls — */
1555
+ .md3 .MuiCheckbox-root.Mui-checked, .md3 .MuiRadio-root.Mui-checked { color: var(--md-primary) !important; }
1556
+ .md3 .MuiSwitch-switchBase.Mui-checked { color: var(--md-primary) !important; }
1557
+ .md3 .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track { background-color: var(--md-primary) !important; }
1558
+
1559
+ /* — MUI tables (where used) — */
1560
+ .md3 .MuiTableCell-root { font-family: var(--md-font) !important; }
1561
+ .md3 .MuiTableCell-head { font-weight: 600 !important; color: var(--md-on-surface-variant) !important; }
1562
+
1563
+ /* — headings inside legacy pages pick up the md3 display face — */
1564
+ .md3 h1, .md3 h2, .md3 h3 { font-family: var(--md-font-display); }
1565
+
1566
+
1567
+ /* =====================================================================
1568
+ md3 KIT PRIMITIVES (Group-B in-place rebuild) — auto-integrated
1569
+ ===================================================================== */
1570
+
1571
+ /* ── FormDropdown (mfd-) — md3 mobx-form dropdown adapter ──────────────────────────
1572
+ Single-select reuses the base Dropdown (.mselect-*); only label/error wrapper +
1573
+ an error ring are added here. Multi-select reuses .mselect-* and adds chips +
1574
+ a checklist. All selectors scoped under .md3, unique `mfd-` prefix. */
1575
+ .md3 .mfd { display: flex; flex-direction: column; gap: 6px; }
1576
+ .md3 .mfd-label { color: var(--md-on-surface-variant); font-weight: 600; }
1577
+ .md3 .mfd-error { color: var(--md-error); font-size: 12px; line-height: 1.35; }
1578
+
1579
+ /* error ring on the single-select trigger (base Dropdown puts `className` on the
1580
+ .mselect wrapper, so reach the inner button from there). */
1581
+ .md3 .mselect.mfd-invalid .mselect-btn,
1582
+ .md3 .mselect-btn.mfd-invalid { box-shadow: inset 0 0 0 2px var(--md-error); }
1583
+ .md3 .mselect.mfd-invalid .mselect-btn[aria-expanded="true"],
1584
+ .md3 .mselect-btn.mfd-invalid[aria-expanded="true"] { box-shadow: inset 0 0 0 2px var(--md-error); }
1585
+
1586
+ /* ── multi-select ──────────────────────────────────────────────────────────── */
1587
+ .md3 .mfd-multi { position: relative; display: block; width: 100%; }
1588
+ /* taller, top-aligned trigger so wrapped chips don't clip; otherwise = .mselect-btn. */
1589
+ .md3 .mfd-multi-btn { height: auto; min-height: 48px; align-items: flex-start; padding: 7px 14px; }
1590
+ .md3 .mfd-multi-btn .mselect-chev { align-self: center; }
1591
+
1592
+ .md3 .mfd-chips { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; gap: 6px; padding: 1px 0; }
1593
+ .md3 .mfd-chip { display: inline-flex; align-items: center; gap: 4px; height: 26px; padding: 0 4px 0 10px;
1594
+ border-radius: var(--md-r-full); background: var(--md-secondary-container);
1595
+ color: var(--md-on-secondary-container); font-size: 12.5px; font-weight: 600; max-width: 100%; }
1596
+ .md3 .mfd-chip-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1597
+ .md3 .mfd-chip-x { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
1598
+ border-radius: var(--md-r-full); cursor: pointer; color: var(--md-on-secondary-container); flex: none; }
1599
+ .md3 .mfd-chip-x:hover { background: rgba(0,0,0,.10); }
1600
+ .md3 .mfd-chip-x .lucide { width: 13px; height: 13px; }
1601
+
1602
+ /* checklist menu — same surface as .mselect-menu (declared explicitly so it works
1603
+ even if the base rule is order-sensitive). */
1604
+ .md3 .mfd-multi-menu { padding: 6px; }
1605
+ .md3 .mfd-multi-opt { gap: 10px; }
1606
+ .md3 .mfd-multi-opt.is-checked { color: var(--md-primary); font-weight: 600; }
1607
+ .md3 .mfd-check { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px;
1608
+ flex: none; border-radius: var(--md-r-xs); box-shadow: inset 0 0 0 1.5px var(--md-outline-variant);
1609
+ color: #fff; transition: background .12s, box-shadow .12s; }
1610
+ .md3 .mfd-check--on { background: var(--md-primary); box-shadow: inset 0 0 0 1.5px var(--md-primary); }
1611
+ .md3 .mfd-check .lucide { width: 13px; height: 13px; }
1612
+
1613
+ /* ── FormCheckbox (md3 checkbox bound to a mobx-react-form field) ─────────── */
1614
+ .md3 .mcheck-group { display: flex; flex-direction: column; gap: 6px; }
1615
+
1616
+ /* 44px touch target: the label is the hit area; the visual box sits centred inside. */
1617
+ .md3 .mcheck { display: inline-flex; align-items: flex-start; gap: 12px; cursor: pointer;
1618
+ min-height: 44px; padding: 4px 0; font-family: var(--md-font); color: var(--md-on-surface);
1619
+ -webkit-tap-highlight-color: transparent; }
1620
+ .md3 .mcheck--disabled { cursor: not-allowed; opacity: .55; }
1621
+
1622
+ /* visually-hidden native input — keeps it focusable + semantic; the .mcheck-box is the visual. */
1623
+ .md3 .mcheck-input { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
1624
+ border: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
1625
+
1626
+ .md3 .mcheck-box { flex: none; box-sizing: border-box; display: inline-flex; align-items: center;
1627
+ justify-content: center; width: 20px; height: 20px; margin-top: 10px; border-radius: var(--md-r-sm);
1628
+ border: 2px solid var(--md-outline-variant); background: var(--md-sc-lowest);
1629
+ transition: background .15s, border-color .15s, box-shadow .15s; }
1630
+ .md3 .mcheck-input:checked + .mcheck-box { background: var(--md-primary); border-color: var(--md-primary); }
1631
+ .md3 .mcheck-tick { color: var(--md-on-primary); }
1632
+
1633
+ /* keyboard focus ring on the visual box (input itself is hidden). */
1634
+ .md3 .mcheck-input:focus-visible + .mcheck-box { outline: 2px solid var(--md-primary);
1635
+ outline-offset: 2px; box-shadow: var(--md-e1); }
1636
+
1637
+ .md3 .mcheck:hover .mcheck-input:not(:checked):not(:disabled) + .mcheck-box { border-color: var(--md-on-surface-variant); }
1638
+
1639
+ .md3 .mcheck-label { font-size: 14px; line-height: 1.5; padding-top: 7px; color: var(--md-on-surface); }
1640
+ /* rich labels (T&C/permission) — links pick up the brand colour. */
1641
+ .md3 .mcheck-label a { color: var(--md-primary); text-decoration: underline; }
1642
+ .md3 .mcheck-label a:hover { color: var(--autode-blau-strong); }
1643
+
1644
+ /* error state ('required' / 'boolean' / 'accepted' rule) — red box + inline message. */
1645
+ .md3 .mcheck-group--error .mcheck-input:not(:checked) + .mcheck-box { border-color: var(--md-error); }
1646
+ .md3 .mcheck-error-text { color: var(--md-error); font-size: 12px; line-height: 1.35; }
1647
+
1648
+ /* ─── md3 radio group + selectable radio (FormRadioGroup / FormRadio) ─────────────
1649
+ Drop-in re-skin of the legacy fe-ui-core RadioGroup / CheckboxMaterial(radio) used on
1650
+ DealerEmployeeSet, Checkout, and the RICH VehicleEdit/VehicleAdd radios (color swatches,
1651
+ emission stickers, interior icons, energy bars, DAT-model grids). The group is a flex-wrap
1652
+ set; each radio is a selectable surface wrapping ARBITRARY children with a selected ring.
1653
+ Unique prefix: .mradio* (reuses .mfield-error-text for the inline error). */
1654
+ .md3 .mradio-group { display: flex; flex-direction: column; gap: 6px; }
1655
+ .md3 .mradio-set { display: flex; flex-wrap: wrap; gap: 10px; align-items: stretch; }
1656
+
1657
+ /* the selectable wrapper — an md3 outlined surface; the hidden native radio drives state */
1658
+ .md3 .mradio {
1659
+ position: relative; display: inline-flex; align-items: center; gap: 10px;
1660
+ min-height: 44px; padding: 8px 14px; box-sizing: border-box; cursor: pointer;
1661
+ border-radius: var(--md-r-sm); background: var(--md-surface); color: var(--md-on-surface);
1662
+ box-shadow: inset 0 0 0 1px var(--md-outline-variant);
1663
+ font-family: var(--md-font); font-size: 14px; line-height: 1.3;
1664
+ transition: box-shadow .15s, background .15s, color .15s;
1665
+ -webkit-tap-highlight-color: transparent;
1666
+ }
1667
+ .md3 .mradio:hover { background: var(--md-surface-variant, var(--md-sc, #eceef4)); }
1668
+ .md3 .mradio-body { display: inline-flex; align-items: center; gap: 10px; min-width: 0; }
1669
+ .md3 .mradio-body > img { display: block; max-width: 100%; height: auto; }
1670
+
1671
+ /* hidden but real radio input: keeps native exclusive-group + keyboard + a11y semantics */
1672
+ .md3 .mradio-input {
1673
+ position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; padding: 0;
1674
+ pointer-events: none;
1675
+ }
1676
+
1677
+ /* selected: primary ring + tonal fill (md3 selected-state) */
1678
+ .md3 .mradio--on {
1679
+ background: var(--md-primary-container); color: var(--md-on-primary-container);
1680
+ box-shadow: inset 0 0 0 2px var(--md-primary);
1681
+ }
1682
+ .md3 .mradio--on:hover { background: var(--md-primary-container); }
1683
+
1684
+ /* keyboard focus ring on the wrapper when the hidden input is focused */
1685
+ .md3 .mradio-input:focus-visible + .mradio-body { outline: none; }
1686
+ .md3 .mradio:focus-within { box-shadow: inset 0 0 0 2px var(--md-primary); }
1687
+
1688
+ /* error (group invalid, this option not chosen): red outline, matching .mfield--error */
1689
+ .md3 .mradio--error { box-shadow: inset 0 0 0 2px var(--md-error); }
1690
+ .md3 .mradio-set--error .mradio:not(.mradio--on) { box-shadow: inset 0 0 0 1px var(--md-error); }
1691
+
1692
+ /* disabled */
1693
+ .md3 .mradio--disabled { opacity: .5; cursor: not-allowed; }
1694
+ .md3 .mradio--disabled:hover { background: var(--md-surface); }
1695
+
1696
+ /* ── Accordion (macc) — md3 replacement for fe-ui-core ExpansionPanel / MUI Accordion ── */
1697
+ .md3 .macc {
1698
+ background: var(--md-sc-lowest);
1699
+ border: 1px solid var(--md-outline-variant);
1700
+ border-radius: var(--md-r-md);
1701
+ overflow: hidden; /* clips the collapsing region to the rounded corners */
1702
+ }
1703
+ .md3 .macc + .macc { margin-top: 12px; }
1704
+
1705
+ /* header — full-width button so it's keyboard/AT focusable (legacy AccordionSummary) */
1706
+ .md3 .macc-hd {
1707
+ display: flex;
1708
+ align-items: center;
1709
+ gap: 12px;
1710
+ width: 100%;
1711
+ padding: 16px 18px;
1712
+ background: transparent;
1713
+ border: 0;
1714
+ margin: 0;
1715
+ text-align: left;
1716
+ font-family: var(--md-font);
1717
+ color: var(--md-on-surface);
1718
+ cursor: pointer;
1719
+ -webkit-tap-highlight-color: transparent;
1720
+ }
1721
+ .md3 .macc-hd:hover { background: var(--md-sc-low); }
1722
+ .md3 .macc-hd:focus-visible {
1723
+ outline: 2px solid var(--md-primary);
1724
+ outline-offset: -2px;
1725
+ }
1726
+
1727
+ /* title + subtitle stack; subtitle sits inline-after on wide rows, wraps under on narrow */
1728
+ .md3 .macc-hd-text {
1729
+ display: flex;
1730
+ flex-wrap: wrap;
1731
+ align-items: baseline;
1732
+ gap: 4px 8px;
1733
+ flex: 1 1 auto;
1734
+ min-width: 0;
1735
+ }
1736
+ .md3 .macc-title { color: var(--md-on-surface); }
1737
+ .md3 .macc-subtitle { color: var(--md-on-surface-variant); font-weight: 400; }
1738
+
1739
+ /* header-right validation/status slot (page passes a <StatChip/> here) */
1740
+ .md3 .macc-status { display: inline-flex; align-items: center; flex: 0 0 auto; }
1741
+
1742
+ /* chevron rotates 0->180 on open (legacy arrowSelect / iconExpanded) */
1743
+ .md3 .macc-chev {
1744
+ flex: 0 0 auto;
1745
+ color: var(--md-primary);
1746
+ transition: transform 250ms ease-out;
1747
+ }
1748
+ .md3 .macc--open .macc-chev { transform: rotate(180deg); }
1749
+
1750
+ /* collapsing region: grid 0fr->1fr is smoothly animatable and needs no magic max-height
1751
+ (legacy used max-height:10000px). Children stay mounted so react-scroll anchors inside
1752
+ remain measurable for sticky-sidebar jump-to-section. */
1753
+ .md3 .macc-region {
1754
+ display: grid;
1755
+ grid-template-rows: 1fr;
1756
+ opacity: 1;
1757
+ transition: grid-template-rows 300ms ease, opacity 220ms ease;
1758
+ }
1759
+ .md3 .macc--closed .macc-region {
1760
+ grid-template-rows: 0fr;
1761
+ opacity: 0;
1762
+ }
1763
+ .md3 .macc-region-inner { overflow: hidden; min-height: 0; }
1764
+ .md3 .macc-body { padding: 4px 18px 18px; }
1765
+ /* closed panel content is non-interactive (mirrors aria-hidden) */
1766
+ .md3 .macc--closed .macc-region { pointer-events: none; }
1767
+
1768
+ @media (prefers-reduced-motion: reduce) {
1769
+ .md3 .macc-chev,
1770
+ .md3 .macc-region { transition: none; }
1771
+ }
1772
+
1773
+ /* ---- Modal (md3 dialog) ---- */
1774
+ /* Portal root is a body-level div.md3, so these resolve via the scoped theme. */
1775
+ .md3 .mmodal-scrim {
1776
+ position: fixed; inset: 0; z-index: 1300;
1777
+ display: flex; align-items: center; justify-content: center;
1778
+ padding: 16px;
1779
+ background: rgba(16, 22, 42, .5);
1780
+ overflow-y: auto; overscroll-behavior: contain;
1781
+ animation: mmodal-fade .14s ease-out;
1782
+ }
1783
+ .md3 .mmodal {
1784
+ position: relative;
1785
+ display: flex; flex-direction: column;
1786
+ width: 100%; max-width: 560px;
1787
+ max-height: calc(100vh - 32px);
1788
+ background: var(--md-sc-lowest, #fff);
1789
+ color: var(--md-on-surface);
1790
+ border-radius: var(--md-r-lg);
1791
+ border: 1px solid var(--md-outline-variant);
1792
+ box-shadow: var(--md-e3);
1793
+ font-family: var(--md-font);
1794
+ outline: none;
1795
+ animation: mmodal-pop .16s cubic-bezier(.2, .8, .2, 1);
1796
+ }
1797
+ .md3 .mmodal--sm { max-width: 420px; }
1798
+ .md3 .mmodal--md { max-width: 560px; }
1799
+ .md3 .mmodal--lg { max-width: 800px; }
1800
+
1801
+ .md3 .mmodal-head {
1802
+ flex: none;
1803
+ display: flex; align-items: center; gap: 12px;
1804
+ padding: 20px 16px 12px 24px;
1805
+ }
1806
+ .md3 .mmodal-title {
1807
+ flex: 1 1 auto; min-width: 0;
1808
+ margin: 0;
1809
+ color: var(--md-on-surface);
1810
+ }
1811
+ .md3 .mmodal-head .icon-btn { flex: none; margin: -8px -4px -8px 0; }
1812
+
1813
+ .md3 .mmodal-body {
1814
+ flex: 1 1 auto; min-height: 0;
1815
+ overflow-y: auto; overscroll-behavior: contain;
1816
+ padding: 0 24px 4px;
1817
+ color: var(--md-on-surface-variant);
1818
+ }
1819
+ .md3 .mmodal-body:last-child { padding-bottom: 24px; }
1820
+
1821
+ .md3 .mmodal-foot {
1822
+ flex: none;
1823
+ display: flex; align-items: center; justify-content: flex-end; gap: 8px;
1824
+ flex-wrap: wrap;
1825
+ padding: 16px 24px 20px;
1826
+ }
1827
+
1828
+ @keyframes mmodal-fade { from { opacity: 0; } to { opacity: 1; } }
1829
+ @keyframes mmodal-pop {
1830
+ from { opacity: 0; transform: translateY(8px) scale(.98); }
1831
+ to { opacity: 1; transform: none; }
1832
+ }
1833
+
1834
+ @media (max-width: 560px) {
1835
+ .md3 .mmodal-scrim { padding: 0; align-items: flex-end; }
1836
+ .md3 .mmodal {
1837
+ max-width: 100%; max-height: 92vh;
1838
+ border-radius: var(--md-r-lg) var(--md-r-lg) 0 0;
1839
+ border-bottom: 0;
1840
+ }
1841
+ }
1842
+
1843
+ /* ---------- DatePicker (native <input type=date> styled as .mfield) ---------- */
1844
+ /* Reuses .mfield / .mfield-group / .mfield--error / .mfield--disabled wholesale; the rules below
1845
+ only tame the native date input's browser chrome so it reads as a real md3 field. */
1846
+ .md3 .mdate-input { font: inherit; color: var(--md-on-surface); -webkit-appearance: none; appearance: none;
1847
+ cursor: text; line-height: 1.2; }
1848
+ /* native date inputs render no value as transparent placeholder text in some browsers — keep it muted. */
1849
+ .md3 .mdate-input:invalid,
1850
+ .md3 .mdate-input[value=""] { color: var(--md-on-surface-variant); }
1851
+ /* the calendar picker indicator: tint it to the md3 accent and make it a clear affordance. */
1852
+ .md3 .mdate-input::-webkit-calendar-picker-indicator { cursor: pointer; opacity: .65; padding: 2px;
1853
+ border-radius: var(--md-r-xs); filter: grayscale(1); transition: opacity .15s, background .15s; }
1854
+ .md3 .mdate-input:hover::-webkit-calendar-picker-indicator { opacity: 1; }
1855
+ .md3 .mdate-input:focus::-webkit-calendar-picker-indicator { opacity: 1; }
1856
+ .md3 .mdate-field:focus-within .mdate-input::-webkit-calendar-picker-indicator { background: var(--md-sc); }
1857
+ /* strip the inner spin/clear quirks so the field stays flat like the rest of the md3 kit. */
1858
+ .md3 .mdate-input::-webkit-inner-spin-button,
1859
+ .md3 .mdate-input::-webkit-clear-button { display: none; -webkit-appearance: none; appearance: none; }
1860
+ .md3 .mdate-input::-webkit-datetime-edit { color: inherit; font: inherit; }
1861
+ .md3 .mdate-input::-webkit-datetime-edit-fields-wrapper { padding: 0; }
1862
+ /* disabled parity with .mfield--disabled. */
1863
+ .md3 .mfield--disabled .mdate-input { cursor: not-allowed; color: var(--md-on-surface-variant); }
1864
+ .md3 .mfield--disabled .mdate-input::-webkit-calendar-picker-indicator { opacity: .35; cursor: not-allowed; }
1865
+
1866
+ /* ---------- Table (md3 composable data/spec table) ---------- */
1867
+ /* Composable wrappers Table/Thead/Tbody/Tr/Th/Td. Header on surface-variant,
1868
+ row dividers + hover, dense + sticky-header options, and an overflow-x:auto
1869
+ wrapper so wide tables (Vergleich, options matrix) scroll inside their own box. */
1870
+ .md3 .mtab-wrap { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch;
1871
+ border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-md); background: var(--md-sc-lowest); }
1872
+ .md3 .mtab { width: 100%; border-collapse: collapse; font-family: var(--md-font);
1873
+ font-size: 14px; color: var(--md-on-surface); }
1874
+
1875
+ /* header — surface-variant tone, small uppercase labels */
1876
+ .md3 .mtab-thead { background: var(--md-sc-low); }
1877
+ .md3 .mtab-th { text-align: left; padding: 12px 16px; font-size: 11px; font-weight: 600;
1878
+ letter-spacing: .4px; text-transform: uppercase; color: var(--md-on-surface-variant);
1879
+ white-space: nowrap; border-bottom: 1px solid var(--md-outline-variant); }
1880
+
1881
+ /* body cells — row dividers via bottom border */
1882
+ .md3 .mtab-tbody .mtab-tr { transition: background var(--dur-1) var(--ease-standard); }
1883
+ .md3 .mtab-tbody .mtab-tr:not(:last-child) .mtab-td { border-bottom: 1px solid var(--md-outline-variant); }
1884
+ .md3 .mtab-td { padding: 14px 16px; vertical-align: middle; line-height: 1.45; }
1885
+
1886
+ /* hover + selected */
1887
+ .md3 .mtab-tbody .mtab-tr:hover { background: var(--md-sc-low); }
1888
+ .md3 .mtab-tr.is-selected { background: var(--md-primary-container); }
1889
+ .md3 .mtab-tr.is-selected:hover { background: var(--md-primary-container); }
1890
+
1891
+ /* alignment + numeric */
1892
+ .md3 .mtab-center { text-align: center; }
1893
+ .md3 .mtab-right { text-align: right; }
1894
+ .md3 .mtab-td--num { font-variant-numeric: tabular-nums; font-feature-settings: "tnum" 1; }
1895
+
1896
+ /* dense — tighter rows for list-heavy tables (Mitarbeiter, options) */
1897
+ .md3 .mtab--dense .mtab-th { padding: 8px 12px; }
1898
+ .md3 .mtab--dense .mtab-td { padding: 8px 12px; }
1899
+
1900
+ /* sticky header — pins while the body scrolls (caller constrains height) */
1901
+ .md3 .mtab--sticky .mtab-th { position: sticky; top: 0; z-index: 1; background: var(--md-sc-low);
1902
+ box-shadow: inset 0 -1px 0 var(--md-outline-variant); }
1903
+
1904
+ /* md3 Switch — extras for the autobahn ui/Switch.tsx component.
1905
+ The base .mswitch / .mswitch-track / .mswitch-thumb (+ :checked) rules already exist
1906
+ in this file (md3 switch block, ~L424-430). These only add the optional label + the
1907
+ disabled state the React component emits. All scoped under .md3, mswitch- prefix. */
1908
+ .md3 .mswitch--labeled { align-items: center; gap: 10px; }
1909
+ .md3 .mswitch-label { font: 600 14px var(--md-font); color: var(--md-on-surface); user-select: none; }
1910
+ .md3 .mswitch--disabled { cursor: not-allowed; opacity: .5; }
1911
+ .md3 .mswitch--disabled .mswitch-track { background: var(--md-outline-variant); }
1912
+ .md3 .mswitch input:disabled + .mswitch-track { cursor: not-allowed; }
1913
+ .md3 .mswitch input:focus-visible + .mswitch-track { outline: 2px solid var(--md-primary); outline-offset: 2px; }
1914
+
1915
+ /* ---------- multiline text field (Textarea — outlined, MD3) ----------
1916
+ Reuses .mfield (outline, focus ring, error/disabled states, label/error via
1917
+ .mfield-group) but overrides the single-line geometry: a textarea needs auto
1918
+ height, top alignment and vertical padding, and must fill the box + resize. */
1919
+ .md3 .mfield.mtextarea { height: auto; align-items: stretch; padding: 10px 14px; }
1920
+ .md3 .mfield.mtextarea textarea {
1921
+ border: 0; outline: 0; background: transparent; flex: 1; width: 100%;
1922
+ font: inherit; color: inherit; min-width: 0;
1923
+ display: block; resize: vertical; min-height: 96px; line-height: 1.5;
1924
+ }
1925
+ .md3 .mfield.mtextarea textarea::placeholder { color: var(--md-on-surface-variant); }
1926
+
1927
+ /* ── Pagination (md3 pager) — prefix .mpag-, scoped under .md3 ───────────────── */
1928
+ .md3 .mpag { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 6px; }
1929
+ .md3 .mpag-list { display: flex; align-items: center; gap: 6px; list-style: none; margin: 0; padding: 0; }
1930
+
1931
+ /* numbered page buttons */
1932
+ .md3 .mpag-page {
1933
+ box-sizing: border-box; min-width: 40px; height: 40px; padding: 0 10px;
1934
+ display: inline-flex; align-items: center; justify-content: center;
1935
+ border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-full);
1936
+ background: transparent; color: var(--md-on-surface); cursor: pointer;
1937
+ font: 600 14px var(--md-font); transition: background .15s, border-color .15s, color .15s, box-shadow .15s;
1938
+ }
1939
+ .md3 .mpag-page .num { font-size: 14px; }
1940
+ .md3 .mpag-page:hover { background: color-mix(in srgb, var(--md-primary) 8%, transparent); border-color: var(--md-primary); }
1941
+ .md3 .mpag-page.is-current {
1942
+ background: var(--md-primary); color: var(--md-on-primary);
1943
+ border-color: var(--md-primary); cursor: default; box-shadow: var(--md-e1);
1944
+ }
1945
+ .md3 .mpag-page.is-current:hover { background: var(--md-primary); }
1946
+
1947
+ /* ellipsis gap */
1948
+ .md3 .mpag-gap {
1949
+ min-width: 28px; height: 40px; display: inline-flex; align-items: flex-end; justify-content: center;
1950
+ padding-bottom: 8px; color: var(--md-on-surface-variant); font: 600 16px var(--md-font); user-select: none;
1951
+ }
1952
+
1953
+ /* prev / next pill */
1954
+ .md3 .mpag-edge {
1955
+ height: 40px; padding: 0 16px; display: inline-flex; align-items: center; gap: 6px;
1956
+ border: 1px solid var(--md-outline-variant); border-radius: var(--md-r-full);
1957
+ background: transparent; color: var(--md-primary); cursor: pointer;
1958
+ font: 600 14px var(--md-font); white-space: nowrap;
1959
+ transition: background .15s, border-color .15s, color .15s, opacity .15s;
1960
+ }
1961
+ .md3 .mpag-edge:hover { background: color-mix(in srgb, var(--md-primary) 8%, transparent); border-color: var(--md-primary); }
1962
+ .md3 .mpag-edge:disabled { opacity: .4; cursor: not-allowed; color: var(--md-on-surface-variant); }
1963
+ .md3 .mpag-edge:disabled:hover { background: transparent; border-color: var(--md-outline-variant); }
1964
+ .md3 .mpag-edge-label { line-height: 1; }
1965
+
1966
+ /* compact phones: drop the prev/next text labels, keep the chevrons */
1967
+ @media (max-width: 520px) {
1968
+ .md3 .mpag-edge { padding: 0 10px; }
1969
+ .md3 .mpag-edge-label { display: none; }
1970
+ }
1971
+
1972
+ /* ── Stepper (md3 step indicator) ───────────────────────────────────────── */
1973
+ /* numbered circles + connectors; done=check on primary fill, active=primary
1974
+ outline, todo=neutral outline. Non-linear (clickable) via .mstep--clickable.
1975
+ Mirrors the inline .co-stepper visual language, generalised for both
1976
+ orientations. Unique `mstep-` prefix — no collision with .co-step*. */
1977
+ .md3 .mstep { display: block; max-width: 880px; margin: 0 auto; }
1978
+ .md3 .mstep-list { display: flex; align-items: center; gap: 0; margin: 0; padding: 0; list-style: none; }
1979
+ .md3 .mstep-item { display: flex; align-items: center; flex: 1; min-width: 0; }
1980
+ .md3 .mstep-item:last-child { flex: none; }
1981
+ .md3 .mstep-btn { display: inline-flex; align-items: center; gap: 10px; min-width: 0; flex: none;
1982
+ border: 0; background: transparent; padding: 0; margin: 0; font-family: var(--md-font);
1983
+ color: var(--md-on-surface-variant); text-align: left; }
1984
+ .md3 .mstep-dot { display: flex; align-items: center; justify-content: center; width: 30px; height: 30px;
1985
+ flex: none; border-radius: var(--md-r-full); border: 2px solid var(--md-outline-variant);
1986
+ font: 700 13px var(--md-font); background: var(--md-sc-lowest, #fff); transition: border-color .15s, background .15s, color .15s; }
1987
+ .md3 .mstep-dot .lucide { width: 16px; height: 16px; }
1988
+ .md3 .mstep-label { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1989
+ .md3 .mstep-connector { flex: 1; height: 2px; min-width: 16px; margin: 0 10px;
1990
+ background: var(--md-outline-variant); transition: background .15s; align-self: center; }
1991
+ /* state — active */
1992
+ .md3 .mstep-item--active .mstep-btn { color: var(--md-primary); }
1993
+ .md3 .mstep-item--active .mstep-dot { border-color: var(--md-primary); color: var(--md-primary); }
1994
+ /* state — done (primary-filled dot + primary-tinted connector + check glyph) */
1995
+ .md3 .mstep-item--done .mstep-btn { color: var(--md-on-surface); }
1996
+ .md3 .mstep-item--done .mstep-dot { border-color: var(--md-primary); background: var(--md-primary); color: var(--md-on-primary); }
1997
+ .md3 .mstep-item--done .mstep-dot .lucide { color: var(--md-on-primary); }
1998
+ .md3 .mstep-item--done .mstep-connector { background: var(--md-primary); }
1999
+ /* clickable (non-linear) affordances */
2000
+ .md3 .mstep--clickable .mstep-btn { cursor: pointer; border-radius: var(--md-r-full); }
2001
+ .md3 .mstep--clickable .mstep-btn:hover .mstep-dot { box-shadow: var(--md-e1); }
2002
+ .md3 .mstep--clickable .mstep-btn:hover .mstep-label { color: var(--md-on-surface); }
2003
+ .md3 .mstep--clickable .mstep-btn:focus-visible { outline: 2px solid var(--md-primary); outline-offset: 3px; }
2004
+ /* vertical orientation */
2005
+ .md3 .mstep--vertical .mstep-list { flex-direction: column; align-items: stretch; }
2006
+ .md3 .mstep--vertical .mstep-item { flex: none; flex-direction: column; align-items: flex-start; }
2007
+ .md3 .mstep--vertical .mstep-btn { width: 100%; }
2008
+ .md3 .mstep--vertical .mstep-connector { width: 2px; height: auto; min-height: 22px; flex: none;
2009
+ margin: 4px 0 4px 14px; align-self: flex-start; }
2010
+ /* mobile: hide labels on the horizontal variant so dots+connectors stay legible */
2011
+ @media (max-width: 720px) {
2012
+ .md3 .mstep--horizontal .mstep-label { display: none; }
2013
+ .md3 .mstep--horizontal .mstep-btn { gap: 0; }
2014
+ }
2015
+
2016
+ /* ── FileUpload — md3 dropzone shell (wraps preserved Uppy / react-dropzone engine) ── */
2017
+ .md3 .mfu { display: flex; flex-direction: column; gap: 14px; }
2018
+ .md3 .mfu-zone {
2019
+ position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center;
2020
+ gap: 8px; text-align: center; padding: 32px 24px; min-height: 168px;
2021
+ border: 2px dashed var(--md-outline-variant); border-radius: var(--md-r-lg);
2022
+ background: var(--md-sc-lowest); color: var(--md-on-surface-variant);
2023
+ font-family: var(--md-font); cursor: pointer;
2024
+ transition: border-color .15s, background .15s, box-shadow .15s;
2025
+ }
2026
+ .md3 .mfu-zone:hover { border-color: var(--md-primary); background: var(--md-primary-container); }
2027
+ .md3 .mfu-zone:focus-visible { outline: none; border-color: var(--md-primary); box-shadow: 0 0 0 3px var(--md-primary-container); }
2028
+ /* drag-over highlight (driven by the .mfu--over state class) */
2029
+ .md3 .mfu--over .mfu-zone { border-color: var(--md-primary); border-style: solid; background: var(--md-primary-container); box-shadow: var(--md-e1); }
2030
+ .md3 .mfu-icon { display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px;
2031
+ border-radius: var(--md-r-full); background: var(--md-sc-high); color: var(--md-primary); }
2032
+ .md3 .mfu-icon .lucide { width: 28px; height: 28px; color: var(--md-primary); }
2033
+ .md3 .mfu--over .mfu-icon { background: var(--md-sc-lowest); }
2034
+ .md3 .mfu-prompt { font-size: 15px; font-weight: 500; line-height: 1.4; color: var(--md-on-surface); }
2035
+ .md3 .mfu-link { color: var(--md-primary); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }
2036
+ .md3 .mfu-or { color: var(--md-on-surface-variant); font-weight: 400; }
2037
+ .md3 .mfu-hint { margin-top: 2px; }
2038
+ /* visually-hidden native input — click is proxied from the zone */
2039
+ .md3 .mfu-input { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
2040
+ overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
2041
+ /* slot for the preserved engine / file list / progress bar */
2042
+ .md3 .mfu-slot { display: block; }
2043
+ /* disabled (mirrors react-dropzone/Uppy disabled while uploading) */
2044
+ .md3 .mfu--disabled .mfu-zone { cursor: not-allowed; opacity: .5; }
2045
+ .md3 .mfu--disabled .mfu-zone:hover { border-color: var(--md-outline-variant); background: var(--md-sc-lowest); box-shadow: none; }