From 7076343338ae3439f3c86f01144818abe8c31978 Mon Sep 17 00:00:00 2001 From: George Halkiadakis Date: Sun, 12 Mar 2023 07:16:23 +0200 Subject: add container helpers; constuct public directory-tree --- html/content/Fonts/CFAstyStd-Bold.woff2 | Bin 0 -> 27476 bytes html/content/Fonts/CFAstyStd-Book.woff2 | Bin 0 -> 38112 bytes html/content/Fonts/CFAstyStd-Medium.woff2 | Bin 0 -> 27632 bytes html/content/Fonts/iconfont.svg | 495 + html/content/Fonts/iconfont.ttf | Bin 0 -> 52712 bytes html/content/Fonts/iconfont.woff | Bin 0 -> 32812 bytes html/content/Fonts/iconfont.woff2 | Bin 0 -> 28584 bytes html/content/Media/atcom.svg | 48 + html/content/Media/email/check.png | Bin 0 -> 2022 bytes html/content/Media/email/product.jpg | Bin 0 -> 4438 bytes html/content/css/email.css | 478 + html/content/css/main.css | 14508 +++++++++++++++++++ html/content/css/main.min.css | 2 + html/content/css/overides.css | 18 + html/content/fonts/CFAstyStd-Bold.woff | Bin 0 -> 36252 bytes html/content/fonts/CFAstyStd-Bold.woff2 | Bin 0 -> 27476 bytes html/content/fonts/CFAstyStd-Book.woff | Bin 0 -> 58604 bytes html/content/fonts/CFAstyStd-Book.woff2 | Bin 0 -> 38112 bytes html/content/fonts/CFAstyStd-Medium.woff | Bin 0 -> 36568 bytes html/content/fonts/CFAstyStd-Medium.woff2 | Bin 0 -> 27632 bytes html/content/fonts/iconfont.svg | 495 + html/content/fonts/iconfont.ttf | Bin 0 -> 52712 bytes html/content/fonts/iconfont.woff | Bin 0 -> 32812 bytes html/content/fonts/iconfont.woff2 | Bin 0 -> 28584 bytes .../1243x385/jpg/files/pageTitleAnakoinoseis.jpg | Bin 0 -> 394869 bytes .../1243x385/jpg/files/pageTitleDiagonismoi.jpg | Bin 0 -> 393490 bytes .../1243x385/jpg/files/pageTitleKatalogoi.jpg | Bin 0 -> 732690 bytes .../1243x385/jpg/files/pageTitleKatastimata.jpg | Bin 0 -> 425604 bytes .../images/1243x385/jpg/files/pageTitleOrario.jpg | Bin 0 -> 405802 bytes html/content/images/1243x385/png/files/emarket.png | Bin 0 -> 712842 bytes .../images/140x42/png/Content/media/appstore.webp | Bin 0 -> 1654 bytes .../140x42/png/Content/media/googlePlay.webp | Bin 0 -> 1594 bytes .../300x300/png/Content/media/sampleProduct.jp2 | Bin 0 -> 397 bytes .../300x300/png/Content/media/sampleProduct.jpg | Bin 0 -> 522 bytes .../300x300/png/Content/media/sampleProduct.png | Bin 0 -> 688 bytes .../300x300/png/Content/media/sampleProduct.webp | Bin 0 -> 226 bytes .../h20/png/Content/media/cards/dinersClub.png | Bin 0 -> 388 bytes .../h20/png/Content/media/cards/dinersClub.webp | Bin 0 -> 228 bytes .../h20/png/Content/media/cards/mastercard.png | Bin 0 -> 774 bytes .../h20/png/Content/media/cards/mastercard.webp | Bin 0 -> 388 bytes .../images/h20/png/Content/media/cards/visa.png | Bin 0 -> 726 bytes .../images/h20/png/Content/media/cards/visa.webp | Bin 0 -> 390 bytes html/content/js/Cart/miniCart.js | 96 + html/content/js/Filters/filterStatus.js | 113 + html/content/js/Filters/filters.js | 110 + html/content/js/Filters/filtersBar.js | 32 + html/content/js/Filters/range.js | 98 + html/content/js/Forms/ajaxForm.js | 188 + html/content/js/Forms/clearinput.js | 16 + html/content/js/Forms/customValidators.js | 11 + html/content/js/Forms/password.js | 15 + html/content/js/Forms/select.js | 52 + html/content/js/Forms/serialize.js | 30 + html/content/js/Forms/textarea.js | 26 + html/content/js/Forms/validateform.js | 3 + html/content/js/Images/lazyload.js | 61 + html/content/js/Modals/modal.js | 6 + html/content/js/Plugins/accordion.js | 43 + html/content/js/Plugins/breadcrumb.js | 9 + html/content/js/Plugins/copy.js | 25 + html/content/js/Plugins/expand.js | 38 + html/content/js/Plugins/expandText.js | 5 + html/content/js/Plugins/fileinput.js | 20 + html/content/js/Plugins/gallery.js | 51 + html/content/js/Plugins/infoPopup.js | 8 + html/content/js/Plugins/initialize.js | 11 + html/content/js/Plugins/intersecting.js | 18 + html/content/js/Plugins/menu.js | 97 + html/content/js/Plugins/quantity.js | 55 + html/content/js/Plugins/scrollShadowHor.js | 42 + html/content/js/Plugins/scrollShadowVert.js | 57 + html/content/js/Plugins/tabs.js | 28 + html/content/js/Plugins/tabtoggle.js | 27 + html/content/js/Plugins/tooltip.js | 45 + html/content/js/Products/productHeader.js | 21 + html/content/js/Products/productImageModal.js | 47 + html/content/js/Products/productattr.js | 11 + html/content/js/Sliders/productsSlider.js | 45 + html/content/js/Sliders/slider.js | 42 + html/content/js/Utils/Event.js | 13 + html/content/js/Utils/EventUtils.js | 75 + html/content/js/Utils/apiready.js | 15 + html/content/js/Utils/confirm.js | 27 + html/content/js/Utils/debounce.js | 16 + html/content/js/Utils/defineApi.js | 9 + html/content/js/Utils/destroyevent.js | 11 + html/content/js/Utils/dom.js | 68 + html/content/js/Utils/domHelper.js | 375 + html/content/js/Utils/enabled.js | 6 + html/content/js/Utils/getApis.js | 17 + html/content/js/Utils/throttle.js | 15 + html/content/js/Utils/whenAll.js | 13 + html/content/js/Wishlist/wishlistbutton.js | 25 + html/content/lib/current-device.min.js | 2 + html/content/lib/emitter/dist/emitter.js | 88 + .../jquery.validate.unobtrusive.js | 432 + .../jquery-validation/dist/additional-methods.js | 1158 ++ .../lib/jquery-validation/dist/jquery.validate.js | 1601 ++ html/content/lib/jquery/dist/jquery.js | 10872 ++++++++++++++ html/content/lib/nouislider.min.js | 1 + html/content/lib/plugins/plugins.js | 1130 ++ html/content/lib/plugins/plugins.min.js | 1 + html/content/lib/plugins/plugins.setup.js | 178 + html/content/lib/require/AttributePlugin.js | 138 + html/content/lib/require/Require.js | 848 ++ html/content/lib/require/plugins.attribute.js | 219 + .../content/lib/require/plugins.attribute.setup.js | 94 + html/content/lib/require/require.files.js | 75 + html/content/lib/require/require.slim.js | 492 + html/content/lib/swiper-bundle.min.js | 14 + html/content/lib/wNumb.min.js | 1 + html/content/media/badges/aplesprakseislogo.svg | 52 + html/content/media/badges/new.svg | 4 + html/content/media/content/omilos-sklaveniti.png | Bin 0 -> 89090 bytes html/content/media/delivery.svg | 24 + html/content/media/deliverySuccess.svg | 22 + html/content/media/exclusive.svg | 5 + html/content/media/icon-mylists-tennis.svg | 1 + html/content/media/icon-mylists-xmas.svg | 5 + html/content/media/logo.svg | 16 + html/content/media/logoWhite.svg | 16 + html/content/media/notsupported.svg | 347 + html/content/media/orderFail.svg | 23 + html/content/media/pickup.svg | 28 + html/content/media/powered-by-google-on-white3.png | Bin 0 -> 1616 bytes html/content/media/secure.png | Bin 0 -> 1346 bytes html/content/media/sklavenitisMask.svg | 15 + html/content/media/tags/bio.svg | 4 + html/content/media/tags/noglutten.svg | 4 + html/content/media/tags/nolaktose.svg | 5 + html/content/media/tags/pge.svg | 54 + html/content/media/tags/vegan.svg | 4 + html/content/media/tickFilled.svg | 4 + html/content/media/wood.png | Bin 0 -> 27162 bytes 134 files changed, 36308 insertions(+) create mode 100644 html/content/Fonts/CFAstyStd-Bold.woff2 create mode 100644 html/content/Fonts/CFAstyStd-Book.woff2 create mode 100644 html/content/Fonts/CFAstyStd-Medium.woff2 create mode 100644 html/content/Fonts/iconfont.svg create mode 100644 html/content/Fonts/iconfont.ttf create mode 100644 html/content/Fonts/iconfont.woff create mode 100644 html/content/Fonts/iconfont.woff2 create mode 100644 html/content/Media/atcom.svg create mode 100644 html/content/Media/email/check.png create mode 100644 html/content/Media/email/product.jpg create mode 100644 html/content/css/email.css create mode 100644 html/content/css/main.css create mode 100644 html/content/css/main.min.css create mode 100644 html/content/css/overides.css create mode 100644 html/content/fonts/CFAstyStd-Bold.woff create mode 100644 html/content/fonts/CFAstyStd-Bold.woff2 create mode 100644 html/content/fonts/CFAstyStd-Book.woff create mode 100644 html/content/fonts/CFAstyStd-Book.woff2 create mode 100644 html/content/fonts/CFAstyStd-Medium.woff create mode 100644 html/content/fonts/CFAstyStd-Medium.woff2 create mode 100644 html/content/fonts/iconfont.svg create mode 100644 html/content/fonts/iconfont.ttf create mode 100644 html/content/fonts/iconfont.woff create mode 100644 html/content/fonts/iconfont.woff2 create mode 100644 html/content/images/1243x385/jpg/files/pageTitleAnakoinoseis.jpg create mode 100644 html/content/images/1243x385/jpg/files/pageTitleDiagonismoi.jpg create mode 100644 html/content/images/1243x385/jpg/files/pageTitleKatalogoi.jpg create mode 100644 html/content/images/1243x385/jpg/files/pageTitleKatastimata.jpg create mode 100644 html/content/images/1243x385/jpg/files/pageTitleOrario.jpg create mode 100644 html/content/images/1243x385/png/files/emarket.png create mode 100644 html/content/images/140x42/png/Content/media/appstore.webp create mode 100644 html/content/images/140x42/png/Content/media/googlePlay.webp create mode 100644 html/content/images/300x300/png/Content/media/sampleProduct.jp2 create mode 100644 html/content/images/300x300/png/Content/media/sampleProduct.jpg create mode 100644 html/content/images/300x300/png/Content/media/sampleProduct.png create mode 100644 html/content/images/300x300/png/Content/media/sampleProduct.webp create mode 100644 html/content/images/h20/png/Content/media/cards/dinersClub.png create mode 100644 html/content/images/h20/png/Content/media/cards/dinersClub.webp create mode 100644 html/content/images/h20/png/Content/media/cards/mastercard.png create mode 100644 html/content/images/h20/png/Content/media/cards/mastercard.webp create mode 100644 html/content/images/h20/png/Content/media/cards/visa.png create mode 100644 html/content/images/h20/png/Content/media/cards/visa.webp create mode 100644 html/content/js/Cart/miniCart.js create mode 100644 html/content/js/Filters/filterStatus.js create mode 100644 html/content/js/Filters/filters.js create mode 100644 html/content/js/Filters/filtersBar.js create mode 100644 html/content/js/Filters/range.js create mode 100644 html/content/js/Forms/ajaxForm.js create mode 100644 html/content/js/Forms/clearinput.js create mode 100644 html/content/js/Forms/customValidators.js create mode 100644 html/content/js/Forms/password.js create mode 100644 html/content/js/Forms/select.js create mode 100644 html/content/js/Forms/serialize.js create mode 100644 html/content/js/Forms/textarea.js create mode 100644 html/content/js/Forms/validateform.js create mode 100644 html/content/js/Images/lazyload.js create mode 100644 html/content/js/Modals/modal.js create mode 100644 html/content/js/Plugins/accordion.js create mode 100644 html/content/js/Plugins/breadcrumb.js create mode 100644 html/content/js/Plugins/copy.js create mode 100644 html/content/js/Plugins/expand.js create mode 100644 html/content/js/Plugins/expandText.js create mode 100644 html/content/js/Plugins/fileinput.js create mode 100644 html/content/js/Plugins/gallery.js create mode 100644 html/content/js/Plugins/infoPopup.js create mode 100644 html/content/js/Plugins/initialize.js create mode 100644 html/content/js/Plugins/intersecting.js create mode 100644 html/content/js/Plugins/menu.js create mode 100644 html/content/js/Plugins/quantity.js create mode 100644 html/content/js/Plugins/scrollShadowHor.js create mode 100644 html/content/js/Plugins/scrollShadowVert.js create mode 100644 html/content/js/Plugins/tabs.js create mode 100644 html/content/js/Plugins/tabtoggle.js create mode 100644 html/content/js/Plugins/tooltip.js create mode 100644 html/content/js/Products/productHeader.js create mode 100644 html/content/js/Products/productImageModal.js create mode 100644 html/content/js/Products/productattr.js create mode 100644 html/content/js/Sliders/productsSlider.js create mode 100644 html/content/js/Sliders/slider.js create mode 100644 html/content/js/Utils/Event.js create mode 100644 html/content/js/Utils/EventUtils.js create mode 100644 html/content/js/Utils/apiready.js create mode 100644 html/content/js/Utils/confirm.js create mode 100644 html/content/js/Utils/debounce.js create mode 100644 html/content/js/Utils/defineApi.js create mode 100644 html/content/js/Utils/destroyevent.js create mode 100644 html/content/js/Utils/dom.js create mode 100644 html/content/js/Utils/domHelper.js create mode 100644 html/content/js/Utils/enabled.js create mode 100644 html/content/js/Utils/getApis.js create mode 100644 html/content/js/Utils/throttle.js create mode 100644 html/content/js/Utils/whenAll.js create mode 100644 html/content/js/Wishlist/wishlistbutton.js create mode 100644 html/content/lib/current-device.min.js create mode 100644 html/content/lib/emitter/dist/emitter.js create mode 100644 html/content/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 html/content/lib/jquery-validation/dist/additional-methods.js create mode 100644 html/content/lib/jquery-validation/dist/jquery.validate.js create mode 100644 html/content/lib/jquery/dist/jquery.js create mode 100644 html/content/lib/nouislider.min.js create mode 100644 html/content/lib/plugins/plugins.js create mode 100644 html/content/lib/plugins/plugins.min.js create mode 100644 html/content/lib/plugins/plugins.setup.js create mode 100644 html/content/lib/require/AttributePlugin.js create mode 100644 html/content/lib/require/Require.js create mode 100644 html/content/lib/require/plugins.attribute.js create mode 100644 html/content/lib/require/plugins.attribute.setup.js create mode 100644 html/content/lib/require/require.files.js create mode 100644 html/content/lib/require/require.slim.js create mode 100644 html/content/lib/swiper-bundle.min.js create mode 100644 html/content/lib/wNumb.min.js create mode 100644 html/content/media/badges/aplesprakseislogo.svg create mode 100644 html/content/media/badges/new.svg create mode 100644 html/content/media/content/omilos-sklaveniti.png create mode 100644 html/content/media/delivery.svg create mode 100644 html/content/media/deliverySuccess.svg create mode 100644 html/content/media/exclusive.svg create mode 100644 html/content/media/icon-mylists-tennis.svg create mode 100644 html/content/media/icon-mylists-xmas.svg create mode 100644 html/content/media/logo.svg create mode 100644 html/content/media/logoWhite.svg create mode 100644 html/content/media/notsupported.svg create mode 100644 html/content/media/orderFail.svg create mode 100644 html/content/media/pickup.svg create mode 100644 html/content/media/powered-by-google-on-white3.png create mode 100644 html/content/media/secure.png create mode 100644 html/content/media/sklavenitisMask.svg create mode 100644 html/content/media/tags/bio.svg create mode 100644 html/content/media/tags/noglutten.svg create mode 100644 html/content/media/tags/nolaktose.svg create mode 100644 html/content/media/tags/pge.svg create mode 100644 html/content/media/tags/vegan.svg create mode 100644 html/content/media/tickFilled.svg create mode 100644 html/content/media/wood.png (limited to 'html/content') diff --git a/html/content/Fonts/CFAstyStd-Bold.woff2 b/html/content/Fonts/CFAstyStd-Bold.woff2 new file mode 100644 index 0000000..1e64724 Binary files /dev/null and b/html/content/Fonts/CFAstyStd-Bold.woff2 differ diff --git a/html/content/Fonts/CFAstyStd-Book.woff2 b/html/content/Fonts/CFAstyStd-Book.woff2 new file mode 100644 index 0000000..0dd75b1 Binary files /dev/null and b/html/content/Fonts/CFAstyStd-Book.woff2 differ diff --git a/html/content/Fonts/CFAstyStd-Medium.woff2 b/html/content/Fonts/CFAstyStd-Medium.woff2 new file mode 100644 index 0000000..8067163 Binary files /dev/null and b/html/content/Fonts/CFAstyStd-Medium.woff2 differ diff --git a/html/content/Fonts/iconfont.svg b/html/content/Fonts/iconfont.svg new file mode 100644 index 0000000..eefc590 --- /dev/null +++ b/html/content/Fonts/iconfont.svg @@ -0,0 +1,495 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/html/content/Fonts/iconfont.ttf b/html/content/Fonts/iconfont.ttf new file mode 100644 index 0000000..af098dd Binary files /dev/null and b/html/content/Fonts/iconfont.ttf differ diff --git a/html/content/Fonts/iconfont.woff b/html/content/Fonts/iconfont.woff new file mode 100644 index 0000000..28f14dd Binary files /dev/null and b/html/content/Fonts/iconfont.woff differ diff --git a/html/content/Fonts/iconfont.woff2 b/html/content/Fonts/iconfont.woff2 new file mode 100644 index 0000000..278d0e1 Binary files /dev/null and b/html/content/Fonts/iconfont.woff2 differ diff --git a/html/content/Media/atcom.svg b/html/content/Media/atcom.svg new file mode 100644 index 0000000..e1c72d6 --- /dev/null +++ b/html/content/Media/atcom.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/html/content/Media/email/check.png b/html/content/Media/email/check.png new file mode 100644 index 0000000..b342400 Binary files /dev/null and b/html/content/Media/email/check.png differ diff --git a/html/content/Media/email/product.jpg b/html/content/Media/email/product.jpg new file mode 100644 index 0000000..fe05396 Binary files /dev/null and b/html/content/Media/email/product.jpg differ diff --git a/html/content/css/email.css b/html/content/css/email.css new file mode 100644 index 0000000..0bb6d48 --- /dev/null +++ b/html/content/css/email.css @@ -0,0 +1,478 @@ +p { + margin: 10px 0; + padding: 0; + color: #0E0C0C; + font-family: Arial, Helvetica, sans-serif; + font-style: normal; + font-weight: normal; + font-size: 15px; + line-height: 24px; + letter-spacing: normal; +} + +table { + border-collapse: collapse; +} + +h1, h2, h3, h4, h5, h6 { + display: block; + margin: 0; + padding: 0; +} + +img, a img { + border: 0; + height: auto; + outline: none; + text-decoration: none; +} + +body, #bodyTable, #bodyCell { + height: 100%; + margin: 0; + padding: 0; + width: 100%; +} + +.mcnPreviewText { + display: none !important; +} + +#outlook a { + padding: 0; +} + +img { + -ms-interpolation-mode: bicubic; +} + +table { + mso-table-lspace: 0pt; + mso-table-rspace: 0pt; +} + +.ReadMsgBody { + width: 100%; +} + +.ExternalClass { + width: 100%; +} + +p, a, li, td, blockquote { + mso-line-height-rule: exactly; +} + + a[href^=tel], a[href^=sms] { + color: inherit; + cursor: default; + text-decoration: none; + } + +p, a, li, td, body, table, blockquote { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +.ExternalClass, .ExternalClass p, .ExternalClass td, .ExternalClass div, .ExternalClass span, .ExternalClass font { + line-height: 100%; +} + +a[x-apple-data-detectors] { + color: inherit !important; + text-decoration: none !important; + font-size: inherit !important; + font-family: inherit !important; + font-weight: inherit !important; + line-height: inherit !important; +} + +.templateContainer { + max-width: 700px !important; +} + +a.mcnButton { + display: block; +} + +.mcnImage, .mcnRetinaImage { + vertical-align: bottom; +} + +.mcnTextContent { + word-break: break-word; +} + + .mcnTextContent img { + height: auto !important; + } + +.mcnDividerBlock { + table-layout: fixed !important; +} + +.noBorder { + border: none !important; +} + +h1 { + color: #333333; + font-family: Arial, Helvetica, sans-serif; + font-size: 16px; + font-style: normal; + font-weight: bold; + line-height: 24px; + letter-spacing: -0.02em; + text-align: center; + padding-bottom: 14px; +} + +h2 { + color: #0E0C0C; + font-family: Arial, Helvetica, sans-serif; + font-size: 22px; + font-style: normal; + font-weight: bold; + line-height: 30px; + letter-spacing: normal; + text-align: center; + text-transform: uppercase; + padding-bottom: 8px; +} + +h3 { + color: #0E0C0C; + font-family: Arial, Helvetica, sans-serif; + font-size: 22px; + font-style: normal; + font-weight: bold; + line-height: 30px; + letter-spacing: normal; + text-align: center; + text-transform: uppercase; + padding-bottom: 8px; +} + +h4 { + color: #0E0C0C; + font-family: Arial, Helvetica, sans-serif; + font-size: 22px; + font-style: normal; + font-weight: bold; + line-height: 30px; + letter-spacing: normal; + text-align: center; + text-transform: uppercase; + padding-bottom: 8px; +} + + h1 span, + h2 span, + h3 span, + h4 span { + font-weight: normal; + text-transform: none; + } + +#templateHeader { + background-color: #ffffff; + background-image: none; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border-top: 0; + border-bottom: 1px solid #e3e3e3; + padding-top: 0px; + padding-bottom: 20px; +} + + #templateHeader.default { + border: none; + padding: 0; + } + +.headerContainer { + background-color: transparent; + background-image: none; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border-top: 0; + border-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + + .headerContainer .mcnTextContent, .headerContainer .mcnTextContent p { + color: #757575; + font-family: Arial, Helvetica, sans-serif; + font-size: 16px; + line-height: 150%; + text-align: left; + } + + .headerContainer .mcnTextContent a, .headerContainer .mcnTextContent p a { + color: #007C89; + font-weight: normal; + text-decoration: underline; + } + +#templateBody { + background-color: #ffffff; + background-image: none; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border-top: 0; + border-bottom: 0; + padding-top: 24px; + padding-bottom: 32px; +} + + #templateBody a { + color: #F47920; + text-decoration: none; + } + + #templateBody p { + margin: 0; + color: #333333; + font-family: Arial, Helvetica, sans-serif; + font-size: 15px; + font-style: normal; + font-weight: normal; + line-height: 22px; + letter-spacing: -0.02em; + padding-bottom: 5px; + } + +#templateBodyMsg p { + max-width: 586px; +} + +.bodyContainer { + background-color: transparent; + background-image: none; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border-top: 0; + border-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + + .bodyContainer .mcnTextContent, + .bodyContainer .mcnTextContent p { + color: #333333; + font-family: Arial, Helvetica, sans-serif; + font-size: 15px; + line-height: 150%; + text-align: left; + } + + .bodyContainer .mcnTextContent a, + .bodyContainer .mcnTextContent p a { + color: #F47920; + font-weight: normal; + text-decoration: underline; + } + +#templateAfterFooter p { + margin: 0; + color: #333333; + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-style: normal; + font-weight: normal; + line-height: 24px; + letter-spacing: 0.02em; +} + + #templateAfterFooter p a { + margin: 0; + color: #F47920; + font-family: Arial, Helvetica, sans-serif; + font-size: 13px; + font-style: normal; + font-weight: normal; + line-height: 24px; + letter-spacing: 0.02em; + } + +#templateFooter { + background-color: #333333; + background-image: none; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border-top: 0; + border-bottom: 0; + padding-top: 16px; + padding-bottom: 16px; +} + +.footerContainer { + background-color: transparent; + background-image: none; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + border-top: 0; + border-bottom: 0; + padding-top: 0px; + padding-bottom: 0px; + max-width: 700px !important; +} + + .footerContainer .bodyContainer { + padding: 0 30px; + } + + .footerContainer ul { + padding: 0; + margin: 0; + list-style-type: none; + text-align: center; + } + + .footerContainer ul li { + display: inline-block; + margin-right: 30px; + } + + .footerContainer ul li:last-child { + margin-right: 0; + } + + .footerContainer .mcnTextBlockInner, + .footerContainer .mcnTextBlockInner p { + color: #FFF; + font-family: Arial, Helvetica, sans-serif; + font-size: 15px; + line-height: 24px; + letter-spacing: 0.02em; + } + + .footerContainer .mcnTextBlockInner a, + .footerContainer .mcnTextBlockInner p a { + color: #FFF; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + line-height: 18px; + text-decoration: none; + } + +.templateHeroContainer { + max-width: 700px; +} + +.heroContainer { + position: relative; +} + + .heroContainer img { + display: block; + width: 100%; + height: auto; + } + + .heroContainer p { + color: #FFF; + font-family: Arial, Helvetica, sans-serif; + font-size: 40px; + line-height: 50px; + letter-spacing: -0.02em; + text-transform: uppercase; + padding: 0 120px; + position: absolute; + left: 0; + bottom: 80px; + width: 100%; + text-align: center; + font-weight: normal; + margin: 0; + } + +#templateProducts { + padding: 0 0 90px; +} + + #templateProducts .mcnTextBlockInner { + padding: 0 20px; + } + + #templateProducts span { + display: block; + font-family: Arial, Helvetica, sans-serif; + font-size: 15px; + line-height: 24px; + font-weight: bold; + text-transform: uppercase; + padding-top: 10px; + } + +.column { + display: inline-block; + vertical-align: top; + width: 50%; +} + +.label { + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + line-height: 24px; + font-weight: bold; + text-transform: uppercase; + color: #0E0C0C; + padding-bottom: 2px; +} + +strong { + font-family: Arial, Helvetica, sans-serif; + font-weight: bold; +} + +.tdMinWidth { + max-width: 310px; +} + +@media only screen and (max-width:700px) { + .templateContainer { + width: 360px !important; + } + + .bodyContainer { + padding-left: 0 !important; + padding-right: 0 !important; + } + + .footerContainer ul li { + display: block; + margin-right: 0; + margin-bottom: 16px; + } + + .footerContainer ul li:last-child { + margin-bottom: 0; + } + + .heroContainer p { + font-size: 30px; + line-height: 40px; + padding: 0 30px; + bottom: 30px; + } + + .tdMinWidth { + max-width: 200px; + } + + .halfColumn { + padding: 20px 10px 0 !important; + } +} + +/* td { + outline: 1px solid red; +}*/ \ No newline at end of file diff --git a/html/content/css/main.css b/html/content/css/main.css new file mode 100644 index 0000000..be1dea5 --- /dev/null +++ b/html/content/css/main.css @@ -0,0 +1,14508 @@ +:root { + --top: 0px; + --windowHeight: 100%; + --productPadding: 16px; + --gridSpace: 48px; + --iconButtonSpace: 11px; + --headerHeight: 136px; + --fieldColumnSpace: 16px; + --fieldRowSpace: 20px; + --smallField: 130px; + --checkboxRadioSpace: 16px; + --inputBorderColor: #a6a6a6; + --inputLabelPadding: 16px; + --wrapperXXS: 816px; + --wrapperXS: 984px; + --wrapperS: 1142px; + --wrapper: 1240px; + --wrapperL: 1514px; + --wrapperFull: 1920px; + } /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + *, + *::before, + *::after { + box-sizing: border-box; + } + html { + line-height: 1.15; + -webkit-text-size-adjust: 100%; + } + body { + margin: 0; + -webkit-font-smoothing: antialiased; + } + h1 { + font-size: 2em; + margin: 0.67em 0; + } + hr { + box-sizing: content-box; + height: 0; + overflow: visible; + } + pre { + font-family: monospace, monospace; + font-size: 1em; + } + a { + background-color: transparent; + } + abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + b, + strong { + font-weight: bolder; + } + code, + kbd, + samp { + font-family: monospace, monospace; + font-size: 1em; + } + small { + font-size: 80%; + } + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + img { + border-style: none; + } + button, + input, + optgroup, + select, + textarea { + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; + } + button, + input { + overflow: visible; + } + button, + select { + text-transform: none; + } + button, + [type="button"], + [type="reset"], + [type="submit"] { + -webkit-appearance: button; + } + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; + } + button:-moz-focusring, + [type="button"]:-moz-focusring, + [type="reset"]:-moz-focusring, + [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; + } + fieldset { + padding: 0.35em 0.75em 0.625em; + } + legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; + } + progress { + vertical-align: baseline; + } + textarea { + overflow: auto; + } + [type="checkbox"], + [type="radio"] { + box-sizing: border-box; + padding: 0; + } + [type="number"]::-webkit-inner-spin-button, + [type="number"]::-webkit-outer-spin-button { + height: auto; + } + [type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; + } + [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; + } + details { + display: block; + } + summary { + display: list-item; + } + template { + display: none; + } + [hidden] { + display: none; + } + + .noUi-target, + .noUi-target * { + -webkit-touch-callout: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-user-select: none; + touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + user-select: none; + box-sizing: border-box; + } + .noUi-target { + position: relative; + } + .noUi-base, + .noUi-connects { + width: 100%; + height: 100%; + position: relative; + z-index: 1; + } + .noUi-connects { + overflow: hidden; + z-index: 0; + } + .noUi-connect, + .noUi-origin { + will-change: transform; + position: absolute; + z-index: 1; + top: 0; + right: 0; + height: 100%; + width: 100%; + -ms-transform-origin: 0 0; + -webkit-transform-origin: 0 0; + -webkit-transform-style: preserve-3d; + transform-origin: 0 0; + -webkit-transform-style: flat; + transform-style: flat; + } + .noUi-txt-dir-rtl.noUi-horizontal .noUi-origin { + left: 0; + right: auto; + } + .noUi-vertical .noUi-origin { + top: -100%; + width: 0; + } + .noUi-horizontal .noUi-origin { + height: 0; + } + .noUi-handle { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + position: absolute; + } + .noUi-touch-area { + height: 100%; + width: 100%; + } + .noUi-state-tap .noUi-connect, + .noUi-state-tap .noUi-origin { + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + } + .noUi-state-drag * { + cursor: inherit !important; + } + .noUi-horizontal { + height: 18px; + } + .noUi-horizontal .noUi-handle { + width: 34px; + height: 28px; + right: -17px; + top: -6px; + } + .noUi-vertical { + width: 18px; + } + .noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + right: -6px; + bottom: -17px; + } + .noUi-txt-dir-rtl.noUi-horizontal .noUi-handle { + left: -17px; + right: auto; + } + .noUi-target { + background: #fafafa; + border-radius: 4px; + border: 1px solid #d3d3d3; + box-shadow: inset 0 1px 1px #f0f0f0, 0 3px 6px -5px #bbb; + } + .noUi-connects { + border-radius: 3px; + } + .noUi-connect { + background: #3fb8af; + } + .noUi-draggable { + cursor: ew-resize; + } + .noUi-vertical .noUi-draggable { + cursor: ns-resize; + } + .noUi-handle { + border: 1px solid #d9d9d9; + border-radius: 3px; + background: #fff; + cursor: default; + box-shadow: inset 0 0 1px #fff, inset 0 1px 7px #ebebeb, 0 3px 6px -3px #bbb; + } + .noUi-active { + box-shadow: inset 0 0 1px #fff, inset 0 1px 7px #ddd, 0 3px 6px -3px #bbb; + } + .noUi-handle:before, + .noUi-handle:after { + content: ""; + display: block; + position: absolute; + height: 14px; + width: 1px; + background: #e8e7e6; + left: 14px; + top: 6px; + } + .noUi-handle:after { + left: 17px; + } + .noUi-vertical .noUi-handle:before, + .noUi-vertical .noUi-handle:after { + width: 14px; + height: 1px; + left: 6px; + top: 14px; + } + .noUi-vertical .noUi-handle:after { + top: 17px; + } + [disabled] .noUi-connect { + background: #b8b8b8; + } + [disabled].noUi-target, + [disabled].noUi-handle, + [disabled] .noUi-handle { + cursor: not-allowed; + } + .noUi-pips, + .noUi-pips * { + box-sizing: border-box; + } + .noUi-pips { + position: absolute; + color: #999; + } + .noUi-value { + position: absolute; + white-space: nowrap; + text-align: center; + } + .noUi-value-sub { + color: #ccc; + font-size: 10px; + } + .noUi-marker { + position: absolute; + background: #ccc; + } + .noUi-marker-sub { + background: #aaa; + } + .noUi-marker-large { + background: #aaa; + } + .noUi-pips-horizontal { + padding: 10px 0; + height: 80px; + top: 100%; + left: 0; + width: 100%; + } + .noUi-value-horizontal { + -webkit-transform: translate(-50%, 50%); + transform: translate(-50%, 50%); + } + .noUi-rtl .noUi-value-horizontal { + -webkit-transform: translate(50%, 50%); + transform: translate(50%, 50%); + } + .noUi-marker-horizontal.noUi-marker { + margin-left: -1px; + width: 2px; + height: 5px; + } + .noUi-marker-horizontal.noUi-marker-sub { + height: 10px; + } + .noUi-marker-horizontal.noUi-marker-large { + height: 15px; + } + .noUi-pips-vertical { + padding: 0 10px; + height: 100%; + top: 0; + left: 100%; + } + .noUi-value-vertical { + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + padding-left: 25px; + } + .noUi-rtl .noUi-value-vertical { + -webkit-transform: translate(0, 50%); + transform: translate(0, 50%); + } + .noUi-marker-vertical.noUi-marker { + width: 5px; + height: 2px; + margin-top: -1px; + } + .noUi-marker-vertical.noUi-marker-sub { + width: 10px; + } + .noUi-marker-vertical.noUi-marker-large { + width: 15px; + } + .noUi-tooltip { + display: block; + position: absolute; + border: 1px solid #d9d9d9; + border-radius: 3px; + background: #fff; + color: #000; + padding: 5px; + text-align: center; + white-space: nowrap; + } + .noUi-horizontal .noUi-tooltip { + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + left: 50%; + bottom: 120%; + } + .noUi-vertical .noUi-tooltip { + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + top: 50%; + right: 120%; + } + .noUi-horizontal .noUi-origin > .noUi-tooltip { + -webkit-transform: translate(50%, 0); + transform: translate(50%, 0); + left: auto; + bottom: 10px; + } + .noUi-vertical .noUi-origin > .noUi-tooltip { + -webkit-transform: translate(0, -18px); + transform: translate(0, -18px); + top: auto; + right: 28px; + } + @font-face { + font-family: "swiper-icons"; + src: url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA"); + font-weight: 400; + font-style: normal; + } + :root { + --swiper-theme-color: #007aff; + } + .swiper { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + z-index: 1; + } + .swiper-vertical > .swiper-wrapper { + flex-direction: column; + } + .swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: flex; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + box-sizing: content-box; + } + .swiper-android .swiper-slide, + .swiper-wrapper { + -webkit-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .swiper-pointer-events { + touch-action: pan-y; + } + .swiper-pointer-events.swiper-vertical { + touch-action: pan-x; + } + .swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; + transition-property: -webkit-transform; + transition-property: transform; + transition-property: transform, -webkit-transform; + } + .swiper-slide-invisible-blank { + visibility: hidden; + } + .swiper-autoheight, + .swiper-autoheight .swiper-slide { + height: auto; + } + .swiper-autoheight .swiper-wrapper { + align-items: flex-start; + transition-property: height, -webkit-transform; + transition-property: transform, height; + transition-property: transform, height, -webkit-transform; + } + .swiper-3d, + .swiper-3d.swiper-css-mode .swiper-wrapper { + -webkit-perspective: 1200px; + perspective: 1200px; + } + .swiper-3d .swiper-wrapper, + .swiper-3d .swiper-slide, + .swiper-3d .swiper-slide-shadow, + .swiper-3d .swiper-slide-shadow-left, + .swiper-3d .swiper-slide-shadow-right, + .swiper-3d .swiper-slide-shadow-top, + .swiper-3d .swiper-slide-shadow-bottom, + .swiper-3d .swiper-cube-shadow { + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + } + .swiper-3d .swiper-slide-shadow, + .swiper-3d .swiper-slide-shadow-left, + .swiper-3d .swiper-slide-shadow-right, + .swiper-3d .swiper-slide-shadow-top, + .swiper-3d .swiper-slide-shadow-bottom { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; + } + .swiper-3d .swiper-slide-shadow { + background: rgba(0, 0, 0, 0.15); + } + .swiper-3d .swiper-slide-shadow-left { + background-image: linear-gradient( + to left, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); + } + .swiper-3d .swiper-slide-shadow-right { + background-image: linear-gradient( + to right, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); + } + .swiper-3d .swiper-slide-shadow-top { + background-image: linear-gradient( + to top, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); + } + .swiper-3d .swiper-slide-shadow-bottom { + background-image: linear-gradient( + to bottom, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); + } + .swiper-css-mode > .swiper-wrapper { + overflow: auto; + scrollbar-width: none; + -ms-overflow-style: none; + } + .swiper-css-mode > .swiper-wrapper::-webkit-scrollbar { + display: none; + } + .swiper-css-mode > .swiper-wrapper > .swiper-slide { + scroll-snap-align: start start; + } + .swiper-horizontal.swiper-css-mode > .swiper-wrapper { + -ms-scroll-snap-type: x mandatory; + scroll-snap-type: x mandatory; + } + .swiper-vertical.swiper-css-mode > .swiper-wrapper { + -ms-scroll-snap-type: y mandatory; + scroll-snap-type: y mandatory; + } + .swiper-centered > .swiper-wrapper::before { + content: ""; + flex-shrink: 0; + order: 9999; + } + .swiper-centered.swiper-horizontal + > .swiper-wrapper + > .swiper-slide:first-child { + -webkit-margin-start: var(--swiper-centered-offset-before); + margin-inline-start: var(--swiper-centered-offset-before); + } + .swiper-centered.swiper-horizontal > .swiper-wrapper::before { + height: 100%; + min-height: 1px; + width: var(--swiper-centered-offset-after); + } + .swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child { + -webkit-margin-before: var(--swiper-centered-offset-before); + margin-block-start: var(--swiper-centered-offset-before); + } + .swiper-centered.swiper-vertical > .swiper-wrapper::before { + width: 100%; + min-width: 1px; + height: var(--swiper-centered-offset-after); + } + .swiper-centered > .swiper-wrapper > .swiper-slide { + scroll-snap-align: center center; + } + .swiper-virtual.swiper-css-mode .swiper-wrapper::after { + content: ""; + position: absolute; + left: 0; + top: 0; + pointer-events: none; + } + .swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after { + height: 1px; + width: var(--swiper-virtual-size); + } + .swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after { + width: 1px; + height: var(--swiper-virtual-size); + } + :root { + --swiper-navigation-size: 44px; + } + .swiper-button-prev, + .swiper-button-next { + position: absolute; + top: 50%; + width: calc(var(--swiper-navigation-size) / 44 * 27); + height: var(--swiper-navigation-size); + margin-top: calc(0px - var(--swiper-navigation-size) / 2); + z-index: 10; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: var(--swiper-navigation-color, var(--swiper-theme-color)); + } + .swiper-button-prev.swiper-button-disabled, + .swiper-button-next.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; + } + .swiper-button-prev:after, + .swiper-button-next:after { + font-family: swiper-icons; + font-size: var(--swiper-navigation-size); + text-transform: none !important; + letter-spacing: 0; + text-transform: none; + font-variant: initial; + line-height: 1; + } + .swiper-button-prev, + .swiper-rtl .swiper-button-next { + left: 10px; + right: auto; + } + .swiper-button-prev:after, + .swiper-rtl .swiper-button-next:after { + content: "prev"; + } + .swiper-button-next, + .swiper-rtl .swiper-button-prev { + right: 10px; + left: auto; + } + .swiper-button-next:after, + .swiper-rtl .swiper-button-prev:after { + content: "next"; + } + .swiper-button-lock { + display: none; + } + .swiper-pagination { + position: absolute; + text-align: center; + transition: 300ms opacity; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + z-index: 10; + } + .swiper-pagination.swiper-pagination-hidden { + opacity: 0; + } + .swiper-pagination-fraction, + .swiper-pagination-custom, + .swiper-horizontal > .swiper-pagination-bullets, + .swiper-pagination-bullets.swiper-pagination-horizontal { + bottom: 10px; + left: 0; + width: 100%; + } + .swiper-pagination-bullets-dynamic { + overflow: hidden; + font-size: 0; + } + .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + -webkit-transform: scale(0.33); + transform: scale(0.33); + position: relative; + } + .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { + -webkit-transform: scale(1); + transform: scale(1); + } + .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { + -webkit-transform: scale(1); + transform: scale(1); + } + .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { + -webkit-transform: scale(0.66); + transform: scale(0.66); + } + .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { + -webkit-transform: scale(0.33); + transform: scale(0.33); + } + .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { + -webkit-transform: scale(0.66); + transform: scale(0.66); + } + .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { + -webkit-transform: scale(0.33); + transform: scale(0.33); + } + .swiper-pagination-bullet { + width: var( + --swiper-pagination-bullet-width, + var(--swiper-pagination-bullet-size, 8px) + ); + height: var( + --swiper-pagination-bullet-height, + var(--swiper-pagination-bullet-size, 8px) + ); + display: inline-block; + border-radius: 50%; + background: var(--swiper-pagination-bullet-inactive-color, #000); + opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2); + } + button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } + .swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; + } + .swiper-pagination-bullet:only-child { + display: none !important; + } + .swiper-pagination-bullet-active { + opacity: var(--swiper-pagination-bullet-opacity, 1); + background: var(--swiper-pagination-color, var(--swiper-theme-color)); + } + .swiper-vertical > .swiper-pagination-bullets, + .swiper-pagination-vertical.swiper-pagination-bullets { + right: 10px; + top: 50%; + -webkit-transform: translate3d(0px, -50%, 0); + transform: translate3d(0px, -50%, 0); + } + .swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet, + .swiper-pagination-vertical.swiper-pagination-bullets + .swiper-pagination-bullet { + margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0; + display: block; + } + .swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic, + .swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 8px; + } + .swiper-vertical + > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet, + .swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet { + display: inline-block; + transition: 200ms top, 200ms -webkit-transform; + transition: 200ms transform, 200ms top; + transition: 200ms transform, 200ms top, 200ms -webkit-transform; + } + .swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet, + .swiper-pagination-horizontal.swiper-pagination-bullets + .swiper-pagination-bullet { + margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px); + } + .swiper-horizontal + > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic, + .swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + white-space: nowrap; + } + .swiper-horizontal + > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet, + .swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet { + transition: 200ms left, 200ms -webkit-transform; + transition: 200ms transform, 200ms left; + transition: 200ms transform, 200ms left, 200ms -webkit-transform; + } + .swiper-horizontal.swiper-rtl + > .swiper-pagination-bullets-dynamic + .swiper-pagination-bullet { + transition: 200ms right, 200ms -webkit-transform; + transition: 200ms transform, 200ms right; + transition: 200ms transform, 200ms right, 200ms -webkit-transform; + } + .swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; + } + .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: var(--swiper-pagination-color, var(--swiper-theme-color)); + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: left top; + transform-origin: left top; + } + .swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + -webkit-transform-origin: right top; + transform-origin: right top; + } + .swiper-horizontal > .swiper-pagination-progressbar, + .swiper-pagination-progressbar.swiper-pagination-horizontal, + .swiper-vertical + > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, + .swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite { + width: 100%; + height: 4px; + left: 0; + top: 0; + } + .swiper-vertical > .swiper-pagination-progressbar, + .swiper-pagination-progressbar.swiper-pagination-vertical, + .swiper-horizontal + > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, + .swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite { + width: 4px; + height: 100%; + left: 0; + top: 0; + } + .swiper-pagination-lock { + display: none; + } + .swiper-zoom-container { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; + } + .swiper-zoom-container > img, + .swiper-zoom-container > svg, + .swiper-zoom-container > canvas { + max-width: 100%; + max-height: 100%; + -o-object-fit: contain; + object-fit: contain; + } + .swiper-slide-zoomed { + cursor: move; + } + .swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + -webkit-transform-origin: 50%; + transform-origin: 50%; + -webkit-animation: swiper-preloader-spin 1s infinite linear; + animation: swiper-preloader-spin 1s infinite linear; + box-sizing: border-box; + border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color)); + border-radius: 50%; + border-top-color: transparent; + } + .swiper-lazy-preloader-white { + --swiper-preloader-color: #fff; + } + .swiper-lazy-preloader-black { + --swiper-preloader-color: #000; + } + @-webkit-keyframes swiper-preloader-spin { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + @keyframes swiper-preloader-spin { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + .swiper-fade.swiper-free-mode .swiper-slide { + transition-timing-function: ease-out; + } + .swiper-fade .swiper-slide { + pointer-events: none; + transition-property: opacity; + } + .swiper-fade .swiper-slide .swiper-slide { + pointer-events: none; + } + .swiper-fade .swiper-slide-active, + .swiper-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; + } + html.noScroll, + html.noScroll body { + overflow: hidden; + height: calc(var(--windowHeight) - 1px); + } + body.menuOpened { + left: 0; + overflow: hidden; + position: fixed; + top: 0; + width: 100%; + height: 100%; + } + body:not(.menuOpened) .mainLayer { + opacity: 0; + pointer-events: none; + } + .section { + margin-bottom: 64px; + } + .sectionTitle { + align-items: flex-end; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + margin-bottom: 20px; + text-align: left; + } + .sectionTitle--center { + justify-content: center; + } + .sectionTitle h2 { + font-size: 1.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.53; + color: #333; + margin: 0; + } + .sectionTitle h2 + p { + margin-top: 4px; + } + .sectionTitle p { + color: #404040; + font-size: 1rem; + line-height: 1.467; + } + .sectionTitle p:last-child { + margin-bottom: 0; + } + .sectionTitle .link, + .sectionTitle .text a, + .text .sectionTitle a, + .sectionTitle p a, + p .sectionTitle a { + margin-top: 4px; + } + .pageTitle { + position: relative; + height: 100px; + } + .mainLayout__content .pageTitle { + margin-left: calc(-1 * var(--mainLayoutSpace)); + width: calc(100% + var(--mainLayoutSpace) * 2); + } + .pageTitle img { + -o-object-fit: cover; + object-fit: cover; + width: 100%; + height: 100%; + } + .pageTitle .wrapper { + align-items: center; + display: inline-flex; + flex-direction: column; + justify-content: center; + position: relative; + text-align: center; + height: 100%; + } + .pageTitle h1 { + color: var(--fontcolor); + font-size: 2.875rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.0435; + margin: 0; + } + .pageTitle .em { + color: #f47920; + } + .pageTitle p { + color: #595959; + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.375; + margin: 0; + } + .pageTitle.pageTitle--image h1 { + text-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + } + .pageTitle--big { + align-items: center; + background: #f2efe8; + display: flex; + justify-content: center; + -webkit-mask: url(//storage.googleapis.com/pythia-files/emarket/sklavenitisMask.svg) center no-repeat; + mask: url(//storage.googleapis.com/pythia-files/emarket/sklavenitisMask.svg) center no-repeat; + -webkit-mask-size: auto 100%; + mask-size: auto 100%; + margin: 0 0 56px; + position: relative; + text-align: center; + height: 385px; + } + .pageTitle--big img { + -o-object-fit: cover; + object-fit: cover; + height: 100%; + max-width: 1243px; + } + .pageTitle--big h1 { + color: #fff; + font-size: 4.375rem; + line-height: 1; + text-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + } + [v-cloak]:not([v-cloak="visibility"]) { + display: none; + } + [v-cloak="visibility"] { + visibility: hidden; + } + .printRow { + margin-top: 24px; + padding-top: 16px; + text-align: right; + } + .printRow--border { + border-top: 1px solid #c2c2c2; + } + .asideHeader { + align-items: center; + background: #f2efe8; + display: flex; + flex-direction: column; + justify-content: center; + height: 100px; + } + .asideHeader__title { + color: #333; + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.334; + margin: 0; + } + .asideHeader__title:not(:last-child) { + margin-bottom: 4px; + } + .asideHeader__text { + color: #838385; + font-size: 0.875rem; + font-weight: 500; + line-height: 1.286; + } + .ordersBanner { + background: #f2efe8; + border-radius: 8px; + overflow: hidden; + padding: 32px; + position: relative; + } + .ordersBanner__img { + position: absolute; + right: 0; + top: 0; + width: 46%; + height: 100%; + } + .ordersBanner__img img { + -o-object-fit: cover; + object-fit: cover; + -o-object-position: left center; + object-position: left center; + width: 100%; + height: 100%; + } + .ordersBanner__icon { + flex-shrink: 0; + font-size: 3.4375rem; + margin-right: 32px; + } + .ordersBanner__text { + color: #333; + font-size: 1.0625rem; + letter-spacing: -0.03em; + line-height: 1.411; + margin: 0; + position: relative; + max-width: 496px; + } + .pageNav { + display: flex; + justify-content: space-between; + margin: 24px 0; + } + .pill { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.28; + background-color: #8dc63f; + border-radius: 100px; + color: #fff; + display: inline-block; + padding: 5px 12px; + } + @font-face { + font-family: "cfastystd"; + font-display: swap; + font-style: normal; + font-weight: 400; + src: url("../fonts/CFAstyStd-Book.woff2") format("woff2"), + url("../fonts/CFAstyStd-Book.woff") format("woff"); + } + @font-face { + font-family: "cfastystd"; + font-display: swap; + font-style: normal; + font-weight: 500; + src: url("../fonts/CFAstyStd-Medium.woff2") format("woff2"), + url("../fonts/CFAstyStd-Medium.woff") format("woff"); + } + @font-face { + font-family: "cfastystd"; + font-display: swap; + font-style: normal; + font-weight: 700; + src: url("../fonts/CFAstyStd-Bold.woff2") format("woff2"), + url("../fonts/CFAstyStd-Bold.woff") format("woff"); + } + .clearfix::after { + clear: both; + content: ""; + display: table; + } + .hide-text { + overflow: hidden; + padding: 0; + text-indent: 101%; + white-space: nowrap; + } + .visually-hidden { + border: 0; + clip: rect(0 0 0 0); + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + height: 1px; + } + .row { + display: flex; + flex-wrap: wrap; + } + .row--noWrap { + flex-wrap: nowrap; + } + .row--vStart { + align-items: flex-start; + } + .row--vCenter { + align-items: center; + } + .row--vEnd { + align-items: flex-end; + } + .row--hStart { + justify-content: flex-start; + } + .row--hCenter { + justify-content: center; + } + .row--hEnd { + justify-content: flex-end; + } + .row--space { + flex-wrap: nowrap; + justify-content: space-between; + } + .btnWrap { + --buttonsMarginH: 6px; + --buttonsMarginV: 6px; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + margin: 0 0 40px; + } + .btnWrap.field { + --buttonsMarginH: 24px; + } + .btnWrap--noMargin { + margin-bottom: 0; + } + .btnWrap--hCenter { + justify-content: center; + } + .btnWrap--hEnd { + justify-content: flex-end; + } + .btnWrap--hSpaceB { + justify-content: space-between; + } + .btnWrap--column { + flex-direction: column; + } + .btnWrap--column > *:not(:last-child) { + margin-bottom: var(--buttonsMarginV); + margin-right: 0; + } + .btnWrap .button { + margin: var(--buttonsMarginV) var(--buttonsMarginH); + } + .productThumbs .swiper-button-prev:before, + .productThumbs .swiper-button-next:before, + .productThumbs__slide:after, + .orderTrack__action:after, + .myList__new:after, + .myList__title:after, + .myList__icon:after, + .myList--box:after, + .landingItem--box .landingItem__title:after, + .landingItem__title:before, + .landingItem__link:before, + .addBox__link:before, + .userNav__link:after, + .contentBox__link:before, + .playvideo__icon, + .table tbody tr:after, + .storeHours:after, + .searchInput__submitInput, + .quantity.quantity--init .quantity__input, + .quantity--init:after, + .product__title:before, + .output--init .output__button:after, + .output__mainLink:after, + .loginWrap__img img, + .radiobutton__border, + .filtersApply .loader, + .contestBnr:after, + .catalogue__link:before, + .loginBtn .iconButton:after, + .loginBtn .selectedFilters__remove:after, + .article__link:before, + .pageTitle figure, + .pageTitle--big figure { + inset: 0; + position: absolute; + width: 100%; + height: 100%; + } + .separate { + margin: 0 16px; + } + .txtRight { + text-align: right; + } + .noWrap { + white-space: nowrap; + } + .couponBlock__clear, + .couponBlock__btn, + .playvideo__icon, + .social__link, + .iconButton, + .selectedFilters__remove, + .footer__listLink { + --buttonColor: #838385; + --buttonColorHover: #595959; + --buttonColorActive: #f47920; + } + .sitemapnav__link, + .myList__title, + .landingItem--box .landingItem__title, + .landingItem__link, + .pagination__link, + .output__link, + .output__mainLink, + .select__option, + .autocomplete__option, + .checkbox__label a, + .radiobutton__label a, + .deliveryTypeInfo__link, + .link, + .text a, + p a, + .iconButton--black, + .breadcrumb__itemLink { + --buttonColor: #333; + --buttonColorHover: #838385; + --buttonColorActive: #f47920; + } + .link--orange, + .iconButton--orange, + .button { + --buttonColor: #f47920; + --buttonColorHover: #f68d41; + --buttonColorActive: #c75808; + } + .button.button--green, + .button.miniBasketButton.active { + --buttonColor: #74b11f; + --buttonColorHover: #8dc63f; + --buttonColorActive: #588718; + } + .select__listWrap, + .autocomplete, + .range__input, + .field__input, + .textarea__field, + .select__button { + border: 1px solid var(--inputBorderColor); + border-radius: 8px; + } + .range__input, + .field__input, + .textarea__field, + .select__button { + color: #333; + font-size: 0.9375rem; + padding: 8px 16px; + width: 100%; + height: 48px; + } + .input-validation-error.range__input, + .input-validation-error.field__input, + .input-validation-error.textarea__field, + .input-validation-error.select__button, + .field--error .range__input, + .field--error .field__input, + .field--error .textarea__field, + .field--error .select__button { + border-color: #d91a32; + } + .range__input:focus, + .field__input:focus, + .textarea__field:focus, + .select--open .select__button { + border-color: #f47920; + outline: none; + } + .field-validation-error, + .field__helper { + font-size: 0.75rem; + font-weight: 400; + letter-spacing: initial; + line-height: 1.33; + color: #595959; + display: block; + margin: 7px 0 0 0; + padding-left: var(--inputLabelPadding); + } + .field-validation-error ~ .field-validation-error, + .field__helper ~ .field-validation-error { + margin-top: 2px; + } + .field__input:-moz-read-only { + background-color: #ececec; + border-color: #ececec; + color: #838385; + pointer-events: none; + } + .field__input:read-only { + background-color: #ececec; + border-color: #ececec; + color: #838385; + pointer-events: none; + } + .listsBlock__bg, + .minibasket__overlay, + .userMenu__overlay, + .notifications__overlay, + .modal__bg, + .mainLayer { + background-color: rgba(51, 51, 51, 0.9); + left: 0; + position: fixed; + top: 0; + transition: opacity 250ms ease-in-out; + z-index: 9; + width: 100%; + height: 100%; + } + .minibasket__inner { + -webkit-transform: translateX(100%); + transform: translateX(100%); + transition: -webkit-transform 300ms ease-out 120ms; + transition: transform 300ms ease-out 120ms; + transition: transform 300ms ease-out 120ms, + -webkit-transform 300ms ease-out 120ms; + } + .minibasket.active .minibasket__inner { + -webkit-transform: translateX(0); + transform: translateX(0); + transition: -webkit-transform 350ms ease-out; + transition: transform 350ms ease-out; + transition: transform 350ms ease-out, -webkit-transform 350ms ease-out; + } + .miniCart.active .miniCart__holder, + .miniCart.active .miniCart__main { + opacity: 1; + transition: opacity 300ms ease-out 240ms; + } + .miniCart__holder, + .miniCart__main { + opacity: 0; + transition: opacity 240ms ease-out; + } + @font-face { + font-family: "iconfont"; + src: url("https://sklavenitishtml.dev.atcom.gr/Content/Fonts/iconfont.eot"); + src: url("https://sklavenitishtml.dev.atcom.gr/Content/Fonts/iconfont.eot?") + format("eot"), + url("../Fonts/iconfont.woff2") format("woff2"), + url("../Fonts/iconfont.woff") format("woff"), + url("../Fonts/iconfont.ttf") format("truetype"), + url("../Fonts/iconfont.svg") format("svg"); + } + .couponBlock__clear:before, + .couponBlock__btn:before, + .productThumbs .swiper-button-next:after, + .productThumbs .swiper-button-prev:after, + .addToCartButton--added:before, + .addToCartButton:before, + .myList--box.myList--fav:before, + .myList--box:before, + .sideBasket__title:before, + .topnav__selected:before, + .timetableNav--prev:before, + .timetableNav--next:before, + .swiper-button-next:after, + .swiper-button-prev:after, + .sidemenu__selected:before, + .searchInput__submit:before, + .range__submit:before, + .quantity__message--removed:before, + .quantity__message--added:before, + .quantity__btn--dec:before, + .quantity__btn--inc:before, + .quantity--init:before, + .errorMsg:before, + .select__button:after, + .checkbox__icon:before, + .radiobutton--check .radiobutton__icon:after, + .radiobutton--box .radiobutton__icon:after, + .selectedFilters__remove:before, + .filter__titleIcon:before, + .content__zoomimg:before, + .acc.open > .acc__header .acc__icon.icon-edit:before, + .icon-zoomOut:before, + .icon-zoomIn:before, + .icon-youtube:before, + .icon-warning:before, + .icon-visibilityOff:before, + .togglePassword.disabled:before, + .filters:not(.filters--checked) .togglePassword.filtersClearAll:before, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.togglePassword:before, + .filter:not(.filter--checked) .filtersLinks button.togglePassword:before, + .icon-visibility:before, + .togglePassword:before, + .icon-vegetables:before, + .icon-twitter:before, + .icon-trolley:before, + .icon-time:before, + .icon-tickOutline:before, + .icon-tickFilled:before, + .icon-tick:before, + .statusMessage--success:before, + .icon-storeSevice1:before, + .icon-store:before, + .icon-shipping:before, + .icon-settings:before, + .icon-searchList:before, + .icon-search:before, + .field__inputSubmit:before, + .icon-schedule:before, + .icon-sausages:before, + .icon-safePay:before, + .icon-revertRight:before, + .icon-revertLeft:before, + .icon-restaurant:before, + .icon-remove:before, + .icon-refresh:before, + .icon-readyMeals:before, + .icon-print:before, + .icon-plus:before, + .icon-play:before, + .icon-pinterest:before, + .icon-pin:before, + .icon-pet:before, + .icon-party:before, + .icon-parking:before, + .icon-paper:before, + .icon-orders:before, + .icon-onePlusOne:before, + .icon-nuts:before, + .icon-newProduct:before, + .icon-mylists-wreath:before, + .icon-mylists-woman:before, + .icon-mylists-winter:before, + .icon-mylists-volleyball:before, + .icon-mylists-umbrella:before, + .icon-mylists-triangle:before, + .icon-mylists-trailer:before, + .icon-mylists-sun:before, + .icon-mylists-store:before, + .icon-mylists-star:before, + .icon-mylists-sea:before, + .icon-mylists-plane:before, + .icon-mylists-mountain:before, + .icon-mylists-mask:before, + .icon-mylists-man:before, + .icon-mylists-leaf:before, + .icon-mylists-ktirio:before, + .icon-mylists-ktiria:before, + .icon-mylists-kite:before, + .icon-mylists-house2:before, + .icon-mylists-hospital:before, + .icon-mylists-home:before, + .icon-mylists-handHeart:before, + .icon-mylists-grandpa:before, + .icon-mylists-grandma:before, + .icon-mylists-glasses:before, + .icon-mylists-girl:before, + .icon-mylists-gift:before, + .icon-mylists-football:before, + .icon-mylists-easterEgg:before, + .icon-mylists-earth:before, + .icon-mylists-dog:before, + .icon-mylists-dinner:before, + .icon-mylists-diamond:before, + .icon-mylists-cupcake:before, + .icon-mylists-cocktail:before, + .icon-mylists-cloud:before, + .icon-mylists-circle:before, + .icon-mylists-championCup:before, + .icon-mylists-champagne:before, + .icon-mylists-cat:before, + .icon-mylists-camp:before, + .icon-mylists-boy:before, + .icon-mylists-boat:before, + .icon-mylists-block:before, + .icon-mylists-birthdayHat:before, + .icon-mylists-birthdaycake:before, + .icon-mylists-bird:before, + .icon-mylists-basketball:before, + .icon-mylists-basket:before, + .icon-mylists-barakia:before, + .icon-mylists-balloon:before, + .icon-mylists-baby:before, + .icon-multipleSearch:before, + .icon-minimarketFood:before, + .icon-milkBeverages:before, + .icon-mailCircle:before, + .icon-mail:before, + .icon-logout:before, + .icon-location2:before, + .icon-location:before, + .icon-instagram:before, + .icon-info:before, + .icon-house:before, + .icon-help:before, + .icon-hearts:before, + .icon-heart:before, + .icon-frozen:before, + .icon-freshMeat:before, + .icon-form:before, + .icon-fish:before, + .icon-filters:before, + .icon-fav:before, + .icon-facemask:before, + .icon-facebook:before, + .icon-eggs:before, + .icon-edit:before, + .icon-download:before, + .icon-directions2:before, + .icon-directions:before, + .icon-delete:before, + .icon-cream:before, + .icon-cosmetics:before, + .icon-copy:before, + .icon-cone:before, + .icon-closeRoundedOutline:before, + .icon-closeRounded:before, + .icon-closeOutline:before, + .icon-close:before, + .field__inputClear:before, + .statusMessage--error:before, + .icon-cleaning:before, + .icon-cheese:before, + .icon-card:before, + .icon-call:before, + .icon-cafe:before, + .icon-breakfast:before, + .icon-bisquite:before, + .icon-bio:before, + .icon-beverages:before, + .icon-bell:before, + .icon-basketTimer:before, + .icon-basket:before, + .icon-bakery:before, + .icon-babytoy:before, + .icon-babyFoods:before, + .icon-arrowUp:before, + .goToTop:before, + .icon-arrowRight32:before, + .icon-arrowRight:before, + .mainNav__link--hasChildren:before, + .icon-arrowRight--circle:before, + .icon-arrowRight--b:before, + .icon-arrowLeft32:before, + .icon-arrowLeft:before, + .megamenu__back:before, + .icon-arrowLeft--b:before, + .icon-arrowDown:before, + .icon-appetizers:before, + .icon-alert:before, + .icon-alcohol:before, + .icon-addCircle:before, + .icon-addCircle--b:before, + .icon-add:before, + .icon-account:before { + font-family: "iconfont"; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-style: normal; + font-display: swap; + font-variant: normal; + font-weight: normal; + text-decoration: none; + text-transform: none; + display: inline-block; + line-height: 1; + vertical-align: top; + } + .icon-account:before { + content: ""; + } + .icon-add:before { + content: ""; + } + .icon-addCircle--b:before { + content: ""; + } + .icon-addCircle:before { + content: ""; + } + .icon-alcohol:before { + content: ""; + } + .icon-alert:before { + content: ""; + } + .icon-appetizers:before { + content: ""; + } + .icon-arrowDown:before { + content: ""; + } + .icon-arrowLeft--b:before { + content: ""; + } + .icon-arrowLeft:before, + .megamenu__back:before { + content: ""; + } + .icon-arrowLeft32:before { + content: ""; + } + .icon-arrowRight--b:before { + content: ""; + } + .icon-arrowRight--circle:before { + content: ""; + } + .icon-arrowRight:before, + .mainNav__link--hasChildren:before { + content: ""; + } + .icon-arrowRight32:before { + content: ""; + } + .icon-arrowUp:before, + .goToTop:before { + content: ""; + } + .icon-babyFoods:before { + content: ""; + } + .icon-babytoy:before { + content: ""; + } + .icon-bakery:before { + content: ""; + } + .icon-basket:before { + content: ""; + } + .icon-basketTimer:before { + content: ""; + } + .icon-bell:before { + content: ""; + } + .icon-beverages:before { + content: ""; + } + .icon-bio:before { + content: ""; + } + .icon-bisquite:before { + content: ""; + } + .icon-breakfast:before { + content: ""; + } + .icon-cafe:before { + content: ""; + } + .icon-call:before { + content: ""; + } + .icon-card:before { + content: ""; + } + .icon-cheese:before { + content: ""; + } + .icon-cleaning:before { + content: ""; + } + .icon-close:before, + .field__inputClear:before, + .statusMessage--error:before { + content: ""; + } + .icon-closeOutline:before { + content: ""; + } + .icon-closeRounded:before { + content: ""; + } + .icon-closeRoundedOutline:before { + content: ""; + } + .icon-cone:before { + content: ""; + } + .icon-copy:before { + content: ""; + } + .icon-cosmetics:before { + content: ""; + } + .icon-cream:before { + content: ""; + } + .icon-delete:before { + content: ""; + } + .icon-directions:before { + content: ""; + } + .icon-directions2:before { + content: ""; + } + .icon-download:before { + content: ""; + } + .icon-edit:before { + content: ""; + } + .icon-eggs:before { + content: ""; + } + .icon-facebook:before { + content: ""; + } + .icon-facemask:before { + content: ""; + } + .icon-fav:before { + content: ""; + } + .icon-filters:before { + content: ""; + } + .icon-fish:before { + content: ""; + } + .icon-form:before { + content: ""; + } + .icon-freshMeat:before { + content: ""; + } + .icon-frozen:before { + content: ""; + } + .icon-heart:before { + content: ""; + } + .icon-hearts:before { + content: ""; + } + .icon-help:before { + content: ""; + } + .icon-house:before { + content: ""; + } + .icon-info:before { + content: ""; + } + .icon-instagram:before { + content: ""; + } + .icon-location:before { + content: ""; + } + .icon-location2:before { + content: ""; + } + .icon-logout:before { + content: ""; + } + .icon-mail:before { + content: ""; + } + .icon-mailCircle:before { + content: ""; + } + .icon-milkBeverages:before { + content: ""; + } + .icon-minimarketFood:before { + content: ""; + } + .icon-multipleSearch:before { + content: ""; + } + .icon-mylists-baby:before { + content: ""; + } + .icon-mylists-balloon:before { + content: ""; + } + .icon-mylists-barakia:before { + content: ""; + } + .icon-mylists-basket:before { + content: ""; + } + .icon-mylists-basketball:before { + content: ""; + } + .icon-mylists-bird:before { + content: ""; + } + .icon-mylists-birthdaycake:before { + content: ""; + } + .icon-mylists-birthdayHat:before { + content: ""; + } + .icon-mylists-block:before { + content: ""; + } + .icon-mylists-boat:before { + content: ""; + } + .icon-mylists-boy:before { + content: ""; + } + .icon-mylists-camp:before { + content: ""; + } + .icon-mylists-cat:before { + content: ""; + } + .icon-mylists-champagne:before { + content: ""; + } + .icon-mylists-championCup:before { + content: ""; + } + .icon-mylists-circle:before { + content: ""; + } + .icon-mylists-cloud:before { + content: ""; + } + .icon-mylists-cocktail:before { + content: ""; + } + .icon-mylists-cupcake:before { + content: ""; + } + .icon-mylists-diamond:before { + content: ""; + } + .icon-mylists-dinner:before { + content: ""; + } + .icon-mylists-dog:before { + content: ""; + } + .icon-mylists-earth:before { + content: ""; + } + .icon-mylists-easterEgg:before { + content: ""; + } + .icon-mylists-football:before { + content: ""; + } + .icon-mylists-gift:before { + content: ""; + } + .icon-mylists-girl:before { + content: ""; + } + .icon-mylists-glasses:before { + content: ""; + } + .icon-mylists-grandma:before { + content: ""; + } + .icon-mylists-grandpa:before { + content: ""; + } + .icon-mylists-handHeart:before { + content: ""; + } + .icon-mylists-home:before { + content: ""; + } + .icon-mylists-hospital:before { + content: ""; + } + .icon-mylists-house2:before { + content: ""; + } + .icon-mylists-kite:before { + content: ""; + } + .icon-mylists-ktiria:before { + content: ""; + } + .icon-mylists-ktirio:before { + content: ""; + } + .icon-mylists-leaf:before { + content: ""; + } + .icon-mylists-man:before { + content: ""; + } + .icon-mylists-mask:before { + content: ""; + } + .icon-mylists-mountain:before { + content: ""; + } + .icon-mylists-plane:before { + content: ""; + } + .icon-mylists-sea:before { + content: ""; + } + .icon-mylists-star:before { + content: ""; + } + .icon-mylists-store:before { + content: ""; + } + .icon-mylists-sun:before { + content: ""; + } + .icon-mylists-trailer:before { + content: ""; + } + .icon-mylists-triangle:before { + content: ""; + } + .icon-mylists-umbrella:before { + content: ""; + } + .icon-mylists-volleyball:before { + content: ""; + } + .icon-mylists-winter:before { + content: ""; + } + .icon-mylists-woman:before { + content: ""; + } + .icon-mylists-wreath:before { + content: ""; + } + .icon-newProduct:before { + content: ""; + } + .icon-nuts:before { + content: ""; + } + .icon-onePlusOne:before { + content: ""; + } + .icon-orders:before { + content: ""; + } + .icon-paper:before { + content: ""; + } + .icon-parking:before { + content: ""; + } + .icon-party:before { + content: ""; + } + .icon-pet:before { + content: ""; + } + .icon-pin:before { + content: ""; + } + .icon-pinterest:before { + content: ""; + } + .icon-play:before { + content: ""; + } + .icon-plus:before { + content: ""; + } + .icon-print:before { + content: ""; + } + .icon-readyMeals:before { + content: ""; + } + .icon-refresh:before { + content: ""; + } + .icon-remove:before { + content: ""; + } + .icon-restaurant:before { + content: ""; + } + .icon-revertLeft:before { + content: ""; + } + .icon-revertRight:before { + content: ""; + } + .icon-safePay:before { + content: ""; + } + .icon-sausages:before { + content: ""; + } + .icon-schedule:before { + content: ""; + } + .icon-search:before, + .field__inputSubmit:before { + content: ""; + } + .icon-searchList:before { + content: ""; + } + .icon-settings:before { + content: ""; + } + .icon-shipping:before { + content: ""; + } + .icon-store:before { + content: ""; + } + .icon-storeSevice1:before { + content: ""; + } + .icon-tick:before, + .statusMessage--success:before { + content: ""; + } + .icon-tickFilled:before { + content: ""; + } + .icon-tickOutline:before { + content: ""; + } + .icon-time:before { + content: ""; + } + .icon-trolley:before { + content: ""; + } + .icon-twitter:before { + content: ""; + } + .icon-vegetables:before { + content: ""; + } + .icon-visibility:before, + .togglePassword:before { + content: ""; + } + .icon-visibilityOff:before, + .togglePassword.disabled:before, + .filters:not(.filters--checked) .togglePassword.filtersClearAll:before, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.togglePassword:before, + .filter:not(.filter--checked) .filtersLinks button.togglePassword:before { + content: ""; + } + .icon-warning:before { + content: ""; + } + .icon-youtube:before { + content: ""; + } + .icon-zoomIn:before { + content: ""; + } + .icon-zoomOut:before { + content: ""; + } + html { + font-size: 16px; + } + body { + color: #333; + font: 400 100%/1.4 "cfastystd", Trebuchet MS, sans-serif; + line-height: 1.3; + } + [class^="icon-"], + [class*=" icon-"] { + display: inline-block; + line-height: 1; + vertical-align: top; + } + input[type="submit"] { + cursor: pointer; + } + input, + textarea, + button, + select, + a { + -webkit-tap-highlight-color: transparent; + } + figure { + margin: 0; + } + img { + max-width: 100%; + } + h1 { + font-size: 2.875rem; + font-weight: 700; + letter-spacing: -0.03em; + } + h2 { + font-weight: 700; + } + h3 { + font-size: 1.25rem; + font-weight: 700; + letter-spacing: -0.02em; + margin: 0 0 32px; + } + h4 { + font-size: 1rem; + font-weight: 700; + letter-spacing: -0.02em; + margin: 0 0 20px; + } + h4:not(:first-child) { + margin-top: 30px; + } + b, + strong, + .bold { + font-weight: bold; + } + .text, + p { + color: #404040; + font-size: 1rem; + line-height: 1.47; + margin: 0 0 32px; + } + .text a, + p a { + text-decoration: underline; + } + .text--s { + font-size: 0.8125rem; + margin: 0; + } + .text--b { + color: #333; + font-size: 1rem; + font-weight: bold; + } + .text--pending { + color: orange; + } + a { + text-decoration: none; + transition: color 250ms ease; + } + ul { + list-style: none; + margin: 20px 0; + padding: 0; + } + ul.listS { + margin: 0 0 24px; + } + ul.listS li { + font-size: 0.8125rem; + line-height: 1.3; + } + ul.listS li:after { + top: 4px; + } + ul.listL { + margin: 24px 0 40px; + } + ul.listL li { + font-size: 1.25rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.5; + margin-bottom: 20px; + padding-left: 28px; + } + ul.listL li:after { + background-color: #f47920; + top: 11px; + width: 8px; + height: 8px; + } + ul.listCols { + -webkit-column-count: 5; + -moz-column-count: 5; + column-count: 5; + } + ul.listCols li { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + padding-left: 0; + margin-bottom: 20px; + } + ul.listCols li:after { + display: none; + } + ul li { + line-height: 1.2; + margin: 0 0 3px; + padding-left: 12px; + position: relative; + } + ul li:after { + width: 5px; + height: 5px; + background: #404040; + border-radius: 50%; + content: ""; + display: block; + left: 0; + position: absolute; + top: 6px; + } + ul ol li { + padding-left: 0; + } + ul ol li:after { + content: none; + } + ol { + margin: 20px 0; + padding: 0 0 0 20px; + } + .list--orange li:after { + background-color: #f47920; + } + .address, + .orderSum__col, + address { + color: #666; + font-size: 0.875rem; + font-style: normal; + line-height: 1.8; + } + .footer { + --footerSpaceTop: 80px; + background-color: #404040; + margin-top: var(--footerSpaceTop); + } + .footer__main { + display: flex; + justify-content: space-between; + padding: 40px 0 48px; + } + .footer--checkout .footer__main { + padding: 24px 0; + } + .footer__col { + --footerColSpace: 40px; + } + .footer__title { + color: #4d4d4d; + font-size: 0.9375rem; + font-weight: 600; + margin: 0 0 16px; + } + .footer__list { + margin: 0; + } + .footer__list li { + padding-left: 0; + margin: 0; + } + .footer__list li:after { + display: none; + } + .footer__listItem { + color: #8c8c8c; + font-size: 0.9375rem; + line-height: 1.2; + margin: 0; + } + .footer__listLink { + display: inline-block; + padding: 8px 0; + vertical-align: top; + } + .footer__apps { + margin: 24px 0 0; + } + .footer__apps p { + color: #8c8c8c; + font-size: 0.9375rem; + margin: 0 0 8px; + } + .footer__apps figure { + width: 100%; + } + .footer__apps figure picture { + display: block; + padding-top: calc(42 / 140 * 100%); + position: relative; + width: 100%; + } + .footer__apps figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .footer__appsInner { + display: flex; + flex-wrap: wrap; + } + .footer__appsLink { + margin-bottom: 8px; + width: 140px; + } + .footer__appsLink:not(:last-child) { + margin-right: 8px; + } + .footer__btm { + align-items: center; + border-top: 1px solid rgba(255, 255, 255, 0.2); + display: flex; + justify-content: space-between; + padding: 16px 0; + } + .footer__copy { + color: #fff; + font-weight: 400; + line-height: 1; + margin: 0; + } + .footer__atcom { + line-height: 1; + padding: 8px 0; + } + .footer__atcom img { + display: inline-block; + vertical-align: top; + width: 160px; + height: 13px; + } + .footer__text:last-child { + margin-bottom: 0; + } + .wrapper { + margin: 0 auto; + padding: 0 var(--gridSpace); + width: 100%; + max-width: calc(var(--wrapper) + var(--gridSpace) * 2); + } + .wrapper--xxs { + --wrapper: var(--wrapperXXS); + } + .wrapper--xs { + --wrapper: var(--wrapperXS); + } + .wrapper--s { + --wrapper: var(--wrapperS); + } + .wrapper--l { + --wrapper: var(--wrapperL); + } + .wrapper--full { + --wrapper: var(--wrapperFull); + } + .wrapper .wrapper { + padding: 0; + } + .col { + max-width: 100%; + flex-grow: 1; + flex-basis: 0; + } + .col-1 { + flex-basis: 8.3333333333%; + max-width: 8.3333333333%; + } + .col-2 { + flex-basis: 16.6666666667%; + max-width: 16.6666666667%; + } + .col-3 { + flex-basis: 25%; + max-width: 25%; + } + .col-4 { + flex-basis: 33.3333333333%; + max-width: 33.3333333333%; + } + .col-5 { + flex-basis: 41.6666666667%; + max-width: 41.6666666667%; + } + .col-6 { + flex-basis: 50%; + max-width: 50%; + } + .col-7 { + flex-basis: 58.3333333333%; + max-width: 58.3333333333%; + } + .col-8 { + flex-basis: 66.6666666667%; + max-width: 66.6666666667%; + } + .col-9 { + flex-basis: 75%; + max-width: 75%; + } + .col-10 { + flex-basis: 83.3333333333%; + max-width: 83.3333333333%; + } + .col-11 { + flex-basis: 91.6666666667%; + max-width: 91.6666666667%; + } + .col-12 { + flex-basis: 100%; + max-width: 100%; + } + .header { + background-color: #fff; + left: 0; + position: -webkit-sticky; + position: sticky; + top: var(--top); + z-index: 9; + height: var(--headerHeight); + } + .header__top { + padding: 16px 0; + } + .header__leftBlock { + align-items: center; + display: inline-flex; + } + .header__topInner { + align-items: center; + display: flex; + justify-content: space-between; + } + .header--checkout .header__topInner { + position: relative; + } + .header__logo { + flex-shrink: 0; + margin-right: auto; + width: 296px; + height: 38px; + } + .header__logo h1 { + font-size: 0; + margin: 0; + } + .header__logo img { + width: 100%; + } + .header--checkout .header__logo { + left: 50%; + position: absolute; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + } + .header__tools { + align-items: center; + display: flex; + } + .header__tool { + margin-left: 20px; + } + .mainContainer { + display: grid; + grid-template-areas: "header" "main" "footer"; + grid-template-columns: minmax(0, 1fr); + grid-template-rows: auto 1fr auto; + min-height: 100vh; + } + .header { + grid-area: header; + } + .main { + grid-area: main; + } + .footer { + grid-area: footer; + } + .mainLayout { + --mainLayoutSpace: 32px; + } + .mainLayout__content { + padding: 0 var(--mainLayoutSpace); + } + .mainLayout .wrapper { + --gridSpace: 0px; + } + .acc { + border-bottom: 1px solid #c2c2c2; + } + .acc--border { + border: 1px solid #fff; + border-radius: 4px; + } + .acc--border .acc__header { + padding: 16px; + } + .acc--border .acc__content { + padding: 8px 16px 16px; + } + .acc--box { + background-color: #f5f5f5; + } + .acc--box .acc__header { + justify-content: space-between; + padding: 24px; + } + .acc--box .acc__content { + padding: 8px 24px 24px; + } + .acc--stripe { + border: none; + margin: 24px 0; + } + .acc--stripe .acc__header { + background-color: #f2efe8; + border-radius: 8px; + font-size: 1.25rem; + margin-bottom: 24px; + padding: 16px; + } + .acc--stripe .acc__header:before { + font-size: 1.5rem; + margin-right: 8px; + } + .acc--disabled .acc__header { + cursor: auto; + pointer-events: none; + } + .acc--disabled .acc__headerInnerTitle { + pointer-events: all; + } + .acc--disabled .acc__icon { + display: none; + } + .acc--disabled .acc__content { + display: none; + } + .acc--beige { + border: none; + margin-bottom: 30px; + } + .acc--beige .acc__header { + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.33; + background-color: #f2efe8; + border-radius: 8px; + padding: 16px; + } + .acc--beige .acc__content { + padding: 10px 30px; + } + .acc--beige .acc__content .listCols { + margin: 0; + } + .acc--colorStripe { + border: none; + margin-bottom: 20px; + } + .acc--colorStripe .acc__header { + background-color: #fef8c6; + border-radius: 8px; + color: #000; + font-size: 0.8125rem; + font-weight: 500; + padding: 12px; + } + .acc--colorStripe .acc__icon { + font-size: 1.5rem; + } + .acc--colorStripe .acc__content { + padding: 0; + } + .acc__title { + margin: 0; + } + .acc__content { + padding: 0 0 20px; + } + .acc__content > .form:last-child { + margin-bottom: 0; + } + .acc__content p:last-child { + margin: 0; + } + .acc__content--md { + max-width: 822px; + } + .acc__error { + flex-basis: 100%; + flex-grow: 1; + } + .acc__error p { + font-size: 0.75rem; + font-weight: 400; + letter-spacing: initial; + line-height: 1.33; + color: #d91a32; + margin: 0; + } + .acc__header { + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.33; + align-items: center; + color: #333; + cursor: pointer; + display: flex; + justify-content: space-between; + padding: 24px 0; + } + .acc--inline .acc__header { + font-size: 0.875rem; + } + .acc__header > * { + pointer-events: none; + } + .acc__header--md { + padding: 16px 0; + } + .acc__header--md .acc__title { + font-size: 1rem; + font-weight: 500; + line-height: 1.375; + } + .acc__header--lg { + padding: 16px 0; + } + .acc__header--lg .acc__title { + font-size: 1.25rem; + line-height: 1.5; + } + .acc__headerInfo { + font-weight: 400; + margin-left: 4px; + } + .acc__headerInner { + display: flex; + flex-grow: 1; + } + .acc__headerInnerTitle { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + align-items: center; + color: #333; + display: flex; + position: relative; + } + .acc__headerInnerTitle [class^="icon-"], + .acc__headerInnerTitle [class*=" icon-"] { + color: #838385; + font-size: 1.5rem; + margin-right: 10px; + } + .acc__headerInnerTitle--info { + flex-wrap: wrap; + font-weight: 400; + margin-left: 20px; + } + .acc__headerInnerTitle--info .link, + .acc__headerInnerTitle--info .text a, + .text .acc__headerInnerTitle--info a, + .acc__headerInnerTitle--info p a, + p .acc__headerInnerTitle--info a { + font-weight: 500; + } + .open .acc__headerInnerTitle--info { + display: none; + } + .acc__headerInnerTitle--sum { + justify-content: flex-end; + flex-grow: 1; + flex-shrink: 0; + font-weight: 400; + margin-left: auto; + padding-left: 20px; + text-align: right; + } + .open .acc__headerInnerTitle--sum { + display: none; + } + .acc__headerInnerTitle--large { + font-size: 1.375rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.36; + } + .acc__icon { + color: #838385; + font-size: 2rem; + padding: 0; + -webkit-transform-origin: center; + transform-origin: center; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + } + .acc__icon--sml { + font-size: 1.5rem; + } + .acc__icon.icon-edit { + font-size: 1.5rem; + } + .acc__title + .acc__icon { + margin-left: 32px; + } + .acc:not(.open) .acc__content { + display: none; + } + .acc.open > .acc__header .acc__icon:not(.icon-edit) { + -webkit-transform: rotate(-180deg); + transform: rotate(-180deg); + } + .acc.open > .acc__header .acc__icon.icon-edit:before { + content: ""; + } + .acc-section { + margin-bottom: 56px; + } + .acc-section__title { + border-bottom: 1px solid #c2c2c2; + font-size: 1.375rem; + font-weight: 700; + margin-bottom: 0; + padding-bottom: 12px; + } + .acc-section__title--pdlg { + padding-bottom: 40px; + } + .article { + border-radius: 8px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + overflow: hidden; + position: relative; + } + .article__img figure { + width: 100%; + } + .article__img figure picture { + display: block; + padding-top: calc(184 / 296 * 100%); + position: relative; + width: 100%; + } + .article__img figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .article__info { + padding: 20px; + } + .article__date { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.28; + color: #838385; + } + .article__dateWrap { + display: inline-block; + font-size: 0; + margin-bottom: 13px; + } + .article__dateWrap span:not(.pill) { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + } + .article__dateWrap .pill { + margin-left: 12px; + position: relative; + -webkit-transform: translateY(-2px); + transform: translateY(-2px); + } + .article__title { + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.33; + color: #333; + margin-bottom: 8px; + } + .article__text { + font-size: 1rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.5; + color: #404040; + margin-bottom: 0; + --maxLines: 4; + line-clamp: var(--maxLines); + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: var(--maxLines); + -webkit-box-orient: vertical; + } + .article__text p:last-child { + margin-bottom: 0; + } + .article__link { + color: inherit; + } + .article__link:before { + content: ""; + } + .article--wide .article__img figure { + width: 100%; + } + .article--wide .article__img figure picture { + display: block; + padding-top: calc(314 / 1258 * 100%); + position: relative; + width: 100%; + } + .article--wide .article__img figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .article--wide .article__date { + margin-bottom: 4px; + } + .article--wide .article__title { + font-size: 1.625rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.38; + margin-bottom: 16px; + } + .article--wide .article__info { + padding: 32px; + } + .articleFeatured { + margin-bottom: 32px; + } + .articleList { + --productSpaceH: 20px; + --productSpaceV: 20px; + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: var(--productSpaceV) var(--productSpaceH); + } + .articleList .article { + width: calc(25% - 3 * var(--productSpaceH) / 4); + } + .articleList .article--horizontal { + width: 100%; + } + .articleList .swiper-slide .article { + width: 100%; + } + .articleList--column { + --productSpaceV: 32px; + margin-bottom: 32px; + } + .articleList--contests { + margin-bottom: 60px; + justify-content: flex-start; + } + .articleDetails__date { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + } + .articleDetails__dateWrap { + align-items: center; + color: #838385; + display: inline-flex; + margin-bottom: 4px; + } + .articleDetails__dateWrap span { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + margin-right: 4px; + } + .articleDetails__title { + font-size: 1.875rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + margin: 0; + max-width: 746px; + } + .articleDetails__title:after { + content: ""; + display: block; + background-color: #f47920; + width: 54px; + height: 8px; + margin: 16px auto 16px 0; + } + .autocomplete__googlelogo { + margin: 12px 18px 0 auto; + width: 93px; + height: 13px; + text-align: right; + display: block; + background-image: url(../media/powered-by-google-on-white3.png); + background-position: right; + background-repeat: no-repeat; + background-size: contain; + } + .bnr { + background-color: #404040; + color: #fff; + padding: 22px 0; + } + .bnr__inner { + position: relative; + display: flex; + align-items: center; + } + .bnr__icon { + color: inherit; + font-size: 1.5rem; + } + .bnr__close { + font-size: 1.5rem; + } + .bnr__text { + min-height: 24px; + display: flex; + align-items: center; + margin: 0 16px 0 18px; + flex-grow: 1; + } + .bnr p { + font-size: 0.8125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.15; + color: inherit; + } + .bnr p:last-of-type { + margin-bottom: 0; + } + .breadcrumb__list { + display: flex; + list-style: none; + margin: 0; + padding: 0; + } + .breadcrumb__item { + color: #333; + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.143; + margin: 2px 0; + padding: 0; + position: relative; + } + .breadcrumb__item--disabled { + color: #a6a6a6; + font-weight: 400; + } + .breadcrumb__item:after { + display: none; + } + .breadcrumb__itemLink { + color: var(--buttonColor); + font-weight: 400; + text-decoration: underline; + } + .breadcrumb__itemLink:active { + color: var(--buttonColorActive); + } + button { + -webkit-appearance: none; + -moz-appearance: none; + background: transparent; + border: none; + margin: 0; + } + .button { + align-items: center; + background-color: var(--buttonColor); + border: none; + border-radius: 8px; + color: #fff; + display: inline-flex; + font-family: "cfastystd", Trebuchet MS, sans-serif; + font-size: 0.9375rem; + font-weight: 500; + justify-content: center; + letter-spacing: -0.03em; + padding: 8px 24px; + transition: color 350ms ease, background-color 350ms ease; + min-height: 48px; + } + .button .icon { + font-size: 1.5rem; + margin-right: 8px; + } + .button:not(.disabled) { + cursor: pointer; + } + .button:not(.disabled):active { + background-color: var(--buttonColorActive); + } + .button.disabled, + .filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.button, + .filter:not(.filter--checked) .filtersLinks button.button, + .filters:not(.filters--checked) .button.filtersClearAll { + background-color: #ececec; + color: #a6a6a6; + } + .button--s { + font-size: 0.8125rem; + letter-spacing: -0.02em; + min-height: 34px; + } + .button--s .icon { + margin: -3px 4px -3px 0; + } + .button--border { + background-color: transparent; + border: 1px solid var(--buttonColor); + color: var(--buttonColor); + transition: color 350ms ease, border-color 350ms ease; + } + .button--border:not(.disabled):active { + background: transparent; + border-color: var(--buttonColorActive); + color: var(--buttonColorActive); + } + .button--border.disabled, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.button--border, + .filter:not(.filter--checked) .filtersLinks button.button--border, + .filters:not(.filters--checked) .button--border.filtersClearAll { + background: transparent; + border-color: #d8d8d8; + color: #a6a6a6; + } + .button--full { + width: 100%; + } + .button--alt { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + border-color: #c2c2c2; + color: #333; + display: flex; + flex: 1 1 auto; + justify-content: space-between; + padding: 16px; + transition: background-color 250ms ease-out; + } + .button--alt:not(.disabled):active { + background: #f2efe8; + border-color: #c2c2c2; + color: inherit; + } + .button--alt:not(.disabled):active .icon { + color: #f47920; + } + .button--alt .icon { + color: #f47920; + } + .button--alt .icon:last-child { + margin: 0; + margin-left: 0; + } + .iconButton, + .selectedFilters__remove { + color: var(--buttonColor); + font-size: 2rem; + line-height: 1; + padding: 0; + } + .iconButton--dark { + --buttonColor: #595959; + --buttonColorHover: #838385; + } + .iconButton--border { + border: 1px solid var(--buttonColor); + border-radius: 50%; + font-size: 1.5rem; + padding: 4px; + } + .iconButton--border:not(.disabled):active { + border-color: var(--buttonColorActive); + } + .iconButton--border.iconButton--s, + .iconButton--border.selectedFilters__remove { + padding: 0; + } + .iconButton--opacityBg { + background: rgba(255, 255, 255, 0.6); + } + .iconButton--square { + border-radius: 4px; + } + .iconButton--shadow { + background-color: #fff; + box-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + border-radius: 4px; + } + .iconButton--xs { + font-size: 1rem; + padding: 8px; + } + .iconButton--s, + .selectedFilters__remove { + font-size: 1.5rem; + } + .iconButton--b { + font-size: 1.75rem; + } + .iconButton--xb { + font-size: 1.625rem; + padding: 8px; + } + .iconButton:not(.disabled), + .selectedFilters__remove:not(.disabled) { + cursor: pointer; + } + .iconButton:not(.disabled):active, + .selectedFilters__remove:not(.disabled):active { + color: var(--buttonColorActive); + } + .link, + .text a, + p a { + align-items: center; + color: var(--buttonColor); + display: inline-flex; + font-family: "cfastystd", Trebuchet MS, sans-serif; + font-size: 0.9375rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1; + padding: 0; + transition: color 250ms ease; + } + .link .icon, + .text a .icon, + p a .icon { + font-size: 1.5rem; + } + .link .icon:first-child, + .text a .icon:first-child, + p a .icon:first-child { + margin-right: 4px; + } + .link .icon:last-child, + .text a .icon:last-child, + p a .icon:last-child { + margin-left: 4px; + } + .link:not(.disabled), + .text a:not(.disabled), + p a:not(.disabled) { + cursor: pointer; + } + .link:not(.disabled):active, + .text a:not(.disabled):active, + p a:not(.disabled):active { + color: var(--buttonColorActive); + } + .link.disabled, + .filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.link, + .filter:not(.filter--checked) .filtersLinks button.link, + .filters:not(.filters--checked) .link.filtersClearAll, + .text a.disabled, + .text .filters:not(.filters--checked) a.filtersClearAll, + .filters:not(.filters--checked) .text a.filtersClearAll, + p a.disabled, + p .filters:not(.filters--checked) a.filtersClearAll, + .filters:not(.filters--checked) p a.filtersClearAll { + color: #a6a6a6; + cursor: default; + } + .link--s, + .minibasket .listTools .link, + .minibasket .listTools .text a, + .text .minibasket .listTools a, + .minibasket .listTools p a, + p .minibasket .listTools a { + font-size: 0.8125rem; + letter-spacing: -0.02em; + } + .link--m { + font-size: 0.875rem; + } + .link--m .icon { + font-size: 1.25rem; + } + .link--b { + font-size: 1rem; + letter-spacing: -0.02em; + } + .link--xb { + font-size: 1.375rem; + } + .link--xb .icon { + font-size: 2rem; + } + .link--underline { + text-decoration: underline; + } + .link--orangeIcon .icon { + color: #f47920; + } + .link--orange .icon { + color: inherit; + } + .loginBtn { + align-items: center; + color: #333; + display: flex; + position: relative; + } + .loginBtn .iconButton, + .loginBtn .selectedFilters__remove { + margin-left: 8px; + } + .loginBtn .iconButton:after, + .loginBtn .selectedFilters__remove:after { + content: ""; + } + .cardRow { + display: flex; + align-items: center; + position: relative; + min-height: 66px; + } + .cardRow__logo { + flex-shrink: 0; + font-size: 0; + margin-right: 12px; + width: 36px; + } + .cardRow__logo [class^="icon-"], + .cardRow__logo [class*=" icon-"] { + font-size: 2rem; + color: #838385; + } + .cardRow__logo img { + width: 100%; + -o-object-fit: contain; + object-fit: contain; + } + .cardRow__info { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + display: flex; + flex-flow: column; + align-items: flex-start; + } + .cardRow__status { + font-size: 0.8125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.15; + color: #74b11f; + display: none; + margin-bottom: 2px; + } + .cardRow__msg { + color: #d91a32; + position: absolute; + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + max-width: 130px; + } + .cardRow__number { + color: #333; + } + .cardRow__expiration { + color: #a6a6a6; + } + .cardRow__add { + font-size: 0.9375rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.46; + color: #333; + } + .cardRow.disabled, + .filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.cardRow, + .filter:not(.filter--checked) .filtersLinks button.cardRow, + .filters:not(.filters--checked) .cardRow.filtersClearAll { + padding-right: 130px; + } + .cardRow.disabled .cardRow__logo, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.cardRow + .cardRow__logo, + .filter:not(.filter--checked) .filtersLinks button.cardRow .cardRow__logo, + .filters:not(.filters--checked) .cardRow.filtersClearAll .cardRow__logo { + opacity: 0.5; + } + .cardRow.disabled .cardRow__number, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.cardRow + .cardRow__number, + .filter:not(.filter--checked) .filtersLinks button.cardRow .cardRow__number, + .filters:not(.filters--checked) .cardRow.filtersClearAll .cardRow__number, + .cardRow.disabled .cardRow__expiration, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.cardRow + .cardRow__expiration, + .filter:not(.filter--checked) .filtersLinks button.cardRow .cardRow__expiration, + .filters:not(.filters--checked) .cardRow.filtersClearAll .cardRow__expiration { + color: #a6a6a6; + } + .catalogueList { + --productSpaceH: 32px; + --productSpaceV: 24px; + display: flex; + flex-wrap: wrap; + gap: var(--productSpaceV) var(--productSpaceH); + } + .catalogueList .catalogue { + width: calc(50% - 1 * var(--productSpaceH) / 2); + } + .catalogueList .catalogue--wide { + width: 100%; + } + .catalogue { + border-radius: 8px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + overflow: hidden; + position: relative; + } + .catalogue__img figure { + width: 100%; + } + .catalogue__img figure picture { + display: block; + padding-top: calc(463 / 617 * 100%); + position: relative; + width: 100%; + } + .catalogue__img figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .catalogue__info { + padding: 20px; + text-align: center; + } + .catalogue__title { + font-size: 1.25rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.5; + color: #333; + margin-bottom: 4px; + } + .catalogue__text { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + color: #333; + margin-bottom: 0; + } + .catalogue__text p:last-child { + margin-bottom: 0; + } + .catalogue__link { + color: inherit; + } + .catalogue__link:before { + content: ""; + } + .icon-bakery:before { + color: #a98848; + } + .icon-vegetables:before { + color: #8dc63f; + } + .icon-fish:before { + color: #91d1e5; + } + .icon-freshMeat:before { + color: #e59191; + } + .icon-milkBeverages:before { + color: #d6d0c6; + } + .icon-cream:before { + color: #f0b9c3; + } + .icon-cheese:before { + color: #efd57b; + } + .icon-eggs:before { + color: #cec0a8; + } + .icon-sausages:before { + color: #cec0a8; + } + .icon-appetizers:before { + color: #cec0a8; + } + .icon-readyMeals:before { + color: #8ebf86; + } + .icon-frozen:before { + color: #a8ccce; + } + .icon-alcohol:before { + color: #7c766b; + } + .icon-beverages:before { + color: #91d1e5; + } + .icon-nuts:before { + color: #bda57b; + } + .icon-bisquite:before { + color: #d2917c; + } + .icon-breakfast:before { + color: #a98848; + } + .icon-babyFoods:before { + color: #cdce89; + } + .icon-minimarketFood:before { + color: #cec0a8; + } + .icon-pet:before { + color: #6f6554; + } + .icon-party:before { + color: #e995b3; + } + .icon-paper:before { + color: #d6d5d5; + } + .icon-cosmetics:before { + color: #e589dc; + } + .icon-cleaning:before { + color: #a8ccce; + } + .icon-house:before { + color: #b1ddbd; + } + .icon-house2:before { + color: #337933; + } + .icon-babytoy:before { + color: #d378a9; + } + .icon-bio:before { + color: #25a131; + } + .icon-facemask:before { + color: #6bb3c2; + } + .icon-newProduct:before { + color: #ea0c00; + } + .icon-onePlusOne:before { + color: #333; + } + .icon-exclusive:before { + background: url(../media/exclusive.svg) no-repeat scroll center; + background-size: contain; + content: ""; + } + .icon-aplesPrakseis:before { + background: url(../media/badges/aplesprakseislogo.svg) no-repeat scroll center; + background-size: contain; + content: ""; + } + .icon-fav:before { + color: #d91a32; + } + .icon-addCircle { + color: #f47920; + } + .icon-mylists-xmas:before { + background-image: url(../media/icon-mylists-xmas.svg); + } + .icon-mylists-tennis:before { + background-image: url(../media/icon-mylists-tennis.svg); + } + .icon-mylists-xmas:before, + .icon-mylists-tennis:before { + background-position: center; + background-repeat: no-repeat; + background-size: 100%; + content: ""; + } + .icon-mylists-woman:before { + color: #da5a71; + } + .icon-mylists-man:before { + color: #435b7e; + } + .icon-mylists-boy:before { + color: #bc844f; + } + .icon-mylists-girl:before { + color: #d218a4; + } + .icon-mylists-grandma:before { + color: #ae1829; + } + .icon-mylists-grandpa:before { + color: #6c1a26; + } + .icon-mylists-baby:before { + color: #f5a3b1; + } + .icon-mylists-gift:before { + color: #8dc63f; + } + .icon-mylists-football:before { + color: #333; + } + .icon-mylists-winter:before { + color: #a6a6a6; + } + .icon-mylists-champagne:before { + color: #527a2a; + } + .icon-mylists-mask:before { + color: #cc1836; + } + .icon-mylists-plane:before { + color: #1e2843; + } + .icon-mylists-sea:before { + color: #4e8ac1; + } + .icon-mylists-wreath:before { + color: #427837; + } + .icon-mylists-earth:before { + color: #3a8184; + } + .icon-mylists-balloon:before { + color: #4f98cd; + } + .icon-mylists-circle:before { + color: #ff641e; + } + .icon-mylists-barakia:before { + color: #ffa222; + } + .icon-mylists-basket:before { + color: #731a25; + } + .icon-mylists-basketball:before { + color: #d43d11; + } + .icon-mylists-bird:before { + color: #f5ad47; + } + .icon-mylists-birthdaycake:before { + color: #ff6aeb; + } + .icon-mylists-birthdayHat:before { + color: #ffa222; + } + .icon-mylists-block:before { + color: #e75a70; + } + .icon-mylists-boat:before { + color: #1d8185; + } + .icon-mylists-camp:before { + color: #42b800; + } + .icon-mylists-cat:before { + color: #f7671d; + } + .icon-mylists-championCup:before { + color: #c39649; + } + .icon-mylists-cloud:before { + color: #3d5a80; + } + .icon-mylists-cocktail:before { + color: #63e2a8; + } + .icon-mylists-cupcake:before { + color: #ae7e5c; + } + .icon-mylists-diamond:before { + color: #ffa222; + } + .icon-mylists-dinner:before { + color: #f7411d; + } + .icon-mylists-dog:before { + color: #c38649; + } + .icon-mylists-easterEgg:before { + color: #b9b965; + } + .icon-mylists-glasses:before { + color: #bcaf49; + } + .icon-mylists-handHeart:before { + color: #da1a32; + } + .icon-mylists-hospital:before { + color: #3d5a80; + } + .icon-mylists-home:before { + color: #333; + } + .icon-mylists-house2:before { + color: #337933; + } + .icon-mylists-kite:before { + color: #e25b00; + } + .icon-mylists-ktiria:before { + color: #9a00b2; + } + .icon-mylists-ktirio:before { + color: #d4ab79; + } + .icon-mylists-leaf:before { + color: #d63900; + } + .icon-mylists-mountain:before { + color: #8e4825; + } + .icon-mylists-star:before { + color: #f93; + } + .icon-mylists-store:before { + color: #ced475; + } + .icon-mylists-sun:before { + color: #ffac30; + } + .icon-mylists-trailer:before { + color: #f7411d; + } + .icon-mylists-triangle:before { + color: #5f9809; + } + .icon-mylists-volleyball:before { + color: #ffa222; + } + .icon-mylists-umbrella:before { + color: #6999ac; + } + .collectionBox { + background: url(../media/wood.png) repeat scroll center; + border-radius: 8px; + overflow: hidden; + position: relative; + } + .collectionBox figure { + width: 100%; + } + .collectionBox figure picture { + display: block; + padding-top: calc(205 / 300 * 100%); + position: relative; + width: 100%; + } + .collectionBox figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .collectionBox__title { + color: #fff; + font-size: 1.375rem; + font-weight: 700; + left: 0; + letter-spacing: -0.03em; + padding: 0 16px; + position: absolute; + text-align: center; + top: 16px; + width: 100%; + } + .content__zoomimg { + max-width: 317px; + width: 100%; + border: solid 1px #c2c2c2; + cursor: pointer; + position: relative; + margin: 23px 0; + } + .content__zoomimg picture { + display: block; + padding-top: calc(181 / 317 * 100%); + position: relative; + width: 100%; + } + .content__zoomimg img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .content__zoomimg:before { + content: ""; + } + .content__zoomimg:before { + width: 56px; + height: 56px; + border-radius: 50%; + position: absolute; + top: 50%; + left: 50%; + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: 2rem; + background: rgba(51, 51, 51, 0.6); + z-index: 2; + margin: calc(-1 * 56px / 2) 0 0 calc(-1 * 56px / 2); + } + .content__zoomimg img { + -o-object-fit: cover; + object-fit: cover; + } + .contestBnr { + align-items: flex-start; + color: #333; + display: flex; + flex-flow: column; + justify-content: center; + padding: 40px 24px; + position: relative; + padding: 64px; + min-height: 232px; + } + .contestBnr:after { + content: ""; + background-color: #f7f5f0; + border-radius: 8px; + z-index: -2; + } + .contestBnr h3 { + font-size: 1.5rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.16; + margin-bottom: 10px; + } + .contestBnr p:last-of-type { + margin-bottom: 0; + } + .contestBnr__illustration { + bottom: 0; + position: absolute; + right: 0; + top: 0; + z-index: -1; + } + .contestBnr__illustration--mob { + top: auto; + } + .deliveryFlowNav { + position: absolute; + top: 24px; + } + .deliveryFlow .modal__wrap { + padding-top: 104px; + } + .deliveryTypes { + display: none; + margin-inline: auto; + } + .deliveryTypes.typeinformation { + padding: 0; + max-width: 760px; + } + .deliveryTypes .field { + margin: 0; + width: 100%; + } + .deliveryTypes--active { + display: block; + } + .radiobuttons--deliveryType { + gap: 24px; + display: flex; + justify-content: center; + margin: 32px auto 56px; + } + .radiobuttons--deliveryType .radiobutton { + width: 50%; + } + .radiobutton--deliveryType { + display: inline-flex; + flex-direction: column; + justify-content: space-between; + } + .field .radiobutton--deliveryType.radiobutton:not(:first-child) { + margin-top: 0; + } + .field .radiobutton--deliveryType.radiobutton:not(:last-child) { + margin-bottom: 0; + } + .radiobutton--deliveryType .radiobutton__label { + font-size: 1.25rem; + font-weight: 500; + text-align: center; + } + .radiobutton--deliveryType .radiobutton__label b { + font-weight: 500; + } + .radiobutton--deliveryType .radiobutton__text { + display: block; + line-height: 1.5; + } + .radiobutton--deliveryType .radiobutton__border { + border-color: #f2efe8; + border-width: 2px; + } + .radiobutton--deliveryType .radiobutton__border:after { + background: url(../media/tickFilled.svg) no-repeat scroll center; + background-size: contain; + content: ""; + opacity: 0; + position: absolute; + right: 12px; + top: 12px; + transition: opacity 250ms ease-in-out; + width: 40px; + height: 40px; + } + .radiobutton--deliveryType .radiobutton__input:not([type="hidden"]) { + cursor: pointer; + width: 100%; + height: 100%; + } + .radiobutton--deliveryType + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__border { + border-color: #74b11f; + } + .radiobutton--deliveryType + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__border:after { + opacity: 1; + } + .radiobutton--deliveryType .icon { + background-position: center; + background-repeat: no-repeat; + background-size: auto 100%; + display: block; + margin: 16px auto; + height: 64px; + } + .radiobutton--deliveryType .icon.shipping { + background-image: url(../media/delivery.svg); + } + .radiobutton--deliveryType .icon.store { + background-image: url(../media/pickup.svg); + } + .deliveryTypeInfo ul { + margin: 0 20px; + } + .deliveryTypeInfo ul li:last-child { + margin: 0; + } + .deliveryTypeInfo__sum { + align-items: center; + display: flex; + flex-direction: column; + text-align: center; + } + .deliveryTypeInfo__sum p { + color: #333; + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.285; + margin-bottom: 8px; + } + .deliveryTypeInfo__link { + color: var(--buttonColor); + font-size: 0.875rem; + position: relative; + z-index: 2; + text-decoration: underline; + } + .deliveryTypeInfo__link:not(:last-child) { + margin-bottom: 4px; + } + .deliveryTypeInfo__link:active { + color: var(--buttonColorActive); + } + .emptyContent { + display: grid; + grid-template-columns: 88px 1fr; + grid-template-areas: "icon text" "icon buttons"; + grid-column-gap: 24px; + grid-row-gap: 16px; + margin: 40px 0; + } + .minibasket .emptyContent { + grid-template-areas: "icon text" "buttons buttons"; + } + .emptyContent:not(:last-child) { + border-bottom: 1px solid #fff; + } + .emptyContent__img { + grid-area: icon; + color: #e6e6e6; + font-size: 5.5rem; + line-height: 1; + } + .emptyContent__text { + grid-area: text; + } + .emptyContent__text p { + margin-bottom: 8px; + } + .emptyContent__btns { + display: flex; + grid-area: buttons; + } + .emptyContent__btns .button { + margin-top: 8px; + margin-bottom: 8px; + } + .emptyContent__btns .button:not(:last-child) { + margin-right: 8px; + } + .emptyContent__btns .button:not(:first-child) { + margin-left: 8px; + } + .expandText__main { + overflow: hidden; + position: relative; + max-height: 96px; + } + .expandText__main:after { + background: linear-gradient(to top, white 0, rgba(255, 255, 255, 0) 100%); + bottom: 0; + content: ""; + pointer-events: none; + position: absolute; + transition: opacity 250ms ease-in-out; + width: 100%; + height: 64px; + } + .expandText:not(.open) .expandText__buttonTextLess { + display: none; + } + .expandText.open .expandText__main { + max-height: inherit; + } + .expandText.open .expandText__main:after { + opacity: 0; + } + .expandText.open .expandText__buttonTextMore { + display: none; + } + .filters--checked .filters__mobButton:after { + background-color: #f47920; + border-radius: 50%; + color: #fff; + content: attr(data-activefilters); + display: inline-block; + font-size: 0.8125rem; + font-weight: bold; + line-height: 23px; + text-align: center; + width: 22px; + height: 22px; + } + .filters { + --mobFiltersTop: 0; + --mobFilterTopBar: 56px; + --mobFilterTopBarSpace: 24px; + --filtersSpace: 16px; + --filterItemSpaceBtm: 16px; + --mobFilterBottomBar: 80px; + align-items: flex-start; + background-color: #f2efe8; + border-radius: 3px; + display: flex; + margin-bottom: 24px; + padding: 12px 16px; + } + .filters__titleWrap { + position: relative; + } + .filters__title { + font-size: 0.875rem; + font-weight: 500; + margin: 0; + } + .filters__title:not(:first-child) { + margin: 0; + } + .filters__mobButtonText { + font-size: 0.9375rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.46; + color: #333; + margin-left: 8px; + } + .filters .selectInline { + margin-left: auto; + } + .filters--listResults .filters__mobButton:after { + position: relative; + right: -6px; + top: -1px; + } + .filter { + --scrollListHeight: 304px; + } + .filter__title { + cursor: pointer; + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + margin: 0; + padding: 6px 24px 6px 0; + position: relative; + white-space: nowrap; + z-index: 1; + } + .filter__titleIcon { + color: #838385; + font-size: 1.25rem; + position: absolute; + pointer-events: none; + right: 0; + top: 0; + } + .filter__titleIcon:before { + content: ""; + } + .filter__titleIcon:before { + transition: -webkit-transform 200ms ease-out; + transition: transform 200ms ease-out; + transition: transform 200ms ease-out, -webkit-transform 200ms ease-out; + -webkit-transform-origin: center; + transform-origin: center; + vertical-align: middle; + } + .filter:not(.filter--closed) .filter__titleIcon:before { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + .filter--closed .filter__content { + display: none; + } + .filter__list.scrollbarShadow .filter__item:last-child { + margin-bottom: 0; + } + .filter__list--bottom:after { + opacity: 0; + } + .filter__list--moreList { + --searchHeight: 80px; + } + .filter__list--moreList .filter__listScroll { + max-height: var(--scrollListHeight); + } + .initialized ~ .filter__showAll { + visibility: hidden; + } + .filter__item:not(:last-child) { + margin-bottom: var(--filterItemSpaceBtm); + } + .filter__no { + margin-left: 2px; + } + .filter__more.active .filter__moreText--more { + display: none; + } + .filter__more:not(.active) .filter__moreText--less { + display: none; + } + .filter__letter { + font-weight: bold; + margin-bottom: 8px; + } + .filters:not(.filters--checked) .filtersClearAll { + pointer-events: none; + } + .filtersLinks { + align-items: center; + display: flex; + flex-direction: column; + } + .filters:not(.filters--checked) .filtersLinks.filtersLinks--all button, + .filter:not(.filter--checked) .filtersLinks button { + pointer-events: none; + } + .categoriesList { + margin: 0; + padding-left: 16px; + } + .categoriesList li { + padding-left: 0; + margin: 0; + } + .categoriesList li:after { + display: none; + } + .categoriesList .categoriesList { + margin-top: 12px; + padding-right: 12px; + } + .categoriesList .acc__header { + justify-content: space-between; + } + .categoriesList__item:last-child { + margin-bottom: 0; + } + .categoriesList__item--level1, + .categoriesList__item--level0 { + font-weight: bold; + } + .categoriesList__item--level1 { + font-size: 0.875rem; + } + .categoriesList__item--level2 { + font-size: 0.8125rem; + font-weight: normal; + } + .categoriesList__item a:not(.link) { + color: inherit; + } + .categoriesList__item a.active { + color: #333; + } + .categoriesList__item > a, + .categoriesList__item > .acc__header { + color: gray; + transition: color 250ms ease; + } + .selectedFilters { + margin-bottom: 24px; + margin-top: -16px; + } + .selectedFilters:not(.active) { + display: none; + } + .selectedFilters__list { + margin: 0; + } + .selectedFilters__list li { + padding-left: 0; + margin: 0; + } + .selectedFilters__list li:after { + display: none; + } + .selectedFilters__list li { + padding-left: 8px; + } + .selectedFilters__item { + align-items: center; + color: #595959; + display: inline-flex; + font-size: 0.875rem; + line-height: 1; + margin: 0; + padding: 8px; + } + .selectedFilters__remove { + margin: -4px -4px -4px 4px; + } + .selectedFilters__remove:before { + content: ""; + } + :root { + --inputPlaceholderColor: #a6a6a6; + --labelSpace: 32px; + } + input[type="number"]::-webkit-inner-spin-button, + input[type="number"]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } + input:-moz-placeholder-shown { + text-overflow: ellipsis; + } + input:-ms-input-placeholder { + text-overflow: ellipsis; + } + input:placeholder-shown { + text-overflow: ellipsis; + } + ::-webkit-input-placeholder { + color: var(--inputPlaceholderColor); + line-height: 1.3; + } + ::-moz-placeholder { + color: var(--inputPlaceholderColor); + line-height: 1.3; + } + input:-webkit-autofill, + input:-webkit-autofill:hover, + input:-webkit-autofill:focus, + input:-webkit-autofill:active { + -webkit-box-shadow: 0 0 0 30px #fff inset !important; + } + .radiobutton--onlyColor.disabled .radiobutton__icon, + .filters:not(.filters--checked) + .radiobutton--onlyColor.filtersClearAll + .radiobutton__icon, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton--onlyColor + .radiobutton__icon, + .filter:not(.filter--checked) + .filtersLinks + button.radiobutton--onlyColor + .radiobutton__icon, + .radiobutton--onlyIcon.disabled .radiobutton__icon, + .filters:not(.filters--checked) + .radiobutton--onlyIcon.filtersClearAll + .radiobutton__icon, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton--onlyIcon + .radiobutton__icon, + .filter:not(.filter--checked) + .filtersLinks + button.radiobutton--onlyIcon + .radiobutton__icon, + .checkbox.disabled, + .filters:not(.filters--checked) .checkbox.filtersClearAll, + .filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.checkbox, + .filter:not(.filter--checked) .filtersLinks button.checkbox, + .radiobutton.disabled, + .filters:not(.filters--checked) .radiobutton.filtersClearAll, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton, + .filter:not(.filter--checked) .filtersLinks button.radiobutton { + opacity: 0.5; + } + .checkbox, + .radiobutton { + position: relative; + } + .checkbox.disabled label, + .filters:not(.filters--checked) .checkbox.filtersClearAll label, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.checkbox + label, + .filter:not(.filter--checked) .filtersLinks button.checkbox label, + .radiobutton.disabled label, + .filters:not(.filters--checked) .radiobutton.filtersClearAll label, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton + label, + .filter:not(.filter--checked) .filtersLinks button.radiobutton label { + cursor: default; + } + .checkbox__input:not([type="hidden"]), + .radiobutton__input:not([type="hidden"]) { + left: 0; + opacity: 0; + position: absolute; + top: 0; + width: 0; + height: 0; + } + .checkbox__label, + .radiobutton__label { + color: #333; + cursor: pointer; + display: block; + font-size: 0.9375rem; + font-weight: 400; + line-height: 1.6; + padding: 0 0 0 var(--labelSpace); + position: relative; + z-index: 2; + } + .checkbox__label ~ .field-validation-error, + .radiobutton__label ~ .field-validation-error { + margin-top: 4px; + padding-left: var(--labelSpace); + } + .checkbox__icon, + .radiobutton__icon { + background-color: #fff; + border: 1px solid #838385; + left: 0; + line-height: 22px; + position: absolute; + text-align: center; + top: 0; + width: 24px; + height: 24px; + } + .checkbox__checkedText, + .radiobutton__checkedText { + display: none; + margin: 8px 0 0; + } + .checkbox__text, + .radiobutton__text { + position: relative; + transition: color 250ms ease; + z-index: 1; + } + .field .checkbox:not(:first-child), + .field .radiobutton:not(:first-child) { + margin-top: var(--checkboxRadioSpace); + } + .field .checkbox:not(:last-child), + .field .radiobutton:not(:last-child) { + margin-bottom: var(--checkboxRadioSpace); + } + .checkbox--button.disabled:after, + .filters:not(.filters--checked) .checkbox--button.filtersClearAll:after, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.checkbox--button:after, + .filter:not(.filter--checked) .filtersLinks button.checkbox--button:after, + .radiobutton--button.disabled:after, + .filters:not(.filters--checked) .radiobutton--button.filtersClearAll:after, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton--button:after, + .filter:not(.filter--checked) .filtersLinks button.radiobutton--button:after { + background-color: #b3b3b3; + content: ""; + left: 0; + position: absolute; + -webkit-transform: rotate(-38deg); + transform: rotate(-38deg); + -webkit-transform-origin: center; + transform-origin: center; + top: 50%; + width: 100%; + height: 1px; + } + .radiobutton--box { + --radioBorderSpace: 20px; + } + .radiobutton--box.disabled .radiobutton__label, + .filters:not(.filters--checked) + .radiobutton--box.filtersClearAll + .radiobutton__label, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton--box + .radiobutton__label, + .filter:not(.filter--checked) + .filtersLinks + button.radiobutton--box + .radiobutton__label { + pointer-events: none; + } + .radiobutton--box .radiobutton__border { + transition: background-color 250ms ease-out; + z-index: -1; + } + .radiobutton--box .radiobutton__icon { + left: var(--radioBorderSpace); + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + transition: background-color 250ms ease-out; + } + .radiobutton--box .radiobutton__icon:after { + content: ""; + } + .radiobutton--box .radiobutton__icon:before { + display: none; + } + .radiobutton--box .radiobutton__icon:after { + opacity: 0; + position: absolute; + top: 50%; + color: #fff; + font-size: 0.875rem; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + } + .radiobutton--box .radiobutton__action { + position: absolute; + right: var(--radioBorderSpace); + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + z-index: 3; + font-size: 1.5rem; + } + .radiobutton--box .radiobutton__action + .radiobutton__action { + right: calc(var(--radioBorderSpace) + 24px + 8px); + } + .radiobutton--box .radiobutton__label { + display: flex; + flex-flow: column; + justify-content: center; + min-height: 84px; + padding-top: var(--radioBorderSpace); + padding-right: calc(var(--radioBorderSpace) + 24px * 2 + 8px + 10px); + padding-bottom: var(--radioBorderSpace); + padding-left: calc(var(--radioBorderSpace) + var(--labelSpace) + 4px); + } + .radiobutton--box .radiobutton__labelTag { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.28; + margin-bottom: 2px; + padding-right: 32px; + } + .radiobutton--box + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon { + background-color: #74b11f; + border-color: #74b11f; + } + .radiobutton--box + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon:after { + opacity: 1; + } + .radiobutton--box + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__border { + border-color: #74b11f; + background-color: #f2efe8; + } + .radiobutton--box + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__label { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + } + .radiobutton--box + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__label + .radiobutton__labelTag { + display: inline-block; + } + .radiobutton--box + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__label + .cardRow__status { + display: inline-block; + } + .radiobutton--box .form { + padding-top: 24px; + } + .radiobutton--readonly .radiobutton__icon { + display: none; + } + .radiobutton--readonly .radiobutton__label { + padding: var(--radioBorderSpace); + padding-left: var(--radioBorderSpace); + } + .radiobutton--readonly .radiobutton__action { + font-size: 0.9375rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.46; + bottom: 0; + right: 0; + -webkit-transform: translateY(calc(100% + 12px)); + transform: translateY(calc(100% + 12px)); + top: auto; + } + .radiobutton--readonly + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__border { + border-color: #c2c2c2; + background-color: initial; + } + .radiobutton--readonly + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__label + .radiobutton__labelTag { + color: #838385; + } + .radiobutton--check .radiobutton__border { + z-index: -1; + } + .radiobutton--check .radiobutton__icon { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + transition: background-color 250ms ease-out; + } + .radiobutton--check .radiobutton__icon:after { + content: ""; + } + .radiobutton--check .radiobutton__icon:before { + display: none; + } + .radiobutton--check .radiobutton__icon:after { + left: 50%; + opacity: 0; + position: absolute; + top: 50%; + color: #fff; + font-size: 0.875rem; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + } + .radiobutton--check + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon { + background-color: #74b11f; + border-color: #74b11f; + } + .radiobutton--check + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon:after { + opacity: 1; + } + .radiobutton--check + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__border { + border-color: #74b11f; + background-color: #f2efe8; + } + .radiobutton--onlyColor.disabled, + .filters:not(.filters--checked) .radiobutton--onlyColor.filtersClearAll, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton--onlyColor, + .filter:not(.filter--checked) .filtersLinks button.radiobutton--onlyColor, + .radiobutton--onlyIcon.disabled, + .filters:not(.filters--checked) .radiobutton--onlyIcon.filtersClearAll, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.radiobutton--onlyIcon, + .filter:not(.filter--checked) .filtersLinks button.radiobutton--onlyIcon { + opacity: 1; + } + .radiobutton--onlyColor + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon, + .radiobutton--onlyIcon + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon { + border-color: #74b11f; + border-width: 2px; + } + .radiobutton--onlyColor .radiobutton__label, + .radiobutton--onlyIcon .radiobutton__label { + padding: 0; + } + .radiobutton--onlyColor .radiobutton__icon, + .radiobutton--onlyIcon .radiobutton__icon { + overflow: hidden; + position: relative; + } + .radiobutton--onlyColor .radiobutton__icon:before, + .radiobutton--onlyIcon .radiobutton__icon:before { + display: none; + } + .radiobutton--onlyColor .radiobutton__icon { + border: 1px solid #c2c2c2; + border-radius: 8px; + display: block; + width: 32px; + height: 32px; + } + .radiobutton--onlyIcon .radiobutton__icon { + align-items: center; + border-color: transparent; + border-radius: 6px; + display: flex; + justify-content: center; + width: 48px; + height: 48px; + } + .radiobutton--onlyIcon img { + display: inline-block; + vertical-align: top; + } + .radiobutton--onlyIcon .icon { + font-size: 2rem; + } + .radiobutton--onlyIcon .icon:before { + width: 32px; + height: 32px; + } + .radiobutton--tab { + flex: 1; + height: 56px; + } + .radiobutton--tab .icon { + font-size: 1.5rem; + margin-right: 8px; + } + .radiobutton__border { + border: 1px solid #c2c2c2; + border-radius: 8px; + pointer-events: none; + transition: border-color 250ms ease-out; + } + .radiobutton__input:not([type="hidden"]):checked ~ .radiobutton__icon { + border-color: #838385; + } + .radiobutton__input:not([type="hidden"]):checked ~ .radiobutton__icon:before { + opacity: 1; + } + .radiobutton--button + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon { + background-color: #838385; + } + .radiobutton--button + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__text { + color: #fff; + } + .radiobutton--tab + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__text { + color: #333; + } + .radiobutton__input:not([type="hidden"]):checked ~ .radiobutton__border { + border-color: #c2c2c2; + } + .radiobutton__input:not([type="hidden"]):checked ~ .radiobutton__checkedText { + display: block; + } + .radiobutton__icon { + border-radius: 50%; + } + .radiobutton__icon:before { + background-color: #f47920; + border-radius: 50%; + content: ""; + left: 50%; + opacity: 0; + position: absolute; + top: 50%; + transition: opacity 250ms ease-in-out; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 10px; + height: 10px; + } + .radiobutton--button .radiobutton__icon { + border-radius: 0; + width: 100%; + height: 100%; + } + .radiobutton--button .radiobutton__icon:before { + display: none; + } + .radiobutton__labelSub { + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.23; + } + .radiobutton__labelTag { + color: #74b11f; + display: none; + font-weight: bold; + margin-bottom: 4px; + } + .radiobutton--tab .radiobutton__label, + .radiobutton--button .radiobutton__label { + align-items: center; + display: flex; + justify-content: center; + padding: 8px; + height: 100%; + } + .radiobutton--tab .radiobutton__label { + font-size: 1rem; + } + .radiobutton--button .radiobutton__label { + min-height: 44px; + } + .checkbox__input:not([type="hidden"]):checked ~ .checkbox__icon { + background-color: #f47920; + border-color: #f47920; + } + .checkbox__input:not([type="hidden"]):checked ~ .checkbox__icon:before { + opacity: 1; + } + .checkbox--button + .checkbox__input:not([type="hidden"]):checked + ~ .checkbox__icon { + background-color: #333; + } + .checkbox--button + .checkbox__input:not([type="hidden"]):checked + ~ .checkbox__text { + color: #fff; + } + .checkbox__icon { + color: #fff; + border-radius: 3px; + font-size: 1rem; + transition: background-color 250ms ease-out; + } + .checkbox__icon:before { + content: ""; + } + .checkbox__icon:before { + line-height: 22px; + opacity: 0; + transition: opacity 250ms ease-in-out; + } + .checkbox--button .checkbox__icon { + width: 100%; + height: 100%; + } + .checkbox--button .checkbox__icon:before { + display: none; + } + .checkbox--button .checkbox__label { + align-items: center; + display: flex; + justify-content: center; + padding: 8px; + height: 100%; + min-height: 44px; + } + .statusMessage { + font-size: 0.875rem; + display: none; + line-height: 1.3; + margin: 4px 0 16px; + padding-left: 24px; + position: relative; + } + .statusMessage:before { + left: 0; + position: absolute; + top: 0; + } + .statusMessage--success { + color: #74b11f; + } + .statusMessage--success.active, + .newsletter__field--success .statusMessage--success { + display: block; + } + .statusMessage--error { + color: #d91a32; + } + .statusMessage--error.active, + .newsletter__field--error .statusMessage--error { + display: block; + } + .select { + position: relative; + width: 100%; + } + .select--open { + z-index: 3; + } + .select--open.select--card .select__button { + border-color: var(--inputBorderColor); + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + .select__main { + position: relative; + } + .select__button { + cursor: pointer; + padding-right: 32px; + position: relative; + text-align: left; + white-space: nowrap; + } + .select__button:after { + content: ""; + } + .select__button::after { + font-size: 1rem; + margin-top: -8px; + position: absolute; + right: 8px; + top: 50%; + -webkit-transform-origin: center; + transform-origin: center; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + } + .select--open .select__button::after { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + .select__placeholder { + color: var(--inputPlaceholderColor); + white-space: nowrap; + } + .select__listWrap, + .autocomplete { + background-color: #fff; + display: none; + left: 0; + margin-top: 12px; + padding: 12px 0; + position: absolute; + top: 100%; + width: 100%; + z-index: 1; + } + .select__list, + .autocomplete__list { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + list-style: none; + margin: 0; + padding: 0; + max-height: 224px; + } + .select__list::-webkit-scrollbar, + .autocomplete__list::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .select__list::-webkit-scrollbar-thumb, + .autocomplete__list::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .select__list::-webkit-scrollbar-thumb:hover, + .autocomplete__list::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .select__list::-webkit-scrollbar-thumb:active, + .autocomplete__list::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .select__list::-webkit-scrollbar-track, + .autocomplete__list::-webkit-scrollbar-track { + background: transparent; + } + .select__option, + .autocomplete__option { + --optionPadding: 12px; + color: #333; + cursor: pointer; + font-size: 0.9375rem; + letter-spacing: -0.02em; + line-height: 1.4; + margin: 0; + padding: 12px; + transition: color 250ms ease, background-color 250ms ease-out; + } + .select__option:before, + .autocomplete__option:before { + content: ""; + display: block; + background-color: #ececec; + position: absolute; + bottom: -1px; + right: auto; + left: auto; + width: calc(100% - var(--optionPadding) * 2); + height: 1px; + } + .select__option:after, + .autocomplete__option:after { + display: none; + } + .select__option.selected, + .selected.autocomplete__option { + background-color: #ececec; + } + .select__option:not(.selected):active, + .autocomplete__option:not(.selected):active { + background-color: #ececec; + } + .select__option.disabled, + .disabled.autocomplete__option, + .filters:not(.filters--checked) .select__option.filtersClearAll, + .filters:not(.filters--checked) .autocomplete__option.filtersClearAll, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.select__option, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.autocomplete__option, + .filter:not(.filter--checked) .filtersLinks button.select__option, + .filter:not(.filter--checked) .filtersLinks button.autocomplete__option { + pointer-events: none; + } + .select--card .select__button { + height: auto; + padding: 14px; + } + .select--card .select__list, + .select--card .autocomplete__list { + max-height: 274px; + } + .select--card .select__listWrap, + .select--card .autocomplete { + border-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; + margin-top: 0; + padding: 0; + position: static; + } + .select--card .select__option, + .select--card .autocomplete__option { + border-top: 1px solid #ececec; + } + .select--card .select__option:last-child, + .select--card .autocomplete__option:last-child { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 8px; + } + .select--card .select__option:not(.selected):active, + .select--card .autocomplete__option:not(.selected):active { + color: var(--buttonColorActive); + } + .selectInline { + align-items: baseline; + display: inline-flex; + position: relative; + } + .selectInline__label { + color: #333; + font-size: 0.875rem; + font-weight: 500; + position: relative; + z-index: 4; + } + .selectInline .select, + .selectInline .select__main { + position: static; + } + .selectInline .select__button { + border: none; + padding-left: 4px; + z-index: 2; + height: auto; + } + .selectInline .select__listWrap, + .selectInline .autocomplete { + border-radius: 6px; + box-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + left: auto; + margin: 0; + padding: 56px 0 16px; + right: -16px; + top: -16px; + width: calc(100% + 40px); + } + .textarea__field { + display: block; + resize: none; + height: 136px; + } + .textarea__field ::-webkit-input-placeholder { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + } + .textarea__field ::-moz-placeholder { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + } + .textarea--medium .textarea__field { + height: 80px; + } + .textarea--short .textarea__field { + height: 48px; + } + .toggle { + line-height: 1.35; + padding: 2px 0 2px calc(44px + 16px); + } + .toggle__label { + color: #999; + display: block; + font-size: 0.875rem; + line-height: 1.4; + transition: color 250ms ease; + } + .toggle__input { + cursor: pointer; + left: 0; + opacity: 0; + position: absolute; + top: 0; + z-index: 2; + width: 44px; + height: 24px; + } + .toggle__input:checked ~ .toggle__control { + background-color: #fff; + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + .toggle__input:checked ~ .toggle__bg { + background-color: #333; + } + .toggle__input:checked ~ .toggle__label { + color: #333; + } + .toggle__input:disabled { + cursor: default; + } + .toggle__input:disabled ~ .toggle__bg { + background-color: #e6e6e6; + } + .toggle__input:disabled ~ .toggle__control { + background-color: #fff; + } + .toggle__bg { + background-color: #999; + border-radius: 100px; + left: 0; + position: absolute; + transition: background-color 250ms ease-out; + top: 0; + width: 44px; + height: 24px; + } + .toggle__control { + background-color: #e6e6e6; + border-radius: 50%; + left: 2px; + position: absolute; + top: 2px; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + width: calc(44px / 2 - 2px); + height: calc(24px - 2px * 2); + } + .tabToggle__tabs { + background-color: #fff; + border-radius: 100px; + display: flex; + margin: 0; + padding: 2px; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + min-width: 160px; + height: 42px; + } + .tabToggle__tabs:before { + background-color: #333; + border-radius: 100px; + content: ""; + left: 2px; + position: absolute; + top: 2px; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + width: calc(50% - 2px); + height: calc(100% - 2px * 2); + } + .tabToggle__tabs.slide:before { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + .tabToggle__tab { + color: #838385; + cursor: pointer; + flex: 1; + font-size: 0.9375rem; + letter-spacing: -0.02em; + margin: 0; + text-align: center; + padding: 10px 8px; + transition: color 250ms ease; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .tabToggle__tab:after { + display: none; + } + .tabToggle__tab.active { + color: #fff; + } + [data-tabToggle-content] { + display: none; + } + [data-tabToggle-content].active { + display: block; + } + fieldset { + border: none; + margin: 0; + padding: 0; + } + .formWrap--center { + text-align: center; + } + .formWrap + .formWrap { + margin-top: var(--fieldRowSpace); + } + .form { + --formMaxWidth: 820px; + margin-bottom: 40px; + } + .form--s { + --formMaxWidth: 496px; + } + .form--full { + --formMaxWidth: 100%; + } + .formWrap--center .form:not(.form--col) { + display: inline-block; + text-align: left; + } + .formWrap--center .form.form--col { + display: inline-flex; + } + .form--center { + margin-inline: auto; + } + .form--col { + align-items: flex-start; + display: flex; + flex-wrap: wrap; + position: relative; + } + .form--address { + min-height: 400px; + } + .form__title { + border-bottom: solid 1px #c2c2c2; + margin-bottom: 40px; + padding-bottom: 16px; + font-size: 1rem; + font-weight: 500; + } + .form__title:not(:first-child) { + margin-top: 0; + } + .form button[type="submit"]:not(.widthAuto), + .form input[type="submit"]:not(.widthAuto) { + min-width: calc(var(--formMaxWidth) / 2 - var(--fieldColumnSpace) / 2); + } + .form__row { + display: flex; + } + .form__row--separate .field { + border-top: 1px solid #ececec; + flex: 1; + margin-top: 13px; + padding-top: 8px; + } + .form__row--separate .field p { + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.23; + margin: 0 0 12px; + } + .form__row--center { + justify-content: center; + } + .form__col { + display: inline-flex; + flex-flow: column; + width: 50%; + } + .togglePassword { + top: 21px; + font-size: 1.5rem; + position: absolute; + right: 18px; + height: 48px; + } + .passwordValidation p { + font-size: 0.75rem; + font-weight: 400; + letter-spacing: initial; + line-height: 1.33; + color: #595959; + margin: 0 0 8px; + } + .passwordValidation ul { + margin: 0; + display: flex; + flex-wrap: wrap; + } + .passwordValidation ul li { + padding-left: 0; + margin: 0; + } + .passwordValidation ul li:after { + display: none; + } + .passwordValidation li { + color: #999; + font-size: 0.8125rem; + margin: 4px 0; + width: 50%; + } + .passwordValidation li.disabled, + .passwordValidation .filters:not(.filters--checked) li.filtersClearAll, + .filters:not(.filters--checked) .passwordValidation li.filtersClearAll { + color: #e6e6e6; + text-decoration: line-through; + } + .field { + margin: 0 calc(var(--fieldColumnSpace) / 2) var(--fieldRowSpace); + text-align: left; + } + .field.hidden { + margin: 0; + } + .field--full { + width: calc(100% - var(--fieldColumnSpace)); + } + .field--small { + flex-shrink: 0; + width: calc(var(--smallField) + var(--fieldColumnSpace)); + } + .field--centered { + text-align: center; + } + .field--centered .field__inner { + display: inline-flex; + margin-left: auto; + margin-right: auto; + text-align: left; + } + .field--hEnd { + text-align: right; + } + .field--hEnd .field__inner { + display: inline-flex; + } + .field--submit { + margin-top: 20px; + text-align: center; + } + .field--comments { + position: relative; + min-height: 16px; + } + .field__inner { + align-items: center; + display: flex; + position: relative; + } + .field__wrap:first-child:last-child { + width: 100%; + } + .field__label { + color: #595959; + display: block; + font-size: 0.8125rem; + line-height: 1.308; + margin: 0 0 4px; + padding-left: var(--inputLabelPadding); + } + .field__label--multiple { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + padding-left: 0; + flex-basis: 100%; + } + .field__labelInfo { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + color: #838385; + } + .radiobutton .field__labelInfo, + .checkbox .field__labelInfo { + display: block; + } + .field__legend { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + margin: 0 0 24px; + } + .field__input:-moz-read-only ~ .field__helper { + color: #838385; + } + .field__input:read-only ~ .field__helper { + color: #838385; + } + .field__input--password { + padding-right: 50px; + } + .field__input--search { + padding-right: 80px; + } + .field__input--inline { + background: transparent; + border-radius: 0; + border-top: none; + border-left: none; + border-right: none; + } + .field__input--inlineB { + display: inline-block; + width: auto; + } + .field__input--sm { + max-width: 131px; + } + .field__inputSubmit, + .field__inputClear { + bottom: 0; + font-size: 1.5rem; + position: absolute; + top: 0; + height: 48px; + } + .field__inputSubmit { + right: 18px; + } + .field__inputClear { + font-size: 1rem; + opacity: 0; + pointer-events: none; + right: 52px; + } + .field__inputClear.active { + opacity: 1; + pointer-events: all; + } + .field__more { + margin: 24px 0 0; + } + .field__more--spaceS { + margin-top: 8px; + } + .field__more--center { + text-align: center; + } + .field__text { + color: #b3b3b3; + font-size: 0.8125rem; + margin: -4px 0 8px; + } + .field__mapInner { + padding-top: 75%; + background-color: #f4f4f4; + position: relative; + } + .statusBox { + margin: 48px 0; + } + .formWrap--center .statusBox { + margin-right: auto; + margin-left: auto; + } + .statusBox p { + color: #333; + font-size: 1.125rem; + font-weight: 500; + } + .statusBox p:last-child { + margin-bottom: 0; + } + .statusBox__icon { + border-radius: 50%; + color: var(--statusColor); + font-size: 4rem; + line-height: 1; + margin-bottom: 24px; + } + .statusBox--success { + --statusColor: #74b11f; + } + .errorMsg { + align-items: center; + color: #d91a32; + display: flex; + font-size: 0.75rem; + margin: 4px 0 8px; + } + .errorMsg:before { + content: ""; + } + .errorMsg:before { + font-size: 1rem; + margin-right: 8px; + } + .birthdayInput { + --birthdaySpace: 8px; + display: flex; + flex-wrap: wrap; + margin-left: calc(-1 * var(--birthdaySpace)); + width: calc(100% + var(--birthdaySpace) * 2); + } + .birthdayInput .field__input { + margin-left: var(--birthdaySpace); + margin-right: var(--birthdaySpace); + } + .birthdayInput .field__input--day, + .birthdayInput .field__input--month { + width: calc(30% - 16px); + } + .birthdayInput .field__input--year { + width: calc(40% - 16px); + } + .formBox { + background-color: #f7f5f0; + border-radius: 8px; + padding: 20px; + margin-bottom: 12px; + } + .formBox--inner { + margin-left: 32px; + } + .formBox--plain { + background-color: transparent; + border-radius: initial; + padding: 0; + } + .formBox__title { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + display: block; + margin: 0 0 24px; + } + .formBox__text { + font-size: 1rem; + margin: 0 0 24px; + } + .formBox__more { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.28; + display: flex; + justify-content: flex-end; + align-items: center; + } + .formBox__more [class^="icon-"], + .formBox__more [class*=" icon-"] { + color: #838385; + font-size: 24px; + margin-right: 9px; + } + .formBox .checkbox ~ .formBox__more { + margin-top: 16px; + } + .radiobuttons, + .checkboxes { + --checkboxRadioSpace: 20px; + } + .radiobuttons--inline, + .checkboxes--inline { + --checkboxRadioSpace: 12px; + gap: var(--checkboxRadioSpace) 24px; + margin-bottom: calc(-1 * var(--checkboxRadioSpace)); + display: flex; + } + .formBox .radiobuttons--inline, + .formBox .checkboxes--inline { + --checkboxRadioSpace: 24px; + margin-bottom: 0; + } + .radiobuttons--addresses, + .checkboxes--addresses { + padding-bottom: 27px; + } + .radiobuttons--colors, + .radiobuttons--icons, + .checkboxes--colors, + .checkboxes--icons { + display: flex; + flex-wrap: wrap; + margin-top: 12px; + } + .radiobuttons--colors, + .checkboxes--colors { + --checkboxRadioSpace: 16px; + gap: var(--checkboxRadioSpace); + } + .radiobuttons--icons, + .checkboxes--icons { + --checkboxRadioSpace: 12px; + gap: var(--checkboxRadioSpace) 8px; + } + .radiobuttons--inline .radiobutton, + .radiobuttons--inline .radiobutton:not(:first-child), + .radiobuttons--inline .radiobutton:not(:last-child), + .radiobuttons--colors .radiobutton, + .radiobuttons--colors .radiobutton:not(:first-child), + .radiobuttons--colors .radiobutton:not(:last-child), + .radiobuttons--icons .radiobutton, + .radiobuttons--icons .radiobutton:not(:first-child), + .radiobuttons--icons .radiobutton:not(:last-child) { + margin: 0; + } + .radiobuttons--scrollV { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + max-height: 224px; + } + .radiobuttons--scrollV::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .radiobuttons--scrollV::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .radiobuttons--scrollV::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .radiobuttons--scrollV::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .radiobuttons--scrollV::-webkit-scrollbar-track { + background: transparent; + } + .radiobuttons--toggle { + background: #ececec; + border-radius: 100px; + display: flex; + justify-content: center; + margin-inline: auto; + padding: 2px; + height: 40px; + } + .radiobuttons--toggle .radiobutton { + color: #838385; + } + .radiobuttons--toggle + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__icon { + background-color: #333; + } + .radiobuttons--toggle + .radiobutton__input:not([type="hidden"]):checked + ~ .radiobutton__text { + color: #fff; + } + .radiobuttons--toggle .radiobutton:not(:last-child) { + margin-bottom: 0; + } + .radiobuttons--toggle .radiobutton:not(:first-child) { + margin-top: 0; + } + .radiobuttons--toggle .radiobutton__label { + align-items: center; + display: flex; + padding: 4px 16px; + height: 100%; + } + .radiobuttons--toggle .radiobutton__icon { + background: transparent; + border: none; + border-radius: 100px; + width: 100%; + height: 100%; + } + .radiobuttons--toggle .radiobutton__icon:before { + display: none; + } + .radiobuttons--toggle .radiobutton__text { + color: #838385; + font-weight: 500; + } + .checkboxes--inline .checkbox, + .checkboxes--inline .checkbox:not(:first-child), + .checkboxes--inline .checkbox:not(:last-child) { + margin: 0; + } + .validation-summary-errors { + margin: 16px 0 0; + } + .validation-summary-errors ul { + list-style: inside; + } + .validation-summary-errors li { + margin-bottom: 8px; + } + .validation-summary-errors li, + .field-validation-error { + color: #d91a32; + } + .field-validation-error { + color: #d91a32; + } + .file-upload { + display: flex; + flex-wrap: wrap; + align-items: center; + margin-bottom: 20px; + } + .file-upload__filled .file-upload__button { + display: none; + } + .file-upload__filled .file-upload__content { + display: inline-flex; + } + .file-upload__input { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + z-index: 2; + cursor: pointer; + } + .file-upload__button { + position: relative; + margin-right: 10px; + } + .file-upload__content { + display: none; + flex-wrap: wrap; + align-items: center; + line-height: 1; + } + .file-upload__name { + font-size: 1rem; + color: #333; + letter-spacing: -0.02em; + margin: 8px 8px 8px 0; + } + .file-upload__delete { + cursor: pointer; + display: inline-flex; + flex-wrap: wrap; + align-items: center; + font-size: 0.8125rem; + font-weight: 500; + color: #333; + } + .file-upload__delete:active { + color: #f47920; + } + .file-upload__delete:active .file-upload__icon { + color: #f47920; + } + .file-upload__icon { + font-size: 1.5rem; + margin-top: -4px; + color: #838385; + } + .file-upload__title { + font-size: 1rem; + letter-spacing: -0.02em; + color: #333; + margin: 10px 10px 10px 0; + } + .file-upload__title span { + letter-spacing: -0.02em; + font-size: 0.8125rem; + } + .formTip { + color: #333; + font-size: 0.8125rem; + letter-spacing: -0.02em; + text-align: left; + } + .formTip--border { + border-top: solid 1px #ececec; + margin: 0 0 40px 0; + padding-top: 8px; + } + .formTip p { + font-size: 0.8125rem; + margin: 0; + } + .loginWrap { + display: flex; + text-align: left; + } + .loginWrap__img { + flex-shrink: 0; + position: relative; + width: 49%; + } + .loginWrap__img img { + -o-object-fit: cover; + object-fit: cover; + -o-object-position: center; + object-position: center; + } + .loginWrap__form { + flex: 1; + padding: 96px 24px; + margin: 0 auto; + max-width: 400px; + } + .loginWrap__form .modal__title { + margin-bottom: 24px; + } + .registerPromo { + margin-top: 40px; + } + .registrationForm .modal__title { + margin-bottom: 48px; + } + .formText { + border-top: 1px solid #d8d8d8; + padding: 24px 0 8px; + text-align: center; + } + .formText p { + color: #333; + font-size: 0.9375rem; + } + .formText p:last-child { + margin: 0; + } + .goToTop { + background-color: #000; + bottom: 32px; + border-radius: 50%; + box-shadow: 0px 5px 15px rgba(51, 51, 51, 0.12); + color: #333; + cursor: pointer; + font-size: 0.875rem; + line-height: 62px; + position: fixed; + right: 24px; + text-align: center; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + -webkit-transform: translateY(150%); + transform: translateY(150%); + z-index: 9; + width: 64px; + height: 64px; + } + .goToTop:before { + display: block; + transition: -webkit-transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895); + transition: transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895); + transition: transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895), + -webkit-transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895); + } + .showToTop .goToTop { + -webkit-transform: translateY(0); + transform: translateY(0); + } + .imgControl { + margin: 0 auto; + display: flex; + width: 100%; + justify-content: center; + } + .imgControl button { + margin: 0 4px; + } + .indicator { + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.231; + align-items: center; + display: inline-flex; + } + .indicator [class^="icon-"], + .indicator [class*=" icon-"] { + margin: 0 4px 2px; + } + .indicator:before { + width: 6px; + height: 6px; + background: transparent; + border-radius: 50%; + content: ""; + margin-right: 6px; + margin-top: -2px; + } + .indicator--orange:before { + background-color: #f47920; + } + .indicator--green:before { + background-color: #74b11f; + } + .indicator--greenLight:before { + background-color: #8dc63f; + } + .indicator--red:before { + background-color: #d91a32; + } + .indicator--strong { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.28; + padding: 4px; + } + .indicator--strong:before { + display: none; + } + .indicator--bg { + background-color: #fef8c6; + border-radius: 4px; + } + .orderTrack .indicator { + flex-shrink: 0; + } + .loader--circle { + margin: 0 auto 32px; + width: 96px; + height: 96px; + } + .loader__inner { + align-items: center; + display: flex; + justify-content: center; + margin: auto; + width: 100%; + height: 100%; + } + .loader__item { + -webkit-animation: bouncedelay 1.4s infinite ease-in-out both; + animation: bouncedelay 1.4s infinite ease-in-out both; + border-radius: 100%; + background-color: #fff; + margin: 4px; + width: 16px; + height: 16px; + } + .loader__item--1 { + -webkit-animation-delay: -0.32s; + animation-delay: -0.32s; + } + .loader__item--2 { + -webkit-animation-delay: -0.16s; + animation-delay: -0.16s; + } + .loader__circle { + align-items: center; + -webkit-animation: circle-loader-spin 1s infinite linear; + animation: circle-loader-spin 1s infinite linear; + border-radius: 50%; + border-top: 10px solid #ece8dc; + border-right: 10px solid #ece8dc; + border-bottom: 10px solid #ece8dc; + border-left: 10px solid #f47920; + display: flex; + justify-content: center; + margin: auto; + -webkit-transform: translateZ(0); + transform: translateZ(0); + width: 96px; + min-width: 96px; + height: 96px; + min-height: 96px; + } + @-webkit-keyframes circle-loader-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + @keyframes circle-loader-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + @-webkit-keyframes bouncedelay { + 0%, + 80%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } + } + @keyframes bouncedelay { + 0%, + 80%, + 100% { + -webkit-transform: scale(0); + transform: scale(0); + } + 40% { + -webkit-transform: scale(1); + transform: scale(1); + } + } + .loadMore { + --barPercentage: 0%; + --loadMoreSpace: 64px; + margin: var(--loadMoreSpace) auto; + text-align: center; + max-width: 736px; + } + .loadMore__text { + color: #333; + margin-bottom: 24px; + } + .loadMore__text:last-child { + margin-bottom: 0; + } + .loadMore__bar { + background-color: #fff; + border-radius: 6px; + margin: 24px auto; + overflow: hidden; + position: relative; + max-width: 288px; + height: 6px; + } + .loadMore__barInner { + background-color: gray; + border-radius: inherit; + left: 0; + position: absolute; + top: 0; + -webkit-transform: scaleX(var(--barPercentage)); + transform: scaleX(var(--barPercentage)); + -webkit-transform-origin: 0 center; + transform-origin: 0 center; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + width: 100%; + height: 100%; + } + .loadMore__button:not(:last-child) { + margin-bottom: 32px; + } + .mainNavWrap { + --mobMenuHorPadding: 16px; + } + .mainNav__list { + margin: 0; + } + .mainNav__list li { + padding-left: 0; + margin: 0; + } + .mainNav__list li:after { + display: none; + } + .mainNav__item { + color: #8c8c8c; + cursor: pointer; + font-size: 0.875rem; + margin: 0 16px; + transition: color 250ms ease; + } + .mainNav__item:first-child { + margin-left: 0; + } + .mainNav__item--active { + color: #333; + } + .mainNav__link { + color: inherit; + display: block; + padding: 8px 8px 16px; + position: relative; + transition: color 250ms ease; + } + .mainNav__link:first-child { + padding-left: 0; + } + .mainNav__link:after { + background-color: #000; + bottom: 0; + content: ""; + left: 0; + opacity: 0; + position: absolute; + -webkit-transform: scaleY(0); + transform: scaleY(0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + transition: opacity 50ms ease-out; + width: 100%; + height: 3px; + } + .mainNav__item--active .mainNav__link:after { + opacity: 1; + -webkit-transform: scaleY(1); + transform: scaleY(1); + transition: opacity 10ms ease-out 250ms, + -webkit-transform 150ms ease-out 250ms; + transition: opacity 10ms ease-out 250ms, transform 150ms ease-out 250ms; + transition: opacity 10ms ease-out 250ms, transform 150ms ease-out 250ms, + -webkit-transform 150ms ease-out 250ms; + } + .megamenu { + position: absolute; + width: 100%; + } + .megamenu__list { + margin: 0; + } + .megamenu__list li { + padding-left: 0; + margin: 0; + } + .megamenu__list li:after { + display: none; + } + .megamenu__list--level2 > li { + color: #333; + font-weight: bold; + } + .megamenu__list--level3 { + margin: 16px 0 40px; + } + .megamenu__list--level3 > li { + color: #8c8c8c; + font-weight: normal; + margin-bottom: 8px; + } + .megamenu__list a { + color: inherit; + transition: color 250ms ease; + } + .megamenu__title { + align-items: baseline; + display: flex; + } + .megamenu__title > *:not(:last-child) { + margin-right: 16px; + } + .megamenu__close { + color: rgba(51, 51, 51, 0.5); + line-height: 1; + } + .message { + align-items: center; + border: 1px solid #ececec; + border-radius: 8px; + display: flex; + margin-bottom: 40px; + padding: 16px; + } + .message__icon { + align-self: flex-start; + font-size: 1.5rem; + margin-right: 8px; + margin-top: -3px; + } + .message__icon.icon-alert { + color: #d91a32; + } + .message__icon.icon-warning { + color: #f47920; + } + .message__icon.icon-tickFilled { + color: #74b11f; + } + .message__text { + color: #333; + } + .message__text p { + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.3; + color: inherit; + margin-bottom: 4px; + } + .message__text p:last-child { + margin: 0; + } + .modal { + align-items: center; + display: flex; + justify-content: center; + left: 0; + opacity: 1; + position: fixed; + top: 0; + transition: opacity 250ms ease-in-out; + z-index: 10; + width: 100%; + height: 100%; + } + .modal:not(.open) { + opacity: 0; + pointer-events: none; + } + .modal__wrap { + background-color: #fff; + border-radius: 8px; + color: #333; + font-size: 1rem; + font-weight: 400; + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 80px 24px 56px; + position: relative; + text-align: center; + width: 800px; + max-width: 92vw; + max-height: 92vh; + z-index: 10; + } + .modal--auto .modal__wrap { + width: auto; + } + .modal--s .modal__wrap { + width: 504px; + } + .modal--l .modal__wrap { + width: 1176px; + } + .modal--full .modal__wrap { + border-radius: 0; + display: flex; + flex-wrap: wrap; + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + } + .modal--transparent .modal__wrap { + background: transparent; + padding: 0; + } + .modal--noSpaces .modal__wrap { + padding: 0; + } + .modal__wrap .btnWrap { + margin-top: 34px; + } + .modal__wrap .btnWrap:last-child { + margin-bottom: 0; + } + .modal__closeButton { + position: absolute; + right: 24px; + top: 24px; + z-index: 2; + } + .modal__mainfigure { + margin: auto; + } + .modal__mainfigure img { + display: inline-block; + -o-object-fit: contain; + object-fit: contain; + -o-object-position: center center; + object-position: center center; + vertical-align: top; + max-width: 92vw; + max-height: 88vh; + } + .modal__titleWrap { + margin: 0 auto 32px; + } + .modal__title { + font-size: 1.5rem; + margin: 0 auto 12px; + max-width: 576px; + } + .modal__title:not(:first-child) { + margin-top: 0; + } + .modal__title:last-child { + margin-bottom: 0; + } + .modal .form { + margin-bottom: 0; + } + .modal--full .modal__content { + width: 100%; + } + .newsletter { + background-color: #e6e6e6; + padding: 32px 0; + display: flex; + } + .newsletter__form { + display: flex; + } + .newsletter__label { + font-size: 16px; + font-weight: bold; + } + .newsletter__inputs { + display: flex; + } + .newsletter__input { + background-color: #fff; + border: 1px solid #999; + border-radius: 5px; + color: #666; + font-size: 0.875rem; + margin-right: 8px; + padding: 8px; + height: 48px; + } + .newsletter__input::-webkit-input-placeholder { + color: #999; + } + .newsletter__input::-moz-placeholder { + color: #999; + } + .newsletter__input:-ms-input-placeholder { + color: #999; + } + .newsletter__input::placeholder { + color: #999; + } + .newsletter__terms { + margin: 8px 0 0; + } + .notifications { + display: none; + position: absolute; + top: 100%; + z-index: 3; + } + .notifications__content { + background-color: #fff; + border-radius: 8px; + box-shadow: 0px 2px 12px rgba(51, 51, 51, 0.08); + padding: 60px 20px 20px 20px; + position: relative; + z-index: 2; + margin-top: 12px; + } + .notifications__close { + position: absolute; + right: 20px; + top: 20px; + color: #333; + font-size: 1.5rem; + cursor: pointer; + } + .notifications__list { + margin: 0; + } + .notifications__list li { + padding-left: 0; + margin: 0; + } + .notifications__list li:after { + display: none; + } + .notifications__overlay { + position: absolute; + z-index: -1; + cursor: pointer; + } + .notifications__content { + width: 415px; + } + .notifications__list { + overflow: auto; + -webkit-overflow-scrolling: touch; + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + max-height: calc(100vh - 210px); + margin: 0 -10px; + padding: 0 10px; + } + .notifications__list::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .notifications__list::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .notifications__list::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .notifications__list::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .notifications__list::-webkit-scrollbar-track { + background: transparent; + } + .notifications__listItem { + color: #838385; + font-size: 0.875rem; + line-height: 1.25; + margin: 0; + padding: 16px 0; + display: flex; + flex-wrap: wrap; + position: relative; + } + .notifications__listItem--unread { + color: #333; + padding-right: 13px; + } + .notifications__listItem--unread:before { + content: ""; + position: absolute; + top: 21px; + right: 0; + width: 6px; + height: 6px; + background: #d91a32; + border-radius: 50%; + } + .notifications__listItem:not(:first-child) { + border-top: 1px solid #ececec; + } + .notifications__date { + width: 70px; + text-align: right; + font-size: 0.875rem; + letter-spacing: -0.01em; + margin-left: auto; + } + .notifications__title { + width: calc(100% - 70px); + max-width: 293px; + padding-right: 5px; + font-size: 0.875rem; + color: #333; + line-height: 1.3; + } + .notifications__maintitle { + font-size: 1.25rem; + font-weight: 700; + color: #333; + line-height: 1.3; + margin: 0 0 10px; + } + .notificationsBtn { + position: relative; + font-size: 1.5rem; + color: #a6a6a6; + } + .notificationsBtn:after { + position: absolute; + } + .outputsRow { + display: flex; + gap: 24px; + } + .output { + align-items: center; + background: #f2efe8; + border-radius: 8px; + display: flex; + flex: 1; + justify-content: space-between; + padding: 16px; + position: relative; + } + .output:not(.output--init) { + align-items: center; + justify-content: flex-start; + padding-right: 64px; + } + .output--pickup .output__inner, + .output--delivery .output__inner { + background-position: left center; + background-repeat: no-repeat; + background-size: auto 40px; + padding-left: 88px; + min-height: 40px; + } + .output--selected { + border: 2px solid #74b11f; + } + .output--delivery .output__inner { + background-image: url(../media/delivery.svg); + } + .output--pickup .output__inner { + background-image: url(../media/pickup.svg); + } + .output--pickup:not(.output--init) .output__inner, + .output--delivery:not(.output--init) .output__inner { + align-items: flex-end; + display: flex; + flex-wrap: wrap; + } + .output--init .output__inner { + align-items: center; + display: flex; + } + .output__title { + align-items: baseline; + color: #333; + display: flex; + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.375; + margin: 0; + } + .output--delivery:not(.output--init) .output__title, + .output--pickup:not(.output--init) .output__title { + font-size: 0.875rem; + line-height: 1.286; + margin-bottom: 4px; + } + .output__title:not(:last-child) { + margin-bottom: 8px; + } + .output--init .output__title { + font-size: 1.125rem; + } + .output__titleInfo { + color: #838385; + font-size: 0.75rem; + letter-spacing: 0; + margin-left: 4px; + } + .output__mainLink { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.286; + margin: 0; + } + .output__mainLink:after { + content: ""; + } + .output__link, + .output__mainLink { + color: var(--buttonColor); + } + .output__link:active, + .output__mainLink:active { + color: var(--buttonColorActive); + } + .output--init .output__button { + flex-shrink: 0; + margin-left: 16px; + } + .output--init .output__button:after { + content: ""; + } + .output:not(.output--init) .output__button { + position: absolute; + right: 16px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + } + .output--selected .output__button { + background: url(../media/tickFilled.svg) no-repeat scroll center; + background-size: contain; + color: #74b11f; + width: 26px; + height: 26px; + } + .output__status { + color: #74b11f; + flex-shrink: 0; + font-size: 1.625rem; + margin-left: 16px; + } + .output__link { + color: var(--buttonColor); + display: block; + font-size: 0.875rem; + text-decoration: underline; + } + .output__link:not(:last-child) { + margin-bottom: 4px; + } + .output__link address { + color: inherit; + line-height: inherit; + } + .output__link--b { + font-weight: 500; + } + .output__time { + color: #333; + font-size: 0.8125rem; + line-height: 1.23; + margin: 4px 0 0; + } + .output__time:before { + font-size: 1rem; + margin-right: 4px; + } + .pagination-container { + margin: 32px 0; + } + .pagination { + margin: 0; + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: center; + } + .pagination li { + padding-left: 0; + margin: 0; + } + .pagination li:after { + display: none; + } + .pagination__item { + border-radius: 50%; + font-size: 1rem; + margin: 0 2px; + } + .pagination__item.active { + background-color: #f47920; + font-size: 1.125rem; + font-weight: 700; + } + .pagination__item.active .pagination__link { + color: #fff; + cursor: default; + } + .pagination__link { + color: var(--buttonColor); + cursor: pointer; + display: block; + line-height: 34px; + text-align: center; + transition: color 250ms ease; + width: 32px; + height: 32px; + } + .pagination__link:active { + color: var(--buttonColorActive); + } + .pagination__link--prev, + .pagination__link--next { + align-items: center; + display: flex; + justify-content: center; + } + .pagination__link--prev.disabled, + .filters:not(.filters--checked) .pagination__link--prev.filtersClearAll, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.pagination__link--prev, + .filter:not(.filter--checked) .filtersLinks button.pagination__link--prev, + .pagination__link--next.disabled, + .filters:not(.filters--checked) .pagination__link--next.filtersClearAll, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.pagination__link--next, + .filter:not(.filter--checked) .filtersLinks button.pagination__link--next { + opacity: 0; + pointer-events: none; + } + .product .fav { + position: absolute; + right: -4px; + top: -4px; + z-index: 2; + } + .product .wishlistButton:not(:first-child) .fav { + right: 24px; + } + .product--mini .fav, + .minibasket__product .fav { + right: 32px; + top: 0; + } + .product__inner { + display: flex; + flex-direction: column; + position: relative; + height: 100%; + } + .product__discount { + align-items: center; + background-color: #fff; + border: 5px solid rgba(244, 121, 32, 0.7); + border-radius: 50%; + color: #333; + display: flex; + flex-direction: column; + font-size: 0.875rem; + font-weight: 700; + justify-content: center; + left: 0; + letter-spacing: -0.02em; + line-height: 1; + position: absolute; + text-align: center; + top: 0; + z-index: 1; + width: 64px; + height: 64px; + } + .basketTable .product__discount { + border-width: 3px; + font-size: 0.6875rem; + font-weight: 500; + width: 44px; + height: 44px; + } + .basketTable .product__discount .product__discountVal { + font-size: 0.875rem; + margin-bottom: -3px; + } + .product__discountVal { + font-size: 1.125rem; + font-weight: bold; + line-height: 1.223; + } + .product__discountText { + font-size: 0.625rem; + font-weight: 500; + line-height: 1.2; + } + .product__img { + margin-bottom: 12px; + padding-top: 16px; + position: relative; + max-width: 320px; + } + .product__img figure { + width: 100%; + } + .product__img figure picture { + display: block; + padding-top: calc(160 / 160 * 100%); + position: relative; + width: 100%; + } + .product__img figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .product__badge { + --badgePosition: 0; + bottom: 0; + position: absolute; + z-index: 2; + width: 40px; + } + .product__badge--left { + left: var(--badgePosition); + } + .product__badge--right { + right: var(--badgePosition); + } + .product__badge img { + display: inline-block; + vertical-align: top; + } + .product__more { + display: flex; + flex: 1; + flex-direction: column; + justify-content: flex-end; + } + .product__title { + color: #333; + display: block; + font-size: 1.125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.3; + margin: 0 0 8px; + } + .product__title:before { + content: ""; + } + .product__desc { + color: #333; + font-size: 0.8125rem; + letter-spacing: -0.02em; + line-height: 1.23; + margin: 0 0 8px; + } + .product__quantity { + position: relative; + z-index: 1; + } + .product__avail { + font-size: 0.8125rem; + } + .minibasket .product__avail { + margin: 4px 0 0; + } + .productsListMini .product:not(:first-child) { + margin-top: 24px; + } + .productsListMini .product:not(:last-child) { + margin-bottom: 24px; + } + .productTags { + display: flex; + flex-wrap: wrap; + margin: -4px 0 8px; + } + .productInfo .productTags { + margin: 0 0 12px; + } + .productTags__tag { + margin: 4px 0; + width: 24px; + height: 24px; + } + .productInfo .productTags__tag { + margin-bottom: 0; + margin-top: 0; + width: 32px; + height: 32px; + } + .productTags__tag:not(:last-child) { + margin-right: 4px; + } + .priceContainer { + display: flex; + justify-content: flex-start; + } + .productInfo .priceContainer, + .productList .priceContainer { + height: 54px; + } + .productList .priceContainer { + justify-content: space-between; + margin-bottom: 12px; + } + .priceContainer .priceBlock { + align-items: baseline; + display: grid; + grid-template-columns: -webkit-max-content; + grid-template-columns: max-content; + grid-template-rows: auto; + } + .priceContainer .priceBlock:not(:first-child) { + padding-left: 8px; + } + .priceContainer .priceBlock:not(:last-child) { + padding-right: 8px; + } + .priceContainer .priceBlock__price { + align-self: end; + } + .priceContainer .priceBlock__price:not(.priceBlock__price--init):first-child { + grid-row-start: 1; + grid-row-end: 3; + } + .priceContainer .priceBlock__text { + align-self: end; + grid-column-start: 2; + grid-column-end: 3; + grid-row-start: 1; + grid-row-end: 3; + } + .priceBlock { + color: #333; + letter-spacing: -0.02em; + line-height: 1; + } + .priceBlock__price { + font-size: 1.125rem; + font-weight: 500; + line-height: 1.334; + text-align: right; + white-space: nowrap; + } + .priceBlock__price--init { + color: #a6a6a6; + font-size: 1rem; + font-weight: 400; + text-decoration: line-through; + } + .priceBlock__price--b { + font-size: 1.625rem; + letter-spacing: -0.03em; + line-height: 1.02; + margin-top: -6px; + } + .priceBlock__price--b .priceBlock__text { + letter-spacing: -0.02em; + } + .priceBlock__text { + font-size: 0.8125rem; + font-weight: 400; + line-height: 1.385; + margin-left: 4px; + white-space: nowrap; + } + .priceRow { + align-items: center; + display: flex; + justify-content: space-between; + font-size: 0.875rem; + margin: 16px 0; + } + .priceRow:first-child { + margin-top: 0; + } + .priceRow .priceBlock { + padding-left: 24px; + } + .priceRow:not(.priceRow--total) .priceBlock__price { + font-weight: normal; + } + .priceRow--total { + align-items: flex-end; + font-size: 1.25rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1; + margin-bottom: 24px; + } + .sideBasket .priceRow--total { + font-size: 1rem; + margin: 8px 0; + } + .priceRow--total .priceBlock__price { + font-size: 1.25rem; + } + .priceRow--total .priceBlock__price--init { + font-size: 0.9375rem; + } + .priceRow__val { + color: gray; + } + .noInfo { + border: 2px solid #fff; + border-radius: 50%; + color: #fff; + font-size: 0.75rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 22px; + text-align: center; + width: 24px; + height: 24px; + } + .infoPopup { + background-color: #fff; + -webkit-filter: drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) + drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2)); + filter: drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) + drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2)); + padding: 16px; + position: absolute; + right: calc(50vw - var(--wrapper) / 2 + var(--gridSpace)); + top: 160px; + transition: opacity 350ms ease, -webkit-transform 350ms ease; + transition: opacity 350ms ease, transform 350ms ease; + transition: opacity 350ms ease, transform 350ms ease, + -webkit-transform 350ms ease; + z-index: 99; + min-width: 320px; + } + .infoPopup.moveOut { + opacity: 0; + pointer-events: none; + -webkit-transform: translateY(-40%); + transform: translateY(-40%); + } + .infoPopup__title { + font-weight: bold; + margin: 0 0 8px; + padding-right: 24px; + } + .infoPopup p { + font-size: 0.875rem; + } + .infoPopup__remove { + position: absolute; + right: 0; + top: 0; + } + .productsSum { + padding: 20px 8px; + } + .productsSum .orDivider__text { + background-color: #f2f2f2; + } + .quantity { + align-items: center; + background-color: #f2efe8; + border-radius: 100px; + display: flex; + position: relative; + width: 100%; + max-width: 296px; + height: 48px; + } + .quantity--init { + position: relative; + } + .quantity--init:before { + content: ""; + } + .quantity--init:before { + color: #838385; + font-size: 1.5rem; + left: 50%; + margin: -12px 0 0 -12px; + position: absolute; + top: 50%; + z-index: 1; + } + .quantity--init:after { + background-color: #f2efe8; + border-radius: 100px; + content: ""; + pointer-events: none; + transition: background-color 250ms ease-out; + } + .quantity--init .quantity__btn { + opacity: 0; + } + .quantity__btn { + background-color: var(--buttonBgColor); + border-radius: 100px; + color: var(--buttonColor); + flex-shrink: 0; + font-size: 1.5rem; + line-height: 1; + width: 60px; + height: 100%; + } + .quantity__btn:not(.disabled) { + cursor: pointer; + } + .quantity__btn:not(.disabled):active { + background-color: var(--buttonBgColorActive); + } + .quantity__btn.disabled, + .filters:not(.filters--checked) .quantity__btn.filtersClearAll, + .filters:not(.filters--checked) + .filtersLinks.filtersLinks--all + button.quantity__btn, + .filter:not(.filter--checked) .filtersLinks button.quantity__btn { + --buttonBgColor: #f2efe8; + --buttonColor: #c2c2c2; + } + .quantity__btn--inc { + --buttonBgColor: #74b11f; + --buttonBgColorHover: #8dc63f; + --buttonBgColorActive: #588718; + --buttonColor: #fff; + } + .quantity__btn--inc:before { + content: ""; + } + .quantity__btn--dec { + --buttonBgColor: #e8e2d7; + --buttonBgColorHover: #d6d0c5; + --buttonBgColorActive: #c9c4b9; + --buttonColor: #838385; + } + .quantity__btn--dec:before { + content: ""; + } + .quantity__btn--notAvailable { + background-color: #ececec; + border-radius: 8px; + color: #a6a6a6; + font-size: 0.9375rem; + font-weight: 500; + min-width: 100%; + } + .quantity__input { + color: #838385; + flex: 1; + font-size: 1.25rem; + font-weight: 500; + letter-spacing: -0.02em; + text-align: center; + } + .quantity__input span { + font-size: 1rem; + } + .quantity:not(.quantity--init) .quantity__input { + pointer-events: none; + } + .quantity.quantity--init .quantity__input { + cursor: pointer; + opacity: 0; + z-index: 2; + } + .quantity__message { + align-items: center; + background: #fff; + border: 1px solid #ececec; + box-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + border-radius: 8px; + bottom: 100%; + display: flex; + font-size: 0.875rem; + left: 50%; + letter-spacing: -0.01em; + margin-bottom: 8px; + opacity: 0; + padding: var(--productPadding); + pointer-events: none; + position: absolute; + -webkit-transform: translateY(16px) translateX(-50%); + transform: translateY(16px) translateX(-50%); + transition: opacity 350ms ease, -webkit-transform 350ms ease; + transition: opacity 350ms ease, transform 350ms ease; + transition: opacity 350ms ease, transform 350ms ease, + -webkit-transform 350ms ease; + width: calc(100% + var(--productPadding) * 2); + } + .basketTable .quantity__message { + left: 50%; + padding: 8px; + white-space: nowrap; + width: auto; + } + .quantity__message:before { + background-color: var(--messageColor); + border-radius: 50%; + color: #fff; + flex-shrink: 0; + font-weight: bold; + line-height: 22px; + margin-right: 8px; + text-align: center; + width: 22px; + height: 22px; + } + .quantity--showMessage .quantity__message { + opacity: 1; + -webkit-transform: translateY(0) translateX(-50%); + transform: translateY(0) translateX(-50%); + } + .quantity__message--added { + --messageColor: #74b11f; + } + .quantity__message--added:before { + content: ""; + } + .quantity__message--removed { + --messageColor: #d8d8d8; + } + .quantity__message--removed:before { + content: ""; + } + .quantity--s, + .basketTable .quantity { + height: 34px; + } + .quantity--s .quantity__btn, + .basketTable .quantity .quantity__btn { + font-size: 0.875rem; + width: 40px; + } + .quantity--s .quantity__input, + .basketTable .quantity .quantity__input { + font-size: 0.875rem; + } + .filters__item .range { + padding: 16px 8px 0 0; + } + .range__slider { + background: #333; + border: none; + border-radius: 0; + box-shadow: none; + margin: 16px; + height: 2px; + } + .range__values { + display: flex; + justify-content: space-between; + } + .range__value { + color: #ccc; + font-size: 0.875rem; + text-align: center; + width: 32px; + } + .range__inputs { + display: flex; + margin-top: 16px; + height: 48px; + } + .range__inputWrap { + flex: 1; + margin-right: 8px; + position: relative; + } + .range__input { + padding-right: 24px; + width: 100%; + } + .range__symbol { + color: gray; + font-size: 0.875rem; + right: 8px; + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + } + .range__submit:before { + content: ""; + } + .noUi-connect { + background-color: #333; + } + .noUi-handle { + border: 1px solid #333; + box-shadow: none; + } + .noUi-horizontal .noUi-handle { + border-radius: 50%; + right: -16px; + top: -16px; + width: 32px; + height: 32px; + } + .noUi-handle:before, + .noUi-handle:after { + display: none; + } + .noUi-tooltip { + background: transparent; + border: none; + font-size: 0.875rem; + font-weight: bold; + line-height: 1; + padding: 4px 0; + } + .noUi-handle-lower .noUi-tooltip, + .noUi-handle-upper .noUi-tooltip { + bottom: 100%; + } + .result { + margin: 0 0 40px; + } + .result--fullheight { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: 0; + padding: 24px 0; + min-height: 60vh; + } + .result__content { + text-align: center; + width: 100%; + } + .result__title { + font-size: 1.875rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + color: #333; + margin: 0 0 8px; + } + .result__p { + margin: 0 0 12px; + } + .result__p--b { + font-size: 1.25rem; + letter-spacing: -0.03em; + } + .result__p:last-child { + margin: 0; + } + .result__button { + margin-top: 24px; + } + .result__code { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + } + .result__code strong { + font-size: 1.125rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + } + .result__mainimg { + width: 100%; + margin: 0 auto 8px; + max-width: 120px; + } + .result__mainimg picture { + display: block; + padding-top: calc(124 / 124 * 100%); + position: relative; + width: 100%; + } + .result__mainimg img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .result__mainimg--notsupported { + margin-bottom: 40px; + max-width: 235px; + } + .result__mainimg--notsupported picture { + padding-top: 82.5531914894%; + } + .result__mainicon { + font-size: 5.9375rem; + margin-bottom: 32px; + } + .result__mainicon--border { + padding: 0 16px; + border-bottom: solid 3px #dad7d0; + } + .result__mainicon--orange { + color: #f47920; + } + .scrollbar { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + } + .scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .scrollbar::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .scrollbar::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .scrollbar::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .scrollbar::-webkit-scrollbar-track { + background: transparent; + } + .scrollbarShadow { + position: relative; + } + .scrollbarShadow:before, + .scrollbarShadow:after { + content: ""; + pointer-events: none; + position: absolute; + transition: opacity 250ms ease-out; + } + .scrollbarShadow--vert:before, + .scrollbarShadow--vert:after { + left: 0; + z-index: 3; + width: calc(100% - 8px); + height: 40px; + } + .scrollbarShadow--vert:before { + background: linear-gradient(to bottom, white 0%, rgba(255, 255, 255, 0) 100%); + top: 0; + } + .scrollbarShadow--vert:after { + background: linear-gradient(to top, white 0%, rgba(255, 255, 255, 0) 100%); + bottom: 0; + } + .scrollbarShadow--hor:before, + .scrollbarShadow--hor:after { + top: 0; + width: 56px; + height: calc(100% - 8px); + } + .scrollbarShadow--hor:before { + background: linear-gradient(to right, white 0%, rgba(255, 255, 255, 0) 100%); + left: 0; + } + .scrollbarShadow--hor:after { + background: linear-gradient(to left, white 0%, rgba(255, 255, 255, 0) 100%); + right: 0; + } + .scrollbarShadow--top:before { + opacity: 0; + } + .scrollbarShadow--bottom:after { + opacity: 0; + } + .scrollbarShadow--right:after { + opacity: 0; + } + .scrollbarShadow--left:before { + opacity: 0; + } + .searchInput { + --searchIconWidth: 48px; + --searchHeight: 48px; + border: 1px solid #fff; + border-radius: 5px; + margin: 16px 0; + position: relative; + height: var(--searchHeight); + } + .searchInput input { + background: transparent; + border: none; + } + .searchInput__input { + padding: 12px var(--searchIconWidth) 12px 12px; + width: 100%; + height: 100%; + } + .searchInput__submit { + align-items: center; + display: flex; + font-size: 24px; + justify-content: center; + position: absolute; + right: 0; + top: 0; + width: var(--searchIconWidth); + height: 100%; + } + .searchInput__submit:before { + content: ""; + } + .sidemenu { + margin: 28px 0 16px; + position: relative; + z-index: 5; + } + .sidemenu__selected:before { + content: ""; + } + .sidemenu__list { + margin: 0; + } + .sidemenu__list li { + padding-left: 0; + margin: 0; + } + .sidemenu__list li:after { + display: none; + } + .sidemenu__list--level2 { + margin: 12px 0; + padding: 0 20px; + } + .sidemenu__link { + display: inline-block; + font-weight: 500; + color: #333; + } + .sidemenu__link--level2 { + font-size: 0.875rem; + margin-bottom: 6px; + letter-spacing: -0.01em; + } + .sideNav { + flex: 1; + padding: 80px 8px 0 32px; + position: relative; + } + .sideNav__list { + margin: 0; + margin: 0; + padding: 0; + } + .sideNav__list li { + padding-left: 0; + margin: 0; + } + .sideNav__list li:after { + display: none; + } + .sideNav__list--level1 { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + left: 0; + padding-right: 16px; + position: -webkit-sticky; + position: sticky; + top: calc(8px + var(--headerHeight)); + max-height: calc(100vh - 16px - var(--headerHeight)); + } + .sideNav__list--level1::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .sideNav__list--level1::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .sideNav__list--level1::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .sideNav__list--level1::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .sideNav__list--level1::-webkit-scrollbar-track { + background: transparent; + } + .fixPos .sideNav__list--level1 { + margin-top: calc(var(--top) - var(--headerHeight) - 148px); + } + .sideNav__list--level2 { + margin: 0 0 4px; + } + .sideNav__item { + border: none; + color: #333; + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.572; + margin: 0; + } + .sideNav__item--level2 { + font-weight: 400; + } + .sideNav__link { + color: inherit; + display: block; + font-size: inherit; + line-height: inherit; + padding: 8px 0 8px 44px; + position: relative; + transition: color 250ms ease; + } + .sideNav__link--level1.active { + background-color: #f2efe8; + border-radius: 6px; + } + .sideNav--lists .sideNav__link--level1.active:before { + background-color: var(--listColor); + border-radius: 4px; + } + .sideNav__item.open > .sideNav__link--level1 { + font-weight: 700; + } + .sideNav__link--level1:before { + font-size: 1.5rem; + left: 8px; + margin-top: -12px; + position: absolute; + top: 50%; + width: 24px; + height: 24px; + } + .sideNav__link--level2 { + border-radius: 6px; + padding-bottom: 6px; + padding-top: 6px; + } + .sideNav__link--level2.active { + background-color: #f2efe8; + font-weight: 500; + } + .sideNav__seperator { + background-color: #ececec; + height: 1px; + } + .sideNav__list .sideNav__seperator { + margin: 12px 0; + } + .swiper { + --swiper-theme-color: #838385; + --swiper-navigation-size: 32px; + --swiper-pagination-bullet-opacity: 1; + --swiper-pagination-bullet-inactive-opacity: 0.5; + --swiper-pagination-bullet-inactive-color: #a6a6a6; + --swiper-pagination-color: #f47920; + --swiper-navigation-color: #838385; + --swiper-navigation-inactive-color: #a6a6a6; + --swiper-navigation-inactive-opacity: 1; + } + .swiper-horizontal > .swiper-pagination-bullets, + .swiper-pagination-bullets.swiper-pagination-horizontal { + bottom: 0; + } + .swiper-button-prev, + .swiper-button-next { + width: var(--swiper-navigation-size); + } + .swiper-button-prev:after, + .swiper-button-next:after { + font-size: var(--swiper-navigation-size); + } + .arrowSlider .swiper-button-prev:after, + .arrowSlider .swiper-button-next:after { + font-size: 2.5rem; + } + .swiper-button-prev.swiper-button-disabled, + .swiper-button-next.swiper-button-disabled { + color: var(--swiper-navigation-inactive-color); + opacity: var(--swiper-navigation-inactive-opacity); + } + .swiper-button-prev:not(.swiper-button-disabled):active, + .swiper-button-next:not(.swiper-button-disabled):active { + color: #f47920; + } + .swiper-button-prev { + left: 0; + } + .swiper-button-prev:after { + content: ""; + } + .swiper-button-next { + right: 0; + } + .swiper-button-next:after { + content: ""; + } + .swiper-pagination { + margin-top: 32px; + } + .swiper-pagNav { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + margin-top: 32px; + } + .swiper-pagNav .swiper-pagination { + margin: 0; + position: relative; + width: auto; + } + .swiper-pagNav .swiper-button-prev, + .swiper-pagNav .swiper-button-next { + margin: 0; + position: relative; + top: 0; + } + .swiper-pagNav__shadow { + content: ""; + position: absolute; + pointer-events: none; + top: 0; + transition: opacity 250ms ease-in-out; + z-index: 1; + width: var(--swiper-navigation-size); + height: calc(100% - 64px); + } + .swiper-pagNav__shadow--prev { + background: linear-gradient(to right, white 0%, rgba(255, 255, 255, 0) 100%); + left: 0; + } + .swiper-pagNav__shadow--next { + background: linear-gradient(to left, white 0%, rgba(255, 255, 255, 0) 100%); + right: 0; + } + .swiper-button-disabled + .swiper-pagNav__shadow { + opacity: 0; + } + .sliderSection { + --sliderSectionSpaceBottom: 40px; + margin: 0 0 var(--sliderSectionSpaceBottom); + } + .simpleSlider { + --simnpleSliderSpaceBottom: 32px; + padding-bottom: var(--simnpleSliderSpaceBottom); + } + .simpleSlider--cat { + margin-left: -16px; + margin-top: -24px; + padding-inline: 16px; + padding-top: 24px; + width: calc(100% + 32px); + } + .simpleSlider--cat:not(.swiper-initialized) .swiper-slide { + margin-right: 16px; + width: calc(20% - 16px); + } + .productsSlider { + margin-top: 40px; + } + .productsSlider .swiper-wrapper { + align-items: stretch; + display: flex; + } + .productsSlider .swiper-slide { + width: 280px; + height: initial; + } + .productsSlider .product { + height: 100%; + } + .social p { + color: #4d4d4d; + margin: 0 0 8px; + } + .social__list { + --socialItemPAdding: 8px; + margin: 0; + display: flex; + margin-left: calc(-1 * var(--socialItemPAdding)); + } + .social__list li { + padding-left: 0; + margin: 0; + } + .social__list li:after { + display: none; + } + .social__item { + color: #ccc; + line-height: 1; + margin: 0; + padding: var(--socialItemPAdding); + } + .social__item:not(:last-child) { + margin-right: 8px; + } + .social__link { + display: inline-block; + font-size: 28px; + vertical-align: top; + } + .social__link:before { + display: inline-block; + vertical-align: top; + } + .storeListWrap .tabToggle { + align-items: center; + bottom: 24px; + display: flex; + justify-content: center; + left: 0; + position: -webkit-sticky; + position: sticky; + z-index: 3; + } + .storeMap { + background-color: #f4f4f4; + flex-grow: 1; + position: relative; + min-height: 600px; + } + .storeTile { + padding-block: 20px; + } + .storeTile:not(:last-child) { + border-bottom: 1px solid #c2c2c2; + } + .mapInfo .storeTile { + margin: 0; + padding: 0; + position: relative; + z-index: 1; + } + .storeTile__thumbnail { + border-radius: 8px; + margin-bottom: 12px; + overflow: hidden; + } + .storeTile__thumbnail figure { + width: 100%; + } + .storeTile__thumbnail figure picture { + display: block; + padding-top: calc(115 / 266 * 100%); + position: relative; + width: 100%; + } + .storeTile__thumbnail figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .storeTile__title { + font-size: 1.25rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + color: #333; + margin-bottom: 4px; + } + .storeTile__title:not(:first-child) { + margin-top: 0; + } + .storeTile__address { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + color: #404040; + margin-bottom: 8px; + } + .storeTileSpecs { + --iconSpacing: 8px; + align-items: center; + display: flex; + margin-bottom: 16px; + } + .mapInfo .storeTileSpecs { + align-items: flex-start; + flex-flow: column; + margin-bottom: 15px; + } + .storeTileSpecs__title { + font-size: 1.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.53; + margin-bottom: 14px; + } + .storeTileSpecs__iconWrap { + display: flex; + align-items: center; + } + .mapInfo .storeTileSpecs__iconWrap { + margin-bottom: 12px; + } + .storeTileSpecs__icon { + color: #838385; + font-size: 1.5rem; + margin-right: var(--iconSpacing); + } + .storeTileSpecs__iconInfo { + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.23; + margin-left: calc(-1 * var(--iconSpacing)); + } + .storeTileOrder { + align-items: flex-start; + background-color: #f7f5f0; + border-radius: 8px; + display: flex; + padding: 10px 20px; + } + .mapInfo .storeTileOrder { + flex-wrap: wrap; + padding: 10px; + } + .storeTileOrder__icon { + color: #838385; + flex-shrink: 0; + font-size: 1.5rem; + margin-right: 8px; + } + .storeTileOrder__details { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.28; + color: #333; + margin-bottom: 0; + } + .mapInfo .storeTileOrder__details { + margin-bottom: 4px; + } + .storeTileOrder__availability { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + color: #838385; + margin-bottom: 0; + } + .mapInfo .storeTileOrder__availability { + display: none; + } + .mapInfo .storeTileOrder__actions { + flex-basis: 100%; + margin-top: 12px; + } + .mapInfo .storeTileOrder__actions .button { + width: 100%; + } + .storeTileOrder--details { + align-items: center; + margin-bottom: 40px; + padding: 24px 21px; + } + .storeTileOrder--details .storeTileOrder__icon { + font-size: 0; + margin-right: 17px; + margin-top: -6px; + width: 51px; + height: 27px; + } + .storeSearch { + background-color: #fff; + margin-bottom: 32px; + text-align: center; + } + .storeSearch__inner { + margin: 0 auto; + max-width: calc(480px + 2 * var(--gridSpace)); + } + .storeSearch p { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + color: #333; + } + .storeSearch p:last-of-type { + margin-bottom: 8px; + } + .storeSearch .form { + margin-bottom: 0; + padding-block: 8px; + } + .storeSearch .field { + margin-bottom: 0; + } + .pin { + cursor: pointer; + display: inline-block; + position: relative; + } + .pin__count { + font-size: 1.375rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.36; + color: #fff; + display: inline-block; + left: 0; + margin: 0px 12px; + position: absolute; + right: 0; + text-align: center; + top: 20px; + } + .mapInfo { + background-color: #fff; + border-radius: 8px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + max-width: 290px; + padding: 48px 12px 12px; + position: relative; + } + .mapInfo:after { + content: ""; + border-bottom-left-radius: 4px; + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + border: 16px solid #000; + border-color: transparent transparent #fff #fff; + bottom: -32px; + box-sizing: border-box; + left: calc(50% - 22.625px); + margin-left: 0; + position: absolute; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + width: 0; + height: 0; + } + .mapInfo:before { + background-color: #fff; + bottom: 0; + content: ""; + display: block; + position: absolute; + left: 0; + margin: 0 auto; + pointer-events: none; + right: 0; + z-index: 1; + width: 50px; + height: 50px; + } + .mapInfo__close { + color: #838385; + font-size: 1rem; + position: absolute; + right: 19px; + top: 19px; + } + .storeLocator { + align-items: center; + background-color: #dbe5e8; + border-radius: 8px; + display: flex; + } + .storeLocator__title { + font-size: 1.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.53; + color: #333; + margin-bottom: 4px; + text-align: center; + } + .storeLocator__inner { + align-items: center; + display: flex; + flex-flow: column; + flex-grow: 1; + padding: 20px; + } + .storeLocator__sub { + font-size: 1rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.5; + text-align: center; + margin-bottom: 20px; + } + .storeLocator__illustration { + flex-basis: 300px; + font-size: 0; + } + .storeLocator__illustration--right { + margin-top: auto; + } + .storeLocator__illustration--mob { + display: none; + } + .storeLocator__form { + --fieldColumnSpace: 12px; + --formMaxWidth: 530px; + margin-bottom: 0; + } + .storeLocator__form .field { + margin-bottom: 0; + } + .storeLocator__form .field--small { + flex-grow: 1; + } + .storeLocator__form .field--small .button { + flex-grow: 1; + width: 100%; + } + .storeHours { + padding: 40px 24px; + position: relative; + color: #333; + } + .storeHours:after { + content: ""; + background-color: #f7f5f0; + border-radius: 8px; + z-index: -2; + } + .storeHours .acc { + border: 0; + } + .storeHours .acc p:last-child { + margin-bottom: 0; + } + .storeHours .acc__header { + padding: 0; + } + .storeHours .acc__content { + padding: 0; + } + .storeHours p { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + color: inherit; + margin-bottom: 6px; + } + .storeHours hr { + border: 0; + border-top: 1px solid #a6a6a6; + margin: 20px auto; + max-width: 227px; + } + .storeHours__inner { + margin: 0 auto; + max-width: 728px; + } + .storeHours__top { + text-align: center; + margin-bottom: 18px; + font-size: 1.25rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.5; + } + .storeHours__top p:last-child { + margin-bottom: 0; + } + .storeHours__illustration { + font-size: 0; + position: absolute; + pointer-events: none; + z-index: -1; + } + .storeHours__illustration--left { + top: 0; + left: 0; + } + .storeHours__illustration--right { + bottom: 25px; + right: 42px; + } + .storeHours__illustration--mob { + top: 0; + left: 0; + } + .storeHours strong { + font-weight: 500; + } + .storeDetails__map { + padding-top: calc(532 / 1001 * 100%); + position: relative; + width: 100%; + background-color: #f7f5f0; + border-radius: 8px; + overflow: hidden; + padding-top: 53.1468531469%; + position: relative; + } + .storeDetails .storeTileSpecs { + display: block; + margin-bottom: 32px; + } + .storeDetails .storeTileSpecs__icon { + margin-right: 4px; + } + .storeDetails .storeTileSpecs__iconInfo { + font-size: 0.9375rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.46; + margin-left: 0; + margin-right: 24px; + } + .table { + --paddingExternalX: 20px; + --paddingExternalY: 20px; + --cellPaddingX: 12px; + --cellPaddingY: 20px; + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + margin: 0 0 10px; + } + .table table { + border: none; + border-collapse: collapse; + text-align: left; + width: 100%; + } + .table th, + .table .mob-th { + color: #000; + font-weight: 500; + text-align: left; + } + .table th { + padding: var(--cellPaddingY) var(--cellPaddingX); + } + .table th:first-child { + padding-left: var(--paddingExternalX); + } + .table th:last-child { + padding-right: var(--paddingExternalX); + } + .table tr { + border: 3px solid transparent; + border-left: 0; + border-right: 0; + position: relative; + } + .table tbody tr { + cursor: pointer; + } + .table tbody tr:after { + background-color: #f7f5f0; + border-radius: 8px; + content: ""; + opacity: 0; + transition: opacity 250ms ease-in-out; + z-index: -1; + } + .table tbody tr.highlight:after { + background-color: #fef8c6; + opacity: 1; + } + .table td { + padding: var(--cellPaddingY) var(--cellPaddingX); + max-width: 172px; + } + .table td a { + font-weight: 400; + } + .table td.table__tools { + text-align: right; + white-space: nowrap; + } + .table td.table__tools .iconButton, + .table td.table__tools .selectedFilters__remove { + font-size: 1.5rem; + } + .table td.table__tools .iconButton:not(:last-child), + .table td.table__tools .selectedFilters__remove:not(:last-child) { + margin-right: 24px; + } + .table .mob-th { + display: none; + } + .timetable { + margin-bottom: 88px; + } + .timetable .swiper-wrapper { + align-items: stretch; + } + .timetable .swiper-slide { + height: auto; + } + .timetable__item { + display: flex; + flex-direction: column; + padding: 1px; + height: 100%; + } + .timetable__day { + background: #f7f5f0; + border-bottom: 1px solid #ececec; + color: #333; + display: flex; + flex-direction: column; + font-size: 0.875rem; + line-height: 1.375; + justify-content: center; + margin-bottom: 16px; + height: 56px; + } + .timetable__dayName { + font-size: 1rem; + font-weight: 500; + } + .timetable__hours--empty { + align-items: center; + border: 1px solid #ececec; + border-radius: 4px; + display: flex; + flex: 1; + justify-content: center; + } + .timetable__hour { + align-items: center; + border: 1px solid #c2c2c2; + border-radius: 4px; + color: #595959; + display: flex; + font-size: 0.875rem; + font-weight: 500; + justify-content: space-between; + padding: 8px 8px 8px 12px; + text-align: left; + transition: border-color 250ms ease-out; + width: 100%; + height: 40px; + } + .timetable__hour:not(.timetable__hour--unavailable) { + cursor: pointer; + } + .timetable__hour:not(:last-child) { + margin-bottom: 8px; + } + .timetable__hour--unavailable { + border-color: #ececec; + color: #d8d8d8; + } + .timetable__hour--selected { + background-color: #f2efe8; + border-color: #74b11f; + } + .timetable__hourVal { + padding-right: 8px; + white-space: nowrap; + } + .timetable__extraText { + color: #333; + font-size: 0.6875rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.183; + text-align: right; + } + .timetable__hours--empty .timetable__extraText, + .timetable__hour--unavailable .timetable__extraText { + color: #d8d8d8; + } + .timetableNav { + transition: opacity 250ms ease-in-out; + } + .timetableNav.swiper-button-disabled { + opacity: 0; + pointer-events: none; + } + .timetableNav--next:before { + content: ""; + } + .timetableNav--prev:before { + content: ""; + } + .tooltip { + margin-left: 8px; + position: relative; + z-index: 2; + } + .tooltip__main { + background: #fff; + border-radius: 10px; + bottom: calc(100% + 12px); + -webkit-filter: drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) + drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2)); + filter: drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) + drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2)); + font-size: 0.875rem; + left: 50%; + line-height: 1.3; + margin-left: -100px; + opacity: 0; + padding: 16px; + position: absolute; + text-align: left; + -webkit-transform: translateY(-8px); + transform: translateY(-8px); + transition: opacity 200ms ease-out, -webkit-transform 250ms ease-out; + transition: opacity 200ms ease-out, transform 250ms ease-out; + transition: opacity 200ms ease-out, transform 250ms ease-out, + -webkit-transform 250ms ease-out; + width: 200px; + } + .tooltip__main:after { + border-style: solid; + bottom: calc(-1 * 8px); + content: ""; + left: 50%; + margin-left: calc(-1 * 8px); + position: absolute; + width: 0; + height: 0; + border-color: #fff transparent transparent transparent; + border-width: 8px 8px 0 8px; + } + .tooltip:not(.tooltip--open) .tooltip__main { + pointer-events: none; + } + .tooltip--open .tooltip__main { + opacity: 1; + -webkit-transform: translateY(0); + transform: translateY(0); + } + .tooltip--bottom .tooltip__main { + bottom: auto; + box-shadow: 0 -4px 15px rgba(51, 51, 51, 0.12); + top: calc(100% + 12px); + } + .tooltip--bottom .tooltip__main:after { + border-width: 0 8px 8px 8px; + border-color: transparent transparent #fff transparent; + bottom: auto; + top: -8px; + } + .tooltip--bottom:not(.tooltip--open) .tooltip__main { + -webkit-transform: translateY(8px); + transform: translateY(8px); + } + .tooltip--right .tooltip__main { + left: -16px; + margin: 0; + } + .tooltip--right .tooltip__main:after { + left: 28px; + } + .tooltip--left .tooltip__main { + left: auto; + margin: 0; + right: -16px; + } + .tooltip--left .tooltip__main:after { + left: auto; + right: 20px; + } + .tooltip__btn { + padding: 0; + transition: color 250ms ease; + } + .topnav { + margin: 28px 0 16px; + position: relative; + z-index: 5; + } + .topnav__selected:before { + content: ""; + } + .topnav__list { + margin: 0; + } + .topnav__list li { + padding-left: 0; + margin: 0; + } + .topnav__list li:after { + display: none; + } + .unavailabelBox { + background-color: #f7f5f0; + border-radius: 8px; + padding: 16px; + } + .checkoutStep__main .unavailabelBox { + margin-bottom: 12px; + } + .unavailabelBox__title { + font-size: 1rem; + font-weight: 500; + margin-bottom: 8px; + } + .minibasket .unavailabelBox__title { + font-size: 1rem; + } + .unavailabelBox .listTools--noBorder { + border: none; + margin: -8px 0; + padding-bottom: 0; + padding-top: 12px; + } + .basketTable__row--unavail .product__img { + opacity: 0.5; + } + .basketTable__row--unavail .product__title { + color: #838385; + } + .playvideo { + position: relative; + } + .playvideo__icon { + --playsize: 32px; + color: var(--buttonColor); + cursor: pointer; + font-size: 2rem; + padding: 0; + transition: color 250ms ease; + } + .playvideo__icon:before { + position: relative; + z-index: 1; + } + .playvideo__icon:after { + background-color: #fff; + border-radius: 50%; + content: ""; + left: 50%; + margin: calc(1px - var(--playsize) / 2) 0 0 calc(1px - var(--playsize) / 2); + position: absolute; + top: 50%; + width: calc(var(--playsize) - 2px); + height: calc(var(--playsize) - 2px); + } + .playvideo__icon:active { + color: var(--buttonColorActive); + } + .playvideo__icon--lg { + --playsize: 64px; + font-size: 4rem; + } + .userAccountBtn { + background-color: #65141b; + border-radius: 50%; + color: #fff; + cursor: pointer; + font-size: 1.25rem; + font-weight: 700; + position: relative; + transition: background-color 250ms ease-out; + width: 44px; + height: 44px; + } + .userMenu { + display: none; + position: absolute; + top: 100%; + z-index: 3; + } + .userMenu__content { + background-color: #fff; + border-radius: 8px; + box-shadow: 0px 2px 12px rgba(51, 51, 51, 0.08); + padding: 60px 20px 20px 20px; + position: relative; + z-index: 2; + margin-top: 12px; + } + .userMenu__close { + position: absolute; + right: 20px; + top: 20px; + color: #333; + font-size: 1.5rem; + cursor: pointer; + } + .userMenu__list { + margin: 0; + } + .userMenu__list li { + padding-left: 0; + margin: 0; + } + .userMenu__list li:after { + display: none; + } + .userMenu__overlay { + position: absolute; + z-index: -1; + cursor: pointer; + } + .userMenu__content { + width: 296px; + } + .userMenu__name { + font-size: 1.125rem; + font-weight: 500; + margin-bottom: 16px; + text-align: center; + } + .userMenu__listItem { + color: var(--color); + font-size: 1rem; + line-height: 1.25; + margin: 0; + } + .userMenu__listItem:not(:first-child) { + border-top: 1px solid #ececec; + } + .userMenu__link { + --color: #333; + --hoverColor: #838385; + align-items: center; + color: var(--color); + display: inline-block; + padding: 16px 0; + vertical-align: top; + } + .userMenu__link--logout { + --color: #f47920; + --hoverColor: #f68d41; + } + .gridBoxes { + --gridBoxSpace: 12px; + display: flex; + flex-wrap: wrap; + margin: 40px 0 40px calc(-1 * var(--gridBoxSpace)); + } + .gridBoxes__box { + margin: var(--gridBoxSpace); + width: calc(33.33% - var(--gridBoxSpace) * 2); + } + .contentBox { + align-items: center; + background-color: #f7f7f7; + display: inline-flex; + padding: 40px; + position: relative; + } + .contentBox__icon { + color: #ccc; + font-size: 2.75rem; + margin-bottom: 24px; + } + .contentBox__title { + color: #666; + font-size: 1.25rem; + margin: 0 0 24px; + } + .contentBox__text { + color: #999; + font-size: 0.875rem; + } + .contentBox__text:last-child { + margin-bottom: 0; + } + .contentBox__link { + color: inherit; + transition: color 250ms ease; + } + .contentBox__link:before { + content: ""; + } + .accountPage { + position: relative; + } + .userNavBlock { + --tabItemHeight: 48px; + margin-top: calc(var(--tabItemHeight) * -1 + 1px); + margin-bottom: 88px; + } + .userNav { + margin: 0; + display: flex; + width: 100%; + } + .userNav li { + padding-left: 0; + margin: 0; + } + .userNav li:after { + display: none; + } + .userNav__item { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + flex: 1 1 0; + overflow: hidden; + text-align: center; + height: var(--tabItemHeight); + } + .userNav__item:not(:last-child) { + margin-right: 10px; + } + .userNav__link { + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.33; + align-items: center; + background-color: #f2efe8; + color: #838385; + display: flex; + flex-direction: column; + justify-content: center; + padding: 12px; + position: relative; + transition: background-color 250ms ease-out; + height: 100%; + } + .userNav__link.active { + background-color: #fff; + color: #333; + } + .userNav__link:after { + content: ""; + } + .accountDetails { + align-items: flex-start; + display: flex; + justify-content: space-between; + } + .accountDetails__form { + flex: 1; + } + .accountDetails__box { + width: 376px; + max-width: 100%; + } + .socialLogins { + background-color: #f5f5f5; + padding: 24px; + } + .socialLogins__title { + margin: 0 0 16px; + } + .addBox { + align-items: center; + background: #f5f5f5; + border: 1px dashed #d6d6d6; + border-radius: 4px; + display: flex; + flex-direction: column; + justify-content: center; + padding: 40px; + position: relative; + text-align: center; + } + .addBox__icon { + color: #c2c2c2; + font-size: 3.75rem; + margin-bottom: 32px; + } + .addBox__text { + margin-bottom: 32px; + } + .addBox__link:before { + content: ""; + } + .addresses { + --addressesGap: 32px; + display: flex; + gap: var(--addressesGap); + flex-wrap: wrap; + } + .addresses__box { + border: 1px solid #d6d6d6; + border-radius: 4px; + padding: 24px; + } + .addresses__box, + .addresses .addBox { + width: calc(33.33% - var(--addressesGap) * 2 / 3); + } + .addressBox { + position: relative; + } + .addressBox__tools { + display: flex; + flex-direction: column; + position: absolute; + right: 4px; + top: 4px; + } + .addressBox .address, + .addressBox .orderSum__col, + .addressBox address { + margin-bottom: 24px; + padding-right: 16px; + } + .addressBox .form__row { + margin-left: calc(-1 * var(--fieldColumnSpace) / 2); + width: calc(100% + var(--fieldColumnSpace)); + } + .addressBox .form__row:last-child { + margin-bottom: calc(-1 * var(--fieldRowSpace)); + } + .address__title { + color: #333; + font-size: 0.875rem; + font-weight: bold; + margin: 0 0 16px; + } + .address__more { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + } + .address__more:last-child { + margin-bottom: 0; + } + .miniBasketButton { + font-size: 1.125rem; + font-weight: 700; + justify-content: space-between; + padding: 4px 10px; + width: 152px; + } + .miniBasketButton__icon { + display: inline-flex; + font-size: 1.5rem; + margin-top: 10px; + position: relative; + } + .miniBasketButton__no { + margin-left: -6px; + margin-top: -10px; + } + .miniBasketButton .priceBlock { + color: #fff; + } + .miniBasketButton .priceBlock__price { + font-weight: 700; + } + .basketMain__content { + --mainLayoutSpace: 56px; + padding-left: 0; + } + .basketTable { + --imgWidth: 96px; + --imgMarginRight: 24px; + } + .checkoutStep__main .basketTable { + margin-inline: auto; + max-width: 820px; + } + .basketTable__row { + align-items: center; + display: flex; + padding: 4px 104px 4px 20px; + position: relative; + } + .basketTable__row:not(.basketTable__row--head) { + border-bottom: 1px solid #ececec; + } + .basketTable__row--head { + align-items: flex-end; + background-color: #f2efe8; + border-radius: 8px; + padding-block: 16px; + } + .basketTable__row--head .basketTable__cell { + color: #333; + font-size: 0.9375rem; + font-weight: 500; + } + .basketTable__row--head .basketTable__cell:first-child { + padding-left: 16px; + } + .basketTable__cell--price { + flex-shrink: 0; + margin-right: 40px; + text-align: right; + width: 80px; + } + .basketTable__cell--quant { + flex-shrink: 0; + margin: 0 32px; + text-align: center; + width: 152px; + } + .basketTable__row--head .basketTable__cell--quant { + text-align: left; + } + .basketTable__cell--button { + width: 232px; + } + .minibasket .basketTable__cell--button { + margin: 0; + width: 100%; + } + .basketTable__cell--more { + width: 100%; + } + .basketTable__cell .product__img { + flex-shrink: 0; + margin: 0 var(--imgMarginRight) 0 0; + padding: 0; + width: var(--imgWidth); + } + .basketTable__cell .product__title { + margin: 0; + position: relative; + } + .basketTable__cell .product__avail { + margin: 8px 0 0; + } + .basketTable__no { + font-weight: 400; + } + .basketTable .priceBlock__price { + font-size: 1.25rem; + line-height: 1.5; + } + .basketTable .priceBlock__price--init { + font-size: 0.9375rem; + line-height: 1.467; + margin-top: -5px; + } + .basketTable__remove { + margin-top: -16px; + position: absolute; + right: 20px; + top: 50%; + } + .basketTable .product__inner { + align-items: center; + flex-direction: row; + position: static; + } + .basketTable .fav { + font-size: 2rem; + margin-top: -16px; + right: 60px; + top: 50%; + } + .minibasket .basketTable { + --imgWidth: 80px; + --basketProductSpaceV: 16px; + } + .minibasket .basketTable .basketTable__row:not(.basketTable__row--head) { + align-content: center; + align-items: flex-start; + flex-wrap: wrap; + padding: var(--basketProductSpaceV) 8px var(--basketProductSpaceV) 96px; + min-height: 112px; + } + .minibasket .basketTable .basketTable__remove { + font-size: 1.5rem; + margin: 0; + right: 8px; + top: var(--basketProductSpaceV); + z-index: 2; + } + .minibasket .basketTable .basketTable__cell--product { + flex: auto; + width: 100%; + } + .minibasket .basketTable .basketTable__cell--product:not(:last-child) { + margin-bottom: 8px; + } + .minibasket .basketTable .basketTable__cell--quant { + margin: 0; + } + .minibasket .basketTable .basketTable__cell--price { + align-items: flex-end; + display: inline-flex; + flex: 1; + justify-content: flex-end; + margin: 0; + width: auto; + height: 34px; + } + .minibasket .basketTable .fav { + font-size: 1.5rem; + margin: 0; + right: 40px; + top: var(--basketProductSpaceV); + } + .minibasket .basketTable .product__img { + left: 8px; + margin-top: -40px; + position: absolute; + top: 50%; + } + .minibasket .basketTable .product__title { + font-size: 0.9375rem; + padding-right: 72px; + } + .sideBasket { + background: #fff; + } + .sideBasket__title:before { + content: ""; + } + .cards { + align-items: center; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: 16px 0 0; + } + .cards figure { + margin: 4px; + } + .cards img { + display: inline-block; + vertical-align: top; + } + .cards--inline { + display: inline-flex; + margin: -4px 0; + } + .minibasket { + --miniBasketWidth: 544px; + --miniBasketSpaceH: 16px; + --miniBasketProductSpaceTop: 16px; + --miniBasketProductSpaceH: 12px; + z-index: 2; + } + .minibasket__inner { + background-color: #fff; + position: fixed; + right: 0; + top: var(--top); + z-index: 10; + width: var(--miniBasketWidth); + height: var(--windowHeight); + } + .minibasket__top { + flex: 1; + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + } + .minibasket__top::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .minibasket__top::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .minibasket__top::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .minibasket__top::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .minibasket__top::-webkit-scrollbar-track { + background: transparent; + } + .minibasket__header { + align-items: center; + display: flex; + padding: 32px var(--miniBasketSpaceH) 24px; + } + .minibasket__header .close-mini-cart { + margin-left: auto; + } + .minibasket__title { + color: #333; + font-size: 1.25rem; + font-weight: 500; + margin: 0 16px 0 0; + } + .minibasket__content { + padding: 0 var(--miniBasketSpaceH); + } + .minibasket__product { + border-bottom: 1px solid #ececec; + padding: var(--miniBasketProductSpaceTop) var(--miniBasketProductSpaceH) 24px; + position: relative; + } + .minibasket__remove { + position: absolute; + right: var(--miniBasketProductSpaceH); + top: var(--miniBasketProductSpaceTop); + z-index: 2; + } + .minibasket__bottom { + background: #fff; + box-shadow: 0px -2px 10px rgba(51, 51, 51, 0.1); + padding: 24px; + } + .basketInfo { + color: #595959; + font-size: 0.8125rem; + letter-spacing: -0.02em; + margin: 16px 0 0; + text-align: center; + } + .sideBasket .basketInfo { + margin-top: 8px; + } + .miniCart__main { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; + } + .miniCart__holder .loader { + display: flex; + min-height: 240px; + } + .miniCart__holder .loader__item { + background-color: #999; + } + .quantinyNo { + align-items: center; + background-color: #f0f0f0; + border-radius: 5px; + display: inline-flex; + justify-content: center; + width: 64px; + height: 48px; + } + .form--basket { + margin-block: 32px; + } + .secureCheckout { + align-items: center; + display: inline-flex; + } + .secureCheckout__img { + width: 142px; + } + .secureCheckout figure { + width: 100%; + } + .secureCheckout figure picture { + display: block; + padding-top: calc(28 / 142 * 100%); + position: relative; + width: 100%; + } + .secureCheckout figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .checkout { + --checkoutSpaceTop: 77px; + padding: var(--checkoutSpaceTop) 0 0; + } + .checkout .productsSum { + position: -webkit-sticky; + position: sticky; + right: 0; + top: var(--checkoutSpaceTop); + } + .checkout__title { + font-size: 2.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.19; + text-align: center; + margin: 0 0 99px; + } + .checkout > h2 { + font-size: 1.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.53; + text-align: center; + margin: 0 0 25px; + } + .checkout .acc__content { + padding: 0 0 32px; + } + .checkoutSteps { + counter-reset: checkoutstep; + } + .checkoutStep { + --checkoutStepSpace: 24px; + border-bottom: 1px solid #c2c2c2; + } + .checkoutStep:first-child { + border-top: 1px solid #c2c2c2; + } + .checkoutStep:last-child { + border-bottom: 0; + } + .checkoutStep--bottomInfo { + border: 0; + padding-top: 5px; + color: #333; + } + .checkoutStep--bottomInfo p { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + color: inherit; + margin: 0 0 8px; + } + .checkoutStep.checkoutStep--final .checkoutStep__main { + padding: var(--checkoutStepSpace) 0; + } + .checkoutStep__main .form, + .checkoutStep__main .form__row:last-child .field { + margin-bottom: 0; + } + .checkoutStep__edit { + margin: 0 calc(-1 * var(--iconButtonSpace)); + position: absolute; + right: var(--checkoutStepSpace); + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + } + .commentsBlock { + display: none; + position: relative; + } + .showComments { + left: 0; + position: absolute; + top: 0; + transition: opacity 250ms ease-in-out; + } + .showComments.active { + opacity: 0; + pointer-events: none; + } + .checkoutProducts { + margin-bottom: 16px; + } + .checkoutProducts .acc__header { + justify-content: space-between; + } + .checkoutProducts .acc__icon { + margin-right: -8px; + } + .checkoutMsg { + color: #333; + text-align: center; + margin: 0 0 40px; + } + .checkoutMsg img { + margin-bottom: 19px; + width: 124px; + height: 124px; + } + .checkoutMsg__title { + font-size: 1.875rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + color: inherit; + margin: 0; + } + .checkoutMsg p { + color: inherit; + margin: 0 0 11px; + } + .checkoutMsg .button { + margin-top: 43px; + } + .checkoutMsg__code { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + } + .checkoutMsg__code strong { + font-size: 1.125rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + } + .checkoutTracking { + align-items: center; + background-color: #f2efe8; + border-radius: 8px; + color: #333; + display: flex; + margin: 0 auto 60px; + padding: 20px; + max-width: 821px; + } + .checkoutTracking__inner { + flex-grow: 1; + width: 100%; + } + .checkoutTracking p { + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.33; + color: inherit; + margin: 0 0 5px; + } + .checkoutTracking ul li { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + } + .checkoutTrackingMsg { + text-align: center; + color: #333; + margin: 40px 0; + } + .checkoutTrackingMsg p { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + color: inherit; + margin: 0; + } + .printRow { + display: flex; + justify-content: flex-end; + } + .printRow .icon { + color: #333; + } + .loyalty { + background-color: #f7f5f0; + border-radius: 8px; + padding: 20px; + margin: 40px 0 48px; + } + .loyalty__img { + flex-shrink: 0; + font-size: 0; + display: flex; + align-items: center; + } + .loyalty__img img { + width: 80px; + height: 80px; + } + .loyalty__img img:not(:last-child) { + margin-right: 8px; + } + .loyalty__inner { + display: flex; + flex-grow: 1; + } + .loyalty__col { + flex: 1 1 0; + } + .loyalty__col:not(:last-child) { + margin-right: 1px; + } + .loyalty__row { + align-items: center; + display: flex; + flex-flow: row; + flex-wrap: nowrap; + flex-grow: 1; + } + .loyalty__row:not(:last-child) { + margin-bottom: 1px; + } + .loyalty__cell { + align-items: center; + background-color: #fff; + display: flex; + flex-flow: row; + flex-wrap: nowrap; + flex: 1 1 0; + justify-content: space-between; + padding: 10px 14px; + height: 100%; + } + .loyalty__cell span { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + } + .loyalty__cell span:first-child { + margin-right: 15px; + } + .loyalty__table { + display: flex; + flex-grow: 1; + flex-flow: column; + } + .loyaltyList { + text-align: left; + max-width: 520px; + margin: 40px auto 30px; + padding: 0; + } + .loyaltyList li { + font-size: 1.25rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.5; + display: inline-block; + } + .loyaltyList li:not(:last-child) { + margin-bottom: 13px; + } + .loyaltyList li:after { + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + } + .loyaltyList li .field__input--inlineB { + margin: 0 5px; + } + .loyaltyList li:nth-child(2):after { + top: 20px; + } + .contactinfo { + margin-bottom: 42px; + } + .contactinfo__section { + margin-bottom: 32px; + } + .contactinfo__subtitle { + font-weight: 500; + margin: 0 0 8px; + } + .contactinfo__link { + align-items: center; + color: #333; + display: inline-flex; + flex-wrap: wrap; + font-size: 0.8125rem; + font-weight: 500; + line-height: 1; + margin: 8px 0; + } + .contactinfo__link:active { + color: #f47920; + } + .contactinfo__link:active .contactinfo__icon { + color: #f47920; + } + .contactinfo__icon { + color: #838385; + font-size: 1.5rem; + margin: 0 8px 0 4px; + } + .contactinfo__note { + color: #838385; + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + } + .gallery { + display: flex; + flex-wrap: wrap; + max-width: 1017px; + margin: 0 auto 40px; + } + .gallery__figure { + width: 100%; + margin: 10px 0; + max-width: 318px; + } + .gallery__figure figure { + width: 100%; + } + .gallery__figure figure picture { + display: block; + padding-top: calc(203 / 318 * 100%); + position: relative; + width: 100%; + } + .gallery__figure figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .gallery__figure img { + border-radius: 8px; + cursor: pointer; + } + .galleryMainImg { + width: 100%; + margin: 0 0 20px; + --swiper-navigation-size: 40px; + } + .galleryMainImg__slide img { + max-height: calc(100vh - 220px); + border-radius: 8px; + } + .galleryThumbs { + max-width: 468px; + margin: 0 auto; + padding-bottom: 30px; + width: 100%; + } + .galleryThumbs .swiper-slide-thumb-active img { + border-color: #74b11f; + } + .galleryThumbs__slide { + cursor: pointer; + } + .galleryThumbs img { + border-radius: 6px; + border: solid 2px transparent; + } + .gallerySlider { + height: 100%; + display: flex; + flex-wrap: wrap; + align-items: center; + flex-direction: column; + justify-content: center; + padding: 20px 10px; + } + .history { + --historycnt: 92px; + --hthumb: 160px; + } + .history__sections { + border-bottom: 1px solid #ececec; + margin-bottom: 32px; + padding-bottom: 40px; + } + .history__mainimg { + margin-bottom: 72px; + position: relative; + } + .history__mainimg figure { + width: 100%; + } + .history__mainimg figure picture { + display: block; + padding-top: calc(500 / 984 * 100%); + position: relative; + width: 100%; + } + .history__mainimg figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .history__section { + display: flex; + flex-wrap: wrap; + } + .history__date { + font-size: 0.875rem; + font-weight: 700; + letter-spacing: -0.02em; + padding-right: 52px; + position: relative; + text-align: right; + width: var(--historycnt); + } + .history__date:before, + .history__date:after { + content: ""; + position: absolute; + right: 44px; + } + .history__date:before { + width: 10px; + height: 10px; + background: #f47920; + border-radius: 50%; + margin-right: -5px; + top: 4px; + } + .history__date:after { + border-left: 1px dashed #a6a6a6; + top: 22px; + height: calc(100% - 22px - 5px); + } + .history__content { + margin-bottom: 40px; + width: calc(100% - var(--historycnt)); + } + .history__thumb { + flex-shrink: 0; + position: relative; + width: var(--hthumb); + } + .history__thumb figure { + width: 100%; + } + .history__thumb figure picture { + display: block; + padding-top: calc(120 / 160 * 100%); + position: relative; + width: 100%; + } + .history__thumb figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .history__description p:last-child { + margin-bottom: 0; + } + .landingList { + --colGap: 16px; + --landingItemSpace: 16px; + --landingTitleMobSpace: 8px; + display: flex; + flex-wrap: wrap; + -webkit-column-gap: var(--colGap); + -moz-column-gap: var(--colGap); + column-gap: var(--colGap); + row-gap: 48px; + } + .landingList__item { + display: inline-flex; + flex-direction: column; + padding: var(--landingItemSpace) 0; + position: relative; + width: calc(16.66% - 5 * var(--colGap) / 6); + } + .landingList__item.active { + z-index: 1; + } + .landingItem { + text-align: center; + } + .landingItem--box { + background: #fff; + border-radius: 8px; + padding: 16px 16px 24px; + } + .swiper-slide-visible .landingItem--box { + box-shadow: 0px 0px 24px rgba(51, 51, 51, 0.08); + } + .landingItem__img { + padding: 0 var(--landingItemSpace); + pointer-events: none; + } + .landingItem__img figure { + width: 100%; + } + .landingItem__img figure picture { + display: block; + padding-top: calc(156 / 205 * 100%); + position: relative; + width: 100%; + } + .landingItem__img figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .landingItem--box .landingItem__img { + margin-bottom: 12px; + } + .landingItem__link { + color: var(--buttonColor); + font-size: 0.9375rem; + font-weight: 500; + margin: 16px 0 0; + } + .landingItem__link:before { + content: ""; + } + .landingItem__link:active { + color: var(--buttonColorActive); + } + .landingItem__title { + align-items: center; + border-radius: 8px; + color: #333; + display: inline-flex; + flex: 1; + font-size: 0.9375rem; + font-weight: 500; + justify-content: center; + line-height: 1.4; + margin: 0; + padding: var(--landingItemSpace); + transition: color 250ms ease; + } + .landingItem__title:before { + background: url(../media/wood.png) repeat center; + content: ""; + opacity: 0; + transition: opacity 250ms ease-in-out; + z-index: -1; + } + .landingItem:not(.landingItem--box) .landingItem__title { + overflow: hidden; + position: relative; + pointer-events: none; + } + .landingItem--box .landingItem__title:active { + color: var(--buttonColorActive); + } + .landingItem--box .landingItem__title:after { + content: ""; + } + .landingItem__desc { + color: #838385; + font-size: 0.8125rem; + letter-spacing: -0.02em; + line-height: 1.23; + margin: 8px 0 0; + } + .landingItem__submenu { + margin: 0; + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + background: #fff; + box-shadow: 0px 2px 12px rgba(51, 51, 51, 0.08); + border-radius: 8px; + display: none; + left: 0; + padding: var(--landingItemSpace) 0; + position: absolute; + top: calc(100% - var(--landingItemSpace) + 8px); + width: 100%; + max-height: 472px; + } + .landingItem__submenu li { + padding-left: 0; + margin: 0; + } + .landingItem__submenu li:after { + display: none; + } + .landingItem__submenu::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .landingItem__submenu::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .landingItem__submenu::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .landingItem__submenu::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .landingItem__submenu::-webkit-scrollbar-track { + background: transparent; + } + .landingItem__submenuItem { + font-size: 0.875rem; + line-height: 1.429; + margin: 0; + text-align: left; + } + .landingItem__submenuLink { + color: #333; + display: block; + padding: 12px var(--landingItemSpace); + transition: color 250ms ease; + } + .newListLink:before { + color: #f47920; + } + .listsBlock { + z-index: 3; + } + .listsBlock__inner { + background: #fff; + box-shadow: 0px 4px 10px rgba(51, 51, 51, 0.25); + border-radius: 6px; + padding: 16px; + position: relative; + } + .listsBlock__title { + color: #333; + font-size: 0.875rem; + font-weight: 500; + line-height: 1; + margin: 0 0 24px; + } + .listsBlock__list { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + border-bottom: 1px solid #c2c2c2; + margin-bottom: 16px; + padding-bottom: 16px; + max-height: 176px; + } + .listsBlock__list::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .listsBlock__list::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .listsBlock__list::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .listsBlock__list::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .listsBlock__list::-webkit-scrollbar-track { + background: transparent; + } + .listsBlock__close { + position: absolute; + right: 0; + top: 0; + } + .listsBlock__item:not(:first-child) { + margin-top: 16px; + } + .listsBlock__item:not(:last-child) { + margin-bottom: 16px; + } + .listsBlock__name { + align-items: center; + color: #333; + display: flex; + font-size: 0.875rem; + font-weight: 500; + line-height: 1.2; + padding-left: 36px; + position: relative; + min-height: 24px; + } + .listsBlock__name:before { + font-size: 2rem; + left: 0; + margin-top: -16px; + position: absolute; + top: 50%; + width: 32px; + height: 32px; + } + .myLists:not(.myLists--grid) { + text-align: right; + } + .myLists--grid { + --listsGap: 24px; + display: flex; + flex-wrap: wrap; + gap: var(--listsGap); + } + .myLists--grid .myList { + width: calc(33.33% - 2 * var(--listsGap) / 3); + } + .myLists--row { + --listsGap: 24px; + display: flex; + gap: var(--listsGap); + } + .myLists__new { + margin: 12px 0; + } + .myList { + align-items: center; + display: flex; + justify-content: flex-start; + position: relative; + text-align: left; + } + .myList:not(.myList--box) { + border-bottom: 1px solid #c2c2c2; + padding: 12px 80px 12px 0; + } + .myList--box { + border: 1px solid #d8d8d8; + border-radius: 8px; + padding: 24px 12px; + min-height: 80px; + } + .myList--box:before { + content: ""; + } + .myList--box:after { + box-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + content: ""; + opacity: 0; + pointer-events: none; + transition: opacity 250ms ease-in-out; + } + .myList--box:before { + bottom: 0; + color: rgba(255, 255, 255, 0.6); + font-size: 4rem; + position: absolute; + right: 0; + } + .myList--box.myList--new:before { + color: rgba(244, 121, 32, 0.5); + } + .myList--box.myList--fav:before { + content: ""; + } + .myList--box.myList--fav:before { + color: rgba(51, 51, 51, 0.1); + } + .myList--new { + border-color: #f47920; + border-style: dashed; + } + .myList__icon { + align-items: center; + display: inline-flex; + flex-shrink: 0; + justify-content: center; + } + .myList__icon:after { + background-color: var(--listColor); + content: ""; + border-radius: 8px; + z-index: -1; + } + .myList:not(.myList--box) .myList__icon { + font-size: 2rem; + margin-right: 20px; + position: relative; + width: 60px; + height: 60px; + } + .myList:not(.myList--box) .myList__icon:before { + width: 32px; + height: 32px; + } + .myList--box .myList__icon { + font-size: 2rem; + margin-right: 8px; + } + .myList--box .myList__icon:before { + width: 32px; + height: 32px; + } + .myList__title { + color: var(--buttonColor); + display: block; + font-size: 1.125rem; + font-weight: 700; + line-height: 1.2; + margin: 0; + } + .myList__title:active { + color: var(--buttonColorActive); + } + .myList__title:after { + content: ""; + } + .myList--box .myList__title { + font-size: 1.375rem; + } + .myList--editView .myList__title { + padding-right: 48px; + } + .myList--box .myList__link, + .myList--box .myList__titleInner { + position: relative; + z-index: 1; + } + .myList__link { + pointer-events: none; + } + .myList__no { + font-size: 0.9375rem; + font-weight: 500; + } + .myList__tools { + display: flex; + margin-top: -12px; + position: absolute; + right: 12px; + top: 50%; + } + .myList__tools .iconButton:not(:last-child), + .myList__tools .selectedFilters__remove:not(:last-child) { + margin-right: 8px; + } + .myList__edit { + position: absolute; + right: 8px; + top: 8px; + } + .myList__new:after { + content: ""; + } + .productList .product, + .productsSlider .product { + box-shadow: 0 2px 12px rgba(51, 51, 51, 0.08); + border-radius: 8px; + padding: var(--productPadding); + transition: box-shadow 350ms ease-out; + } + .productList { + --productSpaceH: 24px; + --productSpaceV: 24px; + display: flex; + flex-wrap: wrap; + gap: var(--productSpaceV) var(--productSpaceH); + } + .productList .product { + width: calc(20% - 4 * var(--productSpaceH) / 5); + } + .productList .quantity { + max-width: 100%; + } + .listTools { + border-bottom: 1px solid #c2c2c2; + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: -8px; + padding: 0 0 8px; + } + .listTools__counter { + font-size: 0.875rem; + font-weight: 400; + letter-spacing: -0.01em; + line-height: 1.28; + margin-right: auto; + } + .minibasket .listTools { + justify-content: flex-start; + } + .listTools .link, + .listTools .text a, + .text .listTools a, + .listTools p a, + p .listTools a, + .listTools .button { + margin-top: 8px; + margin-bottom: 8px; + white-space: nowrap; + } + .listTools .link:not(:last-child), + .listTools .text a:not(:last-child), + .text .listTools a:not(:last-child), + .listTools p a:not(:last-child), + p .listTools a:not(:last-child), + .listTools .button:not(:last-child) { + margin-right: 16px; + } + .orderRow { + --orderColGap: 32px; + --orderRowGap: 16px; + --orderProductWidth: 80px; + --orderProductGap: 8px; + --orderProductsWidth: calc( + var(--orderProductWidth) * 3 + var(--orderProductGap) * 2 + ); + border-bottom: 1px solid #e6e6e6; + padding: 24px 0; + } + .orderRow__items { + grid-area: 1/1/3/2; + text-align: center; + } + .orderRow__itemsInner { + display: flex; + gap: var(--orderProductGap); + } + .orderRow__itemsInner:not(:last-child) { + margin-bottom: 8px; + } + .orderRow__itemsInner .product { + width: var(--orderProductWidth); + } + .orderRow__itemsInner .product__img { + margin: 0; + } + .orderRow__status { + grid-area: 1/2/2/5; + } + .orderRow__info--1 { + grid-area: 2/2/3/3; + } + .orderRow__info--2 { + grid-area: 2/3/3/4; + } + .orderRow__info--3 { + grid-area: 2/4/3/5; + } + .orderHistory { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + --outerPaddingY: 24px; + --outerPaddingX: 16px; + --qrWidth: 123px; + --qrMargin: 19px; + background-color: #f7f5f0; + border-radius: 8px; + display: flex; + flex-wrap: wrap; + padding: var(--outerPaddingY) var(--outerPaddingX); + position: relative; + width: 100%; + } + .orderHistory:not(:last-child) { + margin-bottom: 24px; + } + .orderHistory__qr { + width: var(--qrWidth); + flex-shrink: 0; + } + .orderHistory__section { + display: flex; + flex: 1 1 0; + padding-right: 20px; + } + .orderHistory__section--top { + align-items: center; + flex-basis: 100%; + flex-flow: row; + margin-bottom: 20px; + padding-right: 130px; + } + .orderHistory__section--top .copyText { + margin-left: 10px; + } + .orderHistory__sectionInner { + display: flex; + flex-flow: column; + } + .orderHistory strong { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + } + .orderHistory figure { + width: 100%; + } + .orderHistory figure picture { + display: block; + padding-top: calc(123 / 123 * 100%); + position: relative; + width: 100%; + } + .orderHistory figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .orderHistory.highlight { + background-color: #fef8c6; + } + .orderHistory.highlight .indicator { + font-size: 0.8125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.15; + background-color: #fff; + padding: 4px 8px; + border-radius: 8px; + } + .orderHistory.highlight .indicator:before { + display: none; + } + .orderHistory .indicator { + position: absolute; + top: var(--outerPaddingY); + right: var(--outerPaddingX); + } + .copyText { + align-items: center; + display: inline-flex; + position: relative; + } + .copyText__btn { + margin: calc(-1 * var(--iconButtonSpace)) calc(-1 * var(--iconButtonSpace)) + calc(-1 * var(--iconButtonSpace)) 0; + } + .copyText__tooltip { + background: #fff; + border-radius: 10px; + -webkit-filter: drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) + drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2)); + filter: drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) + drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2)); + font-size: 0.875rem; + left: 100%; + line-height: 1.3; + margin-left: 8px; + opacity: 0; + padding: 12px; + position: absolute; + top: 50%; + -webkit-transform: translate3d(8px, -50%, 0); + transform: translate3d(8px, -50%, 0); + transition: opacity 200ms ease-out, -webkit-transform 250ms ease-out; + transition: opacity 200ms ease-out, transform 250ms ease-out; + transition: opacity 200ms ease-out, transform 250ms ease-out, + -webkit-transform 250ms ease-out; + } + .copyText__tooltip--open { + opacity: 1; + -webkit-transform: translate3d(0, -50%, 0); + transform: translate3d(0, -50%, 0); + } + .orderSum { + --orderSumColSpace: 24px; + display: flex; + flex-wrap: wrap; + } + .orderSum--border { + border: 1px solid #fff; + margin-bottom: 24px; + } + .orderSum--border .orderSum__col { + padding: var(--orderSumColSpace); + } + .orderSum__col { + flex: 1; + } + .orderSum__col:not(:first-child) { + padding-left: var(--orderSumColSpace); + } + .orderSum__col:not(:last-child) { + padding-right: var(--orderSumColSpace); + } + .orderSum__col .address:not(:last-child), + .orderSum__col address:not(:last-child), + .orderSum__col .orderSum__col:not(:last-child) { + margin-bottom: 24px; + } + .orderSum__title { + color: #333; + font-size: 0.875rem; + font-weight: bold; + margin: 0 0 8px; + } + .orderSum__colTitle { + color: #333; + margin: 0 0 8px; + } + .orderStatusInfo { + align-items: baseline; + display: flex; + flex-wrap: wrap; + margin-bottom: 32px; + } + .orderNo { + background-color: #f0f0f0; + color: gray; + border-radius: 5px; + font-size: 1rem; + padding: 8px; + } + .orderNo b { + font-size: 1.25rem; + } + .orderStatusInfo .orderNo { + margin-right: 16px; + } + .orderTrack { + align-items: center; + background-color: #fef8c6; + border-radius: 8px; + display: flex; + margin: 0 0 20px; + padding: 8px 12px; + position: relative; + } + .acc__content .orderTrack { + margin: 2px 0; + } + .orderTrack strong { + font-weight: 500; + } + .orderTrack__action { + margin-left: auto; + } + .orderTrack__action:after { + content: ""; + } + .orderTrack__inner { + align-items: center; + display: flex; + margin-right: 10px; + } + .orderTrack__text { + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.23; + color: #000; + margin: 0 13px 0 0; + } + .productPage { + --mainButtonWidth: 232px; + --productImageColSpace: 56px; + margin: 48px 0 56px; + } + .productPage__imageCol { + position: relative; + } + .productPage__imageMain { + margin-bottom: 64px; + } + .productPage__imageMain .wishlistButton { + position: absolute; + right: 20px; + top: 20px; + z-index: 2; + } + .productPage__image { + cursor: url("data:image/svg+xml,%3Csvg width='48' height='48' viewBox='0 0 48 48' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.5'%3E%3Ccircle cx='24' cy='24' r='24' fill='black'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.52 14.52H22.52V22.52H14.52V24.52H22.52V32.52H24.52V24.52H32.52V22.52H24.52V14.52Z' fill='white'/%3E%3C/g%3E%3C/svg%3E%0A") + 16 16, + pointer; + } + .productPage__image figure { + width: 100%; + } + .productPage__image figure picture { + display: block; + padding-top: calc(457 / 457 * 100%); + position: relative; + width: 100%; + } + .productPage__image figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .productPage__info { + grid-area: product_content; + } + .productInfo__flag { + color: #999; + font-size: 0.875rem; + line-height: 1; + margin: 0; + } + .productInfo__title { + font-size: 1.75rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.2; + margin: 8px 0; + } + .productInfo__desc { + color: #404040; + font-size: 0.9375rem; + line-height: 1.33; + margin: 0 0 24px; + } + .productInfo__code { + color: #838385; + font-size: 0.8125rem; + letter-spacing: -0.01em; + line-height: 1.231; + margin: 0; + } + .productInfo__code:not(:last-child) { + margin-right: 12px; + } + .productInfo__codeWrap { + display: flex; + margin-bottom: 16px; + } + .productInfo__quantity { + margin: 21px 0 36px; + } + .productInfo .priceContainer { + margin: 0 0 16px; + } + .productAttr { + margin: 0 0 40px; + max-width: 568px; + } + .productAttr__title { + display: flex; + margin: 0 0 8px; + } + .productAttr__label { + color: #999; + font-size: 0.875rem; + font-weight: 600; + margin-right: 8px; + } + .productAttr__selected { + color: #333; + font-size: 0.875rem; + font-weight: 600; + } + .productAttr__selectedDefault { + color: #ccc; + } + .productAttr__main { + --radioColorSpace: 8px; + display: flex; + flex-wrap: wrap; + margin-left: calc(-1 * var(--radioColorSpace)); + width: calc(100% + var(--radioColorSpace) * 2); + } + .productAttr__main .radiobutton { + margin: var(--radioColorSpace); + } + .addProduct { + align-items: center; + display: flex; + margin: 0 0 16px; + } + .addProduct > *:not(:last-child) { + margin-right: 16px; + } + .addToCartButton:before { + content: ""; + } + .addToCartButton--added { + background-color: #333; + } + .addToCartButton--added:before { + content: ""; + } + .addToCartButton--added .addToCartButton__text--default { + display: none; + } + .addToCartButton--loading:before, + .addToCartButton--loading .addToCartButton__text { + display: none; + } + .addToCartButton--loading .loader { + display: block; + } + .addToCartButton:not(.addToCartButton--added) .addToCartButton__text--added { + display: none; + } + .addToCartButton:not(.addToCartButton--loading) .loader { + display: none; + } + .productDetails { + border-top: 1px solid #d8d8d8; + margin-top: 32px; + padding-top: 32px; + } + .productDetails__heading { + color: #333; + font-size: 1.375rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.36; + margin: 0 0 32px; + } + .productDetails__title { + margin: 0; + } + .productDetails__content { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + color: #404040; + } + .productDetails__content p { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + color: inherit; + } + .productDetails__content p:last-of-type { + margin-bottom: 0; + } + .productDetailsNutrTable { + display: inline-flex; + flex-direction: column; + flex-wrap: wrap; + width: 100%; + } + .productDetailsNutrTable table { + border-collapse: collapse; + margin-bottom: 15px; + } + .productDetailsNutrTable table:last-child { + margin-bottom: 0; + } + .productDetailsNutrTable th { + border: none; + font-size: 0.8125rem; + font-weight: 500; + color: #595959; + letter-spacing: -0.02em; + line-height: 1.15; + padding: 6px 16px; + text-align: right; + } + .productDetailsNutrTable td { + border-bottom: solid 1px #fff; + color: #333; + font-size: 0.875rem; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.28; + padding: 10px 14px; + text-align: right; + } + .productDetailsNutrTable td:first-child { + font-weight: 400; + text-align: left; + } + .productDetailsNutrTable .highlight { + background: #ececec; + } + .productSliderModal .modal__wrap { + padding: 48px 32px 32px; + } + .productThumbs { + --thumbImageWidth: 80px; + } + .productThumbs__slide { + border-radius: 6px; + cursor: pointer; + overflow: hidden; + position: relative; + width: var(--thumbImageWidth); + height: var(--thumbImageWidth); + } + .productThumbs__slide:after { + border: 1px solid #f47920; + border-radius: inherit; + content: ""; + opacity: 0; + transition: opacity 250ms ease-in-out; + } + .productThumbs__slide figure { + width: 100%; + } + .productThumbs__slide figure picture { + display: block; + padding-top: calc(80 / 80 * 100%); + position: relative; + width: 100%; + } + .productThumbs__slide figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .productThumbs__slide.swiper-slide-thumb-active:after { + opacity: 1; + } + .productThumbs .swiper-button-prev, + .productThumbs .swiper-button-next { + margin: 0; + } + .productThumbs .swiper-button-prev:before, + .productThumbs .swiper-button-next:before { + content: ""; + } + .productThumbs .swiper-button-prev:after, + .productThumbs .swiper-button-next:after { + z-index: 2; + } + .productThumbs .swiper-button-prev:after { + content: ""; + } + .productThumbs .swiper-button-prev:after { + content: ""; + } + .productThumbs .swiper-button-next:after { + content: ""; + } + .productThumbs .swiper-button-next:after { + content: ""; + } + .productThumbs .swiper-pagination { + position: static; + margin-top: 19px; + } + .productMainImg { + --productMainImgWidth: 560px; + margin: 0 auto; + width: 100%; + max-width: 942px; + } + .productMainImg__slide figure { + width: 100%; + margin: 0 auto; + max-width: var(--productMainImgWidth); + } + .productMainImg__slide figure picture { + display: block; + padding-top: calc(560 / 560 * 100%); + position: relative; + width: 100%; + } + .productMainImg__slide figure img { + inset: 0; + -o-object-fit: contain; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .productMainImg .swiper-pagination { + position: static; + } + .productMainImg .imgControl { + margin: 60px 0 32px; + } + .productHeader { + background-color: #fff; + box-shadow: 0px 1px 1px rgba(51, 51, 51, 0.1), + 0px 2px 2px rgba(51, 51, 51, 0.15), 0px 4px 4px rgba(51, 51, 51, 0.2); + left: 0; + position: fixed; + top: 0; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + -webkit-transform: translateY(-120%); + transform: translateY(-120%); + z-index: 9; + width: 100%; + } + .productHeader.active { + -webkit-transform: translateY(0); + transform: translateY(0); + } + .productHeader .product { + align-items: center; + display: flex; + justify-content: space-between; + margin: 0 auto; + padding: 8px var(--gridSpace); + max-width: var(--wrapper); + } + .productHeader .product__block { + align-items: center; + display: flex; + position: relative; + } + .productHeader .product__img { + flex-shrink: 0; + margin: 0 16px 0 0; + width: 72px; + } + .productHeader .product__more { + margin: 0 16px 0 0; + } + .productHeader .product__desc:last-child { + margin-bottom: 0; + } + .productHeader .priceContainer { + margin-right: 16px; + } + .notifyMe { + position: relative; + z-index: 1; + } + .notifyMe__button.active { + background-color: #333; + color: #fff; + } + .notifyMe__button:not(.notifyMe__button--loading) .loader { + display: none; + } + .notifyMe__button.notifyMe__button--loading .notifyMe__buttonText { + display: none; + } + .notifyMe__main { + background-color: #ebebeb; + display: none; + left: 0; + margin-top: 16px; + padding: 24px; + position: absolute; + top: 100%; + width: 560px; + max-width: 48vw; + } + .notifyMe__form { + margin-bottom: 0; + } + .notifyMe .field:last-child { + margin-bottom: 0; + } + .cartAdd.error-message { + background-color: #f9d0d5; + color: #d91a32; + display: inline-block; + margin-bottom: 16px; + padding: 8px; + } + .sitemapnav { + padding: 24px 0 12px; + } + .acc__content .sitemapnav { + padding-top: 8px; + } + .sitemapnav__ul { + list-style: none; + margin: 0 0 -24px; + } + .sitemapnav__li { + color: #333; + font-size: 0.9375rem; + font-weight: 500; + letter-spacing: -0.03em; + margin-bottom: 24px; + padding: 0; + } + .sitemapnav__li:after { + content: none; + } + .sitemapnav__link { + color: var(--buttonColor); + } + .sitemapnav__link:active { + color: var(--buttonColorActive); + } + .sitemap .acc:last-child { + border-bottom: none; + } + .sitemap .acc:last-child .acc__content { + padding: 0; + } + .couponBlock__form { + margin-bottom: 0; + } + .couponBlock__field { + margin-bottom: 0; + position: relative; + } + .couponBlock__field.completed .field__input { + border: none; + width: 100px; + } + .couponBlock__field:not(.completed) .field__input { + padding-right: 32px; + } + .couponBlock__field:not(.completed) .field__wrap { + width: 100%; + } + .couponBlock__btn { + align-items: center; + display: flex; + font-size: 1.5rem; + justify-content: center; + position: absolute; + right: 0; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + width: 32px; + height: 32px; + } + .couponBlock__btn:before { + content: ""; + } + .couponBlock__clear { + font-size: 1.5rem; + } + .couponBlock__clear:before { + content: ""; + } + .priceRow--coupon { + color: #999; + margin-top: 0; + } + .progressBlock__bar { + background-color: #fff; + border-radius: 6px; + margin: 0 0 24px; + height: 6px; + } + .progressBlock__progress { + background-color: #666; + border-radius: 6px; + height: 100%; + } + .progressBlock__info { + color: gray; + font-size: 0.875rem; + margin: 0 0 8px; + } + .progressBlock__remain { + color: #333; + font-size: 1rem; + } + + /* MEDIA QUERIES */ + + @media (min-width: 480px) { + .sectionTitle__main:not(:last-child) { + margin-right: 12px; + } + .button { + min-width: 216px; + } + .button--s { + min-width: 120px; + } + .range__submit { + min-width: initial; + } + .storeLocator__form .field--small .button { + min-width: initial; + } + .table { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + } + .table::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .table::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .table::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .table::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .table::-webkit-scrollbar-track { + background: transparent; + } + .table td:first-child { + padding-left: var(--paddingExternalX); + } + .table td:last-child { + padding-right: var(--paddingExternalX); + } + .miniBasketButton { + min-width: 152px; + } + .checkoutTracking__action { + min-width: 185px; + } + .addToCartButton { + min-width: var(--mainButtonWidth); + } + .notifyMe__button { + min-width: var(--mainButtonWidth); + } + } + + @media (min-width: 640px) { + .ordersBanner { + align-items: center; + display: flex; + } + .form__title { + margin-inline: calc(var(--fieldColumnSpace) / 2); + } + .form--address .form__col { + width: 44%; + } + .field--half { + width: calc(50% - var(--fieldColumnSpace)); + } + .field--map { + margin: 0; + } + .field__map { + position: absolute; + right: 0; + top: 0; + width: 50%; + } + .form--address .field__map { + width: calc(56% - 12px); + height: 100%; + } + .field__map .field__mapInner { + padding: 0; + height: 100%; + } + .radiobuttons--inline, + .checkboxes--inline { + flex-wrap: wrap; + } + .formTip { + margin-inline: calc(var(--fieldColumnSpace) / 2); + } + .storeTileOrder__info { + padding-right: 32px; + } + .storeTileOrder__actions { + margin: auto 0 auto auto; + } + .mapInfo .storeTileOrder__actions { + margin-top: 12px; + } + .storeTileOrder__actions .button { + font-size: 0.8125rem; + letter-spacing: -0.02em; + min-height: 34px; + } + .storeTileOrder__actions .button .icon { + margin: -3px 4px -3px 0; + } + .gridBoxes { + width: calc(100% + var(--gridBoxSpace) * 2); + } + .contentBox { + flex-direction: column; + text-align: center; + } + .contentBox__text { + max-width: 272px; + } + .basketTable__cell--product { + flex: 1; + } + .basketTable__cell--button { + margin: 0 72px 0 32px; + } + .history__content { + align-items: flex-start; + display: flex; + } + .history__description { + flex: 1; + padding-left: 20px; + } + .listsBlock { + display: none; + position: absolute; + right: 20px; + top: -8px; + width: 232px; + max-width: calc(100% + 8px); + } + .wishlistButton.open .listsBlock { + display: block; + } + .listsBlock__bg { + display: none; + } + .listTools { + margin-bottom: 16px; + } + .minibasket .listTools:not(.listTools--noBorder) { + margin-bottom: 4px; + } + .orderRow { + display: grid; + grid-template-columns: var(--orderProductsWidth) minmax(0, 1.1fr) minmax( + 0, + 2.15fr + ) minmax(0, 0.75fr); + grid-template-rows: fit-content(21px) 1fr; + grid-column-gap: var(--orderColGap); + grid-row-gap: var(--orderRowGap); + } + .productThumbs .swiper-button-prev, + .productThumbs .swiper-button-next { + width: 100%; + } + .productThumbs .swiper-button-prev { + top: 0; + } + .productThumbs .swiper-button-prev:before { + background: linear-gradient( + to bottom, + white 0%, + rgba(255, 255, 255, 0) 100% + ); + } + .productThumbs .swiper-button-next { + bottom: 0; + top: auto; + } + .productThumbs .swiper-button-next:before { + background: linear-gradient(to top, white 0%, rgba(255, 255, 255, 0) 100%); + } + .sitemapnav__ul { + column-count: 2; + } + .sitemapnav__li { + display: inline-block; + padding-right: 24px; + vertical-align: top; + width: 100%; + } + } + + @media (min-width: 640px) and (max-width: 767px) { + .basketTable__cell--button { + margin: 0 16px; + } + .orderRow { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.25fr) minmax(0, 0.75fr); + grid-template-rows: auto; + } + } + + @media (min-width: 640px) and (min-width: 480px) { + .storeTileOrder__actions .button { + min-width: 120px; + } + } + + @media (min-width: 768px) { + .mobileOnly { + display: none; + } + h2 { + font-size: 1.625rem; + letter-spacing: -0.03em; + margin: 0 0 32px; + } + .footer__col:not(:last-child) { + margin-right: var(--footerColSpace); + } + .footer__col:not(:first-child) { + margin-left: var(--footerColSpace); + } + .header__tool { + position: relative; + } + .acc--mobOnly .acc__header { + pointer-events: none; + } + .acc--mobOnly .acc__icon { + display: none; + } + .acc--mobOnly:not(.open) .acc__content { + display: block; + } + .acc__headerInner { + margin-right: 32px; + } + .acc__headerInnerTitle { + min-width: 250px; + } + .acc__headerInnerTitle--info { + min-width: initial; + } + .acc__headerInnerTitle--sum { + min-width: initial; + } + .article--horizontal { + display: flex; + min-height: 268px; + } + .articleFeatured .article--horizontal { + min-height: 352px; + } + .article--horizontal .article__img { + flex-basis: 35.62%; + position: relative; + } + .articleFeatured .article--horizontal .article__img { + flex-basis: 50%; + } + .article--horizontal .article__img figure { + inset: 0; + position: absolute; + width: 100%; + height: 100%; + width: 100%; + } + .article--horizontal .article__img figure picture { + display: block; + padding-top: calc(352 / 626 * 100%); + position: relative; + width: 100%; + } + .article--horizontal .article__img figure img { + inset: 0; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .article--horizontal .article__img figure img { + object-fit: cover; + } + .article--horizontal .article__img picture { + inset: 0; + position: absolute; + width: 100%; + height: 100%; + } + .article--horizontal .article__date { + margin-bottom: 4px; + } + .article--horizontal .article__title { + font-size: 1.25rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.5; + margin-bottom: 16px; + } + .articleFeatured .article--horizontal .article__title { + font-size: 1.625rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.38; + margin-bottom: 20px; + } + .article--horizontal .article__info { + align-items: flex-start; + display: flex; + flex-basis: 50%; + flex-grow: 1; + flex-flow: column; + justify-content: center; + padding: 32px; + } + .article--horizontal .article__text { + -webkit-line-clamp: initial; + } + .breadcrumb__item:not(:last-child) { + margin-right: 12px; + padding-right: 12px; + } + .breadcrumb__item:not(:last-child):before { + background-color: #c2c2c2; + content: ""; + margin-top: -11px; + position: absolute; + right: 0; + top: 50%; + width: 1px; + height: 22px; + } + .catalogue--wide .catalogue__img figure { + width: 100%; + } + .catalogue--wide .catalogue__img figure picture { + display: block; + padding-top: calc(314 / 1258 * 100%); + position: relative; + width: 100%; + } + .catalogue--wide .catalogue__img figure img { + inset: 0; + object-fit: contain; + position: absolute; + width: 100%; + height: 100%; + } + .deliveryFlowNav { + margin-top: 8px; + right: 88px; + } + .radiobutton--deliveryType { + background: #f2efe8; + border-radius: 8px; + padding: 32px 12px; + min-height: 272px; + } + .radiobutton--deliveryType .radiobutton__label { + padding: 0; + position: static; + } + .form { + margin-left: calc(-1 * var(--fieldColumnSpace) / 2); + width: calc(var(--formMaxWidth) + var(--fieldColumnSpace)); + max-width: calc(100% + var(--fieldColumnSpace)); + } + .orderTrack .indicator { + border-right: 1px solid #958d7b; + margin-right: 12px; + padding-right: 12px; + } + .newsletter__inner { + align-items: center; + display: flex; + } + .newsletter__input { + width: 280px; + } + .newsletter__social { + border-left: 1px solid gray; + margin-left: 32px; + padding-left: 32px; + } + .notifications { + right: -4px; + } + .notifications__overlay { + display: none; + } + .notificationsBtn { + width: 44px; + height: 44px; + border-radius: 50%; + border: solid 2px #a6a6a6; + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + font-size: 1.625rem; + } + .notificationsBtn:after { + content: attr(data-items); + top: -8px; + right: -14px; + width: 26px; + height: 26px; + background: #d91a32; + border-radius: 50%; + color: #fff; + font-size: 0.8125rem; + font-weight: 700; + line-height: 1; + letter-spacing: -0.02em; + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + } + .result__button { + margin-top: 40px; + } + .result__mainimg { + margin-bottom: 16px; + } + .result__mainicon { + margin-bottom: 40px; + } + .sidemenu__item { + line-height: 1; + } + .storeTileSpecs__iconWrap { + margin-right: auto; + padding-right: 10px; + } + .storeTileOrder--details .storeTileOrder__info { + max-width: initial; + } + .storeTileOrder--details .storeTileOrder__actions { + max-width: initial; + } + .storeLocator__form .field--full { + max-width: 344px; + } + .storeLocator__form .field__inputClear { + right: 18px; + } + .storeLocator__form .field__input--search { + padding-right: 40px; + } + .storeLocator__form .field__inputSubmit { + display: none; + } + .timetable { + margin-top: -20px; + } + .timetableNavWrap { + display: flex; + justify-content: space-between; + margin-bottom: 12px; + } + .timetableNav:before { + display: none; + } + .topnav__selected { + display: none; + } + .topnav__selected:after { + display: none; + } + .topnav__list { + display: flex; + flex-wrap: wrap; + justify-content: center; + text-align: center; + } + .topnav__list li { + display: inline-flex; + margin: 4px; + } + .topnav__item { + line-height: 1; + } + .topnav__link { + border: 1px solid #c2c2c2; + border-radius: 100px; + color: #838385; + display: block; + font-size: 0.875rem; + font-weight: 500; + padding: 12px 16px; + transition: background-color 250ms ease-out; + } + .topnav__link.selected { + background-color: #333; + border-color: #333; + color: #fff; + } + .unavailabelBox { + margin-bottom: 24px; + } + .minibasket .unavailabelBox { + margin-bottom: 0; + } + .userMenu { + right: -4px; + } + .userMenu__overlay { + display: none; + } + .accountDetails__form { + margin-right: 24px; + } + .basketTable__row--head { + margin-bottom: 12px; + } + .minibasket:not(.active) .minibasket__overlay { + opacity: 0; + pointer-events: none; + } + .secureCheckout__text { + margin: 0 8px 0 0; + } + .checkoutTracking__inner { + margin-right: 10px; + } + .loyalty__img { + margin-right: 20px; + } + .loyalty__cell:not(:last-child) { + margin-right: 1px; + } + .gallery__figure { + width: calc(50% - 20px); + margin: 10px; + } + .orderHistory { + min-height: 140px; + } + .orderHistory--qr { + padding-left: calc(var(--outerPaddingY) + var(--qrWidth) + var(--qrMargin)); + } + .orderHistory__qr { + left: var(--outerPaddingX); + position: absolute; + top: 50%; + transform: translateY(-50%); + } + .orderHistory__section--top span { + margin-right: 5px; + } + .orderHistory__section--top .orderHistory__sectionInner { + flex-flow: row; + } + .productPage { + display: grid; + grid-template-areas: "product_image product_content"; + grid-template-columns: minmax(300px, 457px) minmax(50%, 873px); + } + .productPage__imageCol { + grid-area: product_image; + } + .productPage__imageGrid { + left: 0; + position: sticky; + top: var(--headerHeight); + } + } + + @media (min-width: 768px) and (hover: hover) and (pointer: fine) { + .topnav__link:hover { + background-color: #ececec; + border-color: #ececec; + } + } + + @media (min-width: 768px) and (max-width: 1023px) { + .articleFeatured .article--horizontal .article__img { + flex-basis: 40%; + } + } + + @media (min-width: 768px) and (max-width: 1279px) { + .article--horizontal .article__title { + font-size: 1.25rem; + font-weight: 500; + letter-spacing: -0.03em; + line-height: 1.5; + } + .newsletter__social { + margin-left: 24px; + padding-left: 24px; + } + } + + @media (min-width: 1024px) { + .tabletOnly { + display: none; + } + .header__bottom { + padding: 16px 0 0; + } + .acc__headerInner { + margin-right: 104px; + } + .acc__headerInnerTitle { + min-width: 295px; + } + .acc__headerInnerTitle--info { + min-width: initial; + } + .acc__headerInnerTitle--sum { + min-width: initial; + } + .filters__itemsWrap { + display: flex; + flex-wrap: wrap; + margin-right: 24px; + } + .filters__inner { + align-items: flex-start; + display: flex; + } + .filters__item:not(:last-child) { + margin-right: 24px; + } + .filters__item:not(.filter--closed) { + z-index: 3; + } + .filters__titleWrap { + margin-right: 8px; + } + .filters__title { + padding: 6px 0; + } + .filters__titleWrap .filters__close { + display: none; + } + .filters__mobButton { + pointer-events: none; + } + .filters--checked .filters__mobButton:after { + display: none; + } + .filters__mobButtonText { + display: none; + } + .filters--listResults { + position: relative; + padding-right: 160px; + } + .filters--listResults .filters__titleWrap { + position: static; + } + .filters--listResults .filters__titleWrap .filtersClearAll { + position: absolute; + right: 16px; + top: 50%; + transform: translateY(-50%); + } + .filters--listResults.filters--checked .filters__titleWrap .filtersClearAll { + display: block; + } + .filters--listResults ~ .productListWrap .selectedFilters { + outline: 1px solid red; + background: rgba(255, 0, 0, 0.2); + } + .filter { + position: relative; + } + .filter__content { + background-color: #fff; + border-radius: 6px; + box-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + left: -20px; + padding: 56px 20px 16px 20px; + position: absolute; + top: -16px; + width: 248px; + } + .filter__main > .scrollbar { + max-height: 160px; + } + .filter__main--mobScroll > .scrollbar { + overflow: initial; + } + .filter__list--inline { + display: flex; + flex-wrap: wrap; + } + .filter__list--showAll:not(.initialized) .filter__item:nth-child(n + 9) { + display: none; + } + .filter__list--showAll.initialized .filter__listScroll { + max-height: var(--scrollListHeight); + } + .filter__listMore { + display: none; + } + .filter__list--inline .filter__item { + margin: 4px 0; + } + .filter__list--inline .filter__item:not(:last-child) { + margin-right: 16px; + } + .filtersApply { + margin-bottom: 12px; + } + .filters__titleWrap .filtersClearAll { + display: none; + } + .filtersLinks { + margin-top: 16px; + text-align: center; + } + .filtersLinks--all { + display: none; + } + .mainNav__list { + display: flex; + } + .mainNav__link--hasChildren:before { + display: none; + } + .megamenu { + left: 0; + overflow: hidden; + top: 100%; + } + .mainNav__item:not(.mainNav__item--active) .megamenu { + pointer-events: none; + } + .mainNav__item--active .megamenu { + z-index: 9; + } + .megamenu__inner { + padding: 40px 0; + position: relative; + opacity: 0; + transform: translateY(-30px); + transition: opacity 150ms ease-out, transform 250ms ease-out, + visibility 10ms ease-out 250ms; + visibility: hidden; + min-height: 584px; + } + .mainNav__item--active .megamenu__inner { + opacity: 1; + transform: translateY(0); + transition: opacity 350ms ease-out 250ms, transform 350ms ease-out 250ms; + visibility: visible; + } + .mainNav__item--fadeOut .megamenu__inner { + opacity: 0; + transform: translateY(80px); + transition: opacity 350ms ease-out, transform 350ms ease-out; + } + .megamenu__list { + width: 100%; + } + .megamenu__list--level2 { + column-count: 3; + } + .megamenu__list--level2 > li { + break-inside: avoid; + margin-bottom: 40px; + } + .megamenu__list li { + font-size: 0.875rem; + } + .megamenu__close { + position: absolute; + right: 32px; + top: 32px; + z-index: 1; + width: 40px; + height: 40px; + min-height: auto; + } + .megamenu__close:before { + display: inline-block; + vertical-align: top; + } + .megamenu__back { + display: none; + } + .megamenu .wrapper { + padding: 0 var(--gridSpace); + } + .megamenuBg { + background-color: #e6e6e6; + left: 0; + position: absolute; + top: 100%; + transform: scaleY(0); + transform-origin: center top; + transition: transform 350ms ease-out 50ms; + width: 100%; + height: 584px; + } + .menuOpened .megamenuBg { + transform: scaleY(1); + transition: transform 350ms ease-out; + } + .megamenuBg:after { + content: ""; + position: absolute; + right: 0; + top: 0; + width: 50%; + height: 100%; + } + .newsletter__form { + align-items: center; + } + .newsletter__label { + margin-right: 24px; + } + .sidemenu { + border-right: 1px solid #ececec; + height: 100%; + margin: 0; + padding-left: 30px; + } + .sidemenu .sidenav__list--level1 { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + left: 0; + padding-right: 16px; + position: sticky; + top: calc(8px + var(--headerHeight)); + max-height: calc(100vh - 16px - var(--headerHeight)); + } + .sidemenu .sidenav__list--level1::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .sidemenu .sidenav__list--level1::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .sidemenu .sidenav__list--level1::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .sidemenu .sidenav__list--level1::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .sidemenu .sidenav__list--level1::-webkit-scrollbar-track { + background: transparent; + } + .sidemenu__selected { + display: none; + } + .sidemenu__selected:after { + display: none; + } + .sidemenu__list--level2 { + margin: 0 0 12px; + } + .sidemenu__link.selected { + color: #f47920; + } + .sidemenu__link--level1 { + margin-bottom: 12px; + font-size: 1.125rem; + } + .storeListWrap { + display: flex; + } + .storeListWrap [data-tabToggle-content] { + display: block; + } + .storeListWrap .tabToggle { + display: none; + } + .storeList { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + margin-right: 24px; + width: 484px; + max-width: 45%; + max-height: 600px; + } + .storeList::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .storeList::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .storeList::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .storeList::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .storeList::-webkit-scrollbar-track { + background: transparent; + } + .storeTile { + margin-right: 12px; + } + .gallery__figure { + width: calc(33.3% - 20px); + } + .myLists--row .myList { + flex: 1; + } + .orderSum--border .orderSum__col:not(:last-child) { + border-right: 1px solid #fff; + } + .productPage__info { + padding-left: var(--productImageColSpace); + } + .productDetailsNutrTable { + max-width: 714px; + } + } + + @media (min-width: 1024px) and (hover: hover) and (pointer: fine) { + .sidemenu__link:not(.selected):hover { + color: #838385; + } + } + + @media (min-width: 1024px) and (max-width: 1279px) { + .megamenuBg { + z-index: 1; + } + } + + @media (min-width: 1024px) and (max-width: 1365px) { + .megamenu__close { + right: 8px; + top: 8px; + } + .megamenuBg { + height: 640px; + } + } + + @media (min-width: 1280px) { + .mainLayout { + --asideWidth: 352px; + --gridSpace: 64px; + --gridSpaceBorder: calc(var(--gridSpace) / 2); + display: grid; + grid-template-areas: "aside content"; + grid-template-columns: var(--asideWidth) minmax(0, 1fr); + } + .mainLayout--rightAside { + grid-template-areas: "content aside"; + grid-template-columns: minmax(0, 1fr) var(--asideWidth); + } + .mainLayout__aside { + grid-area: aside; + display: flex; + flex-direction: column; + } + .mainLayout__content { + grid-area: content; + } + .deliveryTypes { + padding: 0 20px; + } + .burgerMenu { + display: none; + } + .mainLayout__aside .sideNav { + border-right: 1px solid #ececec; + } + .basketMain { + position: relative; + } + .sideBasket { + box-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + border-radius: 8px; + position: sticky; + right: 0; + top: 0; + } + .sideBasket__title { + color: #333; + font-size: 1.25rem; + font-weight: 500; + line-height: 1.5; + margin: 0 0 16px; + padding-left: 40px; + position: relative; + } + .sideBasket__title:before { + color: #a6a6a6; + font-size: 2rem; + left: 0; + margin-top: -16px; + position: absolute; + top: 50%; + } + } + + @media (min-width: 1280px) and (max-width: 1365px) { + .mainLayout { + --asideWidth: 296px; + --gridSpace: 24px; + --gridSpaceBorder: var(--gridSpace); + } + } + + @media (min-width: 1366px) { + .megamenu__title { + padding-right: 40px; + } + } + + @media (min-width: 1920px) { + .goToTop { + margin-right: calc(50vw - var(--wrapper) / 2); + } + .productList .product { + width: calc(16.6% - 5 * var(--productSpaceH) / 6); + } + } + + @media (min-width: 640px) and (max-width: 1365px) and (min-width: 1280px) { + .basketTable__cell--button { + margin: 0 12px 0 12px; + } + } + + @media (max-width: 1599px) { + .basketMain__content { + --mainLayoutSpace: 24px; + } + .landingList { + row-gap: 32px; + } + .landingList__item { + width: calc(20% - 4 * var(--colGap) / 5); + } + .myLists--grid { + --listsGap: 20px; + } + .myLists--row { + --listsGap: 16px; + } + .productList .product { + width: calc(25% - 3 * var(--productSpaceH) / 4); + } + } + + @media (max-width: 1365px) { + .basketTable { + --imgMarginRight: 16px; + } + .basketTable__row { + padding-right: 84px; + padding-left: 0; + } + .basketTable__remove { + right: 0; + } + .basketTable .fav { + right: 40px; + } + .landingList__item { + width: calc(25% - 3 * var(--colGap) / 4); + } + .myLists--grid .myList { + width: calc(50% - var(--listsGap) / 2); + } + .productList { + --productSpaceH: 16px; + --productSpaceV: 16px; + } + } + + @media (max-width: 1365px) and (min-width: 1280px) { + .basketTable { + --imgWidth: 80px; + } + .basketTable__cell--price { + margin-right: 0; + } + .basketTable__cell--quant { + margin: 0 12px; + } + .basketTable__cell .product__title { + font-size: 1rem; + } + .productList .product { + width: calc(33.33% - 2 * var(--productSpaceH) / 3); + } + } + + @media (max-width: 1359px) { + .infoPopup { + right: var(--gridSpace); + } + .productMainImg .swiper-button-prev, + .productMainImg .swiper-button-next { + display: flex; + } + } + + @media (max-width: 1279px) { + :root { + --gridSpace: 32px; + } + .mainLayout { + --mainLayoutSpace: var(--gridSpace); + } + .loginWrap__form { + padding-block: 56px; + } + .loadMore { + --loadMoreSpace: 32px; + } + .mainNav__item { + margin: 0 8px; + } + .burgerMenu { + background: none; + margin: 0 16px 0 0; + padding: 0; + width: 32px; + height: 32px; + } + .burgerMenu__bar { + background: #404040; + border-radius: 15px; + display: block; + margin: 6px auto; + transition: all 350ms ease-out; + height: 2px; + width: 26px; + } + .burgerMenu__bar--middle { + margin: 0 auto; + } + .burgerMenu--opened .burgerMenu__bar--top { + transform: translateY(8px) rotateZ(45deg); + } + .burgerMenu--opened .burgerMenu__bar--bottom { + transform: translateY(-8px) rotateZ(-45deg); + } + .burgerMenu--opened .burgerMenu__bar--middle { + width: 0; + } + .modal__wrap { + padding-bottom: 40px; + } + .mainLayout__aside .sideNav { + display: none; + } + .simpleSlider--cat:not(.swiper-initialized) .swiper-slide { + width: calc(25% - 16px); + } + .timetable { + margin-bottom: 56px; + } + .addresses { + --addressesGap: 24px; + } + .addresses__box, + .addresses .addBox { + width: calc(50% - var(--addressesGap) / 2); + } + .basket { + margin-bottom: 144px; + } + .basketMain__content { + padding-right: 0; + } + .sideBasket { + box-shadow: 0px -2px 10px rgba(51, 51, 51, 0.1); + bottom: 0; + left: 0; + position: fixed; + z-index: 2; + width: 100%; + } + .sideBasket__title { + display: none; + } + .landingList { + row-gap: 24px; + } + .myList--box .myList__title { + font-size: 1.25rem; + } + .orderRow { + --orderColGap: 24px; + } + .productPage { + --productImageColSpace: 40px; + } + .productMainImg { + --productMainImgWidth: 500px; + } + .productMainImg .imgControl { + margin: 30px 0 20px; + } + } + + @media (max-width: 1279px) and (hover: hover) and (pointer: fine) { + .burgerMenu:not(.disabled):hover { + background: transparent; + } + .burgerMenu:not(.disabled):hover .burgerMenu__bar { + background: #333; + } + } + + @media (max-width: 1279px) and (min-width: 1024px) { + .checkoutProducts .product--mini .product__img, + .checkoutProducts .minibasket__product .product__img { + margin-right: 8px; + width: 80px; + } + .productListContent { + margin-left: -20px; + width: calc(100% + 40px); + } + } + + @media (max-width: 1023px) { + :root { + --gridSpace: 24px; + } + .pageTitle h1 { + font-size: 2.375rem; + } + .pageTitle--big { + height: 280px; + } + .pageTitle--big h1 { + font-size: 2.875rem; + } + .ordersBanner { + padding: 16px; + } + .ordersBanner__img { + width: 37%; + } + .ordersBanner__icon { + font-size: 3rem; + margin-right: 16px; + } + .ordersBanner__text { + font-size: 1rem; + } + .tabletHidden { + display: none; + } + ul.listL { + margin: 16px 0 24px; + } + ul.listL li { + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.33; + padding-left: 21px; + } + ul.listCols { + column-count: 4; + } + .footer { + --footerSpaceTop: 56px; + } + .footer__col { + --footerColSpace: 24px; + } + .acc--stripe .acc__header { + font-size: 1rem; + } + .acc__headerInnerTitle--info { + margin-left: auto; + } + .articleList--contests .article { + width: calc(33.33% - 2 * var(--productSpaceH) / 3); + } + .articleDetails__title { + font-size: 1.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.35; + } + .articleDetails__title { + font-size: 1.5rem; + font-weight: 700; + letter-spacing: 0; + line-height: 1.16; + } + .catalogueList { + --productSpaceH: 24px; + } + html.filtersOpened, + html.filtersOpened body { + overflow: hidden; + height: calc(var(--windowHeight) - 1px); + } + .filters__itemsWrap { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + overflow-x: hidden; + height: calc(100% - var(--mobFilterTopBar)); + } + .filters__itemsWrap::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .filters__itemsWrap::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .filters__itemsWrap::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .filters__itemsWrap::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .filters__itemsWrap::-webkit-scrollbar-track { + background: transparent; + } + .filters--2levelOpened .filters__itemsWrap { + overflow: visible; + } + .filters__inner { + background-color: #fff; + left: 0; + padding: 0 var(--filtersSpace) var(--mobFilterBottomBar); + position: fixed; + transform: translateX(-100%); + transition: transform 350ms ease-out; + top: var(--mobFiltersTop); + z-index: 9; + width: 100%; + height: var(--windowHeight); + } + .filters:not(.filters--2levelOpened) .filters__inner { + overflow: hidden; + } + .filters--opened .filters__inner { + transform: translateX(0); + } + .filters__item:not(:first-child) { + border-top: 1px solid #c2c2c2; + } + .filters__titleWrap { + align-items: center; + border-bottom: 1px solid #a6a6a6; + display: flex; + padding: 16px 0; + } + .filters__title { + font-size: 1.125rem; + font-weight: 400; + } + .filters__titleWrap .filters__close { + margin-right: 8px; + } + .filters__mobButton { + align-items: center; + display: inline-flex; + } + .filter__title { + font-size: 1rem; + font-weight: 500; + padding: 16px 32px 16px 0; + } + .filter__titleIcon { + font-size: 1.5rem; + line-height: 1; + right: 0; + top: 50%; + transform: translateY(-50%); + } + .filter__titleIcon:before { + line-height: 1; + } + .filters__mobTitle .filter__titleIcon { + left: 0; + right: auto; + } + .filters__mobTitle .filter__titleIcon:before { + transform: rotate(180deg); + transform-origin: center; + } + .filter__content { + padding: 12px 0; + } + .filter__main { + height: calc(100% - var(--mobFilterTopBar) - var(--mobFilterTopBarSpace)); + } + .filter__main--mobScroll > .scrollbar { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + max-height: 100%; + } + .filter__main--mobScroll > .scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .filter__main--mobScroll > .scrollbar::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .filter__main--mobScroll > .scrollbar::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .filter__main--mobScroll > .scrollbar::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .filter__main--mobScroll > .scrollbar::-webkit-scrollbar-track { + background: transparent; + } + .filter__list { + height: 100%; + } + .filter__list--showAll .filter__listScroll { + max-height: 100%; + } + .filter__list--more .filter__listWrap { + height: 100%; + } + .filter__list--more .filter__listWrap > .filter__item { + display: none; + } + .filter__list--moreList { + height: calc(100% - var(--searchHeight)); + } + .filter__list--moreList .filter__listScroll { + max-height: 100%; + } + .filter__showAll { + display: none; + } + .filter__listMore { + height: 100%; + } + .filter__list--inline .filter__item { + margin: 16px 0; + } + .filter__more { + display: none; + } + .filter:not(.filter--checked) .filtersClear { + display: none; + } + .filtersClearAll { + margin-left: auto; + } + .filtersLinks { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + padding: 8px var(--filtersSpace); + position: absolute; + width: 100%; + height: var(--mobFilterBottomBar); + } + .filtersLinks:not(.filtersLinks--all) { + display: none; + } + .form { + margin-bottom: 24px; + } + .mainNavWrap { + background-color: #ebebeb; + left: 0; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + padding: 16px var(--mobMenuHorPadding) 80px; + position: fixed; + top: var(--headerHeight); + transition: transform 350ms ease-out; + transform: translateX(-100%); + width: 100%; + max-width: 440px; + height: calc(100% - var(--headerHeight)); + } + .menuOpened .mainNavWrap { + transform: translateX(0); + } + .menuOpened--level2 .mainNavWrap { + overflow: hidden; + } + .mainNav__item { + color: #333; + font-size: 1.125rem; + margin: 8px 0; + } + .mainNav__link { + padding: 8px 0; + position: relative; + } + .mainNav__link--hasChildren:before { + font-size: 1.5rem; + margin-top: -12px; + position: absolute; + right: 0; + top: 50%; + } + .megamenu { + background-color: #ebebeb; + overflow: auto; + -webkit-overflow-scrolling: touch; + right: 0; + top: 0; + transition: transform 350ms ease-out; + transform: translateX(-100%); + z-index: 1; + height: 100%; + } + .mainNav__item--active .megamenu { + transform: translateX(0); + } + .megamenu__main { + padding: 32px var(--mobMenuHorPadding) 80px; + } + .megamenu__cols--promo { + border-bottom: 1px solid #fff; + margin-bottom: 24px; + } + .megamenu__list--level2 > li { + font-size: 1rem; + margin-bottom: 24px; + } + .megamenu__close { + display: none; + } + .megamenu__back { + align-items: center; + background-color: #fff; + border-radius: 0; + color: #8c8c8c; + display: flex; + font-size: 1.25rem; + justify-content: flex-start; + padding: 16px; + width: 100%; + } + .megamenu__back:before { + font-size: 1.5rem; + margin-right: 8px; + } + .newsletter__form { + flex-direction: column; + } + .newsletter__label { + margin-bottom: 16px; + } + .output--pickup .output__inner, + .output--delivery .output__inner { + padding-left: 80px; + } + .output--init .output__title { + font-size: 1rem; + } + .sideBasket .priceRow--total { + margin-top: 0; + } + .productsSum { + padding: 12px 16px; + } + .result__title { + font-size: 1.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.35; + } + .sidemenu { + margin: 0 calc(var(--gridSpace) + var(--mainLayoutSpace)) 22px; + } + .sidemenu__selected { + border: 1px solid #a6a6a6; + border-radius: 8px; + color: #333; + font-size: 0.9375rem; + line-height: 1; + overflow: hidden; + padding: 16px 40px 16px 16px; + position: relative; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; + } + .sidemenu__selected:before { + color: #838385; + font-size: 1rem; + margin-top: -8px; + position: absolute; + right: 16px; + top: 50%; + transition: transform 250ms ease-out; + transform-origin: center; + } + .sidemenu__selected.active:before { + transform: rotate(180deg); + } + .sidemenu__list--level1 { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + background-color: #fff; + border: 1px solid #a6a6a6; + border-radius: 8px; + display: none; + left: 0; + margin-top: 12px; + position: absolute; + top: 100%; + width: 100%; + max-height: 400px; + } + .sidemenu__list--level1::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .sidemenu__list--level1::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .sidemenu__list--level1::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .sidemenu__list--level1::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .sidemenu__list--level1::-webkit-scrollbar-track { + background: transparent; + } + .sidemenu__item--level1 { + line-height: 1.534; + margin: 0; + } + .sidemenu__item--level1:not(:first-child) { + border-top: 1px solid #ececec; + } + .sidemenu__link--level1 { + color: #333; + display: block; + font-size: 0.9375rem; + padding: 12px 16px; + } + .sidemenu__link--level1.selected { + background-color: #f4f4f4; + } + .storeList { + box-shadow: 0px 0px 24px rgba(0, 0, 0, 0.08); + margin-bottom: 32px; + } + .storeMap { + margin-bottom: 32px; + width: 100%; + height: 470px; + min-height: 70vh; + } + .storeTile { + margin-inline: 20px; + } + .storeTile__thumbnail { + display: none; + } + .storeLocator { + position: relative; + } + .storeLocator__inner { + padding: 24px 16px; + z-index: 1; + } + .storeLocator__illustration--left { + display: none; + } + .storeLocator__illustration--right { + display: none; + } + .storeLocator__illustration--mob { + bottom: 0; + display: block; + position: absolute; + right: 0; + } + .storeLocator__form { + margin-bottom: 0; + } + .table td.table__tools .iconButton:not(:last-child), + .table td.table__tools .selectedFilters__remove:not(:last-child) { + margin-right: 12px; + } + .gridBoxes { + --gridBoxSpace: 8px; + } + .contentBox { + padding: 24px; + } + .contentBox__icon { + margin-bottom: 16px; + } + .contentBox__title { + margin-bottom: 16px; + } + .userNavBlock { + margin-bottom: 64px; + } + .userNav__link { + font-size: 0.875rem; + } + .addresses { + --addressesGap: 16px; + } + .checkout { + --checkoutSpaceTop: 30px; + } + .checkout__title { + font-size: 1.875rem; + letter-spacing: -0.03em; + line-height: 1.2; + } + .checkout__title { + margin: 0 0 50px; + } + .checkoutMsg__title { + font-size: 1.625rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.35; + } + .checkoutMsg__title { + margin: 0; + } + .landingItem--box { + padding: 16px 8px; + } + .landingItem--box .landingItem__title { + font-size: 0.875rem; + } + .myLists--row { + flex-wrap: wrap; + } + .myLists--row .myList { + width: calc(50% - var(--listsGap) / 2); + } + .productList .product { + width: calc(33.33% - 2 * var(--productSpaceH) / 3); + } + .orderRow { + --orderColGap: 16px; + --orderProductsWidth: 208px; + --orderProductWidth: 64px; + --orderRowGap: 12px; + } + .orderHistory { + --qrWidth: 100px; + --qrMargin: 10px; + } + .orderHistory__section { + padding-right: 10px; + } + .orderSum--border { + flex-direction: column; + } + .orderSum--border .orderSum__col:not(:last-child) { + border-bottom: 1px solid #fff; + } + .orderStatusInfo { + margin-bottom: 24px; + } + .productPage { + --productImageColSpace: 24px; + } + .productHeader .product__img { + margin-right: 8px; + } + .productHeader .priceContainer { + align-items: flex-end; + flex-direction: column-reverse; + } + .productHeader .priceContainer .priceBlock__price--init { + margin: 0 0 4px; + } + } + + @media (max-width: 1023px) and (hover: hover) and (pointer: fine) { + .megamenu__back.button:not(.disabled):hover { + background: transparent; + } + } + + @media (max-width: 1023px) and (min-width: 480px) { + .article__dateWrap .pill { + font-size: 0.75rem; + } + .table { + --cellPaddingX: 16px; + --cellPaddingY: 16px; + --paddingExternalX: 16px; + } + } + + @media (max-width: 1023px) and (min-width: 640px) { + .mainNavWrap { + max-width: 480px; + } + } + + @media (max-width: 767px) { + :root { + --gridSpace: 16px; + --headerHeight: 116px; + } + .section { + margin-bottom: 40px; + } + .sectionTitle h2 { + font-size: 1.375rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.36; + } + .pageTitle h1 { + font-size: 1.875rem; + letter-spacing: -0.02em; + } + .pageTitle.pageTitle--image h1 { + text-shadow: 0px 0px 10px rgba(51, 51, 51, 0.3); + } + .pageTitle--big { + margin-bottom: 32px; + height: 200px; + } + .pageTitle--big h1 { + font-size: 1.625rem; + } + .asideHeader { + height: 92px; + } + .ordersBanner__icon { + font-size: 2.75rem; + } + .ordersBanner__text { + font-size: 0.9375rem; + max-width: 416px; + } + .mobileHidden { + display: none; + } + .separate { + margin: 0 8px; + } + h1 { + font-size: 1.875rem; + letter-spacing: -0.02em; + } + h2 { + font-size: 1.25rem; + letter-spacing: -0.02em; + margin: 0 0 20px; + } + .text, + p { + margin: 0 0 20px; + } + ul.listS { + margin-top: 20px; + } + ul.listCols { + column-count: 3; + } + .footer__main { + flex-direction: column; + padding: 32px 0 8px; + } + .footer__col { + margin-bottom: var(--footerColSpace); + } + .footer__title { + margin-bottom: 8px; + } + .footer__apps { + margin-top: 16px; + } + .footer__btm { + flex-wrap: wrap; + } + .footer__text { + text-align: center; + } + .col--m1 { + flex-basis: 8.3333333333%; + max-width: 8.3333333333%; + } + .col--m2 { + flex-basis: 16.6666666667%; + max-width: 16.6666666667%; + } + .col--m3 { + flex-basis: 25%; + max-width: 25%; + } + .col--m4 { + flex-basis: 33.3333333333%; + max-width: 33.3333333333%; + } + .col--m5 { + flex-basis: 41.6666666667%; + max-width: 41.6666666667%; + } + .col--m6 { + flex-basis: 50%; + max-width: 50%; + } + .col--m7 { + flex-basis: 58.3333333333%; + max-width: 58.3333333333%; + } + .col--m8 { + flex-basis: 66.6666666667%; + max-width: 66.6666666667%; + } + .col--m9 { + flex-basis: 75%; + max-width: 75%; + } + .col--m10 { + flex-basis: 83.3333333333%; + max-width: 83.3333333333%; + } + .col--m11 { + flex-basis: 91.6666666667%; + max-width: 91.6666666667%; + } + .col--m12 { + flex-basis: 100%; + max-width: 100%; + } + .header__top { + padding: 12px 0 0; + } + .header__leftBlock { + padding-bottom: 12px; + } + .header__topInner { + flex-wrap: wrap; + position: relative; + } + .header__logo { + width: 200px; + height: 26px; + } + .header__tools { + background: url(../media/wood.png) repeat scroll center; + flex-shrink: 0; + justify-content: flex-end; + margin-left: calc(-1 * var(--gridSpace)); + padding: 6px 0; + width: calc(100% + var(--gridSpace) * 2); + } + .header__tool { + margin-right: 20px; + } + .header__tool--account { + display: none; + } + .acc--stripe { + margin: 12px 0; + } + .acc--stripe .acc__header { + font-size: 0.875rem; + margin-bottom: 12px; + padding: 12px; + } + .acc--beige .acc__header { + font-size: 1rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.37; + } + .acc--beige .acc__content { + padding: 24px 0 0; + } + .acc--colorStripe .acc__header { + padding-block: 16px; + } + .acc__header { + padding: 16px 0; + } + .acc__headerInner { + flex-flow: column; + flex-wrap: wrap; + padding-right: 10px; + } + .acc__headerInner--price { + flex-flow: row; + align-items: center; + } + .acc__headerInner--price .acc__headerInnerTitle--info { + display: none; + } + .acc__headerInner--price .acc__headerInnerTitle--sum { + display: inline-block; + } + .acc__headerInnerTitle--info { + margin-left: 0; + margin-top: 8px; + } + .acc__headerInnerTitle--sum { + padding-left: 10px; + } + .acc__headerInnerTitle--large { + font-size: 1.125rem; + letter-spacing: -0.02em; + line-height: 1.2; + } + .acc__icon { + font-size: 1.5rem; + } + .articleFeatured { + display: none; + } + .articleList--column { + margin-bottom: 40px; + } + .articleList--contests .article { + width: calc(50% - 1 * var(--productSpaceH) / 2); + } + .articleDetails__title:after { + margin: 20px auto 32px 0; + width: 68px; + } + .bnr { + padding: 20px 0; + } + .bnr__text { + margin: 0 16px; + } + .breadcrumb__list { + align-items: flex-start; + flex-direction: column; + } + .breadcrumb__item { + font-weight: 500; + } + .cardRow { + min-height: 55px; + } + .cardRow__msg { + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.3; + max-width: 120px; + } + .catalogue__title { + font-size: 1.125rem; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.33; + } + .collectionBox__title { + font-size: 0.875rem; + } + .contestBnr { + padding: 64px 24px; + min-height: 209px; + } + .contestBnr h3 { + font-size: 1.125rem; + line-height: 1.2; + } + .deliveryFlowNav { + left: 24px; + } + .radiobuttons--deliveryType { + gap: 8px; + margin: 0 auto; + padding-bottom: 112px; + position: relative; + } + .radiobutton--deliveryType { + position: static; + } + .radiobutton--deliveryType .radiobutton__label { + background: #f2efe8; + border-radius: 8px; + font-size: 0.875rem; + font-weight: 400; + padding: 16px; + } + .radiobutton--deliveryType .radiobutton__label b { + display: block; + } + .radiobutton--deliveryType .radiobutton__text { + line-height: 1.286; + } + .radiobutton--deliveryType .radiobutton__border:after { + right: 8px; + top: 8px; + width: 26px; + height: 26px; + } + .radiobutton--deliveryType .icon { + margin: 0 auto 8px; + height: 32px; + } + .deliveryTypeInfo ul { + background: #f7f5f0; + border-radius: 8px; + flex-grow: 1; + margin: 0; + padding: 12px; + } + .deliveryTypeInfo { + align-items: center; + bottom: 0; + display: flex; + left: 0; + position: absolute; + width: 100%; + height: 112px; + } + .radiobutton:not(.checked) .deliveryTypeInfo { + display: none; + } + .deliveryTypeInfo__sum { + align-items: flex-start; + text-align: left; + } + .deliveryTypeInfo__sum p { + margin-bottom: 4px; + } + .selectedFilters { + display: none; + } + .form { + width: 100%; + } + .formBox__more { + justify-content: flex-start; + } + .formBox .checkbox ~ .formBox__more .checkbox ~ .formBox__more { + padding-left: var(--labelSpace); + } + .loginWrap__img { + display: none; + } + .loginWrap__form { + padding: 64px 16px 40px; + } + .registerPromo { + margin-top: 20px; + } + .formText { + padding: 16px 0 0; + } + .formText p { + font-size: 0.8125rem; + } + .goToTop { + bottom: 16px; + font-size: 0.75rem; + line-height: 56px; + right: 16px; + width: 56px; + height: 56px; + } + .orderTrack .indicator { + margin-bottom: 6px; + } + .loadMore { + --loadMoreSpace: 16px; + } + .message { + margin-bottom: 30px; + } + .modal__wrap .btnWrap { + margin-top: 24px; + } + .modal__titleWrap { + margin-bottom: 24px; + text-align: left; + } + .modal__titleWrap p { + font-size: 0.875rem; + } + .modal__title { + margin-inline: 0; + text-align: left; + } + .modal__title { + font-size: 1.125rem; + } + .newsletter__inner { + margin: 0 auto; + max-width: 400px; + } + .newsletter__form { + border-bottom: 1px solid gray; + margin-bottom: 24px; + padding-bottom: 24px; + } + .newsletter__input { + flex: 1; + } + .notifications { + right: 0; + padding: 0 var(--gridSpace); + width: 100%; + } + .notifications__content { + width: 100%; + } + .notificationsBtn:after { + content: ""; + top: -1px; + right: 0; + width: 8px; + height: 8px; + background: #d91a32; + border-radius: 50%; + } + .outputsRow { + gap: 16px; + } + .output--init { + padding: 8px; + } + .output--pickup:not(.output--init) .output__inner, + .output--delivery:not(.output--init) .output__inner { + background-size: auto 26px; + padding-left: 60px; + min-height: 26px; + } + .output--pickup.output--init .output__inner, + .output--delivery.output--init .output__inner { + background-size: auto 34px; + padding-left: 64px; + min-height: 34px; + } + .output--init .output__title { + font-size: 0.875rem; + } + .product__title { + font-size: 0.9375rem; + } + .productInfo .productTags { + margin-bottom: 8px; + } + .productList .priceContainer { + height: 32px; + } + .priceRow--total { + font-size: 1rem; + margin-bottom: 12px; + } + .productList .quantity { + height: 34px; + } + .quantity__btn { + font-size: 0.875rem; + width: 40px; + } + .quantity__btn--notAvailable { + font-size: 0.8125rem; + } + .quantity__input { + font-size: 0.875rem; + } + .quantity__input span { + font-size: 0.75rem; + font-weight: 400; + } + .quantity__message { + padding: 8px; + } + .result__title { + font-size: 1.625rem; + letter-spacing: -0.03em; + } + .result__p--b { + font-size: 1.125rem; + letter-spacing: -0.02em; + } + .result__code strong { + display: block; + margin-top: 8px; + } + .result__mainimg--notsupported { + margin-bottom: 32px; + max-width: 160px; + } + .sidemenu { + margin-top: 16px; + } + .sliderSection { + --sliderSectionSpaceBottom: 32px; + } + .simpleSlider--cat:not(.swiper-initialized) .swiper-slide { + width: calc(33.3333333333% - 16px); + } + .productsSlider { + margin-top: 16px; + } + .productsSlider .swiper-slide { + width: 160px; + } + .storeTile__address { + margin-bottom: 12px; + } + .storeTileSpecs { + align-items: flex-start; + flex-flow: column; + margin-bottom: 15px; + } + .storeTileSpecs__title { + font-size: 1.375rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.36; + } + .storeTileSpecs__title { + font-size: 1.25rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + margin-bottom: 8px; + } + .storeTileSpecs__iconWrap { + margin-bottom: 12px; + } + .storeTileOrder--details { + flex-flow: column; + margin-bottom: 32px; + padding: 24px; + } + .storeTileOrder--details .storeTileOrder__icon { + margin: 0 auto 16px 0; + } + .storeTileOrder--details .storeTileOrder__info { + padding-right: 0; + width: 100%; + max-width: initial; + } + .storeTileOrder--details .storeTileOrder__actions { + margin-top: 16px; + width: 100%; + } + .storeSearch .form { + background-color: #fff; + transform: translateY(0); + } + .storeSearch.sticky { + padding-bottom: 64px; + } + .storeSearch.sticky .form { + padding-inline: var(--gridSpace); + position: fixed; + top: calc(var(--headerHeight) - 64px); + left: 0; + transform: translateY(100%); + z-index: 3; + transition: transform 250ms ease-out; + width: 100%; + } + .storeSearch p:last-of-type { + margin-bottom: 16px; + } + .pin__count { + font-size: 1.125rem; + letter-spacing: -0.02em; + line-height: 1.2; + } + .mapInfo { + padding-top: 46px; + max-width: 246px; + } + .mapInfo__close { + right: 16px; + top: 16px; + color: #333; + } + .storeLocator__title { + font-size: 1.375rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.36; + } + .storeLocator__title { + font-size: 1.25rem; + font-weight: 700; + letter-spacing: -0.02em; + line-height: 1.2; + } + .storeLocator__sub { + margin-bottom: 32px; + } + .storeLocator__form .field--small { + display: none; + } + .storeHours { + padding: 24px 24px 32px; + } + .storeHours .acc__header p { + display: inline; + } + .storeHours .acc__headerInner { + display: block; + } + .storeHours .acc__icon { + display: inline-block; + } + .storeHours hr { + margin: 27px auto; + max-width: initial; + } + .storeHours__top { + display: flex; + align-items: flex-start; + text-align: left; + flex-flow: column; + } + .storeDetails__map { + padding-top: calc(470 / 343 * 100%); + position: relative; + width: 100%; + } + .timetable { + margin-bottom: 12px; + } + .timetable__day { + border: none; + padding-inline: 56px; + height: 72px; + } + .timetableNav { + justify-content: center; + position: absolute; + top: 16px; + z-index: 2; + width: 40px; + height: 40px; + } + .timetableNav { + font-size: 1rem; + } + .timetableNav__icon, + .timetableNav__text { + display: none; + } + .timetableNav--next { + right: 4px; + } + .timetableNav--prev { + left: 4px; + } + .topnav { + margin-top: 16px; + } + .topnav__selected { + border: 1px solid #a6a6a6; + border-radius: 8px; + color: #333; + font-size: 0.9375rem; + line-height: 1; + overflow: hidden; + padding: 16px 40px 16px 16px; + position: relative; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; + } + .topnav__selected:before { + color: #838385; + font-size: 1rem; + margin-top: -8px; + position: absolute; + right: 16px; + top: 50%; + transition: transform 250ms ease-out; + transform-origin: center; + } + .topnav__selected.active:before { + transform: rotate(180deg); + } + .topnav__list { + scroll-behavior: smooth; + overflow: auto; + scrollbar-color: rgba(166, 166, 166, 0.3) transparent; + scrollbar-width: thin; + -webkit-overflow-scrolling: touch; + background-color: #fff; + border: 1px solid #a6a6a6; + border-radius: 8px; + display: none; + left: 0; + margin-top: 12px; + position: absolute; + top: 100%; + width: 100%; + max-height: 400px; + } + .topnav__list::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .topnav__list::-webkit-scrollbar-thumb { + background: rgba(166, 166, 166, 0.3); + border-radius: 13px; + } + .topnav__list::-webkit-scrollbar-thumb:hover { + background: rgba(166, 166, 166, 0.5); + } + .topnav__list::-webkit-scrollbar-thumb:active { + background: rgba(166, 166, 166, 0.7); + } + .topnav__list::-webkit-scrollbar-track { + background: transparent; + } + .topnav__item { + line-height: 1.534; + margin: 0; + } + .topnav__item:not(:first-child) { + border-top: 1px solid #ececec; + } + .topnav__link { + color: #333; + display: block; + font-size: 0.9375rem; + padding: 12px 16px; + } + .topnav__link.selected { + background-color: #f4f4f4; + } + .unavailabelBox .listTools--noBorder { + padding-top: 8px; + } + .userMenu { + right: 0; + padding: 0 var(--gridSpace); + width: 100%; + } + .userMenu__content { + width: 100%; + } + .gridBoxes__box { + width: calc(50% - var(--gridBoxSpace) * 2); + } + .userNavBlock { + --tabItemHeight: 32px; + margin-left: calc(-1 * var(--gridSpace)); + margin-bottom: 32px; + overflow-x: auto; + width: calc(100% + var(--gridSpace) * 2); + max-width: initial; + } + .userNav { + padding: 0 var(--gridSpace); + } + .userNav__item { + white-space: nowrap; + flex: 1 0 auto; + } + .userNav__item:not(:last-child) { + margin-right: 8px; + } + .userNav__link { + font-size: 0.875rem; + font-weight: 500; + letter-spacing: initial; + line-height: 1.28; + padding: 8px 12px; + } + .accountDetails { + flex-direction: column; + margin-bottom: 24px; + } + .accountDetails__form { + margin-bottom: 8px; + } + .basketTable__row--head .basketTable__cell { + font-size: 0.875rem; + } + .basketTable__cell--price { + margin-right: 0; + } + .basketTable__cell--quant { + margin: 0 16px; + } + .minibasket { + --miniBasketWidth: 100%; + } + .minibasket__overlay { + display: none; + } + .minibasket__inner { + top: var(--headerHeight); + height: calc(var(--windowHeight) - var(--headerHeight)); + } + .minibasket__header { + padding-top: 8px; + padding-bottom: 12px; + } + .minibasket__product { + padding: 16px 0; + } + .minibasket__bottom { + padding: 12px 16px; + } + .minibasket .miniBasketButton { + display: none; + } + .basketInfo { + margin-top: 8px; + } + .secureCheckout { + flex-direction: column; + } + .secureCheckout__text { + margin: 0 0 8px 0; + } + .secureCheckout__img { + width: 120px; + } + .checkout__title { + margin: 0 0 31px; + } + .checkout > h2 { + font-size: 1.375rem; + font-weight: 700; + letter-spacing: -0.03em; + line-height: 1.36; + } + .checkout > h2 { + margin: 0 0 46px; + } + .checkoutMsg { + margin: 0 0 60px; + } + .checkoutMsg img { + margin-bottom: 6px; + } + .checkoutMsg__title { + margin: 0; + } + .checkoutMsg__code strong { + display: block; + margin-top: 8px; + } + .checkoutTracking { + margin: 0 auto 54px; + flex-flow: column; + } + .checkoutTracking__action { + margin-top: 37px; + } + .checkoutTrackingMsg { + margin: 0 0 56px; + } + .loyalty__img { + margin-bottom: 20px; + } + .loyalty__inner { + flex-flow: column; + align-items: center; + } + .loyalty__row { + flex-flow: column; + } + .loyalty__cell { + width: 100%; + } + .loyalty__cell:not(:last-child) { + margin-bottom: 1px; + } + .loyalty__table { + width: 100%; + } + .loyaltyList { + margin: 20px auto 0; + } + .loyaltyList li { + font-size: 0.9375rem; + font-weight: 400; + letter-spacing: -0.03em; + line-height: 1.47; + } + .history { + --historycnt: 72px; + } + .history__mainimg { + margin-bottom: 32px; + } + .history__date { + padding-right: 38px; + } + .history__date:before, + .history__date:after { + right: 28px; + } + .landingList { + --colGap: 0; + row-gap: 0; + } + .landingList__item { + width: 33.33%; + } + .landingItem__title { + font-size: 0.875rem; + margin: 0 var(--landingTitleMobSpace); + } + .landingItem--box .landingItem__title { + font-size: 0.8125rem; + } + .landingItem__submenu { + left: var(--landingTitleMobSpace); + width: calc(100% - var(--landingTitleMobSpace) * 2); + } + .myLists--grid { + --listsGap: 16px; + } + .myLists--row { + --listsGap: 12px; + } + .myList--box { + padding-top: 16px; + padding-bottom: 16px; + } + .myList--box .myList__title { + font-size: 1.125rem; + } + .productList .product .priceBlock__price, + .productsSlider .product .priceBlock__price { + font-size: 0.75rem; + margin-top: 4px; + } + .productList .product .priceBlock__price--init, + .productsSlider .product .priceBlock__price--init { + font-size: 0.6875rem; + line-height: 1.091; + margin-top: 0; + } + .productList .product .priceBlock__price--b, + .productsSlider .product .priceBlock__price--b { + font-size: 0.875rem; + line-height: 1.286; + margin-top: 2px; + } + .productList .product .priceBlock__text, + .productsSlider .product .priceBlock__text { + font-size: 0.625rem; + line-height: 1.2; + } + .orderRow__items { + grid-area: 1/1/2/4; + width: var(--orderProductsWidth); + } + .orderRow__status { + grid-area: 2/1/3/4; + } + .orderRow__info--1 { + grid-area: 3/1/4/2; + } + .orderRow__info--2 { + grid-area: 3/2/4/3; + } + .orderRow__info--3 { + grid-area: 3/3/4/4; + } + .orderHistory { + --outerPaddingY: 18px; + flex-flow: column; + } + .orderHistory .copyText__tooltip { + bottom: 100%; + transform: translate3d(-90%, -10px, 0); + top: auto; + } + .orderHistory .copyText__tooltip--open { + bottom: 100%; + transform: translate3d(-90%, -15px, 0); + top: auto; + } + .orderHistory--qr .orderHistory__section--top { + margin-top: 0; + } + .orderHistory__qr { + margin-right: 15px; + } + .orderHistory__section:not(.orderHistory__section--top) { + padding-right: 0; + } + .orderHistory__section:not(.orderHistory__section--top):not(:last-child) { + border-bottom: 1px solid #c2c2c2; + margin-bottom: 10px; + padding-bottom: 10px; + } + .orderHistory__section--top { + align-items: flex-end; + margin: 55px 0 15px; + } + .orderHistory__section--top .copyText { + margin-bottom: 17px; + } + .orderStatusInfo { + margin-bottom: 16px; + } + .orderTrack { + margin: 0 0 16px; + padding: 16px; + } + .orderTrack__inner { + align-items: flex-start; + flex-flow: column; + } + .orderTrack__date { + display: block; + margin-top: 6px; + } + .productPage { + margin: 24px 0 32px; + } + .productPage__imageCol { + margin: 0 auto 32px; + max-width: 560px; + } + .productPage__imageMain { + margin-bottom: 16px; + } + .productInfo__title { + font-size: 1.5rem; + line-height: 1.25; + } + .productInfo__desc { + margin-bottom: 16px; + } + .productInfo__codeWrap { + margin-bottom: 8px; + } + .productDetails { + margin-top: 24px; + padding-top: 24px; + } + .productDetails__heading { + margin-bottom: 0; + } + .productDetailsNutrTable td { + padding: 8px 14px; + } + .productSliderModal .modal__wrap { + padding: 24px; + } + .productThumbs { + --thumbImageWidth: 64px; + } + .productMainImg .imgControl { + display: none; + } + .notifyMe__main { + max-width: 90vw; + } + } + + @media (max-width: 767px) and (max-width: 767px) { + .sectionTitle h2 { + font-size: 1.125rem; + letter-spacing: -0.02em; + line-height: 1.2; + } + .storeTileSpecs__title { + font-size: 1.125rem; + letter-spacing: -0.02em; + line-height: 1.2; + } + .storeLocator__title { + font-size: 1.125rem; + letter-spacing: -0.02em; + line-height: 1.2; + } + .checkout > h2 { + font-size: 1.125rem; + letter-spacing: -0.02em; + line-height: 1.2; + } + } + + @media (max-width: 639px) { + .sectionTitle p { + font-size: 0.9375rem; + } + .ordersBanner__img img { + object-fit: contain; + object-position: left top; + } + .ordersBanner__icon { + margin-bottom: 16px; + } + .ordersBanner__text { + max-width: 100%; + } + .btnWrap--stickyBtm { + background-color: #fff; + bottom: 0; + left: 0; + margin-top: 12px; + padding-top: 20px; + position: sticky; + z-index: 9; + } + .footer { + --footerSpaceTop: 40px; + } + .col--s1 { + flex-basis: 8.3333333333%; + max-width: 8.3333333333%; + } + .col--s2 { + flex-basis: 16.6666666667%; + max-width: 16.6666666667%; + } + .col--s3 { + flex-basis: 25%; + max-width: 25%; + } + .col--s4 { + flex-basis: 33.3333333333%; + max-width: 33.3333333333%; + } + .col--s5 { + flex-basis: 41.6666666667%; + max-width: 41.6666666667%; + } + .col--s6 { + flex-basis: 50%; + max-width: 50%; + } + .col--s7 { + flex-basis: 58.3333333333%; + max-width: 58.3333333333%; + } + .col--s8 { + flex-basis: 66.6666666667%; + max-width: 66.6666666667%; + } + .col--s9 { + flex-basis: 75%; + max-width: 75%; + } + .col--s10 { + flex-basis: 83.3333333333%; + max-width: 83.3333333333%; + } + .col--s11 { + flex-basis: 91.6666666667%; + max-width: 91.6666666667%; + } + .col--s12 { + flex-basis: 100%; + max-width: 100%; + } + .acc-section { + margin-bottom: 40px; + } + .acc-section__title { + font-size: 1.25rem; + } + .deliveryFlowNav { + left: 16px; + } + .radiobutton--tab .icon { + font-size: 1.375rem; + margin-right: 4px; + } + .radiobutton--tab .radiobutton__label { + font-size: 0.9375rem; + } + .form { + --fieldColumnSpace: 24px; + } + .form__row { + flex-direction: column; + margin-left: calc(-1 * var(--fieldColumnSpace) / 2); + width: calc(100% + var(--fieldColumnSpace)); + } + .form__col { + width: 100%; + } + .field { + flex: 1; + } + .field--small { + flex: initial; + } + .field__legend { + margin: 0 0 20px; + } + .field__mapInner { + padding-top: 137.0262390671%; + } + .formBox__text { + font-size: 0.875rem; + } + .radiobuttons--inline, + .checkboxes--inline { + flex-flow: column; + } + .file-upload__title { + max-width: 151px; + } + .loginWrap__form { + padding-bottom: 24px; + } + .modal__wrap { + padding: 64px 16px 24px; + } + .outputsRow { + gap: 8px; + flex-direction: column; + } + .product__discount { + border-width: 3px; + font-size: 0.6875rem; + font-weight: 500; + width: 44px; + height: 44px; + } + .product__discount .product__discountVal { + font-size: 0.875rem; + margin-bottom: -3px; + } + .product__badge { + --badgePosition: var(--productPadding); + } + .simpleSlider--cat:not(.swiper-initialized) .swiper-slide { + width: calc(50% - 16px); + } + .storeTileOrder { + flex-wrap: wrap; + padding: 10px; + } + .storeTileOrder__details { + margin-bottom: 4px; + } + .storeTileOrder__actions { + flex-basis: 100%; + margin-top: 20px; + } + .storeTileOrder__actions .button { + width: 100%; + } + .tooltip__main { + padding: 16px; + } + .gridBoxes { + margin: 32px 0 32px calc(-1 * var(--gridBoxSpace)); + } + .gridBoxes__box { + margin-left: 0; + margin-right: 0; + width: 100%; + } + .contentBox { + flex-wrap: wrap; + } + .contentBox__icon { + font-size: 2rem; + margin: 0 8px 0 0; + } + .contentBox__title { + margin-bottom: 0; + } + .contentBox__text { + margin-top: 8px; + width: 100%; + } + .addBox__icon { + font-size: 3.5rem; + margin-bottom: 24px; + } + .addBox__text { + margin-bottom: 24px; + } + .addresses__box, + .addresses .addBox { + width: 100%; + } + .basketTable { + --imgWidth: 80px; + --basketProductSpaceV: 16px; + } + .basketTable .basketTable__row:not(.basketTable__row--head) { + align-content: center; + align-items: flex-start; + flex-wrap: wrap; + padding: var(--basketProductSpaceV) 8px var(--basketProductSpaceV) 96px; + min-height: 112px; + } + .basketTable .basketTable__remove { + font-size: 1.5rem; + margin: 0; + right: 8px; + top: var(--basketProductSpaceV); + z-index: 2; + } + .basketTable .basketTable__cell--product { + flex: auto; + width: 100%; + } + .basketTable .basketTable__cell--product:not(:last-child) { + margin-bottom: 8px; + } + .basketTable .basketTable__cell--quant { + margin: 0; + } + .basketTable .basketTable__cell--price { + align-items: flex-end; + display: inline-flex; + flex: 1; + justify-content: flex-end; + margin: 0; + width: auto; + height: 34px; + } + .basketTable .fav { + font-size: 1.5rem; + margin: 0; + right: 40px; + top: var(--basketProductSpaceV); + } + .basketTable .product__img { + left: 8px; + margin-top: -40px; + position: absolute; + top: 50%; + } + .basketTable .product__title { + font-size: 0.9375rem; + padding-right: 72px; + } + .basketTable__row--head .basketTable__cell--product:not(:last-child) { + margin-bottom: 0; + } + .basketTable__row--head .basketTable__cell:not(:first-child) { + display: none; + } + .minibasket .basketTable .priceBlock__price { + font-size: 1rem; + line-height: 1.375; + } + .minibasket .basketTable .priceBlock__price--init { + font-size: 0.6875rem; + line-height: 1.546; + margin-bottom: 2px; + margin-top: 0; + } + .minibasket .basketTable .product__title { + font-size: 0.8125rem; + } + .form--basket { + margin-block: 20px; + } + .checkoutStep { + --checkoutStepSpace: 16px; + } + .history__section { + padding: 0 12px; + } + .history__thumb { + margin-bottom: 20px; + } + .listsBlock { + left: 0; + opacity: 0; + padding: 24px; + position: fixed; + top: 0; + transition: opacity 250ms ease-in-out; + z-index: 9; + width: 100%; + height: 100%; + } + .wishlistButton:not(.open) .listsBlock { + pointer-events: none; + } + .wishlistButton.open .listsBlock { + opacity: 1; + } + .listsBlock__inner { + padding-top: 56px; + z-index: 10; + height: 100%; + } + .listsBlock__title { + font-size: 1.25rem; + font-weight: 700; + text-align: center; + } + .listsBlock__list { + margin-bottom: 20px; + padding-bottom: 20px; + } + .listsBlock__close { + font-size: 1.5rem; + right: 16px; + top: 16px; + } + .myLists--grid .myList { + width: 100%; + } + .myLists--row .myList { + width: 100%; + } + .productList .product .product__img, + .productsSlider .product .product__img { + margin-left: calc(-1 * var(--productPadding)); + width: calc(100% + var(--productPadding) * 2); + } + .productList .product { + width: calc(50% - var(--productSpaceH) / 2); + } + .listTools { + padding-bottom: 8px; + } + .orderRow { + display: flex; + flex-direction: column; + gap: var(--orderRowGap); + } + .orderSum { + --orderSumColSpace: 16px; + } + .productPage__imageCol { + margin-bottom: 24px; + } + .productInfo__quantity { + margin: 14px 0 20px; + } + .productInfo .priceContainer { + margin: 0 0 8px; + } + .productThumbs .swiper-button-prev, + .productThumbs .swiper-button-next { + top: 0; + height: 100%; + } + .productThumbs .swiper-button-prev:before { + background: linear-gradient( + to right, + white 0%, + rgba(255, 255, 255, 0) 100% + ); + } + .productThumbs .swiper-button-next:before { + background: linear-gradient(to left, white 0%, rgba(255, 255, 255, 0) 100%); + } + .productHeader .product__img { + width: 56px; + } + .productHeader .addToCartButton { + min-width: initial; + } + .productHeader .addToCartButton:before { + margin-right: 0; + } + .productHeader .addToCartButton__text { + display: none; + } + .notifyMe__main { + padding: 16px; + } + } + + @media (max-width: 639px) and (max-width: 639px) { + .basketTable .priceBlock__price { + font-size: 1rem; + line-height: 1.375; + } + .basketTable .priceBlock__price--init { + font-size: 0.6875rem; + line-height: 1.546; + margin-bottom: 2px; + margin-top: 0; + } + .basketTable .product__title { + font-size: 0.8125rem; + } + } + + @media (max-width: 479px) { + :root { + --formMaxWidthS: 100%; + } + .sectionTitle { + align-items: flex-start; + flex-direction: column; + } + .btnWrap { + --buttonsMargin: 4px; + align-items: center; + flex-direction: column; + } + .btnWrap .button { + width: 100%; + } + ul.listCols { + column-count: 1; + } + .header--checkout .header__topInner { + padding-top: 42px; + } + .header--checkout .header__logo { + top: 0; + transform: translateX(-50%); + } + .articleList--contests .article { + width: 100%; + } + .catalogueList .catalogue { + width: 100%; + } + .emptyContent { + grid-template-areas: "icon text" "buttons buttons"; + } + .table { + --paddingExternalX: 20px; + --cellPaddingY: 8px; + margin: 20px 0 32px; + font-size: 0.8125rem; + font-weight: 400; + letter-spacing: -0.02em; + line-height: 1.07; + } + .table th { + display: none; + } + .table tr { + border-width: 1px; + } + .table tr:not(.highlight) { + border-color: #ececec; + } + .table thead tr { + display: none; + } + .table td:first-child { + padding-top: var(--paddingExternalY); + } + .table td:last-child { + padding-bottom: var(--paddingExternalY); + } + .table td { + align-items: center; + display: flex; + justify-content: flex-start; + max-width: initial; + padding: var(--cellPaddingY) var(--paddingExternalX); + } + .table td.table__tools { + padding: 11px var(--paddingExternalX) 24px; + } + .table td.table__tools { + position: relative; + margin-top: var(--cellPaddingY); + justify-content: flex-end; + } + .table td.table__tools:after { + content: ""; + display: block; + position: absolute; + top: 0; + right: var(--paddingExternalX); + left: var(--paddingExternalX); + border-top: 1px dashed #838385; + } + .table .mob-th { + display: inline-block; + margin-right: 25px; + flex: 0 0 45%; + } + .accountDetails__box { + width: 100%; + } + .checkoutTracking__action { + min-width: initial; + width: 100%; + } + .landingList__item { + width: 50%; + } + .addProduct { + flex-wrap: wrap; + } + .addProduct .quantity { + margin-bottom: 16px; + } + .addToCartButton { + width: calc(100% - 64px); + } + .productHeader .product__desc { + display: none; + } + } + + @media (hover: hover) and (pointer: fine) { + .breadcrumb__itemLink:hover { + color: var(--buttonColorHover); + } + .breadcrumb__itemLink:active { + color: var(--buttonColorActive); + } + .button:not(.disabled):hover { + background-color: var(--buttonColorHover); + } + .button:not(.disabled):active { + background-color: var(--buttonColorActive); + } + .button--border:not(.disabled):hover { + background: transparent; + border-color: var(--buttonColorHover); + color: var(--buttonColorHover); + } + .button--border:not(.disabled):active { + background: transparent; + border-color: var(--buttonColorActive); + color: var(--buttonColorActive); + } + .button--alt:not(.disabled):hover { + background: #f7f5f0; + border-color: #c2c2c2; + color: inherit; + } + .button--alt:not(.disabled):hover .icon { + color: #f47920; + } + .button--alt:not(.disabled):active { + background: #f2efe8; + border-color: #c2c2c2; + color: inherit; + } + .button--alt:not(.disabled):active .icon { + color: #f47920; + } + .iconButton--border:not(.disabled):hover { + border-color: var(--buttonColorHover); + } + .iconButton--border:not(.disabled):active { + border-color: var(--buttonColorActive); + } + .iconButton:not(.disabled):hover, + .selectedFilters__remove:not(.disabled):hover { + color: var(--buttonColorHover); + } + .iconButton:not(.disabled):active, + .selectedFilters__remove:not(.disabled):active { + color: var(--buttonColorActive); + } + .link:not(.disabled):hover, + .text a:not(.disabled):hover, + p a:not(.disabled):hover { + color: var(--buttonColorHover); + } + .link:not(.disabled):active, + .text a:not(.disabled):active, + p a:not(.disabled):active { + color: var(--buttonColorActive); + } + .deliveryTypeInfo__link:hover { + color: var(--buttonColorHover); + } + .deliveryTypeInfo__link:active { + color: var(--buttonColorActive); + } + .categoriesList__item > a:hover, + .categoriesList__item > .acc__header:hover { + color: #333; + } + .checkbox__label a:hover, + .radiobutton__label a:hover { + text-decoration: underline; + } + .radiobutton--box:not(.disabled):hover .radiobutton__border { + background-color: #f4f4f4; + } + .radiobutton--onlyColor:hover .radiobutton__icon { + border-color: #838385; + } + .radiobutton--onlyIcon:hover .radiobutton__icon { + border-color: #a6a6a6; + } + .select__option:not(.selected):hover, + .autocomplete__option:not(.selected):hover { + background-color: #f4f4f4; + } + .select__option:not(.selected):active, + .autocomplete__option:not(.selected):active { + background-color: #ececec; + } + .select--card .select__option:not(.selected):hover, + .select--card .autocomplete__option:not(.selected):hover { + background-color: #f7f5f0; + } + .select--card .select__option:not(.selected):active, + .select--card .autocomplete__option:not(.selected):active { + color: var(--buttonColorActive); + } + .file-upload__delete:hover { + color: #838385; + } + .file-upload__delete:hover .file-upload__icon { + color: #a6a6a6; + } + .file-upload__delete:active { + color: #f47920; + } + .file-upload__delete:active .file-upload__icon { + color: #f47920; + } + .goToTop:hover:before { + transform: translateY(-6px); + } + .mainNav__item:hover { + color: #333; + } + .megamenu__list a:hover { + color: #333; + } + .output__link:hover, + .output__mainLink:hover { + color: var(--buttonColorHover); + } + .output__link:active, + .output__mainLink:active { + color: var(--buttonColorActive); + } + .pagination__link:hover { + color: var(--buttonColorHover); + } + .pagination__link:active { + color: var(--buttonColorActive); + } + .quantity--init:hover:after { + background-color: #e8e2d7; + } + .quantity__btn:not(.disabled):hover { + background-color: var(--buttonBgColorHover); + } + .quantity__btn:not(.disabled):active { + background-color: var(--buttonBgColorActive); + } + .sideNav__item--level1:not(.open) .sideNav__link--level1:hover { + color: #838385; + } + .sideNav__link--level2:not(.active):hover { + color: #838385; + } + .swiper-button-prev:not(.swiper-button-disabled):hover, + .swiper-button-next:not(.swiper-button-disabled):hover { + color: #595959; + } + .swiper-button-prev:not(.swiper-button-disabled):active, + .swiper-button-next:not(.swiper-button-disabled):active { + color: #f47920; + } + .table tbody tr:hover:after { + opacity: 1; + } + .timetable__hour:not(.timetable__hour--selected):not(.timetable__hour--unavailable):hover { + border-color: #a6a6a6; + } + .playvideo__icon:hover { + color: var(--buttonColorHover); + } + .playvideo__icon:active { + color: var(--buttonColorActive); + } + .userMenu__link:hover { + color: var(--hoverColor); + } + .contentBox__link:hover { + color: #333; + } + .userNav__link:not(.active):hover { + background-color: #e8e2d7; + } + .contactinfo__link:hover { + color: #838385; + } + .contactinfo__link:active { + color: #f47920; + } + .contactinfo__link:active .contactinfo__icon { + color: #f47920; + } + .landingList__item:hover .landingItem__title { + color: #fff; + } + .landingList__item:hover .landingItem__title:before { + opacity: 1; + } + .landingItem__link:hover { + color: var(--buttonColorHover); + } + .landingItem__link:active { + color: var(--buttonColorActive); + } + .landingItem--box .landingItem__title:hover { + color: var(--buttonColorHover); + } + .landingItem--box .landingItem__title:active { + color: var(--buttonColorActive); + } + .landingItem__submenuLink:hover { + color: #838385; + } + .myList--box:hover:after { + opacity: 1; + } + .myList__title:hover { + color: var(--buttonColorHover); + } + .myList__title:active { + color: var(--buttonColorActive); + } + .productList .product:hover, + .productsSlider .product:hover { + box-shadow: 0px 6px 16px rgba(51, 51, 51, 0.15); + } + .productThumbs__slide:not(.swiper-slide-thumb-active):hover:after { + opacity: 1; + border-color: #a6a6a6; + } + .sitemapnav__link:hover { + color: var(--buttonColorHover); + } + .sitemapnav__link:active { + color: var(--buttonColorActive); + } + } + + @media (hover: none) and (pointer: coarse) { + .landingList__item.active .landingItem__title { + color: #fff; + } + .landingList__item.active .landingItem__title:before { + opacity: 1; + } + } + /*# sourceMappingURL=main.css.map */ + \ No newline at end of file diff --git a/html/content/css/main.min.css b/html/content/css/main.min.css new file mode 100644 index 0000000..7052f9e --- /dev/null +++ b/html/content/css/main.min.css @@ -0,0 +1,2 @@ +:root{--top: 0px;--windowHeight: 100%;--productPadding: 16px;--gridSpace: 48px;--iconButtonSpace: 11px;--headerHeight: 136px;--fieldColumnSpace: 16px;--fieldRowSpace: 20px;--smallField: 130px;--checkboxRadioSpace: 16px;--inputBorderColor: #A6A6A6;--inputLabelPadding: 16px;--wrapperXXS: 816px;--wrapperXS: 984px;--wrapperS: 1142px;--wrapper: 1240px;--wrapperL: 1514px;--wrapperFull: 1920px}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */*,*::before,*::after{box-sizing:border-box}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;-webkit-font-smoothing:antialiased}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{width:100%;height:100%;position:relative;z-index:1}.noUi-connects{overflow:hidden;z-index:0}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;height:100%;width:100%;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;-webkit-transform-style:flat;transform-style:flat}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{top:-100%;width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s}.noUi-state-drag *{cursor:inherit !important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;right:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;bottom:-17px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#fafafa;border-radius:4px;border:1px solid #d3d3d3;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.noUi-connects{border-radius:3px}.noUi-connect{background:#3fb8af}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #d9d9d9;border-radius:3px;background:#fff;cursor:default;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.noUi-handle:before,.noUi-handle:after{content:"";display:block;position:absolute;height:14px;width:1px;background:#e8e7e6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:before,.noUi-vertical .noUi-handle:after{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#b8b8b8}[disabled].noUi-target,[disabled].noUi-handle,[disabled] .noUi-handle{cursor:not-allowed}.noUi-pips,.noUi-pips *{box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#ccc}.noUi-marker-sub{background:#aaa}.noUi-marker-large{background:#aaa}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{-webkit-transform:translate(-50%, 50%);transform:translate(-50%, 50%)}.noUi-rtl .noUi-value-horizontal{-webkit-transform:translate(50%, 50%);transform:translate(50%, 50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{-webkit-transform:translate(0, -50%);transform:translate(0, -50%);padding-left:25px}.noUi-rtl .noUi-value-vertical{-webkit-transform:translate(0, 50%);transform:translate(0, 50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #d9d9d9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{-webkit-transform:translate(0, -50%);transform:translate(0, -50%);top:50%;right:120%}.noUi-horizontal .noUi-origin>.noUi-tooltip{-webkit-transform:translate(50%, 0);transform:translate(50%, 0);left:auto;bottom:10px}.noUi-vertical .noUi-origin>.noUi-tooltip{-webkit-transform:translate(0, -18px);transform:translate(0, -18px);top:auto;right:28px}@font-face{font-family:"swiper-icons";src:url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA");font-weight:400;font-style:normal}:root{--swiper-theme-color: #007aff}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:-webkit-transform;transition-property:transform;transition-property:transform, -webkit-transform;box-sizing:content-box}.swiper-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0px, 0, 0);transform:translate3d(0px, 0, 0)}.swiper-pointer-events{touch-action:pan-y}.swiper-pointer-events.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:-webkit-transform;transition-property:transform;transition-property:transform, -webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:height,-webkit-transform;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{-webkit-perspective:1200px;perspective:1200px}.swiper-3d .swiper-wrapper,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-cube-shadow{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0))}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper::before{content:"";flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-start:var(--swiper-centered-offset-before);margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-before:var(--swiper-centered-offset-before);margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:"";position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size: 44px}.swiper-button-prev,.swiper-button-next{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/44*27);height:var(--swiper-navigation-size);margin-top:calc(0px - var(--swiper-navigation-size)/2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color, var(--swiper-theme-color))}.swiper-button-prev.swiper-button-disabled,.swiper-button-next.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev:after,.swiper-button-next:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none !important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:"prev"}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:"next"}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:300ms opacity;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-fraction,.swiper-pagination-custom,.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(0.33);transform:scale(0.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{-webkit-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(0.66);transform:scale(0.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(0.33);transform:scale(0.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(0.66);transform:scale(0.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(0.33);transform:scale(0.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));height:var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));display:inline-block;border-radius:50%;background:var(--swiper-pagination-bullet-inactive-color, #000);opacity:var(--swiper-pagination-bullet-inactive-opacity, 0.2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none !important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color, var(--swiper-theme-color))}.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0px, -50%, 0);transform:translate3d(0px, -50%, 0)}.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap, 6px) 0;display:block}.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:200ms top,200ms -webkit-transform;transition:200ms transform,200ms top;transition:200ms transform,200ms top,200ms -webkit-transform}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap, 4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:200ms left,200ms -webkit-transform;transition:200ms transform,200ms left;transition:200ms transform,200ms left,200ms -webkit-transform}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:200ms right,200ms -webkit-transform;transition:200ms transform,200ms right;transition:200ms transform,200ms right,200ms -webkit-transform}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color, var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-vertical>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite{width:4px;height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>img,.swiper-zoom-container>svg,.swiper-zoom-container>canvas{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s infinite linear;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color, var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color: #fff}.swiper-lazy-preloader-black{--swiper-preloader-color: #000}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}html.noScroll,html.noScroll body{overflow:hidden;height:calc(var(--windowHeight) - 1px)}body.menuOpened{left:0;overflow:hidden;position:fixed;top:0;width:100%;height:100%}body:not(.menuOpened) .mainLayer{opacity:0;pointer-events:none}.section{margin-bottom:64px}.sectionTitle{align-items:flex-end;display:flex;flex-wrap:wrap;justify-content:space-between;margin-bottom:20px;text-align:left}.sectionTitle--center{justify-content:center}.sectionTitle h2{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.53;color:#333;margin:0}.sectionTitle h2+p{margin-top:4px}.sectionTitle p{color:#404040;font-size:1rem;line-height:1.467}.sectionTitle p:last-child{margin-bottom:0}.sectionTitle .link,.sectionTitle .text a,.text .sectionTitle a,.sectionTitle p a,p .sectionTitle a{margin-top:4px}.pageTitle{position:relative;height:100px}.mainLayout__content .pageTitle{margin-left:calc(-1*var(--mainLayoutSpace));width:calc(100% + var(--mainLayoutSpace)*2)}.pageTitle img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.pageTitle .wrapper{align-items:center;display:inline-flex;flex-direction:column;justify-content:center;position:relative;text-align:center;height:100%}.pageTitle h1{color:var(--fontcolor);font-size:2.875rem;font-weight:700;letter-spacing:-0.03em;line-height:1.0435;margin:0}.pageTitle .em{color:#f47920}.pageTitle p{color:#595959;font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.375;margin:0}.pageTitle.pageTitle--image h1{text-shadow:0px 6px 16px rgba(51,51,51,.15)}.pageTitle--big{align-items:center;background:#f2efe8;display:flex;justify-content:center;-webkit-mask:url(//storage.googleapis.com/pythia-files/emarket/sklavenitisMask.svg) center no-repeat;mask:url(//storage.googleapis.com/pythia-files/emarket/sklavenitisMask.svg) center no-repeat;-webkit-mask-size:auto 100%;mask-size:auto 100%;margin:0 0 56px;position:relative;text-align:center;height:385px}.pageTitle--big img{-o-object-fit:cover;object-fit:cover;height:100%;max-width:1243px}.pageTitle--big h1{color:#fff;font-size:4.375rem;line-height:1;text-shadow:0px 6px 16px rgba(51,51,51,.15)}[v-cloak]:not([v-cloak=visibility]){display:none}[v-cloak=visibility]{visibility:hidden}.printRow{margin-top:24px;padding-top:16px;text-align:right}.printRow--border{border-top:1px solid #c2c2c2}.asideHeader{align-items:center;background:#f2efe8;display:flex;flex-direction:column;justify-content:center;height:100px}.asideHeader__title{color:#333;font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.334;margin:0}.asideHeader__title:not(:last-child){margin-bottom:4px}.asideHeader__text{color:#838385;font-size:0.875rem;font-weight:500;line-height:1.286}.ordersBanner{background:#f2efe8;border-radius:8px;overflow:hidden;padding:32px;position:relative}.ordersBanner__img{position:absolute;right:0;top:0;width:46%;height:100%}.ordersBanner__img img{-o-object-fit:cover;object-fit:cover;-o-object-position:left center;object-position:left center;width:100%;height:100%}.ordersBanner__icon{flex-shrink:0;font-size:3.4375rem;margin-right:32px}.ordersBanner__text{color:#333;font-size:1.0625rem;letter-spacing:-0.03em;line-height:1.411;margin:0;position:relative;max-width:496px}.pageNav{display:flex;justify-content:space-between;margin:24px 0}.pill{font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.28;background-color:#8dc63f;border-radius:100px;color:#fff;display:inline-block;padding:5px 12px}@font-face{font-family:"cfastystd";font-display:swap;font-style:normal;font-weight:400;src:url("../fonts/CFAstyStd-Book.woff2") format("woff2"),url("../fonts/CFAstyStd-Book.woff") format("woff")}@font-face{font-family:"cfastystd";font-display:swap;font-style:normal;font-weight:500;src:url("../fonts/CFAstyStd-Medium.woff2") format("woff2"),url("../fonts/CFAstyStd-Medium.woff") format("woff")}@font-face{font-family:"cfastystd";font-display:swap;font-style:normal;font-weight:700;src:url("../fonts/CFAstyStd-Bold.woff2") format("woff2"),url("../fonts/CFAstyStd-Bold.woff") format("woff")}.clearfix::after{clear:both;content:"";display:table}.hide-text{overflow:hidden;padding:0;text-indent:101%;white-space:nowrap}.visually-hidden{border:0;clip:rect(0 0 0 0);margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;height:1px}.row{display:flex;flex-wrap:wrap}.row--noWrap{flex-wrap:nowrap}.row--vStart{align-items:flex-start}.row--vCenter{align-items:center}.row--vEnd{align-items:flex-end}.row--hStart{justify-content:flex-start}.row--hCenter{justify-content:center}.row--hEnd{justify-content:flex-end}.row--space{flex-wrap:nowrap;justify-content:space-between}.btnWrap{--buttonsMarginH: 6px;--buttonsMarginV: 6px;display:flex;flex-wrap:wrap;justify-content:flex-start;margin:0 0 40px}.btnWrap.field{--buttonsMarginH: 24px}.btnWrap--noMargin{margin-bottom:0}.btnWrap--hCenter{justify-content:center}.btnWrap--hEnd{justify-content:flex-end}.btnWrap--hSpaceB{justify-content:space-between}.btnWrap--column{flex-direction:column}.btnWrap--column>*:not(:last-child){margin-bottom:var(--buttonsMarginV);margin-right:0}.btnWrap .button{margin:var(--buttonsMarginV) var(--buttonsMarginH)}.productThumbs .swiper-button-prev:before,.productThumbs .swiper-button-next:before,.productThumbs__slide:after,.orderTrack__action:after,.myList__new:after,.myList__title:after,.myList__icon:after,.myList--box:after,.landingItem--box .landingItem__title:after,.landingItem__title:before,.landingItem__link:before,.addBox__link:before,.userNav__link:after,.contentBox__link:before,.playvideo__icon,.table tbody tr:after,.storeHours:after,.searchInput__submitInput,.quantity.quantity--init .quantity__input,.quantity--init:after,.product__title:before,.output--init .output__button:after,.output__mainLink:after,.loginWrap__img img,.radiobutton__border,.filtersApply .loader,.contestBnr:after,.catalogue__link:before,.loginBtn .iconButton:after,.loginBtn .selectedFilters__remove:after,.article__link:before,.pageTitle figure,.pageTitle--big figure{inset:0;position:absolute;width:100%;height:100%}.separate{margin:0 16px}.txtRight{text-align:right}.noWrap{white-space:nowrap}.couponBlock__clear,.couponBlock__btn,.playvideo__icon,.social__link,.iconButton,.selectedFilters__remove,.footer__listLink{--buttonColor: #838385;--buttonColorHover: #595959;--buttonColorActive: #F47920}.sitemapnav__link,.myList__title,.landingItem--box .landingItem__title,.landingItem__link,.pagination__link,.output__link,.output__mainLink,.select__option,.autocomplete__option,.checkbox__label a,.radiobutton__label a,.deliveryTypeInfo__link,.link,.text a,p a,.iconButton--black,.breadcrumb__itemLink{--buttonColor: #333;--buttonColorHover: #838385;--buttonColorActive: #F47920}.link--orange,.iconButton--orange,.button{--buttonColor: #F47920;--buttonColorHover: #F68D41;--buttonColorActive: #C75808}.button.button--green,.button.miniBasketButton.active{--buttonColor: #74B11F;--buttonColorHover: #8DC63F;--buttonColorActive: #588718}.select__listWrap,.autocomplete,.range__input,.field__input,.textarea__field,.select__button{border:1px solid var(--inputBorderColor);border-radius:8px}.range__input,.field__input,.textarea__field,.select__button{color:#333;font-size:0.9375rem;padding:8px 16px;width:100%;height:48px}.input-validation-error.range__input,.input-validation-error.field__input,.input-validation-error.textarea__field,.input-validation-error.select__button,.field--error .range__input,.field--error .field__input,.field--error .textarea__field,.field--error .select__button{border-color:#d91a32}.range__input:focus,.field__input:focus,.textarea__field:focus,.select--open .select__button{border-color:#f47920;outline:none}.field-validation-error,.field__helper{font-size:0.75rem;font-weight:400;letter-spacing:initial;line-height:1.33;color:#595959;display:block;margin:7px 0 0 0;padding-left:var(--inputLabelPadding)}.field-validation-error~.field-validation-error,.field__helper~.field-validation-error{margin-top:2px}.field__input:-moz-read-only{background-color:#ececec;border-color:#ececec;color:#838385;pointer-events:none}.field__input:read-only{background-color:#ececec;border-color:#ececec;color:#838385;pointer-events:none}.listsBlock__bg,.minibasket__overlay,.userMenu__overlay,.notifications__overlay,.modal__bg,.mainLayer{background-color:rgba(51,51,51,.9);left:0;position:fixed;top:0;transition:opacity 250ms ease-in-out;z-index:9;width:100%;height:100%}.minibasket__inner{-webkit-transform:translateX(100%);transform:translateX(100%);transition:-webkit-transform 300ms ease-out 120ms;transition:transform 300ms ease-out 120ms;transition:transform 300ms ease-out 120ms, -webkit-transform 300ms ease-out 120ms}.minibasket.active .minibasket__inner{-webkit-transform:translateX(0);transform:translateX(0);transition:-webkit-transform 350ms ease-out;transition:transform 350ms ease-out;transition:transform 350ms ease-out, -webkit-transform 350ms ease-out}.miniCart.active .miniCart__holder,.miniCart.active .miniCart__main{opacity:1;transition:opacity 300ms ease-out 240ms}.miniCart__holder,.miniCart__main{opacity:0;transition:opacity 240ms ease-out}@font-face{font-family:"iconfont";src:url("https://sklavenitishtml.dev.atcom.gr/Content/Fonts/iconfont.eot");src:url("https://sklavenitishtml.dev.atcom.gr/Content/Fonts/iconfont.eot?") format("eot"),url("../Fonts/iconfont.woff2") format("woff2"),url("../Fonts/iconfont.woff") format("woff"),url("../Fonts/iconfont.ttf") format("truetype"),url("../Fonts/iconfont.svg") format("svg")}.couponBlock__clear:before,.couponBlock__btn:before,.productThumbs .swiper-button-next:after,.productThumbs .swiper-button-prev:after,.addToCartButton--added:before,.addToCartButton:before,.myList--box.myList--fav:before,.myList--box:before,.sideBasket__title:before,.topnav__selected:before,.timetableNav--prev:before,.timetableNav--next:before,.swiper-button-next:after,.swiper-button-prev:after,.sidemenu__selected:before,.searchInput__submit:before,.range__submit:before,.quantity__message--removed:before,.quantity__message--added:before,.quantity__btn--dec:before,.quantity__btn--inc:before,.quantity--init:before,.errorMsg:before,.select__button:after,.checkbox__icon:before,.radiobutton--check .radiobutton__icon:after,.radiobutton--box .radiobutton__icon:after,.selectedFilters__remove:before,.filter__titleIcon:before,.content__zoomimg:before,.acc.open>.acc__header .acc__icon.icon-edit:before,.icon-zoomOut:before,.icon-zoomIn:before,.icon-youtube:before,.icon-warning:before,.icon-visibilityOff:before,.togglePassword.disabled:before,.filters:not(.filters--checked) .togglePassword.filtersClearAll:before,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.togglePassword:before,.filter:not(.filter--checked) .filtersLinks button.togglePassword:before,.icon-visibility:before,.togglePassword:before,.icon-vegetables:before,.icon-twitter:before,.icon-trolley:before,.icon-time:before,.icon-tickOutline:before,.icon-tickFilled:before,.icon-tick:before,.statusMessage--success:before,.icon-storeSevice1:before,.icon-store:before,.icon-shipping:before,.icon-settings:before,.icon-searchList:before,.icon-search:before,.field__inputSubmit:before,.icon-schedule:before,.icon-sausages:before,.icon-safePay:before,.icon-revertRight:before,.icon-revertLeft:before,.icon-restaurant:before,.icon-remove:before,.icon-refresh:before,.icon-readyMeals:before,.icon-print:before,.icon-plus:before,.icon-play:before,.icon-pinterest:before,.icon-pin:before,.icon-pet:before,.icon-party:before,.icon-parking:before,.icon-paper:before,.icon-orders:before,.icon-onePlusOne:before,.icon-nuts:before,.icon-newProduct:before,.icon-mylists-wreath:before,.icon-mylists-woman:before,.icon-mylists-winter:before,.icon-mylists-volleyball:before,.icon-mylists-umbrella:before,.icon-mylists-triangle:before,.icon-mylists-trailer:before,.icon-mylists-sun:before,.icon-mylists-store:before,.icon-mylists-star:before,.icon-mylists-sea:before,.icon-mylists-plane:before,.icon-mylists-mountain:before,.icon-mylists-mask:before,.icon-mylists-man:before,.icon-mylists-leaf:before,.icon-mylists-ktirio:before,.icon-mylists-ktiria:before,.icon-mylists-kite:before,.icon-mylists-house2:before,.icon-mylists-hospital:before,.icon-mylists-home:before,.icon-mylists-handHeart:before,.icon-mylists-grandpa:before,.icon-mylists-grandma:before,.icon-mylists-glasses:before,.icon-mylists-girl:before,.icon-mylists-gift:before,.icon-mylists-football:before,.icon-mylists-easterEgg:before,.icon-mylists-earth:before,.icon-mylists-dog:before,.icon-mylists-dinner:before,.icon-mylists-diamond:before,.icon-mylists-cupcake:before,.icon-mylists-cocktail:before,.icon-mylists-cloud:before,.icon-mylists-circle:before,.icon-mylists-championCup:before,.icon-mylists-champagne:before,.icon-mylists-cat:before,.icon-mylists-camp:before,.icon-mylists-boy:before,.icon-mylists-boat:before,.icon-mylists-block:before,.icon-mylists-birthdayHat:before,.icon-mylists-birthdaycake:before,.icon-mylists-bird:before,.icon-mylists-basketball:before,.icon-mylists-basket:before,.icon-mylists-barakia:before,.icon-mylists-balloon:before,.icon-mylists-baby:before,.icon-multipleSearch:before,.icon-minimarketFood:before,.icon-milkBeverages:before,.icon-mailCircle:before,.icon-mail:before,.icon-logout:before,.icon-location2:before,.icon-location:before,.icon-instagram:before,.icon-info:before,.icon-house:before,.icon-help:before,.icon-hearts:before,.icon-heart:before,.icon-frozen:before,.icon-freshMeat:before,.icon-form:before,.icon-fish:before,.icon-filters:before,.icon-fav:before,.icon-facemask:before,.icon-facebook:before,.icon-eggs:before,.icon-edit:before,.icon-download:before,.icon-directions2:before,.icon-directions:before,.icon-delete:before,.icon-cream:before,.icon-cosmetics:before,.icon-copy:before,.icon-cone:before,.icon-closeRoundedOutline:before,.icon-closeRounded:before,.icon-closeOutline:before,.icon-close:before,.field__inputClear:before,.statusMessage--error:before,.icon-cleaning:before,.icon-cheese:before,.icon-card:before,.icon-call:before,.icon-cafe:before,.icon-breakfast:before,.icon-bisquite:before,.icon-bio:before,.icon-beverages:before,.icon-bell:before,.icon-basketTimer:before,.icon-basket:before,.icon-bakery:before,.icon-babytoy:before,.icon-babyFoods:before,.icon-arrowUp:before,.goToTop:before,.icon-arrowRight32:before,.icon-arrowRight:before,.mainNav__link--hasChildren:before,.icon-arrowRight--circle:before,.icon-arrowRight--b:before,.icon-arrowLeft32:before,.icon-arrowLeft:before,.megamenu__back:before,.icon-arrowLeft--b:before,.icon-arrowDown:before,.icon-appetizers:before,.icon-alert:before,.icon-alcohol:before,.icon-addCircle:before,.icon-addCircle--b:before,.icon-add:before,.icon-account:before{font-family:"iconfont";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-display:swap;font-variant:normal;font-weight:normal;text-decoration:none;text-transform:none;display:inline-block;line-height:1;vertical-align:top}.icon-account:before{content:""}.icon-add:before{content:""}.icon-addCircle--b:before{content:""}.icon-addCircle:before{content:""}.icon-alcohol:before{content:""}.icon-alert:before{content:""}.icon-appetizers:before{content:""}.icon-arrowDown:before{content:""}.icon-arrowLeft--b:before{content:""}.icon-arrowLeft:before,.megamenu__back:before{content:""}.icon-arrowLeft32:before{content:""}.icon-arrowRight--b:before{content:""}.icon-arrowRight--circle:before{content:""}.icon-arrowRight:before,.mainNav__link--hasChildren:before{content:""}.icon-arrowRight32:before{content:""}.icon-arrowUp:before,.goToTop:before{content:""}.icon-babyFoods:before{content:""}.icon-babytoy:before{content:""}.icon-bakery:before{content:""}.icon-basket:before{content:""}.icon-basketTimer:before{content:""}.icon-bell:before{content:""}.icon-beverages:before{content:""}.icon-bio:before{content:""}.icon-bisquite:before{content:""}.icon-breakfast:before{content:""}.icon-cafe:before{content:""}.icon-call:before{content:""}.icon-card:before{content:""}.icon-cheese:before{content:""}.icon-cleaning:before{content:""}.icon-close:before,.field__inputClear:before,.statusMessage--error:before{content:""}.icon-closeOutline:before{content:""}.icon-closeRounded:before{content:""}.icon-closeRoundedOutline:before{content:""}.icon-cone:before{content:""}.icon-copy:before{content:""}.icon-cosmetics:before{content:""}.icon-cream:before{content:""}.icon-delete:before{content:""}.icon-directions:before{content:""}.icon-directions2:before{content:""}.icon-download:before{content:""}.icon-edit:before{content:""}.icon-eggs:before{content:""}.icon-facebook:before{content:""}.icon-facemask:before{content:""}.icon-fav:before{content:""}.icon-filters:before{content:""}.icon-fish:before{content:""}.icon-form:before{content:""}.icon-freshMeat:before{content:""}.icon-frozen:before{content:""}.icon-heart:before{content:""}.icon-hearts:before{content:""}.icon-help:before{content:""}.icon-house:before{content:""}.icon-info:before{content:""}.icon-instagram:before{content:""}.icon-location:before{content:""}.icon-location2:before{content:""}.icon-logout:before{content:""}.icon-mail:before{content:""}.icon-mailCircle:before{content:""}.icon-milkBeverages:before{content:""}.icon-minimarketFood:before{content:""}.icon-multipleSearch:before{content:""}.icon-mylists-baby:before{content:""}.icon-mylists-balloon:before{content:""}.icon-mylists-barakia:before{content:""}.icon-mylists-basket:before{content:""}.icon-mylists-basketball:before{content:""}.icon-mylists-bird:before{content:""}.icon-mylists-birthdaycake:before{content:""}.icon-mylists-birthdayHat:before{content:""}.icon-mylists-block:before{content:""}.icon-mylists-boat:before{content:""}.icon-mylists-boy:before{content:""}.icon-mylists-camp:before{content:""}.icon-mylists-cat:before{content:""}.icon-mylists-champagne:before{content:""}.icon-mylists-championCup:before{content:""}.icon-mylists-circle:before{content:""}.icon-mylists-cloud:before{content:""}.icon-mylists-cocktail:before{content:""}.icon-mylists-cupcake:before{content:""}.icon-mylists-diamond:before{content:""}.icon-mylists-dinner:before{content:""}.icon-mylists-dog:before{content:""}.icon-mylists-earth:before{content:""}.icon-mylists-easterEgg:before{content:""}.icon-mylists-football:before{content:""}.icon-mylists-gift:before{content:""}.icon-mylists-girl:before{content:""}.icon-mylists-glasses:before{content:""}.icon-mylists-grandma:before{content:""}.icon-mylists-grandpa:before{content:""}.icon-mylists-handHeart:before{content:""}.icon-mylists-home:before{content:""}.icon-mylists-hospital:before{content:""}.icon-mylists-house2:before{content:""}.icon-mylists-kite:before{content:""}.icon-mylists-ktiria:before{content:""}.icon-mylists-ktirio:before{content:""}.icon-mylists-leaf:before{content:""}.icon-mylists-man:before{content:""}.icon-mylists-mask:before{content:""}.icon-mylists-mountain:before{content:""}.icon-mylists-plane:before{content:""}.icon-mylists-sea:before{content:""}.icon-mylists-star:before{content:""}.icon-mylists-store:before{content:""}.icon-mylists-sun:before{content:""}.icon-mylists-trailer:before{content:""}.icon-mylists-triangle:before{content:""}.icon-mylists-umbrella:before{content:""}.icon-mylists-volleyball:before{content:""}.icon-mylists-winter:before{content:""}.icon-mylists-woman:before{content:""}.icon-mylists-wreath:before{content:""}.icon-newProduct:before{content:""}.icon-nuts:before{content:""}.icon-onePlusOne:before{content:""}.icon-orders:before{content:""}.icon-paper:before{content:""}.icon-parking:before{content:""}.icon-party:before{content:""}.icon-pet:before{content:""}.icon-pin:before{content:""}.icon-pinterest:before{content:""}.icon-play:before{content:""}.icon-plus:before{content:""}.icon-print:before{content:""}.icon-readyMeals:before{content:""}.icon-refresh:before{content:""}.icon-remove:before{content:""}.icon-restaurant:before{content:""}.icon-revertLeft:before{content:""}.icon-revertRight:before{content:""}.icon-safePay:before{content:""}.icon-sausages:before{content:""}.icon-schedule:before{content:""}.icon-search:before,.field__inputSubmit:before{content:""}.icon-searchList:before{content:""}.icon-settings:before{content:""}.icon-shipping:before{content:""}.icon-store:before{content:""}.icon-storeSevice1:before{content:""}.icon-tick:before,.statusMessage--success:before{content:""}.icon-tickFilled:before{content:""}.icon-tickOutline:before{content:""}.icon-time:before{content:""}.icon-trolley:before{content:""}.icon-twitter:before{content:""}.icon-vegetables:before{content:""}.icon-visibility:before,.togglePassword:before{content:""}.icon-visibilityOff:before,.togglePassword.disabled:before,.filters:not(.filters--checked) .togglePassword.filtersClearAll:before,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.togglePassword:before,.filter:not(.filter--checked) .filtersLinks button.togglePassword:before{content:""}.icon-warning:before{content:""}.icon-youtube:before{content:""}.icon-zoomIn:before{content:""}.icon-zoomOut:before{content:""}html{font-size:16px}body{color:#333;font:400 100%/1.4 "cfastystd",Trebuchet MS,sans-serif;line-height:1.3}[class^=icon-],[class*=" icon-"]{display:inline-block;line-height:1;vertical-align:top}input[type=submit]{cursor:pointer}input,textarea,button,select,a{-webkit-tap-highlight-color:transparent}figure{margin:0}img{max-width:100%}h1{font-size:2.875rem;font-weight:700;letter-spacing:-0.03em}h2{font-weight:700}h3{font-size:1.25rem;font-weight:700;letter-spacing:-0.02em;margin:0 0 32px}h4{font-size:1rem;font-weight:700;letter-spacing:-0.02em;margin:0 0 20px}h4:not(:first-child){margin-top:30px}b,strong,.bold{font-weight:bold}.text,p{color:#404040;font-size:1rem;line-height:1.47;margin:0 0 32px}.text a,p a{text-decoration:underline}.text--s{font-size:0.8125rem;margin:0}.text--b{color:#333;font-size:1rem;font-weight:bold}.text--pending{color:orange}a{text-decoration:none;transition:color 250ms ease}ul{list-style:none;margin:20px 0;padding:0}ul.listS{margin:0 0 24px}ul.listS li{font-size:0.8125rem;line-height:1.3}ul.listS li:after{top:4px}ul.listL{margin:24px 0 40px}ul.listL li{font-size:1.25rem;font-weight:500;letter-spacing:-0.03em;line-height:1.5;margin-bottom:20px;padding-left:28px}ul.listL li:after{background-color:#f47920;top:11px;width:8px;height:8px}ul.listCols{-webkit-column-count:5;-moz-column-count:5;column-count:5}ul.listCols li{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;padding-left:0;margin-bottom:20px}ul.listCols li:after{display:none}ul li{line-height:1.2;margin:0 0 3px;padding-left:12px;position:relative}ul li:after{width:5px;height:5px;background:#404040;border-radius:50%;content:"";display:block;left:0;position:absolute;top:6px}ul ol li{padding-left:0}ul ol li:after{content:none}ol{margin:20px 0;padding:0 0 0 20px}.list--orange li:after{background-color:#f47920}.address,.orderSum__col,address{color:#666;font-size:0.875rem;font-style:normal;line-height:1.8}.footer{--footerSpaceTop: 80px;background-color:#404040;margin-top:var(--footerSpaceTop)}.footer__main{display:flex;justify-content:space-between;padding:40px 0 48px}.footer--checkout .footer__main{padding:24px 0}.footer__col{--footerColSpace: 40px}.footer__title{color:#4d4d4d;font-size:0.9375rem;font-weight:600;margin:0 0 16px}.footer__list{margin:0}.footer__list li{padding-left:0;margin:0}.footer__list li:after{display:none}.footer__listItem{color:#8c8c8c;font-size:0.9375rem;line-height:1.2;margin:0}.footer__listLink{display:inline-block;padding:8px 0;vertical-align:top}.footer__apps{margin:24px 0 0}.footer__apps p{color:#8c8c8c;font-size:0.9375rem;margin:0 0 8px}.footer__apps figure{width:100%}.footer__apps figure picture{display:block;padding-top:calc(42 / 140 * 100%);position:relative;width:100%}.footer__apps figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.footer__appsInner{display:flex;flex-wrap:wrap}.footer__appsLink{margin-bottom:8px;width:140px}.footer__appsLink:not(:last-child){margin-right:8px}.footer__btm{align-items:center;border-top:1px solid rgba(255,255,255,.2);display:flex;justify-content:space-between;padding:16px 0}.footer__copy{color:#fff;font-weight:400;line-height:1;margin:0}.footer__atcom{line-height:1;padding:8px 0}.footer__atcom img{display:inline-block;vertical-align:top;width:160px;height:13px}.footer__text:last-child{margin-bottom:0}.wrapper{margin:0 auto;padding:0 var(--gridSpace);width:100%;max-width:calc(var(--wrapper) + var(--gridSpace)*2)}.wrapper--xxs{--wrapper: var(--wrapperXXS)}.wrapper--xs{--wrapper: var(--wrapperXS)}.wrapper--s{--wrapper: var(--wrapperS)}.wrapper--l{--wrapper: var(--wrapperL)}.wrapper--full{--wrapper: var(--wrapperFull)}.wrapper .wrapper{padding:0}.col{max-width:100%;flex-grow:1;flex-basis:0}.col-1{flex-basis:8.3333333333%;max-width:8.3333333333%}.col-2{flex-basis:16.6666666667%;max-width:16.6666666667%}.col-3{flex-basis:25%;max-width:25%}.col-4{flex-basis:33.3333333333%;max-width:33.3333333333%}.col-5{flex-basis:41.6666666667%;max-width:41.6666666667%}.col-6{flex-basis:50%;max-width:50%}.col-7{flex-basis:58.3333333333%;max-width:58.3333333333%}.col-8{flex-basis:66.6666666667%;max-width:66.6666666667%}.col-9{flex-basis:75%;max-width:75%}.col-10{flex-basis:83.3333333333%;max-width:83.3333333333%}.col-11{flex-basis:91.6666666667%;max-width:91.6666666667%}.col-12{flex-basis:100%;max-width:100%}.header{background-color:#fff;left:0;position:-webkit-sticky;position:sticky;top:var(--top);z-index:9;height:var(--headerHeight)}.header__top{padding:16px 0}.header__leftBlock{align-items:center;display:inline-flex}.header__topInner{align-items:center;display:flex;justify-content:space-between}.header--checkout .header__topInner{position:relative}.header__logo{flex-shrink:0;margin-right:auto;width:296px;height:38px}.header__logo h1{font-size:0;margin:0}.header__logo img{width:100%}.header--checkout .header__logo{left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.header__tools{align-items:center;display:flex}.header__tool{margin-left:20px}.mainContainer{display:grid;grid-template-areas:"header" "main" "footer";grid-template-columns:minmax(0, 1fr);grid-template-rows:auto 1fr auto;min-height:100vh}.header{grid-area:header}.main{grid-area:main}.footer{grid-area:footer}.mainLayout{--mainLayoutSpace: 32px}.mainLayout__content{padding:0 var(--mainLayoutSpace)}.mainLayout .wrapper{--gridSpace: 0px}.acc{border-bottom:1px solid #c2c2c2}.acc--border{border:1px solid #fff;border-radius:4px}.acc--border .acc__header{padding:16px}.acc--border .acc__content{padding:8px 16px 16px}.acc--box{background-color:#f5f5f5}.acc--box .acc__header{justify-content:space-between;padding:24px}.acc--box .acc__content{padding:8px 24px 24px}.acc--stripe{border:none;margin:24px 0}.acc--stripe .acc__header{background-color:#f2efe8;border-radius:8px;font-size:1.25rem;margin-bottom:24px;padding:16px}.acc--stripe .acc__header:before{font-size:1.5rem;margin-right:8px}.acc--disabled .acc__header{cursor:auto;pointer-events:none}.acc--disabled .acc__headerInnerTitle{pointer-events:all}.acc--disabled .acc__icon{display:none}.acc--disabled .acc__content{display:none}.acc--beige{border:none;margin-bottom:30px}.acc--beige .acc__header{font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.33;background-color:#f2efe8;border-radius:8px;padding:16px}.acc--beige .acc__content{padding:10px 30px}.acc--beige .acc__content .listCols{margin:0}.acc--colorStripe{border:none;margin-bottom:20px}.acc--colorStripe .acc__header{background-color:#fef8c6;border-radius:8px;color:#000;font-size:0.8125rem;font-weight:500;padding:12px}.acc--colorStripe .acc__icon{font-size:1.5rem}.acc--colorStripe .acc__content{padding:0}.acc__title{margin:0}.acc__content{padding:0 0 20px}.acc__content>.form:last-child{margin-bottom:0}.acc__content p:last-child{margin:0}.acc__content--md{max-width:822px}.acc__error{flex-basis:100%;flex-grow:1}.acc__error p{font-size:0.75rem;font-weight:400;letter-spacing:initial;line-height:1.33;color:#d91a32;margin:0}.acc__header{font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.33;align-items:center;color:#333;cursor:pointer;display:flex;justify-content:space-between;padding:24px 0}.acc--inline .acc__header{font-size:0.875rem}.acc__header>*{pointer-events:none}.acc__header--md{padding:16px 0}.acc__header--md .acc__title{font-size:1rem;font-weight:500;line-height:1.375}.acc__header--lg{padding:16px 0}.acc__header--lg .acc__title{font-size:1.25rem;line-height:1.5}.acc__headerInfo{font-weight:400;margin-left:4px}.acc__headerInner{display:flex;flex-grow:1}.acc__headerInnerTitle{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37;align-items:center;color:#333;display:flex;position:relative}.acc__headerInnerTitle [class^=icon-],.acc__headerInnerTitle [class*=" icon-"]{color:#838385;font-size:1.5rem;margin-right:10px}.acc__headerInnerTitle--info{flex-wrap:wrap;font-weight:400;margin-left:20px}.acc__headerInnerTitle--info .link,.acc__headerInnerTitle--info .text a,.text .acc__headerInnerTitle--info a,.acc__headerInnerTitle--info p a,p .acc__headerInnerTitle--info a{font-weight:500}.open .acc__headerInnerTitle--info{display:none}.acc__headerInnerTitle--sum{justify-content:flex-end;flex-grow:1;flex-shrink:0;font-weight:400;margin-left:auto;padding-left:20px;text-align:right}.open .acc__headerInnerTitle--sum{display:none}.acc__headerInnerTitle--large{font-size:1.375rem;font-weight:700;letter-spacing:-0.03em;line-height:1.36}.acc__icon{color:#838385;font-size:2rem;padding:0;-webkit-transform-origin:center;transform-origin:center;transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;transition:transform 250ms ease-out, -webkit-transform 250ms ease-out}.acc__icon--sml{font-size:1.5rem}.acc__icon.icon-edit{font-size:1.5rem}.acc__title+.acc__icon{margin-left:32px}.acc:not(.open) .acc__content{display:none}.acc.open>.acc__header .acc__icon:not(.icon-edit){-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.acc.open>.acc__header .acc__icon.icon-edit:before{content:""}.acc-section{margin-bottom:56px}.acc-section__title{border-bottom:1px solid #c2c2c2;font-size:1.375rem;font-weight:700;margin-bottom:0;padding-bottom:12px}.acc-section__title--pdlg{padding-bottom:40px}.article{border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.08);overflow:hidden;position:relative}.article__img figure{width:100%}.article__img figure picture{display:block;padding-top:calc(184 / 296 * 100%);position:relative;width:100%}.article__img figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.article__info{padding:20px}.article__date{font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.28;color:#838385}.article__dateWrap{display:inline-block;font-size:0;margin-bottom:13px}.article__dateWrap span:not(.pill){font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28}.article__dateWrap .pill{margin-left:12px;position:relative;-webkit-transform:translateY(-2px);transform:translateY(-2px)}.article__title{font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.33;color:#333;margin-bottom:8px}.article__text{font-size:1rem;font-weight:400;letter-spacing:-0.02em;line-height:1.5;color:#404040;margin-bottom:0;--maxLines: 4;line-clamp:var(--maxLines);display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:var(--maxLines);-webkit-box-orient:vertical}.article__text p:last-child{margin-bottom:0}.article__link{color:inherit}.article__link:before{content:""}.article--wide .article__img figure{width:100%}.article--wide .article__img figure picture{display:block;padding-top:calc(314 / 1258 * 100%);position:relative;width:100%}.article--wide .article__img figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.article--wide .article__date{margin-bottom:4px}.article--wide .article__title{font-size:1.625rem;font-weight:500;letter-spacing:-0.02em;line-height:1.38;margin-bottom:16px}.article--wide .article__info{padding:32px}.articleFeatured{margin-bottom:32px}.articleList{--productSpaceH: 20px;--productSpaceV: 20px;display:flex;justify-content:center;flex-wrap:wrap;gap:var(--productSpaceV) var(--productSpaceH)}.articleList .article{width:calc(25% - 3*var(--productSpaceH)/4)}.articleList .article--horizontal{width:100%}.articleList .swiper-slide .article{width:100%}.articleList--column{--productSpaceV: 32px;margin-bottom:32px}.articleList--contests{margin-bottom:60px;justify-content:flex-start}.articleDetails__date{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37}.articleDetails__dateWrap{align-items:center;color:#838385;display:inline-flex;margin-bottom:4px}.articleDetails__dateWrap span{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;margin-right:4px}.articleDetails__title{font-size:1.875rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2;margin:0;max-width:746px}.articleDetails__title:after{content:"";display:block;background-color:#f47920;width:54px;height:8px;margin:16px auto 16px 0}.autocomplete__googlelogo{margin:12px 18px 0 auto;width:93px;height:13px;text-align:right;display:block;background-image:url(../media/powered-by-google-on-white3.png);background-position:right;background-repeat:no-repeat;background-size:contain}.bnr{background-color:#404040;color:#fff;padding:22px 0}.bnr__inner{position:relative;display:flex;align-items:center}.bnr__icon{color:inherit;font-size:1.5rem}.bnr__close{font-size:1.5rem}.bnr__text{min-height:24px;display:flex;align-items:center;margin:0 16px 0 18px;flex-grow:1}.bnr p{font-size:0.8125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.15;color:inherit}.bnr p:last-of-type{margin-bottom:0}.breadcrumb__list{display:flex;list-style:none;margin:0;padding:0}.breadcrumb__item{color:#333;font-size:0.875rem;font-weight:500;letter-spacing:-0.02em;line-height:1.143;margin:2px 0;padding:0;position:relative}.breadcrumb__item--disabled{color:#a6a6a6;font-weight:400}.breadcrumb__item:after{display:none}.breadcrumb__itemLink{color:var(--buttonColor);font-weight:400;text-decoration:underline}.breadcrumb__itemLink:active{color:var(--buttonColorActive)}button{-webkit-appearance:none;-moz-appearance:none;background:transparent;border:none;margin:0}.button{align-items:center;background-color:var(--buttonColor);border:none;border-radius:8px;color:#fff;display:inline-flex;font-family:"cfastystd",Trebuchet MS,sans-serif;font-size:0.9375rem;font-weight:500;justify-content:center;letter-spacing:-0.03em;padding:8px 24px;transition:color 350ms ease,background-color 350ms ease;min-height:48px}.button .icon{font-size:1.5rem;margin-right:8px}.button:not(.disabled){cursor:pointer}.button:not(.disabled):active{background-color:var(--buttonColorActive)}.button.disabled,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.button,.filter:not(.filter--checked) .filtersLinks button.button,.filters:not(.filters--checked) .button.filtersClearAll{background-color:#ececec;color:#a6a6a6}.button--s{font-size:0.8125rem;letter-spacing:-0.02em;min-height:34px}.button--s .icon{margin:-3px 4px -3px 0}.button--border{background-color:transparent;border:1px solid var(--buttonColor);color:var(--buttonColor);transition:color 350ms ease,border-color 350ms ease}.button--border:not(.disabled):active{background:transparent;border-color:var(--buttonColorActive);color:var(--buttonColorActive)}.button--border.disabled,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.button--border,.filter:not(.filter--checked) .filtersLinks button.button--border,.filters:not(.filters--checked) .button--border.filtersClearAll{background:transparent;border-color:#d8d8d8;color:#a6a6a6}.button--full{width:100%}.button--alt{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;border-color:#c2c2c2;color:#333;display:flex;flex:1 1 auto;justify-content:space-between;padding:16px;transition:background-color 250ms ease-out}.button--alt:not(.disabled):active{background:#f2efe8;border-color:#c2c2c2;color:inherit}.button--alt:not(.disabled):active .icon{color:#f47920}.button--alt .icon{color:#f47920}.button--alt .icon:last-child{margin:0;margin-left:0}.iconButton,.selectedFilters__remove{color:var(--buttonColor);font-size:2rem;line-height:1;padding:0}.iconButton--dark{--buttonColor: #595959;--buttonColorHover: #838385}.iconButton--border{border:1px solid var(--buttonColor);border-radius:50%;font-size:1.5rem;padding:4px}.iconButton--border:not(.disabled):active{border-color:var(--buttonColorActive)}.iconButton--border.iconButton--s,.iconButton--border.selectedFilters__remove{padding:0}.iconButton--opacityBg{background:rgba(255,255,255,.6)}.iconButton--square{border-radius:4px}.iconButton--shadow{background-color:#fff;box-shadow:0px 6px 16px rgba(51,51,51,.15);border-radius:4px}.iconButton--xs{font-size:1rem;padding:8px}.iconButton--s,.selectedFilters__remove{font-size:1.5rem}.iconButton--b{font-size:1.75rem}.iconButton--xb{font-size:1.625rem;padding:8px}.iconButton:not(.disabled),.selectedFilters__remove:not(.disabled){cursor:pointer}.iconButton:not(.disabled):active,.selectedFilters__remove:not(.disabled):active{color:var(--buttonColorActive)}.link,.text a,p a{align-items:center;color:var(--buttonColor);display:inline-flex;font-family:"cfastystd",Trebuchet MS,sans-serif;font-size:0.9375rem;font-weight:500;letter-spacing:-0.03em;line-height:1;padding:0;transition:color 250ms ease}.link .icon,.text a .icon,p a .icon{font-size:1.5rem}.link .icon:first-child,.text a .icon:first-child,p a .icon:first-child{margin-right:4px}.link .icon:last-child,.text a .icon:last-child,p a .icon:last-child{margin-left:4px}.link:not(.disabled),.text a:not(.disabled),p a:not(.disabled){cursor:pointer}.link:not(.disabled):active,.text a:not(.disabled):active,p a:not(.disabled):active{color:var(--buttonColorActive)}.link.disabled,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.link,.filter:not(.filter--checked) .filtersLinks button.link,.filters:not(.filters--checked) .link.filtersClearAll,.text a.disabled,.text .filters:not(.filters--checked) a.filtersClearAll,.filters:not(.filters--checked) .text a.filtersClearAll,p a.disabled,p .filters:not(.filters--checked) a.filtersClearAll,.filters:not(.filters--checked) p a.filtersClearAll{color:#a6a6a6;cursor:default}.link--s,.minibasket .listTools .link,.minibasket .listTools .text a,.text .minibasket .listTools a,.minibasket .listTools p a,p .minibasket .listTools a{font-size:0.8125rem;letter-spacing:-0.02em}.link--m{font-size:0.875rem}.link--m .icon{font-size:1.25rem}.link--b{font-size:1rem;letter-spacing:-0.02em}.link--xb{font-size:1.375rem}.link--xb .icon{font-size:2rem}.link--underline{text-decoration:underline}.link--orangeIcon .icon{color:#f47920}.link--orange .icon{color:inherit}.loginBtn{align-items:center;color:#333;display:flex;position:relative}.loginBtn .iconButton,.loginBtn .selectedFilters__remove{margin-left:8px}.loginBtn .iconButton:after,.loginBtn .selectedFilters__remove:after{content:""}.cardRow{display:flex;align-items:center;position:relative;min-height:66px}.cardRow__logo{flex-shrink:0;font-size:0;margin-right:12px;width:36px}.cardRow__logo [class^=icon-],.cardRow__logo [class*=" icon-"]{font-size:2rem;color:#838385}.cardRow__logo img{width:100%;-o-object-fit:contain;object-fit:contain}.cardRow__info{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;display:flex;flex-flow:column;align-items:flex-start}.cardRow__status{font-size:0.8125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.15;color:#74b11f;display:none;margin-bottom:2px}.cardRow__msg{color:#d91a32;position:absolute;right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);max-width:130px}.cardRow__number{color:#333}.cardRow__expiration{color:#a6a6a6}.cardRow__add{font-size:0.9375rem;font-weight:500;letter-spacing:-0.03em;line-height:1.46;color:#333}.cardRow.disabled,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.cardRow,.filter:not(.filter--checked) .filtersLinks button.cardRow,.filters:not(.filters--checked) .cardRow.filtersClearAll{padding-right:130px}.cardRow.disabled .cardRow__logo,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.cardRow .cardRow__logo,.filter:not(.filter--checked) .filtersLinks button.cardRow .cardRow__logo,.filters:not(.filters--checked) .cardRow.filtersClearAll .cardRow__logo{opacity:.5}.cardRow.disabled .cardRow__number,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.cardRow .cardRow__number,.filter:not(.filter--checked) .filtersLinks button.cardRow .cardRow__number,.filters:not(.filters--checked) .cardRow.filtersClearAll .cardRow__number,.cardRow.disabled .cardRow__expiration,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.cardRow .cardRow__expiration,.filter:not(.filter--checked) .filtersLinks button.cardRow .cardRow__expiration,.filters:not(.filters--checked) .cardRow.filtersClearAll .cardRow__expiration{color:#a6a6a6}.catalogueList{--productSpaceH: 32px;--productSpaceV: 24px;display:flex;flex-wrap:wrap;gap:var(--productSpaceV) var(--productSpaceH)}.catalogueList .catalogue{width:calc(50% - 1*var(--productSpaceH)/2)}.catalogueList .catalogue--wide{width:100%}.catalogue{border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.08);overflow:hidden;position:relative}.catalogue__img figure{width:100%}.catalogue__img figure picture{display:block;padding-top:calc(463 / 617 * 100%);position:relative;width:100%}.catalogue__img figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.catalogue__info{padding:20px;text-align:center}.catalogue__title{font-size:1.25rem;font-weight:500;letter-spacing:-0.03em;line-height:1.5;color:#333;margin-bottom:4px}.catalogue__text{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;color:#333;margin-bottom:0}.catalogue__text p:last-child{margin-bottom:0}.catalogue__link{color:inherit}.catalogue__link:before{content:""}.icon-bakery:before{color:#a98848}.icon-vegetables:before{color:#8dc63f}.icon-fish:before{color:#91d1e5}.icon-freshMeat:before{color:#e59191}.icon-milkBeverages:before{color:#d6d0c6}.icon-cream:before{color:#f0b9c3}.icon-cheese:before{color:#efd57b}.icon-eggs:before{color:#cec0a8}.icon-sausages:before{color:#cec0a8}.icon-appetizers:before{color:#cec0a8}.icon-readyMeals:before{color:#8ebf86}.icon-frozen:before{color:#a8ccce}.icon-alcohol:before{color:#7c766b}.icon-beverages:before{color:#91d1e5}.icon-nuts:before{color:#bda57b}.icon-bisquite:before{color:#d2917c}.icon-breakfast:before{color:#a98848}.icon-babyFoods:before{color:#cdce89}.icon-minimarketFood:before{color:#cec0a8}.icon-pet:before{color:#6f6554}.icon-party:before{color:#e995b3}.icon-paper:before{color:#d6d5d5}.icon-cosmetics:before{color:#e589dc}.icon-cleaning:before{color:#a8ccce}.icon-house:before{color:#b1ddbd}.icon-house2:before{color:#337933}.icon-babytoy:before{color:#d378a9}.icon-bio:before{color:#25a131}.icon-facemask:before{color:#6bb3c2}.icon-newProduct:before{color:#ea0c00}.icon-onePlusOne:before{color:#333}.icon-exclusive:before{background:url(../media/exclusive.svg) no-repeat scroll center;background-size:contain;content:""}.icon-aplesPrakseis:before{background:url(../media/badges/aplesprakseislogo.svg) no-repeat scroll center;background-size:contain;content:""}.icon-fav:before{color:#d91a32}.icon-addCircle{color:#f47920}.icon-mylists-xmas:before{background-image:url(../media/icon-mylists-xmas.svg)}.icon-mylists-tennis:before{background-image:url(../media/icon-mylists-tennis.svg)}.icon-mylists-xmas:before,.icon-mylists-tennis:before{background-position:center;background-repeat:no-repeat;background-size:100%;content:""}.icon-mylists-woman:before{color:#da5a71}.icon-mylists-man:before{color:#435b7e}.icon-mylists-boy:before{color:#bc844f}.icon-mylists-girl:before{color:#d218a4}.icon-mylists-grandma:before{color:#ae1829}.icon-mylists-grandpa:before{color:#6c1a26}.icon-mylists-baby:before{color:#f5a3b1}.icon-mylists-gift:before{color:#8dc63f}.icon-mylists-football:before{color:#333}.icon-mylists-winter:before{color:#a6a6a6}.icon-mylists-champagne:before{color:#527a2a}.icon-mylists-mask:before{color:#cc1836}.icon-mylists-plane:before{color:#1e2843}.icon-mylists-sea:before{color:#4e8ac1}.icon-mylists-wreath:before{color:#427837}.icon-mylists-earth:before{color:#3a8184}.icon-mylists-balloon:before{color:#4f98cd}.icon-mylists-circle:before{color:#ff641e}.icon-mylists-barakia:before{color:#ffa222}.icon-mylists-basket:before{color:#731a25}.icon-mylists-basketball:before{color:#d43d11}.icon-mylists-bird:before{color:#f5ad47}.icon-mylists-birthdaycake:before{color:#ff6aeb}.icon-mylists-birthdayHat:before{color:#ffa222}.icon-mylists-block:before{color:#e75a70}.icon-mylists-boat:before{color:#1d8185}.icon-mylists-camp:before{color:#42b800}.icon-mylists-cat:before{color:#f7671d}.icon-mylists-championCup:before{color:#c39649}.icon-mylists-cloud:before{color:#3d5a80}.icon-mylists-cocktail:before{color:#63e2a8}.icon-mylists-cupcake:before{color:#ae7e5c}.icon-mylists-diamond:before{color:#ffa222}.icon-mylists-dinner:before{color:#f7411d}.icon-mylists-dog:before{color:#c38649}.icon-mylists-easterEgg:before{color:#b9b965}.icon-mylists-glasses:before{color:#bcaf49}.icon-mylists-handHeart:before{color:#da1a32}.icon-mylists-hospital:before{color:#3d5a80}.icon-mylists-home:before{color:#333}.icon-mylists-house2:before{color:#337933}.icon-mylists-kite:before{color:#e25b00}.icon-mylists-ktiria:before{color:#9a00b2}.icon-mylists-ktirio:before{color:#d4ab79}.icon-mylists-leaf:before{color:#d63900}.icon-mylists-mountain:before{color:#8e4825}.icon-mylists-star:before{color:#f93}.icon-mylists-store:before{color:#ced475}.icon-mylists-sun:before{color:#ffac30}.icon-mylists-trailer:before{color:#f7411d}.icon-mylists-triangle:before{color:#5f9809}.icon-mylists-volleyball:before{color:#ffa222}.icon-mylists-umbrella:before{color:#6999ac}.collectionBox{background:url(../media/wood.png) repeat scroll center;border-radius:8px;overflow:hidden;position:relative}.collectionBox figure{width:100%}.collectionBox figure picture{display:block;padding-top:calc(205 / 300 * 100%);position:relative;width:100%}.collectionBox figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.collectionBox__title{color:#fff;font-size:1.375rem;font-weight:700;left:0;letter-spacing:-0.03em;padding:0 16px;position:absolute;text-align:center;top:16px;width:100%}.content__zoomimg{max-width:317px;width:100%;border:solid 1px #c2c2c2;cursor:pointer;position:relative;margin:23px 0}.content__zoomimg picture{display:block;padding-top:calc(181 / 317 * 100%);position:relative;width:100%}.content__zoomimg img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.content__zoomimg:before{content:""}.content__zoomimg:before{width:56px;height:56px;border-radius:50%;position:absolute;top:50%;left:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:2rem;background:rgba(51,51,51,.6);z-index:2;margin:calc(-1 * 56px /2) 0 0 calc(-1 * 56px /2)}.content__zoomimg img{-o-object-fit:cover;object-fit:cover}.contestBnr{align-items:flex-start;color:#333;display:flex;flex-flow:column;justify-content:center;padding:40px 24px;position:relative;padding:64px;min-height:232px}.contestBnr:after{content:"";background-color:#f7f5f0;border-radius:8px;z-index:-2}.contestBnr h3{font-size:1.5rem;font-weight:700;letter-spacing:-0.02em;line-height:1.16;margin-bottom:10px}.contestBnr p:last-of-type{margin-bottom:0}.contestBnr__illustration{bottom:0;position:absolute;right:0;top:0;z-index:-1}.contestBnr__illustration--mob{top:auto}.deliveryFlowNav{position:absolute;top:24px}.deliveryFlow .modal__wrap{padding-top:104px}.deliveryTypes{display:none;margin-inline:auto}.deliveryTypes.typeinformation{padding:0;max-width:760px}.deliveryTypes .field{margin:0;width:100%}.deliveryTypes--active{display:block}.radiobuttons--deliveryType{gap:24px;display:flex;justify-content:center;margin:32px auto 56px}.radiobuttons--deliveryType .radiobutton{width:50%}.radiobutton--deliveryType{display:inline-flex;flex-direction:column;justify-content:space-between}.field .radiobutton--deliveryType.radiobutton:not(:first-child){margin-top:0}.field .radiobutton--deliveryType.radiobutton:not(:last-child){margin-bottom:0}.radiobutton--deliveryType .radiobutton__label{font-size:1.25rem;font-weight:500;text-align:center}.radiobutton--deliveryType .radiobutton__label b{font-weight:500}.radiobutton--deliveryType .radiobutton__text{display:block;line-height:1.5}.radiobutton--deliveryType .radiobutton__border{border-color:#f2efe8;border-width:2px}.radiobutton--deliveryType .radiobutton__border:after{background:url(../media/tickFilled.svg) no-repeat scroll center;background-size:contain;content:"";opacity:0;position:absolute;right:12px;top:12px;transition:opacity 250ms ease-in-out;width:40px;height:40px}.radiobutton--deliveryType .radiobutton__input:not([type=hidden]){cursor:pointer;width:100%;height:100%}.radiobutton--deliveryType .radiobutton__input:not([type=hidden]):checked~.radiobutton__border{border-color:#74b11f}.radiobutton--deliveryType .radiobutton__input:not([type=hidden]):checked~.radiobutton__border:after{opacity:1}.radiobutton--deliveryType .icon{background-position:center;background-repeat:no-repeat;background-size:auto 100%;display:block;margin:16px auto;height:64px}.radiobutton--deliveryType .icon.shipping{background-image:url(../media/delivery.svg)}.radiobutton--deliveryType .icon.store{background-image:url(../media/pickup.svg)}.deliveryTypeInfo ul{margin:0 20px}.deliveryTypeInfo ul li:last-child{margin:0}.deliveryTypeInfo__sum{align-items:center;display:flex;flex-direction:column;text-align:center}.deliveryTypeInfo__sum p{color:#333;font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.285;margin-bottom:8px}.deliveryTypeInfo__link{color:var(--buttonColor);font-size:0.875rem;position:relative;z-index:2;text-decoration:underline}.deliveryTypeInfo__link:not(:last-child){margin-bottom:4px}.deliveryTypeInfo__link:active{color:var(--buttonColorActive)}.emptyContent{display:grid;grid-template-columns:88px 1fr;grid-template-areas:"icon text" "icon buttons";grid-column-gap:24px;grid-row-gap:16px;margin:40px 0}.minibasket .emptyContent{grid-template-areas:"icon text" "buttons buttons"}.emptyContent:not(:last-child){border-bottom:1px solid #fff}.emptyContent__img{grid-area:icon;color:#e6e6e6;font-size:5.5rem;line-height:1}.emptyContent__text{grid-area:text}.emptyContent__text p{margin-bottom:8px}.emptyContent__btns{display:flex;grid-area:buttons}.emptyContent__btns .button{margin-top:8px;margin-bottom:8px}.emptyContent__btns .button:not(:last-child){margin-right:8px}.emptyContent__btns .button:not(:first-child){margin-left:8px}.expandText__main{overflow:hidden;position:relative;max-height:96px}.expandText__main:after{background:linear-gradient(to top, white 0, rgba(255, 255, 255, 0) 100%);bottom:0;content:"";pointer-events:none;position:absolute;transition:opacity 250ms ease-in-out;width:100%;height:64px}.expandText:not(.open) .expandText__buttonTextLess{display:none}.expandText.open .expandText__main{max-height:inherit}.expandText.open .expandText__main:after{opacity:0}.expandText.open .expandText__buttonTextMore{display:none}.filters--checked .filters__mobButton:after{background-color:#f47920;border-radius:50%;color:#fff;content:attr(data-activefilters);display:inline-block;font-size:0.8125rem;font-weight:bold;line-height:23px;text-align:center;width:22px;height:22px}.filters{--mobFiltersTop: 0;--mobFilterTopBar: 56px;--mobFilterTopBarSpace: 24px;--filtersSpace: 16px;--filterItemSpaceBtm: 16px;--mobFilterBottomBar: 80px;align-items:flex-start;background-color:#f2efe8;border-radius:3px;display:flex;margin-bottom:24px;padding:12px 16px}.filters__titleWrap{position:relative}.filters__title{font-size:0.875rem;font-weight:500;margin:0}.filters__title:not(:first-child){margin:0}.filters__mobButtonText{font-size:0.9375rem;font-weight:500;letter-spacing:-0.03em;line-height:1.46;color:#333;margin-left:8px}.filters .selectInline{margin-left:auto}.filters--listResults .filters__mobButton:after{position:relative;right:-6px;top:-1px}.filter{--scrollListHeight: 304px}.filter__title{cursor:pointer;font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;margin:0;padding:6px 24px 6px 0;position:relative;white-space:nowrap;z-index:1}.filter__titleIcon{color:#838385;font-size:1.25rem;position:absolute;pointer-events:none;right:0;top:0}.filter__titleIcon:before{content:""}.filter__titleIcon:before{transition:-webkit-transform 200ms ease-out;transition:transform 200ms ease-out;transition:transform 200ms ease-out, -webkit-transform 200ms ease-out;-webkit-transform-origin:center;transform-origin:center;vertical-align:middle}.filter:not(.filter--closed) .filter__titleIcon:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.filter--closed .filter__content{display:none}.filter__list.scrollbarShadow .filter__item:last-child{margin-bottom:0}.filter__list--bottom:after{opacity:0}.filter__list--moreList{--searchHeight: 80px}.filter__list--moreList .filter__listScroll{max-height:var(--scrollListHeight)}.initialized~.filter__showAll{visibility:hidden}.filter__item:not(:last-child){margin-bottom:var(--filterItemSpaceBtm)}.filter__no{margin-left:2px}.filter__more.active .filter__moreText--more{display:none}.filter__more:not(.active) .filter__moreText--less{display:none}.filter__letter{font-weight:bold;margin-bottom:8px}.filters:not(.filters--checked) .filtersClearAll{pointer-events:none}.filtersLinks{align-items:center;display:flex;flex-direction:column}.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button,.filter:not(.filter--checked) .filtersLinks button{pointer-events:none}.categoriesList{margin:0;padding-left:16px}.categoriesList li{padding-left:0;margin:0}.categoriesList li:after{display:none}.categoriesList .categoriesList{margin-top:12px;padding-right:12px}.categoriesList .acc__header{justify-content:space-between}.categoriesList__item:last-child{margin-bottom:0}.categoriesList__item--level1,.categoriesList__item--level0{font-weight:bold}.categoriesList__item--level1{font-size:0.875rem}.categoriesList__item--level2{font-size:0.8125rem;font-weight:normal}.categoriesList__item a:not(.link){color:inherit}.categoriesList__item a.active{color:#333}.categoriesList__item>a,.categoriesList__item>.acc__header{color:gray;transition:color 250ms ease}.selectedFilters{margin-bottom:24px;margin-top:-16px}.selectedFilters:not(.active){display:none}.selectedFilters__list{margin:0}.selectedFilters__list li{padding-left:0;margin:0}.selectedFilters__list li:after{display:none}.selectedFilters__list li{padding-left:8px}.selectedFilters__item{align-items:center;color:#595959;display:inline-flex;font-size:0.875rem;line-height:1;margin:0;padding:8px}.selectedFilters__remove{margin:-4px -4px -4px 4px}.selectedFilters__remove:before{content:""}:root{--inputPlaceholderColor: #A6A6A6;--labelSpace: 32px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input:-moz-placeholder-shown{text-overflow:ellipsis}input:-ms-input-placeholder{text-overflow:ellipsis}input:placeholder-shown{text-overflow:ellipsis}::-webkit-input-placeholder{color:var(--inputPlaceholderColor);line-height:1.3}::-moz-placeholder{color:var(--inputPlaceholderColor);line-height:1.3}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px #fff inset !important}.radiobutton--onlyColor.disabled .radiobutton__icon,.filters:not(.filters--checked) .radiobutton--onlyColor.filtersClearAll .radiobutton__icon,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton--onlyColor .radiobutton__icon,.filter:not(.filter--checked) .filtersLinks button.radiobutton--onlyColor .radiobutton__icon,.radiobutton--onlyIcon.disabled .radiobutton__icon,.filters:not(.filters--checked) .radiobutton--onlyIcon.filtersClearAll .radiobutton__icon,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton--onlyIcon .radiobutton__icon,.filter:not(.filter--checked) .filtersLinks button.radiobutton--onlyIcon .radiobutton__icon,.checkbox.disabled,.filters:not(.filters--checked) .checkbox.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.checkbox,.filter:not(.filter--checked) .filtersLinks button.checkbox,.radiobutton.disabled,.filters:not(.filters--checked) .radiobutton.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton,.filter:not(.filter--checked) .filtersLinks button.radiobutton{opacity:.5}.checkbox,.radiobutton{position:relative}.checkbox.disabled label,.filters:not(.filters--checked) .checkbox.filtersClearAll label,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.checkbox label,.filter:not(.filter--checked) .filtersLinks button.checkbox label,.radiobutton.disabled label,.filters:not(.filters--checked) .radiobutton.filtersClearAll label,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton label,.filter:not(.filter--checked) .filtersLinks button.radiobutton label{cursor:default}.checkbox__input:not([type=hidden]),.radiobutton__input:not([type=hidden]){left:0;opacity:0;position:absolute;top:0;width:0;height:0}.checkbox__label,.radiobutton__label{color:#333;cursor:pointer;display:block;font-size:0.9375rem;font-weight:400;line-height:1.6;padding:0 0 0 var(--labelSpace);position:relative;z-index:2}.checkbox__label~.field-validation-error,.radiobutton__label~.field-validation-error{margin-top:4px;padding-left:var(--labelSpace)}.checkbox__icon,.radiobutton__icon{background-color:#fff;border:1px solid #838385;left:0;line-height:22px;position:absolute;text-align:center;top:0;width:24px;height:24px}.checkbox__checkedText,.radiobutton__checkedText{display:none;margin:8px 0 0}.checkbox__text,.radiobutton__text{position:relative;transition:color 250ms ease;z-index:1}.field .checkbox:not(:first-child),.field .radiobutton:not(:first-child){margin-top:var(--checkboxRadioSpace)}.field .checkbox:not(:last-child),.field .radiobutton:not(:last-child){margin-bottom:var(--checkboxRadioSpace)}.checkbox--button.disabled:after,.filters:not(.filters--checked) .checkbox--button.filtersClearAll:after,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.checkbox--button:after,.filter:not(.filter--checked) .filtersLinks button.checkbox--button:after,.radiobutton--button.disabled:after,.filters:not(.filters--checked) .radiobutton--button.filtersClearAll:after,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton--button:after,.filter:not(.filter--checked) .filtersLinks button.radiobutton--button:after{background-color:#b3b3b3;content:"";left:0;position:absolute;-webkit-transform:rotate(-38deg);transform:rotate(-38deg);-webkit-transform-origin:center;transform-origin:center;top:50%;width:100%;height:1px}.radiobutton--box{--radioBorderSpace: 20px}.radiobutton--box.disabled .radiobutton__label,.filters:not(.filters--checked) .radiobutton--box.filtersClearAll .radiobutton__label,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton--box .radiobutton__label,.filter:not(.filter--checked) .filtersLinks button.radiobutton--box .radiobutton__label{pointer-events:none}.radiobutton--box .radiobutton__border{transition:background-color 250ms ease-out;z-index:-1}.radiobutton--box .radiobutton__icon{left:var(--radioBorderSpace);top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:background-color 250ms ease-out}.radiobutton--box .radiobutton__icon:after{content:""}.radiobutton--box .radiobutton__icon:before{display:none}.radiobutton--box .radiobutton__icon:after{opacity:0;position:absolute;top:50%;color:#fff;font-size:0.875rem;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.radiobutton--box .radiobutton__action{position:absolute;right:var(--radioBorderSpace);top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:3;font-size:1.5rem}.radiobutton--box .radiobutton__action+.radiobutton__action{right:calc(var(--radioBorderSpace) + 24px + 8px)}.radiobutton--box .radiobutton__label{display:flex;flex-flow:column;justify-content:center;min-height:84px;padding-top:var(--radioBorderSpace);padding-right:calc(var(--radioBorderSpace) + 24px * 2 + 8px + 10px);padding-bottom:var(--radioBorderSpace);padding-left:calc(var(--radioBorderSpace) + var(--labelSpace) + 4px)}.radiobutton--box .radiobutton__labelTag{font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.28;margin-bottom:2px;padding-right:32px}.radiobutton--box .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon{background-color:#74b11f;border-color:#74b11f}.radiobutton--box .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon:after{opacity:1}.radiobutton--box .radiobutton__input:not([type=hidden]):checked~.radiobutton__border{border-color:#74b11f;background-color:#f2efe8}.radiobutton--box .radiobutton__input:not([type=hidden]):checked~.radiobutton__label{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37}.radiobutton--box .radiobutton__input:not([type=hidden]):checked~.radiobutton__label .radiobutton__labelTag{display:inline-block}.radiobutton--box .radiobutton__input:not([type=hidden]):checked~.radiobutton__label .cardRow__status{display:inline-block}.radiobutton--box .form{padding-top:24px}.radiobutton--readonly .radiobutton__icon{display:none}.radiobutton--readonly .radiobutton__label{padding:var(--radioBorderSpace);padding-left:var(--radioBorderSpace)}.radiobutton--readonly .radiobutton__action{font-size:0.9375rem;font-weight:500;letter-spacing:-0.03em;line-height:1.46;bottom:0;right:0;-webkit-transform:translateY(calc(100% + 12px));transform:translateY(calc(100% + 12px));top:auto}.radiobutton--readonly .radiobutton__input:not([type=hidden]):checked~.radiobutton__border{border-color:#c2c2c2;background-color:initial}.radiobutton--readonly .radiobutton__input:not([type=hidden]):checked~.radiobutton__label .radiobutton__labelTag{color:#838385}.radiobutton--check .radiobutton__border{z-index:-1}.radiobutton--check .radiobutton__icon{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:background-color 250ms ease-out}.radiobutton--check .radiobutton__icon:after{content:""}.radiobutton--check .radiobutton__icon:before{display:none}.radiobutton--check .radiobutton__icon:after{left:50%;opacity:0;position:absolute;top:50%;color:#fff;font-size:0.875rem;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.radiobutton--check .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon{background-color:#74b11f;border-color:#74b11f}.radiobutton--check .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon:after{opacity:1}.radiobutton--check .radiobutton__input:not([type=hidden]):checked~.radiobutton__border{border-color:#74b11f;background-color:#f2efe8}.radiobutton--onlyColor.disabled,.filters:not(.filters--checked) .radiobutton--onlyColor.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton--onlyColor,.filter:not(.filter--checked) .filtersLinks button.radiobutton--onlyColor,.radiobutton--onlyIcon.disabled,.filters:not(.filters--checked) .radiobutton--onlyIcon.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.radiobutton--onlyIcon,.filter:not(.filter--checked) .filtersLinks button.radiobutton--onlyIcon{opacity:1}.radiobutton--onlyColor .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon,.radiobutton--onlyIcon .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon{border-color:#74b11f;border-width:2px}.radiobutton--onlyColor .radiobutton__label,.radiobutton--onlyIcon .radiobutton__label{padding:0}.radiobutton--onlyColor .radiobutton__icon,.radiobutton--onlyIcon .radiobutton__icon{overflow:hidden;position:relative}.radiobutton--onlyColor .radiobutton__icon:before,.radiobutton--onlyIcon .radiobutton__icon:before{display:none}.radiobutton--onlyColor .radiobutton__icon{border:1px solid #c2c2c2;border-radius:8px;display:block;width:32px;height:32px}.radiobutton--onlyIcon .radiobutton__icon{align-items:center;border-color:transparent;border-radius:6px;display:flex;justify-content:center;width:48px;height:48px}.radiobutton--onlyIcon img{display:inline-block;vertical-align:top}.radiobutton--onlyIcon .icon{font-size:2rem}.radiobutton--onlyIcon .icon:before{width:32px;height:32px}.radiobutton--tab{flex:1;height:56px}.radiobutton--tab .icon{font-size:1.5rem;margin-right:8px}.radiobutton__border{border:1px solid #c2c2c2;border-radius:8px;pointer-events:none;transition:border-color 250ms ease-out}.radiobutton__input:not([type=hidden]):checked~.radiobutton__icon{border-color:#838385}.radiobutton__input:not([type=hidden]):checked~.radiobutton__icon:before{opacity:1}.radiobutton--button .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon{background-color:#838385}.radiobutton--button .radiobutton__input:not([type=hidden]):checked~.radiobutton__text{color:#fff}.radiobutton--tab .radiobutton__input:not([type=hidden]):checked~.radiobutton__text{color:#333}.radiobutton__input:not([type=hidden]):checked~.radiobutton__border{border-color:#c2c2c2}.radiobutton__input:not([type=hidden]):checked~.radiobutton__checkedText{display:block}.radiobutton__icon{border-radius:50%}.radiobutton__icon:before{background-color:#f47920;border-radius:50%;content:"";left:50%;opacity:0;position:absolute;top:50%;transition:opacity 250ms ease-in-out;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:10px;height:10px}.radiobutton--button .radiobutton__icon{border-radius:0;width:100%;height:100%}.radiobutton--button .radiobutton__icon:before{display:none}.radiobutton__labelSub{font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.23}.radiobutton__labelTag{color:#74b11f;display:none;font-weight:bold;margin-bottom:4px}.radiobutton--tab .radiobutton__label,.radiobutton--button .radiobutton__label{align-items:center;display:flex;justify-content:center;padding:8px;height:100%}.radiobutton--tab .radiobutton__label{font-size:1rem}.radiobutton--button .radiobutton__label{min-height:44px}.checkbox__input:not([type=hidden]):checked~.checkbox__icon{background-color:#f47920;border-color:#f47920}.checkbox__input:not([type=hidden]):checked~.checkbox__icon:before{opacity:1}.checkbox--button .checkbox__input:not([type=hidden]):checked~.checkbox__icon{background-color:#333}.checkbox--button .checkbox__input:not([type=hidden]):checked~.checkbox__text{color:#fff}.checkbox__icon{color:#fff;border-radius:3px;font-size:1rem;transition:background-color 250ms ease-out}.checkbox__icon:before{content:""}.checkbox__icon:before{line-height:22px;opacity:0;transition:opacity 250ms ease-in-out}.checkbox--button .checkbox__icon{width:100%;height:100%}.checkbox--button .checkbox__icon:before{display:none}.checkbox--button .checkbox__label{align-items:center;display:flex;justify-content:center;padding:8px;height:100%;min-height:44px}.statusMessage{font-size:0.875rem;display:none;line-height:1.3;margin:4px 0 16px;padding-left:24px;position:relative}.statusMessage:before{left:0;position:absolute;top:0}.statusMessage--success{color:#74b11f}.statusMessage--success.active,.newsletter__field--success .statusMessage--success{display:block}.statusMessage--error{color:#d91a32}.statusMessage--error.active,.newsletter__field--error .statusMessage--error{display:block}.select{position:relative;width:100%}.select--open{z-index:3}.select--open.select--card .select__button{border-color:var(--inputBorderColor);border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.select__main{position:relative}.select__button{cursor:pointer;padding-right:32px;position:relative;text-align:left;white-space:nowrap}.select__button:after{content:""}.select__button::after{font-size:1rem;margin-top:-8px;position:absolute;right:8px;top:50%;-webkit-transform-origin:center;transform-origin:center;transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;transition:transform 250ms ease-out, -webkit-transform 250ms ease-out}.select--open .select__button::after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.select__placeholder{color:var(--inputPlaceholderColor);white-space:nowrap}.select__listWrap,.autocomplete{background-color:#fff;display:none;left:0;margin-top:12px;padding:12px 0;position:absolute;top:100%;width:100%;z-index:1}.select__list,.autocomplete__list{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;list-style:none;margin:0;padding:0;max-height:224px}.select__list::-webkit-scrollbar,.autocomplete__list::-webkit-scrollbar{width:6px;height:6px}.select__list::-webkit-scrollbar-thumb,.autocomplete__list::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.select__list::-webkit-scrollbar-thumb:hover,.autocomplete__list::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.select__list::-webkit-scrollbar-thumb:active,.autocomplete__list::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.select__list::-webkit-scrollbar-track,.autocomplete__list::-webkit-scrollbar-track{background:transparent}.select__option,.autocomplete__option{--optionPadding: 12px;color:#333;cursor:pointer;font-size:0.9375rem;letter-spacing:-0.02em;line-height:1.4;margin:0;padding:12px;transition:color 250ms ease,background-color 250ms ease-out}.select__option:before,.autocomplete__option:before{content:"";display:block;background-color:#ececec;position:absolute;bottom:-1px;right:auto;left:auto;width:calc(100% - var(--optionPadding)*2);height:1px}.select__option:after,.autocomplete__option:after{display:none}.select__option.selected,.selected.autocomplete__option{background-color:#ececec}.select__option:not(.selected):active,.autocomplete__option:not(.selected):active{background-color:#ececec}.select__option.disabled,.disabled.autocomplete__option,.filters:not(.filters--checked) .select__option.filtersClearAll,.filters:not(.filters--checked) .autocomplete__option.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.select__option,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.autocomplete__option,.filter:not(.filter--checked) .filtersLinks button.select__option,.filter:not(.filter--checked) .filtersLinks button.autocomplete__option{pointer-events:none}.select--card .select__button{height:auto;padding:14px}.select--card .select__list,.select--card .autocomplete__list{max-height:274px}.select--card .select__listWrap,.select--card .autocomplete{border-top:0;border-top-right-radius:0;border-top-left-radius:0;margin-top:0;padding:0;position:static}.select--card .select__option,.select--card .autocomplete__option{border-top:1px solid #ececec}.select--card .select__option:last-child,.select--card .autocomplete__option:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.select--card .select__option:not(.selected):active,.select--card .autocomplete__option:not(.selected):active{color:var(--buttonColorActive)}.selectInline{align-items:baseline;display:inline-flex;position:relative}.selectInline__label{color:#333;font-size:0.875rem;font-weight:500;position:relative;z-index:4}.selectInline .select,.selectInline .select__main{position:static}.selectInline .select__button{border:none;padding-left:4px;z-index:2;height:auto}.selectInline .select__listWrap,.selectInline .autocomplete{border-radius:6px;box-shadow:0px 6px 16px rgba(51,51,51,.15);left:auto;margin:0;padding:56px 0 16px;right:-16px;top:-16px;width:calc(100% + 40px)}.textarea__field{display:block;resize:none;height:136px}.textarea__field ::-webkit-input-placeholder{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47}.textarea__field ::-moz-placeholder{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47}.textarea--medium .textarea__field{height:80px}.textarea--short .textarea__field{height:48px}.toggle{line-height:1.35;padding:2px 0 2px calc(44px + 16px)}.toggle__label{color:#999;display:block;font-size:0.875rem;line-height:1.4;transition:color 250ms ease}.toggle__input{cursor:pointer;left:0;opacity:0;position:absolute;top:0;z-index:2;width:44px;height:24px}.toggle__input:checked~.toggle__control{background-color:#fff;-webkit-transform:translateX(100%);transform:translateX(100%)}.toggle__input:checked~.toggle__bg{background-color:#333}.toggle__input:checked~.toggle__label{color:#333}.toggle__input:disabled{cursor:default}.toggle__input:disabled~.toggle__bg{background-color:#e6e6e6}.toggle__input:disabled~.toggle__control{background-color:#fff}.toggle__bg{background-color:#999;border-radius:100px;left:0;position:absolute;transition:background-color 250ms ease-out;top:0;width:44px;height:24px}.toggle__control{background-color:#e6e6e6;border-radius:50%;left:2px;position:absolute;top:2px;transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;transition:transform 250ms ease-out, -webkit-transform 250ms ease-out;width:calc(44px/2 - 2px);height:calc(24px - 2px*2)}.tabToggle__tabs{background-color:#fff;border-radius:100px;display:flex;margin:0;padding:2px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-width:160px;height:42px}.tabToggle__tabs:before{background-color:#333;border-radius:100px;content:"";left:2px;position:absolute;top:2px;transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;transition:transform 250ms ease-out, -webkit-transform 250ms ease-out;width:calc(50% - 2px);height:calc(100% - 2px * 2)}.tabToggle__tabs.slide:before{-webkit-transform:translateX(100%);transform:translateX(100%)}.tabToggle__tab{color:#838385;cursor:pointer;flex:1;font-size:0.9375rem;letter-spacing:-0.02em;margin:0;text-align:center;padding:10px 8px;transition:color 250ms ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabToggle__tab:after{display:none}.tabToggle__tab.active{color:#fff}[data-tabToggle-content]{display:none}[data-tabToggle-content].active{display:block}fieldset{border:none;margin:0;padding:0}.formWrap--center{text-align:center}.formWrap+.formWrap{margin-top:var(--fieldRowSpace)}.form{--formMaxWidth: 820px;margin-bottom:40px}.form--s{--formMaxWidth: 496px}.form--full{--formMaxWidth: 100%}.formWrap--center .form:not(.form--col){display:inline-block;text-align:left}.formWrap--center .form.form--col{display:inline-flex}.form--center{margin-inline:auto}.form--col{align-items:flex-start;display:flex;flex-wrap:wrap;position:relative}.form--address{min-height:400px}.form__title{border-bottom:solid 1px #c2c2c2;margin-bottom:40px;padding-bottom:16px;font-size:1rem;font-weight:500}.form__title:not(:first-child){margin-top:0}.form button[type=submit]:not(.widthAuto),.form input[type=submit]:not(.widthAuto){min-width:calc(var(--formMaxWidth)/2 - var(--fieldColumnSpace)/2)}.form__row{display:flex}.form__row--separate .field{border-top:1px solid #ececec;flex:1;margin-top:13px;padding-top:8px}.form__row--separate .field p{font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.23;margin:0 0 12px}.form__row--center{justify-content:center}.form__col{display:inline-flex;flex-flow:column;width:50%}.togglePassword{top:21px;font-size:1.5rem;position:absolute;right:18px;height:48px}.passwordValidation p{font-size:0.75rem;font-weight:400;letter-spacing:initial;line-height:1.33;color:#595959;margin:0 0 8px}.passwordValidation ul{margin:0;display:flex;flex-wrap:wrap}.passwordValidation ul li{padding-left:0;margin:0}.passwordValidation ul li:after{display:none}.passwordValidation li{color:#999;font-size:0.8125rem;margin:4px 0;width:50%}.passwordValidation li.disabled,.passwordValidation .filters:not(.filters--checked) li.filtersClearAll,.filters:not(.filters--checked) .passwordValidation li.filtersClearAll{color:#e6e6e6;text-decoration:line-through}.field{margin:0 calc(var(--fieldColumnSpace)/2) var(--fieldRowSpace);text-align:left}.field.hidden{margin:0}.field--full{width:calc(100% - var(--fieldColumnSpace))}.field--small{flex-shrink:0;width:calc(var(--smallField) + var(--fieldColumnSpace))}.field--centered{text-align:center}.field--centered .field__inner{display:inline-flex;margin-left:auto;margin-right:auto;text-align:left}.field--hEnd{text-align:right}.field--hEnd .field__inner{display:inline-flex}.field--submit{margin-top:20px;text-align:center}.field--comments{position:relative;min-height:16px}.field__inner{align-items:center;display:flex;position:relative}.field__wrap:first-child:last-child{width:100%}.field__label{color:#595959;display:block;font-size:0.8125rem;line-height:1.308;margin:0 0 4px;padding-left:var(--inputLabelPadding)}.field__label--multiple{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37;padding-left:0;flex-basis:100%}.field__labelInfo{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;color:#838385}.radiobutton .field__labelInfo,.checkbox .field__labelInfo{display:block}.field__legend{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;margin:0 0 24px}.field__input:-moz-read-only~.field__helper{color:#838385}.field__input:read-only~.field__helper{color:#838385}.field__input--password{padding-right:50px}.field__input--search{padding-right:80px}.field__input--inline{background:transparent;border-radius:0;border-top:none;border-left:none;border-right:none}.field__input--inlineB{display:inline-block;width:auto}.field__input--sm{max-width:131px}.field__inputSubmit,.field__inputClear{bottom:0;font-size:1.5rem;position:absolute;top:0;height:48px}.field__inputSubmit{right:18px}.field__inputClear{font-size:1rem;opacity:0;pointer-events:none;right:52px}.field__inputClear.active{opacity:1;pointer-events:all}.field__more{margin:24px 0 0}.field__more--spaceS{margin-top:8px}.field__more--center{text-align:center}.field__text{color:#b3b3b3;font-size:0.8125rem;margin:-4px 0 8px}.field__mapInner{padding-top:75%;background-color:#f4f4f4;position:relative}.statusBox{margin:48px 0}.formWrap--center .statusBox{margin-right:auto;margin-left:auto}.statusBox p{color:#333;font-size:1.125rem;font-weight:500}.statusBox p:last-child{margin-bottom:0}.statusBox__icon{border-radius:50%;color:var(--statusColor);font-size:4rem;line-height:1;margin-bottom:24px}.statusBox--success{--statusColor: #74B11F}.errorMsg{align-items:center;color:#d91a32;display:flex;font-size:0.75rem;margin:4px 0 8px}.errorMsg:before{content:""}.errorMsg:before{font-size:1rem;margin-right:8px}.birthdayInput{--birthdaySpace: 8px;display:flex;flex-wrap:wrap;margin-left:calc(-1*var(--birthdaySpace));width:calc(100% + var(--birthdaySpace)*2)}.birthdayInput .field__input{margin-left:var(--birthdaySpace);margin-right:var(--birthdaySpace)}.birthdayInput .field__input--day,.birthdayInput .field__input--month{width:calc(30% - 16px)}.birthdayInput .field__input--year{width:calc(40% - 16px)}.formBox{background-color:#f7f5f0;border-radius:8px;padding:20px;margin-bottom:12px}.formBox--inner{margin-left:32px}.formBox--plain{background-color:transparent;border-radius:initial;padding:0}.formBox__title{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;display:block;margin:0 0 24px}.formBox__text{font-size:1rem;margin:0 0 24px}.formBox__more{font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.28;display:flex;justify-content:flex-end;align-items:center}.formBox__more [class^=icon-],.formBox__more [class*=" icon-"]{color:#838385;font-size:24px;margin-right:9px}.formBox .checkbox~.formBox__more{margin-top:16px}.radiobuttons,.checkboxes{--checkboxRadioSpace: 20px}.radiobuttons--inline,.checkboxes--inline{--checkboxRadioSpace: 12px;gap:var(--checkboxRadioSpace) 24px;margin-bottom:calc(-1*var(--checkboxRadioSpace));display:flex}.formBox .radiobuttons--inline,.formBox .checkboxes--inline{--checkboxRadioSpace: 24px;margin-bottom:0}.radiobuttons--addresses,.checkboxes--addresses{padding-bottom:27px}.radiobuttons--colors,.radiobuttons--icons,.checkboxes--colors,.checkboxes--icons{display:flex;flex-wrap:wrap;margin-top:12px}.radiobuttons--colors,.checkboxes--colors{--checkboxRadioSpace: 16px;gap:var(--checkboxRadioSpace)}.radiobuttons--icons,.checkboxes--icons{--checkboxRadioSpace: 12px;gap:var(--checkboxRadioSpace) 8px}.radiobuttons--inline .radiobutton,.radiobuttons--inline .radiobutton:not(:first-child),.radiobuttons--inline .radiobutton:not(:last-child),.radiobuttons--colors .radiobutton,.radiobuttons--colors .radiobutton:not(:first-child),.radiobuttons--colors .radiobutton:not(:last-child),.radiobuttons--icons .radiobutton,.radiobuttons--icons .radiobutton:not(:first-child),.radiobuttons--icons .radiobutton:not(:last-child){margin:0}.radiobuttons--scrollV{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;max-height:224px}.radiobuttons--scrollV::-webkit-scrollbar{width:6px;height:6px}.radiobuttons--scrollV::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.radiobuttons--scrollV::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.radiobuttons--scrollV::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.radiobuttons--scrollV::-webkit-scrollbar-track{background:transparent}.radiobuttons--toggle{background:#ececec;border-radius:100px;display:flex;justify-content:center;margin-inline:auto;padding:2px;height:40px}.radiobuttons--toggle .radiobutton{color:#838385}.radiobuttons--toggle .radiobutton__input:not([type=hidden]):checked~.radiobutton__icon{background-color:#333}.radiobuttons--toggle .radiobutton__input:not([type=hidden]):checked~.radiobutton__text{color:#fff}.radiobuttons--toggle .radiobutton:not(:last-child){margin-bottom:0}.radiobuttons--toggle .radiobutton:not(:first-child){margin-top:0}.radiobuttons--toggle .radiobutton__label{align-items:center;display:flex;padding:4px 16px;height:100%}.radiobuttons--toggle .radiobutton__icon{background:transparent;border:none;border-radius:100px;width:100%;height:100%}.radiobuttons--toggle .radiobutton__icon:before{display:none}.radiobuttons--toggle .radiobutton__text{color:#838385;font-weight:500}.checkboxes--inline .checkbox,.checkboxes--inline .checkbox:not(:first-child),.checkboxes--inline .checkbox:not(:last-child){margin:0}.validation-summary-errors{margin:16px 0 0}.validation-summary-errors ul{list-style:inside}.validation-summary-errors li{margin-bottom:8px}.validation-summary-errors li,.field-validation-error{color:#d91a32}.field-validation-error{color:#d91a32}.file-upload{display:flex;flex-wrap:wrap;align-items:center;margin-bottom:20px}.file-upload__filled .file-upload__button{display:none}.file-upload__filled .file-upload__content{display:inline-flex}.file-upload__input{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;z-index:2;cursor:pointer}.file-upload__button{position:relative;margin-right:10px}.file-upload__content{display:none;flex-wrap:wrap;align-items:center;line-height:1}.file-upload__name{font-size:1rem;color:#333;letter-spacing:-0.02em;margin:8px 8px 8px 0}.file-upload__delete{cursor:pointer;display:inline-flex;flex-wrap:wrap;align-items:center;font-size:0.8125rem;font-weight:500;color:#333}.file-upload__delete:active{color:#f47920}.file-upload__delete:active .file-upload__icon{color:#f47920}.file-upload__icon{font-size:1.5rem;margin-top:-4px;color:#838385}.file-upload__title{font-size:1rem;letter-spacing:-0.02em;color:#333;margin:10px 10px 10px 0}.file-upload__title span{letter-spacing:-0.02em;font-size:0.8125rem}.formTip{color:#333;font-size:0.8125rem;letter-spacing:-0.02em;text-align:left}.formTip--border{border-top:solid 1px #ececec;margin:0 0 40px 0;padding-top:8px}.formTip p{font-size:0.8125rem;margin:0}.loginWrap{display:flex;text-align:left}.loginWrap__img{flex-shrink:0;position:relative;width:49%}.loginWrap__img img{-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center}.loginWrap__form{flex:1;padding:96px 24px;margin:0 auto;max-width:400px}.loginWrap__form .modal__title{margin-bottom:24px}.registerPromo{margin-top:40px}.registrationForm .modal__title{margin-bottom:48px}.formText{border-top:1px solid #d8d8d8;padding:24px 0 8px;text-align:center}.formText p{color:#333;font-size:0.9375rem}.formText p:last-child{margin:0}.goToTop{background-color:#000;bottom:32px;border-radius:50%;box-shadow:0px 5px 15px rgba(51,51,51,.12);color:#333;cursor:pointer;font-size:0.875rem;line-height:62px;position:fixed;right:24px;text-align:center;transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;transition:transform 250ms ease-out, -webkit-transform 250ms ease-out;-webkit-transform:translateY(150%);transform:translateY(150%);z-index:9;width:64px;height:64px}.goToTop:before{display:block;transition:-webkit-transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895);transition:transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895);transition:transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895), -webkit-transform 300ms cubic-bezier(0.455, 0.07, 0.53, 0.895)}.showToTop .goToTop{-webkit-transform:translateY(0);transform:translateY(0)}.imgControl{margin:0 auto;display:flex;width:100%;justify-content:center}.imgControl button{margin:0 4px}.indicator{font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.231;align-items:center;display:inline-flex}.indicator [class^=icon-],.indicator [class*=" icon-"]{margin:0 4px 2px}.indicator:before{width:6px;height:6px;background:transparent;border-radius:50%;content:"";margin-right:6px;margin-top:-2px}.indicator--orange:before{background-color:#f47920}.indicator--green:before{background-color:#74b11f}.indicator--greenLight:before{background-color:#8dc63f}.indicator--red:before{background-color:#d91a32}.indicator--strong{font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.28;padding:4px}.indicator--strong:before{display:none}.indicator--bg{background-color:#fef8c6;border-radius:4px}.orderTrack .indicator{flex-shrink:0}.loader--circle{margin:0 auto 32px;width:96px;height:96px}.loader__inner{align-items:center;display:flex;justify-content:center;margin:auto;width:100%;height:100%}.loader__item{-webkit-animation:bouncedelay 1.4s infinite ease-in-out both;animation:bouncedelay 1.4s infinite ease-in-out both;border-radius:100%;background-color:#fff;margin:4px;width:16px;height:16px}.loader__item--1{-webkit-animation-delay:-0.32s;animation-delay:-0.32s}.loader__item--2{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}.loader__circle{align-items:center;-webkit-animation:circle-loader-spin 1s infinite linear;animation:circle-loader-spin 1s infinite linear;border-radius:50%;border-top:10px solid #ece8dc;border-right:10px solid #ece8dc;border-bottom:10px solid #ece8dc;border-left:10px solid #f47920;display:flex;justify-content:center;margin:auto;-webkit-transform:translateZ(0);transform:translateZ(0);width:96px;min-width:96px;height:96px;min-height:96px}@-webkit-keyframes circle-loader-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes circle-loader-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes bouncedelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bouncedelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.loadMore{--barPercentage: 0%;--loadMoreSpace: 64px;margin:var(--loadMoreSpace) auto;text-align:center;max-width:736px}.loadMore__text{color:#333;margin-bottom:24px}.loadMore__text:last-child{margin-bottom:0}.loadMore__bar{background-color:#fff;border-radius:6px;margin:24px auto;overflow:hidden;position:relative;max-width:288px;height:6px}.loadMore__barInner{background-color:gray;border-radius:inherit;left:0;position:absolute;top:0;-webkit-transform:scaleX(var(--barPercentage));transform:scaleX(var(--barPercentage));-webkit-transform-origin:0 center;transform-origin:0 center;transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;transition:transform 250ms ease-out, -webkit-transform 250ms ease-out;width:100%;height:100%}.loadMore__button:not(:last-child){margin-bottom:32px}.mainNavWrap{--mobMenuHorPadding: 16px}.mainNav__list{margin:0}.mainNav__list li{padding-left:0;margin:0}.mainNav__list li:after{display:none}.mainNav__item{color:#8c8c8c;cursor:pointer;font-size:0.875rem;margin:0 16px;transition:color 250ms ease}.mainNav__item:first-child{margin-left:0}.mainNav__item--active{color:#333}.mainNav__link{color:inherit;display:block;padding:8px 8px 16px;position:relative;transition:color 250ms ease}.mainNav__link:first-child{padding-left:0}.mainNav__link:after{background-color:#000;bottom:0;content:"";left:0;opacity:0;position:absolute;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:center bottom;transform-origin:center bottom;transition:opacity 50ms ease-out;width:100%;height:3px}.mainNav__item--active .mainNav__link:after{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);transition:opacity 10ms ease-out 250ms,-webkit-transform 150ms ease-out 250ms;transition:opacity 10ms ease-out 250ms,transform 150ms ease-out 250ms;transition:opacity 10ms ease-out 250ms,transform 150ms ease-out 250ms,-webkit-transform 150ms ease-out 250ms}.megamenu{position:absolute;width:100%}.megamenu__list{margin:0}.megamenu__list li{padding-left:0;margin:0}.megamenu__list li:after{display:none}.megamenu__list--level2>li{color:#333;font-weight:bold}.megamenu__list--level3{margin:16px 0 40px}.megamenu__list--level3>li{color:#8c8c8c;font-weight:normal;margin-bottom:8px}.megamenu__list a{color:inherit;transition:color 250ms ease}.megamenu__title{align-items:baseline;display:flex}.megamenu__title>*:not(:last-child){margin-right:16px}.megamenu__close{color:rgba(51,51,51,.5);line-height:1}.message{align-items:center;border:1px solid #ececec;border-radius:8px;display:flex;margin-bottom:40px;padding:16px}.message__icon{align-self:flex-start;font-size:1.5rem;margin-right:8px;margin-top:-3px}.message__icon.icon-alert{color:#d91a32}.message__icon.icon-warning{color:#f47920}.message__icon.icon-tickFilled{color:#74b11f}.message__text{color:#333}.message__text p{font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.3;color:inherit;margin-bottom:4px}.message__text p:last-child{margin:0}.modal{align-items:center;display:flex;justify-content:center;left:0;opacity:1;position:fixed;top:0;transition:opacity 250ms ease-in-out;z-index:10;width:100%;height:100%}.modal:not(.open){opacity:0;pointer-events:none}.modal__wrap{background-color:#fff;border-radius:8px;color:#333;font-size:1rem;font-weight:400;overflow:auto;-webkit-overflow-scrolling:touch;padding:80px 24px 56px;position:relative;text-align:center;width:800px;max-width:92vw;max-height:92vh;z-index:10}.modal--auto .modal__wrap{width:auto}.modal--s .modal__wrap{width:504px}.modal--l .modal__wrap{width:1176px}.modal--full .modal__wrap{border-radius:0;display:flex;flex-wrap:wrap;width:100%;height:100%;max-width:100%;max-height:100%}.modal--transparent .modal__wrap{background:transparent;padding:0}.modal--noSpaces .modal__wrap{padding:0}.modal__wrap .btnWrap{margin-top:34px}.modal__wrap .btnWrap:last-child{margin-bottom:0}.modal__closeButton{position:absolute;right:24px;top:24px;z-index:2}.modal__mainfigure{margin:auto}.modal__mainfigure img{display:inline-block;-o-object-fit:contain;object-fit:contain;-o-object-position:center center;object-position:center center;vertical-align:top;max-width:92vw;max-height:88vh}.modal__titleWrap{margin:0 auto 32px}.modal__title{font-size:1.5rem;margin:0 auto 12px;max-width:576px}.modal__title:not(:first-child){margin-top:0}.modal__title:last-child{margin-bottom:0}.modal .form{margin-bottom:0}.modal--full .modal__content{width:100%}.newsletter{background-color:#e6e6e6;padding:32px 0;display:flex}.newsletter__form{display:flex}.newsletter__label{font-size:16px;font-weight:bold}.newsletter__inputs{display:flex}.newsletter__input{background-color:#fff;border:1px solid #999;border-radius:5px;color:#666;font-size:0.875rem;margin-right:8px;padding:8px;height:48px}.newsletter__input::-webkit-input-placeholder{color:#999}.newsletter__input::-moz-placeholder{color:#999}.newsletter__input:-ms-input-placeholder{color:#999}.newsletter__input::placeholder{color:#999}.newsletter__terms{margin:8px 0 0}.notifications{display:none;position:absolute;top:100%;z-index:3}.notifications__content{background-color:#fff;border-radius:8px;box-shadow:0px 2px 12px rgba(51,51,51,.08);padding:60px 20px 20px 20px;position:relative;z-index:2;margin-top:12px}.notifications__close{position:absolute;right:20px;top:20px;color:#333;font-size:1.5rem;cursor:pointer}.notifications__list{margin:0}.notifications__list li{padding-left:0;margin:0}.notifications__list li:after{display:none}.notifications__overlay{position:absolute;z-index:-1;cursor:pointer}.notifications__content{width:415px}.notifications__list{overflow:auto;-webkit-overflow-scrolling:touch;scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;max-height:calc(100vh - 210px);margin:0 -10px;padding:0 10px}.notifications__list::-webkit-scrollbar{width:6px;height:6px}.notifications__list::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.notifications__list::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.notifications__list::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.notifications__list::-webkit-scrollbar-track{background:transparent}.notifications__listItem{color:#838385;font-size:0.875rem;line-height:1.25;margin:0;padding:16px 0;display:flex;flex-wrap:wrap;position:relative}.notifications__listItem--unread{color:#333;padding-right:13px}.notifications__listItem--unread:before{content:"";position:absolute;top:21px;right:0;width:6px;height:6px;background:#d91a32;border-radius:50%}.notifications__listItem:not(:first-child){border-top:1px solid #ececec}.notifications__date{width:70px;text-align:right;font-size:0.875rem;letter-spacing:-0.01em;margin-left:auto}.notifications__title{width:calc(100% - 70px);max-width:293px;padding-right:5px;font-size:0.875rem;color:#333;line-height:1.3}.notifications__maintitle{font-size:1.25rem;font-weight:700;color:#333;line-height:1.3;margin:0 0 10px}.notificationsBtn{position:relative;font-size:1.5rem;color:#a6a6a6}.notificationsBtn:after{position:absolute}.outputsRow{display:flex;gap:24px}.output{align-items:center;background:#f2efe8;border-radius:8px;display:flex;flex:1;justify-content:space-between;padding:16px;position:relative}.output:not(.output--init){align-items:center;justify-content:flex-start;padding-right:64px}.output--pickup .output__inner,.output--delivery .output__inner{background-position:left center;background-repeat:no-repeat;background-size:auto 40px;padding-left:88px;min-height:40px}.output--selected{border:2px solid #74b11f}.output--delivery .output__inner{background-image:url(../media/delivery.svg)}.output--pickup .output__inner{background-image:url(../media/pickup.svg)}.output--pickup:not(.output--init) .output__inner,.output--delivery:not(.output--init) .output__inner{align-items:flex-end;display:flex;flex-wrap:wrap}.output--init .output__inner{align-items:center;display:flex}.output__title{align-items:baseline;color:#333;display:flex;font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.375;margin:0}.output--delivery:not(.output--init) .output__title,.output--pickup:not(.output--init) .output__title{font-size:0.875rem;line-height:1.286;margin-bottom:4px}.output__title:not(:last-child){margin-bottom:8px}.output--init .output__title{font-size:1.125rem}.output__titleInfo{color:#838385;font-size:0.75rem;letter-spacing:0;margin-left:4px}.output__mainLink{font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.286;margin:0}.output__mainLink:after{content:""}.output__link,.output__mainLink{color:var(--buttonColor)}.output__link:active,.output__mainLink:active{color:var(--buttonColorActive)}.output--init .output__button{flex-shrink:0;margin-left:16px}.output--init .output__button:after{content:""}.output:not(.output--init) .output__button{position:absolute;right:16px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.output--selected .output__button{background:url(../media/tickFilled.svg) no-repeat scroll center;background-size:contain;color:#74b11f;width:26px;height:26px}.output__status{color:#74b11f;flex-shrink:0;font-size:1.625rem;margin-left:16px}.output__link{color:var(--buttonColor);display:block;font-size:0.875rem;text-decoration:underline}.output__link:not(:last-child){margin-bottom:4px}.output__link address{color:inherit;line-height:inherit}.output__link--b{font-weight:500}.output__time{color:#333;font-size:0.8125rem;line-height:1.23;margin:4px 0 0}.output__time:before{font-size:1rem;margin-right:4px}.pagination-container{margin:32px 0}.pagination{margin:0;align-items:center;display:flex;flex-wrap:wrap;justify-content:center}.pagination li{padding-left:0;margin:0}.pagination li:after{display:none}.pagination__item{border-radius:50%;font-size:1rem;margin:0 2px}.pagination__item.active{background-color:#f47920;font-size:1.125rem;font-weight:700}.pagination__item.active .pagination__link{color:#fff;cursor:default}.pagination__link{color:var(--buttonColor);cursor:pointer;display:block;line-height:34px;text-align:center;transition:color 250ms ease;width:32px;height:32px}.pagination__link:active{color:var(--buttonColorActive)}.pagination__link--prev,.pagination__link--next{align-items:center;display:flex;justify-content:center}.pagination__link--prev.disabled,.filters:not(.filters--checked) .pagination__link--prev.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.pagination__link--prev,.filter:not(.filter--checked) .filtersLinks button.pagination__link--prev,.pagination__link--next.disabled,.filters:not(.filters--checked) .pagination__link--next.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.pagination__link--next,.filter:not(.filter--checked) .filtersLinks button.pagination__link--next{opacity:0;pointer-events:none}.product .fav{position:absolute;right:-4px;top:-4px;z-index:2}.product .wishlistButton:not(:first-child) .fav{right:24px}.product--mini .fav,.minibasket__product .fav{right:32px;top:0}.product__inner{display:flex;flex-direction:column;position:relative;height:100%}.product__discount{align-items:center;background-color:#fff;border:5px solid rgba(244,121,32,.7);border-radius:50%;color:#333;display:flex;flex-direction:column;font-size:0.875rem;font-weight:700;justify-content:center;left:0;letter-spacing:-0.02em;line-height:1;position:absolute;text-align:center;top:0;z-index:1;width:64px;height:64px}.basketTable .product__discount{border-width:3px;font-size:0.6875rem;font-weight:500;width:44px;height:44px}.basketTable .product__discount .product__discountVal{font-size:0.875rem;margin-bottom:-3px}.product__discountVal{font-size:1.125rem;font-weight:bold;line-height:1.223}.product__discountText{font-size:0.625rem;font-weight:500;line-height:1.2}.product__img{margin-bottom:12px;padding-top:16px;position:relative;max-width:320px}.product__img figure{width:100%}.product__img figure picture{display:block;padding-top:calc(160 / 160 * 100%);position:relative;width:100%}.product__img figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.product__badge{--badgePosition: 0;bottom:0;position:absolute;z-index:2;width:40px}.product__badge--left{left:var(--badgePosition)}.product__badge--right{right:var(--badgePosition)}.product__badge img{display:inline-block;vertical-align:top}.product__more{display:flex;flex:1;flex-direction:column;justify-content:flex-end}.product__title{color:#333;display:block;font-size:1.125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.3;margin:0 0 8px}.product__title:before{content:""}.product__desc{color:#333;font-size:0.8125rem;letter-spacing:-0.02em;line-height:1.23;margin:0 0 8px}.product__quantity{position:relative;z-index:1}.product__avail{font-size:0.8125rem}.minibasket .product__avail{margin:4px 0 0}.productsListMini .product:not(:first-child){margin-top:24px}.productsListMini .product:not(:last-child){margin-bottom:24px}.productTags{display:flex;flex-wrap:wrap;margin:-4px 0 8px}.productInfo .productTags{margin:0 0 12px}.productTags__tag{margin:4px 0;width:24px;height:24px}.productInfo .productTags__tag{margin-bottom:0;margin-top:0;width:32px;height:32px}.productTags__tag:not(:last-child){margin-right:4px}.priceContainer{display:flex;justify-content:flex-start}.productInfo .priceContainer,.productList .priceContainer{height:54px}.productList .priceContainer{justify-content:space-between;margin-bottom:12px}.priceContainer .priceBlock{align-items:baseline;display:grid;grid-template-columns:-webkit-max-content;grid-template-columns:max-content;grid-template-rows:auto}.priceContainer .priceBlock:not(:first-child){padding-left:8px}.priceContainer .priceBlock:not(:last-child){padding-right:8px}.priceContainer .priceBlock__price{align-self:end}.priceContainer .priceBlock__price:not(.priceBlock__price--init):first-child{grid-row-start:1;grid-row-end:3}.priceContainer .priceBlock__text{align-self:end;grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}.priceBlock{color:#333;letter-spacing:-0.02em;line-height:1}.priceBlock__price{font-size:1.125rem;font-weight:500;line-height:1.334;text-align:right;white-space:nowrap}.priceBlock__price--init{color:#a6a6a6;font-size:1rem;font-weight:400;text-decoration:line-through}.priceBlock__price--b{font-size:1.625rem;letter-spacing:-0.03em;line-height:1.02;margin-top:-6px}.priceBlock__price--b .priceBlock__text{letter-spacing:-0.02em}.priceBlock__text{font-size:0.8125rem;font-weight:400;line-height:1.385;margin-left:4px;white-space:nowrap}.priceRow{align-items:center;display:flex;justify-content:space-between;font-size:0.875rem;margin:16px 0}.priceRow:first-child{margin-top:0}.priceRow .priceBlock{padding-left:24px}.priceRow:not(.priceRow--total) .priceBlock__price{font-weight:normal}.priceRow--total{align-items:flex-end;font-size:1.25rem;font-weight:500;letter-spacing:-0.02em;line-height:1;margin-bottom:24px}.sideBasket .priceRow--total{font-size:1rem;margin:8px 0}.priceRow--total .priceBlock__price{font-size:1.25rem}.priceRow--total .priceBlock__price--init{font-size:0.9375rem}.priceRow__val{color:gray}.noInfo{border:2px solid #fff;border-radius:50%;color:#fff;font-size:0.75rem;font-weight:500;letter-spacing:-0.02em;line-height:22px;text-align:center;width:24px;height:24px}.infoPopup{background-color:#fff;-webkit-filter:drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2));filter:drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2));padding:16px;position:absolute;right:calc(50vw - var(--wrapper)/2 + var(--gridSpace));top:160px;transition:opacity 350ms ease,-webkit-transform 350ms ease;transition:opacity 350ms ease,transform 350ms ease;transition:opacity 350ms ease,transform 350ms ease,-webkit-transform 350ms ease;z-index:99;min-width:320px}.infoPopup.moveOut{opacity:0;pointer-events:none;-webkit-transform:translateY(-40%);transform:translateY(-40%)}.infoPopup__title{font-weight:bold;margin:0 0 8px;padding-right:24px}.infoPopup p{font-size:0.875rem}.infoPopup__remove{position:absolute;right:0;top:0}.productsSum{padding:20px 8px}.productsSum .orDivider__text{background-color:#f2f2f2}.quantity{align-items:center;background-color:#f2efe8;border-radius:100px;display:flex;position:relative;width:100%;max-width:296px;height:48px}.quantity--init{position:relative}.quantity--init:before{content:""}.quantity--init:before{color:#838385;font-size:1.5rem;left:50%;margin:-12px 0 0 -12px;position:absolute;top:50%;z-index:1}.quantity--init:after{background-color:#f2efe8;border-radius:100px;content:"";pointer-events:none;transition:background-color 250ms ease-out}.quantity--init .quantity__btn{opacity:0}.quantity__btn{background-color:var(--buttonBgColor);border-radius:100px;color:var(--buttonColor);flex-shrink:0;font-size:1.5rem;line-height:1;width:60px;height:100%}.quantity__btn:not(.disabled){cursor:pointer}.quantity__btn:not(.disabled):active{background-color:var(--buttonBgColorActive)}.quantity__btn.disabled,.filters:not(.filters--checked) .quantity__btn.filtersClearAll,.filters:not(.filters--checked) .filtersLinks.filtersLinks--all button.quantity__btn,.filter:not(.filter--checked) .filtersLinks button.quantity__btn{--buttonBgColor: #F2EFE8;--buttonColor: #C2C2C2}.quantity__btn--inc{--buttonBgColor: #74B11F;--buttonBgColorHover: #8DC63F;--buttonBgColorActive: #588718;--buttonColor: #fff}.quantity__btn--inc:before{content:""}.quantity__btn--dec{--buttonBgColor: #E8E2D7;--buttonBgColorHover: #D6D0C5;--buttonBgColorActive: #C9C4B9;--buttonColor: #838385}.quantity__btn--dec:before{content:""}.quantity__btn--notAvailable{background-color:#ececec;border-radius:8px;color:#a6a6a6;font-size:0.9375rem;font-weight:500;min-width:100%}.quantity__input{color:#838385;flex:1;font-size:1.25rem;font-weight:500;letter-spacing:-0.02em;text-align:center}.quantity__input span{font-size:1rem}.quantity:not(.quantity--init) .quantity__input{pointer-events:none}.quantity.quantity--init .quantity__input{cursor:pointer;opacity:0;z-index:2}.quantity__message{align-items:center;background:#fff;border:1px solid #ececec;box-shadow:0px 6px 16px rgba(51,51,51,.15);border-radius:8px;bottom:100%;display:flex;font-size:0.875rem;left:50%;letter-spacing:-0.01em;margin-bottom:8px;opacity:0;padding:var(--productPadding);pointer-events:none;position:absolute;-webkit-transform:translateY(16px) translateX(-50%);transform:translateY(16px) translateX(-50%);transition:opacity 350ms ease,-webkit-transform 350ms ease;transition:opacity 350ms ease,transform 350ms ease;transition:opacity 350ms ease,transform 350ms ease,-webkit-transform 350ms ease;width:calc(100% + var(--productPadding)*2)}.basketTable .quantity__message{left:50%;padding:8px;white-space:nowrap;width:auto}.quantity__message:before{background-color:var(--messageColor);border-radius:50%;color:#fff;flex-shrink:0;font-weight:bold;line-height:22px;margin-right:8px;text-align:center;width:22px;height:22px}.quantity--showMessage .quantity__message{opacity:1;-webkit-transform:translateY(0) translateX(-50%);transform:translateY(0) translateX(-50%)}.quantity__message--added{--messageColor: #74B11F}.quantity__message--added:before{content:""}.quantity__message--removed{--messageColor: #D8D8D8}.quantity__message--removed:before{content:""}.quantity--s,.basketTable .quantity{height:34px}.quantity--s .quantity__btn,.basketTable .quantity .quantity__btn{font-size:0.875rem;width:40px}.quantity--s .quantity__input,.basketTable .quantity .quantity__input{font-size:0.875rem}.filters__item .range{padding:16px 8px 0 0}.range__slider{background:#333;border:none;border-radius:0;box-shadow:none;margin:16px;height:2px}.range__values{display:flex;justify-content:space-between}.range__value{color:#ccc;font-size:0.875rem;text-align:center;width:32px}.range__inputs{display:flex;margin-top:16px;height:48px}.range__inputWrap{flex:1;margin-right:8px;position:relative}.range__input{padding-right:24px;width:100%}.range__symbol{color:gray;font-size:0.875rem;right:8px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.range__submit:before{content:""}.noUi-connect{background-color:#333}.noUi-handle{border:1px solid #333;box-shadow:none}.noUi-horizontal .noUi-handle{border-radius:50%;right:-16px;top:-16px;width:32px;height:32px}.noUi-handle:before,.noUi-handle:after{display:none}.noUi-tooltip{background:transparent;border:none;font-size:0.875rem;font-weight:bold;line-height:1;padding:4px 0}.noUi-handle-lower .noUi-tooltip,.noUi-handle-upper .noUi-tooltip{bottom:100%}.result{margin:0 0 40px}.result--fullheight{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin:0;padding:24px 0;min-height:60vh}.result__content{text-align:center;width:100%}.result__title{font-size:1.875rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2;color:#333;margin:0 0 8px}.result__p{margin:0 0 12px}.result__p--b{font-size:1.25rem;letter-spacing:-0.03em}.result__p:last-child{margin:0}.result__button{margin-top:24px}.result__code{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37}.result__code strong{font-size:1.125rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2}.result__mainimg{width:100%;margin:0 auto 8px;max-width:120px}.result__mainimg picture{display:block;padding-top:calc(124 / 124 * 100%);position:relative;width:100%}.result__mainimg img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.result__mainimg--notsupported{margin-bottom:40px;max-width:235px}.result__mainimg--notsupported picture{padding-top:82.5531914894%}.result__mainicon{font-size:5.9375rem;margin-bottom:32px}.result__mainicon--border{padding:0 16px;border-bottom:solid 3px #dad7d0}.result__mainicon--orange{color:#f47920}.scrollbar{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.scrollbar::-webkit-scrollbar{width:6px;height:6px}.scrollbar::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.scrollbar::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.scrollbar::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.scrollbar::-webkit-scrollbar-track{background:transparent}.scrollbarShadow{position:relative}.scrollbarShadow:before,.scrollbarShadow:after{content:"";pointer-events:none;position:absolute;transition:opacity 250ms ease-out}.scrollbarShadow--vert:before,.scrollbarShadow--vert:after{left:0;z-index:3;width:calc(100% - 8px);height:40px}.scrollbarShadow--vert:before{background:linear-gradient(to bottom, white 0%, rgba(255, 255, 255, 0) 100%);top:0}.scrollbarShadow--vert:after{background:linear-gradient(to top, white 0%, rgba(255, 255, 255, 0) 100%);bottom:0}.scrollbarShadow--hor:before,.scrollbarShadow--hor:after{top:0;width:56px;height:calc(100% - 8px)}.scrollbarShadow--hor:before{background:linear-gradient(to right, white 0%, rgba(255, 255, 255, 0) 100%);left:0}.scrollbarShadow--hor:after{background:linear-gradient(to left, white 0%, rgba(255, 255, 255, 0) 100%);right:0}.scrollbarShadow--top:before{opacity:0}.scrollbarShadow--bottom:after{opacity:0}.scrollbarShadow--right:after{opacity:0}.scrollbarShadow--left:before{opacity:0}.searchInput{--searchIconWidth: 48px;--searchHeight: 48px;border:1px solid #fff;border-radius:5px;margin:16px 0;position:relative;height:var(--searchHeight)}.searchInput input{background:transparent;border:none}.searchInput__input{padding:12px var(--searchIconWidth) 12px 12px;width:100%;height:100%}.searchInput__submit{align-items:center;display:flex;font-size:24px;justify-content:center;position:absolute;right:0;top:0;width:var(--searchIconWidth);height:100%}.searchInput__submit:before{content:""}.sidemenu{margin:28px 0 16px;position:relative;z-index:5}.sidemenu__selected:before{content:""}.sidemenu__list{margin:0}.sidemenu__list li{padding-left:0;margin:0}.sidemenu__list li:after{display:none}.sidemenu__list--level2{margin:12px 0;padding:0 20px}.sidemenu__link{display:inline-block;font-weight:500;color:#333}.sidemenu__link--level2{font-size:0.875rem;margin-bottom:6px;letter-spacing:-0.01em}.sideNav{flex:1;padding:80px 8px 0 32px;position:relative}.sideNav__list{margin:0;margin:0;padding:0}.sideNav__list li{padding-left:0;margin:0}.sideNav__list li:after{display:none}.sideNav__list--level1{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;left:0;padding-right:16px;position:-webkit-sticky;position:sticky;top:calc(8px + var(--headerHeight));max-height:calc(100vh - 16px - var(--headerHeight))}.sideNav__list--level1::-webkit-scrollbar{width:6px;height:6px}.sideNav__list--level1::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.sideNav__list--level1::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.sideNav__list--level1::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.sideNav__list--level1::-webkit-scrollbar-track{background:transparent}.fixPos .sideNav__list--level1{margin-top:calc(var(--top) - var(--headerHeight) - 148px)}.sideNav__list--level2{margin:0 0 4px}.sideNav__item{border:none;color:#333;font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.572;margin:0}.sideNav__item--level2{font-weight:400}.sideNav__link{color:inherit;display:block;font-size:inherit;line-height:inherit;padding:8px 0 8px 44px;position:relative;transition:color 250ms ease}.sideNav__link--level1.active{background-color:#f2efe8;border-radius:6px}.sideNav--lists .sideNav__link--level1.active:before{background-color:var(--listColor);border-radius:4px}.sideNav__item.open>.sideNav__link--level1{font-weight:700}.sideNav__link--level1:before{font-size:1.5rem;left:8px;margin-top:-12px;position:absolute;top:50%;width:24px;height:24px}.sideNav__link--level2{border-radius:6px;padding-bottom:6px;padding-top:6px}.sideNav__link--level2.active{background-color:#f2efe8;font-weight:500}.sideNav__seperator{background-color:#ececec;height:1px}.sideNav__list .sideNav__seperator{margin:12px 0}.swiper{--swiper-theme-color: #838385;--swiper-navigation-size: 32px;--swiper-pagination-bullet-opacity: 1;--swiper-pagination-bullet-inactive-opacity: 0.5;--swiper-pagination-bullet-inactive-color: #A6A6A6;--swiper-pagination-color: #F47920;--swiper-navigation-color: #838385;--swiper-navigation-inactive-color: #A6A6A6;--swiper-navigation-inactive-opacity: 1}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal{bottom:0}.swiper-button-prev,.swiper-button-next{width:var(--swiper-navigation-size)}.swiper-button-prev:after,.swiper-button-next:after{font-size:var(--swiper-navigation-size)}.arrowSlider .swiper-button-prev:after,.arrowSlider .swiper-button-next:after{font-size:2.5rem}.swiper-button-prev.swiper-button-disabled,.swiper-button-next.swiper-button-disabled{color:var(--swiper-navigation-inactive-color);opacity:var(--swiper-navigation-inactive-opacity)}.swiper-button-prev:not(.swiper-button-disabled):active,.swiper-button-next:not(.swiper-button-disabled):active{color:#f47920}.swiper-button-prev{left:0}.swiper-button-prev:after{content:""}.swiper-button-next{right:0}.swiper-button-next:after{content:""}.swiper-pagination{margin-top:32px}.swiper-pagNav{align-items:center;bottom:0;display:flex;justify-content:center;margin-top:32px}.swiper-pagNav .swiper-pagination{margin:0;position:relative;width:auto}.swiper-pagNav .swiper-button-prev,.swiper-pagNav .swiper-button-next{margin:0;position:relative;top:0}.swiper-pagNav__shadow{content:"";position:absolute;pointer-events:none;top:0;transition:opacity 250ms ease-in-out;z-index:1;width:var(--swiper-navigation-size);height:calc(100% - 64px)}.swiper-pagNav__shadow--prev{background:linear-gradient(to right, white 0%, rgba(255, 255, 255, 0) 100%);left:0}.swiper-pagNav__shadow--next{background:linear-gradient(to left, white 0%, rgba(255, 255, 255, 0) 100%);right:0}.swiper-button-disabled+.swiper-pagNav__shadow{opacity:0}.sliderSection{--sliderSectionSpaceBottom: 40px;margin:0 0 var(--sliderSectionSpaceBottom)}.simpleSlider{--simnpleSliderSpaceBottom: 32px;padding-bottom:var(--simnpleSliderSpaceBottom)}.simpleSlider--cat{margin-left:-16px;margin-top:-24px;padding-inline:16px;padding-top:24px;width:calc(100% + 32px)}.simpleSlider--cat:not(.swiper-initialized) .swiper-slide{margin-right:16px;width:calc(20% - 16px)}.productsSlider{margin-top:40px}.productsSlider .swiper-wrapper{align-items:stretch;display:flex}.productsSlider .swiper-slide{width:280px;height:initial}.productsSlider .product{height:100%}.social p{color:#4d4d4d;margin:0 0 8px}.social__list{--socialItemPAdding: 8px;margin:0;display:flex;margin-left:calc(-1*var(--socialItemPAdding))}.social__list li{padding-left:0;margin:0}.social__list li:after{display:none}.social__item{color:#ccc;line-height:1;margin:0;padding:var(--socialItemPAdding)}.social__item:not(:last-child){margin-right:8px}.social__link{display:inline-block;font-size:28px;vertical-align:top}.social__link:before{display:inline-block;vertical-align:top}.storeListWrap .tabToggle{align-items:center;bottom:24px;display:flex;justify-content:center;left:0;position:-webkit-sticky;position:sticky;z-index:3}.storeMap{background-color:#f4f4f4;flex-grow:1;position:relative;min-height:600px}.storeTile{padding-block:20px}.storeTile:not(:last-child){border-bottom:1px solid #c2c2c2}.mapInfo .storeTile{margin:0;padding:0;position:relative;z-index:1}.storeTile__thumbnail{border-radius:8px;margin-bottom:12px;overflow:hidden}.storeTile__thumbnail figure{width:100%}.storeTile__thumbnail figure picture{display:block;padding-top:calc(115 / 266 * 100%);position:relative;width:100%}.storeTile__thumbnail figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.storeTile__title{font-size:1.25rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2;color:#333;margin-bottom:4px}.storeTile__title:not(:first-child){margin-top:0}.storeTile__address{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;color:#404040;margin-bottom:8px}.storeTileSpecs{--iconSpacing: 8px;align-items:center;display:flex;margin-bottom:16px}.mapInfo .storeTileSpecs{align-items:flex-start;flex-flow:column;margin-bottom:15px}.storeTileSpecs__title{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.53;margin-bottom:14px}.storeTileSpecs__iconWrap{display:flex;align-items:center}.mapInfo .storeTileSpecs__iconWrap{margin-bottom:12px}.storeTileSpecs__icon{color:#838385;font-size:1.5rem;margin-right:var(--iconSpacing)}.storeTileSpecs__iconInfo{font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.23;margin-left:calc(-1*var(--iconSpacing))}.storeTileOrder{align-items:flex-start;background-color:#f7f5f0;border-radius:8px;display:flex;padding:10px 20px}.mapInfo .storeTileOrder{flex-wrap:wrap;padding:10px}.storeTileOrder__icon{color:#838385;flex-shrink:0;font-size:1.5rem;margin-right:8px}.storeTileOrder__details{font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.28;color:#333;margin-bottom:0}.mapInfo .storeTileOrder__details{margin-bottom:4px}.storeTileOrder__availability{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;color:#838385;margin-bottom:0}.mapInfo .storeTileOrder__availability{display:none}.mapInfo .storeTileOrder__actions{flex-basis:100%;margin-top:12px}.mapInfo .storeTileOrder__actions .button{width:100%}.storeTileOrder--details{align-items:center;margin-bottom:40px;padding:24px 21px}.storeTileOrder--details .storeTileOrder__icon{font-size:0;margin-right:17px;margin-top:-6px;width:51px;height:27px}.storeSearch{background-color:#fff;margin-bottom:32px;text-align:center}.storeSearch__inner{margin:0 auto;max-width:calc(480px + 2*var(--gridSpace))}.storeSearch p{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37;color:#333}.storeSearch p:last-of-type{margin-bottom:8px}.storeSearch .form{margin-bottom:0;padding-block:8px}.storeSearch .field{margin-bottom:0}.pin{cursor:pointer;display:inline-block;position:relative}.pin__count{font-size:1.375rem;font-weight:700;letter-spacing:-0.03em;line-height:1.36;color:#fff;display:inline-block;left:0;margin:0px 12px;position:absolute;right:0;text-align:center;top:20px}.mapInfo{background-color:#fff;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.08);max-width:290px;padding:48px 12px 12px;position:relative}.mapInfo:after{content:"";border-bottom-left-radius:4px;box-shadow:0 2px 12px rgba(0,0,0,.08);border:16px solid #000;border-color:transparent transparent #fff #fff;bottom:-32px;box-sizing:border-box;left:calc(50% - 22.625px);margin-left:0;position:absolute;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 0;transform-origin:0 0;width:0;height:0}.mapInfo:before{background-color:#fff;bottom:0;content:"";display:block;position:absolute;left:0;margin:0 auto;pointer-events:none;right:0;z-index:1;width:50px;height:50px}.mapInfo__close{color:#838385;font-size:1rem;position:absolute;right:19px;top:19px}.storeLocator{align-items:center;background-color:#dbe5e8;border-radius:8px;display:flex}.storeLocator__title{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.53;color:#333;margin-bottom:4px;text-align:center}.storeLocator__inner{align-items:center;display:flex;flex-flow:column;flex-grow:1;padding:20px}.storeLocator__sub{font-size:1rem;font-weight:400;letter-spacing:-0.02em;line-height:1.5;text-align:center;margin-bottom:20px}.storeLocator__illustration{flex-basis:300px;font-size:0}.storeLocator__illustration--right{margin-top:auto}.storeLocator__illustration--mob{display:none}.storeLocator__form{--fieldColumnSpace: 12px;--formMaxWidth: 530px;margin-bottom:0}.storeLocator__form .field{margin-bottom:0}.storeLocator__form .field--small{flex-grow:1}.storeLocator__form .field--small .button{flex-grow:1;width:100%}.storeHours{padding:40px 24px;position:relative;color:#333}.storeHours:after{content:"";background-color:#f7f5f0;border-radius:8px;z-index:-2}.storeHours .acc{border:0}.storeHours .acc p:last-child{margin-bottom:0}.storeHours .acc__header{padding:0}.storeHours .acc__content{padding:0}.storeHours p{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;color:inherit;margin-bottom:6px}.storeHours hr{border:0;border-top:1px solid #a6a6a6;margin:20px auto;max-width:227px}.storeHours__inner{margin:0 auto;max-width:728px}.storeHours__top{text-align:center;margin-bottom:18px;font-size:1.25rem;font-weight:400;letter-spacing:-0.03em;line-height:1.5}.storeHours__top p:last-child{margin-bottom:0}.storeHours__illustration{font-size:0;position:absolute;pointer-events:none;z-index:-1}.storeHours__illustration--left{top:0;left:0}.storeHours__illustration--right{bottom:25px;right:42px}.storeHours__illustration--mob{top:0;left:0}.storeHours strong{font-weight:500}.storeDetails__map{padding-top:calc(532 / 1001 * 100%);position:relative;width:100%;background-color:#f7f5f0;border-radius:8px;overflow:hidden;padding-top:53.1468531469%;position:relative}.storeDetails .storeTileSpecs{display:block;margin-bottom:32px}.storeDetails .storeTileSpecs__icon{margin-right:4px}.storeDetails .storeTileSpecs__iconInfo{font-size:0.9375rem;font-weight:500;letter-spacing:-0.03em;line-height:1.46;margin-left:0;margin-right:24px}.table{--paddingExternalX: 20px;--paddingExternalY: 20px;--cellPaddingX: 12px;--cellPaddingY: 20px;font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;margin:0 0 10px}.table table{border:none;border-collapse:collapse;text-align:left;width:100%}.table th,.table .mob-th{color:#000;font-weight:500;text-align:left}.table th{padding:var(--cellPaddingY) var(--cellPaddingX)}.table th:first-child{padding-left:var(--paddingExternalX)}.table th:last-child{padding-right:var(--paddingExternalX)}.table tr{border:3px solid transparent;border-left:0;border-right:0;position:relative}.table tbody tr{cursor:pointer}.table tbody tr:after{background-color:#f7f5f0;border-radius:8px;content:"";opacity:0;transition:opacity 250ms ease-in-out;z-index:-1}.table tbody tr.highlight:after{background-color:#fef8c6;opacity:1}.table td{padding:var(--cellPaddingY) var(--cellPaddingX);max-width:172px}.table td a{font-weight:400}.table td.table__tools{text-align:right;white-space:nowrap}.table td.table__tools .iconButton,.table td.table__tools .selectedFilters__remove{font-size:1.5rem}.table td.table__tools .iconButton:not(:last-child),.table td.table__tools .selectedFilters__remove:not(:last-child){margin-right:24px}.table .mob-th{display:none}.timetable{margin-bottom:88px}.timetable .swiper-wrapper{align-items:stretch}.timetable .swiper-slide{height:auto}.timetable__item{display:flex;flex-direction:column;padding:1px;height:100%}.timetable__day{background:#f7f5f0;border-bottom:1px solid #ececec;color:#333;display:flex;flex-direction:column;font-size:0.875rem;line-height:1.375;justify-content:center;margin-bottom:16px;height:56px}.timetable__dayName{font-size:1rem;font-weight:500}.timetable__hours--empty{align-items:center;border:1px solid #ececec;border-radius:4px;display:flex;flex:1;justify-content:center}.timetable__hour{align-items:center;border:1px solid #c2c2c2;border-radius:4px;color:#595959;display:flex;font-size:0.875rem;font-weight:500;justify-content:space-between;padding:8px 8px 8px 12px;text-align:left;transition:border-color 250ms ease-out;width:100%;height:40px}.timetable__hour:not(.timetable__hour--unavailable){cursor:pointer}.timetable__hour:not(:last-child){margin-bottom:8px}.timetable__hour--unavailable{border-color:#ececec;color:#d8d8d8}.timetable__hour--selected{background-color:#f2efe8;border-color:#74b11f}.timetable__hourVal{padding-right:8px;white-space:nowrap}.timetable__extraText{color:#333;font-size:0.6875rem;font-weight:400;letter-spacing:-0.02em;line-height:1.183;text-align:right}.timetable__hours--empty .timetable__extraText,.timetable__hour--unavailable .timetable__extraText{color:#d8d8d8}.timetableNav{transition:opacity 250ms ease-in-out}.timetableNav.swiper-button-disabled{opacity:0;pointer-events:none}.timetableNav--next:before{content:""}.timetableNav--prev:before{content:""}.tooltip{margin-left:8px;position:relative;z-index:2}.tooltip__main{background:#fff;border-radius:10px;bottom:calc(100% + 12px);-webkit-filter:drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2));filter:drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2));font-size:0.875rem;left:50%;line-height:1.3;margin-left:-100px;opacity:0;padding:16px;position:absolute;text-align:left;-webkit-transform:translateY(-8px);transform:translateY(-8px);transition:opacity 200ms ease-out,-webkit-transform 250ms ease-out;transition:opacity 200ms ease-out,transform 250ms ease-out;transition:opacity 200ms ease-out,transform 250ms ease-out,-webkit-transform 250ms ease-out;width:200px}.tooltip__main:after{border-style:solid;bottom:calc(-1*8px);content:"";left:50%;margin-left:calc(-1*8px);position:absolute;width:0;height:0;border-color:#fff transparent transparent transparent;border-width:8px 8px 0 8px}.tooltip:not(.tooltip--open) .tooltip__main{pointer-events:none}.tooltip--open .tooltip__main{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.tooltip--bottom .tooltip__main{bottom:auto;box-shadow:0 -4px 15px rgba(51,51,51,.12);top:calc(100% + 12px)}.tooltip--bottom .tooltip__main:after{border-width:0 8px 8px 8px;border-color:transparent transparent #fff transparent;bottom:auto;top:-8px}.tooltip--bottom:not(.tooltip--open) .tooltip__main{-webkit-transform:translateY(8px);transform:translateY(8px)}.tooltip--right .tooltip__main{left:-16px;margin:0}.tooltip--right .tooltip__main:after{left:28px}.tooltip--left .tooltip__main{left:auto;margin:0;right:-16px}.tooltip--left .tooltip__main:after{left:auto;right:20px}.tooltip__btn{padding:0;transition:color 250ms ease}.topnav{margin:28px 0 16px;position:relative;z-index:5}.topnav__selected:before{content:""}.topnav__list{margin:0}.topnav__list li{padding-left:0;margin:0}.topnav__list li:after{display:none}.unavailabelBox{background-color:#f7f5f0;border-radius:8px;padding:16px}.checkoutStep__main .unavailabelBox{margin-bottom:12px}.unavailabelBox__title{font-size:1rem;font-weight:500;margin-bottom:8px}.minibasket .unavailabelBox__title{font-size:1rem}.unavailabelBox .listTools--noBorder{border:none;margin:-8px 0;padding-bottom:0;padding-top:12px}.basketTable__row--unavail .product__img{opacity:.5}.basketTable__row--unavail .product__title{color:#838385}.playvideo{position:relative}.playvideo__icon{--playsize: 32px;color:var(--buttonColor);cursor:pointer;font-size:2rem;padding:0;transition:color 250ms ease}.playvideo__icon:before{position:relative;z-index:1}.playvideo__icon:after{background-color:#fff;border-radius:50%;content:"";left:50%;margin:calc(1px - var(--playsize)/2) 0 0 calc(1px - var(--playsize)/2);position:absolute;top:50%;width:calc(var(--playsize) - 2px);height:calc(var(--playsize) - 2px)}.playvideo__icon:active{color:var(--buttonColorActive)}.playvideo__icon--lg{--playsize: 64px;font-size:4rem}.userAccountBtn{background-color:#65141b;border-radius:50%;color:#fff;cursor:pointer;font-size:1.25rem;font-weight:700;position:relative;transition:background-color 250ms ease-out;width:44px;height:44px}.userMenu{display:none;position:absolute;top:100%;z-index:3}.userMenu__content{background-color:#fff;border-radius:8px;box-shadow:0px 2px 12px rgba(51,51,51,.08);padding:60px 20px 20px 20px;position:relative;z-index:2;margin-top:12px}.userMenu__close{position:absolute;right:20px;top:20px;color:#333;font-size:1.5rem;cursor:pointer}.userMenu__list{margin:0}.userMenu__list li{padding-left:0;margin:0}.userMenu__list li:after{display:none}.userMenu__overlay{position:absolute;z-index:-1;cursor:pointer}.userMenu__content{width:296px}.userMenu__name{font-size:1.125rem;font-weight:500;margin-bottom:16px;text-align:center}.userMenu__listItem{color:var(--color);font-size:1rem;line-height:1.25;margin:0}.userMenu__listItem:not(:first-child){border-top:1px solid #ececec}.userMenu__link{--color: #333;--hoverColor: #838385;align-items:center;color:var(--color);display:inline-block;padding:16px 0;vertical-align:top}.userMenu__link--logout{--color: #F47920;--hoverColor: #F68D41}.gridBoxes{--gridBoxSpace: 12px;display:flex;flex-wrap:wrap;margin:40px 0 40px calc(-1*var(--gridBoxSpace))}.gridBoxes__box{margin:var(--gridBoxSpace);width:calc(33.33% - var(--gridBoxSpace)*2)}.contentBox{align-items:center;background-color:#f7f7f7;display:inline-flex;padding:40px;position:relative}.contentBox__icon{color:#ccc;font-size:2.75rem;margin-bottom:24px}.contentBox__title{color:#666;font-size:1.25rem;margin:0 0 24px}.contentBox__text{color:#999;font-size:0.875rem}.contentBox__text:last-child{margin-bottom:0}.contentBox__link{color:inherit;transition:color 250ms ease}.contentBox__link:before{content:""}.accountPage{position:relative}.userNavBlock{--tabItemHeight: 48px;margin-top:calc(var(--tabItemHeight)*-1 + 1px);margin-bottom:88px}.userNav{margin:0;display:flex;width:100%}.userNav li{padding-left:0;margin:0}.userNav li:after{display:none}.userNav__item{border-top-left-radius:8px;border-top-right-radius:8px;flex:1 1 0;overflow:hidden;text-align:center;height:var(--tabItemHeight)}.userNav__item:not(:last-child){margin-right:10px}.userNav__link{font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.33;align-items:center;background-color:#f2efe8;color:#838385;display:flex;flex-direction:column;justify-content:center;padding:12px;position:relative;transition:background-color 250ms ease-out;height:100%}.userNav__link.active{background-color:#fff;color:#333}.userNav__link:after{content:""}.accountDetails{align-items:flex-start;display:flex;justify-content:space-between}.accountDetails__form{flex:1}.accountDetails__box{width:376px;max-width:100%}.socialLogins{background-color:#f5f5f5;padding:24px}.socialLogins__title{margin:0 0 16px}.addBox{align-items:center;background:#f5f5f5;border:1px dashed #d6d6d6;border-radius:4px;display:flex;flex-direction:column;justify-content:center;padding:40px;position:relative;text-align:center}.addBox__icon{color:#c2c2c2;font-size:3.75rem;margin-bottom:32px}.addBox__text{margin-bottom:32px}.addBox__link:before{content:""}.addresses{--addressesGap: 32px;display:flex;gap:var(--addressesGap);flex-wrap:wrap}.addresses__box{border:1px solid #d6d6d6;border-radius:4px;padding:24px}.addresses__box,.addresses .addBox{width:calc(33.33% - var(--addressesGap)*2/3)}.addressBox{position:relative}.addressBox__tools{display:flex;flex-direction:column;position:absolute;right:4px;top:4px}.addressBox .address,.addressBox .orderSum__col,.addressBox address{margin-bottom:24px;padding-right:16px}.addressBox .form__row{margin-left:calc(-1*var(--fieldColumnSpace)/2);width:calc(100% + var(--fieldColumnSpace))}.addressBox .form__row:last-child{margin-bottom:calc(-1*var(--fieldRowSpace))}.address__title{color:#333;font-size:0.875rem;font-weight:bold;margin:0 0 16px}.address__more{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.address__more:last-child{margin-bottom:0}.miniBasketButton{font-size:1.125rem;font-weight:700;justify-content:space-between;padding:4px 10px;width:152px}.miniBasketButton__icon{display:inline-flex;font-size:1.5rem;margin-top:10px;position:relative}.miniBasketButton__no{margin-left:-6px;margin-top:-10px}.miniBasketButton .priceBlock{color:#fff}.miniBasketButton .priceBlock__price{font-weight:700}.basketMain__content{--mainLayoutSpace: 56px;padding-left:0}.basketTable{--imgWidth: 96px;--imgMarginRight: 24px}.checkoutStep__main .basketTable{margin-inline:auto;max-width:820px}.basketTable__row{align-items:center;display:flex;padding:4px 104px 4px 20px;position:relative}.basketTable__row:not(.basketTable__row--head){border-bottom:1px solid #ececec}.basketTable__row--head{align-items:flex-end;background-color:#f2efe8;border-radius:8px;padding-block:16px}.basketTable__row--head .basketTable__cell{color:#333;font-size:0.9375rem;font-weight:500}.basketTable__row--head .basketTable__cell:first-child{padding-left:16px}.basketTable__cell--price{flex-shrink:0;margin-right:40px;text-align:right;width:80px}.basketTable__cell--quant{flex-shrink:0;margin:0 32px;text-align:center;width:152px}.basketTable__row--head .basketTable__cell--quant{text-align:left}.basketTable__cell--button{width:232px}.minibasket .basketTable__cell--button{margin:0;width:100%}.basketTable__cell--more{width:100%}.basketTable__cell .product__img{flex-shrink:0;margin:0 var(--imgMarginRight) 0 0;padding:0;width:var(--imgWidth)}.basketTable__cell .product__title{margin:0;position:relative}.basketTable__cell .product__avail{margin:8px 0 0}.basketTable__no{font-weight:400}.basketTable .priceBlock__price{font-size:1.25rem;line-height:1.5}.basketTable .priceBlock__price--init{font-size:0.9375rem;line-height:1.467;margin-top:-5px}.basketTable__remove{margin-top:-16px;position:absolute;right:20px;top:50%}.basketTable .product__inner{align-items:center;flex-direction:row;position:static}.basketTable .fav{font-size:2rem;margin-top:-16px;right:60px;top:50%}.minibasket .basketTable{--imgWidth: 80px;--basketProductSpaceV: 16px}.minibasket .basketTable .basketTable__row:not(.basketTable__row--head){align-content:center;align-items:flex-start;flex-wrap:wrap;padding:var(--basketProductSpaceV) 8px var(--basketProductSpaceV) 96px;min-height:112px}.minibasket .basketTable .basketTable__remove{font-size:1.5rem;margin:0;right:8px;top:var(--basketProductSpaceV);z-index:2}.minibasket .basketTable .basketTable__cell--product{flex:auto;width:100%}.minibasket .basketTable .basketTable__cell--product:not(:last-child){margin-bottom:8px}.minibasket .basketTable .basketTable__cell--quant{margin:0}.minibasket .basketTable .basketTable__cell--price{align-items:flex-end;display:inline-flex;flex:1;justify-content:flex-end;margin:0;width:auto;height:34px}.minibasket .basketTable .fav{font-size:1.5rem;margin:0;right:40px;top:var(--basketProductSpaceV)}.minibasket .basketTable .product__img{left:8px;margin-top:-40px;position:absolute;top:50%}.minibasket .basketTable .product__title{font-size:0.9375rem;padding-right:72px}.sideBasket{background:#fff}.sideBasket__title:before{content:""}.cards{align-items:center;display:flex;flex-wrap:wrap;justify-content:center;margin:16px 0 0}.cards figure{margin:4px}.cards img{display:inline-block;vertical-align:top}.cards--inline{display:inline-flex;margin:-4px 0}.minibasket{--miniBasketWidth: 544px;--miniBasketSpaceH: 16px;--miniBasketProductSpaceTop: 16px;--miniBasketProductSpaceH: 12px;z-index:2}.minibasket__inner{background-color:#fff;position:fixed;right:0;top:var(--top);z-index:10;width:var(--miniBasketWidth);height:var(--windowHeight)}.minibasket__top{flex:1;scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.minibasket__top::-webkit-scrollbar{width:6px;height:6px}.minibasket__top::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.minibasket__top::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.minibasket__top::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.minibasket__top::-webkit-scrollbar-track{background:transparent}.minibasket__header{align-items:center;display:flex;padding:32px var(--miniBasketSpaceH) 24px}.minibasket__header .close-mini-cart{margin-left:auto}.minibasket__title{color:#333;font-size:1.25rem;font-weight:500;margin:0 16px 0 0}.minibasket__content{padding:0 var(--miniBasketSpaceH)}.minibasket__product{border-bottom:1px solid #ececec;padding:var(--miniBasketProductSpaceTop) var(--miniBasketProductSpaceH) 24px;position:relative}.minibasket__remove{position:absolute;right:var(--miniBasketProductSpaceH);top:var(--miniBasketProductSpaceTop);z-index:2}.minibasket__bottom{background:#fff;box-shadow:0px -2px 10px rgba(51,51,51,.1);padding:24px}.basketInfo{color:#595959;font-size:0.8125rem;letter-spacing:-0.02em;margin:16px 0 0;text-align:center}.sideBasket .basketInfo{margin-top:8px}.miniCart__main{display:flex;flex-direction:column;justify-content:space-between;height:100%}.miniCart__holder .loader{display:flex;min-height:240px}.miniCart__holder .loader__item{background-color:#999}.quantinyNo{align-items:center;background-color:#f0f0f0;border-radius:5px;display:inline-flex;justify-content:center;width:64px;height:48px}.form--basket{margin-block:32px}.secureCheckout{align-items:center;display:inline-flex}.secureCheckout__img{width:142px}.secureCheckout figure{width:100%}.secureCheckout figure picture{display:block;padding-top:calc(28 / 142 * 100%);position:relative;width:100%}.secureCheckout figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.checkout{--checkoutSpaceTop: 77px;padding:var(--checkoutSpaceTop) 0 0}.checkout .productsSum{position:-webkit-sticky;position:sticky;right:0;top:var(--checkoutSpaceTop)}.checkout__title{font-size:2.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.19;text-align:center;margin:0 0 99px}.checkout>h2{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.53;text-align:center;margin:0 0 25px}.checkout .acc__content{padding:0 0 32px}.checkoutSteps{counter-reset:checkoutstep}.checkoutStep{--checkoutStepSpace: 24px;border-bottom:1px solid #c2c2c2}.checkoutStep:first-child{border-top:1px solid #c2c2c2}.checkoutStep:last-child{border-bottom:0}.checkoutStep--bottomInfo{border:0;padding-top:5px;color:#333}.checkoutStep--bottomInfo p{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;color:inherit;margin:0 0 8px}.checkoutStep.checkoutStep--final .checkoutStep__main{padding:var(--checkoutStepSpace) 0}.checkoutStep__main .form,.checkoutStep__main .form__row:last-child .field{margin-bottom:0}.checkoutStep__edit{margin:0 calc(-1*var(--iconButtonSpace));position:absolute;right:var(--checkoutStepSpace);top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.commentsBlock{display:none;position:relative}.showComments{left:0;position:absolute;top:0;transition:opacity 250ms ease-in-out}.showComments.active{opacity:0;pointer-events:none}.checkoutProducts{margin-bottom:16px}.checkoutProducts .acc__header{justify-content:space-between}.checkoutProducts .acc__icon{margin-right:-8px}.checkoutMsg{color:#333;text-align:center;margin:0 0 40px}.checkoutMsg img{margin-bottom:19px;width:124px;height:124px}.checkoutMsg__title{font-size:1.875rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2;color:inherit;margin:0}.checkoutMsg p{color:inherit;margin:0 0 11px}.checkoutMsg .button{margin-top:43px}.checkoutMsg__code{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37}.checkoutMsg__code strong{font-size:1.125rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2}.checkoutTracking{align-items:center;background-color:#f2efe8;border-radius:8px;color:#333;display:flex;margin:0 auto 60px;padding:20px;max-width:821px}.checkoutTracking__inner{flex-grow:1;width:100%}.checkoutTracking p{font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.33;color:inherit;margin:0 0 5px}.checkoutTracking ul li{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47}.checkoutTrackingMsg{text-align:center;color:#333;margin:40px 0}.checkoutTrackingMsg p{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37;color:inherit;margin:0}.printRow{display:flex;justify-content:flex-end}.printRow .icon{color:#333}.loyalty{background-color:#f7f5f0;border-radius:8px;padding:20px;margin:40px 0 48px}.loyalty__img{flex-shrink:0;font-size:0;display:flex;align-items:center}.loyalty__img img{width:80px;height:80px}.loyalty__img img:not(:last-child){margin-right:8px}.loyalty__inner{display:flex;flex-grow:1}.loyalty__col{flex:1 1 0}.loyalty__col:not(:last-child){margin-right:1px}.loyalty__row{align-items:center;display:flex;flex-flow:row;flex-wrap:nowrap;flex-grow:1}.loyalty__row:not(:last-child){margin-bottom:1px}.loyalty__cell{align-items:center;background-color:#fff;display:flex;flex-flow:row;flex-wrap:nowrap;flex:1 1 0;justify-content:space-between;padding:10px 14px;height:100%}.loyalty__cell span{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28}.loyalty__cell span:first-child{margin-right:15px}.loyalty__table{display:flex;flex-grow:1;flex-flow:column}.loyaltyList{text-align:left;max-width:520px;margin:40px auto 30px;padding:0}.loyaltyList li{font-size:1.25rem;font-weight:400;letter-spacing:-0.03em;line-height:1.5;display:inline-block}.loyaltyList li:not(:last-child){margin-bottom:13px}.loyaltyList li:after{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.loyaltyList li .field__input--inlineB{margin:0 5px}.loyaltyList li:nth-child(2):after{top:20px}.contactinfo{margin-bottom:42px}.contactinfo__section{margin-bottom:32px}.contactinfo__subtitle{font-weight:500;margin:0 0 8px}.contactinfo__link{align-items:center;color:#333;display:inline-flex;flex-wrap:wrap;font-size:0.8125rem;font-weight:500;line-height:1;margin:8px 0}.contactinfo__link:active{color:#f47920}.contactinfo__link:active .contactinfo__icon{color:#f47920}.contactinfo__icon{color:#838385;font-size:1.5rem;margin:0 8px 0 4px}.contactinfo__note{color:#838385;font-size:0.875rem;font-weight:400;letter-spacing:-0.01em}.gallery{display:flex;flex-wrap:wrap;max-width:1017px;margin:0 auto 40px}.gallery__figure{width:100%;margin:10px 0;max-width:318px}.gallery__figure figure{width:100%}.gallery__figure figure picture{display:block;padding-top:calc(203 / 318 * 100%);position:relative;width:100%}.gallery__figure figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.gallery__figure img{border-radius:8px;cursor:pointer}.galleryMainImg{width:100%;margin:0 0 20px;--swiper-navigation-size: 40px}.galleryMainImg__slide img{max-height:calc(100vh - 220px);border-radius:8px}.galleryThumbs{max-width:468px;margin:0 auto;padding-bottom:30px;width:100%}.galleryThumbs .swiper-slide-thumb-active img{border-color:#74b11f}.galleryThumbs__slide{cursor:pointer}.galleryThumbs img{border-radius:6px;border:solid 2px transparent}.gallerySlider{height:100%;display:flex;flex-wrap:wrap;align-items:center;flex-direction:column;justify-content:center;padding:20px 10px}.history{--historycnt: 92px;--hthumb: 160px}.history__sections{border-bottom:1px solid #ececec;margin-bottom:32px;padding-bottom:40px}.history__mainimg{margin-bottom:72px;position:relative}.history__mainimg figure{width:100%}.history__mainimg figure picture{display:block;padding-top:calc(500 / 984 * 100%);position:relative;width:100%}.history__mainimg figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.history__section{display:flex;flex-wrap:wrap}.history__date{font-size:0.875rem;font-weight:700;letter-spacing:-0.02em;padding-right:52px;position:relative;text-align:right;width:var(--historycnt)}.history__date:before,.history__date:after{content:"";position:absolute;right:44px}.history__date:before{width:10px;height:10px;background:#f47920;border-radius:50%;margin-right:-5px;top:4px}.history__date:after{border-left:1px dashed #a6a6a6;top:22px;height:calc(100% - 22px - 5px)}.history__content{margin-bottom:40px;width:calc(100% - var(--historycnt))}.history__thumb{flex-shrink:0;position:relative;width:var(--hthumb)}.history__thumb figure{width:100%}.history__thumb figure picture{display:block;padding-top:calc(120 / 160 * 100%);position:relative;width:100%}.history__thumb figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.history__description p:last-child{margin-bottom:0}.landingList{--colGap: 16px;--landingItemSpace: 16px;--landingTitleMobSpace: 8px;display:flex;flex-wrap:wrap;-webkit-column-gap:var(--colGap);-moz-column-gap:var(--colGap);column-gap:var(--colGap);row-gap:48px}.landingList__item{display:inline-flex;flex-direction:column;padding:var(--landingItemSpace) 0;position:relative;width:calc(16.66% - 5*var(--colGap)/6)}.landingList__item.active{z-index:1}.landingItem{text-align:center}.landingItem--box{background:#fff;border-radius:8px;padding:16px 16px 24px}.swiper-slide-visible .landingItem--box{box-shadow:0px 0px 24px rgba(51,51,51,.08)}.landingItem__img{padding:0 var(--landingItemSpace);pointer-events:none}.landingItem__img figure{width:100%}.landingItem__img figure picture{display:block;padding-top:calc(156 / 205 * 100%);position:relative;width:100%}.landingItem__img figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.landingItem--box .landingItem__img{margin-bottom:12px}.landingItem__link{color:var(--buttonColor);font-size:0.9375rem;font-weight:500;margin:16px 0 0}.landingItem__link:before{content:""}.landingItem__link:active{color:var(--buttonColorActive)}.landingItem__title{align-items:center;border-radius:8px;color:#333;display:inline-flex;flex:1;font-size:0.9375rem;font-weight:500;justify-content:center;line-height:1.4;margin:0;padding:var(--landingItemSpace);transition:color 250ms ease}.landingItem__title:before{background:url(../media/wood.png) repeat center;content:"";opacity:0;transition:opacity 250ms ease-in-out;z-index:-1}.landingItem:not(.landingItem--box) .landingItem__title{overflow:hidden;position:relative;pointer-events:none}.landingItem--box .landingItem__title:active{color:var(--buttonColorActive)}.landingItem--box .landingItem__title:after{content:""}.landingItem__desc{color:#838385;font-size:0.8125rem;letter-spacing:-0.02em;line-height:1.23;margin:8px 0 0}.landingItem__submenu{margin:0;scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;background:#fff;box-shadow:0px 2px 12px rgba(51,51,51,.08);border-radius:8px;display:none;left:0;padding:var(--landingItemSpace) 0;position:absolute;top:calc(100% - var(--landingItemSpace) + 8px);width:100%;max-height:472px}.landingItem__submenu li{padding-left:0;margin:0}.landingItem__submenu li:after{display:none}.landingItem__submenu::-webkit-scrollbar{width:6px;height:6px}.landingItem__submenu::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.landingItem__submenu::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.landingItem__submenu::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.landingItem__submenu::-webkit-scrollbar-track{background:transparent}.landingItem__submenuItem{font-size:0.875rem;line-height:1.429;margin:0;text-align:left}.landingItem__submenuLink{color:#333;display:block;padding:12px var(--landingItemSpace);transition:color 250ms ease}.newListLink:before{color:#f47920}.listsBlock{z-index:3}.listsBlock__inner{background:#fff;box-shadow:0px 4px 10px rgba(51,51,51,.25);border-radius:6px;padding:16px;position:relative}.listsBlock__title{color:#333;font-size:0.875rem;font-weight:500;line-height:1;margin:0 0 24px}.listsBlock__list{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;border-bottom:1px solid #c2c2c2;margin-bottom:16px;padding-bottom:16px;max-height:176px}.listsBlock__list::-webkit-scrollbar{width:6px;height:6px}.listsBlock__list::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.listsBlock__list::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.listsBlock__list::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.listsBlock__list::-webkit-scrollbar-track{background:transparent}.listsBlock__close{position:absolute;right:0;top:0}.listsBlock__item:not(:first-child){margin-top:16px}.listsBlock__item:not(:last-child){margin-bottom:16px}.listsBlock__name{align-items:center;color:#333;display:flex;font-size:0.875rem;font-weight:500;line-height:1.2;padding-left:36px;position:relative;min-height:24px}.listsBlock__name:before{font-size:2rem;left:0;margin-top:-16px;position:absolute;top:50%;width:32px;height:32px}.myLists:not(.myLists--grid){text-align:right}.myLists--grid{--listsGap: 24px;display:flex;flex-wrap:wrap;gap:var(--listsGap)}.myLists--grid .myList{width:calc(33.33% - 2*var(--listsGap)/3)}.myLists--row{--listsGap: 24px;display:flex;gap:var(--listsGap)}.myLists__new{margin:12px 0}.myList{align-items:center;display:flex;justify-content:flex-start;position:relative;text-align:left}.myList:not(.myList--box){border-bottom:1px solid #c2c2c2;padding:12px 80px 12px 0}.myList--box{border:1px solid #d8d8d8;border-radius:8px;padding:24px 12px;min-height:80px}.myList--box:before{content:""}.myList--box:after{box-shadow:0px 6px 16px rgba(51,51,51,.15);content:"";opacity:0;pointer-events:none;transition:opacity 250ms ease-in-out}.myList--box:before{bottom:0;color:rgba(255,255,255,.6);font-size:4rem;position:absolute;right:0}.myList--box.myList--new:before{color:rgba(244,121,32,.5)}.myList--box.myList--fav:before{content:""}.myList--box.myList--fav:before{color:rgba(51,51,51,.1)}.myList--new{border-color:#f47920;border-style:dashed}.myList__icon{align-items:center;display:inline-flex;flex-shrink:0;justify-content:center}.myList__icon:after{background-color:var(--listColor);content:"";border-radius:8px;z-index:-1}.myList:not(.myList--box) .myList__icon{font-size:2rem;margin-right:20px;position:relative;width:60px;height:60px}.myList:not(.myList--box) .myList__icon:before{width:32px;height:32px}.myList--box .myList__icon{font-size:2rem;margin-right:8px}.myList--box .myList__icon:before{width:32px;height:32px}.myList__title{color:var(--buttonColor);display:block;font-size:1.125rem;font-weight:700;line-height:1.2;margin:0}.myList__title:active{color:var(--buttonColorActive)}.myList__title:after{content:""}.myList--box .myList__title{font-size:1.375rem}.myList--editView .myList__title{padding-right:48px}.myList--box .myList__link,.myList--box .myList__titleInner{position:relative;z-index:1}.myList__link{pointer-events:none}.myList__no{font-size:0.9375rem;font-weight:500}.myList__tools{display:flex;margin-top:-12px;position:absolute;right:12px;top:50%}.myList__tools .iconButton:not(:last-child),.myList__tools .selectedFilters__remove:not(:last-child){margin-right:8px}.myList__edit{position:absolute;right:8px;top:8px}.myList__new:after{content:""}.productList .product,.productsSlider .product{box-shadow:0 2px 12px rgba(51,51,51,.08);border-radius:8px;padding:var(--productPadding);transition:box-shadow 350ms ease-out}.productList{--productSpaceH: 24px;--productSpaceV: 24px;display:flex;flex-wrap:wrap;gap:var(--productSpaceV) var(--productSpaceH)}.productList .product{width:calc(20% - 4*var(--productSpaceH)/5)}.productList .quantity{max-width:100%}.listTools{border-bottom:1px solid #c2c2c2;display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:-8px;padding:0 0 8px}.listTools__counter{font-size:0.875rem;font-weight:400;letter-spacing:-0.01em;line-height:1.28;margin-right:auto}.minibasket .listTools{justify-content:flex-start}.listTools .link,.listTools .text a,.text .listTools a,.listTools p a,p .listTools a,.listTools .button{margin-top:8px;margin-bottom:8px;white-space:nowrap}.listTools .link:not(:last-child),.listTools .text a:not(:last-child),.text .listTools a:not(:last-child),.listTools p a:not(:last-child),p .listTools a:not(:last-child),.listTools .button:not(:last-child){margin-right:16px}.orderRow{--orderColGap: 32px;--orderRowGap: 16px;--orderProductWidth: 80px;--orderProductGap: 8px;--orderProductsWidth: calc(var(--orderProductWidth)*3 + var(--orderProductGap)*2);border-bottom:1px solid #e6e6e6;padding:24px 0}.orderRow__items{grid-area:1/1/3/2;text-align:center}.orderRow__itemsInner{display:flex;gap:var(--orderProductGap)}.orderRow__itemsInner:not(:last-child){margin-bottom:8px}.orderRow__itemsInner .product{width:var(--orderProductWidth)}.orderRow__itemsInner .product__img{margin:0}.orderRow__status{grid-area:1/2/2/5}.orderRow__info--1{grid-area:2/2/3/3}.orderRow__info--2{grid-area:2/3/3/4}.orderRow__info--3{grid-area:2/4/3/5}.orderHistory{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;--outerPaddingY: 24px;--outerPaddingX: 16px;--qrWidth: 123px;--qrMargin: 19px;background-color:#f7f5f0;border-radius:8px;display:flex;flex-wrap:wrap;padding:var(--outerPaddingY) var(--outerPaddingX);position:relative;width:100%}.orderHistory:not(:last-child){margin-bottom:24px}.orderHistory__qr{width:var(--qrWidth);flex-shrink:0}.orderHistory__section{display:flex;flex:1 1 0;padding-right:20px}.orderHistory__section--top{align-items:center;flex-basis:100%;flex-flow:row;margin-bottom:20px;padding-right:130px}.orderHistory__section--top .copyText{margin-left:10px}.orderHistory__sectionInner{display:flex;flex-flow:column}.orderHistory strong{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37}.orderHistory figure{width:100%}.orderHistory figure picture{display:block;padding-top:calc(123 / 123 * 100%);position:relative;width:100%}.orderHistory figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.orderHistory.highlight{background-color:#fef8c6}.orderHistory.highlight .indicator{font-size:0.8125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.15;background-color:#fff;padding:4px 8px;border-radius:8px}.orderHistory.highlight .indicator:before{display:none}.orderHistory .indicator{position:absolute;top:var(--outerPaddingY);right:var(--outerPaddingX)}.copyText{align-items:center;display:inline-flex;position:relative}.copyText__btn{margin:calc(-1*var(--iconButtonSpace)) calc(-1*var(--iconButtonSpace)) calc(-1*var(--iconButtonSpace)) 0}.copyText__tooltip{background:#fff;border-radius:10px;-webkit-filter:drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2));filter:drop-shadow(1px 2px 2px rgba(51, 51, 51, 0.1)) drop-shadow(2px 4px 4px rgba(51, 51, 51, 0.2));font-size:0.875rem;left:100%;line-height:1.3;margin-left:8px;opacity:0;padding:12px;position:absolute;top:50%;-webkit-transform:translate3d(8px, -50%, 0);transform:translate3d(8px, -50%, 0);transition:opacity 200ms ease-out,-webkit-transform 250ms ease-out;transition:opacity 200ms ease-out,transform 250ms ease-out;transition:opacity 200ms ease-out,transform 250ms ease-out,-webkit-transform 250ms ease-out}.copyText__tooltip--open{opacity:1;-webkit-transform:translate3d(0, -50%, 0);transform:translate3d(0, -50%, 0)}.orderSum{--orderSumColSpace: 24px;display:flex;flex-wrap:wrap}.orderSum--border{border:1px solid #fff;margin-bottom:24px}.orderSum--border .orderSum__col{padding:var(--orderSumColSpace)}.orderSum__col{flex:1}.orderSum__col:not(:first-child){padding-left:var(--orderSumColSpace)}.orderSum__col:not(:last-child){padding-right:var(--orderSumColSpace)}.orderSum__col .address:not(:last-child),.orderSum__col address:not(:last-child),.orderSum__col .orderSum__col:not(:last-child){margin-bottom:24px}.orderSum__title{color:#333;font-size:0.875rem;font-weight:bold;margin:0 0 8px}.orderSum__colTitle{color:#333;margin:0 0 8px}.orderStatusInfo{align-items:baseline;display:flex;flex-wrap:wrap;margin-bottom:32px}.orderNo{background-color:#f0f0f0;color:gray;border-radius:5px;font-size:1rem;padding:8px}.orderNo b{font-size:1.25rem}.orderStatusInfo .orderNo{margin-right:16px}.orderTrack{align-items:center;background-color:#fef8c6;border-radius:8px;display:flex;margin:0 0 20px;padding:8px 12px;position:relative}.acc__content .orderTrack{margin:2px 0}.orderTrack strong{font-weight:500}.orderTrack__action{margin-left:auto}.orderTrack__action:after{content:""}.orderTrack__inner{align-items:center;display:flex;margin-right:10px}.orderTrack__text{font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.23;color:#000;margin:0 13px 0 0}.productPage{--mainButtonWidth: 232px;--productImageColSpace: 56px;margin:48px 0 56px}.productPage__imageCol{position:relative}.productPage__imageMain{margin-bottom:64px}.productPage__imageMain .wishlistButton{position:absolute;right:20px;top:20px;z-index:2}.productPage__image{cursor:url("data:image/svg+xml,%3Csvg width='48' height='48' viewBox='0 0 48 48' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.5'%3E%3Ccircle cx='24' cy='24' r='24' fill='black'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.52 14.52H22.52V22.52H14.52V24.52H22.52V32.52H24.52V24.52H32.52V22.52H24.52V14.52Z' fill='white'/%3E%3C/g%3E%3C/svg%3E%0A") 16 16,pointer}.productPage__image figure{width:100%}.productPage__image figure picture{display:block;padding-top:calc(457 / 457 * 100%);position:relative;width:100%}.productPage__image figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.productPage__info{grid-area:product_content}.productInfo__flag{color:#999;font-size:0.875rem;line-height:1;margin:0}.productInfo__title{font-size:1.75rem;font-weight:500;letter-spacing:-0.03em;line-height:1.2;margin:8px 0}.productInfo__desc{color:#404040;font-size:0.9375rem;line-height:1.33;margin:0 0 24px}.productInfo__code{color:#838385;font-size:0.8125rem;letter-spacing:-0.01em;line-height:1.231;margin:0}.productInfo__code:not(:last-child){margin-right:12px}.productInfo__codeWrap{display:flex;margin-bottom:16px}.productInfo__quantity{margin:21px 0 36px}.productInfo .priceContainer{margin:0 0 16px}.productAttr{margin:0 0 40px;max-width:568px}.productAttr__title{display:flex;margin:0 0 8px}.productAttr__label{color:#999;font-size:0.875rem;font-weight:600;margin-right:8px}.productAttr__selected{color:#333;font-size:0.875rem;font-weight:600}.productAttr__selectedDefault{color:#ccc}.productAttr__main{--radioColorSpace: 8px;display:flex;flex-wrap:wrap;margin-left:calc(-1*var(--radioColorSpace));width:calc(100% + var(--radioColorSpace)*2)}.productAttr__main .radiobutton{margin:var(--radioColorSpace)}.addProduct{align-items:center;display:flex;margin:0 0 16px}.addProduct>*:not(:last-child){margin-right:16px}.addToCartButton:before{content:""}.addToCartButton--added{background-color:#333}.addToCartButton--added:before{content:""}.addToCartButton--added .addToCartButton__text--default{display:none}.addToCartButton--loading:before,.addToCartButton--loading .addToCartButton__text{display:none}.addToCartButton--loading .loader{display:block}.addToCartButton:not(.addToCartButton--added) .addToCartButton__text--added{display:none}.addToCartButton:not(.addToCartButton--loading) .loader{display:none}.productDetails{border-top:1px solid #d8d8d8;margin-top:32px;padding-top:32px}.productDetails__heading{color:#333;font-size:1.375rem;font-weight:500;letter-spacing:-0.03em;line-height:1.36;margin:0 0 32px}.productDetails__title{margin:0}.productDetails__content{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;color:#404040}.productDetails__content p{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47;color:inherit}.productDetails__content p:last-of-type{margin-bottom:0}.productDetailsNutrTable{display:inline-flex;flex-direction:column;flex-wrap:wrap;width:100%}.productDetailsNutrTable table{border-collapse:collapse;margin-bottom:15px}.productDetailsNutrTable table:last-child{margin-bottom:0}.productDetailsNutrTable th{border:none;font-size:0.8125rem;font-weight:500;color:#595959;letter-spacing:-0.02em;line-height:1.15;padding:6px 16px;text-align:right}.productDetailsNutrTable td{border-bottom:solid 1px #fff;color:#333;font-size:0.875rem;font-weight:500;letter-spacing:-0.01em;line-height:1.28;padding:10px 14px;text-align:right}.productDetailsNutrTable td:first-child{font-weight:400;text-align:left}.productDetailsNutrTable .highlight{background:#ececec}.productSliderModal .modal__wrap{padding:48px 32px 32px}.productThumbs{--thumbImageWidth: 80px}.productThumbs__slide{border-radius:6px;cursor:pointer;overflow:hidden;position:relative;width:var(--thumbImageWidth);height:var(--thumbImageWidth)}.productThumbs__slide:after{border:1px solid #f47920;border-radius:inherit;content:"";opacity:0;transition:opacity 250ms ease-in-out}.productThumbs__slide figure{width:100%}.productThumbs__slide figure picture{display:block;padding-top:calc(80 / 80 * 100%);position:relative;width:100%}.productThumbs__slide figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.productThumbs__slide.swiper-slide-thumb-active:after{opacity:1}.productThumbs .swiper-button-prev,.productThumbs .swiper-button-next{margin:0}.productThumbs .swiper-button-prev:before,.productThumbs .swiper-button-next:before{content:""}.productThumbs .swiper-button-prev:after,.productThumbs .swiper-button-next:after{z-index:2}.productThumbs .swiper-button-prev:after{content:""}.productThumbs .swiper-button-prev:after{content:""}.productThumbs .swiper-button-next:after{content:""}.productThumbs .swiper-button-next:after{content:""}.productThumbs .swiper-pagination{position:static;margin-top:19px}.productMainImg{--productMainImgWidth: 560px;margin:0 auto;width:100%;max-width:942px}.productMainImg__slide figure{width:100%;margin:0 auto;max-width:var(--productMainImgWidth)}.productMainImg__slide figure picture{display:block;padding-top:calc(560 / 560 * 100%);position:relative;width:100%}.productMainImg__slide figure img{inset:0;-o-object-fit:contain;object-fit:contain;position:absolute;width:100%;height:100%}.productMainImg .swiper-pagination{position:static}.productMainImg .imgControl{margin:60px 0 32px}.productHeader{background-color:#fff;box-shadow:0px 1px 1px rgba(51,51,51,.1),0px 2px 2px rgba(51,51,51,.15),0px 4px 4px rgba(51,51,51,.2);left:0;position:fixed;top:0;transition:-webkit-transform 250ms ease-out;transition:transform 250ms ease-out;transition:transform 250ms ease-out, -webkit-transform 250ms ease-out;-webkit-transform:translateY(-120%);transform:translateY(-120%);z-index:9;width:100%}.productHeader.active{-webkit-transform:translateY(0);transform:translateY(0)}.productHeader .product{align-items:center;display:flex;justify-content:space-between;margin:0 auto;padding:8px var(--gridSpace);max-width:var(--wrapper)}.productHeader .product__block{align-items:center;display:flex;position:relative}.productHeader .product__img{flex-shrink:0;margin:0 16px 0 0;width:72px}.productHeader .product__more{margin:0 16px 0 0}.productHeader .product__desc:last-child{margin-bottom:0}.productHeader .priceContainer{margin-right:16px}.notifyMe{position:relative;z-index:1}.notifyMe__button.active{background-color:#333;color:#fff}.notifyMe__button:not(.notifyMe__button--loading) .loader{display:none}.notifyMe__button.notifyMe__button--loading .notifyMe__buttonText{display:none}.notifyMe__main{background-color:#ebebeb;display:none;left:0;margin-top:16px;padding:24px;position:absolute;top:100%;width:560px;max-width:48vw}.notifyMe__form{margin-bottom:0}.notifyMe .field:last-child{margin-bottom:0}.cartAdd.error-message{background-color:#f9d0d5;color:#d91a32;display:inline-block;margin-bottom:16px;padding:8px}.sitemapnav{padding:24px 0 12px}.acc__content .sitemapnav{padding-top:8px}.sitemapnav__ul{list-style:none;margin:0 0 -24px}.sitemapnav__li{color:#333;font-size:0.9375rem;font-weight:500;letter-spacing:-0.03em;margin-bottom:24px;padding:0}.sitemapnav__li:after{content:none}.sitemapnav__link{color:var(--buttonColor)}.sitemapnav__link:active{color:var(--buttonColorActive)}.sitemap .acc:last-child{border-bottom:none}.sitemap .acc:last-child .acc__content{padding:0}.couponBlock__form{margin-bottom:0}.couponBlock__field{margin-bottom:0;position:relative}.couponBlock__field.completed .field__input{border:none;width:100px}.couponBlock__field:not(.completed) .field__input{padding-right:32px}.couponBlock__field:not(.completed) .field__wrap{width:100%}.couponBlock__btn{align-items:center;display:flex;font-size:1.5rem;justify-content:center;position:absolute;right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:32px;height:32px}.couponBlock__btn:before{content:""}.couponBlock__clear{font-size:1.5rem}.couponBlock__clear:before{content:""}.priceRow--coupon{color:#999;margin-top:0}.progressBlock__bar{background-color:#fff;border-radius:6px;margin:0 0 24px;height:6px}.progressBlock__progress{background-color:#666;border-radius:6px;height:100%}.progressBlock__info{color:gray;font-size:0.875rem;margin:0 0 8px}.progressBlock__remain{color:#333;font-size:1rem}@media (min-width: 480px){.sectionTitle__main:not(:last-child){margin-right:12px}.button{min-width:216px}.button--s{min-width:120px}.range__submit{min-width:initial}.storeLocator__form .field--small .button{min-width:initial}.table{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch}.table::-webkit-scrollbar{width:6px;height:6px}.table::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.table::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.table::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.table::-webkit-scrollbar-track{background:transparent}.table td:first-child{padding-left:var(--paddingExternalX)}.table td:last-child{padding-right:var(--paddingExternalX)}.miniBasketButton{min-width:152px}.checkoutTracking__action{min-width:185px}.addToCartButton{min-width:var(--mainButtonWidth)}.notifyMe__button{min-width:var(--mainButtonWidth)}}@media (min-width: 640px){.ordersBanner{align-items:center;display:flex}.form__title{margin-inline:calc(var(--fieldColumnSpace)/2)}.form--address .form__col{width:44%}.field--half{width:calc(50% - var(--fieldColumnSpace))}.field--map{margin:0}.field__map{position:absolute;right:0;top:0;width:50%}.form--address .field__map{width:calc(56% - 12px);height:100%}.field__map .field__mapInner{padding:0;height:100%}.radiobuttons--inline,.checkboxes--inline{flex-wrap:wrap}.formTip{margin-inline:calc(var(--fieldColumnSpace)/2)}.storeTileOrder__info{padding-right:32px}.storeTileOrder__actions{margin:auto 0 auto auto}.mapInfo .storeTileOrder__actions{margin-top:12px}.storeTileOrder__actions .button{font-size:0.8125rem;letter-spacing:-0.02em;min-height:34px}.storeTileOrder__actions .button .icon{margin:-3px 4px -3px 0}.gridBoxes{width:calc(100% + var(--gridBoxSpace)*2)}.contentBox{flex-direction:column;text-align:center}.contentBox__text{max-width:272px}.basketTable__cell--product{flex:1}.basketTable__cell--button{margin:0 72px 0 32px}.history__content{align-items:flex-start;display:flex}.history__description{flex:1;padding-left:20px}.listsBlock{display:none;position:absolute;right:20px;top:-8px;width:232px;max-width:calc(100% + 8px)}.wishlistButton.open .listsBlock{display:block}.listsBlock__bg{display:none}.listTools{margin-bottom:16px}.minibasket .listTools:not(.listTools--noBorder){margin-bottom:4px}.orderRow{display:grid;grid-template-columns:var(--orderProductsWidth) minmax(0, 1.1fr) minmax(0, 2.15fr) minmax(0, 0.75fr);grid-template-rows:fit-content(21px) 1fr;grid-column-gap:var(--orderColGap);grid-row-gap:var(--orderRowGap)}.productThumbs .swiper-button-prev,.productThumbs .swiper-button-next{width:100%}.productThumbs .swiper-button-prev{top:0}.productThumbs .swiper-button-prev:before{background:linear-gradient(to bottom, white 0%, rgba(255, 255, 255, 0) 100%)}.productThumbs .swiper-button-next{bottom:0;top:auto}.productThumbs .swiper-button-next:before{background:linear-gradient(to top, white 0%, rgba(255, 255, 255, 0) 100%)}.sitemapnav__ul{column-count:2}.sitemapnav__li{display:inline-block;padding-right:24px;vertical-align:top;width:100%}}@media (min-width: 640px)and (max-width: 767px){.basketTable__cell--button{margin:0 16px}.orderRow{grid-template-columns:minmax(0, 1fr) minmax(0, 2.25fr) minmax(0, 0.75fr);grid-template-rows:auto}}@media (min-width: 640px)and (min-width: 480px){.storeTileOrder__actions .button{min-width:120px}}@media (min-width: 768px){.mobileOnly{display:none}h2{font-size:1.625rem;letter-spacing:-0.03em;margin:0 0 32px}.footer__col:not(:last-child){margin-right:var(--footerColSpace)}.footer__col:not(:first-child){margin-left:var(--footerColSpace)}.header__tool{position:relative}.acc--mobOnly .acc__header{pointer-events:none}.acc--mobOnly .acc__icon{display:none}.acc--mobOnly:not(.open) .acc__content{display:block}.acc__headerInner{margin-right:32px}.acc__headerInnerTitle{min-width:250px}.acc__headerInnerTitle--info{min-width:initial}.acc__headerInnerTitle--sum{min-width:initial}.article--horizontal{display:flex;min-height:268px}.articleFeatured .article--horizontal{min-height:352px}.article--horizontal .article__img{flex-basis:35.62%;position:relative}.articleFeatured .article--horizontal .article__img{flex-basis:50%}.article--horizontal .article__img figure{inset:0;position:absolute;width:100%;height:100%;width:100%}.article--horizontal .article__img figure picture{display:block;padding-top:calc(352 / 626 * 100%);position:relative;width:100%}.article--horizontal .article__img figure img{inset:0;object-fit:contain;position:absolute;width:100%;height:100%}.article--horizontal .article__img figure img{object-fit:cover}.article--horizontal .article__img picture{inset:0;position:absolute;width:100%;height:100%}.article--horizontal .article__date{margin-bottom:4px}.article--horizontal .article__title{font-size:1.25rem;font-weight:500;letter-spacing:-0.03em;line-height:1.5;margin-bottom:16px}.articleFeatured .article--horizontal .article__title{font-size:1.625rem;font-weight:500;letter-spacing:-0.02em;line-height:1.38;margin-bottom:20px}.article--horizontal .article__info{align-items:flex-start;display:flex;flex-basis:50%;flex-grow:1;flex-flow:column;justify-content:center;padding:32px}.article--horizontal .article__text{-webkit-line-clamp:initial}.breadcrumb__item:not(:last-child){margin-right:12px;padding-right:12px}.breadcrumb__item:not(:last-child):before{background-color:#c2c2c2;content:"";margin-top:-11px;position:absolute;right:0;top:50%;width:1px;height:22px}.catalogue--wide .catalogue__img figure{width:100%}.catalogue--wide .catalogue__img figure picture{display:block;padding-top:calc(314 / 1258 * 100%);position:relative;width:100%}.catalogue--wide .catalogue__img figure img{inset:0;object-fit:contain;position:absolute;width:100%;height:100%}.deliveryFlowNav{margin-top:8px;right:88px}.radiobutton--deliveryType{background:#f2efe8;border-radius:8px;padding:32px 12px;min-height:272px}.radiobutton--deliveryType .radiobutton__label{padding:0;position:static}.form{margin-left:calc(-1*var(--fieldColumnSpace)/2);width:calc(var(--formMaxWidth) + var(--fieldColumnSpace));max-width:calc(100% + var(--fieldColumnSpace))}.orderTrack .indicator{border-right:1px solid #958d7b;margin-right:12px;padding-right:12px}.newsletter__inner{align-items:center;display:flex}.newsletter__input{width:280px}.newsletter__social{border-left:1px solid gray;margin-left:32px;padding-left:32px}.notifications{right:-4px}.notifications__overlay{display:none}.notificationsBtn{width:44px;height:44px;border-radius:50%;border:solid 2px #a6a6a6;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;font-size:1.625rem}.notificationsBtn:after{content:attr(data-items);top:-8px;right:-14px;width:26px;height:26px;background:#d91a32;border-radius:50%;color:#fff;font-size:0.8125rem;font-weight:700;line-height:1;letter-spacing:-0.02em;display:flex;flex-wrap:wrap;justify-content:center;align-items:center}.result__button{margin-top:40px}.result__mainimg{margin-bottom:16px}.result__mainicon{margin-bottom:40px}.sidemenu__item{line-height:1}.storeTileSpecs__iconWrap{margin-right:auto;padding-right:10px}.storeTileOrder--details .storeTileOrder__info{max-width:initial}.storeTileOrder--details .storeTileOrder__actions{max-width:initial}.storeLocator__form .field--full{max-width:344px}.storeLocator__form .field__inputClear{right:18px}.storeLocator__form .field__input--search{padding-right:40px}.storeLocator__form .field__inputSubmit{display:none}.timetable{margin-top:-20px}.timetableNavWrap{display:flex;justify-content:space-between;margin-bottom:12px}.timetableNav:before{display:none}.topnav__selected{display:none}.topnav__selected:after{display:none}.topnav__list{display:flex;flex-wrap:wrap;justify-content:center;text-align:center}.topnav__list li{display:inline-flex;margin:4px}.topnav__item{line-height:1}.topnav__link{border:1px solid #c2c2c2;border-radius:100px;color:#838385;display:block;font-size:0.875rem;font-weight:500;padding:12px 16px;transition:background-color 250ms ease-out}.topnav__link.selected{background-color:#333;border-color:#333;color:#fff}.unavailabelBox{margin-bottom:24px}.minibasket .unavailabelBox{margin-bottom:0}.userMenu{right:-4px}.userMenu__overlay{display:none}.accountDetails__form{margin-right:24px}.basketTable__row--head{margin-bottom:12px}.minibasket:not(.active) .minibasket__overlay{opacity:0;pointer-events:none}.secureCheckout__text{margin:0 8px 0 0}.checkoutTracking__inner{margin-right:10px}.loyalty__img{margin-right:20px}.loyalty__cell:not(:last-child){margin-right:1px}.gallery__figure{width:calc(50% - 20px);margin:10px}.orderHistory{min-height:140px}.orderHistory--qr{padding-left:calc(var(--outerPaddingY) + var(--qrWidth) + var(--qrMargin))}.orderHistory__qr{left:var(--outerPaddingX);position:absolute;top:50%;transform:translateY(-50%)}.orderHistory__section--top span{margin-right:5px}.orderHistory__section--top .orderHistory__sectionInner{flex-flow:row}.productPage{display:grid;grid-template-areas:"product_image product_content";grid-template-columns:minmax(300px, 457px) minmax(50%, 873px)}.productPage__imageCol{grid-area:product_image}.productPage__imageGrid{left:0;position:sticky;top:var(--headerHeight)}}@media (min-width: 768px)and (hover: hover)and (pointer: fine){.topnav__link:hover{background-color:#ececec;border-color:#ececec}}@media (min-width: 768px)and (max-width: 1023px){.articleFeatured .article--horizontal .article__img{flex-basis:40%}}@media (min-width: 768px)and (max-width: 1279px){.article--horizontal .article__title{font-size:1.25rem;font-weight:500;letter-spacing:-0.03em;line-height:1.5}.newsletter__social{margin-left:24px;padding-left:24px}}@media (min-width: 1024px){.tabletOnly{display:none}.header__bottom{padding:16px 0 0}.acc__headerInner{margin-right:104px}.acc__headerInnerTitle{min-width:295px}.acc__headerInnerTitle--info{min-width:initial}.acc__headerInnerTitle--sum{min-width:initial}.filters__itemsWrap{display:flex;flex-wrap:wrap;margin-right:24px}.filters__inner{align-items:flex-start;display:flex}.filters__item:not(:last-child){margin-right:24px}.filters__item:not(.filter--closed){z-index:3}.filters__titleWrap{margin-right:8px}.filters__title{padding:6px 0}.filters__titleWrap .filters__close{display:none}.filters__mobButton{pointer-events:none}.filters--checked .filters__mobButton:after{display:none}.filters__mobButtonText{display:none}.filters--listResults{position:relative;padding-right:160px}.filters--listResults .filters__titleWrap{position:static}.filters--listResults .filters__titleWrap .filtersClearAll{position:absolute;right:16px;top:50%;transform:translateY(-50%)}.filters--listResults.filters--checked .filters__titleWrap .filtersClearAll{display:block}.filters--listResults~.productListWrap .selectedFilters{outline:1px solid red;background:rgba(255,0,0,.2)}.filter{position:relative}.filter__content{background-color:#fff;border-radius:6px;box-shadow:0px 6px 16px rgba(51,51,51,.15);left:-20px;padding:56px 20px 16px 20px;position:absolute;top:-16px;width:248px}.filter__main>.scrollbar{max-height:160px}.filter__main--mobScroll>.scrollbar{overflow:initial}.filter__list--inline{display:flex;flex-wrap:wrap}.filter__list--showAll:not(.initialized) .filter__item:nth-child(n+9){display:none}.filter__list--showAll.initialized .filter__listScroll{max-height:var(--scrollListHeight)}.filter__listMore{display:none}.filter__list--inline .filter__item{margin:4px 0}.filter__list--inline .filter__item:not(:last-child){margin-right:16px}.filtersApply{margin-bottom:12px}.filters__titleWrap .filtersClearAll{display:none}.filtersLinks{margin-top:16px;text-align:center}.filtersLinks--all{display:none}.mainNav__list{display:flex}.mainNav__link--hasChildren:before{display:none}.megamenu{left:0;overflow:hidden;top:100%}.mainNav__item:not(.mainNav__item--active) .megamenu{pointer-events:none}.mainNav__item--active .megamenu{z-index:9}.megamenu__inner{padding:40px 0;position:relative;opacity:0;transform:translateY(-30px);transition:opacity 150ms ease-out,transform 250ms ease-out,visibility 10ms ease-out 250ms;visibility:hidden;min-height:584px}.mainNav__item--active .megamenu__inner{opacity:1;transform:translateY(0);transition:opacity 350ms ease-out 250ms,transform 350ms ease-out 250ms;visibility:visible}.mainNav__item--fadeOut .megamenu__inner{opacity:0;transform:translateY(80px);transition:opacity 350ms ease-out,transform 350ms ease-out}.megamenu__list{width:100%}.megamenu__list--level2{column-count:3}.megamenu__list--level2>li{break-inside:avoid;margin-bottom:40px}.megamenu__list li{font-size:0.875rem}.megamenu__close{position:absolute;right:32px;top:32px;z-index:1;width:40px;height:40px;min-height:auto}.megamenu__close:before{display:inline-block;vertical-align:top}.megamenu__back{display:none}.megamenu .wrapper{padding:0 var(--gridSpace)}.megamenuBg{background-color:#e6e6e6;left:0;position:absolute;top:100%;transform:scaleY(0);transform-origin:center top;transition:transform 350ms ease-out 50ms;width:100%;height:584px}.menuOpened .megamenuBg{transform:scaleY(1);transition:transform 350ms ease-out}.megamenuBg:after{content:"";position:absolute;right:0;top:0;width:50%;height:100%}.newsletter__form{align-items:center}.newsletter__label{margin-right:24px}.sidemenu{border-right:1px solid #ececec;height:100%;margin:0;padding-left:30px}.sidemenu .sidenav__list--level1{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;left:0;padding-right:16px;position:sticky;top:calc(8px + var(--headerHeight));max-height:calc(100vh - 16px - var(--headerHeight))}.sidemenu .sidenav__list--level1::-webkit-scrollbar{width:6px;height:6px}.sidemenu .sidenav__list--level1::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.sidemenu .sidenav__list--level1::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.sidemenu .sidenav__list--level1::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.sidemenu .sidenav__list--level1::-webkit-scrollbar-track{background:transparent}.sidemenu__selected{display:none}.sidemenu__selected:after{display:none}.sidemenu__list--level2{margin:0 0 12px}.sidemenu__link.selected{color:#f47920}.sidemenu__link--level1{margin-bottom:12px;font-size:1.125rem}.storeListWrap{display:flex}.storeListWrap [data-tabToggle-content]{display:block}.storeListWrap .tabToggle{display:none}.storeList{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;margin-right:24px;width:484px;max-width:45%;max-height:600px}.storeList::-webkit-scrollbar{width:6px;height:6px}.storeList::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.storeList::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.storeList::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.storeList::-webkit-scrollbar-track{background:transparent}.storeTile{margin-right:12px}.gallery__figure{width:calc(33.3% - 20px)}.myLists--row .myList{flex:1}.orderSum--border .orderSum__col:not(:last-child){border-right:1px solid #fff}.productPage__info{padding-left:var(--productImageColSpace)}.productDetailsNutrTable{max-width:714px}}@media (min-width: 1024px)and (hover: hover)and (pointer: fine){.sidemenu__link:not(.selected):hover{color:#838385}}@media (min-width: 1024px)and (max-width: 1279px){.megamenuBg{z-index:1}}@media (min-width: 1024px)and (max-width: 1365px){.megamenu__close{right:8px;top:8px}.megamenuBg{height:640px}}@media (min-width: 1280px){.mainLayout{--asideWidth: 352px;--gridSpace: 64px;--gridSpaceBorder: calc(var(--gridSpace)/2);display:grid;grid-template-areas:"aside content";grid-template-columns:var(--asideWidth) minmax(0, 1fr)}.mainLayout--rightAside{grid-template-areas:"content aside";grid-template-columns:minmax(0, 1fr) var(--asideWidth)}.mainLayout__aside{grid-area:aside;display:flex;flex-direction:column}.mainLayout__content{grid-area:content}.deliveryTypes{padding:0 20px}.burgerMenu{display:none}.mainLayout__aside .sideNav{border-right:1px solid #ececec}.basketMain{position:relative}.sideBasket{box-shadow:0px 6px 16px rgba(51,51,51,.15);border-radius:8px;position:sticky;right:0;top:0}.sideBasket__title{color:#333;font-size:1.25rem;font-weight:500;line-height:1.5;margin:0 0 16px;padding-left:40px;position:relative}.sideBasket__title:before{color:#a6a6a6;font-size:2rem;left:0;margin-top:-16px;position:absolute;top:50%}}@media (min-width: 1280px)and (max-width: 1365px){.mainLayout{--asideWidth: 296px;--gridSpace: 24px;--gridSpaceBorder: var(--gridSpace)}}@media (min-width: 1366px){.megamenu__title{padding-right:40px}}@media (min-width: 1920px){.goToTop{margin-right:calc(50vw - var(--wrapper)/2)}.productList .product{width:calc(16.6% - 5*var(--productSpaceH)/6)}}@media (min-width: 640px)and (max-width: 1365px)and (min-width: 1280px){.basketTable__cell--button{margin:0 12px 0 12px}}@media (max-width: 1599px){.basketMain__content{--mainLayoutSpace: 24px}.landingList{row-gap:32px}.landingList__item{width:calc(20% - 4*var(--colGap)/5)}.myLists--grid{--listsGap: 20px}.myLists--row{--listsGap: 16px}.productList .product{width:calc(25% - 3*var(--productSpaceH)/4)}}@media (max-width: 1365px){.basketTable{--imgMarginRight: 16px}.basketTable__row{padding-right:84px;padding-left:0}.basketTable__remove{right:0}.basketTable .fav{right:40px}.landingList__item{width:calc(25% - 3*var(--colGap)/4)}.myLists--grid .myList{width:calc(50% - var(--listsGap)/2)}.productList{--productSpaceH: 16px;--productSpaceV: 16px}}@media (max-width: 1365px)and (min-width: 1280px){.basketTable{--imgWidth: 80px}.basketTable__cell--price{margin-right:0}.basketTable__cell--quant{margin:0 12px}.basketTable__cell .product__title{font-size:1rem}.productList .product{width:calc(33.33% - 2*var(--productSpaceH)/3)}}@media (max-width: 1359px){.infoPopup{right:var(--gridSpace)}.productMainImg .swiper-button-prev,.productMainImg .swiper-button-next{display:flex}}@media (max-width: 1279px){:root{--gridSpace: 32px}.mainLayout{--mainLayoutSpace: var(--gridSpace)}.loginWrap__form{padding-block:56px}.loadMore{--loadMoreSpace: 32px}.mainNav__item{margin:0 8px}.burgerMenu{background:none;margin:0 16px 0 0;padding:0;width:32px;height:32px}.burgerMenu__bar{background:#404040;border-radius:15px;display:block;margin:6px auto;transition:all 350ms ease-out;height:2px;width:26px}.burgerMenu__bar--middle{margin:0 auto}.burgerMenu--opened .burgerMenu__bar--top{transform:translateY(8px) rotateZ(45deg)}.burgerMenu--opened .burgerMenu__bar--bottom{transform:translateY(-8px) rotateZ(-45deg)}.burgerMenu--opened .burgerMenu__bar--middle{width:0}.modal__wrap{padding-bottom:40px}.mainLayout__aside .sideNav{display:none}.simpleSlider--cat:not(.swiper-initialized) .swiper-slide{width:calc(25% - 16px)}.timetable{margin-bottom:56px}.addresses{--addressesGap: 24px}.addresses__box,.addresses .addBox{width:calc(50% - var(--addressesGap)/2)}.basket{margin-bottom:144px}.basketMain__content{padding-right:0}.sideBasket{box-shadow:0px -2px 10px rgba(51,51,51,.1);bottom:0;left:0;position:fixed;z-index:2;width:100%}.sideBasket__title{display:none}.landingList{row-gap:24px}.myList--box .myList__title{font-size:1.25rem}.orderRow{--orderColGap: 24px}.productPage{--productImageColSpace: 40px}.productMainImg{--productMainImgWidth: 500px}.productMainImg .imgControl{margin:30px 0 20px}}@media (max-width: 1279px)and (hover: hover)and (pointer: fine){.burgerMenu:not(.disabled):hover{background:transparent}.burgerMenu:not(.disabled):hover .burgerMenu__bar{background:#333}}@media (max-width: 1279px)and (min-width: 1024px){.checkoutProducts .product--mini .product__img,.checkoutProducts .minibasket__product .product__img{margin-right:8px;width:80px}.productListContent{margin-left:-20px;width:calc(100% + 40px)}}@media (max-width: 1023px){:root{--gridSpace: 24px}.pageTitle h1{font-size:2.375rem}.pageTitle--big{height:280px}.pageTitle--big h1{font-size:2.875rem}.ordersBanner{padding:16px}.ordersBanner__img{width:37%}.ordersBanner__icon{font-size:3rem;margin-right:16px}.ordersBanner__text{font-size:1rem}.tabletHidden{display:none}ul.listL{margin:16px 0 24px}ul.listL li{font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.33;padding-left:21px}ul.listCols{column-count:4}.footer{--footerSpaceTop: 56px}.footer__col{--footerColSpace: 24px}.acc--stripe .acc__header{font-size:1rem}.acc__headerInnerTitle--info{margin-left:auto}.articleList--contests .article{width:calc(33.33% - 2*var(--productSpaceH)/3)}.articleDetails__title{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.35}.articleDetails__title{font-size:1.5rem;font-weight:700;letter-spacing:0;line-height:1.16}.catalogueList{--productSpaceH: 24px}html.filtersOpened,html.filtersOpened body{overflow:hidden;height:calc(var(--windowHeight) - 1px)}.filters__itemsWrap{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;overflow-x:hidden;height:calc(100% - var(--mobFilterTopBar))}.filters__itemsWrap::-webkit-scrollbar{width:6px;height:6px}.filters__itemsWrap::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.filters__itemsWrap::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.filters__itemsWrap::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.filters__itemsWrap::-webkit-scrollbar-track{background:transparent}.filters--2levelOpened .filters__itemsWrap{overflow:visible}.filters__inner{background-color:#fff;left:0;padding:0 var(--filtersSpace) var(--mobFilterBottomBar);position:fixed;transform:translateX(-100%);transition:transform 350ms ease-out;top:var(--mobFiltersTop);z-index:9;width:100%;height:var(--windowHeight)}.filters:not(.filters--2levelOpened) .filters__inner{overflow:hidden}.filters--opened .filters__inner{transform:translateX(0)}.filters__item:not(:first-child){border-top:1px solid #c2c2c2}.filters__titleWrap{align-items:center;border-bottom:1px solid #a6a6a6;display:flex;padding:16px 0}.filters__title{font-size:1.125rem;font-weight:400}.filters__titleWrap .filters__close{margin-right:8px}.filters__mobButton{align-items:center;display:inline-flex}.filter__title{font-size:1rem;font-weight:500;padding:16px 32px 16px 0}.filter__titleIcon{font-size:1.5rem;line-height:1;right:0;top:50%;transform:translateY(-50%)}.filter__titleIcon:before{line-height:1}.filters__mobTitle .filter__titleIcon{left:0;right:auto}.filters__mobTitle .filter__titleIcon:before{transform:rotate(180deg);transform-origin:center}.filter__content{padding:12px 0}.filter__main{height:calc(100% - var(--mobFilterTopBar) - var(--mobFilterTopBarSpace))}.filter__main--mobScroll>.scrollbar{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;max-height:100%}.filter__main--mobScroll>.scrollbar::-webkit-scrollbar{width:6px;height:6px}.filter__main--mobScroll>.scrollbar::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.filter__main--mobScroll>.scrollbar::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.filter__main--mobScroll>.scrollbar::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.filter__main--mobScroll>.scrollbar::-webkit-scrollbar-track{background:transparent}.filter__list{height:100%}.filter__list--showAll .filter__listScroll{max-height:100%}.filter__list--more .filter__listWrap{height:100%}.filter__list--more .filter__listWrap>.filter__item{display:none}.filter__list--moreList{height:calc(100% - var(--searchHeight))}.filter__list--moreList .filter__listScroll{max-height:100%}.filter__showAll{display:none}.filter__listMore{height:100%}.filter__list--inline .filter__item{margin:16px 0}.filter__more{display:none}.filter:not(.filter--checked) .filtersClear{display:none}.filtersClearAll{margin-left:auto}.filtersLinks{align-items:center;bottom:0;display:flex;justify-content:center;left:0;padding:8px var(--filtersSpace);position:absolute;width:100%;height:var(--mobFilterBottomBar)}.filtersLinks:not(.filtersLinks--all){display:none}.form{margin-bottom:24px}.mainNavWrap{background-color:#ebebeb;left:0;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:16px var(--mobMenuHorPadding) 80px;position:fixed;top:var(--headerHeight);transition:transform 350ms ease-out;transform:translateX(-100%);width:100%;max-width:440px;height:calc(100% - var(--headerHeight))}.menuOpened .mainNavWrap{transform:translateX(0)}.menuOpened--level2 .mainNavWrap{overflow:hidden}.mainNav__item{color:#333;font-size:1.125rem;margin:8px 0}.mainNav__link{padding:8px 0;position:relative}.mainNav__link--hasChildren:before{font-size:1.5rem;margin-top:-12px;position:absolute;right:0;top:50%}.megamenu{background-color:#ebebeb;overflow:auto;-webkit-overflow-scrolling:touch;right:0;top:0;transition:transform 350ms ease-out;transform:translateX(-100%);z-index:1;height:100%}.mainNav__item--active .megamenu{transform:translateX(0)}.megamenu__main{padding:32px var(--mobMenuHorPadding) 80px}.megamenu__cols--promo{border-bottom:1px solid #fff;margin-bottom:24px}.megamenu__list--level2>li{font-size:1rem;margin-bottom:24px}.megamenu__close{display:none}.megamenu__back{align-items:center;background-color:#fff;border-radius:0;color:#8c8c8c;display:flex;font-size:1.25rem;justify-content:flex-start;padding:16px;width:100%}.megamenu__back:before{font-size:1.5rem;margin-right:8px}.newsletter__form{flex-direction:column}.newsletter__label{margin-bottom:16px}.output--pickup .output__inner,.output--delivery .output__inner{padding-left:80px}.output--init .output__title{font-size:1rem}.sideBasket .priceRow--total{margin-top:0}.productsSum{padding:12px 16px}.result__title{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.35}.sidemenu{margin:0 calc(var(--gridSpace) + var(--mainLayoutSpace)) 22px}.sidemenu__selected{border:1px solid #a6a6a6;border-radius:8px;color:#333;font-size:0.9375rem;line-height:1;overflow:hidden;padding:16px 40px 16px 16px;position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.sidemenu__selected:before{color:#838385;font-size:1rem;margin-top:-8px;position:absolute;right:16px;top:50%;transition:transform 250ms ease-out;transform-origin:center}.sidemenu__selected.active:before{transform:rotate(180deg)}.sidemenu__list--level1{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;background-color:#fff;border:1px solid #a6a6a6;border-radius:8px;display:none;left:0;margin-top:12px;position:absolute;top:100%;width:100%;max-height:400px}.sidemenu__list--level1::-webkit-scrollbar{width:6px;height:6px}.sidemenu__list--level1::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.sidemenu__list--level1::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.sidemenu__list--level1::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.sidemenu__list--level1::-webkit-scrollbar-track{background:transparent}.sidemenu__item--level1{line-height:1.534;margin:0}.sidemenu__item--level1:not(:first-child){border-top:1px solid #ececec}.sidemenu__link--level1{color:#333;display:block;font-size:0.9375rem;padding:12px 16px}.sidemenu__link--level1.selected{background-color:#f4f4f4}.storeList{box-shadow:0px 0px 24px rgba(0,0,0,.08);margin-bottom:32px}.storeMap{margin-bottom:32px;width:100%;height:470px;min-height:70vh}.storeTile{margin-inline:20px}.storeTile__thumbnail{display:none}.storeLocator{position:relative}.storeLocator__inner{padding:24px 16px;z-index:1}.storeLocator__illustration--left{display:none}.storeLocator__illustration--right{display:none}.storeLocator__illustration--mob{bottom:0;display:block;position:absolute;right:0}.storeLocator__form{margin-bottom:0}.table td.table__tools .iconButton:not(:last-child),.table td.table__tools .selectedFilters__remove:not(:last-child){margin-right:12px}.gridBoxes{--gridBoxSpace: 8px}.contentBox{padding:24px}.contentBox__icon{margin-bottom:16px}.contentBox__title{margin-bottom:16px}.userNavBlock{margin-bottom:64px}.userNav__link{font-size:0.875rem}.addresses{--addressesGap: 16px}.checkout{--checkoutSpaceTop: 30px}.checkout__title{font-size:1.875rem;letter-spacing:-0.03em;line-height:1.2}.checkout__title{margin:0 0 50px}.checkoutMsg__title{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.35}.checkoutMsg__title{margin:0}.landingItem--box{padding:16px 8px}.landingItem--box .landingItem__title{font-size:0.875rem}.myLists--row{flex-wrap:wrap}.myLists--row .myList{width:calc(50% - var(--listsGap)/2)}.productList .product{width:calc(33.33% - 2*var(--productSpaceH)/3)}.orderRow{--orderColGap: 16px;--orderProductsWidth: 208px;--orderProductWidth: 64px;--orderRowGap: 12px}.orderHistory{--qrWidth: 100px;--qrMargin: 10px}.orderHistory__section{padding-right:10px}.orderSum--border{flex-direction:column}.orderSum--border .orderSum__col:not(:last-child){border-bottom:1px solid #fff}.orderStatusInfo{margin-bottom:24px}.productPage{--productImageColSpace: 24px}.productHeader .product__img{margin-right:8px}.productHeader .priceContainer{align-items:flex-end;flex-direction:column-reverse}.productHeader .priceContainer .priceBlock__price--init{margin:0 0 4px}}@media (max-width: 1023px)and (hover: hover)and (pointer: fine){.megamenu__back.button:not(.disabled):hover{background:transparent}}@media (max-width: 1023px)and (min-width: 480px){.article__dateWrap .pill{font-size:0.75rem}.table{--cellPaddingX: 16px;--cellPaddingY: 16px;--paddingExternalX: 16px}}@media (max-width: 1023px)and (min-width: 640px){.mainNavWrap{max-width:480px}}@media (max-width: 767px){:root{--gridSpace: 16px;--headerHeight: 116px}.section{margin-bottom:40px}.sectionTitle h2{font-size:1.375rem;font-weight:700;letter-spacing:-0.03em;line-height:1.36}.pageTitle h1{font-size:1.875rem;letter-spacing:-0.02em}.pageTitle.pageTitle--image h1{text-shadow:0px 0px 10px rgba(51,51,51,.3)}.pageTitle--big{margin-bottom:32px;height:200px}.pageTitle--big h1{font-size:1.625rem}.asideHeader{height:92px}.ordersBanner__icon{font-size:2.75rem}.ordersBanner__text{font-size:0.9375rem;max-width:416px}.mobileHidden{display:none}.separate{margin:0 8px}h1{font-size:1.875rem;letter-spacing:-0.02em}h2{font-size:1.25rem;letter-spacing:-0.02em;margin:0 0 20px}.text,p{margin:0 0 20px}ul.listS{margin-top:20px}ul.listCols{column-count:3}.footer__main{flex-direction:column;padding:32px 0 8px}.footer__col{margin-bottom:var(--footerColSpace)}.footer__title{margin-bottom:8px}.footer__apps{margin-top:16px}.footer__btm{flex-wrap:wrap}.footer__text{text-align:center}.col--m1{flex-basis:8.3333333333%;max-width:8.3333333333%}.col--m2{flex-basis:16.6666666667%;max-width:16.6666666667%}.col--m3{flex-basis:25%;max-width:25%}.col--m4{flex-basis:33.3333333333%;max-width:33.3333333333%}.col--m5{flex-basis:41.6666666667%;max-width:41.6666666667%}.col--m6{flex-basis:50%;max-width:50%}.col--m7{flex-basis:58.3333333333%;max-width:58.3333333333%}.col--m8{flex-basis:66.6666666667%;max-width:66.6666666667%}.col--m9{flex-basis:75%;max-width:75%}.col--m10{flex-basis:83.3333333333%;max-width:83.3333333333%}.col--m11{flex-basis:91.6666666667%;max-width:91.6666666667%}.col--m12{flex-basis:100%;max-width:100%}.header__top{padding:12px 0 0}.header__leftBlock{padding-bottom:12px}.header__topInner{flex-wrap:wrap;position:relative}.header__logo{width:200px;height:26px}.header__tools{background:url(../media/wood.png) repeat scroll center;flex-shrink:0;justify-content:flex-end;margin-left:calc(-1*var(--gridSpace));padding:6px 0;width:calc(100% + var(--gridSpace)*2)}.header__tool{margin-right:20px}.header__tool--account{display:none}.acc--stripe{margin:12px 0}.acc--stripe .acc__header{font-size:0.875rem;margin-bottom:12px;padding:12px}.acc--beige .acc__header{font-size:1rem;font-weight:500;letter-spacing:-0.02em;line-height:1.37}.acc--beige .acc__content{padding:24px 0 0}.acc--colorStripe .acc__header{padding-block:16px}.acc__header{padding:16px 0}.acc__headerInner{flex-flow:column;flex-wrap:wrap;padding-right:10px}.acc__headerInner--price{flex-flow:row;align-items:center}.acc__headerInner--price .acc__headerInnerTitle--info{display:none}.acc__headerInner--price .acc__headerInnerTitle--sum{display:inline-block}.acc__headerInnerTitle--info{margin-left:0;margin-top:8px}.acc__headerInnerTitle--sum{padding-left:10px}.acc__headerInnerTitle--large{font-size:1.125rem;letter-spacing:-0.02em;line-height:1.2}.acc__icon{font-size:1.5rem}.articleFeatured{display:none}.articleList--column{margin-bottom:40px}.articleList--contests .article{width:calc(50% - 1*var(--productSpaceH)/2)}.articleDetails__title:after{margin:20px auto 32px 0;width:68px}.bnr{padding:20px 0}.bnr__text{margin:0 16px}.breadcrumb__list{align-items:flex-start;flex-direction:column}.breadcrumb__item{font-weight:500}.cardRow{min-height:55px}.cardRow__msg{font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.3;max-width:120px}.catalogue__title{font-size:1.125rem;font-weight:500;letter-spacing:-0.02em;line-height:1.33}.collectionBox__title{font-size:0.875rem}.contestBnr{padding:64px 24px;min-height:209px}.contestBnr h3{font-size:1.125rem;line-height:1.2}.deliveryFlowNav{left:24px}.radiobuttons--deliveryType{gap:8px;margin:0 auto;padding-bottom:112px;position:relative}.radiobutton--deliveryType{position:static}.radiobutton--deliveryType .radiobutton__label{background:#f2efe8;border-radius:8px;font-size:0.875rem;font-weight:400;padding:16px}.radiobutton--deliveryType .radiobutton__label b{display:block}.radiobutton--deliveryType .radiobutton__text{line-height:1.286}.radiobutton--deliveryType .radiobutton__border:after{right:8px;top:8px;width:26px;height:26px}.radiobutton--deliveryType .icon{margin:0 auto 8px;height:32px}.deliveryTypeInfo ul{background:#f7f5f0;border-radius:8px;flex-grow:1;margin:0;padding:12px}.deliveryTypeInfo{align-items:center;bottom:0;display:flex;left:0;position:absolute;width:100%;height:112px}.radiobutton:not(.checked) .deliveryTypeInfo{display:none}.deliveryTypeInfo__sum{align-items:flex-start;text-align:left}.deliveryTypeInfo__sum p{margin-bottom:4px}.selectedFilters{display:none}.form{width:100%}.formBox__more{justify-content:flex-start}.formBox .checkbox~.formBox__more .checkbox~.formBox__more{padding-left:var(--labelSpace)}.loginWrap__img{display:none}.loginWrap__form{padding:64px 16px 40px}.registerPromo{margin-top:20px}.formText{padding:16px 0 0}.formText p{font-size:0.8125rem}.goToTop{bottom:16px;font-size:0.75rem;line-height:56px;right:16px;width:56px;height:56px}.orderTrack .indicator{margin-bottom:6px}.loadMore{--loadMoreSpace: 16px}.message{margin-bottom:30px}.modal__wrap .btnWrap{margin-top:24px}.modal__titleWrap{margin-bottom:24px;text-align:left}.modal__titleWrap p{font-size:0.875rem}.modal__title{margin-inline:0;text-align:left}.modal__title{font-size:1.125rem}.newsletter__inner{margin:0 auto;max-width:400px}.newsletter__form{border-bottom:1px solid gray;margin-bottom:24px;padding-bottom:24px}.newsletter__input{flex:1}.notifications{right:0;padding:0 var(--gridSpace);width:100%}.notifications__content{width:100%}.notificationsBtn:after{content:"";top:-1px;right:0;width:8px;height:8px;background:#d91a32;border-radius:50%}.outputsRow{gap:16px}.output--init{padding:8px}.output--pickup:not(.output--init) .output__inner,.output--delivery:not(.output--init) .output__inner{background-size:auto 26px;padding-left:60px;min-height:26px}.output--pickup.output--init .output__inner,.output--delivery.output--init .output__inner{background-size:auto 34px;padding-left:64px;min-height:34px}.output--init .output__title{font-size:0.875rem}.product__title{font-size:0.9375rem}.productInfo .productTags{margin-bottom:8px}.productList .priceContainer{height:32px}.priceRow--total{font-size:1rem;margin-bottom:12px}.productList .quantity{height:34px}.quantity__btn{font-size:0.875rem;width:40px}.quantity__btn--notAvailable{font-size:0.8125rem}.quantity__input{font-size:0.875rem}.quantity__input span{font-size:0.75rem;font-weight:400}.quantity__message{padding:8px}.result__title{font-size:1.625rem;letter-spacing:-0.03em}.result__p--b{font-size:1.125rem;letter-spacing:-0.02em}.result__code strong{display:block;margin-top:8px}.result__mainimg--notsupported{margin-bottom:32px;max-width:160px}.sidemenu{margin-top:16px}.sliderSection{--sliderSectionSpaceBottom: 32px}.simpleSlider--cat:not(.swiper-initialized) .swiper-slide{width:calc(33.3333333333% - 16px)}.productsSlider{margin-top:16px}.productsSlider .swiper-slide{width:160px}.storeTile__address{margin-bottom:12px}.storeTileSpecs{align-items:flex-start;flex-flow:column;margin-bottom:15px}.storeTileSpecs__title{font-size:1.375rem;font-weight:700;letter-spacing:-0.03em;line-height:1.36}.storeTileSpecs__title{font-size:1.25rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2;margin-bottom:8px}.storeTileSpecs__iconWrap{margin-bottom:12px}.storeTileOrder--details{flex-flow:column;margin-bottom:32px;padding:24px}.storeTileOrder--details .storeTileOrder__icon{margin:0 auto 16px 0}.storeTileOrder--details .storeTileOrder__info{padding-right:0;width:100%;max-width:initial}.storeTileOrder--details .storeTileOrder__actions{margin-top:16px;width:100%}.storeSearch .form{background-color:#fff;transform:translateY(0)}.storeSearch.sticky{padding-bottom:64px}.storeSearch.sticky .form{padding-inline:var(--gridSpace);position:fixed;top:calc(var(--headerHeight) - 64px);left:0;transform:translateY(100%);z-index:3;transition:transform 250ms ease-out;width:100%}.storeSearch p:last-of-type{margin-bottom:16px}.pin__count{font-size:1.125rem;letter-spacing:-0.02em;line-height:1.2}.mapInfo{padding-top:46px;max-width:246px}.mapInfo__close{right:16px;top:16px;color:#333}.storeLocator__title{font-size:1.375rem;font-weight:700;letter-spacing:-0.03em;line-height:1.36}.storeLocator__title{font-size:1.25rem;font-weight:700;letter-spacing:-0.02em;line-height:1.2}.storeLocator__sub{margin-bottom:32px}.storeLocator__form .field--small{display:none}.storeHours{padding:24px 24px 32px}.storeHours .acc__header p{display:inline}.storeHours .acc__headerInner{display:block}.storeHours .acc__icon{display:inline-block}.storeHours hr{margin:27px auto;max-width:initial}.storeHours__top{display:flex;align-items:flex-start;text-align:left;flex-flow:column}.storeDetails__map{padding-top:calc(470 / 343 * 100%);position:relative;width:100%}.timetable{margin-bottom:12px}.timetable__day{border:none;padding-inline:56px;height:72px}.timetableNav{justify-content:center;position:absolute;top:16px;z-index:2;width:40px;height:40px}.timetableNav{font-size:1rem}.timetableNav__icon,.timetableNav__text{display:none}.timetableNav--next{right:4px}.timetableNav--prev{left:4px}.topnav{margin-top:16px}.topnav__selected{border:1px solid #a6a6a6;border-radius:8px;color:#333;font-size:0.9375rem;line-height:1;overflow:hidden;padding:16px 40px 16px 16px;position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.topnav__selected:before{color:#838385;font-size:1rem;margin-top:-8px;position:absolute;right:16px;top:50%;transition:transform 250ms ease-out;transform-origin:center}.topnav__selected.active:before{transform:rotate(180deg)}.topnav__list{scroll-behavior:smooth;overflow:auto;scrollbar-color:rgba(166,166,166,.3) transparent;scrollbar-width:thin;-webkit-overflow-scrolling:touch;background-color:#fff;border:1px solid #a6a6a6;border-radius:8px;display:none;left:0;margin-top:12px;position:absolute;top:100%;width:100%;max-height:400px}.topnav__list::-webkit-scrollbar{width:6px;height:6px}.topnav__list::-webkit-scrollbar-thumb{background:rgba(166,166,166,.3);border-radius:13px}.topnav__list::-webkit-scrollbar-thumb:hover{background:rgba(166,166,166,.5)}.topnav__list::-webkit-scrollbar-thumb:active{background:rgba(166,166,166,.7)}.topnav__list::-webkit-scrollbar-track{background:transparent}.topnav__item{line-height:1.534;margin:0}.topnav__item:not(:first-child){border-top:1px solid #ececec}.topnav__link{color:#333;display:block;font-size:0.9375rem;padding:12px 16px}.topnav__link.selected{background-color:#f4f4f4}.unavailabelBox .listTools--noBorder{padding-top:8px}.userMenu{right:0;padding:0 var(--gridSpace);width:100%}.userMenu__content{width:100%}.gridBoxes__box{width:calc(50% - var(--gridBoxSpace)*2)}.userNavBlock{--tabItemHeight: 32px;margin-left:calc(-1*var(--gridSpace));margin-bottom:32px;overflow-x:auto;width:calc(100% + var(--gridSpace)*2);max-width:initial}.userNav{padding:0 var(--gridSpace)}.userNav__item{white-space:nowrap;flex:1 0 auto}.userNav__item:not(:last-child){margin-right:8px}.userNav__link{font-size:0.875rem;font-weight:500;letter-spacing:initial;line-height:1.28;padding:8px 12px}.accountDetails{flex-direction:column;margin-bottom:24px}.accountDetails__form{margin-bottom:8px}.basketTable__row--head .basketTable__cell{font-size:0.875rem}.basketTable__cell--price{margin-right:0}.basketTable__cell--quant{margin:0 16px}.minibasket{--miniBasketWidth: 100%}.minibasket__overlay{display:none}.minibasket__inner{top:var(--headerHeight);height:calc(var(--windowHeight) - var(--headerHeight))}.minibasket__header{padding-top:8px;padding-bottom:12px}.minibasket__product{padding:16px 0}.minibasket__bottom{padding:12px 16px}.minibasket .miniBasketButton{display:none}.basketInfo{margin-top:8px}.secureCheckout{flex-direction:column}.secureCheckout__text{margin:0 0 8px 0}.secureCheckout__img{width:120px}.checkout__title{margin:0 0 31px}.checkout>h2{font-size:1.375rem;font-weight:700;letter-spacing:-0.03em;line-height:1.36}.checkout>h2{margin:0 0 46px}.checkoutMsg{margin:0 0 60px}.checkoutMsg img{margin-bottom:6px}.checkoutMsg__title{margin:0}.checkoutMsg__code strong{display:block;margin-top:8px}.checkoutTracking{margin:0 auto 54px;flex-flow:column}.checkoutTracking__action{margin-top:37px}.checkoutTrackingMsg{margin:0 0 56px}.loyalty__img{margin-bottom:20px}.loyalty__inner{flex-flow:column;align-items:center}.loyalty__row{flex-flow:column}.loyalty__cell{width:100%}.loyalty__cell:not(:last-child){margin-bottom:1px}.loyalty__table{width:100%}.loyaltyList{margin:20px auto 0}.loyaltyList li{font-size:0.9375rem;font-weight:400;letter-spacing:-0.03em;line-height:1.47}.history{--historycnt: 72px}.history__mainimg{margin-bottom:32px}.history__date{padding-right:38px}.history__date:before,.history__date:after{right:28px}.landingList{--colGap: 0;row-gap:0}.landingList__item{width:33.33%}.landingItem__title{font-size:0.875rem;margin:0 var(--landingTitleMobSpace)}.landingItem--box .landingItem__title{font-size:0.8125rem}.landingItem__submenu{left:var(--landingTitleMobSpace);width:calc(100% - var(--landingTitleMobSpace)*2)}.myLists--grid{--listsGap: 16px}.myLists--row{--listsGap: 12px}.myList--box{padding-top:16px;padding-bottom:16px}.myList--box .myList__title{font-size:1.125rem}.productList .product .priceBlock__price,.productsSlider .product .priceBlock__price{font-size:0.75rem;margin-top:4px}.productList .product .priceBlock__price--init,.productsSlider .product .priceBlock__price--init{font-size:0.6875rem;line-height:1.091;margin-top:0}.productList .product .priceBlock__price--b,.productsSlider .product .priceBlock__price--b{font-size:0.875rem;line-height:1.286;margin-top:2px}.productList .product .priceBlock__text,.productsSlider .product .priceBlock__text{font-size:0.625rem;line-height:1.2}.orderRow__items{grid-area:1/1/2/4;width:var(--orderProductsWidth)}.orderRow__status{grid-area:2/1/3/4}.orderRow__info--1{grid-area:3/1/4/2}.orderRow__info--2{grid-area:3/2/4/3}.orderRow__info--3{grid-area:3/3/4/4}.orderHistory{--outerPaddingY: 18px;flex-flow:column}.orderHistory .copyText__tooltip{bottom:100%;transform:translate3d(-90%, -10px, 0);top:auto}.orderHistory .copyText__tooltip--open{bottom:100%;transform:translate3d(-90%, -15px, 0);top:auto}.orderHistory--qr .orderHistory__section--top{margin-top:0}.orderHistory__qr{margin-right:15px}.orderHistory__section:not(.orderHistory__section--top){padding-right:0}.orderHistory__section:not(.orderHistory__section--top):not(:last-child){border-bottom:1px solid #c2c2c2;margin-bottom:10px;padding-bottom:10px}.orderHistory__section--top{align-items:flex-end;margin:55px 0 15px}.orderHistory__section--top .copyText{margin-bottom:17px}.orderStatusInfo{margin-bottom:16px}.orderTrack{margin:0 0 16px;padding:16px}.orderTrack__inner{align-items:flex-start;flex-flow:column}.orderTrack__date{display:block;margin-top:6px}.productPage{margin:24px 0 32px}.productPage__imageCol{margin:0 auto 32px;max-width:560px}.productPage__imageMain{margin-bottom:16px}.productInfo__title{font-size:1.5rem;line-height:1.25}.productInfo__desc{margin-bottom:16px}.productInfo__codeWrap{margin-bottom:8px}.productDetails{margin-top:24px;padding-top:24px}.productDetails__heading{margin-bottom:0}.productDetailsNutrTable td{padding:8px 14px}.productSliderModal .modal__wrap{padding:24px}.productThumbs{--thumbImageWidth: 64px}.productMainImg .imgControl{display:none}.notifyMe__main{max-width:90vw}}@media (max-width: 767px)and (max-width: 767px){.sectionTitle h2{font-size:1.125rem;letter-spacing:-0.02em;line-height:1.2}.storeTileSpecs__title{font-size:1.125rem;letter-spacing:-0.02em;line-height:1.2}.storeLocator__title{font-size:1.125rem;letter-spacing:-0.02em;line-height:1.2}.checkout>h2{font-size:1.125rem;letter-spacing:-0.02em;line-height:1.2}}@media (max-width: 639px){.sectionTitle p{font-size:0.9375rem}.ordersBanner__img img{object-fit:contain;object-position:left top}.ordersBanner__icon{margin-bottom:16px}.ordersBanner__text{max-width:100%}.btnWrap--stickyBtm{background-color:#fff;bottom:0;left:0;margin-top:12px;padding-top:20px;position:sticky;z-index:9}.footer{--footerSpaceTop: 40px}.col--s1{flex-basis:8.3333333333%;max-width:8.3333333333%}.col--s2{flex-basis:16.6666666667%;max-width:16.6666666667%}.col--s3{flex-basis:25%;max-width:25%}.col--s4{flex-basis:33.3333333333%;max-width:33.3333333333%}.col--s5{flex-basis:41.6666666667%;max-width:41.6666666667%}.col--s6{flex-basis:50%;max-width:50%}.col--s7{flex-basis:58.3333333333%;max-width:58.3333333333%}.col--s8{flex-basis:66.6666666667%;max-width:66.6666666667%}.col--s9{flex-basis:75%;max-width:75%}.col--s10{flex-basis:83.3333333333%;max-width:83.3333333333%}.col--s11{flex-basis:91.6666666667%;max-width:91.6666666667%}.col--s12{flex-basis:100%;max-width:100%}.acc-section{margin-bottom:40px}.acc-section__title{font-size:1.25rem}.deliveryFlowNav{left:16px}.radiobutton--tab .icon{font-size:1.375rem;margin-right:4px}.radiobutton--tab .radiobutton__label{font-size:0.9375rem}.form{--fieldColumnSpace: 24px}.form__row{flex-direction:column;margin-left:calc(-1*var(--fieldColumnSpace)/2);width:calc(100% + var(--fieldColumnSpace))}.form__col{width:100%}.field{flex:1}.field--small{flex:initial}.field__legend{margin:0 0 20px}.field__mapInner{padding-top:137.0262390671%}.formBox__text{font-size:0.875rem}.radiobuttons--inline,.checkboxes--inline{flex-flow:column}.file-upload__title{max-width:151px}.loginWrap__form{padding-bottom:24px}.modal__wrap{padding:64px 16px 24px}.outputsRow{gap:8px;flex-direction:column}.product__discount{border-width:3px;font-size:0.6875rem;font-weight:500;width:44px;height:44px}.product__discount .product__discountVal{font-size:0.875rem;margin-bottom:-3px}.product__badge{--badgePosition: var(--productPadding)}.simpleSlider--cat:not(.swiper-initialized) .swiper-slide{width:calc(50% - 16px)}.storeTileOrder{flex-wrap:wrap;padding:10px}.storeTileOrder__details{margin-bottom:4px}.storeTileOrder__actions{flex-basis:100%;margin-top:20px}.storeTileOrder__actions .button{width:100%}.tooltip__main{padding:16px}.gridBoxes{margin:32px 0 32px calc(-1*var(--gridBoxSpace))}.gridBoxes__box{margin-left:0;margin-right:0;width:100%}.contentBox{flex-wrap:wrap}.contentBox__icon{font-size:2rem;margin:0 8px 0 0}.contentBox__title{margin-bottom:0}.contentBox__text{margin-top:8px;width:100%}.addBox__icon{font-size:3.5rem;margin-bottom:24px}.addBox__text{margin-bottom:24px}.addresses__box,.addresses .addBox{width:100%}.basketTable{--imgWidth: 80px;--basketProductSpaceV: 16px}.basketTable .basketTable__row:not(.basketTable__row--head){align-content:center;align-items:flex-start;flex-wrap:wrap;padding:var(--basketProductSpaceV) 8px var(--basketProductSpaceV) 96px;min-height:112px}.basketTable .basketTable__remove{font-size:1.5rem;margin:0;right:8px;top:var(--basketProductSpaceV);z-index:2}.basketTable .basketTable__cell--product{flex:auto;width:100%}.basketTable .basketTable__cell--product:not(:last-child){margin-bottom:8px}.basketTable .basketTable__cell--quant{margin:0}.basketTable .basketTable__cell--price{align-items:flex-end;display:inline-flex;flex:1;justify-content:flex-end;margin:0;width:auto;height:34px}.basketTable .fav{font-size:1.5rem;margin:0;right:40px;top:var(--basketProductSpaceV)}.basketTable .product__img{left:8px;margin-top:-40px;position:absolute;top:50%}.basketTable .product__title{font-size:0.9375rem;padding-right:72px}.basketTable__row--head .basketTable__cell--product:not(:last-child){margin-bottom:0}.basketTable__row--head .basketTable__cell:not(:first-child){display:none}.minibasket .basketTable .priceBlock__price{font-size:1rem;line-height:1.375}.minibasket .basketTable .priceBlock__price--init{font-size:0.6875rem;line-height:1.546;margin-bottom:2px;margin-top:0}.minibasket .basketTable .product__title{font-size:0.8125rem}.form--basket{margin-block:20px}.checkoutStep{--checkoutStepSpace: 16px}.history__section{padding:0 12px}.history__thumb{margin-bottom:20px}.listsBlock{left:0;opacity:0;padding:24px;position:fixed;top:0;transition:opacity 250ms ease-in-out;z-index:9;width:100%;height:100%}.wishlistButton:not(.open) .listsBlock{pointer-events:none}.wishlistButton.open .listsBlock{opacity:1}.listsBlock__inner{padding-top:56px;z-index:10;height:100%}.listsBlock__title{font-size:1.25rem;font-weight:700;text-align:center}.listsBlock__list{margin-bottom:20px;padding-bottom:20px}.listsBlock__close{font-size:1.5rem;right:16px;top:16px}.myLists--grid .myList{width:100%}.myLists--row .myList{width:100%}.productList .product .product__img,.productsSlider .product .product__img{margin-left:calc(-1*var(--productPadding));width:calc(100% + var(--productPadding)*2)}.productList .product{width:calc(50% - var(--productSpaceH)/2)}.listTools{padding-bottom:8px}.orderRow{display:flex;flex-direction:column;gap:var(--orderRowGap)}.orderSum{--orderSumColSpace: 16px}.productPage__imageCol{margin-bottom:24px}.productInfo__quantity{margin:14px 0 20px}.productInfo .priceContainer{margin:0 0 8px}.productThumbs .swiper-button-prev,.productThumbs .swiper-button-next{top:0;height:100%}.productThumbs .swiper-button-prev:before{background:linear-gradient(to right, white 0%, rgba(255, 255, 255, 0) 100%)}.productThumbs .swiper-button-next:before{background:linear-gradient(to left, white 0%, rgba(255, 255, 255, 0) 100%)}.productHeader .product__img{width:56px}.productHeader .addToCartButton{min-width:initial}.productHeader .addToCartButton:before{margin-right:0}.productHeader .addToCartButton__text{display:none}.notifyMe__main{padding:16px}}@media (max-width: 639px)and (max-width: 639px){.basketTable .priceBlock__price{font-size:1rem;line-height:1.375}.basketTable .priceBlock__price--init{font-size:0.6875rem;line-height:1.546;margin-bottom:2px;margin-top:0}.basketTable .product__title{font-size:0.8125rem}}@media (max-width: 479px){:root{--formMaxWidthS: 100%}.sectionTitle{align-items:flex-start;flex-direction:column}.btnWrap{--buttonsMargin: 4px;align-items:center;flex-direction:column}.btnWrap .button{width:100%}ul.listCols{column-count:1}.header--checkout .header__topInner{padding-top:42px}.header--checkout .header__logo{top:0;transform:translateX(-50%)}.articleList--contests .article{width:100%}.catalogueList .catalogue{width:100%}.emptyContent{grid-template-areas:"icon text" "buttons buttons"}.table{--paddingExternalX: 20px;--cellPaddingY: 8px;margin:20px 0 32px;font-size:0.8125rem;font-weight:400;letter-spacing:-0.02em;line-height:1.07}.table th{display:none}.table tr{border-width:1px}.table tr:not(.highlight){border-color:#ececec}.table thead tr{display:none}.table td:first-child{padding-top:var(--paddingExternalY)}.table td:last-child{padding-bottom:var(--paddingExternalY)}.table td{align-items:center;display:flex;justify-content:flex-start;max-width:initial;padding:var(--cellPaddingY) var(--paddingExternalX)}.table td.table__tools{padding:11px var(--paddingExternalX) 24px}.table td.table__tools{position:relative;margin-top:var(--cellPaddingY);justify-content:flex-end}.table td.table__tools:after{content:"";display:block;position:absolute;top:0;right:var(--paddingExternalX);left:var(--paddingExternalX);border-top:1px dashed #838385}.table .mob-th{display:inline-block;margin-right:25px;flex:0 0 45%}.accountDetails__box{width:100%}.checkoutTracking__action{min-width:initial;width:100%}.landingList__item{width:50%}.addProduct{flex-wrap:wrap}.addProduct .quantity{margin-bottom:16px}.addToCartButton{width:calc(100% - 64px)}.productHeader .product__desc{display:none}}@media (hover: hover)and (pointer: fine){.breadcrumb__itemLink:hover{color:var(--buttonColorHover)}.breadcrumb__itemLink:active{color:var(--buttonColorActive)}.button:not(.disabled):hover{background-color:var(--buttonColorHover)}.button:not(.disabled):active{background-color:var(--buttonColorActive)}.button--border:not(.disabled):hover{background:transparent;border-color:var(--buttonColorHover);color:var(--buttonColorHover)}.button--border:not(.disabled):active{background:transparent;border-color:var(--buttonColorActive);color:var(--buttonColorActive)}.button--alt:not(.disabled):hover{background:#f7f5f0;border-color:#c2c2c2;color:inherit}.button--alt:not(.disabled):hover .icon{color:#f47920}.button--alt:not(.disabled):active{background:#f2efe8;border-color:#c2c2c2;color:inherit}.button--alt:not(.disabled):active .icon{color:#f47920}.iconButton--border:not(.disabled):hover{border-color:var(--buttonColorHover)}.iconButton--border:not(.disabled):active{border-color:var(--buttonColorActive)}.iconButton:not(.disabled):hover,.selectedFilters__remove:not(.disabled):hover{color:var(--buttonColorHover)}.iconButton:not(.disabled):active,.selectedFilters__remove:not(.disabled):active{color:var(--buttonColorActive)}.link:not(.disabled):hover,.text a:not(.disabled):hover,p a:not(.disabled):hover{color:var(--buttonColorHover)}.link:not(.disabled):active,.text a:not(.disabled):active,p a:not(.disabled):active{color:var(--buttonColorActive)}.deliveryTypeInfo__link:hover{color:var(--buttonColorHover)}.deliveryTypeInfo__link:active{color:var(--buttonColorActive)}.categoriesList__item>a:hover,.categoriesList__item>.acc__header:hover{color:#333}.checkbox__label a:hover,.radiobutton__label a:hover{text-decoration:underline}.radiobutton--box:not(.disabled):hover .radiobutton__border{background-color:#f4f4f4}.radiobutton--onlyColor:hover .radiobutton__icon{border-color:#838385}.radiobutton--onlyIcon:hover .radiobutton__icon{border-color:#a6a6a6}.select__option:not(.selected):hover,.autocomplete__option:not(.selected):hover{background-color:#f4f4f4}.select__option:not(.selected):active,.autocomplete__option:not(.selected):active{background-color:#ececec}.select--card .select__option:not(.selected):hover,.select--card .autocomplete__option:not(.selected):hover{background-color:#f7f5f0}.select--card .select__option:not(.selected):active,.select--card .autocomplete__option:not(.selected):active{color:var(--buttonColorActive)}.file-upload__delete:hover{color:#838385}.file-upload__delete:hover .file-upload__icon{color:#a6a6a6}.file-upload__delete:active{color:#f47920}.file-upload__delete:active .file-upload__icon{color:#f47920}.goToTop:hover:before{transform:translateY(-6px)}.mainNav__item:hover{color:#333}.megamenu__list a:hover{color:#333}.output__link:hover,.output__mainLink:hover{color:var(--buttonColorHover)}.output__link:active,.output__mainLink:active{color:var(--buttonColorActive)}.pagination__link:hover{color:var(--buttonColorHover)}.pagination__link:active{color:var(--buttonColorActive)}.quantity--init:hover:after{background-color:#e8e2d7}.quantity__btn:not(.disabled):hover{background-color:var(--buttonBgColorHover)}.quantity__btn:not(.disabled):active{background-color:var(--buttonBgColorActive)}.sideNav__item--level1:not(.open) .sideNav__link--level1:hover{color:#838385}.sideNav__link--level2:not(.active):hover{color:#838385}.swiper-button-prev:not(.swiper-button-disabled):hover,.swiper-button-next:not(.swiper-button-disabled):hover{color:#595959}.swiper-button-prev:not(.swiper-button-disabled):active,.swiper-button-next:not(.swiper-button-disabled):active{color:#f47920}.table tbody tr:hover:after{opacity:1}.timetable__hour:not(.timetable__hour--selected):not(.timetable__hour--unavailable):hover{border-color:#a6a6a6}.playvideo__icon:hover{color:var(--buttonColorHover)}.playvideo__icon:active{color:var(--buttonColorActive)}.userMenu__link:hover{color:var(--hoverColor)}.contentBox__link:hover{color:#333}.userNav__link:not(.active):hover{background-color:#e8e2d7}.contactinfo__link:hover{color:#838385}.contactinfo__link:active{color:#f47920}.contactinfo__link:active .contactinfo__icon{color:#f47920}.landingList__item:hover .landingItem__title{color:#fff}.landingList__item:hover .landingItem__title:before{opacity:1}.landingItem__link:hover{color:var(--buttonColorHover)}.landingItem__link:active{color:var(--buttonColorActive)}.landingItem--box .landingItem__title:hover{color:var(--buttonColorHover)}.landingItem--box .landingItem__title:active{color:var(--buttonColorActive)}.landingItem__submenuLink:hover{color:#838385}.myList--box:hover:after{opacity:1}.myList__title:hover{color:var(--buttonColorHover)}.myList__title:active{color:var(--buttonColorActive)}.productList .product:hover,.productsSlider .product:hover{box-shadow:0px 6px 16px rgba(51,51,51,.15)}.productThumbs__slide:not(.swiper-slide-thumb-active):hover:after{opacity:1;border-color:#a6a6a6}.sitemapnav__link:hover{color:var(--buttonColorHover)}.sitemapnav__link:active{color:var(--buttonColorActive)}}@media (hover: none)and (pointer: coarse){.landingList__item.active .landingItem__title{color:#fff}.landingList__item.active .landingItem__title:before{opacity:1}} +/*# sourceMappingURL=main.css.map */ diff --git a/html/content/css/overides.css b/html/content/css/overides.css new file mode 100644 index 0000000..2019468 --- /dev/null +++ b/html/content/css/overides.css @@ -0,0 +1,18 @@ + +/* main.min.css */ +.product__img { + /* max-width: 320px; */ + max-width: 240px; +} + +.footer__listLink { + color: #bbb; +} +.footer__listLink:hover { + color: #eee; +} + +.footer__title { + /* color: #4d4d4d; */ + color: #bbb7; +} diff --git a/html/content/fonts/CFAstyStd-Bold.woff b/html/content/fonts/CFAstyStd-Bold.woff new file mode 100644 index 0000000..cc78076 Binary files /dev/null and b/html/content/fonts/CFAstyStd-Bold.woff differ diff --git a/html/content/fonts/CFAstyStd-Bold.woff2 b/html/content/fonts/CFAstyStd-Bold.woff2 new file mode 100644 index 0000000..1e64724 Binary files /dev/null and b/html/content/fonts/CFAstyStd-Bold.woff2 differ diff --git a/html/content/fonts/CFAstyStd-Book.woff b/html/content/fonts/CFAstyStd-Book.woff new file mode 100644 index 0000000..33b40ac Binary files /dev/null and b/html/content/fonts/CFAstyStd-Book.woff differ diff --git a/html/content/fonts/CFAstyStd-Book.woff2 b/html/content/fonts/CFAstyStd-Book.woff2 new file mode 100644 index 0000000..0dd75b1 Binary files /dev/null and b/html/content/fonts/CFAstyStd-Book.woff2 differ diff --git a/html/content/fonts/CFAstyStd-Medium.woff b/html/content/fonts/CFAstyStd-Medium.woff new file mode 100644 index 0000000..9138069 Binary files /dev/null and b/html/content/fonts/CFAstyStd-Medium.woff differ diff --git a/html/content/fonts/CFAstyStd-Medium.woff2 b/html/content/fonts/CFAstyStd-Medium.woff2 new file mode 100644 index 0000000..8067163 Binary files /dev/null and b/html/content/fonts/CFAstyStd-Medium.woff2 differ diff --git a/html/content/fonts/iconfont.svg b/html/content/fonts/iconfont.svg new file mode 100644 index 0000000..eefc590 --- /dev/null +++ b/html/content/fonts/iconfont.svg @@ -0,0 +1,495 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/html/content/fonts/iconfont.ttf b/html/content/fonts/iconfont.ttf new file mode 100644 index 0000000..af098dd Binary files /dev/null and b/html/content/fonts/iconfont.ttf differ diff --git a/html/content/fonts/iconfont.woff b/html/content/fonts/iconfont.woff new file mode 100644 index 0000000..28f14dd Binary files /dev/null and b/html/content/fonts/iconfont.woff differ diff --git a/html/content/fonts/iconfont.woff2 b/html/content/fonts/iconfont.woff2 new file mode 100644 index 0000000..278d0e1 Binary files /dev/null and b/html/content/fonts/iconfont.woff2 differ diff --git a/html/content/images/1243x385/jpg/files/pageTitleAnakoinoseis.jpg b/html/content/images/1243x385/jpg/files/pageTitleAnakoinoseis.jpg new file mode 100644 index 0000000..fdabc32 Binary files /dev/null and b/html/content/images/1243x385/jpg/files/pageTitleAnakoinoseis.jpg differ diff --git a/html/content/images/1243x385/jpg/files/pageTitleDiagonismoi.jpg b/html/content/images/1243x385/jpg/files/pageTitleDiagonismoi.jpg new file mode 100644 index 0000000..a0097d0 Binary files /dev/null and b/html/content/images/1243x385/jpg/files/pageTitleDiagonismoi.jpg differ diff --git a/html/content/images/1243x385/jpg/files/pageTitleKatalogoi.jpg b/html/content/images/1243x385/jpg/files/pageTitleKatalogoi.jpg new file mode 100644 index 0000000..70149d2 Binary files /dev/null and b/html/content/images/1243x385/jpg/files/pageTitleKatalogoi.jpg differ diff --git a/html/content/images/1243x385/jpg/files/pageTitleKatastimata.jpg b/html/content/images/1243x385/jpg/files/pageTitleKatastimata.jpg new file mode 100644 index 0000000..2e5ce5a Binary files /dev/null and b/html/content/images/1243x385/jpg/files/pageTitleKatastimata.jpg differ diff --git a/html/content/images/1243x385/jpg/files/pageTitleOrario.jpg b/html/content/images/1243x385/jpg/files/pageTitleOrario.jpg new file mode 100644 index 0000000..7acf891 Binary files /dev/null and b/html/content/images/1243x385/jpg/files/pageTitleOrario.jpg differ diff --git a/html/content/images/1243x385/png/files/emarket.png b/html/content/images/1243x385/png/files/emarket.png new file mode 100644 index 0000000..8914a17 Binary files /dev/null and b/html/content/images/1243x385/png/files/emarket.png differ diff --git a/html/content/images/140x42/png/Content/media/appstore.webp b/html/content/images/140x42/png/Content/media/appstore.webp new file mode 100644 index 0000000..0de0499 Binary files /dev/null and b/html/content/images/140x42/png/Content/media/appstore.webp differ diff --git a/html/content/images/140x42/png/Content/media/googlePlay.webp b/html/content/images/140x42/png/Content/media/googlePlay.webp new file mode 100644 index 0000000..a420b24 Binary files /dev/null and b/html/content/images/140x42/png/Content/media/googlePlay.webp differ diff --git a/html/content/images/300x300/png/Content/media/sampleProduct.jp2 b/html/content/images/300x300/png/Content/media/sampleProduct.jp2 new file mode 100644 index 0000000..fcffcca Binary files /dev/null and b/html/content/images/300x300/png/Content/media/sampleProduct.jp2 differ diff --git a/html/content/images/300x300/png/Content/media/sampleProduct.jpg b/html/content/images/300x300/png/Content/media/sampleProduct.jpg new file mode 100644 index 0000000..d79daac Binary files /dev/null and b/html/content/images/300x300/png/Content/media/sampleProduct.jpg differ diff --git a/html/content/images/300x300/png/Content/media/sampleProduct.png b/html/content/images/300x300/png/Content/media/sampleProduct.png new file mode 100644 index 0000000..c244909 Binary files /dev/null and b/html/content/images/300x300/png/Content/media/sampleProduct.png differ diff --git a/html/content/images/300x300/png/Content/media/sampleProduct.webp b/html/content/images/300x300/png/Content/media/sampleProduct.webp new file mode 100644 index 0000000..acf68b5 Binary files /dev/null and b/html/content/images/300x300/png/Content/media/sampleProduct.webp differ diff --git a/html/content/images/h20/png/Content/media/cards/dinersClub.png b/html/content/images/h20/png/Content/media/cards/dinersClub.png new file mode 100644 index 0000000..da2b36a Binary files /dev/null and b/html/content/images/h20/png/Content/media/cards/dinersClub.png differ diff --git a/html/content/images/h20/png/Content/media/cards/dinersClub.webp b/html/content/images/h20/png/Content/media/cards/dinersClub.webp new file mode 100644 index 0000000..1625a1b Binary files /dev/null and b/html/content/images/h20/png/Content/media/cards/dinersClub.webp differ diff --git a/html/content/images/h20/png/Content/media/cards/mastercard.png b/html/content/images/h20/png/Content/media/cards/mastercard.png new file mode 100644 index 0000000..abd172e Binary files /dev/null and b/html/content/images/h20/png/Content/media/cards/mastercard.png differ diff --git a/html/content/images/h20/png/Content/media/cards/mastercard.webp b/html/content/images/h20/png/Content/media/cards/mastercard.webp new file mode 100644 index 0000000..710f177 Binary files /dev/null and b/html/content/images/h20/png/Content/media/cards/mastercard.webp differ diff --git a/html/content/images/h20/png/Content/media/cards/visa.png b/html/content/images/h20/png/Content/media/cards/visa.png new file mode 100644 index 0000000..283c48f Binary files /dev/null and b/html/content/images/h20/png/Content/media/cards/visa.png differ diff --git a/html/content/images/h20/png/Content/media/cards/visa.webp b/html/content/images/h20/png/Content/media/cards/visa.webp new file mode 100644 index 0000000..1402fb2 Binary files /dev/null and b/html/content/images/h20/png/Content/media/cards/visa.webp differ diff --git a/html/content/js/Cart/miniCart.js b/html/content/js/Cart/miniCart.js new file mode 100644 index 0000000..c02cc38 --- /dev/null +++ b/html/content/js/Cart/miniCart.js @@ -0,0 +1,96 @@ +$$plugins.define('miniCart', ['dom'], function (element, options, dom) { + const plugin = this, + selectors = { + openMiniCart: '.open-mini-cart', // Link that opens cart + closeMiniCart: '.close-mini-cart', // Link that closes cart + contentOuterContainer: '.miniCart', // Container for loader and inner content inner + loaderContainer: '.miniCart__holder', // Spinner or any other loader + contentInnerContainer: '.miniCart__main', // Content of mini cart + cartPluginElement: '[data-plugin-cart]' + }, cssClasses = { + opened: 'opened', // Added to 'openMinicart' link when opened + containerOpened: 'active' + }; + let pendingXhr, clearOnClick; + + function onBodyClick(e) { + if (element.contains(e.target)) { + return; + } + // case where node is removed from DOM. This means we dont know it's parent. Usually the case of cart remove. + if (!document.body.contains(e.target)) { + return; + } + close(); + } + + function close() { + // Remove opened class from link + element.querySelector(selectors.openMiniCart).classList.remove(cssClasses.opened); + + //Hide outer element + var outterContainer = element.querySelector(selectors.contentOuterContainer); + // dom.hide(outterContainer); + outterContainer.classList.remove(cssClasses.containerOpened); + // Hide and reset inner element + const inner = element.querySelector(selectors.contentInnerContainer); + //dom.empty(inner); + // dom.hide(inner); + + + // Show loader again to be ready for next time + //dom.show(element.querySelector(selectors.loaderContainer)); + + // Unbind body click + clearOnClick && clearOnClick(); + } + + function open() { + // Add opened class to link + element.querySelector(selectors.openMiniCart).classList.add(cssClasses.opened); + + // Show outer container + //dom.show(); + var outterContainer = element.querySelector(selectors.contentOuterContainer); + outterContainer.style.display = "block"; + outterContainer.classList.add(cssClasses.containerOpened); + // Listen for body clicks to close + clearOnClick && clearOnClick(); + clearOnClick = plugin.on('click', document.body, onBodyClick); + return true; + } + + function updateContent() { + return; + if (pendingXhr) { + return; + } + pendingXhr = true; + http.post(options.RefreshUrl, { responseType: "text" }) + .then(function (r) { + const container = element.querySelector(selectors.contentInnerContainer); + container.innerHTML = r.data; + dom.hide(element.querySelector(selectors.loaderContainer)); + dom.show(container); + }) + .finally(function () { + pendingXhr = false; + }); + } + + const openedStateSelector = selectors.openMiniCart + '.' + cssClasses.opened, + closedStateSelector = selectors.openMiniCart + ':not(.' + cssClasses.opened + ')'; + + plugin.on('click', element, function (e) { + if (dom.closest(e.target, openedStateSelector)) { + e.preventDefault(); + close(); + } else if (dom.closest(e.target, closedStateSelector)) { + + if (open()) { + e.preventDefault(); + updateContent(); + } + } + }); +}); diff --git a/html/content/js/Filters/filterStatus.js b/html/content/js/Filters/filterStatus.js new file mode 100644 index 0000000..1338b4c --- /dev/null +++ b/html/content/js/Filters/filterStatus.js @@ -0,0 +1,113 @@ +$$plugins.define('filterStatus', ['domHelper'], function (element, options, $) { + var filterName = element.dataset.inputname, + filterInput = element.querySelectorAll('.filter__input'), + clear = element.querySelectorAll('.filtersClear'), + clearAll = document.querySelectorAll('.filtersClearAll'), + selectedRadios, + selectedRadio; + + //on radiobutton, checkbox change + if (filterInput.length > 0) { + for (var i = 0; i < filterInput.length; i++) { + filterInput[i].addEventListener('change', function (e) { + filterGroupStatus(); + selectedFilters(e.target); + filterBarStatus(); + activeFilters(); + }); + } + } + + //clear filter group + for (var i = 0; i < clear.length; i++) { + clear[i].addEventListener('click', function (e) { + clearFilterGroup(); + filterBarStatus(); + activeFilters(); + }) + } + + //clearAll + for (var i = 0; i < clearAll.length; i++) { + clearAll[i].addEventListener('click', function (e) { + document.querySelectorAll('.selectedFilters__remove').forEach((elem) => elem.click()); + filterBarStatus(); + activeFilters(); + }) + } + + //check filter group status + function filterGroupStatus() { + if ($('.filter__input[name=' + filterName + ']:checked').length >= 1) { + element.classList.add('filter--checked'); + } + else { + element.classList.remove('filter--checked'); + } + } + + //add-remove selected filters on filters bar and on filter + function selectedFilters(inputElm) { + if (inputElm.checked) { + var selectedValue = $(inputElm).siblings('.filter__value').text(), + selectedItemId = inputElm.id, + selectedItem = document.createElement('li'), + selectedItemValue = document.createElement('span'), + selectedItemButton = document.createElement('button'); + + selectedItem.dataset.id = selectedItemId; + selectedItem.dataset.name = filterName; + selectedItem.setAttribute("class", "selectedFilters__item"); + selectedItemValue.setAttribute("class", "selectedFilters__value"); + selectedItemValue.innerHTML = selectedValue; + selectedItemButton.setAttribute("class", "selectedFilters__remove"); + + selectedItem.prepend(selectedItemButton); + selectedItem.prepend(selectedItemValue); + document.querySelector('.selectedFilters__list').prepend(selectedItem); + + if (inputElm.classList.contains('radiobutton__input')) { + + selectedRadios = Object.values(element.querySelectorAll('[name=' + filterName + ']')).filter(selectedRadio => selectedRadio !== inputElm); + for (var i = 0; i < selectedRadios.length; i++) { + selectedRadio = document.querySelector('[data-id=' + selectedRadios[i].id + ']') + if (typeof(selectedRadio) != 'undefined' && selectedRadio != null) { + selectedRadio.remove(); + //$('.filter__selectedValItem[data-id=' + $(this).attr('id') + ']').remove(); + } + } + } + } else { + if (inputElm.classList.contains('checkbox__input')) { + document.querySelector('[data-id=' + inputElm.id + ']').remove(); + //$('.filter__selectedValItem[data-id=' + inputElm.attr('id') + ']').remove(); + } + } + } + + //clear filter group + function clearFilterGroup() { + document.querySelectorAll('input[name=' + filterName + ']').forEach((elem) => elem.checked = false); + document.querySelectorAll('[data-name=' + filterName + ']').forEach((elem) => elem.remove()); + //$('.filter__selectedVal[data-name=' + filterName + ']').empty(); + filterGroupStatus(); + } + + function filterBarStatus() { + if ($('.selectedFilters__item').length > 1) { + $('.selectedFilters').addClass('active'); + } else { + $('.selectedFilters').removeClass('active'); + } + } + + //no of active filter groups + function activeFilters() { + document.getElementsByClassName("filters__mobButton")[0].dataset.activefilters = $('.filter--checked').length; + if ($('.filter--checked').length > 0) { + $('.filters').addClass('filters--checked'); + } else { + $('.filters').removeClass('filters--checked'); + } + } +}); \ No newline at end of file diff --git a/html/content/js/Filters/filters.js b/html/content/js/Filters/filters.js new file mode 100644 index 0000000..e5ade01 --- /dev/null +++ b/html/content/js/Filters/filters.js @@ -0,0 +1,110 @@ +$$plugins.define('filters', ['domHelper','throttle'], function (element, options, $, throttle) { + var filterTitle = element.querySelectorAll(".filter__title"), + closeButton = element.querySelectorAll(".filters__close"), + filterBack = element.querySelectorAll(".filters__mobTitle--prev"), + filterContent; + + document.documentElement.style.setProperty('--windowHeight', window.innerHeight + "px"); + + //filter accordions + for (var i = 0; i < filterTitle.length; i++) { + filterTitle[i].addEventListener('click', function (e) { + filterContent = $(e.target).siblings('.filter__content'); + if ($(e.target).parents('.filter').hasClass('filter--closed')) { + $(e.target).parents('.filter').removeClass('filter--closed'); + filterContent.slideDown(240, function () { + filterContent.removeAttr('style'); + }); + if ($('.filter:not(.filter--closed)').not($(e.target).parents('.filter')).length > 0) { + $('.filter:not(.filter--closed)').not($(e.target).parents('.filter')).addClass('filter--closed'); + //$('.filter:not(.filter--closed)').not($(e.target).parents('.filter')).find('.filter__title').trigger('click'); + } + } else { + filterContent.slideUp(240, function () { + $(e.target).parents('.filter').addClass('filter--closed'); + filterContent.removeAttr('style'); + }); + } + }); + }; + + //mobile filter back + for (var i = 0; i < filterBack.length; i++) { + filterBack[i].addEventListener('click', function (e) { + e.target.closest('.filters__item').classList.remove('filters__item--opened'); + element.classList.remove('filters--2levelOpened'); + }) + } + + //mobile filter button + //function scrollEvents() { + // var button = document.getElementsByClassName("filters__mobButton")[0]; + // if (window.scrollY > window.innerHeight * 0.5) { + // button.classList.add("filters__mobButton--mini"); + // } else { + // button.classList.remove("filters__mobButton--mini"); + // } + //} + + function resizeEvents() { + //close mobile menu on desktop + if (window.innerWidth >= 1024 && document.documentElement.classList.contains('filtersOpened')) { + element.classList.remove('filters--opened'); + element.classList.remove('filters--2levelOpened'); + element.querySelector('.filters__item').classList.remove('filters__item--opened'); + document.documentElement.classList.remove('filtersOpened'); + element.style.setProperty('--mobFiltersTop', 0 + "px"); + document.querySelector('.mainContainer').style.transform = ''; + } + + ////mobile filters Height + if (window.innerWidth < 1024) { + document.documentElement.style.setProperty('--windowHeight', window.innerHeight + "px"); + } + } + + //scrollEvents(); + + //window.addEventListener('scroll', EventUtils.throttle(scrollEvents, 50)); + window.addEventListener('resize', throttle(resizeEvents, 200)); + + element.querySelector('.filters__mobButton').addEventListener('click', function (e) { + openFilters(); + }); + + for (var i = 0; i < closeButton.length; i++) { + closeButton[i].addEventListener('click', function (e) { + closeFilters(); + }) + } + + var positionTop; + function openFilters() { + positionTop = -window.pageYOffset; + element.classList.add('filters--opened'); + document.documentElement.classList.add('filtersOpened'); + element.style.setProperty('--mobFiltersTop', -positionTop + "px"); + document.querySelector('.mainContainer').style.transform = "translateY(" + positionTop + "px)"; + } + + function closeFilters() { + element.classList.remove('filters--opened'); + element.classList.remove('filters--2levelOpened'); + setTimeout(function () { element.querySelector('.filters__item--opened').classList.remove('filters__item--opened'); }, 350); + document.documentElement.classList.remove('filtersOpened'); + element.style.setProperty('--mobFiltersTop', 0 + "px"); + document.querySelector('.mainContainer').style.transform = ''; + + window.scrollTo({ + top: -positionTop + }); + } + + document.addEventListener('click', function (event) { + if (!$('.filter').not('.filter--closed').length || $(event.target).parents('.filter').length) { + return; + } + + $('.filter').not('.filter--closed').find('.filter__title').trigger('click'); + }); +}); \ No newline at end of file diff --git a/html/content/js/Filters/filtersBar.js b/html/content/js/Filters/filtersBar.js new file mode 100644 index 0000000..feb3cd9 --- /dev/null +++ b/html/content/js/Filters/filtersBar.js @@ -0,0 +1,32 @@ +$$plugins.define('filtersBar', ['domHelper'], function (element, options, $) { + //clear filter item + //$('.selectedFilters').on('click', '.selectedFilters__remove', function () { + // var filterItemId = $(this).parents('.selectedFilters__item').data('id'), + // filterName = $(this).parents('.selectedFilters__item').data('name'), + // filterGroup = $('.filters__item[data-input-name=' + filterName + ']'); + + // if ($("#" + filterItemId).hasClass('checkbox__input') || $("#" + filterItemId).hasClass('radiobutton__input')) { + // $("#" + filterItemId).prop("checked", false); + // $(this).parents('.selectedFilters__item').remove(); + // $('.filter__selectedValItem[data-id=' + filterItemId + ']').remove(); + // } + + // if ($("#" + filterItemId).hasClass('range')) { + // $(this).parents('.selectedFilters__item').remove(); + // $("#" + filterItemId).parents('.filters__item').find('.filtersClear').trigger('click'); + // } + + // if (filterGroup.find('.filter__input:checked').length >= 1) { + // filterGroup.addClass('filter--checked'); + // } + // else { + // filterGroup.removeClass('filter--checked'); + // } + + // if ($('.selectedFilters__item').length > 1) { + // $('.selectedFilters').addClass('active'); + // } else { + // $('.selectedFilters').removeClass('active'); + // } + //}); +}); diff --git a/html/content/js/Filters/range.js b/html/content/js/Filters/range.js new file mode 100644 index 0000000..fb8c941 --- /dev/null +++ b/html/content/js/Filters/range.js @@ -0,0 +1,98 @@ +$$plugins.define('range', ['domHelper', 'nouislider', 'wNumb', 'debounce'], function (element, options, $, noUiSlider, wNumb, debounce) { + var slider = element.querySelector('.range__slider'), + inputs = $('.range__input--min,.range__input--max'), + selectedMin = element.closest('.filters__item').querySelector('.filter__selectedPriceMin'), + selectedMax = element.closest('.filters__item').querySelector('.filter__selectedPriceMax'); + + + noUiSlider.create(slider, { + start: [options.selectedMin, options.selectedMax], + connect: true, + tooltips: [wNumb({ decimals: 0, postfix: '€' }), wNumb({ decimals: 0, postfix: '€' })], + range: { + 'min': options.initMin, + 'max': options.initMax + } + }); + + + slider.noUiSlider.on('update', function (values, handle) { + var input = inputs.get(handle); + var previousValue = input.value; + + input.value = parseFloat(values[handle]).toFixed(0); + if (input.value == previousValue) { + return; + } + changing = true; + + $(input).trigger('change'); + changing = false; + + selectedMin.innerHTML = slider.noUiSlider.get(true)[0].toFixed(0); + selectedMax.innerHTML = slider.noUiSlider.get(true)[1].toFixed(0); + }); + + var changing = false; + var setValue = debounce(function (handle, value) { + slider.noUiSlider.setHandle(handle, value); + $(inputs.get(handle)).trigger('change'); + }, 500); + + inputs.each(function (input, handle) { + $(input).on('change', function () { + if (changing) { + return; + } + slider.noUiSlider.setHandle(handle, this.value); + }); + + $(input).on('keydown', function (e) { + var value = Number($(this).val()); + var steps = slider.noUiSlider.steps(); + + var step = steps[handle]; + var position; + switch (e.which) { + //enter + case 13: + slider.noUiSlider.setHandle(handle, this.value); + break; + // key up + case 38: + e.preventDefault(); + // Get step to go increase slider value (up) + position = step[1]; + + // false = no step is set + if (position === false) { + position = 1; + } + + // null = edge of slider + if (position !== null) { + setValue(handle, input.value = value + position) + } + + break; + // key down + case 40: + e.preventDefault(); + position = step[0]; + + if (position === false) { + position = 1; + } + + if (position !== null) { + setValue(handle, input.value = value - 1) + } + + break; + } + input.focus(); + }); + }); + + +}); diff --git a/html/content/js/Forms/ajaxForm.js b/html/content/js/Forms/ajaxForm.js new file mode 100644 index 0000000..6ade446 --- /dev/null +++ b/html/content/js/Forms/ajaxForm.js @@ -0,0 +1,188 @@ +$.defineAttributePlugin('ajaxform', ['serialize', 'debounce'], function ($element, options, serialize, debounce) { + options = options || {}; + options.Url = options.Url || $element.attr('action'); + + var loader = ''; + var submit; + var onError = debounce(scrollToFirstError, 100); + + onError(); + + function getElementToReplace() { + var $toReplace; + if (options.ElementID) { + $toReplace = $("#" + options.ElementID); + } + else { + $toReplace = $element.closest('.ajax-replace-container'); + if ($toReplace.length === 0) { + $toReplace = $element.closest('div.form'); + } + if ($toReplace.length === 0) { + $toReplace = $element; + } + } + return $toReplace; + } + + function ajaxComplete(response, $element) { + var flow = response.getResponseHeader("X-FlowComplete"); + + if (flow) { + + $element.trigger('flowcomplete', flow); + } + } + + function createReplacement(content) { + return $(content); // $('
' + content + '
'); //.find('> *'); + } + var submitting = false; + submit = function () { + if (!options.Url || submitting) { + return; + } + submitting = true; + mask(); + var headers = { + "X-NoRedirect": "true" + }; + var $toReplace = getElementToReplace(); + if ($toReplace.is('.ajax-modal')) { + headers["X-Modal"] = "true"; + } + var result = { + redirected: false + }; + + var ajaxOptions = { + url: options.Url, + headers: headers, + beforeSend: function () { + $('body').trigger('TopLoader:Show'); + $element.find('[type="submit"]').attr('disabled', 'disabled'); + }, + type: 'post', + success: function (content, status, response) { + if (content.RedirectUrl) { + result.redirected = true; + window.location.href = content.RedirectUrl; + return; + } + if (content) { + var $replacement = createReplacement(content); + $toReplace.replaceWith($replacement); + $replacement.parseAttributePlugins(); + ajaxComplete(response, $replacement); + $replacement.trigger('ajaxForm.submitted'); + } + else { + ajaxComplete(response, $element); + } + + + }, + complete: function () { + $('body').trigger('TopLoader:Hide'); + if (!result.redirected) { + unmask(); + $element.find('[clicked]').removeAttr('clicked'); + $element.find('[type="submit"]').removeAttr('disabled'); + submitting = false; + } + }, + error: function (r) { + if (r.status === 401) { + location.reload(); + return; + } + } + }; + + if ($element.is("form") && $element.prop("enctype") === "multipart/form-data") { + ajaxOptions.data = new FormData($element.get(0)); + ajaxOptions.contentType = false; + ajaxOptions.processData = false; + } else { + var $elements = $element.find('input[name], textarea[name], select[name], :submit[name][clicked=true]') + ajaxOptions.data = serialize($elements); + } + + $.ajax(ajaxOptions); + }; + + function mask() { + $element.find('[clicked]').addClass('in-progress').append(loader); + $element.trigger('ajaxform.submitting'); + } + function unmask() { + $element.find('[clicked]').removeClass('in-progress').find('.ajax-loader').remove(); + $element.trigger('ajaxform.complete'); + } + + if (options.LazyVerification) { + var s = submit; + submit = function () { + $.ajax({ + url: options.LazyVerification, + beforeSend: function () { + $element.find('[type="submit"]').attr('disabled', 'disabled'); + }, + type: 'post', + success: function (content, status, response) { + $element.append(content); + s(); + }, + complete: function () { + $element.find('[type="submit"]').removeAttr('disabled'); + } + }); + }; + } + $element.find("[type=submit]").click(function () { + $element.find("[type=submit]").removeAttr("clicked"); + $(this).attr("clicked", "true"); + }); + if ($element.is('form')) { + $element.on('submit', function (e) { + + if (options.Url) { + e.preventDefault(); + } + var clickedButton = $element.find('[clicked]'); + if (!clickedButton.is('.cancel')) { + if (!$element.valid()) { + console.warn('validation error'); + onError(); + return; + } + } + submit(); + }); + } + else { + $element.find('[type="submit"]').click(function (e) { + e.preventDefault(); + e.stopPropagation(); + submit(); + }); + } + $element.data('ajaxform.submit', submit); + + function scrollToFirstError() { + var $erroneousElement = $element.find(".field-validation-error").eq(0).parents(".field"); + + if ($erroneousElement.length === 1) { + var top = $erroneousElement.offset().top; + var $header = $('.headerWrp'); + if ($header.length) { + top -= $header.height() + 80; + } + $('html,body').animate({ + scrollTop: top + }, 500); + $erroneousElement.find("input").focus(); + } + } + +}); diff --git a/html/content/js/Forms/clearinput.js b/html/content/js/Forms/clearinput.js new file mode 100644 index 0000000..903244f --- /dev/null +++ b/html/content/js/Forms/clearinput.js @@ -0,0 +1,16 @@ +$$plugins.define('clearinput', function (element, options) { + var input = element.previousElementSibling; + + input.addEventListener("keyup", function (e) { + e.preventDefault(); + if (input.value !== "") { + element.classList.add("active"); + } + }); + + element.addEventListener("click", function (e) { + e.preventDefault(); + input.value = ""; + element.classList.remove("active"); + }); +}); diff --git a/html/content/js/Forms/customValidators.js b/html/content/js/Forms/customValidators.js new file mode 100644 index 0000000..3ebecf9 --- /dev/null +++ b/html/content/js/Forms/customValidators.js @@ -0,0 +1,11 @@ +define(['jQuery', 'jquery.validate', 'jquery.validate.unobtrusive'], function () { + $.validator.unobtrusive.adapters.add("requirechecked", [], + function (options) { + options.rules['requirechecked'] = 'requirechecked'; + options.messages['requirechecked'] = options.message; + } + ); + $.validator.addMethod("requirechecked", function (value, element, e) { + return $(element).is(':checked'); + }); +}); \ No newline at end of file diff --git a/html/content/js/Forms/password.js b/html/content/js/Forms/password.js new file mode 100644 index 0000000..c0ccbef --- /dev/null +++ b/html/content/js/Forms/password.js @@ -0,0 +1,15 @@ +$$plugins.define('password', function (element, options) { + var input = element.previousElementSibling; + + element.addEventListener("click", function (e) { + e.preventDefault(); + if (input.type === 'password') { + input.type = 'text'; + element.classList.add('disabled'); + } + else { + input.type = 'password'; + element.classList.remove('disabled'); + } + }); +}); diff --git a/html/content/js/Forms/select.js b/html/content/js/Forms/select.js new file mode 100644 index 0000000..3ea5435 --- /dev/null +++ b/html/content/js/Forms/select.js @@ -0,0 +1,52 @@ +$$plugins.define('select', ['domHelper'], function (element, options, $) { + var list = element.querySelector('.select__listWrap'), + selected = $('.select__button'), + selectedMob = element.querySelector('.select__button--mobile'), + input = element.querySelector('.select__input'), + options = $('.select__option'); + + function open() { + element.classList.add('select--open'); + $(list).slideDown(250); + } + + function close() { + $(list).slideUp(250, function () { + element.classList.remove('select--open'); + }); + } + + document.addEventListener('click', function (event) { + if (!isOpen() || element == event.target || $(event.target).parents().contains(element)) { + return; + } + close(); + }); + + selected.on("click", function (e) { + e.preventDefault(); + if (element.classList.contains('select--open')) { + close(); + } else { + open(); + } + }); + + function isOpen() { + return element.classList.contains('select--open'); + } + + options.on('click', function (e) { + e.target.classList.add('selected'); + prevActiveOption = Object.values(element.querySelectorAll('.selected')).filter(prevActive => prevActive !== e.target); + if (prevActiveOption.length != 0) { + prevActiveOption[0].classList.remove('selected'); + } + selected.text(e.target.innerHTML); + if (selectedMob) { + selectedMob.innerHTML = e.target.innerHTML; + } + $(input).val(e.target.dataset.value).trigger('change'); + close(); + }); +}); diff --git a/html/content/js/Forms/serialize.js b/html/content/js/Forms/serialize.js new file mode 100644 index 0000000..0bdd44c --- /dev/null +++ b/html/content/js/Forms/serialize.js @@ -0,0 +1,30 @@ +define(function () { + return function ($elements) { + var values = {}; + $elements.each(function () { + var $input = $(this); + var value = $input.val(); + if (!value) { + return; + } + if ($input.is(':checkbox, :radio') && !$input.is(':checked')) { + return; + } + var name = $(this).attr('name'); + var v = values[name] || []; + values[name] = v; + v.push(value); + }); + var s = ''; + for (var k in values) { + for (var i = 0; i < values[k].length; i++) { + s += '&' + k + '=' + encodeURIComponent(values[k][i]); + } + } + if (s) { + s = s.substr(1); + } + return s; + }; + +}); \ No newline at end of file diff --git a/html/content/js/Forms/textarea.js b/html/content/js/Forms/textarea.js new file mode 100644 index 0000000..493c78f --- /dev/null +++ b/html/content/js/Forms/textarea.js @@ -0,0 +1,26 @@ +$$plugins.define('textarea', function (element, options) { + const textarea = element.querySelector('textarea'); + + //style focus + textarea.addEventListener('focus', (event) => { + textarea.closest(".textarea").classList.add("focus"); + }); + + textarea.addEventListener('blur', (event) => { + textarea.closest(".textarea").classList.remove("focus"); + }); + + //characters count + textarea.addEventListener("input", event => { + const target = event.currentTarget; + const maxLength = target.getAttribute("maxlength"); + const currentLength = target.value.length; + const currentLengthText = document.getElementsByClassName("textarea__remaining")[0]; + + currentLengthText.innerHTML = currentLength; + + if (currentLength >= maxLength) { + return; + } + }); +}); diff --git a/html/content/js/Forms/validateform.js b/html/content/js/Forms/validateform.js new file mode 100644 index 0000000..38629e2 --- /dev/null +++ b/html/content/js/Forms/validateform.js @@ -0,0 +1,3 @@ +$.defineAttributePlugin('validateform', ['jQuery', 'jquery.validate', 'jquery.validate.unobtrusive', 'customValidators'], function ($element) { + $.validator.unobtrusive.parse($element); +}); \ No newline at end of file diff --git a/html/content/js/Images/lazyload.js b/html/content/js/Images/lazyload.js new file mode 100644 index 0000000..4f954af --- /dev/null +++ b/html/content/js/Images/lazyload.js @@ -0,0 +1,61 @@ +$$plugins.define('lazyload', function (element, options) { + const plugin = this; + plugin.logger.debug("lazy loading"); + const mutationObserver = + new MutationObserver(function (mutations) { + mutations.forEach(function (mutation, index) { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach(update); + } + }); + }), + observer = + new IntersectionObserver(function (entries, self) { + entries.forEach(function (entry) { + if (entry.isIntersecting) { + load(entry.target); + self.unobserve(entry.target); + } + }); + }, options || { + rootMargin: '0px 0px 1250px 0px', + threshold: 0 + }), + elms = element.querySelectorAll('.lazy'); + elms.forEach(elm => observer.observe(elm)); + mutationObserver.observe(element, { childList: true, subtree: true }); + + function update(element) { + if (!(element instanceof (HTMLElement))) { + return; + } + const container = element || document; + if (!container.querySelectorAll) { + return; + } + const elms = container.querySelectorAll('.lazy'); + Array.prototype.forEach.call(elms, (elm) => !elm.getAttribute('data-loaded') && observer.observe(elm)); + } + + function load(elm) { + let i = 0, source, attr, picture = elm.parentElement, sources = picture.querySelectorAll('.lazysrcset'); + if (sources.length) { + for (; i < sources.length; i++) { + source = sources[i]; + attr = source.getAttribute('data-srcset'); + if (attr) { + source.srcset = source.getAttribute('data-srcset'); + } + } + } + + if (!elm.getAttribute('data-loaded') && elm.getAttribute('data-src')) { + elm.src = elm.getAttribute('data-src'); + elm.setAttribute('data-loaded', true); + } + } + + return { + update: update + }; +}); \ No newline at end of file diff --git a/html/content/js/Modals/modal.js b/html/content/js/Modals/modal.js new file mode 100644 index 0000000..7ce9145 --- /dev/null +++ b/html/content/js/Modals/modal.js @@ -0,0 +1,6 @@ +$$plugins.define('modal', ['domHelper'], function (element, options, $) { + var close = $(element).find('.modal__close'); + close.on('click', function () { + $(element).removeClass('open'); + }); +}); diff --git a/html/content/js/Plugins/accordion.js b/html/content/js/Plugins/accordion.js new file mode 100644 index 0000000..62e25ad --- /dev/null +++ b/html/content/js/Plugins/accordion.js @@ -0,0 +1,43 @@ +$$plugins.define('accordion', ['domHelper'], function (element, options, $) { + var animating = false, + $header = $(element).find('.acc:not(.acc--disabled) .acc__header'), + $content, + $prevActiveAcc, + $this, + $accItem, + singleOpen = options.singleOpen ? options.singleOpen : false; + + $header.on('click', function (e) { + $this = $(this); + $accItem = $this.parent('.acc'); + $content = $this.next('.acc__content'); + if (animating === true) { + return; + } + animating = true; + if ($accItem.is('.open')) { + $content.slideUp(300, function () { + $accItem.removeClass('open'); + $content.removeAttr('style'); + animating = false; + }); + } else { + $content.slideDown(300, function () { + $accItem.addClass('open'); + $content.removeAttr('style'); + animating = false; + }); + + if (singleOpen) { + $prevActiveAcc = $accItem.siblings('.acc.open'); + if ($prevActiveAcc.length != 0) { + $prevActiveAcc.find('.acc__content').slideUp(300, function () { + $prevActiveAcc.removeClass('open'); + $prevActiveAcc.find('.acc__content').removeAttr('style'); + animating = false; + }); + } + } + } + }); +}); diff --git a/html/content/js/Plugins/breadcrumb.js b/html/content/js/Plugins/breadcrumb.js new file mode 100644 index 0000000..112824b --- /dev/null +++ b/html/content/js/Plugins/breadcrumb.js @@ -0,0 +1,9 @@ +$$plugins.define('breadcrumb', function (element, options) { + var scrollPos = element.querySelector('.breadcrumb__item:last-child').offsetLeft - element.offsetLeft; + + element.scroll({ + top: 0, + left: scrollPos, + behavior: 'smooth' + }); +}); diff --git a/html/content/js/Plugins/copy.js b/html/content/js/Plugins/copy.js new file mode 100644 index 0000000..c33430f --- /dev/null +++ b/html/content/js/Plugins/copy.js @@ -0,0 +1,25 @@ +$$plugins.define('copy', function (element, options) { + //copyButton: data-copy-btn + //content to be copied: data-copy-text + //tooltip: data-copy-tooltip + + const copyButton = element, + copyButtonId = copyButton.getAttribute('data-copy-btn'), + copyText = document.querySelector(`[data-copy-text='${copyButtonId}']`), + tooltip = document.querySelector(`[data-copy-tooltip='${copyButtonId}']`); + + function copy() { + var r = document.createRange(); + r.selectNode(copyText); + window.getSelection().removeAllRanges(); + window.getSelection().addRange(r); + document.execCommand('copy'); + window.getSelection().removeAllRanges(); + tooltip.classList.add('copyText__tooltip--open'); + setTimeout(function () { + tooltip.classList.remove('copyText__tooltip--open'); + }, 1600); + } + + copyButton.addEventListener("click", copy); +}); diff --git a/html/content/js/Plugins/expand.js b/html/content/js/Plugins/expand.js new file mode 100644 index 0000000..533e978 --- /dev/null +++ b/html/content/js/Plugins/expand.js @@ -0,0 +1,38 @@ +$$plugins.define('expand', ['domHelper'], function (element, options, $) { + //triggerButton: data-trigger-expand + //content to be initialized: data-content-expand + const triggerButton = element.querySelector('[data-trigger-expand]'), + triggerButtonId = triggerButton.getAttribute('data-trigger-expand'), + content = $(`[data-content-expand='${triggerButtonId}']`); + + var $triggerButton = $(triggerButton); + + $triggerButton.on('click', function (e) { + e.preventDefault(); + if ($triggerButton.hasClass('active')) { + content.slideUp(300, function () { + $triggerButton.removeClass('active'); + content.removeAttr('style'); + }); + } else { + $triggerButton.addClass('active'); + content.slideDown(300, function () { + if (content.find('.scrollbarShadow').length > 0 && !content.find('.scrollbarShadow').hasClass('initialized')) { + content.find('.scrollbarShadow').addClass('initialized'); + } + }); + } + }); + + if (options.closeOnCLickAway == true) { + document.addEventListener('click', function (event) { + if (!$triggerButton.hasClass('active') || element == event.target || $(event.target).parents().contains(element)) { + return; + } + content.slideUp(300, function () { + $triggerButton.removeClass('active'); + content.removeAttr('style'); + }); + }); + } +}); diff --git a/html/content/js/Plugins/expandText.js b/html/content/js/Plugins/expandText.js new file mode 100644 index 0000000..0b58cb7 --- /dev/null +++ b/html/content/js/Plugins/expandText.js @@ -0,0 +1,5 @@ +$$plugins.define('expandText', function (element, options) { + element.querySelector('.expandText__button').addEventListener('click', () => { + element.classList.toggle('open'); + }); +}); diff --git a/html/content/js/Plugins/fileinput.js b/html/content/js/Plugins/fileinput.js new file mode 100644 index 0000000..10ba891 --- /dev/null +++ b/html/content/js/Plugins/fileinput.js @@ -0,0 +1,20 @@ +$$plugins.define('fileinput', function (element, options) { + const inputfile = element.querySelector('.file-upload__input'); + const filedelete = element.querySelector('.file-upload__delete'); + + inputfile.addEventListener('change', (event) => { + const inputname = element.querySelector('.file-upload__name'); + const filename = inputfile.files[0].name; + inputname.innerText = filename; + element.classList.add('file-upload__filled'); + }); + + filedelete.addEventListener('click', (event) => { + const inputname = element.querySelector('.file-upload__name'); + + inputname.innerText = ""; + element.classList.remove('file-upload__filled'); + inputfile.value = ""; + }); + +}); diff --git a/html/content/js/Plugins/gallery.js b/html/content/js/Plugins/gallery.js new file mode 100644 index 0000000..6ac147a --- /dev/null +++ b/html/content/js/Plugins/gallery.js @@ -0,0 +1,51 @@ +$$plugins.define('gallery', ['swiper-bundle', 'domHelper'], function (element, options, Swiper, $) { + var $galleryImg = $('.gallery__figure img'), + thumbs = document.querySelector('.galleryThumbs'), + sliderModal = document.querySelector('.gallerySliderModal'), + $image; + + var swiperThumbs = new Swiper(".galleryThumbs", { + direction: "horizontal", + freeMode: true, + init: false, + slidesPerView: 4, + spaceBetween: 8, + speed: 800, + watchSlidesProgress: true, + pagination: { + el: '.swiper-pagination', + }, + breakpoints: { + 768: { + slidesPerView: 5, + spaceBetween: 17, + } + }, + }); + + var swiperMain = new Swiper(".galleryMainImg", { + init: false, + loop: true, + navigation: { + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }, + speed: 800, + thumbs: { + swiper: swiperThumbs, + }, + }); + + $galleryImg.on('click', function () { + if (!thumbs.classList.contains('swiper-initialized')) { + swiperThumbs.init(); + swiperMain.init(); + } + sliderModal.classList.add('open'); + $image = $(this).parents('.gallery__figure'); + swiperMain.slideTo($image.index() + 1, 0); + + //document.documentElement.classList.add('noScroll'); + + }); +}); \ No newline at end of file diff --git a/html/content/js/Plugins/infoPopup.js b/html/content/js/Plugins/infoPopup.js new file mode 100644 index 0000000..e11ad16 --- /dev/null +++ b/html/content/js/Plugins/infoPopup.js @@ -0,0 +1,8 @@ +$$plugins.define('infoPopup', function (element, options) { + element.addEventListener('click', event => { + element.closest('.infoPopup').classList.add('moveOut'); + setTimeout(function () { + element.closest('.infoPopup').remove() + }, 500); + }); +}); diff --git a/html/content/js/Plugins/initialize.js b/html/content/js/Plugins/initialize.js new file mode 100644 index 0000000..ecdca48 --- /dev/null +++ b/html/content/js/Plugins/initialize.js @@ -0,0 +1,11 @@ +$$plugins.define('initialize', function (element, options) { + //triggerButton: data-trigger-initialize + //content to be initialized: data-content-initialize + + const triggerButton = element.getAttribute('data-trigger-initialize'), + content = document.querySelector(`[data-content-initialize='${triggerButton}']`); + + element.addEventListener('click', function (event) { + content.classList.add("initialized"); + }); +}); diff --git a/html/content/js/Plugins/intersecting.js b/html/content/js/Plugins/intersecting.js new file mode 100644 index 0000000..87faf61 --- /dev/null +++ b/html/content/js/Plugins/intersecting.js @@ -0,0 +1,18 @@ +$$plugins.define('intersecting', function (element, options) { + const el = document.querySelector(options.target); + + const observer = new window.IntersectionObserver(([entry]) => { + const intersectionRatio = entry.intersectionRatio.toFixed(2); + if (entry.isIntersecting) { + element.classList.add("sticky"); + } else { + element.classList.remove("sticky"); + } + }, { + root: null, + rootMargin: '-30% 0px -70%', + threshold: 0 + }) + + observer.observe(el) +}); diff --git a/html/content/js/Plugins/menu.js b/html/content/js/Plugins/menu.js new file mode 100644 index 0000000..d6dced2 --- /dev/null +++ b/html/content/js/Plugins/menu.js @@ -0,0 +1,97 @@ +$$plugins.define('menu', ['domHelper'], function (element, options, $) { + var level1 = $('.mainNav__link--hasChildren', element), + closeElements = $('.mainLayer, .megamenu__close'), + body = $('body'), + burgerMenu = $('.burgerMenu'), + mainContainer = $('.mainContainer'), + header = $('.header'), + megaMenuBack = $('.megamenu__back'), + positionTopDesktop, + scrollBarWidth; + + + level1.on('click', function (event) { + event.preventDefault(); + var $this = $(this); + if ($this.parent('.mainNav__item').is('.mainNav__item--active')) { + closeMenuLevel1($this); + } + else { + openMenuLevel1($this); + } + }); + + //close menu + closeElements.on('click', function () { + if (window.innerWidth < 1024) { + closeMobileMenu(); + } else { + closeMenuLevel1($('.mainNav__item--active .mainNav__link')); + } + }); + + function openMenuLevel1($activeItem) { + var $activeItemParent = $activeItem.parent('.mainNav__item'); + + positionTopDesktop = -window.scrollY; + scrollBarWidth = window.innerWidth - mainContainer.innerWidth(); + + var activeItemsExceptCurrent = $('.mainNav__item--active').not($activeItemParent); + if (activeItemsExceptCurrent.length > 0) { + activeItemsExceptCurrent.removeClass('mainNav__item--active').addClass('mainNav__item--fadeOut'); + setTimeout(function () { + activeItemsExceptCurrent.removeClass('mainNav__item--fadeOut'); + }, 350); + } + + $activeItemParent.addClass('mainNav__item--active'); + body.addClass('menuOpened menuOpened--level2').each(e => e.style.paddingRight = scrollBarWidth + "px"); + burgerMenu.addClass('burgerMenu--opened'); + + mainContainer.each(e => e.style.transform = "translateY(" + positionTopDesktop + "px)"); + header.each(e => e.style.width = "calc(100vw - " + scrollBarWidth + "px)"); + } + + function closeMenuLevel1($activeItem) { + var $activeItemParent = $activeItem.parent('.mainNav__item'); + $activeItemParent.removeClass('mainNav__item--active'); + body.removeClass('menuOpened').each(e => e.style.paddingRight = ""); + burgerMenu.removeClass('burgerMenu--opened'); + mainContainer.each(e => e.style.transform = ""); + header.each(e => e.style.width = ""); + body.scroll({ + top: -positionTopDesktop + }); + } + + burgerMenu.on('click', function (e) { + e.preventDefault(); + if (e.target.matches('.burgerMenu--opened')) { + closeMobileMenu(); + } else { + openMobileMenu(); + } + }); + + var positionTop; + function openMobileMenu() { + positionTop = -window.scrollY; + burgerMenu.addClass('burgerMenu--opened'); + body.addClass('menuOpened menuOpened--level2'); + mainContainer.each(e => e.style.transform = "translateY(" + positionTop + "px)"); + } + + function closeMobileMenu() { + burgerMenu.removeClass('burgerMenu--opened'); + body.removeClass('menuOpened menuOpened--level2'); + mainContainer.each(e => e.style.transform = ""); + body.scroll({ + top: -positionTop + }); + } + + megaMenuBack.on('click', function (event) { + $('.mainNav__item--active').removeClass('mainNav__item--active'); + body.removeClass('menuOpened--level2'); + }); +}); diff --git a/html/content/js/Plugins/quantity.js b/html/content/js/Plugins/quantity.js new file mode 100644 index 0000000..f124c63 --- /dev/null +++ b/html/content/js/Plugins/quantity.js @@ -0,0 +1,55 @@ +$$plugins.define('quantity', ['dom'], function (element, options, dom) { + //const plugin = this, + // increaseButton = element.querySelector('.quantity__btn--inc'), + // decreaseButton = element.querySelector('.quantity__btn--dec'), + // input = element.querySelector('input'), + // maxQuantity = options.MaxQuantity, + // minQuantity = options.MinQuantity || 1; + + //let currentValue = parseInt(input.value); + + //checkButtons(); + //plugin.on('click', increaseButton, updateValue); + //plugin.on('click', decreaseButton, updateValue); + + //function updateValue(e) { + // const button = dom.closest(e.target, '[data-ref="quantity-control"]'), + // previousValue = currentValue; + // if (!button || button.classList.contains('disabled')) { + // return false; + // } + // if (button === increaseButton) { + // currentValue += 1; + // } else { + // currentValue -= 1; + // } + + // console.log(button) + // input.value = currentValue; + // checkButtons(); + // if (options.ItemId) { + // plugin.emit('cart:quantity.changed', { + // quantity: currentValue, + // item: options.ItemId, + // element: e.target, + // fail: function onFail() { + // currentValue = previousValue; + // } + // }); + // } + //} + + //function checkButtons() { + // if (currentValue > minQuantity) { + // decreaseButton.classList.remove('disabled'); + // } else { + // decreaseButton.classList.add('disabled'); + // } + + // if (currentValue < maxQuantity) { + // increaseButton.classList.remove('disabled'); + // } else { + // increaseButton.classList.add('disabled'); + // } + //} +}); diff --git a/html/content/js/Plugins/scrollShadowHor.js b/html/content/js/Plugins/scrollShadowHor.js new file mode 100644 index 0000000..eed0325 --- /dev/null +++ b/html/content/js/Plugins/scrollShadowHor.js @@ -0,0 +1,42 @@ +$$plugins.define('scrollShadowHor', function (element, options) { + var scrollElm = element.querySelector('.scrollbar'), + listInner = element.querySelector('.scrollbar__inner'); + + const observer = new MutationObserver(function(mutations) { + var childrenMutations = mutations.filter((x) => x.type === "childList"); + if (childrenMutations.length > 0){ + checkScrollPos(scrollElm); + } + }); + + observer.observe(listInner, { subtree: true, childList: true }); + + checkScrollPos(scrollElm); + + scrollElm.addEventListener("scroll", function () { + checkScrollPos(this); + }); + + function checkScrollPos(scrollContainer) { + if (scrollContainer.scrollLeft + element.offsetWidth > listInner.offsetWidth - 8) { + element.classList.add('scrollbarShadow--right'); + } else { + element.classList.remove('scrollbarShadow--right'); + } + if (scrollContainer.scrollLeft < 8) { + element.classList.add('scrollbarShadow--left'); + } else { + element.classList.remove('scrollbarShadow--left'); + } + } + + //checkScrollInit(); + + //function checkScrollInit() { + // if (element.offsetWidth >= listInner.offsetWidth) { + // element.classList.add('scrollbarShadow--noScroll'); + // } else { + // element.classList.remove('scrollbarShadow--noScroll'); + // } + //} +}); diff --git a/html/content/js/Plugins/scrollShadowVert.js b/html/content/js/Plugins/scrollShadowVert.js new file mode 100644 index 0000000..2824c22 --- /dev/null +++ b/html/content/js/Plugins/scrollShadowVert.js @@ -0,0 +1,57 @@ +$$plugins.define('scrollShadowVert', function (element, options) { + var scrollElm = element.querySelector('.scrollbar'), + listInner = element.querySelector('.scrollbar__inner'); + + //observer for adding/removing children elements + const observer = new MutationObserver(function (mutations) { + var childrenMutations = mutations.filter((x) => x.type === "childList"); + if (childrenMutations.length > 0) { + checkScrollPos(scrollElm); + } + }); + + observer.observe(listInner, { subtree: true, childList: true }); + + //observer for initialized class + if (options.initialize == true) { + const targetNode = element; + + const observer2 = new MutationObserver(function (mutations) { + var classMutations = mutations.filter((x) => x.type === "attributes"); + if (classMutations.length > 0 && targetNode.classList.contains('initialized')) { + checkScrollPos(scrollElm); + observer2.disconnect(); + } + }); + observer2.observe(targetNode, { attributes: true, attributeFilter: ['class'] }); + } + + checkScrollPos(scrollElm); + + scrollElm.addEventListener("scroll", function () { + checkScrollPos(this); + }); + + function checkScrollPos(scrollContainer) { + if (scrollContainer.scrollTop + element.offsetHeight > listInner.offsetHeight - 8) { + element.classList.add('scrollbarShadow--bottom'); + } else { + element.classList.remove('scrollbarShadow--bottom'); + } + if (scrollContainer.scrollTop < 8) { + element.classList.add('scrollbarShadow--top'); + } else { + element.classList.remove('scrollbarShadow--top'); + } + } + + //checkScrollInit(); + + //function checkScrollInit() { + // if (element.offsetHeight >= listInner.offsetHeight) { + // element.classList.add('scrollbarShadow--noScroll'); + // } else { + // element.classList.remove('scrollbarShadow--noScroll'); + // } + //} +}); diff --git a/html/content/js/Plugins/tabs.js b/html/content/js/Plugins/tabs.js new file mode 100644 index 0000000..74d4efc --- /dev/null +++ b/html/content/js/Plugins/tabs.js @@ -0,0 +1,28 @@ +$.defineAttributePlugin('tabs', function ($element, options) { + var animating = false, + dataTab, + slideSpeed = options.slideSpeed ? options.slideSpeed : 400; + + if (!$element.find("[data-tab-trigger]").hasClass('active')) { + setTimeout(function () { $element.find("[data-tab-trigger]").first().trigger('click'); }, 50); + } + + $element.find("[data-tab-trigger]").click(function (e) { + e.preventDefault(); + if (animating === true || $(this).hasClass('active')) { + return; + } + animating = true; + $(this).addClass('active').siblings().removeClass('active'); + dataTab = $(this).data('tab-trigger'); + + $('[data-tab-content="' + dataTab + '"]').siblings('.active').slideUp(slideSpeed, function () { + $(this).removeClass('active').removeAttr('style'); + }); + + $('[data-tab-content="' + dataTab + '"]').slideDown(slideSpeed, function () { + $(this).addClass('active').removeAttr('style'); + animating = false; + }); + }); +}); diff --git a/html/content/js/Plugins/tabtoggle.js b/html/content/js/Plugins/tabtoggle.js new file mode 100644 index 0000000..84a0508 --- /dev/null +++ b/html/content/js/Plugins/tabtoggle.js @@ -0,0 +1,27 @@ +$$plugins.define('tabtoggle', function (element, options) { + var activeTab = element.querySelector(".active"); + var sliderNav = element.querySelector(".tabToggle__tabs"); + var activeTabContent = document.querySelector("[data-tabToggle-content].active"); + + if (element.querySelector(".tabToggle__tab:nth-child(2)").classList.contains("active")) { + sliderNav.classList.add("slide"); + } + + element.addEventListener("click", function (e) { + if (!(e.target.classList.contains("active"))) { + activeTab.classList.remove("active"); + activeTab = e.target; + + activeTab.classList.add("active"); + sliderNav.classList.toggle("slide"); + activeTabContent.classList.remove("active"); + activeTabContent = document.querySelector("[data-tabToggle-content=" + activeTab.dataset.tabtoggleTarget) + activeTabContent.classList.add("active"); + + window.scrollTo({ + top: activeTabContent.getBoundingClientRect().top + window.scrollY - document.querySelector(".header").offsetHeight, + behavior: 'smooth' + }); + } + }); +}); diff --git a/html/content/js/Plugins/tooltip.js b/html/content/js/Plugins/tooltip.js new file mode 100644 index 0000000..2326caf --- /dev/null +++ b/html/content/js/Plugins/tooltip.js @@ -0,0 +1,45 @@ +$$plugins.define('tooltip', ['throttle'], function (element, options, throttle) { + var openBtn = element.querySelector('.tooltip__btn'), + tooltipMain = element.querySelector('.tooltip__main'); + + openBtn.addEventListener('click', (event) => { + event.preventDefault(); + if (element.classList.contains('tooltip--open')) { + element.classList.remove('tooltip--open'); + } else { + $('.tooltip').not(element).removeClass('tooltip--open'); + element.classList.add('tooltip--open'); + } + }); + + document.addEventListener('click', function (event) { + if (element !== event.target && !element.contains(event.target) && element.classList.contains('tooltip--open')) { + element.classList.remove('tooltip--open'); + } + }); + + function tooltipPosition() { + element.classList.remove('tooltip--bottom'); + element.classList.remove('tooltip--right'); + element.classList.remove('tooltip--left'); + + if (element.getBoundingClientRect().top < window.innerHeight / 2) { + element.classList.add('tooltip--bottom'); + } else { + element.classList.remove('tooltip--bottom'); + } + + if (element.getBoundingClientRect().left < tooltipMain.offsetWidth / 2) { + element.classList.add('tooltip--right'); + } + + if (document.body.clientWidth - element.getBoundingClientRect().left < tooltipMain.offsetWidth / 2) { + element.classList.add('tooltip--left'); + } + } + + tooltipPosition(); + + window.addEventListener('scroll', throttle(tooltipPosition, 50)); + window.addEventListener('resize', throttle(tooltipPosition, 200)); +}); diff --git a/html/content/js/Products/productHeader.js b/html/content/js/Products/productHeader.js new file mode 100644 index 0000000..3e12eee --- /dev/null +++ b/html/content/js/Products/productHeader.js @@ -0,0 +1,21 @@ +$$plugins.define('productHeader', function (element, options) { + const el = document.querySelector('#addToCartButton'); + const header = document.querySelector(".productHeader"); + + const observer = new window.IntersectionObserver(([entry]) => { + if (entry.isIntersecting) { + header.classList.remove("active"); + return + } + if (entry.boundingClientRect.top > 0) { + header.classList.remove("active"); + } else { + header.classList.add("active"); + } + }, { + root: null, + threshold: 0, + }) + + observer.observe(el) +}); diff --git a/html/content/js/Products/productImageModal.js b/html/content/js/Products/productImageModal.js new file mode 100644 index 0000000..9873bed --- /dev/null +++ b/html/content/js/Products/productImageModal.js @@ -0,0 +1,47 @@ +$$plugins.define('productImageModal', ['swiper-bundle', 'domHelper'], function (element, options, Swiper, $) { + var $productImg = $('.productPage__image'), + thumbs = document.querySelector('.productThumbs'), + sliderModal = document.querySelector('.productSliderModal'), + $image; + + var swiperThumbs = new Swiper(".productThumbs", { + direction: "vertical", + freeMode: true, + init: false, + slidesPerView: 'auto', + spaceBetween: 8, + speed: 800, + watchSlidesProgress: true, + breakpoints: { + 0: { + direction: "horizontal", + }, + 640: { + direction: "vertical", + } + } + }); + + var swiperMain = new Swiper(".productMainImg", { + init: false, + loop: true, + navigation: { + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }, + speed: 800, + thumbs: { + swiper: swiperThumbs, + }, + }); + + $productImg.on('click', function () { + if (!thumbs.classList.contains('swiper-initialized')) { + swiperThumbs.init(); + swiperMain.init(); + } + sliderModal.classList.add('open'); + $image = $(this).parents('.productPage__image'); + swiperMain.slideTo($image.index() + 1, 0); + }) +}); diff --git a/html/content/js/Products/productattr.js b/html/content/js/Products/productattr.js new file mode 100644 index 0000000..d28c0a7 --- /dev/null +++ b/html/content/js/Products/productattr.js @@ -0,0 +1,11 @@ +$$plugins.define('productattr', function (element, options) { + const selected = element.querySelector('.productAttr__selected'); + element.querySelectorAll('.radiobutton__input').forEach(input => { + if (input.checked) { + selected.innerHTML = input.parentElement.querySelector('.radiobutton__text').innerText; + } + input.addEventListener('change', function (event) { + selected.innerHTML = event.target.parentElement.querySelector('.radiobutton__text').innerText; + }); + }) +}); diff --git a/html/content/js/Sliders/productsSlider.js b/html/content/js/Sliders/productsSlider.js new file mode 100644 index 0000000..cc043b9 --- /dev/null +++ b/html/content/js/Sliders/productsSlider.js @@ -0,0 +1,45 @@ +// Modules included: +// 'virtual', +// 'mousewheel', +// 'navigation', +// 'pagination', +// 'zoom', +// 'lazy', +// 'autoplay', +// 'thumbs', +// 'manipulation', +// 'effect-fade', + +$$plugins.define('productsSlider', ['swiper-bundle'], function (element, options, Swiper) { + if (element.childNodes.length == 0) { + return; + } + + // init Swiper + const swiper = new Swiper(element, { + breakpoints: { + 0: { + slidesPerGroup: 1 + }, + 768: { + slidesPerGroup: 2 + }, + 1024: { + slidesPerGroup: 3 + } + }, + navigation: { + nextEl: element.querySelector('.swiper-button-next'), + prevEl: element.querySelector('.swiper-button-prev'), + }, + pagination: { + el: element.querySelector('.swiper-pagination'), + type: 'bullets', + clickable: 'true' + }, + slidesPerGroup: 3, + slidesPerView: 'auto', + spaceBetween: 16, + speed: 1000 + }); +}); diff --git a/html/content/js/Sliders/slider.js b/html/content/js/Sliders/slider.js new file mode 100644 index 0000000..a9f5824 --- /dev/null +++ b/html/content/js/Sliders/slider.js @@ -0,0 +1,42 @@ +// Modules included: +// 'virtual', +// 'mousewheel', +// 'navigation', +// 'pagination', +// 'zoom', +// 'lazy', +// 'autoplay', +// 'thumbs', +// 'manipulation', +// 'effect-fade', + +$$plugins.define('slider', ['swiper-bundle'], function (element, options, Swiper) { + if (element.childNodes.length == 0) { + return; + } + + // init Swiper + const swiper = new Swiper(element, { + autoHeight: options.autoHeight ? options.autoHeight : false, + breakpoints: options.breakpoints, + centerInsufficientSlides: options.centerInsufficientSlides ? options.centerInsufficientSlides : false, + centeredSlides: options.centeredSlides ? options.centeredSlides : false, + direction: options.direction ? options.direction : 'horizontal', + effect: options.effect ? options.effect : 'slide', + loop: options.loop ? options.loop : false, + navigation: { + nextEl: element.querySelector('.swiper-button-next'), + prevEl: element.querySelector('.swiper-button-prev'), + }, + pagination: { + el: element.querySelector('.swiper-pagination'), + type: 'bullets', + clickable: 'true' + }, + slidesPerGroup: options.slidesPerGroup ? options.slidesPerGroup : 1, + slidesPerView: options.slidesPerView ? options.slidesPerView : 1, + spaceBetween: options.spaceBetween ? options.spaceBetween : 0, + speed: options.speed ? options.speed : 800, + watchSlidesProgress: true + }); +}); diff --git a/html/content/js/Utils/Event.js b/html/content/js/Utils/Event.js new file mode 100644 index 0000000..7a5ada8 --- /dev/null +++ b/html/content/js/Utils/Event.js @@ -0,0 +1,13 @@ +define(function () { + return function () { + var handlers = []; + this.bind = function (handler) { + handlers.push(handler); + } + this.trigger = function (_this, arguments) { + for (var i = 0; i < handlers.length; i++) { + handlers[i].apply(_this, arguments); + } + } + } +}); \ No newline at end of file diff --git a/html/content/js/Utils/EventUtils.js b/html/content/js/Utils/EventUtils.js new file mode 100644 index 0000000..21a1ce9 --- /dev/null +++ b/html/content/js/Utils/EventUtils.js @@ -0,0 +1,75 @@ +(function(){ + var _ = {}; + _.now = Date.now || function(){ + return new Date().getTime(); + }; + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + var later = function() { + var last = _.now() - timestamp; + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + return result; + }; + }; + + window.EventUtils = _; +}()); \ No newline at end of file diff --git a/html/content/js/Utils/apiready.js b/html/content/js/Utils/apiready.js new file mode 100644 index 0000000..17f1ad4 --- /dev/null +++ b/html/content/js/Utils/apiready.js @@ -0,0 +1,15 @@ +define(function () { + return function ($element, name) { + return new Promise(function (resolve, reject) { + var api = $element.data(name); + if (api) { + resolve(api); + } + else { + $element.one(name + '.ready', function () { + resolve($element.data(name)); + }); + } + }); + }; +}); \ No newline at end of file diff --git a/html/content/js/Utils/confirm.js b/html/content/js/Utils/confirm.js new file mode 100644 index 0000000..ef59cbb --- /dev/null +++ b/html/content/js/Utils/confirm.js @@ -0,0 +1,27 @@ +define(function () { + return function (options, callback) { + var $dialog = $(options.template instanceof jQuery ? options.template.html() : options.template); + $dialog.hide(); + $('body').append($dialog); + $dialog.parseAttributePlugins(); + + function close() { + $dialog.remove(); + } + + function open() { + $dialog.show(); + } + + open(); + $dialog.find('.button.yes').click(function (e) { + e.preventDefault(); + close(); + callback(); + }); + $dialog.find('.button.no').click(function (e) { + e.preventDefault(); + close(); + }); + }; +}); \ No newline at end of file diff --git a/html/content/js/Utils/debounce.js b/html/content/js/Utils/debounce.js new file mode 100644 index 0000000..f81d9a5 --- /dev/null +++ b/html/content/js/Utils/debounce.js @@ -0,0 +1,16 @@ +define('debounce', function () { + return function (func, wait, immediate) { + var timeout; + return function () { + var context = this, args = arguments; + var later = function () { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; + }; +}); diff --git a/html/content/js/Utils/defineApi.js b/html/content/js/Utils/defineApi.js new file mode 100644 index 0000000..3215714 --- /dev/null +++ b/html/content/js/Utils/defineApi.js @@ -0,0 +1,9 @@ +define(function () { + return function ($element, name, api) { + if (typeof (api) === 'undefined' || !api) { + throw 'undefined api'; + } + $element.data(name, api); + $element.trigger(name + '.ready'); + }; +}); \ No newline at end of file diff --git a/html/content/js/Utils/destroyevent.js b/html/content/js/Utils/destroyevent.js new file mode 100644 index 0000000..e6fe48a --- /dev/null +++ b/html/content/js/Utils/destroyevent.js @@ -0,0 +1,11 @@ +define(function () { + (function ($) { + $.event.special.destroyed = { + remove: function (o) { + if ((o.handler && o.type !== 'destroyed')) { + o.handler() + } + } + } + })(jQuery) +}); \ No newline at end of file diff --git a/html/content/js/Utils/dom.js b/html/content/js/Utils/dom.js new file mode 100644 index 0000000..78f3562 --- /dev/null +++ b/html/content/js/Utils/dom.js @@ -0,0 +1,68 @@ +define(function () { + const reduce = (elements, fn, initialValue) => { + return Array.prototype.reduce.call(elements, fn, initialValue); + } + + const forEach = (elements, fn) => { + Array.prototype.forEach.call(elements, fn); + } + const map = (elements, fn) => { + return Array.prototype.map.call(elements, fn); + } + + const replace = (toReplace, replacement) => { + var parentElement = toReplace.parentElement + if (parentElement) { + parentElement.replaceChild(replacement, toReplace); + } + } + + const matches = (element, selector) => { + var m = element.matches + || Element.prototype.matchesSelector + || Element.prototype.mozMatchesSelector + || Element.prototype.msMatchesSelector + || Element.prototype.oMatchesSelector + || Element.prototype.webkitMatchesSelector; + return m.call(element, selector); + } + + const closest = (element, selector) => { + while (element) { + if (matches(element, selector)) { + return element; + } else { + element = element.parentElement; + } + } + return null; + } + const isFunction = (input) => (typeof input === "function"); + const dispatchEvent = (eventName, data) => { + let event; + if (window.CustomEvent && isFunction(window.CustomEvent)) { + event = new CustomEvent(eventName, { detail: data, cancelable: true, bubbles: false }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(eventName, false, true, data); + } + return window.document.dispatchEvent(event); + } + + const parseHtml = (htmlString) => { + const c = document.createElement('div'); + c.innerHTML = htmlString.trim(); + return c.firstChild; + } + + return { + dispatchEvent, + closest, + matches, + reduce, + map, + forEach, + replace, + parseHtml + }; +}); \ No newline at end of file diff --git a/html/content/js/Utils/domHelper.js b/html/content/js/Utils/domHelper.js new file mode 100644 index 0000000..f36ab1a --- /dev/null +++ b/html/content/js/Utils/domHelper.js @@ -0,0 +1,375 @@ +define(function () { + + function isElement(obj) { + //instanceof fails for elements that have been created by another document (iframe case) + //in that case we check other properties existing in all element nodes + return obj instanceof HTMLElement || ((typeof obj === "object") && + (obj.nodeType === 1) && (typeof obj.style === "object") && + (typeof obj.ownerDocument === "object")); + } + + let slideUp = (target, duration = 500, callback = null) => { + target.style.transitionProperty = 'height, margin, padding'; + target.style.transitionDuration = duration + 'ms'; + target.style.boxSizing = 'border-box'; + target.style.height = target.offsetHeight + 'px'; + target.offsetHeight; + target.style.overflow = 'hidden'; + target.style.height = 0; + target.style.paddingTop = 0; + target.style.paddingBottom = 0; + target.style.marginTop = 0; + target.style.marginBottom = 0; + window.setTimeout(() => { + target.style.display = 'none'; + target.style.removeProperty('height'); + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + if (callback) { + callback(); + } + }, duration); + } + + let slideDown = (target, duration = 500, callback = null) => { + target.style.removeProperty('display'); + let display = window.getComputedStyle(target).display; + + if (display === 'none') + display = 'block'; + + target.style.display = display; + let height = target.offsetHeight; + target.style.overflow = 'hidden'; + target.style.height = 0; + target.style.paddingTop = 0; + target.style.paddingBottom = 0; + target.style.marginTop = 0; + target.style.marginBottom = 0; + target.offsetHeight; + target.style.boxSizing = 'border-box'; + target.style.transitionProperty = "height, margin, padding"; + target.style.transitionDuration = duration + 'ms'; + target.style.height = height + 'px'; + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + window.setTimeout(() => { + target.style.removeProperty('height'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + if (callback) { + callback(); + } + }, duration); + } + + var slideToggle = (target, duration = 500, callback = null) => { + if (window.getComputedStyle(target).display === 'none') { + return slideDown(target, duration, callback); + } else { + return slideUp(target, duration, callback); + } + } + + function resolveSelector(selector, context) { + if (typeof (selector) !== "string") { + if (context) { + throw 'Context is allowed only when selector is a string.'; + } + if (Array.isArray(selector)) { + return selector; + } + if (isElement(selector)) { + return [selector]; + } + + throw 'Selector can either be a string or an array'; + } + if (!context) { + return document.querySelectorAll(selector); + } + if (typeof (context) == "string") { + return resolveSelector(selector).filter(element => element.matches(selector)); + } + else if (Array.isArray(context)) { + return context.filter(element => element.matches(selector)); + } + else if (isElement(context)) { + return context.querySelectorAll(selector); + } + else { + throw 'Unknown context type: ' + typeof (context) + ". Not a string, array or HTMLElement."; + } + } + + var factory = (target, context) => new domHelper(target, context); + function domHelper(target, context) { + this.elements = Array.from(resolveSelector(target, context)); + this.on = function (event, callback) { + for (let i = 0; i < this.elements.length; i++) { + this.elements[i].addEventListener(event, function (e) { + callback.apply(e.target, arguments); + }); + } + return this; + } + this.parent = function (selector) { + if (!selector) { + return factory( + this.elements.map(e => e.parentElement).filter(e => e) + ); + } + return factory( + this.elements.map(element => { + do { + if (element.parentElement.matches(selector)) { + return element.parentElement; + } + element = element.parentElement; + + } while (element.parentElement); + return null; + }).filter(e => e) + ); + } + this.parents = function (selector) { + var parents = this.elements.map(e => { + var r = []; + while (e.parentElement) { + r.push(e.parentElement); + e = e.parentElement; + } + return r; + }).reduce((acc, curVal) => { + return acc.concat(curVal) + }).filter(e => e); + + if (!selector) { + return factory(parents); + } + return factory(selector, parents); + } + this.find = function (selector) { + return factory(this.elements.map(e => { + return factory(selector, e).elements; + }).reduce((acc, curVal) => { + return acc.concat(curVal) + })); + } + this.show = function () { + this.each(e => e.style.display = "block"); + } + this.hide = function () { + this.each(e => e.style.display = "none"); + } + this.innerWidth = function () { + var element = this.elements[0]; + return parseInt(window.getComputedStyle(element).width); + } + this.toggle = function () { + this.each(e => { + if ((e.offsetParent === null)) // hidden + { + e.style.display = "block"; + } + else { + e.style.display = "none"; + } + }); + } + this.each = function (callback) { + this.elements.forEach(callback); + return this; + } + this.scroll = function () { + this.each(element => element.scroll.apply(element, arguments)); + return this; + } + this.addClass = function (cssClass) { + if (!cssClass) { + return; + } + var classes = cssClass.split(' '); + this.elements.forEach(element => { + classes.forEach(cssClass => { + element.classList.add(cssClass); + }); + }); + return this; + } + this.removeClass = function (cssClass) { + if (!cssClass) { + return; + } + var classes = cssClass.split(' '); + this.elements.forEach(element => { + classes.forEach(cssClass => { + element.classList.remove(cssClass); + }); + }); + return this; + } + this.toggleClass = function (cssClass) { + if (!cssClass) { + return; + } + var classes = cssClass.split(' '); + this.elements.forEach(element => { + classes.forEach(cssClass => { + element.classList.toggle(cssClass); + }); + }); + return this; + } + this.is = function (selector) { + return factory(selector, this.elements).elements.length > 0; + } + this.not = function (exclude) { + if (typeof (exclude) == "string") { + return factory(this.elements.filter(e => !e.matches(exclude))); + } + else if (Array.isArray(exclude)) { + return factory(this.elements.filter(e => exclude.indexOf(e) == -1)); + } + else if (isElement(exclude)) { + return factory(this.elements.filter(e => e != exclude)); + } + else if (exclude instanceof domHelper) { + return factory(this.elements.filter(e => exclude.elements.indexOf(e) == -1)); + } + else { + throw 'Unknown exclude type: ' + typeof (exclude) + ". Not a string, array or HTMLElement or domHelper."; + } + } + this.get = (index) => this.elements[index]; + this.length = this.elements.length; + this.siblings = function (selector) { + var next = this.next(selector); + var prev = this.prev(selector); + return factory(prev.elements.concat(next.elements)); + } + this.next = function (selector) { + var siblings = this.elements.map(e => { + var r = []; + while (e.nextElementSibling) { + r.push(e.nextElementSibling); + e = e.nextElementSibling; + } + return r; + }).reduce((acc, curVal) => { + return acc.concat(curVal) + }).filter(e => e); + + if (!selector) { + return factory(siblings); + } + return factory(selector, siblings); + } + this.prev = function (selector) { + var siblings = this.elements.map(e => { + var r = []; + while (e.previousElementSibling) { + r.push(e.previousElementSibling); + e = e.previousElementSibling; + } + return r; + }).reduce((acc, curVal) => { + return acc.concat(curVal) + }).filter(e => e); + + if (!selector) { + return factory(siblings); + } + return factory(selector, siblings); + } + this.index = function () { + var items = []; + this.prev().each(function (e) { + items.push(e); + }); + items.push(this.get(0)); + this.next().each(function (e) { + items.push(e); + }); + return items.indexOf(this.get(0)); + } + this.slideDown = function (duration, callback) { + return this.each(function (e) { + slideDown(e, duration, callback); + }); + } + this.slideUp = function (duration, callback) { + return this.each(function (e) { + slideUp(e, duration, callback); + }); + } + this.slideToggle = function (duration, callback) { + return this.each(function (e) { + slideToggle(e, duration, callback); + }); + } + this.removeAttr = function (attribute) { + this.each(e => e.removeAttribute(attribute)); + } + this.hasClass = function (cssClass) { + if (!cssClass) { + return; + } + return new RegExp('(\\s|^)' + cssClass + '(\\s|$)').test(this.get(0).className); + } + this.val = function (inputValue) { + if (typeof (inputValue) === 'undefined') { + return this.elements[0].value; + } + return this.each(function (e) { + e.value = inputValue; + }); + } + this.data = function (attribute, inputValue) { + if (typeof (inputValue) === 'undefined') { + return this.elements[0].dataset[attribute]; + } + return this.each(function (e) { + e.dataset[attribute] = inputValue; + }); + } + this.text = function (inputValue) { + if (typeof (inputValue) === 'undefined') { + return this.elements[0].innerText; + } + return this.each(function (e) { + e.innerText = inputValue; + }); + } + this.contains = function (element) { + return this.elements.indexOf(element) >= 0; + } + + this.trigger = function (eventName) { + + if ("createEvent" in document) { + var evt = document.createEvent("HTMLEvents"); + evt.initEvent(eventName, false, true); + return this.each(function (e) { + e.dispatchEvent(evt); + }); + } + else { + return this.each(function (e) { + e.fireEvent("on" + eventName); + }); + + } + } + } + + return factory; +}); \ No newline at end of file diff --git a/html/content/js/Utils/enabled.js b/html/content/js/Utils/enabled.js new file mode 100644 index 0000000..658b2dc --- /dev/null +++ b/html/content/js/Utils/enabled.js @@ -0,0 +1,6 @@ +define(function () { + $.fn.enabled = function (e) { + $(this).prop('disabled', !e); + $(this).trigger('enabled:change', e); + }; +}); \ No newline at end of file diff --git a/html/content/js/Utils/getApis.js b/html/content/js/Utils/getApis.js new file mode 100644 index 0000000..46788a6 --- /dev/null +++ b/html/content/js/Utils/getApis.js @@ -0,0 +1,17 @@ +define(['apiReady', 'whenAll'], function (apiReady, whenAll) { + return function ($elements, name) { + var result = []; + var d = $.Deferred(); + var p = $elements.map(function () { + var $element = $(this); + return apiReady($element, name).then(function (api) { + result.push({ api: api, $element: $element }); + }); + }); + whenAll(p).then(function () { + d.resolve(result); + }); + + return d; + }; +}); \ No newline at end of file diff --git a/html/content/js/Utils/throttle.js b/html/content/js/Utils/throttle.js new file mode 100644 index 0000000..ccfc9a7 --- /dev/null +++ b/html/content/js/Utils/throttle.js @@ -0,0 +1,15 @@ +define(function () { + return function (func, limit) { + var timeout; + var inThrottle; + return function () { + var context = this, args = arguments; + if (!inThrottle) { + func.apply(context, args); + inThrottle = true; + } + setTimeout(() => inThrottle = false, limit); + + }; + }; +}); diff --git a/html/content/js/Utils/whenAll.js b/html/content/js/Utils/whenAll.js new file mode 100644 index 0000000..8d1c3e2 --- /dev/null +++ b/html/content/js/Utils/whenAll.js @@ -0,0 +1,13 @@ +define(function () { + return function (deferreds) { + return $.Deferred(function (def) { + $.when.apply(jQuery, deferreds).then( + function () { + def.resolveWith(this, [Array.prototype.slice.call(arguments)]); + }, + function () { + def.rejectWith(this, [Array.prototype.slice.call(arguments)]); + }); + }); + }; +}); diff --git a/html/content/js/Wishlist/wishlistbutton.js b/html/content/js/Wishlist/wishlistbutton.js new file mode 100644 index 0000000..bde43c1 --- /dev/null +++ b/html/content/js/Wishlist/wishlistbutton.js @@ -0,0 +1,25 @@ +$$plugins.define('wishlistbutton', ['domHelper'], function (element, options, $) { + const $button = $(element).find('.listsClose'); + + $button.on('click', function () { + if (window.innerWidth > 768) { + $button.siblings('.listsBlock').slideToggle(300, function () { + $(element).toggleClass('open'); + $button.siblings('.listsBlock').removeAttr('style'); + }); + } else { + $(element).toggleClass('open'); + } + }); + + document.addEventListener('click', function (event) { + if (!$(element).hasClass('open') || element == event.target || $(event.target).parents().contains(element)) { + return; + } + $button.siblings('.listsBlock').slideUp(300, function () { + $(element).removeClass('open'); + $button.siblings('.listsBlock').removeAttr('style'); + }); + }); + +}); \ No newline at end of file diff --git a/html/content/lib/current-device.min.js b/html/content/lib/current-device.min.js new file mode 100644 index 0000000..a6fae95 --- /dev/null +++ b/html/content/lib/current-device.min.js @@ -0,0 +1,2 @@ +!function(n,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.device=e():n.device=e()}(window,function(){return function(n){var e={};function o(t){if(e[t])return e[t].exports;var i=e[t]={i:t,l:!1,exports:{}};return n[t].call(i.exports,i,i.exports,o),i.l=!0,i.exports}return o.m=n,o.c=e,o.d=function(n,e,t){o.o(n,e)||Object.defineProperty(n,e,{configurable:!1,enumerable:!0,get:t})},o.r=function(n){Object.defineProperty(n,"__esModule",{value:!0})},o.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(e,"a",e),e},o.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},o.p="",o(o.s=1)}([function(n,e,o){"use strict";o.r(e);var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},i=window.device,r={},a=[];window.device=r;var c=window.document.documentElement,d=window.navigator.userAgent.toLowerCase(),u=["googletv","viera","smarttv","internet.tv","netcast","nettv","appletv","boxee","kylo","roku","dlnadoc","roku","pov_tv","hbbtv","ce-html"];function l(n){return-1!==d.indexOf(n)}function s(n){return c.className.match(new RegExp(n,"i"))}function f(n){var e=null;s(n)||(e=c.className.replace(/^\s+|\s+$/g,""),c.className=e+" "+n)}function b(n){s(n)&&(c.className=c.className.replace(" "+n,""))}function p(){r.landscape()?(b("portrait"),f("landscape"),w("landscape")):(b("landscape"),f("portrait"),w("portrait")),h()}function w(n){for(var e in a)a[e](n)}r.macos=function(){return l("mac")},r.ios=function(){return r.iphone()||r.ipod()||r.ipad()},r.iphone=function(){return!r.windows()&&l("iphone")},r.ipod=function(){return l("ipod")},r.ipad=function(){return l("ipad")},r.android=function(){return!r.windows()&&l("android")},r.androidPhone=function(){return r.android()&&l("mobile")},r.androidTablet=function(){return r.android()&&!l("mobile")},r.blackberry=function(){return l("blackberry")||l("bb10")||l("rim")},r.blackberryPhone=function(){return r.blackberry()&&!l("tablet")},r.blackberryTablet=function(){return r.blackberry()&&l("tablet")},r.windows=function(){return l("windows")},r.windowsPhone=function(){return r.windows()&&l("phone")},r.windowsTablet=function(){return r.windows()&&l("touch")&&!r.windowsPhone()},r.fxos=function(){return(l("(mobile")||l("(tablet"))&&l(" rv:")},r.fxosPhone=function(){return r.fxos()&&l("mobile")},r.fxosTablet=function(){return r.fxos()&&l("tablet")},r.meego=function(){return l("meego")},r.cordova=function(){return window.cordova&&"file:"===location.protocol},r.nodeWebkit=function(){return"object"===t(window.process)},r.mobile=function(){return r.androidPhone()||r.iphone()||r.ipod()||r.windowsPhone()||r.blackberryPhone()||r.fxosPhone()||r.meego()},r.tablet=function(){return r.ipad()||r.androidTablet()||r.blackberryTablet()||r.windowsTablet()||r.fxosTablet()},r.desktop=function(){return!r.tablet()&&!r.mobile()},r.television=function(){for(var n=0;n1},r.landscape=function(){return screen.orientation&&Object.prototype.hasOwnProperty.call(window,"onorientationchange")?screen.orientation.type.includes("landscape"):window.innerHeight/window.innerWidth<1},r.noConflict=function(){return window.device=i,this},r.ios()?r.ipad()?f("ios ipad tablet"):r.iphone()?f("ios iphone mobile"):r.ipod()&&f("ios ipod mobile"):r.macos()?f("macos desktop"):r.android()?r.androidTablet()?f("android tablet"):f("android mobile"):r.blackberry()?r.blackberryTablet()?f("blackberry tablet"):f("blackberry mobile"):r.windows()?r.windowsTablet()?f("windows tablet"):r.windowsPhone()?f("windows mobile"):f("windows desktop"):r.fxos()?r.fxosTablet()?f("fxos tablet"):f("fxos mobile"):r.meego()?f("meego mobile"):r.nodeWebkit()?f("node-webkit"):r.television()?f("television"):r.desktop()&&f("desktop"),r.cordova()&&f("cordova"),r.onChangeOrientation=function(n){"function"==typeof n&&a.push(n)};var m="resize";function y(n){for(var e=0;e?@\[\\\]^`{|}~])/g, "\\$1"); + } + + function getModelPrefix(fieldName) { + return fieldName.substr(0, fieldName.lastIndexOf(".") + 1); + } + + function appendModelPrefix(value, prefix) { + if (value.indexOf("*.") === 0) { + value = value.replace("*.", prefix); + } + return value; + } + + function onError(error, inputElement) { // 'this' is the form element + var container = $(this).find("[data-valmsg-for='" + escapeAttributeValue(inputElement[0].name) + "']"), + replaceAttrValue = container.attr("data-valmsg-replace"), + replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) !== false : null; + + container.removeClass("field-validation-valid").addClass("field-validation-error"); + error.data("unobtrusiveContainer", container); + + if (replace) { + container.empty(); + error.removeClass("input-validation-error").appendTo(container); + } + else { + error.hide(); + } + } + + function onErrors(event, validator) { // 'this' is the form element + var container = $(this).find("[data-valmsg-summary=true]"), + list = container.find("ul"); + + if (list && list.length && validator.errorList.length) { + list.empty(); + container.addClass("validation-summary-errors").removeClass("validation-summary-valid"); + + $.each(validator.errorList, function () { + $("
  • ").html(this.message).appendTo(list); + }); + } + } + + function onSuccess(error) { // 'this' is the form element + var container = error.data("unobtrusiveContainer"); + + if (container) { + var replaceAttrValue = container.attr("data-valmsg-replace"), + replace = replaceAttrValue ? $.parseJSON(replaceAttrValue) : null; + + container.addClass("field-validation-valid").removeClass("field-validation-error"); + error.removeData("unobtrusiveContainer"); + + if (replace) { + container.empty(); + } + } + } + + function onReset(event) { // 'this' is the form element + var $form = $(this), + key = '__jquery_unobtrusive_validation_form_reset'; + if ($form.data(key)) { + return; + } + // Set a flag that indicates we're currently resetting the form. + $form.data(key, true); + try { + $form.data("validator").resetForm(); + } finally { + $form.removeData(key); + } + + $form.find(".validation-summary-errors") + .addClass("validation-summary-valid") + .removeClass("validation-summary-errors"); + $form.find(".field-validation-error") + .addClass("field-validation-valid") + .removeClass("field-validation-error") + .removeData("unobtrusiveContainer") + .find(">*") // If we were using valmsg-replace, get the underlying error + .removeData("unobtrusiveContainer"); + } + + function validationInfo(form) { + var $form = $(form), + result = $form.data(data_validation), + onResetProxy = $.proxy(onReset, form), + defaultOptions = $jQval.unobtrusive.options || {}, + execInContext = function (name, args) { + var func = defaultOptions[name]; + func && $.isFunction(func) && func.apply(form, args); + }; + + if (!result) { + result = { + options: { // options structure passed to jQuery Validate's validate() method + errorClass: defaultOptions.errorClass || "input-validation-error", + errorElement: defaultOptions.errorElement || "span", + errorPlacement: function () { + onError.apply(form, arguments); + execInContext("errorPlacement", arguments); + }, + invalidHandler: function () { + onErrors.apply(form, arguments); + execInContext("invalidHandler", arguments); + }, + messages: {}, + rules: {}, + success: function () { + onSuccess.apply(form, arguments); + execInContext("success", arguments); + } + }, + attachValidation: function () { + $form + .off("reset." + data_validation, onResetProxy) + .on("reset." + data_validation, onResetProxy) + .validate(this.options); + }, + validate: function () { // a validation function that is called by unobtrusive Ajax + $form.validate(); + return $form.valid(); + } + }; + $form.data(data_validation, result); + } + + return result; + } + + $jQval.unobtrusive = { + adapters: [], + + parseElement: function (element, skipAttach) { + /// + /// Parses a single HTML element for unobtrusive validation attributes. + /// + /// The HTML element to be parsed. + /// [Optional] true to skip attaching the + /// validation to the form. If parsing just this single element, you should specify true. + /// If parsing several elements, you should specify false, and manually attach the validation + /// to the form when you are finished. The default is false. + var $element = $(element), + form = $element.parents("form")[0], + valInfo, rules, messages; + + if (!form) { // Cannot do client-side validation without a form + return; + } + + valInfo = validationInfo(form); + valInfo.options.rules[element.name] = rules = {}; + valInfo.options.messages[element.name] = messages = {}; + + $.each(this.adapters, function () { + var prefix = "data-val-" + this.name, + message = $element.attr(prefix), + paramValues = {}; + + if (message !== undefined) { // Compare against undefined, because an empty message is legal (and falsy) + prefix += "-"; + + $.each(this.params, function () { + paramValues[this] = $element.attr(prefix + this); + }); + + this.adapt({ + element: element, + form: form, + message: message, + params: paramValues, + rules: rules, + messages: messages + }); + } + }); + + $.extend(rules, { "__dummy__": true }); + + if (!skipAttach) { + valInfo.attachValidation(); + } + }, + + parse: function (selector) { + /// + /// Parses all the HTML elements in the specified selector. It looks for input elements decorated + /// with the [data-val=true] attribute value and enables validation according to the data-val-* + /// attribute values. + /// + /// Any valid jQuery selector. + + // $forms includes all forms in selector's DOM hierarchy (parent, children and self) that have at least one + // element with data-val=true + var $selector = $(selector), + $forms = $selector.parents() + .addBack() + .filter("form") + .add($selector.find("form")) + .has("[data-val=true]"); + + $selector.find("[data-val=true]").each(function () { + $jQval.unobtrusive.parseElement(this, true); + }); + + $forms.each(function () { + var info = validationInfo(this); + if (info) { + info.attachValidation(); + } + }); + } + }; + + adapters = $jQval.unobtrusive.adapters; + + adapters.add = function (adapterName, params, fn) { + /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation. + /// The name of the adapter to be added. This matches the name used + /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name). + /// [Optional] An array of parameter names (strings) that will + /// be extracted from the data-val-nnnn-mmmm HTML attributes (where nnnn is the adapter name, and + /// mmmm is the parameter name). + /// The function to call, which adapts the values from the HTML + /// attributes into jQuery Validate rules and/or messages. + /// + if (!fn) { // Called with no params, just a function + fn = params; + params = []; + } + this.push({ name: adapterName, params: params, adapt: fn }); + return this; + }; + + adapters.addBool = function (adapterName, ruleName) { + /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where + /// the jQuery Validate validation rule has no parameter values. + /// The name of the adapter to be added. This matches the name used + /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name). + /// [Optional] The name of the jQuery Validate rule. If not provided, the value + /// of adapterName will be used instead. + /// + return this.add(adapterName, function (options) { + setValidationValues(options, ruleName || adapterName, true); + }); + }; + + adapters.addMinMax = function (adapterName, minRuleName, maxRuleName, minMaxRuleName, minAttribute, maxAttribute) { + /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where + /// the jQuery Validate validation has three potential rules (one for min-only, one for max-only, and + /// one for min-and-max). The HTML parameters are expected to be named -min and -max. + /// The name of the adapter to be added. This matches the name used + /// in the data-val-nnnn HTML attribute (where nnnn is the adapter name). + /// The name of the jQuery Validate rule to be used when you only + /// have a minimum value. + /// The name of the jQuery Validate rule to be used when you only + /// have a maximum value. + /// The name of the jQuery Validate rule to be used when you + /// have both a minimum and maximum value. + /// [Optional] The name of the HTML attribute that + /// contains the minimum value. The default is "min". + /// [Optional] The name of the HTML attribute that + /// contains the maximum value. The default is "max". + /// + return this.add(adapterName, [minAttribute || "min", maxAttribute || "max"], function (options) { + var min = options.params.min, + max = options.params.max; + + if (min && max) { + setValidationValues(options, minMaxRuleName, [min, max]); + } + else if (min) { + setValidationValues(options, minRuleName, min); + } + else if (max) { + setValidationValues(options, maxRuleName, max); + } + }); + }; + + adapters.addSingleVal = function (adapterName, attribute, ruleName) { + /// Adds a new adapter to convert unobtrusive HTML into a jQuery Validate validation, where + /// the jQuery Validate validation rule has a single value. + /// The name of the adapter to be added. This matches the name used + /// in the data-val-nnnn HTML attribute(where nnnn is the adapter name). + /// [Optional] The name of the HTML attribute that contains the value. + /// The default is "val". + /// [Optional] The name of the jQuery Validate rule. If not provided, the value + /// of adapterName will be used instead. + /// + return this.add(adapterName, [attribute || "val"], function (options) { + setValidationValues(options, ruleName || adapterName, options.params[attribute]); + }); + }; + + $jQval.addMethod("__dummy__", function (value, element, params) { + return true; + }); + + $jQval.addMethod("regex", function (value, element, params) { + var match; + if (this.optional(element)) { + return true; + } + + match = new RegExp(params).exec(value); + return (match && (match.index === 0) && (match[0].length === value.length)); + }); + + $jQval.addMethod("nonalphamin", function (value, element, nonalphamin) { + var match; + if (nonalphamin) { + match = value.match(/\W/g); + match = match && match.length >= nonalphamin; + } + return match; + }); + + if ($jQval.methods.extension) { + adapters.addSingleVal("accept", "mimtype"); + adapters.addSingleVal("extension", "extension"); + } else { + // for backward compatibility, when the 'extension' validation method does not exist, such as with versions + // of JQuery Validation plugin prior to 1.10, we should use the 'accept' method for + // validating the extension, and ignore mime-type validations as they are not supported. + adapters.addSingleVal("extension", "extension", "accept"); + } + + adapters.addSingleVal("regex", "pattern"); + adapters.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"); + adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range"); + adapters.addMinMax("minlength", "minlength").addMinMax("maxlength", "minlength", "maxlength"); + adapters.add("equalto", ["other"], function (options) { + var prefix = getModelPrefix(options.element.name), + other = options.params.other, + fullOtherName = appendModelPrefix(other, prefix), + element = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(fullOtherName) + "']")[0]; + + setValidationValues(options, "equalTo", element); + }); + adapters.add("required", function (options) { + // jQuery Validate equates "required" with "mandatory" for checkbox elements + if (options.element.tagName.toUpperCase() !== "INPUT" || options.element.type.toUpperCase() !== "CHECKBOX") { + setValidationValues(options, "required", true); + } + }); + adapters.add("remote", ["url", "type", "additionalfields"], function (options) { + var value = { + url: options.params.url, + type: options.params.type || "GET", + data: {} + }, + prefix = getModelPrefix(options.element.name); + + $.each(splitAndTrim(options.params.additionalfields || options.element.name), function (i, fieldName) { + var paramName = appendModelPrefix(fieldName, prefix); + value.data[paramName] = function () { + var field = $(options.form).find(":input").filter("[name='" + escapeAttributeValue(paramName) + "']"); + // For checkboxes and radio buttons, only pick up values from checked fields. + if (field.is(":checkbox")) { + return field.filter(":checked").val() || field.filter(":hidden").val() || ''; + } + else if (field.is(":radio")) { + return field.filter(":checked").val() || ''; + } + return field.val(); + }; + }); + + setValidationValues(options, "remote", value); + }); + adapters.add("password", ["min", "nonalphamin", "regex"], function (options) { + if (options.params.min) { + setValidationValues(options, "minlength", options.params.min); + } + if (options.params.nonalphamin) { + setValidationValues(options, "nonalphamin", options.params.nonalphamin); + } + if (options.params.regex) { + setValidationValues(options, "regex", options.params.regex); + } + }); + adapters.add("fileextensions", ["extensions"], function (options) { + setValidationValues(options, "extension", options.params.extensions); + }); + + $(function () { + $jQval.unobtrusive.parse(document); + }); + + return $jQval.unobtrusive; +})); diff --git a/html/content/lib/jquery-validation/dist/additional-methods.js b/html/content/lib/jquery-validation/dist/additional-methods.js new file mode 100644 index 0000000..480ecd1 --- /dev/null +++ b/html/content/lib/jquery-validation/dist/additional-methods.js @@ -0,0 +1,1158 @@ +/*! + * jQuery Validation Plugin v1.17.0 + * + * https://jqueryvalidation.org/ + * + * Copyright (c) 2017 Jörn Zaefferer + * Released under the MIT license + */ +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + define( ["jquery", "./jquery.validate"], factory ); + } else if (typeof module === "object" && module.exports) { + module.exports = factory( require( "jquery" ) ); + } else { + factory( jQuery ); + } +}(function( $ ) { + +( function() { + + function stripHtml( value ) { + + // Remove html tags and space chars + return value.replace( /<.[^<>]*?>/g, " " ).replace( / | /gi, " " ) + + // Remove punctuation + .replace( /[.(),;:!?%#$'\"_+=\/\-“”’]*/g, "" ); + } + + $.validator.addMethod( "maxWords", function( value, element, params ) { + return this.optional( element ) || stripHtml( value ).match( /\b\w+\b/g ).length <= params; + }, $.validator.format( "Please enter {0} words or less." ) ); + + $.validator.addMethod( "minWords", function( value, element, params ) { + return this.optional( element ) || stripHtml( value ).match( /\b\w+\b/g ).length >= params; + }, $.validator.format( "Please enter at least {0} words." ) ); + + $.validator.addMethod( "rangeWords", function( value, element, params ) { + var valueStripped = stripHtml( value ), + regex = /\b\w+\b/g; + return this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ]; + }, $.validator.format( "Please enter between {0} and {1} words." ) ); + +}() ); + +// Accept a value from a file input based on a required mimetype +$.validator.addMethod( "accept", function( value, element, param ) { + + // Split mime on commas in case we have multiple types we can accept + var typeParam = typeof param === "string" ? param.replace( /\s/g, "" ) : "image/*", + optionalValue = this.optional( element ), + i, file, regex; + + // Element is optional + if ( optionalValue ) { + return optionalValue; + } + + if ( $( element ).attr( "type" ) === "file" ) { + + // Escape string to be used in the regex + // see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + // Escape also "/*" as "/.*" as a wildcard + typeParam = typeParam + .replace( /[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g, "\\$&" ) + .replace( /,/g, "|" ) + .replace( /\/\*/g, "/.*" ); + + // Check if the element has a FileList before checking each file + if ( element.files && element.files.length ) { + regex = new RegExp( ".?(" + typeParam + ")$", "i" ); + for ( i = 0; i < element.files.length; i++ ) { + file = element.files[ i ]; + + // Grab the mimetype from the loaded file, verify it matches + if ( !file.type.match( regex ) ) { + return false; + } + } + } + } + + // Either return true because we've validated each file, or because the + // browser does not support element.files and the FileList feature + return true; +}, $.validator.format( "Please enter a value with a valid mimetype." ) ); + +$.validator.addMethod( "alphanumeric", function( value, element ) { + return this.optional( element ) || /^\w+$/i.test( value ); +}, "Letters, numbers, and underscores only please" ); + +/* + * Dutch bank account numbers (not 'giro' numbers) have 9 digits + * and pass the '11 check'. + * We accept the notation with spaces, as that is common. + * acceptable: 123456789 or 12 34 56 789 + */ +$.validator.addMethod( "bankaccountNL", function( value, element ) { + if ( this.optional( element ) ) { + return true; + } + if ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) { + return false; + } + + // Now '11 check' + var account = value.replace( / /g, "" ), // Remove spaces + sum = 0, + len = account.length, + pos, factor, digit; + for ( pos = 0; pos < len; pos++ ) { + factor = len - pos; + digit = account.substring( pos, pos + 1 ); + sum = sum + factor * digit; + } + return sum % 11 === 0; +}, "Please specify a valid bank account number" ); + +$.validator.addMethod( "bankorgiroaccountNL", function( value, element ) { + return this.optional( element ) || + ( $.validator.methods.bankaccountNL.call( this, value, element ) ) || + ( $.validator.methods.giroaccountNL.call( this, value, element ) ); +}, "Please specify a valid bank or giro account number" ); + +/** + * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity. + * + * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional) + * + * Validation is case-insensitive. Please make sure to normalize input yourself. + * + * BIC definition in detail: + * - First 4 characters - bank code (only letters) + * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters) + * - Next 2 characters - location code (letters and digits) + * a. shall not start with '0' or '1' + * b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing) + * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits) + */ +$.validator.addMethod( "bic", function( value, element ) { + return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() ); +}, "Please specify a valid BIC code" ); + +/* + * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities + * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal + * + * Spanish CIF structure: + * + * [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ] + * + * Where: + * + * T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW] + * P: 2 characters. Province. + * N: 5 characters. Secuencial Number within the province. + * C: 1 character. Control Digit: [0-9A-J]. + * + * [ T ]: Kind of Organizations. Possible values: + * + * A. Corporations + * B. LLCs + * C. General partnerships + * D. Companies limited partnerships + * E. Communities of goods + * F. Cooperative Societies + * G. Associations + * H. Communities of homeowners in horizontal property regime + * J. Civil Societies + * K. Old format + * L. Old format + * M. Old format + * N. Nonresident entities + * P. Local authorities + * Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions + * R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008) + * S. Organs of State Administration and regions + * V. Agrarian Transformation + * W. Permanent establishments of non-resident in Spain + * + * [ C ]: Control Digit. It can be a number or a letter depending on T value: + * [ T ] --> [ C ] + * ------ ---------- + * A Number + * B Number + * E Number + * H Number + * K Letter + * P Letter + * Q Letter + * S Letter + * + */ +$.validator.addMethod( "cifES", function( value, element ) { + "use strict"; + + if ( this.optional( element ) ) { + return true; + } + + var cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi ); + var letter = value.substring( 0, 1 ), // [ T ] + number = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ] + control = value.substring( 8, 9 ), // [ C ] + all_sum = 0, + even_sum = 0, + odd_sum = 0, + i, n, + control_digit, + control_letter; + + function isOdd( n ) { + return n % 2 === 0; + } + + // Quick format test + if ( value.length !== 9 || !cifRegEx.test( value ) ) { + return false; + } + + for ( i = 0; i < number.length; i++ ) { + n = parseInt( number[ i ], 10 ); + + // Odd positions + if ( isOdd( i ) ) { + + // Odd positions are multiplied first. + n *= 2; + + // If the multiplication is bigger than 10 we need to adjust + odd_sum += n < 10 ? n : n - 9; + + // Even positions + // Just sum them + } else { + even_sum += n; + } + } + + all_sum = even_sum + odd_sum; + control_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString(); + control_digit = parseInt( control_digit, 10 ) > 9 ? "0" : control_digit; + control_letter = "JABCDEFGHI".substr( control_digit, 1 ).toString(); + + // Control must be a digit + if ( letter.match( /[ABEH]/ ) ) { + return control === control_digit; + + // Control must be a letter + } else if ( letter.match( /[KPQS]/ ) ) { + return control === control_letter; + } + + // Can be either + return control === control_digit || control === control_letter; + +}, "Please specify a valid CIF number." ); + +/* + * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number. + * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation. + */ +$.validator.addMethod( "cpfBR", function( value ) { + + // Removing special characters from value + value = value.replace( /([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "" ); + + // Checking value to have 11 digits only + if ( value.length !== 11 ) { + return false; + } + + var sum = 0, + firstCN, secondCN, checkResult, i; + + firstCN = parseInt( value.substring( 9, 10 ), 10 ); + secondCN = parseInt( value.substring( 10, 11 ), 10 ); + + checkResult = function( sum, cn ) { + var result = ( sum * 10 ) % 11; + if ( ( result === 10 ) || ( result === 11 ) ) { + result = 0; + } + return ( result === cn ); + }; + + // Checking for dump data + if ( value === "" || + value === "00000000000" || + value === "11111111111" || + value === "22222222222" || + value === "33333333333" || + value === "44444444444" || + value === "55555555555" || + value === "66666666666" || + value === "77777777777" || + value === "88888888888" || + value === "99999999999" + ) { + return false; + } + + // Step 1 - using first Check Number: + for ( i = 1; i <= 9; i++ ) { + sum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i ); + } + + // If first Check Number (CN) is valid, move to Step 2 - using second Check Number: + if ( checkResult( sum, firstCN ) ) { + sum = 0; + for ( i = 1; i <= 10; i++ ) { + sum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i ); + } + return checkResult( sum, secondCN ); + } + return false; + +}, "Please specify a valid CPF number" ); + +// https://jqueryvalidation.org/creditcard-method/ +// based on https://en.wikipedia.org/wiki/Luhn_algorithm +$.validator.addMethod( "creditcard", function( value, element ) { + if ( this.optional( element ) ) { + return "dependency-mismatch"; + } + + // Accept only spaces, digits and dashes + if ( /[^0-9 \-]+/.test( value ) ) { + return false; + } + + var nCheck = 0, + nDigit = 0, + bEven = false, + n, cDigit; + + value = value.replace( /\D/g, "" ); + + // Basing min and max length on + // https://developer.ean.com/general_info/Valid_Credit_Card_Types + if ( value.length < 13 || value.length > 19 ) { + return false; + } + + for ( n = value.length - 1; n >= 0; n-- ) { + cDigit = value.charAt( n ); + nDigit = parseInt( cDigit, 10 ); + if ( bEven ) { + if ( ( nDigit *= 2 ) > 9 ) { + nDigit -= 9; + } + } + + nCheck += nDigit; + bEven = !bEven; + } + + return ( nCheck % 10 ) === 0; +}, "Please enter a valid credit card number." ); + +/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator + * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0 + * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings) + */ +$.validator.addMethod( "creditcardtypes", function( value, element, param ) { + if ( /[^0-9\-]+/.test( value ) ) { + return false; + } + + value = value.replace( /\D/g, "" ); + + var validTypes = 0x0000; + + if ( param.mastercard ) { + validTypes |= 0x0001; + } + if ( param.visa ) { + validTypes |= 0x0002; + } + if ( param.amex ) { + validTypes |= 0x0004; + } + if ( param.dinersclub ) { + validTypes |= 0x0008; + } + if ( param.enroute ) { + validTypes |= 0x0010; + } + if ( param.discover ) { + validTypes |= 0x0020; + } + if ( param.jcb ) { + validTypes |= 0x0040; + } + if ( param.unknown ) { + validTypes |= 0x0080; + } + if ( param.all ) { + validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080; + } + if ( validTypes & 0x0001 && /^(5[12345])/.test( value ) ) { // Mastercard + return value.length === 16; + } + if ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa + return value.length === 16; + } + if ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex + return value.length === 15; + } + if ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub + return value.length === 14; + } + if ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute + return value.length === 15; + } + if ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover + return value.length === 16; + } + if ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb + return value.length === 16; + } + if ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb + return value.length === 15; + } + if ( validTypes & 0x0080 ) { // Unknown + return true; + } + return false; +}, "Please enter a valid credit card number." ); + +/** + * Validates currencies with any given symbols by @jameslouiz + * Symbols can be optional or required. Symbols required by default + * + * Usage examples: + * currency: ["£", false] - Use false for soft currency validation + * currency: ["$", false] + * currency: ["RM", false] - also works with text based symbols such as "RM" - Malaysia Ringgit etc + * + * + * + * Soft symbol checking + * currencyInput: { + * currency: ["$", false] + * } + * + * Strict symbol checking (default) + * currencyInput: { + * currency: "$" + * //OR + * currency: ["$", true] + * } + * + * Multiple Symbols + * currencyInput: { + * currency: "$,£,¢" + * } + */ +$.validator.addMethod( "currency", function( value, element, param ) { + var isParamString = typeof param === "string", + symbol = isParamString ? param : param[ 0 ], + soft = isParamString ? true : param[ 1 ], + regex; + + symbol = symbol.replace( /,/g, "" ); + symbol = soft ? symbol + "]" : symbol + "]?"; + regex = "^[" + symbol + "([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$"; + regex = new RegExp( regex ); + return this.optional( element ) || regex.test( value ); + +}, "Please specify a valid currency" ); + +$.validator.addMethod( "dateFA", function( value, element ) { + return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value ); +}, $.validator.messages.date ); + +/** + * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy. + * + * @example $.validator.methods.date("01/01/1900") + * @result true + * + * @example $.validator.methods.date("01/13/1990") + * @result false + * + * @example $.validator.methods.date("01.01.1900") + * @result false + * + * @example + * @desc Declares an optional input element whose value must be a valid date. + * + * @name $.validator.methods.dateITA + * @type Boolean + * @cat Plugins/Validate/Methods + */ +$.validator.addMethod( "dateITA", function( value, element ) { + var check = false, + re = /^\d{1,2}\/\d{1,2}\/\d{4}$/, + adata, gg, mm, aaaa, xdata; + if ( re.test( value ) ) { + adata = value.split( "/" ); + gg = parseInt( adata[ 0 ], 10 ); + mm = parseInt( adata[ 1 ], 10 ); + aaaa = parseInt( adata[ 2 ], 10 ); + xdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) ); + if ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) { + check = true; + } else { + check = false; + } + } else { + check = false; + } + return this.optional( element ) || check; +}, $.validator.messages.date ); + +$.validator.addMethod( "dateNL", function( value, element ) { + return this.optional( element ) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test( value ); +}, $.validator.messages.date ); + +// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept +$.validator.addMethod( "extension", function( value, element, param ) { + param = typeof param === "string" ? param.replace( /,/g, "|" ) : "png|jpe?g|gif"; + return this.optional( element ) || value.match( new RegExp( "\\.(" + param + ")$", "i" ) ); +}, $.validator.format( "Please enter a value with a valid extension." ) ); + +/** + * Dutch giro account numbers (not bank numbers) have max 7 digits + */ +$.validator.addMethod( "giroaccountNL", function( value, element ) { + return this.optional( element ) || /^[0-9]{1,7}$/.test( value ); +}, "Please specify a valid giro account number" ); + +/** + * IBAN is the international bank account number. + * It has a country - specific format, that is checked here too + * + * Validation is case-insensitive. Please make sure to normalize input yourself. + */ +$.validator.addMethod( "iban", function( value, element ) { + + // Some quick simple tests to prevent needless work + if ( this.optional( element ) ) { + return true; + } + + // Remove spaces and to upper case + var iban = value.replace( / /g, "" ).toUpperCase(), + ibancheckdigits = "", + leadingZeroes = true, + cRest = "", + cOperator = "", + countrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p; + + // Check for IBAN code length. + // It contains: + // country code ISO 3166-1 - two letters, + // two check digits, + // Basic Bank Account Number (BBAN) - up to 30 chars + var minimalIBANlength = 5; + if ( iban.length < minimalIBANlength ) { + return false; + } + + // Check the country code and find the country specific format + countrycode = iban.substring( 0, 2 ); + bbancountrypatterns = { + "AL": "\\d{8}[\\dA-Z]{16}", + "AD": "\\d{8}[\\dA-Z]{12}", + "AT": "\\d{16}", + "AZ": "[\\dA-Z]{4}\\d{20}", + "BE": "\\d{12}", + "BH": "[A-Z]{4}[\\dA-Z]{14}", + "BA": "\\d{16}", + "BR": "\\d{23}[A-Z][\\dA-Z]", + "BG": "[A-Z]{4}\\d{6}[\\dA-Z]{8}", + "CR": "\\d{17}", + "HR": "\\d{17}", + "CY": "\\d{8}[\\dA-Z]{16}", + "CZ": "\\d{20}", + "DK": "\\d{14}", + "DO": "[A-Z]{4}\\d{20}", + "EE": "\\d{16}", + "FO": "\\d{14}", + "FI": "\\d{14}", + "FR": "\\d{10}[\\dA-Z]{11}\\d{2}", + "GE": "[\\dA-Z]{2}\\d{16}", + "DE": "\\d{18}", + "GI": "[A-Z]{4}[\\dA-Z]{15}", + "GR": "\\d{7}[\\dA-Z]{16}", + "GL": "\\d{14}", + "GT": "[\\dA-Z]{4}[\\dA-Z]{20}", + "HU": "\\d{24}", + "IS": "\\d{22}", + "IE": "[\\dA-Z]{4}\\d{14}", + "IL": "\\d{19}", + "IT": "[A-Z]\\d{10}[\\dA-Z]{12}", + "KZ": "\\d{3}[\\dA-Z]{13}", + "KW": "[A-Z]{4}[\\dA-Z]{22}", + "LV": "[A-Z]{4}[\\dA-Z]{13}", + "LB": "\\d{4}[\\dA-Z]{20}", + "LI": "\\d{5}[\\dA-Z]{12}", + "LT": "\\d{16}", + "LU": "\\d{3}[\\dA-Z]{13}", + "MK": "\\d{3}[\\dA-Z]{10}\\d{2}", + "MT": "[A-Z]{4}\\d{5}[\\dA-Z]{18}", + "MR": "\\d{23}", + "MU": "[A-Z]{4}\\d{19}[A-Z]{3}", + "MC": "\\d{10}[\\dA-Z]{11}\\d{2}", + "MD": "[\\dA-Z]{2}\\d{18}", + "ME": "\\d{18}", + "NL": "[A-Z]{4}\\d{10}", + "NO": "\\d{11}", + "PK": "[\\dA-Z]{4}\\d{16}", + "PS": "[\\dA-Z]{4}\\d{21}", + "PL": "\\d{24}", + "PT": "\\d{21}", + "RO": "[A-Z]{4}[\\dA-Z]{16}", + "SM": "[A-Z]\\d{10}[\\dA-Z]{12}", + "SA": "\\d{2}[\\dA-Z]{18}", + "RS": "\\d{18}", + "SK": "\\d{20}", + "SI": "\\d{15}", + "ES": "\\d{20}", + "SE": "\\d{20}", + "CH": "\\d{5}[\\dA-Z]{12}", + "TN": "\\d{20}", + "TR": "\\d{5}[\\dA-Z]{17}", + "AE": "\\d{3}\\d{16}", + "GB": "[A-Z]{4}\\d{14}", + "VG": "[\\dA-Z]{4}\\d{16}" + }; + + bbanpattern = bbancountrypatterns[ countrycode ]; + + // As new countries will start using IBAN in the + // future, we only check if the countrycode is known. + // This prevents false negatives, while almost all + // false positives introduced by this, will be caught + // by the checksum validation below anyway. + // Strict checking should return FALSE for unknown + // countries. + if ( typeof bbanpattern !== "undefined" ) { + ibanregexp = new RegExp( "^[A-Z]{2}\\d{2}" + bbanpattern + "$", "" ); + if ( !( ibanregexp.test( iban ) ) ) { + return false; // Invalid country specific format + } + } + + // Now check the checksum, first convert to digits + ibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 ); + for ( i = 0; i < ibancheck.length; i++ ) { + charAt = ibancheck.charAt( i ); + if ( charAt !== "0" ) { + leadingZeroes = false; + } + if ( !leadingZeroes ) { + ibancheckdigits += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf( charAt ); + } + } + + // Calculate the result of: ibancheckdigits % 97 + for ( p = 0; p < ibancheckdigits.length; p++ ) { + cChar = ibancheckdigits.charAt( p ); + cOperator = "" + cRest + "" + cChar; + cRest = cOperator % 97; + } + return cRest === 1; +}, "Please specify a valid IBAN" ); + +$.validator.addMethod( "integer", function( value, element ) { + return this.optional( element ) || /^-?\d+$/.test( value ); +}, "A positive or negative non-decimal number please" ); + +$.validator.addMethod( "ipv4", function( value, element ) { + return this.optional( element ) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test( value ); +}, "Please enter a valid IP v4 address." ); + +$.validator.addMethod( "ipv6", function( value, element ) { + return this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value ); +}, "Please enter a valid IP v6 address." ); + +$.validator.addMethod( "lettersonly", function( value, element ) { + return this.optional( element ) || /^[a-z]+$/i.test( value ); +}, "Letters only please" ); + +$.validator.addMethod( "letterswithbasicpunc", function( value, element ) { + return this.optional( element ) || /^[a-z\-.,()'"\s]+$/i.test( value ); +}, "Letters or punctuation only please" ); + +$.validator.addMethod( "mobileNL", function( value, element ) { + return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test( value ); +}, "Please specify a valid mobile number" ); + +/* For UK phone functions, do the following server side processing: + * Compare original input with this RegEx pattern: + * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$ + * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0' + * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2. + * A number of very detailed GB telephone number RegEx patterns can also be found at: + * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers + */ +$.validator.addMethod( "mobileUK", function( phone_number, element ) { + phone_number = phone_number.replace( /\(|\)|\s+|-/g, "" ); + return this.optional( element ) || phone_number.length > 9 && + phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/ ); +}, "Please specify a valid mobile number" ); + +$.validator.addMethod( "netmask", function( value, element ) { + return this.optional( element ) || /^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)/i.test( value ); +}, "Please enter a valid netmask." ); + +/* + * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish + * authorities to any foreigner. + * + * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal + * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to + * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter. + */ +$.validator.addMethod( "nieES", function( value, element ) { + "use strict"; + + if ( this.optional( element ) ) { + return true; + } + + var nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi ); + var validChars = "TRWAGMYFPDXBNJZSQVHLCKET", + letter = value.substr( value.length - 1 ).toUpperCase(), + number; + + value = value.toString().toUpperCase(); + + // Quick format test + if ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) { + return false; + } + + // X means same number + // Y means number + 10000000 + // Z means number + 20000000 + value = value.replace( /^[X]/, "0" ) + .replace( /^[Y]/, "1" ) + .replace( /^[Z]/, "2" ); + + number = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 ); + + return validChars.charAt( parseInt( number, 10 ) % 23 ) === letter; + +}, "Please specify a valid NIE number." ); + +/* + * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals + */ +$.validator.addMethod( "nifES", function( value, element ) { + "use strict"; + + if ( this.optional( element ) ) { + return true; + } + + value = value.toUpperCase(); + + // Basic format test + if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) { + return false; + } + + // Test NIF + if ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) { + return ( "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) ); + } + + // Test specials NIF (starts with K, L or M) + if ( /^[KLM]{1}/.test( value ) ) { + return ( value[ 8 ] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 1 ) % 23 ) ); + } + + return false; + +}, "Please specify a valid NIF number." ); + +/* + * Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies + */ +$.validator.addMethod( "nipPL", function( value ) { + "use strict"; + + value = value.replace( /[^0-9]/g, "" ); + + if ( value.length !== 10 ) { + return false; + } + + var arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ]; + var intSum = 0; + for ( var i = 0; i < 9; i++ ) { + intSum += arrSteps[ i ] * value[ i ]; + } + var int2 = intSum % 11; + var intControlNr = ( int2 === 10 ) ? 0 : int2; + + return ( intControlNr === parseInt( value[ 9 ], 10 ) ); +}, "Please specify a valid NIP number." ); + +$.validator.addMethod( "notEqualTo", function( value, element, param ) { + return this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param ); +}, "Please enter a different value, values must not be the same." ); + +$.validator.addMethod( "nowhitespace", function( value, element ) { + return this.optional( element ) || /^\S+$/i.test( value ); +}, "No white space please" ); + +/** +* Return true if the field value matches the given format RegExp +* +* @example $.validator.methods.pattern("AR1004",element,/^AR\d{4}$/) +* @result true +* +* @example $.validator.methods.pattern("BR1004",element,/^AR\d{4}$/) +* @result false +* +* @name $.validator.methods.pattern +* @type Boolean +* @cat Plugins/Validate/Methods +*/ +$.validator.addMethod( "pattern", function( value, element, param ) { + if ( this.optional( element ) ) { + return true; + } + if ( typeof param === "string" ) { + param = new RegExp( "^(?:" + param + ")$" ); + } + return param.test( value ); +}, "Invalid format." ); + +/** + * Dutch phone numbers have 10 digits (or 11 and start with +31). + */ +$.validator.addMethod( "phoneNL", function( value, element ) { + return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test( value ); +}, "Please specify a valid phone number." ); + +/* For UK phone functions, do the following server side processing: + * Compare original input with this RegEx pattern: + * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$ + * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0' + * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2. + * A number of very detailed GB telephone number RegEx patterns can also be found at: + * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers + */ + +// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers +$.validator.addMethod( "phonesUK", function( phone_number, element ) { + phone_number = phone_number.replace( /\(|\)|\s+|-/g, "" ); + return this.optional( element ) || phone_number.length > 9 && + phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/ ); +}, "Please specify a valid uk phone number" ); + +/* For UK phone functions, do the following server side processing: + * Compare original input with this RegEx pattern: + * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$ + * Extract $1 and set $prefix to '+44' if $1 is '44', otherwise set $prefix to '0' + * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2. + * A number of very detailed GB telephone number RegEx patterns can also be found at: + * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers + */ +$.validator.addMethod( "phoneUK", function( phone_number, element ) { + phone_number = phone_number.replace( /\(|\)|\s+|-/g, "" ); + return this.optional( element ) || phone_number.length > 9 && + phone_number.match( /^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/ ); +}, "Please specify a valid phone number" ); + +/** + * Matches US phone number format + * + * where the area code may not start with 1 and the prefix may not start with 1 + * allows '-' or ' ' as a separator and allows parens around area code + * some people may want to put a '1' in front of their number + * + * 1(212)-999-2345 or + * 212 999 2344 or + * 212-999-0983 + * + * but not + * 111-123-5434 + * and not + * 212 123 4567 + */ +$.validator.addMethod( "phoneUS", function( phone_number, element ) { + phone_number = phone_number.replace( /\s+/g, "" ); + return this.optional( element ) || phone_number.length > 9 && + phone_number.match( /^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/ ); +}, "Please specify a valid phone number" ); + +/* +* Valida CEPs do brasileiros: +* +* Formatos aceitos: +* 99999-999 +* 99.999-999 +* 99999999 +*/ +$.validator.addMethod( "postalcodeBR", function( cep_value, element ) { + return this.optional( element ) || /^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test( cep_value ); +}, "Informe um CEP válido." ); + +/** + * Matches a valid Canadian Postal Code + * + * @example jQuery.validator.methods.postalCodeCA( "H0H 0H0", element ) + * @result true + * + * @example jQuery.validator.methods.postalCodeCA( "H0H0H0", element ) + * @result false + * + * @name jQuery.validator.methods.postalCodeCA + * @type Boolean + * @cat Plugins/Validate/Methods + */ +$.validator.addMethod( "postalCodeCA", function( value, element ) { + return this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] *\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i.test( value ); +}, "Please specify a valid postal code" ); + +/* Matches Italian postcode (CAP) */ +$.validator.addMethod( "postalcodeIT", function( value, element ) { + return this.optional( element ) || /^\d{5}$/.test( value ); +}, "Please specify a valid postal code" ); + +$.validator.addMethod( "postalcodeNL", function( value, element ) { + return this.optional( element ) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test( value ); +}, "Please specify a valid postal code" ); + +// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK) +$.validator.addMethod( "postcodeUK", function( value, element ) { + return this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test( value ); +}, "Please specify a valid UK postcode" ); + +/* + * Lets you say "at least X inputs that match selector Y must be filled." + * + * The end result is that neither of these inputs: + * + * + * + * + * ...will validate unless at least one of them is filled. + * + * partnumber: {require_from_group: [1,".productinfo"]}, + * description: {require_from_group: [1,".productinfo"]} + * + * options[0]: number of fields that must be filled in the group + * options[1]: CSS selector that defines the group of conditionally required fields + */ +$.validator.addMethod( "require_from_group", function( value, element, options ) { + var $fields = $( options[ 1 ], element.form ), + $fieldsFirst = $fields.eq( 0 ), + validator = $fieldsFirst.data( "valid_req_grp" ) ? $fieldsFirst.data( "valid_req_grp" ) : $.extend( {}, this ), + isValid = $fields.filter( function() { + return validator.elementValue( this ); + } ).length >= options[ 0 ]; + + // Store the cloned validator for future validation + $fieldsFirst.data( "valid_req_grp", validator ); + + // If element isn't being validated, run each require_from_group field's validation rules + if ( !$( element ).data( "being_validated" ) ) { + $fields.data( "being_validated", true ); + $fields.each( function() { + validator.element( this ); + } ); + $fields.data( "being_validated", false ); + } + return isValid; +}, $.validator.format( "Please fill at least {0} of these fields." ) ); + +/* + * Lets you say "either at least X inputs that match selector Y must be filled, + * OR they must all be skipped (left blank)." + * + * The end result, is that none of these inputs: + * + * + * + * + * + * ...will validate unless either at least two of them are filled, + * OR none of them are. + * + * partnumber: {skip_or_fill_minimum: [2,".productinfo"]}, + * description: {skip_or_fill_minimum: [2,".productinfo"]}, + * color: {skip_or_fill_minimum: [2,".productinfo"]} + * + * options[0]: number of fields that must be filled in the group + * options[1]: CSS selector that defines the group of conditionally required fields + * + */ +$.validator.addMethod( "skip_or_fill_minimum", function( value, element, options ) { + var $fields = $( options[ 1 ], element.form ), + $fieldsFirst = $fields.eq( 0 ), + validator = $fieldsFirst.data( "valid_skip" ) ? $fieldsFirst.data( "valid_skip" ) : $.extend( {}, this ), + numberFilled = $fields.filter( function() { + return validator.elementValue( this ); + } ).length, + isValid = numberFilled === 0 || numberFilled >= options[ 0 ]; + + // Store the cloned validator for future validation + $fieldsFirst.data( "valid_skip", validator ); + + // If element isn't being validated, run each skip_or_fill_minimum field's validation rules + if ( !$( element ).data( "being_validated" ) ) { + $fields.data( "being_validated", true ); + $fields.each( function() { + validator.element( this ); + } ); + $fields.data( "being_validated", false ); + } + return isValid; +}, $.validator.format( "Please either skip these fields or fill at least {0} of them." ) ); + +/* Validates US States and/or Territories by @jdforsythe + * Can be case insensitive or require capitalization - default is case insensitive + * Can include US Territories or not - default does not + * Can include US Military postal abbreviations (AA, AE, AP) - default does not + * + * Note: "States" always includes DC (District of Colombia) + * + * Usage examples: + * + * This is the default - case insensitive, no territories, no military zones + * stateInput: { + * caseSensitive: false, + * includeTerritories: false, + * includeMilitary: false + * } + * + * Only allow capital letters, no territories, no military zones + * stateInput: { + * caseSensitive: false + * } + * + * Case insensitive, include territories but not military zones + * stateInput: { + * includeTerritories: true + * } + * + * Only allow capital letters, include territories and military zones + * stateInput: { + * caseSensitive: true, + * includeTerritories: true, + * includeMilitary: true + * } + * + */ +$.validator.addMethod( "stateUS", function( value, element, options ) { + var isDefault = typeof options === "undefined", + caseSensitive = ( isDefault || typeof options.caseSensitive === "undefined" ) ? false : options.caseSensitive, + includeTerritories = ( isDefault || typeof options.includeTerritories === "undefined" ) ? false : options.includeTerritories, + includeMilitary = ( isDefault || typeof options.includeMilitary === "undefined" ) ? false : options.includeMilitary, + regex; + + if ( !includeTerritories && !includeMilitary ) { + regex = "^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$"; + } else if ( includeTerritories && includeMilitary ) { + regex = "^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$"; + } else if ( includeTerritories ) { + regex = "^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$"; + } else { + regex = "^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$"; + } + + regex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, "i" ); + return this.optional( element ) || regex.test( value ); +}, "Please specify a valid state" ); + +// TODO check if value starts with <, otherwise don't try stripping anything +$.validator.addMethod( "strippedminlength", function( value, element, param ) { + return $( value ).text().length >= param; +}, $.validator.format( "Please enter at least {0} characters" ) ); + +$.validator.addMethod( "time", function( value, element ) { + return this.optional( element ) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test( value ); +}, "Please enter a valid time, between 00:00 and 23:59" ); + +$.validator.addMethod( "time12h", function( value, element ) { + return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value ); +}, "Please enter a valid time in 12-hour am/pm format" ); + +// Same as url, but TLD is optional +$.validator.addMethod( "url2", function( value, element ) { + return this.optional( element ) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( value ); +}, $.validator.messages.url ); + +/** + * Return true, if the value is a valid vehicle identification number (VIN). + * + * Works with all kind of text inputs. + * + * @example + * @desc Declares a required input element whose value must be a valid vehicle identification number. + * + * @name $.validator.methods.vinUS + * @type Boolean + * @cat Plugins/Validate/Methods + */ +$.validator.addMethod( "vinUS", function( v ) { + if ( v.length !== 17 ) { + return false; + } + + var LL = [ "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ], + VL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ], + FL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ], + rs = 0, + i, n, d, f, cd, cdv; + + for ( i = 0; i < 17; i++ ) { + f = FL[ i ]; + d = v.slice( i, i + 1 ); + if ( i === 8 ) { + cdv = d; + } + if ( !isNaN( d ) ) { + d *= f; + } else { + for ( n = 0; n < LL.length; n++ ) { + if ( d.toUpperCase() === LL[ n ] ) { + d = VL[ n ]; + d *= f; + if ( isNaN( cdv ) && n === 8 ) { + cdv = LL[ n ]; + } + break; + } + } + } + rs += d; + } + cd = rs % 11; + if ( cd === 10 ) { + cd = "X"; + } + if ( cd === cdv ) { + return true; + } + return false; +}, "The specified vehicle identification number (VIN) is invalid." ); + +$.validator.addMethod( "zipcodeUS", function( value, element ) { + return this.optional( element ) || /^\d{5}(-\d{4})?$/.test( value ); +}, "The specified US ZIP Code is invalid" ); + +$.validator.addMethod( "ziprange", function( value, element ) { + return this.optional( element ) || /^90[2-5]\d\{2\}-\d{4}$/.test( value ); +}, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx" ); +return $; +})); \ No newline at end of file diff --git a/html/content/lib/jquery-validation/dist/jquery.validate.js b/html/content/lib/jquery-validation/dist/jquery.validate.js new file mode 100644 index 0000000..af51b2d --- /dev/null +++ b/html/content/lib/jquery-validation/dist/jquery.validate.js @@ -0,0 +1,1601 @@ +/*! + * jQuery Validation Plugin v1.17.0 + * + * https://jqueryvalidation.org/ + * + * Copyright (c) 2017 Jörn Zaefferer + * Released under the MIT license + */ +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + define( ["jquery"], factory ); + } else if (typeof module === "object" && module.exports) { + module.exports = factory( require( "jquery" ) ); + } else { + factory( jQuery ); + } +}(function( $ ) { + +$.extend( $.fn, { + + // https://jqueryvalidation.org/validate/ + validate: function( options ) { + + // If nothing is selected, return nothing; can't chain anyway + if ( !this.length ) { + if ( options && options.debug && window.console ) { + console.warn( "Nothing selected, can't validate, returning nothing." ); + } + return; + } + + // Check if a validator for this form was already created + var validator = $.data( this[ 0 ], "validator" ); + if ( validator ) { + return validator; + } + + // Add novalidate tag if HTML5. + this.attr( "novalidate", "novalidate" ); + + validator = new $.validator( options, this[ 0 ] ); + $.data( this[ 0 ], "validator", validator ); + + if ( validator.settings.onsubmit ) { + + this.on( "click.validate", ":submit", function( event ) { + + // Track the used submit button to properly handle scripted + // submits later. + validator.submitButton = event.currentTarget; + + // Allow suppressing validation by adding a cancel class to the submit button + if ( $( this ).hasClass( "cancel" ) ) { + validator.cancelSubmit = true; + } + + // Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button + if ( $( this ).attr( "formnovalidate" ) !== undefined ) { + validator.cancelSubmit = true; + } + } ); + + // Validate the form on submit + this.on( "submit.validate", function( event ) { + if ( validator.settings.debug ) { + + // Prevent form submit to be able to see console output + event.preventDefault(); + } + function handle() { + var hidden, result; + + // Insert a hidden input as a replacement for the missing submit button + // The hidden input is inserted in two cases: + // - A user defined a `submitHandler` + // - There was a pending request due to `remote` method and `stopRequest()` + // was called to submit the form in case it's valid + if ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) { + hidden = $( "" ) + .attr( "name", validator.submitButton.name ) + .val( $( validator.submitButton ).val() ) + .appendTo( validator.currentForm ); + } + + if ( validator.settings.submitHandler ) { + result = validator.settings.submitHandler.call( validator, validator.currentForm, event ); + if ( hidden ) { + + // And clean up afterwards; thanks to no-block-scope, hidden can be referenced + hidden.remove(); + } + if ( result !== undefined ) { + return result; + } + return false; + } + return true; + } + + // Prevent submit for invalid forms or custom submit handlers + if ( validator.cancelSubmit ) { + validator.cancelSubmit = false; + return handle(); + } + if ( validator.form() ) { + if ( validator.pendingRequest ) { + validator.formSubmitted = true; + return false; + } + return handle(); + } else { + validator.focusInvalid(); + return false; + } + } ); + } + + return validator; + }, + + // https://jqueryvalidation.org/valid/ + valid: function() { + var valid, validator, errorList; + + if ( $( this[ 0 ] ).is( "form" ) ) { + valid = this.validate().form(); + } else { + errorList = []; + valid = true; + validator = $( this[ 0 ].form ).validate(); + this.each( function() { + valid = validator.element( this ) && valid; + if ( !valid ) { + errorList = errorList.concat( validator.errorList ); + } + } ); + validator.errorList = errorList; + } + return valid; + }, + + // https://jqueryvalidation.org/rules/ + rules: function( command, argument ) { + var element = this[ 0 ], + settings, staticRules, existingRules, data, param, filtered; + + // If nothing is selected, return empty object; can't chain anyway + if ( element == null ) { + return; + } + + if ( !element.form && element.hasAttribute( "contenteditable" ) ) { + element.form = this.closest( "form" )[ 0 ]; + element.name = this.attr( "name" ); + } + + if ( element.form == null ) { + return; + } + + if ( command ) { + settings = $.data( element.form, "validator" ).settings; + staticRules = settings.rules; + existingRules = $.validator.staticRules( element ); + switch ( command ) { + case "add": + $.extend( existingRules, $.validator.normalizeRule( argument ) ); + + // Remove messages from rules, but allow them to be set separately + delete existingRules.messages; + staticRules[ element.name ] = existingRules; + if ( argument.messages ) { + settings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages ); + } + break; + case "remove": + if ( !argument ) { + delete staticRules[ element.name ]; + return existingRules; + } + filtered = {}; + $.each( argument.split( /\s/ ), function( index, method ) { + filtered[ method ] = existingRules[ method ]; + delete existingRules[ method ]; + } ); + return filtered; + } + } + + data = $.validator.normalizeRules( + $.extend( + {}, + $.validator.classRules( element ), + $.validator.attributeRules( element ), + $.validator.dataRules( element ), + $.validator.staticRules( element ) + ), element ); + + // Make sure required is at front + if ( data.required ) { + param = data.required; + delete data.required; + data = $.extend( { required: param }, data ); + } + + // Make sure remote is at back + if ( data.remote ) { + param = data.remote; + delete data.remote; + data = $.extend( data, { remote: param } ); + } + + return data; + } +} ); + +// Custom selectors +$.extend( $.expr.pseudos || $.expr[ ":" ], { // '|| $.expr[ ":" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support + + // https://jqueryvalidation.org/blank-selector/ + blank: function( a ) { + return !$.trim( "" + $( a ).val() ); + }, + + // https://jqueryvalidation.org/filled-selector/ + filled: function( a ) { + var val = $( a ).val(); + return val !== null && !!$.trim( "" + val ); + }, + + // https://jqueryvalidation.org/unchecked-selector/ + unchecked: function( a ) { + return !$( a ).prop( "checked" ); + } +} ); + +// Constructor for validator +$.validator = function( options, form ) { + this.settings = $.extend( true, {}, $.validator.defaults, options ); + this.currentForm = form; + this.init(); +}; + +// https://jqueryvalidation.org/jQuery.validator.format/ +$.validator.format = function( source, params ) { + if ( arguments.length === 1 ) { + return function() { + var args = $.makeArray( arguments ); + args.unshift( source ); + return $.validator.format.apply( this, args ); + }; + } + if ( params === undefined ) { + return source; + } + if ( arguments.length > 2 && params.constructor !== Array ) { + params = $.makeArray( arguments ).slice( 1 ); + } + if ( params.constructor !== Array ) { + params = [ params ]; + } + $.each( params, function( i, n ) { + source = source.replace( new RegExp( "\\{" + i + "\\}", "g" ), function() { + return n; + } ); + } ); + return source; +}; + +$.extend( $.validator, { + + defaults: { + messages: {}, + groups: {}, + rules: {}, + errorClass: "error", + pendingClass: "pending", + validClass: "valid", + errorElement: "label", + focusCleanup: false, + focusInvalid: true, + errorContainer: $( [] ), + errorLabelContainer: $( [] ), + onsubmit: true, + ignore: ":hidden", + ignoreTitle: false, + onfocusin: function( element ) { + this.lastActive = element; + + // Hide error label and remove error class on focus if enabled + if ( this.settings.focusCleanup ) { + if ( this.settings.unhighlight ) { + this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); + } + this.hideThese( this.errorsFor( element ) ); + } + }, + onfocusout: function( element ) { + if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) { + this.element( element ); + } + }, + onkeyup: function( element, event ) { + + // Avoid revalidate the field when pressing one of the following keys + // Shift => 16 + // Ctrl => 17 + // Alt => 18 + // Caps lock => 20 + // End => 35 + // Home => 36 + // Left arrow => 37 + // Up arrow => 38 + // Right arrow => 39 + // Down arrow => 40 + // Insert => 45 + // Num lock => 144 + // AltGr key => 225 + var excludedKeys = [ + 16, 17, 18, 20, 35, 36, 37, + 38, 39, 40, 45, 144, 225 + ]; + + if ( event.which === 9 && this.elementValue( element ) === "" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) { + return; + } else if ( element.name in this.submitted || element.name in this.invalid ) { + this.element( element ); + } + }, + onclick: function( element ) { + + // Click on selects, radiobuttons and checkboxes + if ( element.name in this.submitted ) { + this.element( element ); + + // Or option elements, check parent select in that case + } else if ( element.parentNode.name in this.submitted ) { + this.element( element.parentNode ); + } + }, + highlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName( element.name ).addClass( errorClass ).removeClass( validClass ); + } else { + $( element ).addClass( errorClass ).removeClass( validClass ); + } + }, + unhighlight: function( element, errorClass, validClass ) { + if ( element.type === "radio" ) { + this.findByName( element.name ).removeClass( errorClass ).addClass( validClass ); + } else { + $( element ).removeClass( errorClass ).addClass( validClass ); + } + } + }, + + // https://jqueryvalidation.org/jQuery.validator.setDefaults/ + setDefaults: function( settings ) { + $.extend( $.validator.defaults, settings ); + }, + + messages: { + required: "This field is required.", + remote: "Please fix this field.", + email: "Please enter a valid email address.", + url: "Please enter a valid URL.", + date: "Please enter a valid date.", + dateISO: "Please enter a valid date (ISO).", + number: "Please enter a valid number.", + digits: "Please enter only digits.", + equalTo: "Please enter the same value again.", + maxlength: $.validator.format( "Please enter no more than {0} characters." ), + minlength: $.validator.format( "Please enter at least {0} characters." ), + rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ), + range: $.validator.format( "Please enter a value between {0} and {1}." ), + max: $.validator.format( "Please enter a value less than or equal to {0}." ), + min: $.validator.format( "Please enter a value greater than or equal to {0}." ), + step: $.validator.format( "Please enter a multiple of {0}." ) + }, + + autoCreateRanges: false, + + prototype: { + + init: function() { + this.labelContainer = $( this.settings.errorLabelContainer ); + this.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm ); + this.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer ); + this.submitted = {}; + this.valueCache = {}; + this.pendingRequest = 0; + this.pending = {}; + this.invalid = {}; + this.reset(); + + var groups = ( this.groups = {} ), + rules; + $.each( this.settings.groups, function( key, value ) { + if ( typeof value === "string" ) { + value = value.split( /\s/ ); + } + $.each( value, function( index, name ) { + groups[ name ] = key; + } ); + } ); + rules = this.settings.rules; + $.each( rules, function( key, value ) { + rules[ key ] = $.validator.normalizeRule( value ); + } ); + + function delegate( event ) { + + // Set form expando on contenteditable + if ( !this.form && this.hasAttribute( "contenteditable" ) ) { + this.form = $( this ).closest( "form" )[ 0 ]; + this.name = $( this ).attr( "name" ); + } + + var validator = $.data( this.form, "validator" ), + eventType = "on" + event.type.replace( /^validate/, "" ), + settings = validator.settings; + if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) { + settings[ eventType ].call( validator, this, event ); + } + } + + $( this.currentForm ) + .on( "focusin.validate focusout.validate keyup.validate", + ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " + + "[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " + + "[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " + + "[type='radio'], [type='checkbox'], [contenteditable], [type='button']", delegate ) + + // Support: Chrome, oldIE + // "select" is provided as event.target when clicking a option + .on( "click.validate", "select, option, [type='radio'], [type='checkbox']", delegate ); + + if ( this.settings.invalidHandler ) { + $( this.currentForm ).on( "invalid-form.validate", this.settings.invalidHandler ); + } + }, + + // https://jqueryvalidation.org/Validator.form/ + form: function() { + this.checkForm(); + $.extend( this.submitted, this.errorMap ); + this.invalid = $.extend( {}, this.errorMap ); + if ( !this.valid() ) { + $( this.currentForm ).triggerHandler( "invalid-form", [ this ] ); + } + this.showErrors(); + return this.valid(); + }, + + checkForm: function() { + this.prepareForm(); + for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) { + this.check( elements[ i ] ); + } + return this.valid(); + }, + + // https://jqueryvalidation.org/Validator.element/ + element: function( element ) { + var cleanElement = this.clean( element ), + checkElement = this.validationTargetFor( cleanElement ), + v = this, + result = true, + rs, group; + + if ( checkElement === undefined ) { + delete this.invalid[ cleanElement.name ]; + } else { + this.prepareElement( checkElement ); + this.currentElements = $( checkElement ); + + // If this element is grouped, then validate all group elements already + // containing a value + group = this.groups[ checkElement.name ]; + if ( group ) { + $.each( this.groups, function( name, testgroup ) { + if ( testgroup === group && name !== checkElement.name ) { + cleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) ); + if ( cleanElement && cleanElement.name in v.invalid ) { + v.currentElements.push( cleanElement ); + result = v.check( cleanElement ) && result; + } + } + } ); + } + + rs = this.check( checkElement ) !== false; + result = result && rs; + if ( rs ) { + this.invalid[ checkElement.name ] = false; + } else { + this.invalid[ checkElement.name ] = true; + } + + if ( !this.numberOfInvalids() ) { + + // Hide error containers on last error + this.toHide = this.toHide.add( this.containers ); + } + this.showErrors(); + + // Add aria-invalid status for screen readers + $( element ).attr( "aria-invalid", !rs ); + } + + return result; + }, + + // https://jqueryvalidation.org/Validator.showErrors/ + showErrors: function( errors ) { + if ( errors ) { + var validator = this; + + // Add items to error list and map + $.extend( this.errorMap, errors ); + this.errorList = $.map( this.errorMap, function( message, name ) { + return { + message: message, + element: validator.findByName( name )[ 0 ] + }; + } ); + + // Remove items from success list + this.successList = $.grep( this.successList, function( element ) { + return !( element.name in errors ); + } ); + } + if ( this.settings.showErrors ) { + this.settings.showErrors.call( this, this.errorMap, this.errorList ); + } else { + this.defaultShowErrors(); + } + }, + + // https://jqueryvalidation.org/Validator.resetForm/ + resetForm: function() { + if ( $.fn.resetForm ) { + $( this.currentForm ).resetForm(); + } + this.invalid = {}; + this.submitted = {}; + this.prepareForm(); + this.hideErrors(); + var elements = this.elements() + .removeData( "previousValue" ) + .removeAttr( "aria-invalid" ); + + this.resetElements( elements ); + }, + + resetElements: function( elements ) { + var i; + + if ( this.settings.unhighlight ) { + for ( i = 0; elements[ i ]; i++ ) { + this.settings.unhighlight.call( this, elements[ i ], + this.settings.errorClass, "" ); + this.findByName( elements[ i ].name ).removeClass( this.settings.validClass ); + } + } else { + elements + .removeClass( this.settings.errorClass ) + .removeClass( this.settings.validClass ); + } + }, + + numberOfInvalids: function() { + return this.objectLength( this.invalid ); + }, + + objectLength: function( obj ) { + /* jshint unused: false */ + var count = 0, + i; + for ( i in obj ) { + + // This check allows counting elements with empty error + // message as invalid elements + if ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) { + count++; + } + } + return count; + }, + + hideErrors: function() { + this.hideThese( this.toHide ); + }, + + hideThese: function( errors ) { + errors.not( this.containers ).text( "" ); + this.addWrapper( errors ).hide(); + }, + + valid: function() { + return this.size() === 0; + }, + + size: function() { + return this.errorList.length; + }, + + focusInvalid: function() { + if ( this.settings.focusInvalid ) { + try { + $( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] ) + .filter( ":visible" ) + .focus() + + // Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find + .trigger( "focusin" ); + } catch ( e ) { + + // Ignore IE throwing errors when focusing hidden elements + } + } + }, + + findLastActive: function() { + var lastActive = this.lastActive; + return lastActive && $.grep( this.errorList, function( n ) { + return n.element.name === lastActive.name; + } ).length === 1 && lastActive; + }, + + elements: function() { + var validator = this, + rulesCache = {}; + + // Select all valid inputs inside the form (no submit or reset buttons) + return $( this.currentForm ) + .find( "input, select, textarea, [contenteditable]" ) + .not( ":submit, :reset, :image, :disabled" ) + .not( this.settings.ignore ) + .filter( function() { + var name = this.name || $( this ).attr( "name" ); // For contenteditable + if ( !name && validator.settings.debug && window.console ) { + console.error( "%o has no name assigned", this ); + } + + // Set form expando on contenteditable + if ( this.hasAttribute( "contenteditable" ) ) { + this.form = $( this ).closest( "form" )[ 0 ]; + this.name = name; + } + + // Select only the first element for each name, and only those with rules specified + if ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) { + return false; + } + + rulesCache[ name ] = true; + return true; + } ); + }, + + clean: function( selector ) { + return $( selector )[ 0 ]; + }, + + errors: function() { + var errorClass = this.settings.errorClass.split( " " ).join( "." ); + return $( this.settings.errorElement + "." + errorClass, this.errorContext ); + }, + + resetInternals: function() { + this.successList = []; + this.errorList = []; + this.errorMap = {}; + this.toShow = $( [] ); + this.toHide = $( [] ); + }, + + reset: function() { + this.resetInternals(); + this.currentElements = $( [] ); + }, + + prepareForm: function() { + this.reset(); + this.toHide = this.errors().add( this.containers ); + }, + + prepareElement: function( element ) { + this.reset(); + this.toHide = this.errorsFor( element ); + }, + + elementValue: function( element ) { + var $element = $( element ), + type = element.type, + val, idx; + + if ( type === "radio" || type === "checkbox" ) { + return this.findByName( element.name ).filter( ":checked" ).val(); + } else if ( type === "number" && typeof element.validity !== "undefined" ) { + return element.validity.badInput ? "NaN" : $element.val(); + } + + if ( element.hasAttribute( "contenteditable" ) ) { + val = $element.text(); + } else { + val = $element.val(); + } + + if ( type === "file" ) { + + // Modern browser (chrome & safari) + if ( val.substr( 0, 12 ) === "C:\\fakepath\\" ) { + return val.substr( 12 ); + } + + // Legacy browsers + // Unix-based path + idx = val.lastIndexOf( "/" ); + if ( idx >= 0 ) { + return val.substr( idx + 1 ); + } + + // Windows-based path + idx = val.lastIndexOf( "\\" ); + if ( idx >= 0 ) { + return val.substr( idx + 1 ); + } + + // Just the file name + return val; + } + + if ( typeof val === "string" ) { + return val.replace( /\r/g, "" ); + } + return val; + }, + + check: function( element ) { + element = this.validationTargetFor( this.clean( element ) ); + + var rules = $( element ).rules(), + rulesCount = $.map( rules, function( n, i ) { + return i; + } ).length, + dependencyMismatch = false, + val = this.elementValue( element ), + result, method, rule, normalizer; + + // Prioritize the local normalizer defined for this element over the global one + // if the former exists, otherwise user the global one in case it exists. + if ( typeof rules.normalizer === "function" ) { + normalizer = rules.normalizer; + } else if ( typeof this.settings.normalizer === "function" ) { + normalizer = this.settings.normalizer; + } + + // If normalizer is defined, then call it to retreive the changed value instead + // of using the real one. + // Note that `this` in the normalizer is `element`. + if ( normalizer ) { + val = normalizer.call( element, val ); + + if ( typeof val !== "string" ) { + throw new TypeError( "The normalizer should return a string value." ); + } + + // Delete the normalizer from rules to avoid treating it as a pre-defined method. + delete rules.normalizer; + } + + for ( method in rules ) { + rule = { method: method, parameters: rules[ method ] }; + try { + result = $.validator.methods[ method ].call( this, val, element, rule.parameters ); + + // If a method indicates that the field is optional and therefore valid, + // don't mark it as valid when there are no other rules + if ( result === "dependency-mismatch" && rulesCount === 1 ) { + dependencyMismatch = true; + continue; + } + dependencyMismatch = false; + + if ( result === "pending" ) { + this.toHide = this.toHide.not( this.errorsFor( element ) ); + return; + } + + if ( !result ) { + this.formatAndAdd( element, rule ); + return false; + } + } catch ( e ) { + if ( this.settings.debug && window.console ) { + console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e ); + } + if ( e instanceof TypeError ) { + e.message += ". Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method."; + } + + throw e; + } + } + if ( dependencyMismatch ) { + return; + } + if ( this.objectLength( rules ) ) { + this.successList.push( element ); + } + return true; + }, + + // Return the custom message for the given element and validation method + // specified in the element's HTML5 data attribute + // return the generic message if present and no method specific message is present + customDataMessage: function( element, method ) { + return $( element ).data( "msg" + method.charAt( 0 ).toUpperCase() + + method.substring( 1 ).toLowerCase() ) || $( element ).data( "msg" ); + }, + + // Return the custom message for the given element name and validation method + customMessage: function( name, method ) { + var m = this.settings.messages[ name ]; + return m && ( m.constructor === String ? m : m[ method ] ); + }, + + // Return the first defined argument, allowing empty strings + findDefined: function() { + for ( var i = 0; i < arguments.length; i++ ) { + if ( arguments[ i ] !== undefined ) { + return arguments[ i ]; + } + } + return undefined; + }, + + // The second parameter 'rule' used to be a string, and extended to an object literal + // of the following form: + // rule = { + // method: "method name", + // parameters: "the given method parameters" + // } + // + // The old behavior still supported, kept to maintain backward compatibility with + // old code, and will be removed in the next major release. + defaultMessage: function( element, rule ) { + if ( typeof rule === "string" ) { + rule = { method: rule }; + } + + var message = this.findDefined( + this.customMessage( element.name, rule.method ), + this.customDataMessage( element, rule.method ), + + // 'title' is never undefined, so handle empty string as undefined + !this.settings.ignoreTitle && element.title || undefined, + $.validator.messages[ rule.method ], + "Warning: No message defined for " + element.name + "" + ), + theregex = /\$?\{(\d+)\}/g; + if ( typeof message === "function" ) { + message = message.call( this, rule.parameters, element ); + } else if ( theregex.test( message ) ) { + message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters ); + } + + return message; + }, + + formatAndAdd: function( element, rule ) { + var message = this.defaultMessage( element, rule ); + + this.errorList.push( { + message: message, + element: element, + method: rule.method + } ); + + this.errorMap[ element.name ] = message; + this.submitted[ element.name ] = message; + }, + + addWrapper: function( toToggle ) { + if ( this.settings.wrapper ) { + toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); + } + return toToggle; + }, + + defaultShowErrors: function() { + var i, elements, error; + for ( i = 0; this.errorList[ i ]; i++ ) { + error = this.errorList[ i ]; + if ( this.settings.highlight ) { + this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass ); + } + this.showLabel( error.element, error.message ); + } + if ( this.errorList.length ) { + this.toShow = this.toShow.add( this.containers ); + } + if ( this.settings.success ) { + for ( i = 0; this.successList[ i ]; i++ ) { + this.showLabel( this.successList[ i ] ); + } + } + if ( this.settings.unhighlight ) { + for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) { + this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass ); + } + } + this.toHide = this.toHide.not( this.toShow ); + this.hideErrors(); + this.addWrapper( this.toShow ).show(); + }, + + validElements: function() { + return this.currentElements.not( this.invalidElements() ); + }, + + invalidElements: function() { + return $( this.errorList ).map( function() { + return this.element; + } ); + }, + + showLabel: function( element, message ) { + var place, group, errorID, v, + error = this.errorsFor( element ), + elementID = this.idOrName( element ), + describedBy = $( element ).attr( "aria-describedby" ); + + if ( error.length ) { + + // Refresh error/success class + error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); + + // Replace message on existing label + error.html( message ); + } else { + + // Create error element + error = $( "<" + this.settings.errorElement + ">" ) + .attr( "id", elementID + "-error" ) + .addClass( this.settings.errorClass ) + .html( message || "" ); + + // Maintain reference to the element to be placed into the DOM + place = error; + if ( this.settings.wrapper ) { + + // Make sure the element is visible, even in IE + // actually showing the wrapped element is handled elsewhere + place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent(); + } + if ( this.labelContainer.length ) { + this.labelContainer.append( place ); + } else if ( this.settings.errorPlacement ) { + this.settings.errorPlacement.call( this, place, $( element ) ); + } else { + place.insertAfter( element ); + } + + // Link error back to the element + if ( error.is( "label" ) ) { + + // If the error is a label, then associate using 'for' + error.attr( "for", elementID ); + + // If the element is not a child of an associated label, then it's necessary + // to explicitly apply aria-describedby + } else if ( error.parents( "label[for='" + this.escapeCssMeta( elementID ) + "']" ).length === 0 ) { + errorID = error.attr( "id" ); + + // Respect existing non-error aria-describedby + if ( !describedBy ) { + describedBy = errorID; + } else if ( !describedBy.match( new RegExp( "\\b" + this.escapeCssMeta( errorID ) + "\\b" ) ) ) { + + // Add to end of list if not already present + describedBy += " " + errorID; + } + $( element ).attr( "aria-describedby", describedBy ); + + // If this element is grouped, then assign to all elements in the same group + group = this.groups[ element.name ]; + if ( group ) { + v = this; + $.each( v.groups, function( name, testgroup ) { + if ( testgroup === group ) { + $( "[name='" + v.escapeCssMeta( name ) + "']", v.currentForm ) + .attr( "aria-describedby", error.attr( "id" ) ); + } + } ); + } + } + } + if ( !message && this.settings.success ) { + error.text( "" ); + if ( typeof this.settings.success === "string" ) { + error.addClass( this.settings.success ); + } else { + this.settings.success( error, element ); + } + } + this.toShow = this.toShow.add( error ); + }, + + errorsFor: function( element ) { + var name = this.escapeCssMeta( this.idOrName( element ) ), + describer = $( element ).attr( "aria-describedby" ), + selector = "label[for='" + name + "'], label[for='" + name + "'] *"; + + // 'aria-describedby' should directly reference the error element + if ( describer ) { + selector = selector + ", #" + this.escapeCssMeta( describer ) + .replace( /\s+/g, ", #" ); + } + + return this + .errors() + .filter( selector ); + }, + + // See https://api.jquery.com/category/selectors/, for CSS + // meta-characters that should be escaped in order to be used with JQuery + // as a literal part of a name/id or any selector. + escapeCssMeta: function( string ) { + return string.replace( /([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1" ); + }, + + idOrName: function( element ) { + return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name ); + }, + + validationTargetFor: function( element ) { + + // If radio/checkbox, validate first element in group instead + if ( this.checkable( element ) ) { + element = this.findByName( element.name ); + } + + // Always apply ignore filter + return $( element ).not( this.settings.ignore )[ 0 ]; + }, + + checkable: function( element ) { + return ( /radio|checkbox/i ).test( element.type ); + }, + + findByName: function( name ) { + return $( this.currentForm ).find( "[name='" + this.escapeCssMeta( name ) + "']" ); + }, + + getLength: function( value, element ) { + switch ( element.nodeName.toLowerCase() ) { + case "select": + return $( "option:selected", element ).length; + case "input": + if ( this.checkable( element ) ) { + return this.findByName( element.name ).filter( ":checked" ).length; + } + } + return value.length; + }, + + depend: function( param, element ) { + return this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true; + }, + + dependTypes: { + "boolean": function( param ) { + return param; + }, + "string": function( param, element ) { + return !!$( param, element.form ).length; + }, + "function": function( param, element ) { + return param( element ); + } + }, + + optional: function( element ) { + var val = this.elementValue( element ); + return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch"; + }, + + startRequest: function( element ) { + if ( !this.pending[ element.name ] ) { + this.pendingRequest++; + $( element ).addClass( this.settings.pendingClass ); + this.pending[ element.name ] = true; + } + }, + + stopRequest: function( element, valid ) { + this.pendingRequest--; + + // Sometimes synchronization fails, make sure pendingRequest is never < 0 + if ( this.pendingRequest < 0 ) { + this.pendingRequest = 0; + } + delete this.pending[ element.name ]; + $( element ).removeClass( this.settings.pendingClass ); + if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { + $( this.currentForm ).submit(); + + // Remove the hidden input that was used as a replacement for the + // missing submit button. The hidden input is added by `handle()` + // to ensure that the value of the used submit button is passed on + // for scripted submits triggered by this method + if ( this.submitButton ) { + $( "input:hidden[name='" + this.submitButton.name + "']", this.currentForm ).remove(); + } + + this.formSubmitted = false; + } else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) { + $( this.currentForm ).triggerHandler( "invalid-form", [ this ] ); + this.formSubmitted = false; + } + }, + + previousValue: function( element, method ) { + method = typeof method === "string" && method || "remote"; + + return $.data( element, "previousValue" ) || $.data( element, "previousValue", { + old: null, + valid: true, + message: this.defaultMessage( element, { method: method } ) + } ); + }, + + // Cleans up all forms and elements, removes validator-specific events + destroy: function() { + this.resetForm(); + + $( this.currentForm ) + .off( ".validate" ) + .removeData( "validator" ) + .find( ".validate-equalTo-blur" ) + .off( ".validate-equalTo" ) + .removeClass( "validate-equalTo-blur" ); + } + + }, + + classRuleSettings: { + required: { required: true }, + email: { email: true }, + url: { url: true }, + date: { date: true }, + dateISO: { dateISO: true }, + number: { number: true }, + digits: { digits: true }, + creditcard: { creditcard: true } + }, + + addClassRules: function( className, rules ) { + if ( className.constructor === String ) { + this.classRuleSettings[ className ] = rules; + } else { + $.extend( this.classRuleSettings, className ); + } + }, + + classRules: function( element ) { + var rules = {}, + classes = $( element ).attr( "class" ); + + if ( classes ) { + $.each( classes.split( " " ), function() { + if ( this in $.validator.classRuleSettings ) { + $.extend( rules, $.validator.classRuleSettings[ this ] ); + } + } ); + } + return rules; + }, + + normalizeAttributeRule: function( rules, type, method, value ) { + + // Convert the value to a number for number inputs, and for text for backwards compability + // allows type="date" and others to be compared as strings + if ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) { + value = Number( value ); + + // Support Opera Mini, which returns NaN for undefined minlength + if ( isNaN( value ) ) { + value = undefined; + } + } + + if ( value || value === 0 ) { + rules[ method ] = value; + } else if ( type === method && type !== "range" ) { + + // Exception: the jquery validate 'range' method + // does not test for the html5 'range' type + rules[ method ] = true; + } + }, + + attributeRules: function( element ) { + var rules = {}, + $element = $( element ), + type = element.getAttribute( "type" ), + method, value; + + for ( method in $.validator.methods ) { + + // Support for in both html5 and older browsers + if ( method === "required" ) { + value = element.getAttribute( method ); + + // Some browsers return an empty string for the required attribute + // and non-HTML5 browsers might have required="" markup + if ( value === "" ) { + value = true; + } + + // Force non-HTML5 browsers to return bool + value = !!value; + } else { + value = $element.attr( method ); + } + + this.normalizeAttributeRule( rules, type, method, value ); + } + + // 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs + if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) { + delete rules.maxlength; + } + + return rules; + }, + + dataRules: function( element ) { + var rules = {}, + $element = $( element ), + type = element.getAttribute( "type" ), + method, value; + + for ( method in $.validator.methods ) { + value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() ); + this.normalizeAttributeRule( rules, type, method, value ); + } + return rules; + }, + + staticRules: function( element ) { + var rules = {}, + validator = $.data( element.form, "validator" ); + + if ( validator.settings.rules ) { + rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {}; + } + return rules; + }, + + normalizeRules: function( rules, element ) { + + // Handle dependency check + $.each( rules, function( prop, val ) { + + // Ignore rule when param is explicitly false, eg. required:false + if ( val === false ) { + delete rules[ prop ]; + return; + } + if ( val.param || val.depends ) { + var keepRule = true; + switch ( typeof val.depends ) { + case "string": + keepRule = !!$( val.depends, element.form ).length; + break; + case "function": + keepRule = val.depends.call( element, element ); + break; + } + if ( keepRule ) { + rules[ prop ] = val.param !== undefined ? val.param : true; + } else { + $.data( element.form, "validator" ).resetElements( $( element ) ); + delete rules[ prop ]; + } + } + } ); + + // Evaluate parameters + $.each( rules, function( rule, parameter ) { + rules[ rule ] = $.isFunction( parameter ) && rule !== "normalizer" ? parameter( element ) : parameter; + } ); + + // Clean number parameters + $.each( [ "minlength", "maxlength" ], function() { + if ( rules[ this ] ) { + rules[ this ] = Number( rules[ this ] ); + } + } ); + $.each( [ "rangelength", "range" ], function() { + var parts; + if ( rules[ this ] ) { + if ( $.isArray( rules[ this ] ) ) { + rules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ]; + } else if ( typeof rules[ this ] === "string" ) { + parts = rules[ this ].replace( /[\[\]]/g, "" ).split( /[\s,]+/ ); + rules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ]; + } + } + } ); + + if ( $.validator.autoCreateRanges ) { + + // Auto-create ranges + if ( rules.min != null && rules.max != null ) { + rules.range = [ rules.min, rules.max ]; + delete rules.min; + delete rules.max; + } + if ( rules.minlength != null && rules.maxlength != null ) { + rules.rangelength = [ rules.minlength, rules.maxlength ]; + delete rules.minlength; + delete rules.maxlength; + } + } + + return rules; + }, + + // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} + normalizeRule: function( data ) { + if ( typeof data === "string" ) { + var transformed = {}; + $.each( data.split( /\s/ ), function() { + transformed[ this ] = true; + } ); + data = transformed; + } + return data; + }, + + // https://jqueryvalidation.org/jQuery.validator.addMethod/ + addMethod: function( name, method, message ) { + $.validator.methods[ name ] = method; + $.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ]; + if ( method.length < 3 ) { + $.validator.addClassRules( name, $.validator.normalizeRule( name ) ); + } + }, + + // https://jqueryvalidation.org/jQuery.validator.methods/ + methods: { + + // https://jqueryvalidation.org/required-method/ + required: function( value, element, param ) { + + // Check if dependency is met + if ( !this.depend( param, element ) ) { + return "dependency-mismatch"; + } + if ( element.nodeName.toLowerCase() === "select" ) { + + // Could be an array for select-multiple or a string, both are fine this way + var val = $( element ).val(); + return val && val.length > 0; + } + if ( this.checkable( element ) ) { + return this.getLength( value, element ) > 0; + } + return value.length > 0; + }, + + // https://jqueryvalidation.org/email-method/ + email: function( value, element ) { + + // From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address + // Retrieved 2014-01-14 + // If you have a problem with this implementation, report a bug against the above spec + // Or use custom methods to implement your own email validation + return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value ); + }, + + // https://jqueryvalidation.org/url-method/ + url: function( value, element ) { + + // Copyright (c) 2010-2013 Diego Perini, MIT licensed + // https://gist.github.com/dperini/729294 + // see also https://mathiasbynens.be/demo/url-regex + // modified to allow protocol-relative URLs + return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test( value ); + }, + + // https://jqueryvalidation.org/date-method/ + date: function( value, element ) { + return this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() ); + }, + + // https://jqueryvalidation.org/dateISO-method/ + dateISO: function( value, element ) { + return this.optional( element ) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test( value ); + }, + + // https://jqueryvalidation.org/number-method/ + number: function( value, element ) { + return this.optional( element ) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test( value ); + }, + + // https://jqueryvalidation.org/digits-method/ + digits: function( value, element ) { + return this.optional( element ) || /^\d+$/.test( value ); + }, + + // https://jqueryvalidation.org/minlength-method/ + minlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength( value, element ); + return this.optional( element ) || length >= param; + }, + + // https://jqueryvalidation.org/maxlength-method/ + maxlength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength( value, element ); + return this.optional( element ) || length <= param; + }, + + // https://jqueryvalidation.org/rangelength-method/ + rangelength: function( value, element, param ) { + var length = $.isArray( value ) ? value.length : this.getLength( value, element ); + return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] ); + }, + + // https://jqueryvalidation.org/min-method/ + min: function( value, element, param ) { + return this.optional( element ) || value >= param; + }, + + // https://jqueryvalidation.org/max-method/ + max: function( value, element, param ) { + return this.optional( element ) || value <= param; + }, + + // https://jqueryvalidation.org/range-method/ + range: function( value, element, param ) { + return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] ); + }, + + // https://jqueryvalidation.org/step-method/ + step: function( value, element, param ) { + var type = $( element ).attr( "type" ), + errorMessage = "Step attribute on input type " + type + " is not supported.", + supportedTypes = [ "text", "number", "range" ], + re = new RegExp( "\\b" + type + "\\b" ), + notSupported = type && !re.test( supportedTypes.join() ), + decimalPlaces = function( num ) { + var match = ( "" + num ).match( /(?:\.(\d+))?$/ ); + if ( !match ) { + return 0; + } + + // Number of digits right of decimal point. + return match[ 1 ] ? match[ 1 ].length : 0; + }, + toInt = function( num ) { + return Math.round( num * Math.pow( 10, decimals ) ); + }, + valid = true, + decimals; + + // Works only for text, number and range input types + // TODO find a way to support input types date, datetime, datetime-local, month, time and week + if ( notSupported ) { + throw new Error( errorMessage ); + } + + decimals = decimalPlaces( param ); + + // Value can't have too many decimals + if ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) { + valid = false; + } + + return this.optional( element ) || valid; + }, + + // https://jqueryvalidation.org/equalTo-method/ + equalTo: function( value, element, param ) { + + // Bind to the blur event of the target in order to revalidate whenever the target field is updated + var target = $( param ); + if ( this.settings.onfocusout && target.not( ".validate-equalTo-blur" ).length ) { + target.addClass( "validate-equalTo-blur" ).on( "blur.validate-equalTo", function() { + $( element ).valid(); + } ); + } + return value === target.val(); + }, + + // https://jqueryvalidation.org/remote-method/ + remote: function( value, element, param, method ) { + if ( this.optional( element ) ) { + return "dependency-mismatch"; + } + + method = typeof method === "string" && method || "remote"; + + var previous = this.previousValue( element, method ), + validator, data, optionDataString; + + if ( !this.settings.messages[ element.name ] ) { + this.settings.messages[ element.name ] = {}; + } + previous.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ]; + this.settings.messages[ element.name ][ method ] = previous.message; + + param = typeof param === "string" && { url: param } || param; + optionDataString = $.param( $.extend( { data: value }, param.data ) ); + if ( previous.old === optionDataString ) { + return previous.valid; + } + + previous.old = optionDataString; + validator = this; + this.startRequest( element ); + data = {}; + data[ element.name ] = value; + $.ajax( $.extend( true, { + mode: "abort", + port: "validate" + element.name, + dataType: "json", + data: data, + context: validator.currentForm, + success: function( response ) { + var valid = response === true || response === "true", + errors, message, submitted; + + validator.settings.messages[ element.name ][ method ] = previous.originalMessage; + if ( valid ) { + submitted = validator.formSubmitted; + validator.resetInternals(); + validator.toHide = validator.errorsFor( element ); + validator.formSubmitted = submitted; + validator.successList.push( element ); + validator.invalid[ element.name ] = false; + validator.showErrors(); + } else { + errors = {}; + message = response || validator.defaultMessage( element, { method: method, parameters: value } ); + errors[ element.name ] = previous.message = message; + validator.invalid[ element.name ] = true; + validator.showErrors( errors ); + } + previous.valid = valid; + validator.stopRequest( element, valid ); + } + }, param ) ); + return "pending"; + } + } + +} ); + +// Ajax mode: abort +// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); +// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() + +var pendingRequests = {}, + ajax; + +// Use a prefilter if available (1.5+) +if ( $.ajaxPrefilter ) { + $.ajaxPrefilter( function( settings, _, xhr ) { + var port = settings.port; + if ( settings.mode === "abort" ) { + if ( pendingRequests[ port ] ) { + pendingRequests[ port ].abort(); + } + pendingRequests[ port ] = xhr; + } + } ); +} else { + + // Proxy ajax + ajax = $.ajax; + $.ajax = function( settings ) { + var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, + port = ( "port" in settings ? settings : $.ajaxSettings ).port; + if ( mode === "abort" ) { + if ( pendingRequests[ port ] ) { + pendingRequests[ port ].abort(); + } + pendingRequests[ port ] = ajax.apply( this, arguments ); + return pendingRequests[ port ]; + } + return ajax.apply( this, arguments ); + }; +} +return $; +})); \ No newline at end of file diff --git a/html/content/lib/jquery/dist/jquery.js b/html/content/lib/jquery/dist/jquery.js new file mode 100644 index 0000000..5546015 --- /dev/null +++ b/html/content/lib/jquery/dist/jquery.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "