{"id":81523,"date":"2026-05-19T21:27:35","date_gmt":"2026-05-19T19:27:35","guid":{"rendered":"https:\/\/bmwparts24.pl\/?page_id=81523"},"modified":"2026-05-19T22:33:34","modified_gmt":"2026-05-19T20:33:34","slug":"dekoder-vin-szukaj-czesci-po-numerze-vin","status":"publish","type":"page","link":"https:\/\/bmwparts24.pl\/de\/dekoder-vin-szukaj-czesci-po-numerze-vin\/","title":{"rendered":"Dekoder VIN &#8211; Szukaj cz\u0119\u015bci po numerze VIN"},"content":{"rendered":"<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Instrument+Sans:wght@400;500;600;700&display=swap\">\r\n\r\n<section class=\"cls-bmwc-vin\">\r\n    <div class=\"cls-bmwc-vin__container\">\r\n\r\n        <div class=\"cls-bmwc-vin__hero\">\r\n            <h1 class=\"cls-bmwc-vin__title\">Finden Sie passende Teile f\u00fcr Ihren BMW<\/h1>\r\n            <p class=\"cls-bmwc-vin__desc\">Geben Sie die 17-stellige Fahrgestellnummer (VIN) ein, und wir zeigen Ihnen alle Teile, die zu Ihrem konkreten BMW- oder Mini-Modell passen.<\/p>\r\n\r\n            <form class=\"cls-bmwc-vin__form\" id=\"cls-bmwc-vin-form\" action=\"javascript:void(0);\" onsubmit=\"return false;\" novalidate>\r\n                <div class=\"cls-bmwc-vin__input-wrap\">\r\n                    <input\r\n                        type=\"text\"\r\n                        name=\"vin\"\r\n                        id=\"cls-bmwc-vin-input\"\r\n                        class=\"cls-bmwc-vin__input\"\r\n                        placeholder=\"z. B. WBA5A5C50ED123456\"\r\n                        maxlength=\"17\"\r\n                        autocomplete=\"off\"\r\n                        spellcheck=\"false\"\r\n                        required\r\n                    >\r\n                    <span class=\"cls-bmwc-vin__counter\" id=\"cls-bmwc-vin-counter\">0\/17<\/span>\r\n                <\/div>\r\n                <button type=\"submit\" class=\"cls-bmwc-vin__btn\" id=\"cls-bmwc-vin-btn\">\r\n                    <span class=\"cls-bmwc-vin__btn-text\">Teile suchen<\/span>\r\n                    <span class=\"cls-bmwc-vin__btn-loader\" hidden>\r\n                        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"\/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"\/><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"\/><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"\/><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"\/><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"\/><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"\/><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"\/><\/svg>\r\n                    <\/span>\r\n                <\/button>\r\n            <\/form>\r\n\r\n            <p class=\"cls-bmwc-vin__hint\">Die VIN finden Sie im Fahrzeugschein (Feld E) oder auf dem Typenschild im Motorraum. Wir unterst\u00fctzen BMW und Mini.<\/p>\r\n        <\/div>\r\n\r\n        <div class=\"cls-bmwc-vin__error\" id=\"cls-bmwc-vin-error\" hidden>\r\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"\/><\/svg>\r\n            <span class=\"cls-bmwc-vin__error-msg\" id=\"cls-bmwc-vin-error-msg\"><\/span>\r\n        <\/div>\r\n\r\n        <div class=\"cls-bmwc-vin__results\" id=\"cls-bmwc-vin-results\" hidden>\r\n\r\n            <div class=\"cls-bmwc-vin__vehicle\">\r\n                <div class=\"cls-bmwc-vin__vehicle-header\">\r\n                    <div class=\"cls-bmwc-vin__vehicle-icon\">\r\n                        <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 16H9m10 0h3v-3.15a1 1 0 0 0-.84-.99L16 11l-2.7-3.6a1 1 0 0 0-.8-.4H5.24a2 2 0 0 0-1.8 1.1l-.8 1.63A6 6 0 0 0 2 12.42V16h2\"\/><circle cx=\"6.5\" cy=\"16.5\" r=\"2.5\"\/><circle cx=\"16.5\" cy=\"16.5\" r=\"2.5\"\/><\/svg>\r\n                    <\/div>\r\n                    <div>\r\n                        <h2 class=\"cls-bmwc-vin__vehicle-title\" id=\"vehicle-title\"><\/h2>\r\n                        <p class=\"cls-bmwc-vin__vehicle-vin\" id=\"vehicle-vin\"><\/p>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class=\"cls-bmwc-vin__vehicle-grid\" id=\"vehicle-grid\"><\/div>\r\n            <\/div>\r\n\r\n            <div class=\"cls-bmwc-vin__filters\" id=\"cls-bmwc-vin-filters\"><\/div>\r\n\r\n            <div class=\"cls-bmwc-vin__results-bar\">\r\n                <p class=\"cls-bmwc-vin__results-count\" id=\"cls-bmwc-vin-count\"><\/p>\r\n            <\/div>\r\n\r\n            <div class=\"cls-bmwc-vin__products\" id=\"cls-bmwc-vin-products\"><\/div>\r\n\r\n            <div class=\"cls-bmwc-vin__pagination\" id=\"cls-bmwc-vin-pagination\" hidden><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"cls-bmwc-vin__skeleton\" id=\"cls-bmwc-vin-skeleton\" hidden>\r\n            <div class=\"cls-bmwc-vin__skel-vehicle\"><\/div>\r\n            <div class=\"cls-bmwc-vin__skel-products\">\r\n                <div class=\"cls-bmwc-vin__skel-card\"><\/div>\r\n                <div class=\"cls-bmwc-vin__skel-card\"><\/div>\r\n                <div class=\"cls-bmwc-vin__skel-card\"><\/div>\r\n                <div class=\"cls-bmwc-vin__skel-card\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/section>\r\n\r\n<style>\r\n.cls-bmwc-vin *, .cls-bmwc-vin *::before, .cls-bmwc-vin *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n.cls-bmwc-vin {\r\n    --bmwc-blue: #1A6DCC;\r\n    --bmwc-blue-600: #0F5BAF;\r\n    --bmwc-blue-100: #E8F1FB;\r\n    --bmwc-ink: #1B1F23;\r\n    --bmwc-ink-600: #4A5159;\r\n    --bmwc-ink-400: #7C828A;\r\n    --bmwc-ink-200: #E5E7EB;\r\n    --bmwc-ink-100: #F4F5F7;\r\n    --bmwc-bg: #F5F5F4;\r\n    --bmwc-danger: #DC2626;\r\n    --bmwc-success: #15803D;\r\n\r\n    font-family: 'Instrument Sans', system-ui, sans-serif;\r\n    background: linear-gradient(180deg, var(--bmwc-bg) 0%, #FFFFFF 60%);\r\n    padding: 4rem 1.25rem 5rem;\r\n    color: var(--bmwc-ink);\r\n    -webkit-font-smoothing: antialiased;\r\n}\r\n\r\n.cls-bmwc-vin p { font-size: 1rem; line-height: 1.65; color: var(--bmwc-ink-600); margin: 0; }\r\n.cls-bmwc-vin a { color: inherit; text-decoration: none; }\r\n.cls-bmwc-vin h1, .cls-bmwc-vin h2, .cls-bmwc-vin h3, .cls-bmwc-vin h4 { font-family: 'Instrument Sans', system-ui, sans-serif; line-height: 1.2; letter-spacing: -0.01em; margin: 0; }\r\n.cls-bmwc-vin ul, .cls-bmwc-vin ul li { list-style: none; padding: 0; margin: 0; }\r\n\r\n.cls-bmwc-vin__container { max-width: 1200px; margin: 0 auto; }\r\n\r\n.cls-bmwc-vin__hero {\r\n    text-align: center;\r\n    max-width: 720px;\r\n    margin: 0 auto 3rem;\r\n    animation: cls-bmwc-fadeIn 600ms cubic-bezier(0.16, 1, 0.3, 1);\r\n}\r\n\r\n@keyframes cls-bmwc-fadeIn {\r\n    from { opacity: 0; transform: translateY(10px); }\r\n    to { opacity: 1; transform: translateY(0); }\r\n}\r\n\r\n.cls-bmwc-vin__title {\r\n    font-size: clamp(1.875rem, 4vw, 2.875rem);\r\n    font-weight: 700;\r\n    line-height: 1.2;\r\n    letter-spacing: -0.01em;\r\n    color: #0B1014;\r\n    margin: 0 0 1rem;\r\n}\r\n\r\n.cls-bmwc-vin__desc {\r\n    font-size: clamp(1rem, 1.5vw, 1.125rem);\r\n    line-height: 1.65;\r\n    color: var(--bmwc-ink-600);\r\n    margin-bottom: 2rem;\r\n}\r\n\r\n.cls-bmwc-vin__form {\r\n    display: flex;\r\n    gap: 0.75rem;\r\n    max-width: 560px;\r\n    margin: 0 auto 1rem;\r\n    flex-wrap: wrap;\r\n    background: #fff;\r\n    padding: 0.5rem;\r\n    border-radius: 14px;\r\n    border: 1px solid var(--bmwc-ink-200);\r\n    box-shadow: 0 4px 20px rgba(11, 16, 20, 0.06);\r\n}\r\n\r\n.cls-bmwc-vin__input-wrap {\r\n    position: relative;\r\n    flex: 1;\r\n    min-width: 280px;\r\n}\r\n\r\n.cls-bmwc-vin__input {\r\n    width: 100%;\r\n    height: 52px;\r\n    padding: 0 70px 0 16px;\r\n    border: none;\r\n    background: transparent;\r\n    font: 600 0.9375rem\/1.4 'Instrument Sans', sans-serif;\r\n    color: var(--bmwc-ink);\r\n    letter-spacing: 0.05em;\r\n    text-transform: uppercase;\r\n}\r\n\r\n.cls-bmwc-vin__input:focus { outline: none; }\r\n.cls-bmwc-vin__input::placeholder { color: var(--bmwc-ink-400); font-weight: 400; letter-spacing: normal; text-transform: none; }\r\n\r\n.cls-bmwc-vin__counter {\r\n    position: absolute;\r\n    right: 16px;\r\n    top: 50%;\r\n    transform: translateY(-50%);\r\n    font-size: 0.75rem;\r\n    font-weight: 600;\r\n    color: var(--bmwc-ink-400);\r\n    font-variant-numeric: tabular-nums;\r\n}\r\n\r\n.cls-bmwc-vin__btn {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 0.5rem;\r\n    padding: 0 1.75rem;\r\n    height: 52px;\r\n    background: var(--bmwc-blue);\r\n    color: #fff;\r\n    border: none;\r\n    border-radius: 10px;\r\n    font: 700 0.9375rem\/1 'Instrument Sans', sans-serif;\r\n    cursor: pointer;\r\n    transition: all 220ms cubic-bezier(0.16, 1, 0.3, 1);\r\n    box-shadow: 0 2px 8px rgba(26, 109, 204, 0.25);\r\n}\r\n\r\n.cls-bmwc-vin__btn:hover:not(:disabled) {\r\n    background: var(--bmwc-blue-600);\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 4px 14px rgba(26, 109, 204, 0.35);\r\n}\r\n\r\n.cls-bmwc-vin__btn:active { transform: translateY(0); }\r\n.cls-bmwc-vin__btn:disabled { opacity: 0.7; cursor: wait; }\r\n\r\n.cls-bmwc-vin__btn-loader svg {\r\n    animation: cls-bmwc-spin 1s linear infinite;\r\n}\r\n\r\n@keyframes cls-bmwc-spin { to { transform: rotate(360deg); } }\r\n\r\n.cls-bmwc-vin__hint {\r\n    font-size: 0.8125rem;\r\n    color: var(--bmwc-ink-400);\r\n}\r\n\r\n.cls-bmwc-vin [hidden] { display: none !important; }\r\n\r\n.cls-bmwc-vin__error {\r\n    max-width: 720px;\r\n    margin: 0 auto 2rem;\r\n    background: #FEF2F2;\r\n    border: 1px solid #FECACA;\r\n    border-radius: 12px;\r\n    padding: 1rem 1.25rem;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 0.75rem;\r\n    color: var(--bmwc-danger);\r\n}\r\n\r\n.cls-bmwc-vin__error-msg {\r\n    color: var(--bmwc-danger) !important;\r\n    font-weight: 600 !important;\r\n    font-size: 0.9375rem !important;\r\n    line-height: 1.5 !important;\r\n    display: block !important;\r\n    margin: 0 !important;\r\n}\r\n\r\n.cls-bmwc-vin__vehicle {\r\n    background: linear-gradient(135deg, #fff 0%, var(--bmwc-blue-100) 100%);\r\n    border: 1px solid var(--bmwc-ink-200);\r\n    border-radius: 16px;\r\n    padding: 1.75rem;\r\n    margin-bottom: 2rem;\r\n    box-shadow: 0 4px 20px rgba(11, 16, 20, 0.04);\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-header {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 1rem;\r\n    margin-bottom: 1.5rem;\r\n    padding-bottom: 1.25rem;\r\n    border-bottom: 1px solid var(--bmwc-ink-200);\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-icon {\r\n    flex-shrink: 0;\r\n    width: 56px;\r\n    height: 56px;\r\n    background: var(--bmwc-blue);\r\n    color: #fff;\r\n    border-radius: 14px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-title {\r\n    font-size: clamp(1.25rem, 2.5vw, 1.5rem);\r\n    font-weight: 600;\r\n    color: #0B1014;\r\n    margin-bottom: 0.25rem;\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-vin {\r\n    font-size: 0.8125rem;\r\n    color: var(--bmwc-ink-400);\r\n    font-family: ui-monospace, 'SF Mono', monospace;\r\n    letter-spacing: 0.05em;\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\r\n    gap: 1rem;\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-cell {\r\n    display: flex;\r\n    flex-direction: column;\r\n    gap: 0.125rem;\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-cell-label {\r\n    font-size: 0.6875rem;\r\n    color: var(--bmwc-ink-400);\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.08em;\r\n    font-weight: 600;\r\n}\r\n\r\n.cls-bmwc-vin__vehicle-cell-value {\r\n    font-size: 0.9375rem;\r\n    font-weight: 600;\r\n    color: var(--bmwc-ink);\r\n}\r\n\r\n.cls-bmwc-vin__filters {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 0.5rem;\r\n    margin-bottom: 1.5rem;\r\n}\r\n\r\n.cls-bmwc-vin__filter {\r\n    padding: 0.5rem 1rem;\r\n    background: #fff;\r\n    border: 1px solid var(--bmwc-ink-200);\r\n    border-radius: 50px;\r\n    font-size: 0.8125rem;\r\n    font-weight: 600;\r\n    color: var(--bmwc-ink-600);\r\n    cursor: pointer;\r\n    transition: all 150ms;\r\n    white-space: nowrap;\r\n    font-family: inherit;\r\n}\r\n\r\n.cls-bmwc-vin__filter:hover {\r\n    border-color: var(--bmwc-blue);\r\n    color: var(--bmwc-blue);\r\n}\r\n\r\n.cls-bmwc-vin__filter--active {\r\n    background: var(--bmwc-blue);\r\n    border-color: var(--bmwc-blue);\r\n    color: #fff;\r\n}\r\n\r\n.cls-bmwc-vin__filter-count {\r\n    font-weight: 500;\r\n    opacity: 0.7;\r\n    margin-left: 0.25rem;\r\n}\r\n\r\n.cls-bmwc-vin__results-bar {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 1.5rem;\r\n    padding-bottom: 1rem;\r\n    border-bottom: 1px solid var(--bmwc-ink-200);\r\n}\r\n\r\n.cls-bmwc-vin__results-count {\r\n    font-size: 0.875rem;\r\n    color: var(--bmwc-ink-600);\r\n    font-weight: 500;\r\n}\r\n\r\n.cls-bmwc-vin__results-count strong {\r\n    color: var(--bmwc-ink);\r\n    font-weight: 700;\r\n}\r\n\r\n.cls-bmwc-vin__products {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n    gap: 1.5rem;\r\n    margin-bottom: 2.5rem;\r\n}\r\n\r\n.cls-bmwc-vin__product {\r\n    background: #fff;\r\n    border: 1px solid var(--bmwc-ink-200);\r\n    border-radius: 12px;\r\n    overflow: hidden;\r\n    transition: all 220ms cubic-bezier(0.16, 1, 0.3, 1);\r\n    display: flex;\r\n    flex-direction: column;\r\n}\r\n\r\n.cls-bmwc-vin__product:hover {\r\n    transform: translateY(-4px);\r\n    border-color: var(--bmwc-blue);\r\n    box-shadow: 0 10px 30px rgba(11, 16, 20, 0.08);\r\n}\r\n\r\n.cls-bmwc-vin__product-image {\r\n    aspect-ratio: 1;\r\n    background: var(--bmwc-ink-100);\r\n    overflow: hidden;\r\n    position: relative;\r\n}\r\n\r\n.cls-bmwc-vin__product-image img {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: cover;\r\n    transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);\r\n}\r\n\r\n.cls-bmwc-vin__product:hover .cls-bmwc-vin__product-image img {\r\n    transform: scale(1.05);\r\n}\r\n\r\n.cls-bmwc-vin__product-stock {\r\n    position: absolute;\r\n    top: 10px;\r\n    right: 10px;\r\n    padding: 4px 10px;\r\n    background: rgba(21, 128, 61, 0.95);\r\n    color: #fff;\r\n    border-radius: 50px;\r\n    font-size: 0.6875rem;\r\n    font-weight: 700;\r\n    text-transform: uppercase;\r\n}\r\n\r\n.cls-bmwc-vin__product-stock--out {\r\n    background: rgba(220, 38, 38, 0.95);\r\n}\r\n\r\n.cls-bmwc-vin__product-body {\r\n    padding: 1rem 1.125rem 1.125rem;\r\n    display: flex;\r\n    flex-direction: column;\r\n    flex: 1;\r\n    gap: 0.5rem;\r\n}\r\n\r\n.cls-bmwc-vin__product-sku {\r\n    font-size: 0.6875rem;\r\n    color: var(--bmwc-ink-400);\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.05em;\r\n    font-weight: 600;\r\n}\r\n\r\n.cls-bmwc-vin__product-title {\r\n    font-size: 0.9375rem;\r\n    font-weight: 600;\r\n    color: var(--bmwc-ink);\r\n    line-height: 1.4;\r\n    flex: 1;\r\n    display: -webkit-box;\r\n    -webkit-line-clamp: 3;\r\n    -webkit-box-orient: vertical;\r\n    overflow: hidden;\r\n}\r\n\r\n.cls-bmwc-vin__product:hover .cls-bmwc-vin__product-title {\r\n    color: var(--bmwc-blue);\r\n}\r\n\r\n.cls-bmwc-vin__product-price {\r\n    font-size: 1.125rem;\r\n    font-weight: 700;\r\n    color: var(--bmwc-blue);\r\n    margin-top: 0.5rem;\r\n}\r\n\r\n.cls-bmwc-vin__pagination {\r\n    display: flex;\r\n    justify-content: center;\r\n    gap: 0.5rem;\r\n    margin-top: 2rem;\r\n}\r\n\r\n.cls-bmwc-vin__page-btn {\r\n    min-width: 40px;\r\n    height: 40px;\r\n    padding: 0 12px;\r\n    background: #fff;\r\n    border: 1px solid var(--bmwc-ink-200);\r\n    border-radius: 8px;\r\n    font: 600 0.875rem\/1 'Instrument Sans', sans-serif;\r\n    color: var(--bmwc-ink-600);\r\n    cursor: pointer;\r\n    transition: all 150ms;\r\n}\r\n\r\n.cls-bmwc-vin__page-btn:hover:not(:disabled) {\r\n    border-color: var(--bmwc-blue);\r\n    color: var(--bmwc-blue);\r\n}\r\n\r\n.cls-bmwc-vin__page-btn--active {\r\n    background: var(--bmwc-blue);\r\n    border-color: var(--bmwc-blue);\r\n    color: #fff;\r\n}\r\n\r\n.cls-bmwc-vin__page-btn:disabled {\r\n    opacity: 0.4;\r\n    cursor: not-allowed;\r\n}\r\n\r\n.cls-bmwc-vin__page-dots {\r\n    min-width: 40px;\r\n    height: 40px;\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    color: var(--bmwc-ink-400);\r\n}\r\n\r\n.cls-bmwc-vin__skeleton {\r\n    max-width: 1200px;\r\n    margin: 2rem auto 0;\r\n}\r\n\r\n.cls-bmwc-vin__skel-vehicle {\r\n    height: 160px;\r\n    background: linear-gradient(90deg, var(--bmwc-ink-100), #fff, var(--bmwc-ink-100));\r\n    background-size: 200% 100%;\r\n    border-radius: 16px;\r\n    margin-bottom: 2rem;\r\n    animation: cls-bmwc-shimmer 1.5s infinite;\r\n}\r\n\r\n.cls-bmwc-vin__skel-products {\r\n    display: grid;\r\n    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n    gap: 1.5rem;\r\n}\r\n\r\n.cls-bmwc-vin__skel-card {\r\n    height: 380px;\r\n    background: linear-gradient(90deg, var(--bmwc-ink-100), #fff, var(--bmwc-ink-100));\r\n    background-size: 200% 100%;\r\n    border-radius: 12px;\r\n    animation: cls-bmwc-shimmer 1.5s infinite;\r\n}\r\n\r\n@keyframes cls-bmwc-shimmer {\r\n    0% { background-position: 200% 0; }\r\n    100% { background-position: -200% 0; }\r\n}\r\n\r\n.cls-bmwc-vin__manual {\r\n    background: linear-gradient(135deg, #fff 0%, var(--bmwc-blue-100) 100%);\r\n    border: 1px solid var(--bmwc-blue);\r\n    border-radius: 16px;\r\n    padding: 1.75rem;\r\n    margin-bottom: 1.5rem;\r\n}\r\n.cls-bmwc-vin__manual-title {\r\n    font-size: 1.0625rem;\r\n    font-weight: 700;\r\n    color: var(--bmwc-ink);\r\n    margin: 0 0 0.5rem;\r\n    line-height: 1.3;\r\n}\r\n.cls-bmwc-vin__manual-desc {\r\n    font-size: 0.9375rem;\r\n    line-height: 1.6;\r\n    color: var(--bmwc-ink-600);\r\n    margin: 0 0 1.25rem;\r\n}\r\n.cls-bmwc-vin__manual-row {\r\n    display: flex;\r\n    gap: 0.75rem;\r\n    flex-wrap: wrap;\r\n}\r\n.cls-bmwc-vin__manual-select {\r\n    flex: 1 1 240px;\r\n    min-width: 0;\r\n    height: 48px;\r\n    padding: 0 1rem;\r\n    font-size: 0.9375rem;\r\n    font-family: inherit;\r\n    color: var(--bmwc-ink);\r\n    background: #fff;\r\n    border: 1px solid var(--bmwc-ink-200);\r\n    border-radius: 10px;\r\n    cursor: pointer;\r\n    transition: border-color 0.2s, box-shadow 0.2s;\r\n}\r\n.cls-bmwc-vin__manual-select:focus {\r\n    outline: none;\r\n    border-color: var(--bmwc-blue);\r\n    box-shadow: 0 0 0 3px rgba(26,109,204,0.15);\r\n}\r\n.cls-bmwc-vin__manual-btn {\r\n    flex: 0 0 auto;\r\n    height: 48px;\r\n    padding: 0 1.75rem;\r\n    font-size: 0.9375rem;\r\n    font-weight: 700;\r\n    font-family: inherit;\r\n    color: #fff;\r\n    background: var(--bmwc-blue);\r\n    border: none;\r\n    border-radius: 10px;\r\n    cursor: pointer;\r\n    transition: background 0.2s, transform 0.15s, box-shadow 0.2s;\r\n    box-shadow: 0 2px 8px rgba(26,109,204,0.25);\r\n}\r\n.cls-bmwc-vin__manual-btn:hover:not(:disabled) {\r\n    background: var(--bmwc-blue-600);\r\n    transform: translateY(-1px);\r\n    box-shadow: 0 4px 14px rgba(26,109,204,0.35);\r\n}\r\n.cls-bmwc-vin__manual-btn:disabled {\r\n    opacity: 0.5;\r\n    cursor: not-allowed;\r\n}\r\n.cls-bmwc-vin__manual[data-loading] .cls-bmwc-vin__manual-select {\r\n    opacity: 0.6;\r\n}\r\n@media (max-width: 560px) {\r\n    .cls-bmwc-vin__manual-btn { flex: 1 1 100%; }\r\n}\r\n\r\n.cls-bmwc-vin__empty {\r\n    text-align: center;\r\n    padding: 3rem 1.5rem;\r\n    color: var(--bmwc-ink-600);\r\n    background: #fff;\r\n    border: 2px dashed var(--bmwc-ink-200);\r\n    border-radius: 16px;\r\n}\r\n\r\n.cls-bmwc-vin__empty h3 {\r\n    font-size: 1.25rem;\r\n    margin-bottom: 0.5rem;\r\n    color: var(--bmwc-ink);\r\n}\r\n\r\n@media (max-width: 640px) {\r\n    .cls-bmwc-vin { padding: 2.5rem 1rem 3rem; }\r\n    .cls-bmwc-vin__form { flex-direction: column; padding: 0.375rem; }\r\n    .cls-bmwc-vin__input-wrap { min-width: 100%; }\r\n    .cls-bmwc-vin__btn { width: 100%; }\r\n    .cls-bmwc-vin__vehicle { padding: 1.25rem; }\r\n    .cls-bmwc-vin__vehicle-grid { grid-template-columns: repeat(2, 1fr); }\r\n    .cls-bmwc-vin__products { grid-template-columns: repeat(2, 1fr); gap: 1rem; }\r\n    .cls-bmwc-vin__product-body { padding: 0.875rem; }\r\n}\r\n\r\n@media (max-width: 380px) {\r\n    .cls-bmwc-vin__products { grid-template-columns: 1fr; }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n    .cls-bmwc-vin__hero { animation: none; }\r\n    .cls-bmwc-vin *, .cls-bmwc-vin *::before, .cls-bmwc-vin *::after {\r\n        animation-duration: 0.01ms !important;\r\n        transition-duration: 0.01ms !important;\r\n    }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n    'use strict';\r\n\r\n    \/\/ REST URL \u2014 priorytetowo z globala ftechBmwVin (wstrzykiwany przez wtyczke)\r\n    \/\/ Fallback: wpApiSettings (admin) \u2192 \/wp-json\/ (last resort)\r\n    var REST_URL = '';\r\n    var REST_NONCE = '';\r\n    if (window.ftechBmwVin && window.ftechBmwVin.restUrl) {\r\n        REST_URL = window.ftechBmwVin.restUrl.replace(\/\\\/$\/, '') + '\/decode-vin';\r\n        REST_NONCE = window.ftechBmwVin.restNonce || '';\r\n    } else if (window.wpApiSettings && window.wpApiSettings.root) {\r\n        REST_URL = window.wpApiSettings.root.replace(\/\\\/$\/, '') + '\/ftech-bmw-vin\/v1\/decode-vin';\r\n        REST_NONCE = window.wpApiSettings.nonce || '';\r\n    } else {\r\n        \/\/ Last resort fallback - dziala dla wiekszosci konfiguracji WP\r\n        REST_URL = window.location.origin + '\/wp-json\/ftech-bmw-vin\/v1\/decode-vin';\r\n        REST_NONCE = '';\r\n    }\r\n\r\n    \/\/ MODELS_URL - ten sam base co decode-vin, tylko endpoint \/models\r\n    var MODELS_URL = REST_URL.replace(\/\\\/decode-vin$\/, '\/models');\r\n\r\n    var LANG = document.documentElement.lang ? document.documentElement.lang.split('-')[0] : 'pl';\r\n\r\n    var els = {\r\n        form:        document.getElementById('cls-bmwc-vin-form'),\r\n        input:       document.getElementById('cls-bmwc-vin-input'),\r\n        counter:     document.getElementById('cls-bmwc-vin-counter'),\r\n        btn:         document.getElementById('cls-bmwc-vin-btn'),\r\n        error:       document.getElementById('cls-bmwc-vin-error'),\r\n        errorMsg:    document.getElementById('cls-bmwc-vin-error-msg'),\r\n        results:     document.getElementById('cls-bmwc-vin-results'),\r\n        skeleton:    document.getElementById('cls-bmwc-vin-skeleton'),\r\n        vehicleTitle:document.getElementById('vehicle-title'),\r\n        vehicleVin:  document.getElementById('vehicle-vin'),\r\n        vehicleGrid: document.getElementById('vehicle-grid'),\r\n        filters:     document.getElementById('cls-bmwc-vin-filters'),\r\n        count:       document.getElementById('cls-bmwc-vin-count'),\r\n        products:    document.getElementById('cls-bmwc-vin-products'),\r\n        pagination:  document.getElementById('cls-bmwc-vin-pagination')\r\n    };\r\n\r\n    if (!els.form || !els.input || !els.btn) {\r\n        console.warn('[BMW VIN] Brak wymaganych elementow DOM');\r\n        return;\r\n    }\r\n\r\n    var btnText = els.btn.querySelector('.cls-bmwc-vin__btn-text');\r\n    var btnLoader = els.btn.querySelector('.cls-bmwc-vin__btn-loader');\r\n\r\n    var currentVin = '';\r\n    var currentManualModel = '';\r\n    var currentCategory = '';\r\n    var currentPage = 1;\r\n    var availableCategories = [];\r\n\r\n    els.input.addEventListener('input', function(e){\r\n        var v = e.target.value.toUpperCase().replace(\/[^A-HJ-NPR-Z0-9]\/g, '');\r\n        if (v.length > 17) v = v.substr(0, 17);\r\n        e.target.value = v;\r\n        if (els.counter) {\r\n            els.counter.textContent = v.length + '\/17';\r\n            els.counter.style.color = v.length === 17 ? 'var(--bmwc-success)' : '';\r\n        }\r\n    });\r\n\r\n    els.form.addEventListener('submit', function(e){\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n        handleSearch();\r\n        return false;\r\n    });\r\n\r\n    els.btn.addEventListener('click', function(e){\r\n        e.preventDefault();\r\n        e.stopPropagation();\r\n        handleSearch();\r\n        return false;\r\n    });\r\n\r\n    els.input.addEventListener('keydown', function(e){\r\n        if (e.key === 'Enter' || e.keyCode === 13) {\r\n            e.preventDefault();\r\n            handleSearch();\r\n        }\r\n    });\r\n\r\n    function handleSearch() {\r\n        var vin = (els.input.value || '').trim().toUpperCase();\r\n        if (vin.length === 0) {\r\n            showError('Wpisz numer VIN.');\r\n            return;\r\n        }\r\n        if (vin.length !== 17) {\r\n            showError('VIN musi miec 17 znakow. Wpisano: ' + vin.length + '\/17.');\r\n            return;\r\n        }\r\n        if (!\/^[A-HJ-NPR-Z0-9]{17}$\/.test(vin)) {\r\n            showError('Numer VIN zawiera nieprawidlowe znaki.');\r\n            return;\r\n        }\r\n        currentVin = vin;\r\n        currentCategory = '';\r\n        currentManualModel = '';\r\n        currentPage = 1;\r\n        runSearch();\r\n    }\r\n\r\n    function runSearch() {\r\n        hideError();\r\n        setLoading(true);\r\n        if (els.results) els.results.hidden = true;\r\n        if (els.skeleton) els.skeleton.hidden = false;\r\n\r\n        var headers = { 'Content-Type': 'application\/json', 'Accept': 'application\/json' };\r\n        if (REST_NONCE) headers['X-WP-Nonce'] = REST_NONCE;\r\n\r\n        var body = {\r\n            vin: currentVin,\r\n            page: currentPage,\r\n            per_page: 12,\r\n            category: currentCategory,\r\n            lang: LANG,\r\n            model: currentManualModel\r\n        };\r\n\r\n        fetch(REST_URL, {\r\n            method: 'POST',\r\n            credentials: 'same-origin',\r\n            headers: headers,\r\n            body: JSON.stringify(body)\r\n        })\r\n        .then(function(res){\r\n            return res.text().then(function(text){\r\n                var data = null;\r\n                try { data = text ? JSON.parse(text) : null; } catch(e) { data = null; }\r\n                if (!res.ok) {\r\n                    var msg = (data && data.message) ? data.message : ('HTTP ' + res.status);\r\n                    var err = new Error(msg);\r\n                    err.status = res.status;\r\n                    err.data = data;\r\n                    throw err;\r\n                }\r\n                return data;\r\n            });\r\n        })\r\n        .then(function(data){\r\n            if (!data) throw new Error('Pusta odpowiedz z serwera.');\r\n            renderResults(data);\r\n        })\r\n        .catch(function(err){\r\n            console.error('[BMW VIN] Search error:', err);\r\n            var msg = 'Nie udalo sie polaczyc z serwisem.';\r\n            \/\/ Jezeli backend zwrocil JSON z polem message - uzyj go (np. \"Nie znaleziono auta\")\r\n            if (err && err.data && err.data.message) {\r\n                msg = err.data.message;\r\n            } else if (err && err.message && err.message !== ('HTTP ' + err.status)) {\r\n                msg = err.message;\r\n            } else if (err && err.status === 404 && !err.data) {\r\n                \/\/ Faktyczny 404 - endpoint nie istnieje (brak JSON body z bledem)\r\n                msg = 'Endpoint REST nie jest dostepny. Sprawdz czy wtyczka F-Tech BMW VIN jest aktywna.';\r\n            } else if (err && err.status >= 500) {\r\n                msg = 'Blad serwera (HTTP ' + err.status + '). Sprobuj ponownie za chwile.';\r\n            } else if (err && err.status) {\r\n                msg = 'Blad polaczenia (HTTP ' + err.status + ').';\r\n            }\r\n            showError(msg);\r\n        })\r\n        .then(function(){\r\n            setLoading(false);\r\n            if (els.skeleton) els.skeleton.hidden = true;\r\n        });\r\n    }\r\n\r\n    function setLoading(loading) {\r\n        if (!els.btn) return;\r\n        els.btn.disabled = loading;\r\n        if (btnText) btnText.style.display = loading ? 'none' : '';\r\n        if (btnLoader) btnLoader.hidden = !loading;\r\n    }\r\n\r\n    function showError(msg) {\r\n        if (!els.error || !els.errorMsg) {\r\n            alert(msg);\r\n            return;\r\n        }\r\n        els.errorMsg.textContent = msg;\r\n        els.error.hidden = false;\r\n        if (els.results) els.results.hidden = true;\r\n        try { els.error.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch(e) {}\r\n    }\r\n\r\n    function hideError() {\r\n        if (els.error) els.error.hidden = true;\r\n    }\r\n\r\n    function renderResults(data) {\r\n        renderVehicle(data.vehicle || {});\r\n\r\n        \/\/ VIN rozpoznany jako BMW ale model nieustalony automatycznie -> reczny wybor\r\n        if (data.needs_manual) {\r\n            renderManualPicker(data.vehicle || {});\r\n        } else {\r\n            hideManualPicker();\r\n        }\r\n\r\n        if (currentPage === 1) {\r\n            availableCategories = data.categories || [];\r\n            renderFilters();\r\n        }\r\n        renderProducts(data.products || []);\r\n        renderPagination(data.pagination || {});\r\n        renderCount(data.pagination || {});\r\n        if (els.results) {\r\n            els.results.hidden = false;\r\n            try { els.results.scrollIntoView({ behavior: 'smooth', block: 'start' }); } catch(e) {}\r\n        }\r\n    }\r\n\r\n    function hideManualPicker() {\r\n        var existing = document.querySelector('.cls-bmwc-vin__manual');\r\n        if (existing) existing.remove();\r\n    }\r\n\r\n    function renderManualPicker(v) {\r\n        hideManualPicker();\r\n        if (!els.results) return;\r\n\r\n        var wrap = document.createElement('div');\r\n        wrap.className = 'cls-bmwc-vin__manual';\r\n\r\n        var h = document.createElement('h3');\r\n        h.className = 'cls-bmwc-vin__manual-title';\r\n        h.textContent = 'Nie rozpoznali\u015bmy automatycznie modelu z tego VIN';\r\n        wrap.appendChild(h);\r\n\r\n        var p = document.createElement('p');\r\n        p.className = 'cls-bmwc-vin__manual-desc';\r\n        p.textContent = 'To zdarza si\u0119 przy niekt\u00f3rych autach z rynku europejskiego. Wybierz model swojego BMW z listy, a poka\u017cemy pasuj\u0105ce cz\u0119\u015bci.';\r\n        wrap.appendChild(p);\r\n\r\n        var row = document.createElement('div');\r\n        row.className = 'cls-bmwc-vin__manual-row';\r\n\r\n        var select = document.createElement('select');\r\n        select.className = 'cls-bmwc-vin__manual-select';\r\n        var opt0 = document.createElement('option');\r\n        opt0.value = '';\r\n        opt0.textContent = 'Wybierz model nadwozia...';\r\n        select.appendChild(opt0);\r\n        wrap.setAttribute('data-loading', '1');\r\n\r\n        var btn = document.createElement('button');\r\n        btn.type = 'button';\r\n        btn.className = 'cls-bmwc-vin__manual-btn';\r\n        btn.textContent = 'Poka\u017c cz\u0119\u015bci';\r\n        btn.disabled = true;\r\n\r\n        select.addEventListener('change', function(){\r\n            btn.disabled = !select.value;\r\n        });\r\n\r\n        btn.addEventListener('click', function(){\r\n            if (!select.value) return;\r\n            currentManualModel = select.value;\r\n            currentCategory = '';\r\n            currentPage = 1;\r\n            runSearch();\r\n        });\r\n\r\n        row.appendChild(select);\r\n        row.appendChild(btn);\r\n        wrap.appendChild(row);\r\n\r\n        \/\/ Wstaw przed lista produktow (po karcie pojazdu)\r\n        var vehicleCard = els.results.querySelector('.cls-bmwc-vin__vehicle');\r\n        if (vehicleCard && vehicleCard.parentNode) {\r\n            vehicleCard.parentNode.insertBefore(wrap, vehicleCard.nextSibling);\r\n        } else {\r\n            els.results.insertBefore(wrap, els.results.firstChild);\r\n        }\r\n\r\n        \/\/ Pobierz liste modeli z API\r\n        loadModels(select, wrap);\r\n    }\r\n\r\n    function loadModels(select, wrap) {\r\n        var url = MODELS_URL + (MODELS_URL.indexOf('?') >= 0 ? '&' : '?') + 'lang=' + encodeURIComponent(LANG);\r\n        var headers = { 'Accept': 'application\/json' };\r\n        if (REST_NONCE) headers['X-WP-Nonce'] = REST_NONCE;\r\n\r\n        fetch(url, { method: 'GET', credentials: 'same-origin', headers: headers })\r\n            .then(function(res){ return res.json(); })\r\n            .then(function(data){\r\n                wrap.removeAttribute('data-loading');\r\n                var models = (data && data.models) ? data.models : [];\r\n                if (!models.length) {\r\n                    var note = document.createElement('p');\r\n                    note.className = 'cls-bmwc-vin__manual-desc';\r\n                    note.textContent = 'Brak dost\u0119pnych modeli w katalogu. Skontaktuj si\u0119 z nami \u2014 pomo\u017cemy dobra\u0107 cz\u0119\u015bci.';\r\n                    wrap.appendChild(note);\r\n                    return;\r\n                }\r\n                models.forEach(function(m){\r\n                    var o = document.createElement('option');\r\n                    o.value = m.code;\r\n                    o.textContent = m.code + ' (' + m.count + ')';\r\n                    select.appendChild(o);\r\n                });\r\n            })\r\n            .catch(function(err){\r\n                console.error('[BMW VIN] Models load error:', err);\r\n                wrap.removeAttribute('data-loading');\r\n            });\r\n    }\r\n\r\n    function renderVehicle(v) {\r\n        var make = v.make || 'BMW';\r\n        var model = v.model || '';\r\n        var year = v.model_year || '';\r\n        if (els.vehicleTitle) els.vehicleTitle.textContent = make + ' ' + model + (year ? ' (' + year + ')' : '');\r\n        if (els.vehicleVin) els.vehicleVin.textContent = v.vin || '';\r\n\r\n        if (!els.vehicleGrid) return;\r\n        clearChildren(els.vehicleGrid);\r\n\r\n        var cells = [];\r\n        if (v.model_code) cells.push(['Kod nadwozia', v.model_code]);\r\n        if (v.series) cells.push(['Seria', v.series]);\r\n        if (v.engine_displacement) cells.push(['Silnik', v.engine_displacement + 'L']);\r\n        if (v.engine_hp) cells.push(['Moc', v.engine_hp + ' KM']);\r\n        if (v.fuel_type) cells.push(['Paliwo', v.fuel_type]);\r\n        if (v.transmission) cells.push(['Skrzynia', v.transmission]);\r\n        if (v.drive_type) cells.push(['Naped', v.drive_type]);\r\n        if (v.body_class) cells.push(['Nadwozie', v.body_class]);\r\n        if (v.plant_name) cells.push(['Fabryka', v.plant_name]);\r\n\r\n        for (var i = 0; i < cells.length; i++) {\r\n            var cell = document.createElement('div');\r\n            cell.className = 'cls-bmwc-vin__vehicle-cell';\r\n            var lbl = document.createElement('span');\r\n            lbl.className = 'cls-bmwc-vin__vehicle-cell-label';\r\n            lbl.textContent = cells[i][0];\r\n            var val = document.createElement('span');\r\n            val.className = 'cls-bmwc-vin__vehicle-cell-value';\r\n            val.textContent = cells[i][1];\r\n            cell.appendChild(lbl);\r\n            cell.appendChild(val);\r\n            els.vehicleGrid.appendChild(cell);\r\n        }\r\n    }\r\n\r\n    function renderFilters() {\r\n        if (!els.filters) return;\r\n        clearChildren(els.filters);\r\n\r\n        var allBtn = document.createElement('button');\r\n        allBtn.type = 'button';\r\n        allBtn.className = 'cls-bmwc-vin__filter' + (currentCategory === '' ? ' cls-bmwc-vin__filter--active' : '');\r\n        allBtn.textContent = 'Wszystkie kategorie';\r\n        allBtn.addEventListener('click', function(){\r\n            currentCategory = '';\r\n            currentPage = 1;\r\n            runSearch();\r\n        });\r\n        els.filters.appendChild(allBtn);\r\n\r\n        for (var i = 0; i < availableCategories.length; i++) {\r\n            (function(cat){\r\n                var btn = document.createElement('button');\r\n                btn.type = 'button';\r\n                btn.className = 'cls-bmwc-vin__filter' + (currentCategory === cat.slug ? ' cls-bmwc-vin__filter--active' : '');\r\n                btn.appendChild(document.createTextNode(cat.name + ' '));\r\n                var cnt = document.createElement('span');\r\n                cnt.className = 'cls-bmwc-vin__filter-count';\r\n                cnt.textContent = '(' + cat.count + ')';\r\n                btn.appendChild(cnt);\r\n                btn.addEventListener('click', function(){\r\n                    currentCategory = cat.slug;\r\n                    currentPage = 1;\r\n                    runSearch();\r\n                });\r\n                els.filters.appendChild(btn);\r\n            })(availableCategories[i]);\r\n        }\r\n    }\r\n\r\n    function renderProducts(products) {\r\n        if (!els.products) return;\r\n        clearChildren(els.products);\r\n\r\n        if (!products || products.length === 0) {\r\n            var empty = document.createElement('div');\r\n            empty.className = 'cls-bmwc-vin__empty';\r\n            var h3 = document.createElement('h3');\r\n            h3.textContent = 'Brak produktow dla tego modelu';\r\n            var p = document.createElement('p');\r\n            p.textContent = 'Nie znalezlismy czesci pasujacych do Twojego BMW w naszym katalogu. Skontaktuj sie z nami.';\r\n            empty.appendChild(h3);\r\n            empty.appendChild(p);\r\n            els.products.appendChild(empty);\r\n            return;\r\n        }\r\n\r\n        for (var i = 0; i < products.length; i++) {\r\n            els.products.appendChild(buildProductCard(products[i]));\r\n        }\r\n    }\r\n\r\n    function buildProductCard(p) {\r\n        var card = document.createElement('a');\r\n        card.className = 'cls-bmwc-vin__product';\r\n        card.href = p.url || '#';\r\n\r\n        var imgWrap = document.createElement('div');\r\n        imgWrap.className = 'cls-bmwc-vin__product-image';\r\n\r\n        \/\/ Tworzenie elementu obrazka przez DOM API - immune to Auto-Alt regex\r\n        var pictureEl = document.createElement('img');\r\n        pictureEl.setAttribute('src', p.image || '');\r\n        pictureEl.setAttribute('alt', p.title || 'Produkt BMW');\r\n        pictureEl.setAttribute('loading', 'lazy');\r\n        imgWrap.appendChild(pictureEl);\r\n\r\n        var stockBadge = document.createElement('span');\r\n        stockBadge.className = 'cls-bmwc-vin__product-stock' + (p.in_stock ? '' : ' cls-bmwc-vin__product-stock--out');\r\n        stockBadge.textContent = p.in_stock ? 'Dostepne' : 'Brak';\r\n        imgWrap.appendChild(stockBadge);\r\n\r\n        card.appendChild(imgWrap);\r\n\r\n        var body = document.createElement('div');\r\n        body.className = 'cls-bmwc-vin__product-body';\r\n\r\n        if (p.sku) {\r\n            var sku = document.createElement('span');\r\n            sku.className = 'cls-bmwc-vin__product-sku';\r\n            sku.textContent = 'SKU: ' + p.sku;\r\n            body.appendChild(sku);\r\n        }\r\n\r\n        var title = document.createElement('h3');\r\n        title.className = 'cls-bmwc-vin__product-title';\r\n        title.textContent = p.title || '';\r\n        body.appendChild(title);\r\n\r\n        if (p.price_html) {\r\n            var price = document.createElement('div');\r\n            price.className = 'cls-bmwc-vin__product-price';\r\n            price.innerHTML = p.price_html;\r\n            body.appendChild(price);\r\n        }\r\n\r\n        card.appendChild(body);\r\n        return card;\r\n    }\r\n\r\n    function renderPagination(pg) {\r\n        if (!els.pagination) return;\r\n        clearChildren(els.pagination);\r\n\r\n        if (!pg || !pg.total_pages || pg.total_pages <= 1) {\r\n            els.pagination.hidden = true;\r\n            return;\r\n        }\r\n\r\n        var totalPages = pg.total_pages;\r\n        var current = pg.page;\r\n        var range = 2;\r\n\r\n        els.pagination.appendChild(pageBtn('<', current - 1, current === 1, false));\r\n\r\n        for (var i = 1; i <= totalPages; i++) {\r\n            if (i === 1 || i === totalPages || (i >= current - range && i <= current + range)) {\r\n                els.pagination.appendChild(pageBtn(String(i), i, false, i === current));\r\n            } else if (i === current - range - 1 || i === current + range + 1) {\r\n                var dots = document.createElement('span');\r\n                dots.className = 'cls-bmwc-vin__page-dots';\r\n                dots.textContent = '...';\r\n                els.pagination.appendChild(dots);\r\n            }\r\n        }\r\n\r\n        els.pagination.appendChild(pageBtn('>', current + 1, current === totalPages, false));\r\n        els.pagination.hidden = false;\r\n    }\r\n\r\n    function pageBtn(label, targetPage, disabled, active) {\r\n        var btn = document.createElement('button');\r\n        btn.type = 'button';\r\n        btn.className = 'cls-bmwc-vin__page-btn' + (active ? ' cls-bmwc-vin__page-btn--active' : '');\r\n        btn.textContent = label;\r\n        if (disabled) btn.disabled = true;\r\n        btn.addEventListener('click', function(){\r\n            if (btn.disabled) return;\r\n            currentPage = targetPage;\r\n            runSearch();\r\n            if (els.products) {\r\n                try { els.products.scrollIntoView({ behavior: 'smooth', block: 'start' }); } catch(e) {}\r\n            }\r\n        });\r\n        return btn;\r\n    }\r\n\r\n    function renderCount(pg) {\r\n        if (!els.count) return;\r\n        clearChildren(els.count);\r\n\r\n        if (!pg || !pg.total) {\r\n            var zero = document.createElement('strong');\r\n            zero.textContent = '0';\r\n            els.count.appendChild(zero);\r\n            els.count.appendChild(document.createTextNode(' produktow dla tego modelu'));\r\n            return;\r\n        }\r\n\r\n        els.count.appendChild(document.createTextNode('Znaleziono '));\r\n        var s = document.createElement('strong');\r\n        s.textContent = pg.total;\r\n        els.count.appendChild(s);\r\n        els.count.appendChild(document.createTextNode(' produktow - strona ' + pg.page + ' z ' + pg.total_pages));\r\n    }\r\n\r\n    function clearChildren(el) {\r\n        while (el.firstChild) el.removeChild(el.firstChild);\r\n    }\r\n\r\n    \/\/ Auto-recovery z URL ?vin= - wypelniamy pole ale NIE odpalamy search automatycznie\r\n    \/\/ (klient sam klika Szukaj - mniej confusing UX, brak natychmiastowych bledow)\r\n    try {\r\n        var params = new URLSearchParams(window.location.search);\r\n        var urlVin = params.get('vin');\r\n        if (urlVin && \/^[A-HJ-NPR-Z0-9]{17}$\/i.test(urlVin)) {\r\n            els.input.value = urlVin.toUpperCase();\r\n            if (els.counter) {\r\n                els.counter.textContent = '17\/17';\r\n                els.counter.style.color = 'var(--bmwc-success)';\r\n            }\r\n            window.history.replaceState({}, document.title, window.location.pathname);\r\n        }\r\n    } catch(e) {\r\n        console.warn('[BMW VIN] URL recovery error:', e);\r\n    }\r\n\r\n})();\r\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-81523","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/pages\/81523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/comments?post=81523"}],"version-history":[{"count":1,"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/pages\/81523\/revisions"}],"predecessor-version":[{"id":81524,"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/pages\/81523\/revisions\/81524"}],"wp:attachment":[{"href":"https:\/\/bmwparts24.pl\/de\/wp-json\/wp\/v2\/media?parent=81523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}