{"id":1292,"date":"2020-07-27T12:39:54","date_gmt":"2020-07-27T10:39:54","guid":{"rendered":"https:\/\/diamant.boosto.de\/?page_id=1292"},"modified":"2026-01-08T11:46:54","modified_gmt":"2026-01-08T10:46:54","slug":"womens-bikes","status":"publish","type":"page","link":"https:\/\/www.diamantrad.com\/de-DE\/bikes\/womens-bikes\/","title":{"rendered":"Womens Bikes"},"content":{"rendered":"\n<div class=\"wp-block-cover\"><img data-dominant-color=\"8c7985\" data-has-transparency=\"false\" loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1688\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" class=\"wp-block-cover__image-background wp-image-53354 size-full not-transparent\" alt=\"Di 25 mahon lifestyle\" src=\"https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I0836_300dpi-scaled.avif\" style=\"--dominant-color: #8c7985; object-position:77% 80%\" data-object-fit=\"cover\" data-object-position=\"77% 80%\" srcset=\"https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I0836_300dpi-scaled.avif 2560w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I0836_300dpi-300x198.avif 300w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I0836_300dpi-1024x675.avif 1024w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I0836_300dpi-768x506.avif 768w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I0836_300dpi-1536x1013.avif 1536w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I0836_300dpi-2048x1350.avif 2048w\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-color-primary-background-color has-background-dim-30 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-constrained wp-block-cover-is-layout-constrained\">\n<p class=\"has-text-align-center has-large-font-size\"><\/p>\n\n\n<div class=\"lazyblock-cover-text-uT9VY wp-block-lazyblock-cover-text\"><div class=\"covertext container py-5 d-flex flex-column colorscheme-light justify-content-center\" id=\"covertext-uT9VY\">\r\n  <div class=\"lazyblock-inner-blocks\">\n\n<h2 class=\"wp-block-heading\">Damenr\u00e4der<\/h2>\n\n<\/div>\r\n<\/div><\/div><\/div><\/div>\n\n\n<div class=\"lazyblock-nncontainer-ZH8ULh wp-block-lazyblock-nncontainer\"><div class=\"section-standard\">\r\n  <div class=\"container\" id=\"container-ZH8ULh\">\r\n    <div class=\"row\">\r\n      <div class=\"col py-4 py-lg-5\">\r\n        <div class=\"lazyblock-inner-blocks\">\n\n<p>Du bist hier, weil du nach Damenr\u00e4dern gesucht hast. Viele bezeichnen R\u00e4der mit abgesenktem (oder ohne) Oberrohr als \u201eDamenr\u00e4der\u201c. Uns ist egal, wie du es nennst. R\u00e4der und E-Bikes mit mittlerem und tiefem Einstieg k\u00f6nnen alle Menschen bei uns in sportlich und gem\u00fctlich kaufen, in elektrisch und ohne Motor, in schwarz und bunt. Du kannst in unserem Sortiment ganz einfach danach filtern.<\/p>\n\n\n\n<p>Weiter unten erkl\u00e4ren wir dir, worauf Frauen beim Fahrradkauf achten sollten. Du kannst es dir sicher schon denken: Die Rahmenform ist es nicht \u2013 jede Rahmenform ist bei Diamant als Unisex konstruiert. Die Geometrie unterscheidet sich zwischen den Rahmenformen nicht.<\/p>\n\n<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div><\/div>\n\n<div class=\"lazyblock-nncontainer-Zmm6dU wp-block-lazyblock-nncontainer\"><div class=\"section-light\">\r\n  <div class=\"container\" id=\"container-Zmm6dU\">\r\n    <div class=\"row\">\r\n      <div class=\"col py-4 py-lg-5\">\r\n        <div class=\"lazyblock-inner-blocks\">\n<div class=\"lazyblock-bikefinder-Z1PkW47 wp-block-lazyblock-bikefinder\"><template id=\"bikeTeaserComponent\">\n  <template x-if=\"frames.value.length\">\n    <div class=\"bikefinder-tile px-3 py-4 px-lg-4\" :class=\"classNames\">\n      <div class=\"bikefinder-tile-content\">\n        <a :href=\"selectedFrame.value.link\" class=\"bikefinder-title\">\n          <h4\n            class=\"mb-0\"\n            x-text=\"extractOrCleanString(selectedFrame.value.title)\"\n          ><\/h4>\n        <\/a>\n\n        <p\n          class=\"bikefinder-subtitle\"\n          x-text=\"$store.utils.t($store.utils.translations.frames[extractOrCleanString(selectedFrame.value.title, true)])\"\n        ><\/p>\n\n        <div\n          class=\"bikefinder-preis\"\n          x-text=\"getAbText() + ' ' + formatNumber(selectedFrame.value.price_lowest) + ' ' + getCurrency()\"\n        ><\/div>\n        <a :href=\"selectedFrame.value.link\" class=\"color-images mx-auto mb-4\"\n          ><picture>\n            <img\n              :src=\"selectedFrameImage.value\"\n              class=\"img-fluid lazy\"\n              :alt=\"selectedFrame.value.title\"\n          \/><\/picture>\n        <\/a>\n\n        <div class=\"bikefinder-controls mb-3\">\n          <div class=\"color-switch\">\n            <template x-for=\"(color, index) in selectedFrame.value.colors\">\n              <span\n                @click=\"onColorClicked(color)\"\n                :class=\"'bike-color-' + color.value.toLowerCase()\"\n                data-bs-toggle=\"tooltip\"\n                data-bs-placement=\"top\"\n                :title=\"color.description\"\n              ><\/span>\n            <\/template>\n          <\/div>\n\n          <div class=\"bikefinder-rahmen\">\n            <ul\n              class=\"nav nav-tabs\"\n              x-data=\"{ frames: framesAsGenerations ? selectedFrameByGeneration: frames }\"\n            >\n              <template x-for=\"(frame, index) in frames.value\">\n                <li\n                  class=\"nav-item\"\n                  @click=\"onFrameClicked(frame)\"\n                  x-show=\"!framesAsGenerations || isFrameInFiltered(frame)\"\n                >\n                  <span\n                    class=\"nav-link\"\n                    :class=\"selectedFrame.value.id == frame.id ? 'active' : ''\"\n                    x-data=\"{ meta: getFrameMeta(frame.frameType) }\"\n                  >\n                    <img\n                      width=\"48\"\n                      height=\"28\"\n                      :src=\"meta.icon\"\n                      data-bs-toggle=\"tooltip\"\n                      data-bs-placement=\"top\"\n                      :title=\"$store.utils.t(meta.text)\"\n                    \/>\n                  <\/span>\n                <\/li>\n              <\/template>\n            <\/ul>\n          <\/div>\n        <\/div>\n      <\/div>\n      <template x-if=\"framesAsGenerations\">\n        <div\n          x-data=\"generation({ generations: frames, generationClickedCallback: generationsCallback })\"\n        ><\/div>\n      <\/template>\n    <\/div>\n  <\/template>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\n      \"biketeaser\",\n      ({ frames, framesAsGenerations, framesMeta }) => ({\n        template: null,\n        frames: { value: frames },\n        selectedFrameByGeneration: { value: [] },\n        selectedFrame: { value: null },\n        framesMeta: framesMeta,\n        selectedFrameImage: {},\n        framesAsGenerations: framesAsGenerations,\n        generationsCallback: null,\n        classNames: \"\",\n        currentVariant: null,\n        init() {\n          this.setup();\n          this.$nextTick(() => {\n            this.mounted();\n            this.render();\n          });\n        },\n        setup() {\n          this.template = document.getElementById(\"bikeTeaserComponent\");\n        },\n        mounted() {\n          if (this.frames.value.length) {\n            if (this.framesAsGenerations) {\n              this.selectedFrameByGeneration.value = this.frames.value[0];\n              this.selectedFrame.value = this.frames.value[0];\n            } else {\n              this.selectedFrame.value = this.frames.value;\n            }\n\n            const frame = this.getFrameWithSpecialRecommendedRetailpriceOrFirst(\n              this.selectedFrame.value,\n            );\n\n            let variant = this.getVariantsWithKey(\n              frame,\n              \"special_recommended_retailprice\",\n            )[0];\n            if (!variant) {\n              variant = frame.variants[0];\n            }\n\n            const uniqueFrameImageOfVariant = this.getImageByVariant(\n              frame,\n              variant,\n            );\n\n            this.selectedFrame.value = frame;\n            this.selectedFrameImage = uniqueFrameImageOfVariant;\n\n            this.setClassNames(variant.id);\n          }\n          this.generationsCallback = this.onGenerationClicked.bind(this);\n        },\n        render() {\n          this.$el.innerHTML = this.template.innerHTML;\n        },\n        getFrameWithSpecialRecommendedRetailpriceOrFirst(frames) {\n          const frame = frames.find((frame) => {\n            return frame.hasOwnProperty(\"special_recommended_retailprice\");\n          });\n          return frame ? frame : frames[0];\n        },\n        getVariantsWithKey(frame, key, value = \"\") {\n          if (\n            frame.commonValues.hasOwnProperty(key) &&\n            (value ? frame.commonValues[key] === value : true)\n          ) {\n            return frame.variants;\n          }\n\n          return frame.variants.filter((variant) => {\n            return variant[key] && (value ? variant[key] === value : true);\n          });\n        },\n        getRecomendedRetailpriceVariantColor(color) {\n          const variantsWithPrice = this.getVariantsWithKey(\n            this.selectedFrame.value,\n            \"special_recommended_retailprice\",\n          );\n\n          const variantsWithColor = this.getVariantsWithKey(\n            this.selectedFrame.value,\n            \"primary_basecolour\",\n            color.value,\n          );\n\n          const variantsWithPriceIds = variantsWithPrice.map(\n            (variant) => variant.id,\n          );\n          let variant = variantsWithPrice.find((variant) =>\n            variantsWithPriceIds.includes(variant.id),\n          );\n          if (!variant) {\n            variant = variantsWithColor.length ? variantsWithColor[0] : this.selectedFrame.value.variants[0];\n          }\n\n          return {\n            value: variant ? variant.value : \"\",\n            variantId: variant ? variant.id : null,\n          };\n        },\n        getImageByVariant(frame, variant) {\n          if (!variant) {\n            return { value: frame?.commonValues?.pos_image, variantId: null };\n          }\n          const uniqueImage = frame.images?.find((image) => {\n            return image.value == variant[image.propertyPath];\n          });\n\n          return uniqueImage\n            ? { value: uniqueImage.value, variantId: variant.id }\n            : { value: frame.commonValues?.pos_image, variantId: variant.id };\n        },\n        isFrameInFiltered(frame) {\n          return frame.hasVariants.length ? true : false;\n        },\n        extractTextInBrackets(text) {\n          const match = text.match(\/\\((.*?)\\)\/);\n          return match ? match[1] : \"\";\n        },\n        onFrameClicked(frame) {\n          this.selectedFrame.value = frame;\n          const variantsWithPrice = this.getVariantsWithKey(\n            frame,\n            \"special_recommended_retailprice\",\n          );\n\n          const variantsWithPosImage = this.getVariantsWithKey(\n            frame,\n            \"pos_image\",\n          );\n\n          const variantsWithPriceIds = variantsWithPrice.map(\n            (variant) => variant.id,\n          );\n\n          let variant = variantsWithPrice.find((variant) =>\n            variantsWithPriceIds.includes(variant.id),\n          );\n          if (!variant) {\n            variant = frame.variants[0];\n          }\n\n          const uniqueFrameImageOfVariant = this.getImageByVariant(\n            frame,\n            variant,\n          );\n\n          this.selectedFrameImage = uniqueFrameImageOfVariant;\n          this.setClassNames(variant.id);\n        },\n        onGenerationClicked(generation) {\n          this.selectedFrameByGeneration.value = generation;\n          this.selectedFrame.value = this.selectedFrameByGeneration.value[0];\n          this.selectedFrameImage = this.selectedFrame.value.images[0];\n          this.setClassNames(this.selectedFrame.value.images[0].variantId);\n        },\n        onColorClicked(color) {\n          this.selectedFrameImage = this.selectedFrame.value.images.find(\n            (image) => image.variantId == color.variantId,\n          );\n\n          const colorRetailprice =\n            this.getRecomendedRetailpriceVariantColor(color);\n          this.setClassNames(colorRetailprice.variantId);\n        },\n        setClassNames(variantId) {\n          \/\/ Maybe many?\n          this.currentVariant = this.selectedFrame.value.variants.find(\n            (variant) => {\n              return variant.id === variantId;\n            },\n          );\n\n          let names = [];\n          if (this.isReducedPrice(this.currentVariant) && this.isLastChance()) {\n            names.push(\"sale\");\n            names.push(\"lastchance\");\n          } else if (this.isReducedPrice(this.currentVariant)) {\n            names.push(\"sale\");\n          } else if (this.isLastChance()) {\n            names.push(\"lastchance\");\n          }\n\n          if (this.isNewBike()) {\n            names.push(\"newbike\");\n          }\n          this.classNames = names.join(\" \");\n        },\n        getPriceText(price) {\n          return \"Ab \" + price + \" EUR\";\n        },\n        formatNumber(number) {\n          if (this.$store.utils.country === \"CH\") {\n            return number.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \"'\");\n          } else {\n            return number.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \".\");\n          }\n        },\n        getAbText() {\n          const lang = this.$store.utils.lang;\n          return (\n            {\n              da: \"Fra\",\n              de: \"Ab\",\n              en: \"From\",\n              fi: \"Alkaen\",\n              fr: \"\u00c0 partir de\",\n              nl: \"Vanaf\",\n              pl: \"Od\",\n              sv: \"Fr\u00e5n\",\n            }[lang] || \"Ab\"\n          );\n        },\n        getCurrency() {\n          const currencyMap = {\n            CH: \"CHF\",\n            DK: \"DKK\",\n            GB: \"GBP\",\n            PL: \"PLN\",\n            SE: \"SEK\",\n          };\n          const country = this.$store.utils.country;\n          return currencyMap[country] || \"EUR\";\n        },\n        isReducedPrice(variant) {\n          if (variant && variant.special_recommended_retailprice) {\n            return variant.special_recommended_retailprice;\n          }\n          return this.selectedFrame.value.specialRecommendedRetailprice.find(\n            (price) => price.variantId === this.selectedFrame.value.id,\n          );\n        },\n        isLastChance() {\n          return this.selectedFrame.value.lastchance;\n        },\n        isNewBike() {\n          return this.selectedFrame.value.newbike;\n        },\n        removeAllBrackets(str) {\n          const regex = \/\\[.*?\\]|\\(.*?\\)|\\{.*?\\}\/g;\n          return str.replace(regex, \"\");\n        },\n        extractBrackets(str) {\n          const regex = \/\\[.*?\\]|\\(.*?\\)|\\{.*?\\}\/g;\n\n          const matches = str.match(regex);\n\n          return matches || [];\n        },\n        getFrameMeta(frameType) {\n          return this.framesMeta[frameType] || { icon: '', text: '' };\n        },\n        extractOrCleanString(str, returnExtracted = false) {\n          if (!str) return \"\";\n          const pattern =\n            \/\\(?\\b(HCH|MIT|Lowstep|SCH|TIE|Midstep|Stepover|HER|TRA)\\b\\)?\/i;\n          const match = str.match(pattern);\n\n          if (match) {\n            return returnExtracted\n              ? match[1]\n              : str.replace(pattern, \"\").replace(\/\\s+\/g, \" \").trim();\n          }\n\n          return returnExtracted ? null : str.trim();\n        },\n      }),\n    );\n  });\n<\/script>\n<template id=\"generationComponent\">\n  <template x-if=\"getGenerationWithoutActive().length\">\n    <div class=\"dropdown bikefinder-generations\">\n      <button\n        class=\"btn btn-secondary dropdown-toggle p-0\"\n        type=\"button\"\n        :id=\"'dropdownGenerations-' + selectedGeneration.id\"\n        data-bs-toggle=\"dropdown\"\n        aria-expanded=\"false\"\n        x-text=\"$store.utils.t($store.utils.translations.futureGenerations)\"\n      ><\/button>\n      <div\n        class=\"dropdown-menu dropdown-generations\"\n        :aria-labelledby=\"'dropdownGenerations-' + selectedGeneration.id\"\n      >\n        <template\n          x-for=\"(generation, index) in getGenerationWithoutActive(generations)\"\n          :key=\"'genNav-' + index\"\n        >\n          <a\n            @click=\"onGenerationClicked(generation)\"\n            class=\"dropdown-item\"\n            x-text=\"mainTitle(generation)\"\n          ><\/a>\n        <\/template>\n      <\/div>\n    <\/div>\n  <\/template>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\"generation\", ({ generations, generationClickedCallback }) => ({\n      template: null,\n      generations: generations,\n      selectedGeneration: {},\n      selectedFrameImage: {},\n      generationClickedCallback: generationClickedCallback,\n      init() {\n        this.setup();\n        this.$nextTick(() => {\n          this.mounted();\n          this.render();\n        });\n      },\n      setup() {\n        this.template = document.getElementById(\"generationComponent\");\n      },\n      mounted() {\n        if (this.generations.value.length) {\n          this.selectedGeneration = this.generations.value[0];\n        }\n      },\n      render() {\n        this.$el.innerHTML = this.template.innerHTML;\n      },\n      onGenerationClicked(generation) {\n        this.generationClickedCallback(generation);\n        this.selectedGeneration = generation;\n      },\n      active(generation, selectedGeneration) {\n        return generation === selectedGeneration;\n      },\n      getGenerationWithoutActive() {\n        return this.generations.value.filter(\n          (generation) => generation != this.selectedGeneration\n        );\n      },\n      getGenerationFrame(generation) {\n        return generation[0];\n      },\n      extractOrCleanString(str, returnExtracted = false) {\n        const pattern =\n          \/\\(?\\b(HCH|MIT|Lowstep|SCH|TIE|Midstep|Stepover|HER|TRA)\\b\\)?\/i;\n        const match = str.match(pattern);\n\n        if (match) {\n          return returnExtracted\n            ? match[1]\n            : str.replace(pattern, \"\").replace(\/\\s+\/g, \" \").trim();\n        }\n\n        return returnExtracted ? null : str.trim();\n      },\n      mainTitle(generation) {\n        let frame = this.getGenerationFrame(generation);\n        let title = this.extractOrCleanString(frame.title);\n        return (\n          title +\n          \" \" +\n          this.addModelYear(frame) +\n          \" - \" +\n          this.formatNumber(frame.price_lowest) +\n          \" \" +\n          this.getCurrency()\n        );\n      },\n      addModelYear(frame) {\n        if (frame.modelYear) {\n          return \" (\" + frame.modelYear + \")\";\n        }\n        return \"\";\n      },\n      getCurrency() {\n        const currencyMap = {\n          CH: \"CHF\",\n          DK: \"DKK\",\n          GB: \"GBP\",\n          PL: \"PLN\",\n          SE: \"SEK\",\n        };\n        const country = this.$store.utils.country;\n        return currencyMap[country] || \"EUR\";\n      },\n      formatNumber(number) {\n        if (this.$store.utils.country === \"CH\") {\n          return number.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \"'\");\n        } else {\n          return number.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \".\");\n        }\n      },\n    }));\n  });\n<\/script>\n<template id=\"filterComponent\">\n  <template x-if=\"showReset\">\n    <div id=\"filter\" class=\"bikefinder-filter mb-5 text-start\">\n      <h5 class=\"text-uppercase h-underline mt-4 position-relative\">\n        Filter\n        <div x-show=\"isFilterActive()\" class=\"small reset-filters\">\n          <span\n            @click=\"resetFilter()\"\n            class=\"btn-reset-filters\"\n            x-text=\"$store.utils.t($store.utils.translations.resetFilter)\"\n          >\n          <\/span>\n        <\/div>\n      <\/h5>\n      <div class=\"bike-counter mb-4\">\n        <span id=\"bikeCount\" x-text=\"countOfFilteredBikes.value\"><\/span> Bikes\n      <\/div>\n\n      <!-- Biketyp -->\n      <h5\n        class=\"mb-1\"\n        x-text=\"$store.utils.t($store.utils.translations.bikeType)\"\n      ><\/h5>\n      <div\n        class=\"small text-grey mb-2\"\n        x-text=\"$store.utils.t($store.utils.translations.bikeTypeSpeed)\"\n      ><\/div>\n      <div\n        x-key=\"'typeLineSelection'\"\n        x-data=\"lineselection(\n        { \n            items: typeFilterProps.sort((a, b) => a.context.order < b.context.order ? -1 : 1),\n            onSelected: onTypeSelected,\n            selectedFilter: selectedFilter,\n        }\n      )\"\n      ><\/div>\n\n      <template x-if=\"!hideBattery\">\n        <div class=\"bikefinder-filter-akku\">\n          <!-- Akku -->\n          <h5\n            class=\"mb-1\"\n            x-text=\"$store.utils.t($store.utils.translations.battery)\"\n          ><\/h5>\n          <div\n            class=\"small text-grey mb-2\"\n            x-text=\"$store.utils.t($store.utils.translations.unitBattery)\"\n          ><\/div>\n          <div\n            x-show=\"showReset\"\n            x-data=\"sliderselection(\n            { \n                items: batteryFilterProps,\n                onSelected: onBatterySelected,\n                id: 'battery-slider',\n                domLoaded: domLoaded,\n                options: { step: 100, values: true }\n            }\n          )\"\n          ><\/div>\n        <\/div>\n      <\/template>\n\n      <!-- Rahmenformen -->\n      <h5 x-text=\"$store.utils.t($store.utils.translations.frameShape)\"><\/h5>\n\n      <div\n        x-key=\"'frameLineSelection'\"\n        x-data=\"lineselection(\n        { \n            items: frameFilterProps.sort((a, b) => a.context.order < b.context.order ? -1 : 1),\n            onSelected: onFrameSelected,\n            selectedFilter: selectedFilter,\n        }\n      )\"\n      ><\/div>\n\n      <!-- Schaltung -->\n      <h5 x-text=\"$store.utils.t($store.utils.translations.gear)\"><\/h5>\n      <div\n        x-data=\"choiceselection(\n        { \n            items: gearFilterProps,\n            onSelected: onGearSelected \n        }\n      )\"\n      ><\/div>\n\n      <!-- Preis -->\n      <h5\n        class=\"mb-1\"\n        x-text=\"$store.utils.t($store.utils.translations.price)\"\n      ><\/h5>\n      <div\n        class=\"small text-grey mb-2\"\n        x-text=\"$store.utils.t($store.utils.translations.inCurrency)\"\n      ><\/div>\n      <div\n        x-data=\"sliderselection(\n        { \n            items: priceFilterProps,\n            onSelected: onPriceSelected,\n            id: 'price-slider',\n            domLoaded: domLoaded,\n            options: { step: 100 }\n        }\n      )\"\n      ><\/div>\n\n      <!-- Sale -->\n      <h5 x-text=\"$store.utils.t($store.utils.translations.sale)\"><\/h5>\n      <div\n        x-data=\"multiplechoiceselection(\n        { \n            items: saleFilterProps.concat(lastchanceFilterProps),\n            onSelected: onSaleOrLastchanceSelected \n        }\n      )\"\n      ><\/div>\n\n      <!-- Farben -->\n      <h5 x-text=\"$store.utils.t($store.utils.translations.color)\"><\/h5>\n      <div\n        x-data=\"colorselection(\n        { \n            items: colorFilterProps,\n            onSelected: onColorSelected \n        }\n      )\"\n      ><\/div>\n\n      <!-- Gewicht -->\n      <h5\n        class=\"mb-1\"\n        x-text=\"$store.utils.t($store.utils.translations.weight)\"\n      ><\/h5>\n      <div\n        class=\"small text-grey mb-2\"\n        x-text=\"$store.utils.t($store.utils.translations.unitWeight)\"\n      ><\/div>\n      <div\n        class=\"rslider\"\n        x-data=\"sliderselection(\n        { \n            items: weightFilterProps,\n            onSelected: onWeightSelected,\n            id: 'weight-slider',\n            domLoaded: domLoaded\n        }\n      )\"\n      ><\/div>\n    <\/div>\n  <\/template>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\n      \"filter\",\n      ({\n        frameFilterProps,\n        typeFilterProps,\n        batteryFilterProps,\n        gearFilterProps,\n        priceFilterProps,\n        weightFilterProps,\n        saleFilterProps,\n        lastchanceFilterProps,\n        newbikeFilterProps,\n        countOfFilteredBikes,\n        maxBikesCount,\n        colorFilterProps,\n        selectedFilter,\n        controller,\n      }) => ({\n        template: null,\n        frameFilterProps: frameFilterProps,\n        typeFilterProps: typeFilterProps,\n        batteryFilterProps: batteryFilterProps,\n        gearFilterProps: gearFilterProps,\n        priceFilterProps: priceFilterProps,\n        weightFilterProps: weightFilterProps,\n        saleFilterProps: saleFilterProps,\n        lastchanceFilterProps: lastchanceFilterProps,\n        newbikeFilterProps: newbikeFilterProps,\n        countOfFilteredBikes: countOfFilteredBikes,\n        maxBikesCount: maxBikesCount,\n        colorFilterProps: colorFilterProps,\n        selectedFrame: {},\n        selectedFrameImage: {},\n        controller: controller,\n        showReset: true,\n        domLoaded: false,\n        domUpdate: { value: 0 },\n        selectedFilter: selectedFilter,\n        hideBattery: false,\n        init() {\n          this.setup();\n          this.$nextTick(() => {\n            this.mounted();\n            this.render();\n          });\n        },\n        setup() {\n          this.template = document.getElementById(\"filterComponent\");\n        },\n        mounted() {},\n        render() {\n          this.$el.innerHTML = this.template.innerHTML;\n\n          document.addEventListener(\"DOMContentLoaded\", () => {\n            this.domLoaded = true;\n          });\n\n          this.$watch(\"selectedFilter\", (filter) => {\n            this.hideFilterSections(filter);\n          });\n        },\n        hideFilterSections(filter) {\n          \/\/ Hide Battery\n          const hideBattery = [\"Bike\", \"S-Pedelec\"].includes(\n            filter.properties?.category?.value\n          );\n\n          if (hideBattery) {\n            this.hideBattery = true;\n          } else {\n            this.hideBattery = false;\n          }\n        },\n        onFrameSelected(property, initial = true) {\n          this.controller.filterAddPropertyAction(property, initial);\n        },\n        onTypeSelected(property, initial = true) {\n          this.controller.filterAddPropertyAction(property, initial);\n        },\n        onBatterySelected(property, initial = true) {\n          this.controller.filterAddPropertyAction(property, initial);\n        },\n        onGearSelected(property, initial = true) {\n          this.controller.filterAddPropertyAction(property, initial);\n        },\n        onPriceSelected(property, initial = true) {\n          this.controller.filterAddPropertyAction(property, initial);\n        },\n        onWeightSelected(property, initial = true) {\n          this.controller.filterAddPropertyAction(property, initial);\n        },\n        onSaleOrLastchanceSelected(property, checked, initial = true) {\n          if (checked) {\n            this.controller.filterAddPropertyAction(property, initial);\n          } else {\n            this.controller.filterRemovePropertyAction(property);\n          }\n        },\n        onColorSelected(property, initial = true) {\n          this.controller.filterAddPropertyAction(property, true);\n        },\n        resetFilter() {\n          this.showReset = false;\n          this.controller.resetFilterAction();\n\n          this.$nextTick(() => {\n            this.showReset = true;\n          });\n        },\n        isFilterActive() {\n          return !this.selectedFilter.initial;\n        },\n      })\n    );\n  });\n<\/script>\n<template id=\"lineSelectionComponent\">\n  <div class=\"bikefilter-biketyp mb-4\">\n    <ul class=\"nav nav-tabs\">\n      <template x-for=\"(item, index) in items\">\n        <li class=\"nav-item\">\n          <button\n            @click=\"selected(item, index)\"\n            class=\"nav-link\"\n            :class=\"activeItem &#038;&#038; activeItem.value === item.value ? 'active' : ''\"\n            style=\"outline: none\"\n            data-bs-toggle=\"tooltip\"\n            data-placement=\"top\"\n            :title=\"$store.utils.t(item.context.text)\"\n          >\n            <template x-if=\"item.context &#038;&#038; item.context.type == 'icon'\">\n              <img :src=\"item.context.icon\" style=\"width: 48px; height: 28px\" \/>\n            <\/template>\n            <template x-if=\"item.context &#038;&#038; item.context.type == 'text'\">\n              <span\n                style=\"width: 48px; height: 28px\"\n                x-text=\"$store.utils.t(item.context.text)\"\n              ><\/span>\n            <\/template>\n          <\/button>\n        <\/li>\n      <\/template>\n    <\/ul>\n  <\/div>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\"lineselection\", ({ items, onSelected, selectedFilter }) => ({\n      template: null,\n      items: items,\n      onSelected: onSelected,\n      selectedFilter: selectedFilter,\n      selectedIndex: -1,\n      activeItem: null,\n      init() {\n        this.setup();\n        this.$nextTick(() => {\n          this.mounted();\n          this.render();\n        });\n      },\n      setup() {\n        this.template = document.getElementById(\"lineSelectionComponent\");\n      },\n      mounted() {\n        this.$watch(\"selectedFilter\", (filter) => {\n          this.activeItem = this.findActiveItem(filter);\n        });\n      },\n      render() {\n        this.$el.innerHTML = this.template.innerHTML;\n      },\n      selected(item, index) {\n        this.selectedIndex = index;\n        this.onSelected(item, false);\n      },\n      findActiveItem(filter) {\n        if (this.items[0].propertyPath in filter.properties) {\n          let found = this.items.find((item) => {\n            return (\n              item.value === filter.properties[this.items[0].propertyPath].value\n            );\n          });\n          return found;\n        }\n      },\n    }));\n  });\n<\/script>\n<template id=\"sliderSelectionComponent\">\n\t<div :style=\"!sliderReady ? 'opacity: 0' : ''\" class=\"bikefilter-rahmenform mb-4 mt-3\">\n\t\t<div :style=\"!domLoaded &#038;&#038; !slider ? 'opacity: 0' : ''\">\n\t\t\t<input :id=\"id\" type=\"range\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/template>\n\n<script>\n\tdocument.addEventListener(\"alpine:init\", () => {\n\t\tAlpine.data(\"sliderselection\", ({ items, onSelected, id, domLoaded, options = {} }) => ({\n\t\t\ttemplate: null,\n\t\t\titems: [],\n\t\t\tonSelected: onSelected,\n\t\t\tid: id,\n\t\t\tvalue: 0,\n\t\t\tslider: items,\n\t\t\tdomLoaded: domLoaded,\n\t\t\tmin: 0,\n\t\t\tmax: 0,\n\t\t\toptions: options,\n\t\t\tinitial: true,\n\t\t\tsliderReady: false,\n\t\t\tinit() {\n\t\t\t\tthis.setup();\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.mounted();\n\t\t\t\t\tthis.render();\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetup() {\n\t\t\t\tthis.template = document.getElementById(\"sliderSelectionComponent\");\n\t\t\t},\n\t\t\tmounted() {\n\t\t\t\tif (items.length) {\n\t\t\t\t\tthis.items = items.sort((a, b) => (Number(a.value) > Number(b.value) ? 1 : -1));\n\n\t\t\t\t\tthis.min = this.items[0].value;\n\t\t\t\t\tthis.max = this.items.slice(-1)[0].value;\n\t\t\t\t\tthis.value = this.max;\n\t\t\t\t}\n\t\t\t},\n\t\t\trender() {\n\t\t\t\tthis.$el.innerHTML = this.template.innerHTML;\n\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", () => {\n\t\t\t\t\tthis.domLoaded = true;\n\t\t\t\t\tthis.initRangeSlider();\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (!this.domLoaded) {\n\t\t\t\t\t\tthis.initRangeSlider();\n\t\t\t\t\t}\n\t\t\t\t}, 400);\n\t\t\t},\n\t\t\tinitRangeSlider() {\n\t\t\t\tthis.domLoaded = true;\n\t\t\t\tthis.initial = true;\n\n\t\t\t\tconst min = this.roundMin(parseInt(this.min, 10));\n\t\t\t\tconst max = this.roundMax(parseInt(this.max, 10));\n\n\t\t\t\tthis.slider = new rSlider({\n\t\t\t\t\ttarget: \"#\" + this.id,\n\t\t\t\t\tvalues: options.values && options.values == true ? this.getAllValues() : { min: min, max: max },\n\t\t\t\t\trange: true,\n\t\t\t\t\ttooltip: true,\n\t\t\t\t\tstep: options.step ? options.step : 1,\n\t\t\t\t\tscale: false,\n\t\t\t\t\tlabels: true,\n\t\t\t\t\tvariableWidth: true,\n\t\t\t\t\tunit: \"kg\",\n\t\t\t\t\tset: [this.min, this.max],\n\t\t\t\t\tonChange: (vals) => {\n\t\t\t\t\t\t\/\/ vals is not correct so get from index\n\t\t\t\t\t\tlet min = Number(this.slider.conf.values[this.slider.values.start]);\n\t\t\t\t\t\tlet max = Number(this.slider.conf.values[this.slider.values.end]);\n\t\t\t\t\t\tthis.setValue(min, max);\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tconst sliderElements = document.querySelectorAll(\".rs-container\");\n\t\t\t\tsliderElements.forEach((element) => {\n\t\t\t\t\telement.addEventListener(\"mousedown\", () => {\n\t\t\t\t\t\tthis.initial = false;\n\t\t\t\t\t});\n\t\t\t\t\telement.addEventListener(\"touchstart\", () => {\n\t\t\t\t\t\tthis.initial = false;\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tthis.sliderReady = true;\n\t\t\t},\n\t\t\tsetValue(min, max) {\n\t\t\t\tlet range = this.items.filter((item) => {\n\t\t\t\t\tconst itemValue = Number(item.value);\n\t\t\t\t\treturn itemValue >= min && itemValue <= max;\n\t\t\t\t});\n\t\t\t\tif (range.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet maxOfRange = range.reduce((max, obj) => {\n\t\t\t\t\treturn Number(obj.value) > Number(max.value) ? obj : max;\n\t\t\t\t}, range[0]);\n\n\t\t\t\tlet minOfRange = range.reduce((min, obj) => {\n\t\t\t\t\treturn Number(obj.value) < Number(min.value) ? obj : min;\n\t\t\t\t}, range[0]);\n\n\t\t\t\tif (maxOfRange) {\n\t\t\t\t\tif (minOfRange) {\n\t\t\t\t\t\tmaxOfRange[\"min\"] = minOfRange.value;\n\t\t\t\t\t\tthis.select(maxOfRange, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect(property) {\n\t\t\t\tthis.onSelected(property, this.initial);\n\t\t\t},\n\t\t\tgetAllValues() {\n\t\t\t\treturn this.items.map((item) => Number(item.value));\n\t\t\t},\n\t\t\troundMin(num) {\n\t\t\t\tif (num > 100) {\n\t\t\t\t\treturn Math.floor(num \/ 50) * 50;\n\t\t\t\t} else {\n\t\t\t\t\treturn Math.floor(num \/ 10) * 10;\n\t\t\t\t}\n\t\t\t},\n\t\t\troundMax(num) {\n\t\t\t\tif (num > 100) {\n\t\t\t\t\treturn Math.ceil(num \/ 50) * 50;\n\t\t\t\t} else {\n\t\t\t\t\treturn Math.ceil(num \/ 10) * 10;\n\t\t\t\t}\n\t\t\t},\n\t\t}));\n\t});\n<\/script>\n<template id=\"choiceSelectionComponent\">\n  <div class=\"bikefilter-schaltung mb-4\">\n    <fieldset>\n      <template x-for=\"(item, index) in items\">\n        <div class=\"form-check\">\n          <input\n            type=\"radio\"\n            :id=\"item.propertyPath + index\"\n            name=\"drone\"\n            value=\"huey\"\n            x-on:input.change=\"onSelected(item, false)\"\n            class=\"form-check-input\"\n          \/>\n          <label\n            :for=\"item.propertyPath + index\"\n            x-text=\"$store.utils.t(item.context.text)\"\n            class=\"form-check-label\"\n          ><\/label>\n        <\/div>\n      <\/template>\n    <\/fieldset>\n  <\/div>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\"choiceselection\", ({ items, onSelected }) => ({\n      template: null,\n      items: items,\n      onSelected: onSelected,\n      value: 0,\n      init() {\n        this.setup();\n        this.$nextTick(() => {\n          this.mounted();\n          this.render();\n        });\n      },\n      setup() {\n        this.template = document.getElementById(\"choiceSelectionComponent\");\n      },\n      mounted() {},\n      render() {\n        this.$el.innerHTML = this.template.innerHTML;\n      },\n    }));\n  });\n<\/script>\n<template id=\"multipleChoiceSelectionComponent\">\n  <div class=\"bikefilter-schaltung mb-4\">\n    <fieldset>\n      <template x-for=\"(item, index) in items\">\n        <div class=\"form-check\">\n          <input\n            type=\"checkbox\"\n            :id=\"item.propertyPath + index\"\n            name=\"drone\"\n            value=\"huey\"\n            x-on:input.change=\"onSelected(item, $event.target.checked, false)\"\n            class=\"form-check-input\"\n          \/>\n          <label\n            :for=\"item.propertyPath + index\"\n            x-text=\"$store.utils.t(item.context.text)\"\n            class=\"form-check-label\"\n          ><\/label>\n        <\/div>\n      <\/template>\n    <\/fieldset>\n  <\/div>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\"multiplechoiceselection\", ({ items, onSelected }) => ({\n      template: null,\n      items: items,\n      onSelected: onSelected,\n      value: 0,\n      init() {\n        this.setup();\n        this.$nextTick(() => {\n          this.mounted();\n          this.render();\n        });\n      },\n      setup() {\n        this.template = document.getElementById(\n          \"multipleChoiceSelectionComponent\"\n        );\n      },\n      mounted() {},\n      render() {\n        this.$el.innerHTML = this.template.innerHTML;\n      },\n    }));\n  });\n<\/script>\n<template id=\"colorSelectionComponent\">\n  <div class=\"color-options mb-4\">\n    <ul class=\"ps-0\">\n      <template x-for=\"(item, index) in items\">\n        <li>\n          <button\n            @click=\"selected(item, index, false)\"\n            :class=\"'btn filter-color-' + item.value.toLowerCase() + ' ' + ((selectedIndex == index) ? 'active' : '')\"\n            data-bs-toggle=\"tooltip\"\n            data-placement=\"top\"\n            :title=\"item.description\"\n          ><\/button>\n        <\/li>\n      <\/template>\n    <\/ul>\n  <\/div>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\"colorselection\", ({ items, onSelected }) => ({\n      template: null,\n      items: items,\n      onSelected: onSelected,\n      selectedIndex: -1,\n      init() {\n        this.setup();\n        this.$nextTick(() => {\n          this.mounted();\n          this.render();\n        });\n      },\n      setup() {\n        this.template = document.getElementById(\"colorSelectionComponent\");\n      },\n      mounted() {},\n      render() {\n        this.$el.innerHTML = this.template.innerHTML;\n      },\n      selected(item, index, initial) {\n        this.selectedIndex = index;\n        this.onSelected(item, initial);\n      },\n    }));\n  });\n<\/script>\n<template id=\"bikefinderComponent\">\n  <div class=\"bikefinder\">\n    <div class=\"row\">\n      <div class=\"col-md-4 col-lg-3 bikefinder-filter-col\">\n        <button\n          class=\"btn btn-primary filter-toggle d-md-none mb-3\"\n          data-show=\"Filter anzeigen\"\n          data-hide=\"Filter ausblenden\"\n          x-text=\"$store.utils.t($store.utils.translations.showFilter)\"\n        ><\/button>\n\n        <div\n          class=\"bikefinder-filter-content\"\n          x-data=\"filter({ \n            frameFilterProps: uniquePropFrames(), \n            typeFilterProps: model.uniquePropTypes(), \n            batteryFilterProps: uniquePropBatteries(), \n            gearFilterProps: uniquePropGears(),\n            priceFilterProps: uniquePropPrices(),\n            weightFilterProps: uniquePropWeights(),\n            saleFilterProps: model.uniquePropSales(),\n            lastchanceFilterProps: model.uniquePropLastchance(),\n            newbikeFilterProps: model.uniquePropNewbike(),\n            countOfFilteredBikes: state.countOfFilteredBikes,\n            maxBikesCount: state.maxBikesCount,\n            colorFilterProps: uniquePropColors(),\n            selectedFilter: state.selectedFilter,\n            controller: controller\n          })\"\n        ><\/div>\n      <\/div>\n      <div class=\"col-md-8 col-lg-9\">\n        <div class=\"dropdown text-end dropdown-underline\">\n          <button\n            class=\"btn btn-secondary dropdown-toggle p-0 pb-1 me-3 me-md-4\"\n            type=\"button\"\n            id=\"dropdownSort\"\n            data-bs-toggle=\"dropdown\"\n            aria-haspopup=\"true\"\n            aria-expanded=\"false\"\n            x-text=\"$store.utils.t($store.utils.translations.sortBy)\"\n          ><\/button>\n\n          <div\n            class=\"dropdown-menu dropdown-menu-end dropdown-sort\"\n            aria-labelledby=\"dropdownSort\"\n          >\n            <a\n              @click=\"controller.sortNewestAlphaAction()\"\n              class=\"dropdown-item\"\n              :class=\"state.currentSort == 'newestalpha' ? 'active' : ''\"\n              id=\"sort-newest-alpha\"\n              x-text=\"$store.utils.t($store.utils.translations.sortByNewestAlpha)\"\n            ><\/a>\n            <a\n              @click=\"controller.sortAlphaAction()\"\n              class=\"dropdown-item\"\n              :class=\"state.currentSort == 'alpha' ? 'active' : ''\"\n              id=\"sort-alpha\"\n              x-text=\"$store.utils.t($store.utils.translations.sortByAlpha)\"\n            ><\/a>\n            <a\n              @click=\"controller.sortPriceAction()\"\n              class=\"dropdown-item\"\n              :class=\"state.currentSort == 'priceASC' ? 'active' : 'peter'\"\n              id=\"sort-price-asc\"\n              x-text=\"$store.utils.t($store.utils.translations.sortByAsc)\"\n            ><\/a>\n            <a\n              @click=\"controller.sortPriceAction(true)\"\n              class=\"dropdown-item\"\n              :class=\"state.currentSort == 'priceDESC' ? 'active' : 'peter'\"\n              id=\"sort-price-desc\"\n              x-text=\"$store.utils.t($store.utils.translations.sortByDesc)\"\n            ><\/a>\n          <\/div>\n        <\/div>\n        <template x-if=\"showBikeSort &#038;&#038; initialReady\">\n          <div\n            x-data=\"{ bikesByGenerations: state.filteredBikesGroupedByGenerations  }\"\n            class=\"bikefinder-bikes p-md-3 p-lg-4\"\n          >\n            <div\n              x-show=\"state.countOfFilteredBikes.value == 0\"\n              class=\"no-results\"\n            >\n              <span\n                x-text=\"$store.utils.t($store.utils.translations.noResults)\"\n              ><\/span>\n            <\/div>\n            <div class=\"bikefinder-grid\">\n              <template x-for=\"(value, index) in bikesByGenerations\">\n                <div\n                  x-data=\"biketeaser({ frames: bikesByGenerations[index], framesAsGenerations: true, framesMeta: model.frameFilterModel })\"\n                ><\/div>\n              <\/template>\n            <\/div>\n          <\/div>\n        <\/template>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/template>\n\n<script>\n  document.addEventListener(\"alpine:init\", () => {\n    Alpine.data(\n      \"bikefinder\",\n      ({\n        blockId,\n        model,\n        store,\n        state,\n        utils,\n        controller,\n        filterParamsResolver,\n      }) => ({\n        blockId: blockId,\n        model: model,\n        store: store,\n        state: state,\n        utils: utils,\n        controller: controller,\n        filterParamsResolver: filterParamsResolver,\n        showBikeSort: false,\n        initialReady: false,\n        init() {\n          this.setup();\n          this.$nextTick(() => {\n            this.mounted();\n            this.render();\n          });\n        },\n        setup() {\n          this.template = document.getElementById(\"bikefinderComponent\");\n        },\n        mounted() {\n          this.model.variantsToUniqueFramesAndFlattedVariants(\n            this.model.modules[this.blockId].bikes,\n            this.blockId\n          );\n\n          this.$watch(\"state.selectedFilter\", (value) => {\n            this.filter(value);\n          });\n\n          this.$watch(\"state.filteredBikesGroupedByGenerations\", (grouped) => {\n            this.reactiveBikeSort();\n          });\n\n          setTimeout(() => {\n            const { filters } = this.filterParamsResolver.defaultParams;\n            Object.keys(filters).forEach((key) => {\n              this.filterByParams(key, filters[key], true);\n            });\n            \/\/ wait to set all default filter properties - for resetFilterAction() -- to prevent watch updates on state.selectedFilter\n            this.state.defaultFilterProperties = JSON.stringify(\n              this.state.selectedFilter.properties\n            );\n\n            this.initialReady = true;\n          }, 1500);\n        },\n        render() {\n          this.$el.innerHTML = this.template.innerHTML;\n        },\n        filterByParams(key, value, initial) {\n          const propsMap = {\n            category: {\n              getProps: () => this.model.uniquePropTypes(),\n              keyName: \"value\",\n            },\n            primary_basecolour: {\n              getProps: () => this.uniquePropColors(),\n              keyName: \"value\",\n            },\n            frame_type: {\n              getProps: () => this.uniquePropFrames(),\n              keyName: \"value\",\n            },\n            \"bike_specifics.gear.gear_type\": {\n              getProps: () => this.uniquePropGears(),\n              keyName: \"value\",\n            },\n            \"ebike_specifics.battery_range.battery_capacity\": {\n              getProps: () => this.uniquePropBatteries(),\n              keyName: \"value\",\n            },\n          };\n\n          if (key in propsMap) {\n            const mapResult = propsMap[key];\n            const prop = mapResult\n              .getProps()\n              .find((prop) => prop[mapResult[\"keyName\"]] == value);\n            if (prop) {\n              this.controller.filterAddPropertyAction(prop, initial);\n            }\n\n            this.state.selectedFilter.initial = false;\n          }\n        },\n\n        filter(value) {\n          this.model.groupedFrames[this.blockId].forEach((group) => {\n            group.forEach((frame) => {\n              frame.filter(value);\n            });\n          });\n\n          this.state.filteredBikes =\n            this.controller.getOnlyBikesWhereFramesWithVariants(\n              this.model.groupedFrames[this.blockId]\n            );\n\n          const generations = this.controller.getGenerations(\n            this.state.filteredBikes\n          );\n          this.state.filteredBikesGroupedByGenerations = generations;\n\n          const countOfBikes = this.controller.calculateCountOfFilteredBikes(\n            this.blockId\n          );\n          if (this.state.selectedFilter.initial) {\n            this.state.maxBikesCount.value = countOfBikes;\n          }\n\n          this.state.countOfFilteredBikes.value = countOfBikes;\n          this.controller.sortNewestAlphaAction();\n\n          \/\/ Sync Filter\n          this.filterParamsResolver.setFiltersParams(\n            this.filterParamsResolver.getActiveFilters()\n          );\n        },\n        reactiveBikeSort() {\n          this.showBikeSort = false;\n          this.$nextTick(() => {\n            this.showBikeSort = true;\n          });\n        },\n        uniquePropFrames() {\n          return this.model.uniquePropFrames(this.blockId);\n        },\n        uniquePropBatteries() {\n          return this.model.uniquePropBatteries(this.blockId);\n        },\n        uniquePropGears() {\n          return this.model.uniquePropGears(this.blockId);\n        },\n        uniquePropPrices() {\n          return this.model.uniquePropPrices(this.blockId);\n        },\n        uniquePropWeights() {\n          return this.model.uniquePropWeights(this.blockId);\n        },\n        uniquePropColors() {\n          return this.model.uniquePropColors(this.blockId);\n        },\n      })\n    );\n  });\n<\/script>\n\n<style type=\"text\/css\">\n  body.modal-open {\n    padding-right: 0px !important;\n    overflow: auto !important;\n  }\n\n  body {\n    padding-right: 0 !important;\n  }\n\n  body.modal-open header,\n  body.modal-open .content {\n    padding-right: 0 !important;\n  }\n<\/style>\n<div x-data='bikefinder({ \n    blockId: \"Z1PkW47\", \n    model: $store.bikefinderModel, \n    store: $store.bikefinderStore, \n    state: $store.bikefinderState, \n    utils: $store.utils, \n    controller: $store.bikefinderController,\n    filterParamsResolver: $store.bikefinderFilterParamsResolver })'>\n<\/div>\n<\/div>\n<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div><\/div>\n\n<div class=\"lazyblock-nncontainer-Z7KHy1 wp-block-lazyblock-nncontainer\"><div class=\"section-standard\">\r\n  <div class=\"container\" id=\"container-Z7KHy1\">\r\n    <div class=\"row\">\r\n      <div class=\"col py-4 py-lg-5\">\r\n        <div class=\"lazyblock-inner-blocks\">\n\n<p>Ein Damenfahrrad mit tiefem Einstieg von&nbsp;<strong>Diamant<\/strong>&nbsp;steht f\u00fcr Komfort, Sicherheit und Tradition. Seit 1885 fertigen wir in Hartmannsdorf Fahrr\u00e4der, die durch langlebige Materialien, moderne Technik und zeitloses Design \u00fcberzeugen. Der tiefe Einstieg erleichtert auch schon seit \u00fcber 100 Jahren das Auf- und Absteigen und sorgt f\u00fcr ein entspanntes Fahrgef\u00fchl &#8211; ideal f\u00fcr den Alltag in der Stadt, entspannte Touren oder den Weg zur Arbeit.<\/p>\n\n\n\n<p>Unsere Damenfahrr\u00e4der sind so gebaut, dass sie dich zuverl\u00e4ssig begleiten: mit stabilen Rahmen, kraftvollen Scheibenbremsen und dynamobetriebenem Licht f\u00fcr maximale Sicherheit bei Tag und Nacht. Je nach Anspruch findest du bei Diamant das passende Modell, vom leichten City Bike \u00fcber vielseitige Trekking\u00ae-R\u00e4der bis hin zu modernen E-Bikes mit tiefem Einstieg, die Steigungen spielend meistern.<\/p>\n\n\n\n<p>Ein Diamant Damenrad ist mehr als nur ein Fahrrad: Es ist ein St\u00fcck deutsche Fahrradkultur, das dich jahrelang begleitet. Erlebe die perfekte Kombination aus Komfort und Qualit\u00e4t, online entdecken oder beim Fachh\u00e4ndler vor Ort Probe fahren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Warum ein Tiefeinsteiger die richtige Wahl sein kann<\/strong><\/h3>\n\n\n\n<p>Ein&nbsp;<a href=\"https:\/\/www.diamantrad.com\/de-DE\/bikes\/lowstep\/\" title=\"Lowstep\">Tiefeinsteiger-Fahrrad<\/a>&nbsp;\u00fcberzeugt durch Komfort und Sicherheit, nicht nur f\u00fcr Frauen, sondern f\u00fcr alle, die bequem auf- und absteigen m\u00f6chten. Der tiefe Einstieg erleichtert das Aufsitzen im Alltag, egal ob du in der Stadt pendelst, mit Gep\u00e4ck unterwegs bist oder spontan anh\u00e4ltst. Gerade im urbanen Verkehr oder beim Stop-and-Go vor Ampeln bringt ein Tiefeinsteiger sp\u00fcrbare Vorteile. Au\u00dferdem sorgt die Rahmenform f\u00fcr ein souver\u00e4nes Fahrgef\u00fchl: Du sitzt aufrecht, beh\u00e4ltst die \u00dcbersicht und kannst jederzeit beide F\u00fc\u00dfe schnell auf den Boden stellen. Diamant kombiniert diesen Komfort mit modernen Designs und hochwertigen Komponenten. So musst du dich nicht zwischen Funktionalit\u00e4t und Stil entscheiden. Ein&nbsp;<strong>Damenfahrrad mit tiefem Einstieg<\/strong>&nbsp;ist damit l\u00e4ngst kein klassisches \u201eDamenrad\u201c mehr, sondern eine smarte Wahl f\u00fcr alle, die Wert auf Flexibilit\u00e4t und Sicherheit legen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ zu Damenr\u00e4dern<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Was ist der Vorteil eines Damenfahrrads mit tiefem Einstieg?<\/strong><\/h4>\n\n\n\n<p>Ein Damenfahrrad mit tiefem Einstieg macht das Auf- und Absteigen besonders bequem und sicher. Gerade in der Stadt, beim Pendeln oder mit Gep\u00e4ck ist das ein echter Vorteil. Diamant verbindet diese Alltagstauglichkeit mit moderner Optik und stabiler Rahmengeometrie.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>F\u00fcr wen eignet sich ein Fahrrad mit tiefem Einstieg besonders?<\/strong><\/h4>\n\n\n\n<p>Ein Fahrrad mit tiefem Einstieg eignet sich f\u00fcr alle, die beim Auf- und Absteigen Wert auf Komfort legen &#8211; vom Stadtpendeln bis zu entspannten und sportlichen Touren. Viele Frauen, \u00e4ltere Menschen oder auch Eltern mit Kindersitz profitieren von der unkomplizierten Handhabung. Diamant-Bikes vereinen dabei Funktionalit\u00e4t mit Stil.<\/p>\n\n\n\n<p><strong>Ist ein Damenfahrrad mit tiefem Einstieg auch sportlich genug?<\/strong><\/p>\n\n\n\n<p>Ja, moderne Damenfahrr\u00e4der mit tiefem Einstieg sind nicht nur praktisch, sondern auch sportlich. Die stabilen Rahmen von Diamant bieten Dynamik und Fahrspa\u00df, egal ob beim t\u00e4glichen Pendeln oder auf l\u00e4ngeren Touren. Komfort und Sportlichkeit schlie\u00dfen sich nicht aus.<\/p>\n\n\n\n<p>Die Geometrie unterscheidet sich bei Diamant zwischen den Rahmenformen nicht. Die Entscheidung f\u00fcr eine sportliche oder komfortablere Fahrweise triffst du einerseits mit dem Modell und andererseits dadurch, wie du die ergonomischen Kontaktpunkte individuell einstellst. So, wie du auch im Auto deinen Sitz eher aufrecht oder geneigt oder eher hoch oder tief einstellen kannst.<\/p>\n\n\n\n<p><strong>Warum bietet Diamant keine klassischen \u201eDamenr\u00e4der\u201c mehr an?<\/strong><\/p>\n\n\n\n<p>Weil moderne Fahrr\u00e4der nicht nach Geschlecht, sondern nach Komfort und Einsatzbereich gedacht sind. Diamant entwickelt Rahmen so, dass sich alle ergonomischen Komponenten individuell einstellen lassen &#8211; passend f\u00fcr alle, die bequem und flexibel fahren wollen. So wird das Rad nach der Person und ihrer Gr\u00f6\u00dfe gew\u00e4hlt, nicht nach dem Etikett.<\/p>\n\n\n\n<p><strong>Ist ein Fahrrad mit tiefem Einstieg weniger stabil als ein Rad mit Oberrohr?<\/strong><\/p>\n\n\n\n<p>Nein, moderne Rahmen sind so konstruiert, dass sie auch mit tiefem Einstieg robust und langlebig bleiben. Diamant verwendet hochwertige Materialien und pr\u00e4zise Verarbeitung, damit Komfort und Stabilit\u00e4t in jeder Fahrsituation gew\u00e4hrleistet sind<strong>.<\/strong><\/p>\n\n\n\n<p><strong>Welche Unterschiede gibt es zwischen Midstep und Lowstep bei Diamant?<\/strong><\/p>\n\n\n\n<p>\u201eMidstep\u201c beschreibt den mittleren Einstieg, \u201eLowstep\u201c den besonders tiefen Einstieg. Beide Varianten erleichtern das Auf- und Absteigen, unterscheiden sich aber im Komfortlevel. Midstep wirkt sportlicher, Lowstep besonders bequem. Bei Diamant kannst du beide Formen passend zu deinem Alltag w\u00e4hlen.<\/p>\n\n\n\n<p><strong>Ist ein Damenfahrrad mit tiefem Einstieg auch f\u00fcr l\u00e4ngere Touren geeignet?<\/strong><\/p>\n\n\n\n<p>Ja, Fahrr\u00e4der mit tiefem Einstieg sind genauso f\u00fcr l\u00e4ngere Touren geeignet wie Modelle mit Oberrohr. Diamant setzt auf durchdachte Geometrien, stabile Rahmen und komfortable Details wie ergonomische S\u00e4ttel oder passende \u00dcbersetzungen &#8211; perfekt f\u00fcr Stadt und Trekking\u00ae. Das Oberrohr hat einen Vorteil: Du kannst daran noch Zubeh\u00f6r befestigen. Das Accessory Bar, das Diamant als optionales Oberrohr f\u00fcr einzelne E-Bike-Modelle anbietet, maximiert diese M\u00f6glichkeiten.<\/p>\n\n\n\n<p><strong>Wie unterscheiden sich Damenfahrr\u00e4der mit tiefem Einstieg im Design?<\/strong><\/p>\n\n\n\n<p>Es gibt keine wesentlichen Unterschiede im Design. An einzelnen Modellen bieten wir im Lowstep und Midstep zus\u00e4tzliche oder andere Farbvarianten an, die allenfalls auch auf vorherrschende Farbpr\u00e4ferenzen unterschiedlicher Geschlechter R\u00fccksicht nehmen. Die Rahmenform ist dabei nicht geschlechtsspezifisch, sondern ein Komfort-Feature; die Farbauswahl bringt die pers\u00f6nliche Note.<\/p>\n\n\n\n<p><strong>Worauf sollten Frauen beim Sattel achten?<\/strong><\/p>\n\n\n\n<p>Die S\u00e4ttel, die Diamant ab Werk einsetzt, funktionieren in der korrekten Sitzposition sehr gut f\u00fcr alle Geschlechtre. Frauen haben oft ein breiteres Becken, weshalb breitere S\u00e4ttel mit passender Form manchen Frauen mehr Komfort bieten. Viele Diamant-H\u00e4ndler messen die Sitzknochen und empfehlen die ideale Sattelbreite. Bei Druck im Weichteilbereich sind Modelle mit Aussparung oder kurzer Nase eine gute Wahl.<\/p>\n\n\n\n<p><strong>Welche Vorteile bietet ein tiefer Einstieg beim E-Bike?<\/strong><\/p>\n\n\n\n<p>Gerade bei E-Bikes mit Akku und Motor macht der tiefe Einstieg das Handling einfacher. Auf- und Absteigen gelingt m\u00fchelos, selbst mit Gep\u00e4ck oder Kindersitz. Diamant E-Bikes kombinieren diese Alltagstauglichkeit mit Always-On-Licht, starken Bremsen und einer sportlichen Fahrweise.<\/p>\n\n\n\n<p><strong>Ist ein Fahrrad mit tiefem Einstieg auch f\u00fcr M\u00e4nner geeignet?<\/strong><\/p>\n\n\n\n<p>Ja, ein tiefer Einstieg ist nicht geschlechtsspezifisch, sondern eine Frage des Komforts. Viele M\u00e4nner entscheiden sich ebenfalls f\u00fcr Lowstep- oder Midstep-Rahmen, wenn sie bequem und flexibel unterwegs sein wollen. Diamant entwickelt diese Rahmen bewusst f\u00fcr alle.<\/p>\n\n<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div><\/div>\n\n<div class=\"lazyblock-nncontainer-CsyG5 wp-block-lazyblock-nncontainer\"><div class=\"section-dark\">\r\n  <div class=\"container\" id=\"container-CsyG5\">\r\n    <div class=\"row\">\r\n      <div class=\"col py-4 py-lg-5\">\r\n        <div class=\"lazyblock-inner-blocks\">\n\n<h2 class=\"wp-block-heading\">Mythos &#8220;Damenrad&#8221;<\/h2>\n\n<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div><\/div>\n\n<div class=\"lazyblock-nncontainer-2ldAbP wp-block-lazyblock-nncontainer\"><div class=\"section-standard\">\r\n  <div class=\"container\" id=\"container-2ldAbP\">\r\n    <div class=\"row\">\r\n      <div class=\"col py-4 py-lg-5\">\r\n        <div class=\"lazyblock-inner-blocks\">\n\n<h3 class=\"wp-block-heading\">Brauchen Frauen andere R\u00e4der?<\/h3>\n\n\n\n<p>Die Anatomie von Frauen unterscheidet sich von M\u00e4nnern. M\u00e4nner sind im Durchschnitt 15% schwerer und 10-15cm gr\u00f6\u00dfer. Wichtig sind aber andere Unterschiede. Frauen haben oft breitere und rundere Becken, die auch leicht nach vorne gekippt sind. Daf\u00fcr haben sie tendenziell schmalere Schultern. Bei gleicher K\u00f6rpergr\u00f6\u00dfe sind ihre Arme und Beine etwa 10% k\u00fcrzer, aber ihr Rumpf ist 2-5% l\u00e4nger.&nbsp;<\/p>\n\n\n\n<p>Es macht also Sinn, dass Frauen ihre R\u00e4der anders auf sich einstellen als M\u00e4nner. Eine 174cm gro\u00dfe Frau konfiguriert ihr Rad anders als ein 174cm gro\u00dfer Mann. Trotzdem brauchen Frauen keine anderen R\u00e4der. Die vielen Einstellm\u00f6glichkeiten an modernen R\u00e4dern machen es m\u00f6glich, dass beide das gleiche Fahrrad kaufen. Wie du dein Rad auf deinen individuellen K\u00f6rperbau einstellen kannst, erkl\u00e4ren wir weiter unten.&nbsp;<\/p>\n\n\n\n<p>Frauen haben auch eine andere Physis. Zwei Beispiele rei\u00dfen das Thema nur an: Ihr Skelett ist filigraner und ihre Herzen sind tendenziell leichter. Solche Unterschiede spielen im Leistungssport eine gro\u00dfe Rolle. Sie haben Einfluss auf das Trainingsprogramm. Sie \u00abbegrenzen\u00bb bei gleichem Trainingsaufwand die potenzielle Ausdauerleistung und die Maximalkraft. Im Kampf um Millisekunden und Medaillen k\u00f6nnen optimal abgestimmte Sportger\u00e4te darauf R\u00fccksicht nehmen. Beim typischen Einsatzbereich von Fahrr\u00e4dern zum Pendeln, in der Stadt und beim Trekking\u00ae spielt das keine Rolle.&nbsp;<\/p>\n\n\n\n<p>Wir verkaufen also keine \u201eDamenr\u00e4der\u201c, sondern R\u00e4der mit mittlerem und tiefem Einstieg. \u201eMidstep\u201c und \u201eLowstep\u201c sind die modernen Bezeichnungen. Sie beschreiben den tats\u00e4chlichen Unterschied.&nbsp;&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Welche Rahmengr\u00f6\u00dfe sollten Frauen w\u00e4hlen?<\/h3>\n\n\n\n<p>Diamant bietet jede Rahmenform in 3-4 Gr\u00f6\u00dfen an. Beim gleichen Modell unterscheidet sich die Geometrie unserer R\u00e4der selbst im Millimeterbereich nur vereinzelt. Das hei\u00dft: die Ma\u00dfe f\u00fcr ein Rad in Gr\u00f6\u00dfe L sind identisch, unabh\u00e4ngig davon, ob es einen hohen oder mittleren Einstieg hat. Jede Gr\u00f6\u00dfe hat eine Spannbreite von etwa 5%, also z.B. von 174cm bis 187cm K\u00f6rpergr\u00f6\u00dfe und 81-86cm Innenbeinl\u00e4nge in Gr\u00f6\u00dfe L.&nbsp;<\/p>\n\n\n\n<p>Benachbarte Gr\u00f6\u00dfen \u00fcberlappen sich. Ein 174cm gro\u00dfer Mensch mit 81mm Innenbeinl\u00e4nge kann daher zwischen Gr\u00f6\u00dfe M und L w\u00e4hlen. Zwei 174cm gro\u00dfe Menschen treffen eventuell zwei unterschiedliche Entscheidungen. Vielleicht wollen sie mehr oder weniger aufrecht sitzen. Vielleicht sind ihre Arme oder Beine l\u00e4nger oder k\u00fcrzer. Das ist auch bei zwei Herren so. Die anatomischen Abweichungen von Frauen und M\u00e4nnern sind zwar da, aber am Ende gibt es sie auch innerhalb eines Geschlechts. Auf diese Varianz sind unsere R\u00e4der von Beginn an ausgelegt.&nbsp;<\/p>\n\n\n\n<p>Frauen zum Beispiel haben oft k\u00fcrzere Arme und Beine. Sie w\u00fcrden meist eher die kleinere Gr\u00f6\u00dfe w\u00e4hlen, wenn sie sich im \u00dcbergangsbereich von zwei Gr\u00f6\u00dfen befinden. F\u00fcr individuelle Entscheidungen empfehlen wir immer ein Bike Fitting.<\/p>\n\n<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div><\/div>\n\n\n<div class=\"wp-block-cover is-light\"><img data-dominant-color=\"b37d81\" data-has-transparency=\"false\" loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1707\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" class=\"wp-block-cover__image-background wp-image-53441 size-full not-transparent\" alt=\"Di 25 mahon lifestyle\" src=\"https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I7393_300dpi-scaled.avif\" style=\"--dominant-color: #b37d81; object-position:44% 59%\" data-object-fit=\"cover\" data-object-position=\"44% 59%\" srcset=\"https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I7393_300dpi-scaled.avif 2560w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I7393_300dpi-300x200.avif 300w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I7393_300dpi-1024x683.avif 1024w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I7393_300dpi-768x512.avif 768w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I7393_300dpi-1536x1024.avif 1536w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_25_Mahon_Lifestyle_67I7393_300dpi-2048x1365.avif 2048w\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-0 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-constrained wp-block-cover-is-layout-constrained\">\n<p class=\"has-text-align-center has-large-font-size\"><\/p>\n<\/div><\/div>\n\n\n<div class=\"lazyblock-nncontainer-11NXgy wp-block-lazyblock-nncontainer\"><div class=\"section-standard\">\r\n  <div class=\"container\" id=\"container-11NXgy\">\r\n    <div class=\"row\">\r\n      <div class=\"col py-4 py-lg-5\">\r\n        <div class=\"lazyblock-inner-blocks\">\n\n<h3 class=\"wp-block-heading\">26\u201d-Laufr\u00e4der vs. 28\u201d-Laufr\u00e4der: Mythos Damenrad<\/h3>\n\n\n\n<p>Das historische \u00abDamenrad\u00bb zeichnete sich auch durch kleinere 26\u201d-Laufr\u00e4der aus. Hier war die Idee simpel: Frauen sind kleiner, also m\u00fcssen sie n\u00e4her am Boden sein. Diese Idee war allerdings genauso falsch, wie sie einfach war. Sie wurde genauso auf Mountainbikes angewendet, die f\u00fcr schnelle Trail-Fahrten einen m\u00f6glichst tiefen Schwerpunkt brauchen. Dort haben Laufr\u00e4der mit 27.5\u201d und 29\u201d die traditionell kleineren Laufr\u00e4der inzwischen verdr\u00e4ngt.&nbsp;<\/p>\n\n\n\n<p>Gr\u00f6\u00dfere R\u00e4der bieten mehr Komfort. Sie rollen \u00fcber Schlagl\u00f6cher besser hinweg und fahren besser \u00fcber Bordsteine. Tretlager und Hinterradachse haben einen gr\u00f6\u00dferen Abstand zueinander \u2013 Vorderr\u00e4der heben an steilen Anstiegen dadurch weniger schnell ab. Bei Alltagsr\u00e4dern, die oft mit Gep\u00e4ck gefahren werden, hilft das der Sicherheit.&nbsp;<\/p>\n\n\n\n<p>Die K\u00f6rpergr\u00f6\u00dfe der meisten Erwachsenen hat aber keinen Einfluss auf das Laufrad. Erst sehr kleine Menschen (ca. unter 152cm K\u00f6rpergr\u00f6\u00dfe\/75cm Innenbeinl\u00e4nge) profitieren mitunter von kleineren Laufr\u00e4dern. Auf ihre Bed\u00fcrfnisse abgestimmte Geometrien k\u00f6nnten n\u00e4mlich oft keine gr\u00f6\u00dferen Laufr\u00e4der mehr fassen.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wie k\u00f6nnen Frauen ein Rad auf sich einstellen?<\/h3>\n\n\n\n<p>Das Fahrrad hat sechs Bauteile, mit denen Frauen ihr pers\u00f6nliches Rad auf sich optimieren k\u00f6nnen. Dies sind der Lenker (Form und Breite), die Schaltgriffe (Position), Vorbau (L\u00e4nge und Winkel), Sattel (Position, Breite und Form), Kurbell\u00e4nge (L\u00e4nge) und \u00dcbersetzung.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Lenker<\/h4>\n\n\n\n<p>Unterschiedlich breite Lenker passen zu unterschiedlich breiten Schultern. Das spielt bei City- und Trekking\u00ae-Bikes meist eine geringe Rolle. Deren aufrechte Sitzposition nimmt Druck von der Schulter. Noch aufrechter sitzt man bei einem leicht nach hinten gebogenem Lenker.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Schaltgriffe<\/h4>\n\n\n\n<p>Da Frauen meist kleiner sind, haben sie meist auch kleinere H\u00e4nde. Bremsgriffe und Schalthebel werden aber nur in einer Einheitsgr\u00f6\u00dfe produziert. Die Ausrichtung der Griffe und Hebel am Lenker kannst du variabel einstellen; bei sehr kleinen H\u00e4nden kann das hilfreich sein.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Vorbau<\/h4>\n\n\n\n<p>Vorbauten gibt es in unterschiedlichen L\u00e4ngen und in unterschiedlichen Winkeln. Beide zusammen beeinflussen, wie aufrecht oder gestreckt man sitzt, aber auch wie direkt sich das Rad steuert. Schon kleine \u00c4nderungen von z.B. 10mm k\u00f6nnen wirkungsvoll sein.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Sattel<\/h4>\n\n\n\n<p>Der Sattel ist eines der flexibelsten Teile am Rad. Nicht nur die H\u00f6he, sondern auch die Neigung und die horizontale Verschiebung zum Sattel k\u00f6nnen angepasst werden. Viele Frauen, aber nicht alle, kommen besser mit breiteren S\u00e4tteln klar. Gute H\u00e4ndler k\u00f6nnen die optimale Sattelbreite ermitteln, indem sie die Druckpunkte der Beckenknochen vermessen. Frauen, die viel Druck in ihren Weichteilen versp\u00fcren, profitieren auch von S\u00e4tteln mit Aussparung oder kurzer Nase.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Kurbell\u00e4nge<\/h4>\n\n\n\n<p>Kurbelarme k\u00f6nnen unterschiedliche L\u00e4ngen haben. Zu lange Kurbeln sind nicht effizient. Auf die Dauer k\u00f6nnen sie auch Kniesch\u00e4den verursachen. Manche Frauen bevorzugen daher Kurbeln, die nur 165mm lang sind oder weniger.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u00dcbersetzung<\/h4>\n\n\n\n<p>Das Verh\u00e4ltnis der gr\u00f6\u00dften und kleinsten Zahnkr\u00e4nze und Kettenbl\u00e4tter zueinander bestimmt die \u00dcbersetzung. Aufgrund ihrer oft geringeren Maximalkraft profitieren Frauen davon, weniger \u00abdicke\u00bb G\u00e4nge zu treten, also f\u00fcr die gleiche Geschwindigkeit eine h\u00f6here Trittfrequenz zu fahren. 1x-Schaltungen wie bei Diamant optimieren auf kurze Gangspr\u00fcnge und verzichten auf die G\u00e4nge, die am schwersten zu treten sind.<\/p>\n\n<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div><\/div>\n\n\n<div class=\"wp-block-cover is-light\"><img data-dominant-color=\"a57b81\" data-has-transparency=\"false\" loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1707\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" class=\"wp-block-cover__image-background wp-image-55339 size-full not-transparent\" alt=\"My 24 zing trip lifestyle\" src=\"https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_24_Zing_Trip_Lifestyle_67I5238_300dpi-scaled.avif\" style=\"--dominant-color: #a57b81; object-position:58% 39%\" data-object-fit=\"cover\" data-object-position=\"58% 39%\" srcset=\"https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_24_Zing_Trip_Lifestyle_67I5238_300dpi-scaled.avif 2560w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_24_Zing_Trip_Lifestyle_67I5238_300dpi-300x200.avif 300w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_24_Zing_Trip_Lifestyle_67I5238_300dpi-1024x683.avif 1024w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_24_Zing_Trip_Lifestyle_67I5238_300dpi-768x512.avif 768w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_24_Zing_Trip_Lifestyle_67I5238_300dpi-1536x1024.avif 1536w, https:\/\/www.diamantrad.com\/wp-content\/uploads\/2025\/03\/DI_24_Zing_Trip_Lifestyle_67I5238_300dpi-2048x1365.avif 2048w\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-0 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-constrained wp-block-cover-is-layout-constrained\">\n<p class=\"has-text-align-center has-large-font-size\"><\/p>\n<\/div><\/div>\n\n\n<div class=\"lazyblock-nncontainer-21DlnL wp-block-lazyblock-nncontainer\"><div class=\"section-standard\">\r\n  <div class=\"container\" id=\"container-21DlnL\">\r\n    <div class=\"row\">\r\n      <div class=\"col py-4 py-lg-5\">\r\n        <div class=\"lazyblock-inner-blocks\">\n\n<h3 class=\"wp-block-heading\">Das \u00abDamenrad\u00bb und der Korb<\/h3>\n\n\n\n<p>K\u00f6rbe sind praktisch, um Sachen schnell zu verstauen. K\u00f6rbe brauchen einen Tr\u00e4ger. Daf\u00fcr gibt es drei Optionen. Alle diese Optionen sind unabh\u00e4ngig von der Rahmenform. Den passenden Korb f\u00fcr dein Fahrrad findest du sicher im Gespr\u00e4ch mit unseren Fachh\u00e4ndlern.&nbsp;<\/p>\n\n\n\n<p>Entweder werden sie mittels Adapter am Gep\u00e4cktr\u00e4ger befestigt. Systemgep\u00e4cktr\u00e4ger von Racktime und Basil (MIK) machen das besonders einfach. Hier siehst du das Gep\u00e4ck zwar nicht. Daf\u00fcr beeinflusst es auch am wenigsten das Lenkverhalten des Fahrrades.&nbsp;<\/p>\n\n\n\n<p>Oder sie werden an einen Frontgep\u00e4cktr\u00e4ger angebracht. Das Juna+ E-Bike haben wir ab Werk mit einem Frontgep\u00e4cktr\u00e4ger ausger\u00fcstet. An unseren anderen R\u00e4dern mit tiefem oder mittlerem Einstieg empfehlen wir das nicht.&nbsp;<\/p>\n\n\n\n<p>Die dritte Option ist eine Befestigung am Lenker. Bei E-Bikes ist hier oft das Display im Weg. Spezielle Lenkerhalterungen f\u00fcr E-Bikes l\u00f6sen auch dieses Problem. Achte darauf, Lenkerk\u00f6rbe nicht zu sehr zu beladen. Ihr relativ hoher Schwerpunkt kann die Lenkf\u00e4higkeit ver\u00e4ndern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Welches ist also das beste Damenrad?<\/h3>\n\n\n\n<p>Das beste Damenrad ist das, was du auf deine pers\u00f6nlichen Bed\u00fcrfnisse abstimmst. Wir wissen, dass viele Frauen schon eher zu mittleren und tiefen Einstiegen neigen. Wir wissen auch, dass viele Frauen uns nach bunten R\u00e4dern fragen. Wir bieten daher diese R\u00e4der h\u00e4ufiger mit kr\u00e4ftigeren Farben an. Wir halten aber noch einmal fest: die Rahmenform definiert nicht, was ein Damenrad ist. Das tut nur die Person, die es f\u00e4hrt. Ein Rad mit mittlerem und tiefem Einstieg ist dann (auch f\u00fcr Herren) sinnvoll, wenn die Variante mit Oberrohr nicht ausreichend Komfort bietet.&nbsp;<\/p>\n\n\n\n<p>Menschen sind unterschiedlich. Wenn ein Rad bei der Probefahrt nicht perfekt passt, k\u00f6nnen kleinere \u00c4nderungen viel bewirken. Deshalb empfehlen wir den Fachhandel f\u00fcr alle, die sich nicht sicher sind, wie sie ein Rad perfekt auf sich abstimmen k\u00f6nnen.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a role=\"button\" class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.diamantrad.com\/de-DE\/bikes\/\">Alle Bikes anschauen<\/a><\/div>\n<\/div>\n\n<\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Finde dein Damenrad aus der aktuellen Kollektion: \u2713 Trekkingr\u00e4der \u2713 E-Bikes \u2713 City-Fahrr\u00e4der.<\/p>\n","protected":false},"author":8,"featured_media":53354,"parent":339,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"slim_seo":{"title":"Bikes f\u00fcr Damen & alle von Diamant - elegant & dynamisch","description":"Entdecke Damenr\u00e4der von Diamant: elegant, komfortabel und fahrdynamisch. Jetzt passende Auswahl ansehen."},"footnotes":""},"class_list":["post-1292","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/pages\/1292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/comments?post=1292"}],"version-history":[{"count":11,"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/pages\/1292\/revisions"}],"predecessor-version":[{"id":72165,"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/pages\/1292\/revisions\/72165"}],"up":[{"embeddable":true,"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/pages\/339"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/media\/53354"}],"wp:attachment":[{"href":"https:\/\/www.diamantrad.com\/en-GB\/wp-json\/wp\/v2\/media?parent=1292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}