├── LICENSE.txt ├── Magefan_BetterCheckout ├── layout │ └── better_checkout_index_index.xml ├── templates │ └── mf_checkout_font.phtml └── web │ └── css │ └── source │ └── _module.less ├── Magefan_Blog └── web │ └── css │ └── blog-custom.css ├── Magento_Bundle └── web │ └── css │ └── source │ └── _module.less ├── Magento_Catalog ├── layout │ ├── catalog_product_view.xml │ ├── catalog_product_view_type_simple.xml │ └── catalog_product_view_type_virtual.xml ├── templates │ └── product │ │ └── view │ │ ├── addtocart.phtml │ │ └── gallery.phtml └── web │ ├── css │ ├── gallery-preloaded.css │ ├── gallery.css │ └── source │ │ ├── _module.less │ │ ├── _widgets.less │ │ └── module │ │ ├── _listings.less │ │ └── _toolbar.less │ ├── images │ ├── gallery.png │ └── loader-1.gif │ └── template │ └── product │ └── image_with_borders.html ├── Magento_CatalogSearch └── web │ └── css │ └── source │ └── _module.less ├── Magento_Checkout ├── templates │ └── cart │ │ ├── item │ │ └── configure │ │ │ └── updatecart.phtml │ │ └── minicart.phtml └── web │ ├── css │ └── source │ │ └── module │ │ ├── _cart.less │ │ ├── _minicart.less │ │ └── checkout │ │ ├── _estimated-total.less │ │ ├── _shipping.less │ │ └── _tooltip.less │ └── js │ └── productQtyInCart.js ├── Magento_ConfigurableProduct └── layout │ └── catalog_product_view_type_configurable.xml ├── Magento_Customer ├── layout │ └── customer_account.xml └── web │ ├── css │ └── source │ │ └── _module.less │ └── js │ └── view │ └── authentication-popup.js ├── Magento_GroupedProduct ├── layout │ └── catalog_product_view_type_grouped.xml └── templates │ └── product │ └── view │ └── type │ └── grouped.phtml ├── Magento_LayeredNavigation ├── templates │ └── layer │ │ ├── state.phtml │ │ └── view.phtml └── web │ └── css │ └── source │ └── _module.less ├── Magento_Newsletter ├── layout │ └── default.xml └── templates │ └── subscription.phtml ├── Magento_ProductVideo └── templates │ └── product │ └── view │ └── gallery.phtml ├── Magento_ReCaptchaFrontendUi └── templates │ └── recaptcha.phtml ├── Magento_Review ├── templates │ └── form.phtml └── web │ └── css │ └── source │ └── _module.less ├── Magento_Sales └── web │ └── css │ └── source │ └── _module.less ├── Magento_Search └── templates │ └── form.mini.phtml ├── Magento_Swatches └── web │ └── css │ └── source │ └── _module.less ├── Magento_Theme ├── layout │ ├── default.xml │ ├── default_head_blocks.xml │ └── move_catalog_product_view.xml ├── templates │ ├── css_manager.phtml │ ├── home-page-block-category.phtml │ └── html │ │ ├── breadcrumbs.phtml │ │ ├── pager.phtml │ │ └── print.phtml └── web │ └── css │ └── source │ ├── _module.less │ └── module │ └── _collapsible_navigation.less ├── Magento_Ui └── web │ └── js │ ├── form │ └── form.js │ └── lib │ ├── knockout │ └── bindings │ │ └── bootstrap.js │ └── logger │ └── formatter.js ├── Magento_Wishlist ├── templates │ └── sidebar.phtml └── web │ └── css │ └── source │ └── _module.less ├── README.md ├── composer.json ├── etc └── view.xml ├── media └── preview.jpg ├── registration.php ├── theme.xml └── web ├── css ├── source │ ├── _breadcrumbs.less │ ├── _buttons.less │ ├── _extend.less │ ├── _forms.less │ ├── _layout.less │ ├── _pages.less │ ├── _sections.less │ ├── _tables.less │ ├── _theme.less │ ├── _typography.less │ ├── _variables.less │ ├── lib │ │ ├── _navigation.less │ │ └── _rating.less │ └── variables │ │ └── _fo_theme_colors.less └── swiper-bundle.min.css ├── fonts ├── Optimized │ ├── Optimized-Theme-Icons.eot │ ├── Optimized-Theme-Icons.svg │ ├── Optimized-Theme-Icons.ttf │ ├── Optimized-Theme-Icons.woff │ └── Optimized-Theme-Icons.woff2 └── roboto │ ├── Roboto.ttf │ ├── Roboto.woff │ └── Roboto.woff2 └── images ├── arrow-right.png ├── facebook-f.svg ├── facebook-square-white.svg ├── facebook-square.svg ├── instagram-square-white.svg ├── instagram-square.svg ├── instagram.svg ├── linkedin-in.svg ├── linkedin-square-white.svg ├── linkedin-square.svg ├── logo.png ├── twitter-square-white.svg ├── twitter-square.svg ├── twitter.svg ├── youtube-square-white.svg ├── youtube-square.svg └── youtube.svg /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement) 2 | -------------------------------------------------------------------------------- /Magefan_BetterCheckout/layout/better_checkout_index_index.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Magefan_BetterCheckout/templates/mf_checkout_font.phtml: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /Magefan_Blog/web/css/blog-custom.css: -------------------------------------------------------------------------------- 1 | body.blog-page { 2 | --color-white: #ffffff; 3 | --color-green: #28a745; 4 | --color-yellow: #ffc107; 5 | --color-blue: #4db2ec; 6 | --color-black: #222222; 7 | --color-gray: #bbbbbb; 8 | --color-red: #dc3545; 9 | --border-color: #d5d6da; 10 | 11 | /* for light theme */ 12 | /*--color-primary: #1a1a1a;*/ 13 | /*--color-primary-alt: f5f5f5;*/ 14 | /*--color-secondary: #ba933e;*/ 15 | --block-title-color: #222222; 16 | 17 | /* for dark theme */ 18 | /*--color-primary: #1b1b1b;*/ 19 | /*--color-primary-alt: #343434;*/ 20 | /*--color-secondary: #d23d43;*/ 21 | /*--block-title-color: #cdcdcd;*/ 22 | } 23 | 24 | 25 | /* Blog Extra *********************************************************************************************************/ 26 | [class^=mosaica] .block-title-wrap {line-height: 24px;} 27 | [class^=mosaica] .block-title-wrap h4 {padding: 7px 12px 5px;} 28 | [class^=mosaica] h3.post-title a {display: inline-block;padding: 0 7px;} 29 | [class^=mosaica] .post-data-wrap {padding: 2px 7px;} 30 | 31 | [class^=template-] .block-title-wrap {line-height: 24px;} 32 | [class^=template-] .block-title-wrap h4 {padding: 7px 12px 5px;line-height: 16px;} 33 | [class^=template-] .post-info a {transition: all .2s ease;} 34 | /* END Blog Extra *****************************************************************************************************/ 35 | 36 | 37 | 38 | /* Blog ***************************************************************************************************************/ 39 | /* Block Title ******/ 40 | .blog-post-view .post-bottom .block.related .block-title {border-color: var(--block-title-color);color: var(--block-title-color);} 41 | .blog-post-view .post-bottom .block.related .block-title strong {padding-bottom: 3px;border-color: var(--block-title-color);} 42 | /* Comments */ 43 | .optimized-theme.blog-page .block.comments .c-count {border-color: var(--block-title-color);color: var(--block-title-color);} 44 | .optimized-theme.blog-page .block.comments .c-count strong {border-color: var(--block-title-color);} 45 | 46 | 47 | /* Blog Post View *****************************************************************************************************/ 48 | /* Category */ 49 | .blog-post-view .post-category a {display: inline-block;margin: 0 5px 0 0;padding: 5px 10px;background: #000;color: #fff;font-size: 11px;line-height: 12px;font-weight: 500;text-decoration: none;text-transform: uppercase;border: 1px solid #fff;transition: all .3s ease;} 50 | .blog-post-view .post-category a:hover {background: #555;transition: all .3s ease;} 51 | /* Post View */ 52 | /*.blog-post-view .post-view-modern .mf-blog-icon.mfbi-views {background-image: none;}*/ 53 | /*.blog-post-view .post-view-modern .mf-blog-icon.mfbi-views svg {fill: currentColor;}*/ 54 | /* Post Comments */ 55 | /*.blog-post-view .post-view-modern .mf-blog-icon.mfbi-comments {background-image: none;}*/ 56 | /*.blog-post-view .post-view-modern .mf-blog-icon.mfbi-comments svg {fill: currentColor;}*/ 57 | /* Tags */ 58 | .blog-post-view .post-tag {margin-bottom: 20px;} 59 | .blog-post-view .post-tag .post-tag-title {border: 1px solid var(--border-color);} 60 | .blog-post-view .post-tag .post-tags a {color: #ffffff;background: #222;transition: all .3s ease;} 61 | .blog-post-view .post-tag .post-tags a.current, 62 | .blog-post-view .post-tag .post-tags a:hover {background: #555;color: #fff;transition: all .3s ease;} 63 | 64 | /* Post Navigation */ 65 | .blog-post-view .post-nextprev .post-prev .nextprev-link {text-align: left;} 66 | 67 | /* Fix Related Products */ 68 | .blog-post-view .mfblog-related-products-block .block-content {padding: 0;} 69 | .blog-post-view .mfblog-related-products-block .products-grid .product-items {display: grid;grid-template-columns: repeat(2, 1fr);gap: 1rem;margin: 0;} 70 | .blog-post-view .mfblog-related-products-block .products-grid .product-items .product-item {width: 100%;border: 1px solid transparent;transition: all .3s ease;} 71 | .blog-post-view .mfblog-related-products-block .products-grid .product-items .product-item.product-item-info {width: auto;} 72 | @media (min-width: 769px){ 73 | .blog-post-view .mfblog-related-products-block .products-grid .product-items {display: grid;grid-template-columns: repeat(3, 1fr);gap: 1rem;} 74 | } 75 | @media (min-width: 1024px){ 76 | .blog-post-view .mfblog-related-products-block .products-grid .product-items {display: grid;grid-template-columns: repeat(5, 1fr);gap: 1rem;} 77 | } 78 | /* END Blog Post View *************************************************************************************************/ 79 | 80 | 81 | /* Sidebar ************************************************************************************************************/ 82 | /* Search Widget */ 83 | .widget.blog-search .action.search {background: none;} 84 | .widget.blog-search .action.search:before {-webkit-font-smoothing: antialiased;content: '\e615';font-family: 'icons-blank-theme';font-size: 22px;line-height: 22px;color: #8f8f8f;font-weight: normal;margin: 0;vertical-align: top;display: inline-block;overflow: hidden;speak: none;width: 22px;height: 22px;opacity: 1;background-image: none;} 85 | .widget.blog-search .action.search:hover:before {} 86 | /* END Sidebar ********************************************************************************************************/ 87 | /* END Blog ***********************************************************************************************************/ -------------------------------------------------------------------------------- /Magento_Bundle/web/css/source/_module.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magento, Inc. All rights reserved. 3 | // * See COPYING.txt for license details. 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | 12 | .bundle-actions { 13 | &:extend(.abs-box-tocart all); 14 | display: inline-block; 15 | vertical-align: top; 16 | .action.primary { 17 | &:extend(.abs-button-l all); 18 | } 19 | } 20 | 21 | .bundle-options-container { 22 | clear: both; 23 | margin-bottom: @indent__xl; 24 | 25 | .legend.title { 26 | .lib-heading(h2); 27 | } 28 | 29 | .product-add-form { 30 | display: none; 31 | } 32 | 33 | .input-text.qty { 34 | &:extend(.abs-input-qty all); 35 | } 36 | 37 | .product-options-wrapper { 38 | margin-bottom: @indent__l; 39 | } 40 | 41 | .action.back { 42 | margin-bottom: @indent__l; 43 | } 44 | 45 | .price-box { 46 | .lib-css(display, flex); 47 | .lib-vendor-box-align(center); 48 | .lib-vendor-prefix-flex-wrap (wrap); 49 | 50 | .price-as-configured { 51 | margin: 0; 52 | } 53 | .price { 54 | font-size: @font-size__l; 55 | font-weight: @font-weight__bold; 56 | } 57 | } 58 | 59 | .price-notice { 60 | &:extend(.abs-adjustment-incl-excl-tax all); 61 | } 62 | 63 | .block-bundle-summary { 64 | &:extend(.abs-add-box-sizing all); 65 | //.lib-css(background, @secondary__color); 66 | .lib-css(background, @theme__color__primary-alt); 67 | padding: @indent__s @indent__base; 68 | 69 | > .title > strong { 70 | .lib-heading(h2); 71 | } 72 | 73 | .bundle-summary { 74 | margin-top: @indent__l; 75 | 76 | &.empty { 77 | display: none; 78 | } 79 | 80 | > .subtitle { 81 | .lib-heading(h3); 82 | display: block; 83 | } 84 | } 85 | 86 | .bundle.items { 87 | &:extend(.abs-reset-list all); 88 | 89 | > li { 90 | margin-bottom: @indent__s; 91 | } 92 | } 93 | 94 | .box-tocart { 95 | .actions { 96 | display: inline-block; 97 | margin-bottom: @indent__s; 98 | } 99 | 100 | .action.primary { 101 | &:extend(.abs-button-l all); 102 | } 103 | } 104 | 105 | .product-addto-links { 106 | > .action { 107 | &:extend(.abs-action-addto-product all); 108 | vertical-align: top; 109 | } 110 | } 111 | } 112 | .nested { 113 | .field.qty { 114 | .label { 115 | .lib-css(font-weight, @form-field-label__font-weight); 116 | .lib-css(margin, 0 0 @indent__xs); 117 | display: inline-block; 118 | } 119 | 120 | .lib-css(margin-top, @form-field__vertical-indent); 121 | } 122 | } 123 | 124 | p.required { 125 | .lib-css(color, @form-field-label-asterisk__color); 126 | } 127 | 128 | .product-options-bottom { 129 | clear: left; 130 | } 131 | } 132 | } 133 | 134 | // 135 | // Desktop 136 | // _____________________________________________ 137 | 138 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 139 | .bundle-options-container { 140 | .legend.title { 141 | &:extend(.abs-reset-left-margin-desktop all); 142 | } 143 | 144 | .bundle-options-wrapper, 145 | .product-options-wrapper { 146 | float: left; 147 | width: 57%; 148 | } 149 | 150 | .block-bundle-summary { 151 | float: right; 152 | position: relative; 153 | width: 40%; 154 | } 155 | 156 | .bundle-options-wrapper, 157 | .block-bundle-summary { 158 | .page-layout-2columns-left &, 159 | .page-layout-2columns-right &, 160 | .page-layout-3columns & { 161 | width: 48%; 162 | } 163 | } 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /Magento_Catalog/layout/catalog_product_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Magento_Catalog/layout/catalog_product_view_type_simple.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Magento_Catalog/layout/catalog_product_view_type_virtual.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Magento_Catalog/templates/product/view/addtocart.phtml: -------------------------------------------------------------------------------- 1 | 9 | getProduct(); ?> 10 | 11 | isSaleable()) :?> 12 |
13 |
14 | shouldRenderQuantity()) :?> 15 |
16 |
17 |
18 | 27 |
28 |
29 |
30 | 31 |
32 | 38 | getChildHtml('', true) ?> 39 |
40 |
41 |
42 | 43 | 50 | 84 | -------------------------------------------------------------------------------- /Magento_Catalog/web/css/gallery-preloaded.css: -------------------------------------------------------------------------------- 1 | .fotorama-focus, 2 | .fotorama__nav__frame, 3 | .fotorama__fullscreen-icon:focus, 4 | .fotorama__zoom-out:focus, 5 | .fotorama__zoom-in:focus { 6 | outline: 0; 7 | } 8 | 9 | .fotorama-auto-margin, 10 | .fotorama__nav, 11 | .fotorama__nav__frame { 12 | margin: auto; 13 | padding: 0; 14 | } 15 | 16 | .fotorama-inline-block, 17 | .fotorama__nav__shaft, 18 | .fotorama__nav__frame, 19 | .fotorama__caption__wrap { 20 | *display: inline; 21 | *zoom: 1; -moz-box-orient: vertical; 22 | display: -moz-inline-box; 23 | display: inline-block; 24 | vertical-align: middle; 25 | } 26 | 27 | .fotorama-content-box, 28 | .fotorama__nav__frame { 29 | box-sizing: content-box; 30 | } 31 | 32 | .fotorama-border-box, 33 | .fotorama__thumb-border { 34 | box-sizing: border-box; 35 | } 36 | 37 | .fotorama__nav, 38 | .fotorama__nav__shaft, 39 | .fotorama__nav__frame { 40 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 41 | } 42 | 43 | .fotorama__stage, 44 | .fotorama__nav { 45 | max-width: 100%; 46 | overflow: hidden; 47 | position: relative; 48 | } 49 | 50 | .fotorama__img { 51 | border: none !important; 52 | max-width: inherit; 53 | opacity: 0; 54 | } 55 | 56 | .fotorama__loaded .fotorama__img, 57 | .fotorama__error .fotorama__img { 58 | opacity: 1; 59 | } 60 | .fotorama__nav { 61 | display: none; 62 | font-size: 0; 63 | line-height: 0; 64 | white-space: nowrap; 65 | z-index: 5; 66 | } 67 | 68 | .fotorama__nav__shaft { 69 | left: 0; 70 | position: relative; 71 | text-align: left; 72 | top: 0; 73 | } 74 | 75 | .fotorama__nav__frame { 76 | position: relative; 77 | } 78 | 79 | .fotorama__nav--dots { 80 | display: block; 81 | text-align: center; 82 | } 83 | 84 | .fotorama__nav--dots .fotorama__nav__frame { 85 | height: 30px; 86 | width: 18px; 87 | } 88 | 89 | .fotorama__nav--thumbs { 90 | display: block; 91 | } 92 | 93 | .fotorama__nav--thumbs .fotorama__nav__frame { 94 | padding-left: 0 !important; 95 | } 96 | 97 | .fotorama__nav--thumbs .fotorama__nav__frame:last-child { 98 | padding-right: 0 !important; 99 | } 100 | .fotorama__active .fotorama__dot { 101 | background-color: #ff5501; 102 | border-color: #ff5501; 103 | } 104 | .fotorama__dot { 105 | border-radius: 6px; 106 | border: 1px solid #858585; 107 | display: block; 108 | height: 4px; 109 | left: 6px; 110 | position: relative; 111 | top: 12px; 112 | width: 4px; 113 | } 114 | 115 | .fotorama__thumb { 116 | background-color: #ebebeb; 117 | height: 100%; 118 | overflow: hidden; 119 | position: relative; 120 | width: 100%; 121 | } 122 | .fotorama__thumb-border { 123 | backface-visibility: hidden; 124 | background-image: linear-gradient(to bottom right, rgba(255, 255, 255, 0.25), rgba(64, 64, 64, 0.1)); 125 | border: 2px solid #ff5501; 126 | left: 0; 127 | position: absolute; 128 | top: 0; 129 | z-index: 9; 130 | } 131 | 132 | .fotorama__nav:before, 133 | .fotorama__nav:after { 134 | background-repeat: no-repeat; 135 | content: ''; 136 | display: block; 137 | pointer-events: none; 138 | position: absolute; 139 | text-decoration: none; 140 | z-index: 10; 141 | } 142 | 143 | .fotorama__nav:before { 144 | left: -10px; 145 | top: -10px; 146 | } 147 | 148 | .fotorama__nav:after { 149 | right: -10px; 150 | bottom: -10px; 151 | } 152 | 153 | .fotorama__nav-wrap .fotorama_vertical_ratio .fotorama__img { 154 | -webkit-transform: translateY(-50%); 155 | -ms-transform: translateY(-50%); 156 | -o-transform: translateY(-50%); 157 | transform: translateY(-50%); 158 | height: auto; 159 | position: absolute; 160 | top: 50%; 161 | width: 100%; 162 | } 163 | 164 | .gallery-placeholder__image { 165 | display: block; 166 | margin: auto; 167 | } 168 | 169 | @media only screen and (min-width: 768px) { 170 | .gallery-placeholder._block-content-loading.vertical .fotorama__nav-wrap--vertical.fotorama__nav-wrap {display: inline-block;left: 0;position: absolute;top: 0;} 171 | .gallery-placeholder._block-content-loading.vertical .fotorama__nav.fotorama__nav--thumbs {height: 100% !important;} 172 | .gallery-placeholder._block-content-loading.vertical .fotorama__nav__frame {display: block;} 173 | } 174 | -------------------------------------------------------------------------------- /Magento_Catalog/web/css/source/_widgets.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | .block-product-link, 12 | .block-category-link { 13 | &.widget { 14 | display: block; 15 | margin-bottom: @indent__base; 16 | } 17 | } 18 | 19 | .block-product-link-inline { 20 | &.widget { 21 | margin: 0; 22 | } 23 | } 24 | 25 | .block.widget { 26 | .products-grid { 27 | 28 | .product-items { 29 | display: grid; 30 | grid-template-columns: 1fr; 31 | grid-gap: 1rem; 32 | } 33 | 34 | } 35 | 36 | .product-item-info { 37 | width: auto; 38 | padding: 1rem; 39 | } 40 | 41 | .pager { 42 | padding: 0; 43 | 44 | .toolbar-amount { 45 | float: none; 46 | .lib-font-size(12); 47 | } 48 | 49 | .pages-item-previous { 50 | padding-left: 0; 51 | } 52 | 53 | .pages-item-next { 54 | position: relative; 55 | } 56 | 57 | .items { 58 | white-space: nowrap; 59 | } 60 | } 61 | } 62 | } 63 | 64 | // 65 | // Mobile 66 | // _____________________________________________ 67 | 68 | // (max-width: 639px) 69 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) { 70 | .sidebar .block-viewed-products-grid { 71 | .products-grid { 72 | 73 | .product-items { 74 | display: grid; 75 | grid-template-columns: repeat(2, 1fr); 76 | grid-gap: 1rem; 77 | } 78 | 79 | .product-item-photo { 80 | display: block; 81 | position: relative; 82 | } 83 | 84 | .product-item-details { 85 | margin: 0; 86 | } 87 | 88 | .product-item-info { 89 | text-align: center; 90 | } 91 | } 92 | } 93 | } 94 | 95 | // (min-width: 640px) 96 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) { 97 | 98 | .block.widget .products-grid, 99 | .page-layout-1column .block.widget .products-grid, 100 | .page-layout-3columns .block.widget .products-grid { 101 | .product-items { 102 | display: grid; 103 | grid-template-columns: repeat(3, 1fr); 104 | grid-gap: 1rem; 105 | } 106 | } 107 | 108 | .page-layout-1column .block.widget .products-grid { 109 | 110 | .product-items { 111 | display: grid; 112 | grid-template-columns: repeat(3, 1fr); 113 | grid-gap: 1rem; 114 | } 115 | 116 | } 117 | } 118 | 119 | // 120 | // Desktop 121 | // _____________________________________________ 122 | 123 | // (min-width: 769px) 124 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 125 | .block.widget .products-grid { 126 | 127 | .product-items { 128 | display: grid; 129 | grid-template-columns: repeat(3, 1fr); 130 | grid-gap: 1rem; 131 | } 132 | 133 | } 134 | 135 | .page-layout-1column .block.widget .products-grid { 136 | 137 | .products-grid { 138 | .product-items { 139 | display: grid; 140 | grid-template-columns: repeat(4, 1fr); 141 | gap: 1rem; 142 | } 143 | } 144 | 145 | } 146 | 147 | .page-layout-3columns .block.widget .products-grid { 148 | .product-items { 149 | display: grid; 150 | grid-template-columns: repeat(2, 1fr); 151 | gap: 1rem; 152 | } 153 | 154 | } 155 | 156 | 157 | 158 | .sidebar .block.widget .pager { 159 | .item:not(.pages-item-next):not(.pages-item-previous) { 160 | &:extend(.abs-no-display-desktop all); 161 | } 162 | 163 | .pages-item-next { 164 | padding: 0; 165 | 166 | .action { 167 | margin: 0; 168 | } 169 | } 170 | } 171 | } 172 | 173 | // (min-width: 1024px) 174 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__l) { 175 | .block.widget .products-grid { 176 | 177 | .product-items { 178 | display: grid; 179 | grid-template-columns: repeat(5, 1fr); 180 | gap: 1rem; 181 | } 182 | 183 | } 184 | 185 | .page-layout-1column .block.widget .products-grid { 186 | 187 | .product-items { 188 | display: grid; 189 | grid-template-columns: repeat(5, 1fr); 190 | gap: 1rem; 191 | } 192 | 193 | } 194 | 195 | 196 | .page-layout-3columns .block.widget .products-grid { 197 | 198 | .product-items { 199 | display: grid; 200 | grid-template-columns: repeat(4, 1fr); 201 | gap: 1rem; 202 | } 203 | 204 | } 205 | 206 | .block.widget .products-grid .product-items { 207 | margin: 0; 208 | } 209 | 210 | .block.widget .products-grid { 211 | 212 | .product-items { 213 | display: grid; 214 | grid-template-columns: repeat(4, 1fr); 215 | grid-gap: 1rem; 216 | } 217 | 218 | } 219 | } 220 | -------------------------------------------------------------------------------- /Magento_Catalog/web/css/source/module/_toolbar.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Variables 8 | // --------------------------------------------- 9 | 10 | @toolbar-mode-icon-font-size: 24px; 11 | @toolbar-element-background: @panel__background-color; 12 | 13 | // 14 | // Common 15 | // _____________________________________________ 16 | 17 | & when (@media-common = true) { 18 | .page-products { 19 | .columns { 20 | padding-top: 60px; 21 | position: relative; 22 | z-index: 1; 23 | } 24 | } 25 | 26 | .toolbar { 27 | &:extend(.abs-add-clearfix all); 28 | } 29 | 30 | .toolbar-amount { 31 | display: block; 32 | line-height: @toolbar-mode-icon-font-size + 2; 33 | margin: 0; 34 | padding: 3px 0 3px; 35 | vertical-align: middle; 36 | text-align: left; 37 | 38 | .products.wrapper ~ .toolbar & { 39 | display: none; 40 | } 41 | } 42 | 43 | .toolbar-products { 44 | margin-bottom: @indent__xl; 45 | padding: 0 @indent__s; 46 | text-align: center; 47 | &:extend(.abs-add-clearfix all); 48 | 49 | .pages { 50 | display: none; 51 | 52 | .products.wrapper ~ & { 53 | display: block; 54 | } 55 | } 56 | 57 | .limiter { 58 | .control { 59 | display: inline-block; 60 | } 61 | } 62 | } 63 | 64 | .page-products { 65 | .sorter { 66 | position: absolute; 67 | right: 0; 68 | top: 0; 69 | z-index: 1; 70 | } 71 | } 72 | .sorter { 73 | 74 | .products.wrapper ~ .toolbar & { 75 | display: none; 76 | } 77 | 78 | .sorter-action { 79 | position: relative; 80 | top: -2px; 81 | } 82 | } 83 | 84 | .sorter-options { 85 | margin: 0 0 0 7px; 86 | width: auto; 87 | } 88 | 89 | .sorter-action { 90 | vertical-align: top; 91 | .lib-icon-font( 92 | @icon-arrow-up, 93 | @_icon-font-size: 28px, 94 | @_icon-font-line-height: 32px, 95 | @_icon-font-color: @header-icons-color, 96 | @_icon-font-color-hover: @header-icons-color-hover, 97 | @_icon-font-text-hide: true 98 | ); 99 | } 100 | 101 | .sorter { 102 | .sort-desc { 103 | &:before { 104 | content: @icon-arrow-down; 105 | } 106 | } 107 | } 108 | 109 | .modes { 110 | display: none; 111 | } 112 | 113 | .limiter-options { 114 | margin: 0 5px 0 7px; 115 | width: auto; 116 | } 117 | 118 | .limiter-label { 119 | font-weight: @font-weight__regular; 120 | } 121 | 122 | .limiter { 123 | .page-products .toolbar & { 124 | display: none; 125 | } 126 | } 127 | } 128 | 129 | // 130 | // Desktop 131 | // _____________________________________________ 132 | 133 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 134 | .page-products { 135 | .columns { 136 | padding-top: 0; 137 | position: relative; 138 | z-index: 1; 139 | } 140 | } 141 | 142 | .toolbar { 143 | .products.wrapper ~ & .pages { 144 | //float: left; 145 | float: right; 146 | } 147 | } 148 | 149 | .toolbar-amount { 150 | float: left; 151 | } 152 | 153 | .sorter { 154 | float: right; 155 | padding: 4px 0 0; 156 | .page-products & { 157 | position: static; 158 | } 159 | } 160 | 161 | .modes { 162 | display: inline-block; 163 | float: left; 164 | margin-right: @indent__base; 165 | 166 | .products.wrapper ~ .toolbar & { 167 | display: none; 168 | } 169 | } 170 | 171 | .modes-label { 172 | &:extend(.abs-visually-hidden-desktop all); 173 | } 174 | 175 | .modes-mode { 176 | .lib-css(color, @text__color__muted); 177 | border: 1px solid @border-color__base; 178 | border-right: 0; 179 | float: left; 180 | font-weight: @font-weight__regular; 181 | line-height: 1; 182 | padding: 3px 5px; 183 | text-align: center; 184 | 185 | &:not(.active) { 186 | &:hover { 187 | .lib-css(color, @text__color__muted); 188 | background: darken(@toolbar-element-background, 7%); 189 | } 190 | } 191 | 192 | &:last-child { 193 | border-right: 1px solid @border-color__base; 194 | } 195 | 196 | &.active { 197 | .lib-css(color, @primary__color__light); 198 | } 199 | 200 | .lib-icon-font( 201 | @icon-grid, 202 | @_icon-font-size: @toolbar-mode-icon-font-size, 203 | @_icon-font-text-hide: true, 204 | @_icon-font-color: @text__color__muted, 205 | @_icon-font-color-hover: @text__color__muted 206 | ); 207 | } 208 | 209 | .mode-list { 210 | .lib-icon-font-symbol(@icon-list); 211 | } 212 | 213 | .toolbar { 214 | .products.wrapper ~ & .limiter { 215 | display: block; 216 | //float: right; 217 | float: left; 218 | padding: 4px 0 0; 219 | } 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /Magento_Catalog/web/images/gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/Magento_Catalog/web/images/gallery.png -------------------------------------------------------------------------------- /Magento_Catalog/web/images/loader-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/Magento_Catalog/web/images/loader-1.gif -------------------------------------------------------------------------------- /Magento_Catalog/web/template/product/image_with_borders.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Magento_CatalogSearch/web/css/source/_module.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Variables 8 | // _____________________________________________ 9 | 10 | @autocomplete__background-color: @color-white; 11 | @autocomplete__border: 1px solid @form-element-input__border-color; 12 | @autocomplete-item__border: 1px solid @color-gray90; 13 | @autocomplete-item__hover__color: @color-gray91; 14 | @autocomplete-item-amount__color: @color-gray60; 15 | 16 | // 17 | // Common 18 | // _____________________________________________ 19 | 20 | & when (@media-common = true) { 21 | .block-search { 22 | margin-bottom: 0; 23 | 24 | .block { 25 | &-title { 26 | display: none; 27 | } 28 | } 29 | 30 | .block-content { 31 | margin-bottom: 0; 32 | } 33 | 34 | .label { 35 | .lib-icon-font( 36 | @_icon-font-content: @icon-search, 37 | @_icon-font-size: 35px, 38 | @_icon-font-line-height: 33px, 39 | @_icon-font-color: @header-icons-color, 40 | @_icon-font-color-hover: @header-icons-color-hover, 41 | @_icon-font-color-active: @header-icons-color-hover, 42 | @_icon-font-text-hide: true 43 | ); 44 | display: inline-block; 45 | float: right; 46 | 47 | &.active { 48 | + .control { 49 | input { 50 | position: static; 51 | } 52 | } 53 | } 54 | } 55 | 56 | .action.search { 57 | display: none; 58 | } 59 | 60 | .control { 61 | border-top: 1px solid @border-color__base; 62 | clear: both; 63 | margin: 0 -@layout__width-xs-indent -1px; 64 | padding: 0 @layout__width-xs-indent; 65 | } 66 | 67 | input { 68 | font-size: 16px; 69 | left: -300%; 70 | margin: 15px 0; 71 | position: absolute; 72 | } 73 | 74 | .nested { 75 | display: none; 76 | } 77 | } 78 | 79 | .search-autocomplete { 80 | &:extend(.abs-add-box-sizing all); 81 | display: none; 82 | margin-top: -15px; 83 | overflow: hidden; 84 | position: absolute; 85 | z-index: 3; 86 | 87 | ul { 88 | .lib-list-reset-styles(); 89 | 90 | li { 91 | .lib-css(border-top, @autocomplete-item__border); 92 | cursor: pointer; 93 | margin: 0; 94 | padding: @indent__xs @indent__xl @indent__xs @indent__s; 95 | position: relative; 96 | text-align: left; 97 | white-space: normal; 98 | 99 | &:not(:empty) { 100 | border-top: 0; 101 | .lib-css(border, @autocomplete__border); 102 | .lib-css(background, @autocomplete__background-color); 103 | } 104 | 105 | &:first-child { 106 | border-top: none; 107 | } 108 | 109 | &:hover, 110 | &.selected { 111 | .lib-css(background, @autocomplete-item__hover__color); 112 | } 113 | 114 | .amount { 115 | .lib-css(color, @autocomplete-item-amount__color); 116 | position: absolute; 117 | right: 7px; 118 | top: @indent__xs; 119 | } 120 | } 121 | } 122 | } 123 | 124 | .form.search.advanced { 125 | .fields.range { 126 | .field { 127 | &:first-child { 128 | position: relative; 129 | 130 | .control { 131 | padding-right: 25px; 132 | 133 | &:after { 134 | content: ' \2013 '; 135 | display: inline-block; 136 | position: absolute; 137 | right: 0; 138 | text-align: center; 139 | top: 6px; 140 | width: 25px; 141 | } 142 | } 143 | } 144 | 145 | &:last-child { 146 | position: relative; 147 | 148 | div.mage-error { 149 | left: 0; 150 | position: absolute; 151 | top: 32px; 152 | } 153 | } 154 | 155 | &.with-addon { 156 | .control { 157 | padding-right: 45px; 158 | } 159 | } 160 | } 161 | } 162 | 163 | .group.price { 164 | .addon { 165 | .addafter { 166 | background: none; 167 | border: 0; 168 | padding-top: 6px; 169 | position: absolute; 170 | right: 0; 171 | top: 0; 172 | } 173 | } 174 | } 175 | } 176 | 177 | .search.summary { 178 | margin-bottom: @indent__s; 179 | } 180 | } 181 | 182 | // 183 | // Mobile 184 | // _____________________________________________ 185 | 186 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) { 187 | .block-search { 188 | .block-content { 189 | margin-bottom: 0; 190 | } 191 | } 192 | } 193 | 194 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) { 195 | .block-search { 196 | margin-top: @indent__s; 197 | } 198 | } 199 | 200 | // 201 | // Desktop 202 | // _____________________________________________ 203 | 204 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 205 | .block-search { 206 | float: right; 207 | padding-left: 15px; 208 | position: relative; 209 | width: 250px; 210 | z-index: 4; 211 | 212 | .label { 213 | &:extend(.abs-visually-hidden-desktop all); 214 | } 215 | 216 | .control { 217 | border-top: 0; 218 | margin: 0; 219 | padding: 0 0 25px; 220 | } 221 | 222 | .nested { 223 | //display: block; 224 | //padding-top: 5px; 225 | //position: absolute; 226 | } 227 | 228 | input { 229 | .lib-input-placeholder(@form-element-input-placeholder__color); 230 | margin: 0; 231 | padding-right: 35px; 232 | position: static; 233 | } 234 | 235 | .action.search { 236 | display: inline-block; 237 | .lib-button-icon( 238 | @_icon-font-content: @icon-search, 239 | @_icon-font-text-hide: true, 240 | @_icon-font-color: @header-icons-color 241 | ); 242 | .lib-button-reset(); 243 | padding: @indent__xs 0; 244 | position: absolute; 245 | right: 10px; 246 | top: 0; 247 | z-index: 1; 248 | 249 | &:hover, 250 | &:focus { 251 | &:before { 252 | .lib-css(color, @header-icons-color-hover); 253 | } 254 | } 255 | } 256 | } 257 | 258 | .search-autocomplete { 259 | margin-top: 0; 260 | } 261 | } 262 | -------------------------------------------------------------------------------- /Magento_Checkout/templates/cart/item/configure/updatecart.phtml: -------------------------------------------------------------------------------- 1 | 9 | getProduct(); ?> 10 | 11 | isSaleable()) :?> 12 |
13 |
14 | shouldRenderQuantity()) :?> 15 |
16 |
17 |
18 | 26 |
27 |
28 |
29 | 30 |
31 | 37 | getChildHtml('', true) ?> 38 |
39 |
40 |
41 | 52 | 69 | 70 | -------------------------------------------------------------------------------- /Magento_Checkout/templates/cart/minicart.phtml: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | getIsNeedToDisplaySideBar()):?> 27 |
38 |
39 | 40 |
41 | getChildHtml('minicart.addons') ?> 42 |
43 | 44 | 87 | 88 | 95 | 96 | 97 | 105 | renderTag('script', [], $scriptString, false); ?> 106 | 107 | renderTag('script', [], 'window.checkout = ' . 108 | /* @noEscape */ $block->getSerializedConfig(), false); ?> 109 | 127 |
-------------------------------------------------------------------------------- /Magento_Checkout/web/css/source/module/checkout/_estimated-total.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | 12 | // 13 | // Checkout Estimated Total 14 | // --------------------------------------------- 15 | 16 | .opc-estimated-wrapper { 17 | &:extend(.abs-add-clearfix all); 18 | .lib-css(border-bottom, @border-width__base solid @color-gray80); 19 | margin: 0 0 15px; 20 | padding: 18px 15px; 21 | 22 | .estimated-block { 23 | .lib-css(font-size, @checkout-step-title-mobile__font-size); 24 | .lib-css(font-weight, @font-weight__bold); 25 | float: left; 26 | 27 | .estimated-label { 28 | display: block; 29 | margin: 0 0 @indent__xs; 30 | } 31 | } 32 | 33 | .minicart-wrapper { 34 | .action { 35 | &.showcart { 36 | .lib-button-reset(); 37 | 38 | &:before { 39 | .lib-css(color, @text__color); 40 | } 41 | 42 | //&:hover:before { 43 | // .lib-css(color, @header-icons-color-hover); 44 | //} 45 | } 46 | } 47 | } 48 | } 49 | } 50 | 51 | // 52 | // Desktop 53 | // _____________________________________________ 54 | 55 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 56 | .opc-estimated-wrapper { 57 | &:extend(.abs-no-display-desktop all); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Magento_Checkout/web/css/source/module/checkout/_shipping.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Variables 8 | // _____________________________________________ 9 | 10 | @checkout-shipping-address__max-width: 740px; 11 | @checkout-shipping-address__margin-top: 28px; 12 | 13 | @checkout-shipping-item-icon__background-color: @checkout-shipping-item__active__border-color; 14 | @checkout-shipping-item-icon__color: @color-white; 15 | @checkout-shipping-item-icon__content: @icon-checkmark; 16 | 17 | @checkout-shipping-item__border: 2px solid transparent; 18 | @checkout-shipping-item__line-height: 30px; 19 | @checkout-shipping-item__margin: 0 0 @indent__base; 20 | @checkout-shipping-item__padding: @indent__base (@indent__l + 5px) @indent__base @indent__base; 21 | @checkout-shipping-item__transition: .3s border-color; 22 | @checkout-shipping-item__width: 100%/3; 23 | @checkout-shipping-item-tablet__width: 100%/2; 24 | @checkout-shipping-item-mobile__width: 100%; 25 | //@checkout-shipping-item__active__border-color: @active__color; 26 | @checkout-shipping-item__active__border-color: @theme__color__secondary; 27 | 28 | @checkout-shipping-item-icon__selected__height: 27px; 29 | @checkout-shipping-item-icon__selected__width: 29px; 30 | 31 | @checkout-shipping-item-mobile__padding: 0 0 15px; 32 | @checkout-shipping-item-mobile__margin: @checkout-shipping-item-mobile__padding; 33 | @checkout-shipping-item-mobile__active__padding: 15px (@indent__l + 5px) 15px 18px; 34 | 35 | @checkout-shipping-item-before__border-color: @border-color__base; 36 | @checkout-shipping-item-before__height: calc(~'100% - 20px'); 37 | 38 | @checkout-shipping-method__border: @checkout-step-title__border; 39 | @checkout-shipping-method__padding: @indent__base; 40 | 41 | // 42 | // Common 43 | // _____________________________________________ 44 | 45 | & when (@media-common = true) { 46 | 47 | .opc-wrapper { 48 | 49 | // 50 | // Shipping Address 51 | // --------------------------------------------- 52 | 53 | .form-login, 54 | .form-shipping-address { 55 | .lib-css(margin-top, @checkout-shipping-address__margin-top); 56 | margin-bottom: @indent__base; 57 | 58 | .fieldset { 59 | .note { 60 | font-size: @font-size__base; 61 | margin-top: @indent__s; 62 | } 63 | } 64 | } 65 | 66 | .shipping-address-items { 67 | font-size: 0; 68 | } 69 | 70 | .shipping-address-item { 71 | &:extend(.abs-add-box-sizing all); 72 | .lib-css(border, @checkout-shipping-item__border); 73 | .lib-css(line-height, @checkout-shipping-item__line-height); 74 | .lib-css(margin, @checkout-shipping-item__margin); 75 | .lib-css(padding, @checkout-shipping-item__padding); 76 | .lib-css(transition, @checkout-shipping-item__transition); 77 | .lib-css(width, @checkout-shipping-item-tablet__width); 78 | display: inline-block; 79 | font-size: @font-size__base; 80 | position: relative; 81 | vertical-align: top; 82 | word-wrap: break-word; 83 | 84 | &.selected-item { 85 | .lib-css(border-color, @checkout-shipping-item__active__border-color); 86 | 87 | &:after { 88 | .lib-css(background, @checkout-shipping-item-icon__background-color); 89 | .lib-css(color, @checkout-shipping-item-icon__color); 90 | .lib-css(content, @checkout-shipping-item-icon__content); 91 | .lib-css(font-family, @icons__font-name); 92 | .lib-css(height, @checkout-shipping-item-icon__selected__height); 93 | .lib-css(width, @checkout-shipping-item-icon__selected__width); 94 | font-size: 27px; 95 | line-height: 21px; 96 | padding-top: 2px; 97 | position: absolute; 98 | right: 0; 99 | text-align: center; 100 | top: 0; 101 | } 102 | } 103 | } 104 | 105 | .field { 106 | &.addresses { 107 | &:extend(.abs-add-clearfix all); 108 | } 109 | } 110 | 111 | .action-show-popup { 112 | margin: 0 0 @indent__base; 113 | border: 1px solid @button__hover__background; 114 | &:hover, 115 | &:focus { 116 | color: @button__hover__color 117 | } 118 | 119 | > span { 120 | &:before { 121 | content: '+'; 122 | padding-right: @indent__xs; 123 | } 124 | } 125 | } 126 | 127 | .action-select-shipping-item { 128 | float: right; 129 | margin: @indent__base 0 0; 130 | } 131 | 132 | .edit-address-link { 133 | &:extend(.abs-action-button-as-link all); 134 | display: block; 135 | float: left; 136 | margin: 26px 5px 0 0; 137 | } 138 | } 139 | 140 | // 141 | // Shipping Methods 142 | // --------------------------------------------- 143 | 144 | .checkout-shipping-method { 145 | .step-title { 146 | margin-bottom: 0; 147 | } 148 | 149 | .no-quotes-block { 150 | margin: @indent__base 0; 151 | } 152 | } 153 | 154 | .methods-shipping { 155 | .actions-toolbar { 156 | .action { 157 | &.primary { 158 | &:extend(.abs-button-l all); 159 | margin: @indent__base 0 0; 160 | } 161 | } 162 | } 163 | } 164 | 165 | .table-checkout-shipping-method { 166 | thead { 167 | th { 168 | display: none; 169 | } 170 | } 171 | 172 | tbody { 173 | td { 174 | .lib-css(border-top, @checkout-shipping-method__border); 175 | .lib-css(padding-bottom, @checkout-shipping-method__padding); 176 | .lib-css(padding-top, @checkout-shipping-method__padding); 177 | 178 | &:first-child { 179 | padding-left: 0; 180 | padding-right: 0; 181 | width: 20px; 182 | } 183 | } 184 | 185 | tr { 186 | &:first-child { 187 | td { 188 | border-top: none; 189 | } 190 | } 191 | } 192 | 193 | .row-error { 194 | td { 195 | border-top: none; 196 | padding-bottom: @indent__s; 197 | padding-top: 0; 198 | } 199 | } 200 | } 201 | } 202 | } 203 | 204 | // 205 | // Mobile 206 | // _____________________________________________ 207 | 208 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) { 209 | .opc-wrapper { 210 | .form-login { 211 | .lib-css(border-bottom, 2px solid @checkout-shipping-item-before__border-color); 212 | .lib-css(margin, @checkout-shipping-item-mobile__padding); 213 | .lib-css(padding, @checkout-shipping-item-mobile__padding); 214 | } 215 | 216 | #checkout & { 217 | .shipping-address-item { 218 | .lib-css(border, 2px solid @checkout-shipping-item-before__border-color); 219 | .lib-css(margin, @checkout-shipping-item-mobile__margin); 220 | .lib-css(padding, @checkout-shipping-item-mobile__padding); 221 | width: 100%; 222 | 223 | &.selected-item { 224 | .lib-css(border-color, @checkout-shipping-item__active__border-color); 225 | .lib-css(padding, @checkout-shipping-item-mobile__active__padding); 226 | 227 | .edit-address-link { 228 | .lib-css(right, @checkout-shipping-item-icon__selected__width + @indent__s); 229 | } 230 | } 231 | } 232 | } 233 | 234 | 235 | .form-login, 236 | .form-shipping-address { 237 | .lib-css(margin-top, @checkout-shipping-address__margin-top); 238 | } 239 | 240 | .action-select-shipping-item { 241 | float: none; 242 | margin-top: @indent__s; 243 | width: 100%; 244 | } 245 | 246 | .action-show-popup { 247 | width: 100%; 248 | } 249 | 250 | .edit-address-link { 251 | .lib-icon-font( 252 | @icon-settings, 253 | @_icon-font-size: 28px, 254 | @_icon-font-line-height: 28px, 255 | @_icon-font-text-hide: true, 256 | @_icon-font-color: @color-gray19, 257 | @_icon-font-color-hover: @color-gray19, 258 | @_icon-font-color-active: @color-gray19 259 | ); 260 | margin: 0; 261 | position: absolute; 262 | right: 0; 263 | top: 1px; 264 | } 265 | } 266 | } 267 | 268 | // 269 | // Desktop 270 | // _____________________________________________ 271 | 272 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 273 | .checkout-shipping-method { 274 | .actions-toolbar { 275 | > .primary { 276 | float: right; 277 | } 278 | 279 | .action { 280 | &.primary { 281 | margin: 0; 282 | } 283 | } 284 | } 285 | } 286 | 287 | .opc-wrapper { 288 | .form-login, 289 | .form-shipping-address { 290 | .lib-css(max-width, @checkout-shipping-address__max-width); 291 | } 292 | } 293 | 294 | .table-checkout-shipping-method { 295 | width: auto; 296 | } 297 | } 298 | 299 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__l) { 300 | .opc-wrapper { 301 | .shipping-address-item { 302 | .lib-css(width, @checkout-shipping-item__width); 303 | 304 | &:before { 305 | .lib-css(background, @checkout-shipping-item-before__border-color); 306 | .lib-css(height, @checkout-shipping-item-before__height); 307 | content: ''; 308 | left: 0; 309 | position: absolute; 310 | top: 0; 311 | width: 1px; 312 | } 313 | 314 | &:nth-child(3n + 1) { 315 | &:before { 316 | display: none; 317 | } 318 | } 319 | 320 | &.selected-item { 321 | &:before { 322 | display: none; 323 | } 324 | 325 | + .shipping-address-item { 326 | &:before { 327 | display: none; 328 | } 329 | } 330 | } 331 | } 332 | } 333 | 334 | .table-checkout-shipping-method { 335 | min-width: 500px; 336 | } 337 | } 338 | -------------------------------------------------------------------------------- /Magento_Checkout/web/css/source/module/checkout/_tooltip.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Variables 8 | // _____________________________________________ 9 | 10 | @checkout-tooltip__hover__z-index: @tooltip__z-index; 11 | 12 | @checkout-tooltip-icon-arrow__font-size: 10px; 13 | @checkout-tooltip-icon-arrow__left: -( @checkout-tooltip-content__padding + @checkout-tooltip-icon-arrow__font-size - @checkout-tooltip-content__border-width); 14 | 15 | @checkout-tooltip-icon__color: @icon-font__color; 16 | @checkout-tooltip-icon__content: @icon-help; 17 | @checkout-tooltip-icon__font-size: 24px; 18 | @checkout-tooltip-icon__hover__color: @icon-font__color-hover; 19 | 20 | //@checkout-tooltip-content__background-color: @color-gray-light01; 21 | @checkout-tooltip-content__background-color: @sidebar__background-color; 22 | @checkout-tooltip-content__border-color: @border-color__base; 23 | @checkout-tooltip-content__border-width: 1px; 24 | @checkout-tooltip-content__font-size: @font-size__base; 25 | @checkout-tooltip-content__padding: 12px; 26 | @checkout-tooltip-content__width: 270px; 27 | @checkout-tooltip-content__active__border-color: darken(@checkout-tooltip-content__border-color, 20%); 28 | 29 | @checkout-tooltip-content-mobile-popup__width: 200px; 30 | @checkout-tooltip-content-mobile__right: -(@indent__s); 31 | @checkout-tooltip-content-mobile__top: 30px + @checkout-tooltip-icon-arrow__font-size; 32 | 33 | // 34 | // Common 35 | // _____________________________________________ 36 | 37 | & when (@media-common = true) { 38 | 39 | .field-tooltip { 40 | cursor: pointer; 41 | position: absolute; 42 | right: 0; 43 | top: 1px; 44 | 45 | &._active { 46 | .lib-css(z-index, @checkout-tooltip__hover__z-index); 47 | 48 | .field-tooltip-content { 49 | display: block; 50 | } 51 | 52 | .field-tooltip-action { 53 | &:before { 54 | .lib-css(color, @checkout-tooltip-icon__hover__color); 55 | } 56 | } 57 | } 58 | 59 | .label { 60 | .lib-visually-hidden(); 61 | } 62 | 63 | .field-tooltip-action { 64 | .lib-icon-font( 65 | @checkout-tooltip-icon__content, 66 | @_icon-font-size: @checkout-tooltip-icon__font-size, 67 | @_icon-font-text-hide: true, 68 | @_icon-font-color: @checkout-tooltip-icon__color, 69 | @_icon-font-color-hover: @checkout-tooltip-icon__hover__color, 70 | @_icon-font-color-active: false 71 | ); 72 | 73 | &:before { 74 | padding-left : 1px; 75 | line-height: 24px; 76 | } 77 | 78 | &:focus { 79 | ._keyfocus & { 80 | .lib-css(z-index, @checkout-tooltip__hover__z-index); 81 | 82 | + .field-tooltip-content { 83 | display: block; 84 | } 85 | 86 | &:before { 87 | .lib-css(color, @checkout-tooltip-icon__hover__color); 88 | } 89 | } 90 | } 91 | } 92 | 93 | .field-tooltip-content { 94 | .lib-css(background, @checkout-tooltip-content__background-color); 95 | .lib-css(border, @checkout-tooltip-content__border-width solid @checkout-tooltip-content__border-color); 96 | .lib-css(border-radius, @checkout-tooltip-content__border-width); 97 | .lib-css(font-size, @checkout-tooltip-content__font-size); 98 | .lib-css(padding, @checkout-tooltip-content__padding); 99 | .lib-css(width, @checkout-tooltip-content__width); 100 | .lib-css(color, @text__color); 101 | color: @text__color; 102 | display: none; 103 | left: 38px; 104 | position: absolute; 105 | text-transform: none; 106 | top: -9px; 107 | word-wrap: break-word; 108 | z-index: 2; 109 | 110 | &:before, 111 | &:after { 112 | .lib-arrow( 113 | @_position: left, 114 | @_size: @checkout-tooltip-icon-arrow__font-size, 115 | @_color: @checkout-tooltip-content__background-color 116 | ); 117 | .lib-css(left, @checkout-tooltip-icon-arrow__left); 118 | .lib-css(top, @checkout-tooltip-content__padding); 119 | content: ''; 120 | display: block; 121 | position: absolute; 122 | z-index: 3; 123 | } 124 | 125 | &:before { 126 | .lib-css(border-right-color, @checkout-tooltip-content__active__border-color); 127 | } 128 | 129 | &:after { 130 | .lib-css(border-right-color, @checkout-tooltip-content__background-color); 131 | width: 1px; 132 | z-index: 4; 133 | } 134 | } 135 | } 136 | } 137 | 138 | // 139 | // Mobile 140 | // _____________________________________________ 141 | 142 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__xs) { 143 | .modal-popup { 144 | .field-tooltip { 145 | .field-tooltip-content { 146 | .lib-css(width, @checkout-tooltip-content-mobile-popup__width); 147 | } 148 | } 149 | } 150 | } 151 | 152 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break >= @screen__m) { 153 | .field-tooltip { 154 | .field-tooltip-content { 155 | .lib-css(right, @checkout-tooltip-content-mobile__right); 156 | .lib-css(top, @checkout-tooltip-content-mobile__top); 157 | left: auto; 158 | &:extend(.abs-checkout-tooltip-content-position-top-mobile all); 159 | } 160 | } 161 | } 162 | 163 | // 164 | // Tablet 165 | // _____________________________________________ 166 | 167 | @media only screen and (max-width: @screen__m) { 168 | .field-tooltip .field-tooltip-content { 169 | left: auto; 170 | right: -10px; 171 | top: 40px; 172 | } 173 | .field-tooltip .field-tooltip-content::before, 174 | .field-tooltip .field-tooltip-content::after { 175 | border: 10px solid transparent; 176 | height: 0; 177 | left: auto; 178 | margin-top: -21px; 179 | right: 10px; 180 | top: 0; 181 | width: 0; 182 | } 183 | .field-tooltip .field-tooltip-content::before { 184 | .lib-css(border-bottom-color, @checkout-tooltip-content__border-color); 185 | } 186 | .field-tooltip .field-tooltip-content::after { 187 | .lib-css(border-bottom-color, @checkout-tooltip-content__background-color); 188 | top: 1px; 189 | } 190 | } 191 | 192 | -------------------------------------------------------------------------------- /Magento_Checkout/web/js/productQtyInCart.js: -------------------------------------------------------------------------------- 1 | define([ 2 | 'uiComponent', 3 | 'Magento_Customer/js/customer-data', 4 | 'jquery', 5 | 'ko', 6 | 'underscore' 7 | ], function (Component, customerData, $, ko, _) { 8 | 'use strict'; 9 | 10 | return Component.extend({ 11 | 12 | /** 13 | * @override 14 | */ 15 | initialize: function () { 16 | var self = this, 17 | cartData = customerData.get('cart'); 18 | 19 | this.summaryCount = (cartData().summary_count) ? cartData().summary_count : 0; 20 | 21 | this.observe(['summaryCount']); 22 | 23 | cartData.subscribe(function (cartInfo) { 24 | self.summaryCount(cartInfo['summary_count']); 25 | }, this) 26 | 27 | if ( 28 | cartData().website_id !== window.checkout.websiteId && 29 | cartData().website_id !== undefined 30 | ) { 31 | customerData.reload(['cart'], false); 32 | } 33 | 34 | return this._super(); 35 | }, 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /Magento_ConfigurableProduct/layout/catalog_product_view_type_configurable.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Magento_Customer/layout/customer_account.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 1 14 | 15 | 16 | 17 | 18 | customer/account/logout 19 | Log Out 20 | 1 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Magento_Customer/web/js/view/authentication-popup.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright © Magento, Inc. All rights reserved. 3 | * See COPYING.txt for license details. 4 | */ 5 | 6 | define([ 7 | 'jquery', 8 | 'ko', 9 | 'Magento_Ui/js/form/form', 10 | 'Magento_Customer/js/action/login', 11 | 'Magento_Customer/js/customer-data', 12 | 'Magento_Customer/js/model/authentication-popup', 13 | 'mage/translate', 14 | 'mage/url', 15 | 'Magento_Ui/js/modal/alert' 16 | ], function ($, ko, Component, loginAction, customerData, authenticationPopup, $t, url, alert) { 17 | 'use strict'; 18 | 19 | return Component.extend({ 20 | registerUrl: window.authenticationPopup.customerRegisterUrl, 21 | forgotPasswordUrl: window.authenticationPopup.customerForgotPasswordUrl, 22 | autocomplete: window.authenticationPopup.autocomplete, 23 | modalWindow: null, 24 | isLoading: ko.observable(false), 25 | 26 | defaults: { 27 | template: 'Magento_Customer/authentication-popup' 28 | }, 29 | 30 | /** 31 | * Init 32 | */ 33 | initialize: function () { 34 | var self = this; 35 | 36 | this._super(); 37 | url.setBaseUrl(window.authenticationPopup.baseUrl); 38 | loginAction.registerLoginCallback(function () { 39 | self.isLoading(false); 40 | }); 41 | }, 42 | 43 | /** Init popup login window */ 44 | setModalElement: function (element) { 45 | if (authenticationPopup.modalWindow == null) { 46 | authenticationPopup.createPopUp(element); 47 | } 48 | }, 49 | 50 | /** Is login form enabled for current customer */ 51 | isActive: function () { 52 | var customer = customerData.get('customer'); 53 | 54 | return customer() == false; //eslint-disable-line eqeqeq 55 | }, 56 | 57 | /** Show login popup window */ 58 | showModal: function () { 59 | if (this.modalWindow) { 60 | $(this.modalWindow).modal('openModal'); 61 | } else { 62 | alert({ 63 | content: $t('Guest checkout is disabled.') 64 | }); 65 | } 66 | }, 67 | 68 | /** 69 | * Provide login action 70 | * 71 | * @return {Boolean} 72 | */ 73 | login: function (formUiElement, event) { 74 | var loginData = {}, 75 | formElement = $(event.currentTarget), 76 | formDataArray = formElement.serializeArray(); 77 | 78 | event.stopPropagation(); 79 | formDataArray.forEach(function (entry) { 80 | loginData[entry.name] = entry.value; 81 | }); 82 | 83 | var self = this; 84 | 85 | require(['mage/validation'], function () { 86 | if (formElement.validation() && 87 | formElement.validation('isValid') 88 | ) { 89 | self.isLoading(true); 90 | loginAction(loginData); 91 | } 92 | }); 93 | 94 | return false; 95 | } 96 | }); 97 | }); 98 | -------------------------------------------------------------------------------- /Magento_GroupedProduct/layout/catalog_product_view_type_grouped.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Magento_GroupedProduct/templates/product/view/type/grouped.phtml: -------------------------------------------------------------------------------- 1 | 14 | setPreconfiguredValue(); ?> 15 | getProduct(); ?> 16 | getAssociatedProducts(); ?> 17 | 0; ?> 18 | 19 |
20 | 23 | 24 | 25 | 26 | 27 | isSaleable()) : ?> 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 45 | isSaleable()) : ?> 46 | 67 | 68 | 69 | getCanShowProductPrice($_product) 70 | && $block->getCanShowProductPrice($_item) 71 | && trim($block->getProductPriceHtml( 72 | $_item, 73 | \Magento\Catalog\Pricing\Price\TierPrice::PRICE_CODE 74 | ))) : ?> 75 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 93 | 94 | 95 | 96 |
escapeHtml(__('Grouped product items')) ?>
escapeHtml(__('Product Name')) ?>escapeHtml(__('Qty')) ?>
38 | escapeHtml($_item->getName()) ?> 39 | getCanShowProductPrice($_product)) : ?> 40 | getCanShowProductPrice($_item)) : ?> 41 | getProductPrice($_item) ?> 42 | 43 | 44 | 47 | isSaleable()) : ?> 48 |
49 |
-
50 | 59 |
+
60 |
61 | 62 |
63 | escapeHtml(__('Out of stock')) ?> 64 |
65 | 66 |
77 | getProductPriceHtml( 78 | $_item, 79 | \Magento\Catalog\Pricing\Price\TierPrice::PRICE_CODE 80 | ) ?> 81 |
91 | escapeHtml(__('No options of this product are available.')) ?> 92 |
97 |
98 |
99 | 100 | 121 | -------------------------------------------------------------------------------- /Magento_LayeredNavigation/templates/layer/state.phtml: -------------------------------------------------------------------------------- 1 | 9 | 16 | getActiveFilters() ?> 17 | 18 |
19 | escapeHtml(__('Now Shopping by')) ?> 24 |
    25 | 26 |
  1. 27 | escapeHtml(__($_filter->getName())) ?> 28 | escapeHtml($block->stripTags($_filter->getLabel())) ?> 29 | getClearLinkUrl(); 31 | $currentFilterName = $block->escapeHtmlAttr(__($_filter->getName()) . " " . $block->stripTags($_filter->getLabel())); 32 | if ($clearLinkUrl): 33 | ?> 34 | 38 | 41 | escapeHtml($_filter->getFilter()->getClearLinkText()) ?> 42 | 43 | 44 | "> 46 | escapeHtml(__('Remove This Item')) ?> 47 | 48 | 49 |
  2. 50 | 51 |
52 |
53 | 54 | -------------------------------------------------------------------------------- /Magento_LayeredNavigation/templates/layer/view.phtml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | canShowBlock()) : ?> 16 |
30 | getLayer()->getState()->getFilters()) ?> 31 |
32 | escapeHtml(__('Shop By')); ?> 33 |
34 |
35 | getChildHtml('state') ?> 36 | 37 | getLayer()->getState()->getFilters()) : ?> 38 | 43 | 44 | 45 | getFilters() as $filter) : ?> 46 | getItemsCount()) : ?> 47 | 48 | escapeHtml(__('Shopping Options')) ?> 49 |
59 | 61 |
62 |
escapeHtml(__($filter->getName())) ?>
63 |
getChildBlock('renderer')->render($filter) ?>
64 |
65 | 66 | 67 | 68 |
69 | 70 | 77 | 78 |
79 |
80 | 81 | -------------------------------------------------------------------------------- /Magento_Newsletter/layout/default.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Magento_Newsletter/templates/subscription.phtml: -------------------------------------------------------------------------------- 1 | 3 |

4 | 5 | */ ?> 6 |
7 |
8 |
9 | 53 |
54 |
55 |
56 | -------------------------------------------------------------------------------- /Magento_ProductVideo/templates/product/view/gallery.phtml: -------------------------------------------------------------------------------- 1 | 8 | 9 | getMediaGalleryDataJson(), true) as $data) { 13 | if ($data['videoUrl']) { 14 | $initProductVideo = true; 15 | break; 16 | } 17 | } 18 | ?> 19 | 20 | 21 | 32 | 33 | -------------------------------------------------------------------------------- /Magento_ReCaptchaFrontendUi/templates/recaptcha.phtml: -------------------------------------------------------------------------------- 1 | 7 | 8 | getRequest()->getFullActionName()) ? '-lazy' : ''; ?> 9 |
='{"Magento_Ui/js/core/app": getJsLayout()?>}'> 14 | 15 |
16 | 17 | 18 | 19 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Magento_Review/templates/form.phtml: -------------------------------------------------------------------------------- 1 | 10 |
11 |
escapeHtml(__('Write Your Own Review')) ?>
12 |
13 | getAllowWriteReviewFlag()):?> 14 |
15 | getBlockHtml('formkey') ?> 16 | getChildHtml('form_fields_before') ?> 17 |
18 | escapeHtml(__("You're reviewing:")) ?>escapeHtml($block->getProductInfo()->getName()) ?>
19 | getRatings() && $block->getRatings()->getSize()): ?> 20 | 21 |
22 | escapeHtml(__('Your Rating')) ?>
23 |
24 |
25 | getRatings() as $_rating): ?> 26 |
27 | 28 |
29 | getOptions();?> 30 | 31 | 39 | 46 | 47 | 48 |
49 |
50 | 51 |
52 | 53 |
54 |
55 | 56 |
57 | 58 |
59 | 60 |
61 |
62 |
63 | 64 |
65 | 66 |
67 |
68 |
69 | 70 |
71 | 72 |
73 |
74 |
75 |
76 |
77 | 78 |
79 |
80 |
81 | 93 | 94 | 95 | 128 | 129 | 130 | 131 |
132 |
133 | escapeHtml(__('Only registered users can write reviews. Please Sign in or create an account', $block->getLoginLink(), $block->getRegisterUrl()), ['a']) ?> 134 |
135 |
136 | 137 |
138 |
139 | -------------------------------------------------------------------------------- /Magento_Review/web/css/source/_module.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Variables 8 | // _____________________________________________ 9 | 10 | @review-ratings-left: 280px; 11 | @reviews-indent-desktop: 30px; 12 | 13 | // 14 | // Common 15 | // _____________________________________________ 16 | 17 | & when (@media-common = true) { 18 | .data.switch .counter { 19 | .lib-css(color, @text__color__muted); 20 | 21 | &:before { 22 | content: '('; 23 | } 24 | 25 | &:after { 26 | content: ')'; 27 | } 28 | } 29 | 30 | .rating-summary { 31 | .lib-rating-summary(); 32 | 33 | .rating-result { 34 | //margin-left: -5px; 35 | } 36 | } 37 | 38 | .product-reviews-summary, 39 | .table-reviews { 40 | .rating-summary { 41 | .lib-rating-summary-label-hide(); 42 | } 43 | } 44 | 45 | .review-control-vote { 46 | .lib-rating-vote(); 47 | } 48 | 49 | // 50 | // Add review block 51 | // --------------------------------------------- 52 | 53 | .block { 54 | &.add.review { 55 | margin-bottom: @indent__xl; 56 | 57 | > .title { 58 | .lib-heading(h2); 59 | } 60 | 61 | .legend { 62 | .lib-heading(h3); 63 | margin: 0 0 @indent__base; 64 | } 65 | 66 | .field.rating { 67 | display: table-row; 68 | 69 | .label { 70 | display: table-cell; 71 | padding: @indent__xs 0; 72 | vertical-align: middle; 73 | } 74 | 75 | .control { 76 | display: table-cell; 77 | vertical-align: top; 78 | } 79 | } 80 | } 81 | 82 | &.reviews.list { 83 | > .title { 84 | .lib-heading(h2); 85 | } 86 | 87 | .review { 88 | &.item { 89 | margin-bottom: @indent__xl; 90 | } 91 | 92 | &.title { 93 | .lib-heading(h3); 94 | } 95 | } 96 | } 97 | } 98 | 99 | .data.table.reviews { 100 | .rating-summary { 101 | margin-top: -4px; 102 | } 103 | } 104 | 105 | .customer-review.view { 106 | margin-bottom: @indent__base; 107 | 108 | .review.title, 109 | .ratings-summary, 110 | .product-details { 111 | margin-bottom: @indent__base; 112 | } 113 | } 114 | 115 | .product-reviews-summary { 116 | 117 | .products.wrapper.list & { 118 | margin: 0 auto; 119 | } 120 | 121 | &.empty { 122 | margin-left: 0; 123 | } 124 | 125 | .rating-summary { 126 | display: inline-block; 127 | left: -@indent__xs; 128 | position: relative; 129 | text-align: left; 130 | vertical-align: middle; 131 | } 132 | 133 | .reviews-actions { 134 | display: inline-block; 135 | line-height: @rating-icon__font-size; 136 | vertical-align: middle; 137 | 138 | a { 139 | margin-right: @indent__xs; 140 | } 141 | } 142 | } 143 | } 144 | 145 | // 146 | // Desktop 147 | // _____________________________________________ 148 | 149 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 150 | .product-reviews-summary { 151 | .products.wrapper.list & { 152 | margin: 0; 153 | } 154 | } 155 | } 156 | 157 | // 158 | // Common 159 | // _____________________________________________ 160 | 161 | & when (@media-common = true) { 162 | 163 | .customer-review { 164 | .product-details { 165 | &:extend(.abs-add-clearfix all); 166 | margin-bottom: @indent__xl; 167 | } 168 | 169 | .product-media { 170 | float: left; 171 | margin-right: 3%; 172 | max-width: 285px; 173 | width: 30%; 174 | } 175 | 176 | .review-details { 177 | .customer-review-rating { 178 | margin-bottom: @indent__base; 179 | 180 | .item { 181 | margin-bottom: @indent__s; 182 | 183 | &:last-child { 184 | margin-bottom: 0; 185 | } 186 | } 187 | } 188 | 189 | .review-title { 190 | .lib-heading(h3); 191 | font-weight: @font-weight__semibold; 192 | margin-bottom: @indent__base; 193 | } 194 | 195 | .review-content { 196 | margin-bottom: @indent__base; 197 | } 198 | } 199 | 200 | .product-reviews-summary { 201 | .rating-summary, 202 | .reviews-actions { 203 | display: block; 204 | } 205 | } 206 | } 207 | 208 | .review-field-ratings { 209 | .nested { 210 | display: table; 211 | } 212 | 213 | .review-field-rating { 214 | display: table-row; 215 | 216 | .label, 217 | .control { 218 | display: table-cell; 219 | padding-bottom: @indent__s; 220 | vertical-align: top; 221 | } 222 | 223 | .label { 224 | padding-right: @indent__s; 225 | padding-top: 6px; 226 | } 227 | 228 | .control { 229 | padding-top: 2px; 230 | } 231 | } 232 | } 233 | 234 | // 235 | // Review product page 236 | // --------------------------------------------- 237 | 238 | .review { 239 | &-toolbar { 240 | border-top: 1px solid @color-gray79; 241 | margin: 0 0 @indent__base; 242 | text-align: center; 243 | 244 | &:first-child { 245 | display: none; 246 | } 247 | 248 | .pages { 249 | border-bottom: 1px solid @color-gray79; 250 | display: block; 251 | padding: @indent__base 0; 252 | text-align: center; 253 | } 254 | 255 | .limiter { 256 | display: none; 257 | } 258 | } 259 | 260 | &-add { 261 | .block-title { 262 | display: none; 263 | } 264 | } 265 | 266 | &-form { 267 | .action.submit.primary { 268 | .lib-button-revert-secondary-color(); 269 | } 270 | } 271 | 272 | .fieldset &-legend.legend { 273 | &:extend(.abs-reset-left-margin all); 274 | margin-bottom: @indent__base; 275 | 276 | strong { 277 | display: block; 278 | margin-left: 0; 279 | } 280 | } 281 | 282 | &-field-rating { 283 | .control { 284 | margin-bottom: 1.2 * @indent__xl; 285 | margin-top: @indent__s; 286 | } 287 | } 288 | 289 | &-list { 290 | margin-bottom: @indent__l; 291 | 292 | .block-title strong { 293 | .lib-heading(h2); 294 | } 295 | } 296 | 297 | &-item { 298 | .lib-clearer(); 299 | border-bottom: 1px solid @color-gray79; 300 | margin: 0; 301 | padding: @indent__base 0; 302 | 303 | &:last-child { 304 | border-width: 0; 305 | } 306 | } 307 | 308 | &-ratings { 309 | display: table; 310 | margin-bottom: @indent__s; 311 | max-width: 100%; 312 | &:extend(.abs-rating-summary all); 313 | } 314 | 315 | &-author { 316 | display: inline; 317 | } 318 | 319 | &-title { 320 | .lib-heading(h3); 321 | margin: 0 0 @indent__base; 322 | } 323 | 324 | &-content { 325 | margin-bottom: @indent__base; 326 | } 327 | } 328 | } 329 | 330 | // 331 | // Desktop 332 | // _____________________________________________ 333 | 334 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) { 335 | .review { 336 | &-form { 337 | max-width: 500px; 338 | } 339 | 340 | &-ratings { 341 | float: left; 342 | margin-bottom: 0; 343 | max-width: @review-ratings-left - @indent__xl; 344 | } 345 | 346 | &-ratings ~ &-content, 347 | &-ratings ~ &-details { 348 | margin-left: @review-ratings-left; 349 | } 350 | 351 | &-toolbar { 352 | margin: 0 0 @reviews-indent-desktop; 353 | 354 | .pages { 355 | padding: @reviews-indent-desktop 0; 356 | } 357 | } 358 | 359 | .fieldset &-legend.legend { 360 | margin-bottom: @reviews-indent-desktop; 361 | } 362 | 363 | &-item { 364 | padding: @reviews-indent-desktop 0; 365 | } 366 | 367 | &-title { 368 | margin: 0 0 @reviews-indent-desktop; 369 | } 370 | } 371 | } 372 | 373 | -------------------------------------------------------------------------------- /Magento_Sales/web/css/source/_module.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magento, Inc. All rights reserved. 3 | // * See COPYING.txt for license details. 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | .order-links { 12 | border-bottom: @border-width__base solid @border-color__base; 13 | margin-bottom: 10px; 14 | 15 | .item { 16 | display: inline-block; 17 | margin-right: 20px; 18 | } 19 | } 20 | 21 | .order-actions-toolbar { 22 | .action { 23 | margin: 0 20px 0 0; 24 | } 25 | } 26 | 27 | .order-details-items { 28 | border-bottom: @border-width__base solid @border-color__base; 29 | margin-bottom: 20px; 30 | padding-bottom: 10px; 31 | 32 | .order-title { 33 | > strong { 34 | .lib-heading(h3); 35 | display: inline-block; 36 | } 37 | } 38 | 39 | .items-qty { 40 | &:extend(.abs-reset-list all); 41 | 42 | .item { 43 | white-space: nowrap; 44 | } 45 | 46 | .title { 47 | &:after { 48 | content: ': '; 49 | } 50 | } 51 | } 52 | 53 | .table-order-items { 54 | .product-item-name { 55 | margin-top: 0; 56 | } 57 | 58 | tbody + tbody { 59 | border-top: @border-width__base solid @border-color__base; 60 | } 61 | } 62 | 63 | .item-options { 64 | dt { 65 | margin: 0; 66 | } 67 | 68 | dd { 69 | margin: 0 0 15px; 70 | } 71 | 72 | &.links { 73 | dt { 74 | display: inline-block; 75 | 76 | &:after { 77 | content: ': '; 78 | } 79 | } 80 | 81 | dd { 82 | margin: 0; 83 | } 84 | } 85 | } 86 | } 87 | 88 | .order-pager-wrapper { 89 | .toolbar-amount { 90 | padding-top: 3px; 91 | } 92 | 93 | .pages-items { 94 | .item { 95 | &:first-child, 96 | &:last-child { 97 | margin-right: 0; 98 | } 99 | } 100 | } 101 | } 102 | 103 | .order-actions-toolbar { 104 | margin-bottom: 25px; 105 | 106 | .action { 107 | margin-right: 30px; 108 | 109 | &.print { 110 | margin: 0; 111 | } 112 | } 113 | } 114 | 115 | .order-status { 116 | &:extend(.abs-status all); 117 | } 118 | 119 | .page-title-wrapper { 120 | .order-date { 121 | margin: 0 0 @indent__base; 122 | } 123 | } 124 | 125 | .account, 126 | [class^='sales-guest-'], 127 | .sales-guest-view { 128 | .page-title-wrapper { 129 | .page-title { 130 | margin-right: @indent__m; 131 | } 132 | } 133 | } 134 | 135 | .form-orders-search { 136 | .field { 137 | &.email, 138 | &.zip { 139 | margin-bottom: 0; 140 | } 141 | } 142 | } 143 | 144 | .block-reorder { 145 | .block-title { 146 | &:extend(.abs-block-title all); 147 | } 148 | 149 | .product-item { 150 | .checkbox { 151 | position: relative; 152 | top: 2px; 153 | vertical-align: baseline; 154 | } 155 | 156 | .label { 157 | &:extend(.abs-visually-hidden all); 158 | } 159 | 160 | .field.item { 161 | display: inline-block; 162 | } 163 | } 164 | 165 | .product-item-name { 166 | display: inline-block; 167 | } 168 | 169 | .actions-toolbar { 170 | margin: 17px 0; 171 | max-width: 100%; 172 | } 173 | 174 | .sidebar-main & .subtitle, 175 | .sidebar-additional & .subtitle { 176 | &:extend(.abs-no-display all); 177 | } 178 | } 179 | 180 | .block-order-details { 181 | &-comments { 182 | margin: 0 0 40px; 183 | 184 | .comment-date { 185 | font-weight: @font-weight__semibold; 186 | } 187 | 188 | .comment-content { 189 | line-height: 1.6; 190 | margin: 0 0 20px; 191 | } 192 | } 193 | 194 | &-view { 195 | .box-content { 196 | .payment-method { 197 | .title { 198 | font-weight: @font-weight__regular; 199 | } 200 | 201 | .content { 202 | margin: 0; 203 | 204 | > strong { 205 | font-weight: @font-weight__regular; 206 | 207 | &:after { 208 | content: ': '; 209 | } 210 | } 211 | } 212 | } 213 | } 214 | } 215 | } 216 | 217 | .order-tracking { 218 | border-bottom: @border-width__base solid @border-color__base; 219 | margin: 0; 220 | padding: 20px 0; 221 | 222 | .tracking-title { 223 | display: inline-block; 224 | } 225 | 226 | .tracking-content { 227 | display: inline-block; 228 | margin: 0 0 0 5px; 229 | } 230 | } 231 | 232 | // 233 | // Guest order view page 234 | // --------------------------------------------- 235 | 236 | [class^='sales-guest-'], 237 | .sales-guest-view { 238 | .column.main { 239 | .block:not(.widget) { 240 | &:extend(.abs-account-blocks all); 241 | } 242 | } 243 | } 244 | } 245 | 246 | // 247 | // Mobile 248 | // _____________________________________________ 249 | 250 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) { 251 | .account { 252 | .order-details-items { 253 | .table-order-items { 254 | .product-item-name, 255 | .price-including-tax, 256 | .price-excluding-tax, 257 | .items-qty { 258 | display: inline-block; 259 | vertical-align: top; 260 | } 261 | } 262 | } 263 | 264 | .toolbar { 265 | &:extend(.abs-add-clearfix-mobile all); 266 | 267 | .pages { 268 | float: right; 269 | } 270 | 271 | .limiter { 272 | clear: both; 273 | } 274 | } 275 | } 276 | 277 | .order-details-items { 278 | thead { 279 | display: block; 280 | 281 | tr, 282 | td { 283 | display: block; 284 | } 285 | } 286 | } 287 | 288 | .table-wrapper { 289 | .table.table-order-items { 290 | tfoot { 291 | td.order-pager-wrapper { 292 | width: 100%; 293 | } 294 | } 295 | } 296 | } 297 | .order-items.table-wrapper { 298 | .col.price, 299 | .col.qty, 300 | .col.subtotal, 301 | .col.msrp { 302 | text-align: left; 303 | } 304 | } 305 | } 306 | 307 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) { 308 | .order-pager-wrapper { 309 | .toolbar-amount { 310 | left: inherit; 311 | position: relative; 312 | text-align: center; 313 | top: inherit; 314 | } 315 | 316 | .pages { 317 | text-align: center; 318 | } 319 | 320 | .action.previous, 321 | .action.next { 322 | margin: 0; 323 | } 324 | } 325 | } 326 | 327 | // 328 | // Desktop 329 | // _____________________________________________ 330 | 331 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 332 | .table-order-items { 333 | .subtotal, 334 | .amount { 335 | text-align: right; 336 | } 337 | 338 | &.creditmemo { 339 | .col { 340 | &.qty, 341 | &.discount, 342 | &.subtotal { 343 | text-align: center; 344 | } 345 | 346 | &.total { 347 | text-align: right; 348 | } 349 | } 350 | } 351 | } 352 | 353 | .order-pager-wrapper { 354 | .order-pager-wrapper-top { 355 | padding-left: 0; 356 | padding-right: 0; 357 | } 358 | 359 | .pages { 360 | float: right; 361 | } 362 | } 363 | 364 | .order-actions-toolbar { 365 | .action.print { 366 | display: block; 367 | float: right; 368 | } 369 | } 370 | 371 | .page-title-wrapper { 372 | .order-date { 373 | @order-status-indent: ceil(@h1__margin-bottom__desktop/2); 374 | .lib-css(margin-top, -@order-status-indent); 375 | } 376 | } 377 | 378 | // 379 | // Guest order view page 380 | // --------------------------------------------- 381 | 382 | [class^='sales-guest-'], 383 | .sales-guest-view { 384 | .column.main { 385 | .block:not(.widget) { 386 | .block-content { 387 | &:extend(.abs-add-clearfix-desktop all); 388 | 389 | .box { 390 | &:extend(.abs-blocks-2columns all); 391 | margin-bottom: @indent__base; 392 | } 393 | } 394 | } 395 | } 396 | } 397 | } 398 | -------------------------------------------------------------------------------- /Magento_Search/templates/form.mini.phtml: -------------------------------------------------------------------------------- 1 | 8 | getData('configProvider'); 13 | /** @var $helper \Magento\Search\Helper\Data */ 14 | $helper = $configProvider->getSearchHelperData(); 15 | $allowedSuggestion = $configProvider->isSuggestionsAllowed(); 16 | $quickSearchUrl = $allowedSuggestion ? $escaper->escapeUrl($helper->getSuggestUrl()) : ''; 17 | ?> 18 | 66 | 67 | 81 | -------------------------------------------------------------------------------- /Magento_Theme/layout/default.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | subscribe_block 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | footer-static-block 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Magento_Theme/layout/default_head_blocks.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Magento_Theme/layout/move_catalog_product_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Magento_Theme/templates/css_manager.phtml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Magento_Theme/templates/home-page-block-category.phtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 48 | -------------------------------------------------------------------------------- /Magento_Theme/templates/html/breadcrumbs.phtml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 29 | 30 | -------------------------------------------------------------------------------- /Magento_Theme/templates/html/pager.phtml: -------------------------------------------------------------------------------- 1 | 16 | getCollection()->getSize()): ?> 17 | 18 | getUseContainer()): ?> 19 |
20 | 21 | 22 | getShowAmounts()): ?> 23 |

24 | 25 | getLastPageNum()>1): ?> 26 | escapeHtml( 27 | __( 28 | 'Items %1 to %2 of %3 total', 29 | $localeFormatter->formatNumber($block->getFirstNum()), 30 | $localeFormatter->formatNumber($block->getLastNum()), 31 | $localeFormatter->formatNumber($block->getTotalNum()) 32 | ) 33 | ) ?> 34 | getTotalNum() == 1): ?> 35 | escapeHtml(__('%1 Item', $localeFormatter->formatNumber($block->getTotalNum()))) ?> 36 | 37 | escapeHtml(__('%1 Item(s)', $localeFormatter->formatNumber($block->getTotalNum()))) ?> 38 | 39 | 40 |

41 | 42 | 43 | getLastPageNum()>1): ?> 44 |
45 | escapeHtml(__('Page')) ?> 46 | 144 |
145 | 146 | 147 | isShowPerPage()): ?> 148 |
149 | escapeHtml(__('Show')) ?> 150 | 159 | escapeHtml(__('per page')) ?> 160 |
161 | 162 | 163 | getUseContainer()): ?> 164 |
165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /Magento_Theme/templates/html/print.phtml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 26 | renderTag('script', [], $scriptString, false) ?> 27 | -------------------------------------------------------------------------------- /Magento_Theme/web/css/source/module/_collapsible_navigation.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Variables 8 | // _____________________________________________ 9 | 10 | @collapsible-nav-background: @sidebar__background-color; 11 | @collapsible-nav-color: @navigation-desktop-level0-item__color; 12 | @collapsible-nav-current-border: 3px solid transparent; 13 | @collapsible-nav-current-border-color: @active__color; 14 | @collapsible-nav-current-color: @navigation-desktop-level0-item__active__color; 15 | @collapsible-nav-current-font-weight: @font-weight__semibold; 16 | @collapsible-nav-delimiter__border-color: @color-gray82; 17 | @collapsible-nav-item-hover: @submenu-desktop-item__hover__background; 18 | 19 | 20 | // 21 | // Common 22 | // _____________________________________________ 23 | 24 | & when (@media-common = true) { 25 | 26 | // 27 | // Collapsible navigation 28 | // ----------------------------------------- 29 | 30 | .block-collapsible-nav { 31 | .content { 32 | .lib-css(background, @collapsible-nav-background); 33 | padding: 15px 0; 34 | } 35 | .item { 36 | margin: 3px 0 0; 37 | &:first-child { 38 | margin-top: 0; 39 | } 40 | 41 | a, 42 | > strong { 43 | border-left: 3px solid transparent; 44 | .lib-css(color, @collapsible-nav-color); 45 | display: block; 46 | padding: 5px 18px 5px 15px; 47 | } 48 | 49 | a { 50 | text-decoration: none; 51 | 52 | &:hover { 53 | .lib-css(background, @collapsible-nav-item-hover); 54 | .lib-css(color, @collapsible-nav-current-color); 55 | } 56 | } 57 | 58 | &.current { 59 | a, 60 | > strong { 61 | .lib-css(border-color, @collapsible-nav-current-border-color); 62 | .lib-css(color, @collapsible-nav-current-color); 63 | .lib-css(font-weight, @collapsible-nav-current-font-weight); 64 | } 65 | 66 | a { 67 | .lib-css(border-color, @collapsible-nav-current-border-color); 68 | } 69 | } 70 | 71 | .delimiter { 72 | border-top: 1px solid @collapsible-nav-delimiter__border-color; 73 | display: block; 74 | margin: @indent__s 1.8rem; 75 | } 76 | } 77 | } 78 | } 79 | 80 | // 81 | // Desktop 82 | // _____________________________________________ 83 | 84 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 85 | .block-collapsible-nav { 86 | .title { 87 | &:extend(.abs-visually-hidden-desktop all); 88 | } 89 | } 90 | } 91 | 92 | // 93 | // Mobile 94 | // _____________________________________________ 95 | 96 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) { 97 | .block-collapsible-nav { 98 | left: 0; 99 | position: absolute; 100 | top: -21px; 101 | width: 100%; 102 | z-index: 5; 103 | 104 | .title { 105 | &:extend(.abs-toggling-title-mobile all); 106 | } 107 | 108 | .content { 109 | border-bottom: @border-width__base solid @border-color__base; 110 | display: none; 111 | 112 | &.active { 113 | display: block; 114 | } 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /Magento_Ui/web/js/form/form.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright © Magento, Inc. All rights reserved. 3 | * See COPYING.txt for license details. 4 | */ 5 | 6 | /** 7 | * @api 8 | */ 9 | define([ 10 | 'underscore', 11 | 'Magento_Ui/js/lib/spinner', 12 | 'rjsResolver', 13 | './adapter', 14 | 'uiCollection', 15 | 'mageUtils', 16 | 'jquery', 17 | 'Magento_Ui/js/core/app' 18 | ], function (_, loader, resolver, adapter, Collection, utils, $, app) { 19 | 'use strict'; 20 | 21 | /** 22 | * Format params 23 | * 24 | * @param {Object} params 25 | * @returns {Array} 26 | */ 27 | function prepareParams(params) { 28 | var result = '?'; 29 | 30 | _.each(params, function (value, key) { 31 | result += key + '=' + value + '&'; 32 | }); 33 | 34 | return result.slice(0, -1); 35 | } 36 | 37 | /** 38 | * Collect form data. 39 | * 40 | * @param {Array} items 41 | * @returns {Object} 42 | */ 43 | function collectData(items) { 44 | var result = {}, 45 | name; 46 | 47 | items = Array.prototype.slice.call(items); 48 | 49 | items.forEach(function (item) { 50 | switch (item.type) { 51 | case 'checkbox': 52 | result[item.name] = +!!item.checked; 53 | break; 54 | 55 | case 'radio': 56 | if (item.checked) { 57 | result[item.name] = item.value; 58 | } 59 | break; 60 | 61 | case 'select-multiple': 62 | name = item.name.substring(0, item.name.length - 2); //remove [] from the name ending 63 | result[name] = _.pluck(item.selectedOptions, 'value'); 64 | break; 65 | 66 | default: 67 | result[item.name] = item.value; 68 | } 69 | }); 70 | 71 | return result; 72 | } 73 | 74 | /** 75 | * Makes ajax request 76 | * 77 | * @param {Object} params 78 | * @param {Object} data 79 | * @param {String} url 80 | * @returns {*} 81 | */ 82 | function makeRequest(params, data, url) { 83 | var save = $.Deferred(); 84 | 85 | data = utils.serialize(data); 86 | data['form_key'] = window.FORM_KEY; 87 | 88 | if (!url) { 89 | save.resolve(); 90 | } 91 | 92 | $('body').trigger('processStart'); 93 | 94 | $.ajax({ 95 | url: url + prepareParams(params), 96 | data: data, 97 | dataType: 'json', 98 | 99 | /** 100 | * Success callback. 101 | * @param {Object} resp 102 | * @returns {Boolean} 103 | */ 104 | success: function (resp) { 105 | if (resp.ajaxExpired) { 106 | window.location.href = resp.ajaxRedirect; 107 | } 108 | 109 | if (!resp.error) { 110 | save.resolve(resp); 111 | 112 | return true; 113 | } 114 | 115 | $('body').notification('clear'); 116 | $.each(resp.messages, function (key, message) { 117 | $('body').notification('add', { 118 | error: resp.error, 119 | message: message, 120 | 121 | /** 122 | * Inserts message on page 123 | * @param {String} msg 124 | */ 125 | insertMethod: function (msg) { 126 | $('.page-main-actions').after(msg); 127 | } 128 | }); 129 | }); 130 | }, 131 | 132 | /** 133 | * Complete callback. 134 | */ 135 | complete: function () { 136 | $('body').trigger('processStop'); 137 | } 138 | }); 139 | 140 | return save.promise(); 141 | } 142 | 143 | /** 144 | * Check if fields is valid. 145 | * 146 | * @param {Array}items 147 | * @returns {Boolean} 148 | */ 149 | function isValidFields(items) { 150 | require(['mage/validation']); 151 | var result = true; 152 | _.each(items, function (item) { 153 | if (!$.validator.validateSingleElement(item)) { 154 | result = false; 155 | } 156 | }); 157 | 158 | return result; 159 | } 160 | 161 | return Collection.extend({ 162 | defaults: { 163 | additionalFields: [], 164 | additionalInvalid: false, 165 | selectorPrefix: '.page-content', 166 | messagesClass: 'messages', 167 | errorClass: '.admin__field._error', 168 | eventPrefix: '.${ $.index }', 169 | ajaxSave: false, 170 | ajaxSaveType: 'default', 171 | imports: { 172 | reloadUrl: '${ $.provider}:reloadUrl' 173 | }, 174 | listens: { 175 | selectorPrefix: 'destroyAdapter initAdapter', 176 | '${ $.name }.${ $.reloadItem }': 'params.set reload' 177 | }, 178 | exports: { 179 | selectorPrefix: '${ $.provider }:client.selectorPrefix', 180 | messagesClass: '${ $.provider }:client.messagesClass' 181 | } 182 | }, 183 | 184 | /** @inheritdoc */ 185 | initialize: function () { 186 | this._super() 187 | .initAdapter(); 188 | 189 | resolver(this.hideLoader, this); 190 | 191 | return this; 192 | }, 193 | 194 | /** @inheritdoc */ 195 | initObservable: function () { 196 | return this._super() 197 | .observe([ 198 | 'responseData', 199 | 'responseStatus' 200 | ]); 201 | }, 202 | 203 | /** @inheritdoc */ 204 | initConfig: function () { 205 | this._super(); 206 | 207 | this.selector = '[data-form-part=' + this.namespace + ']'; 208 | 209 | return this; 210 | }, 211 | 212 | /** 213 | * Initialize adapter handlers. 214 | * 215 | * @returns {Object} 216 | */ 217 | initAdapter: function () { 218 | adapter.on({ 219 | 'reset': this.reset.bind(this), 220 | 'save': this.save.bind(this, true, {}), 221 | 'saveAndContinue': this.save.bind(this, false, {}) 222 | }, this.selectorPrefix, this.eventPrefix); 223 | 224 | return this; 225 | }, 226 | 227 | /** 228 | * Destroy adapter handlers. 229 | * 230 | * @returns {Object} 231 | */ 232 | destroyAdapter: function () { 233 | adapter.off([ 234 | 'reset', 235 | 'save', 236 | 'saveAndContinue' 237 | ], this.eventPrefix); 238 | 239 | return this; 240 | }, 241 | 242 | /** 243 | * Hide loader. 244 | * 245 | * @returns {Object} 246 | */ 247 | hideLoader: function () { 248 | loader.get(this.name).hide(); 249 | 250 | return this; 251 | }, 252 | 253 | /** 254 | * Validate and save form. 255 | * 256 | * @param {String} redirect 257 | * @param {Object} data 258 | */ 259 | save: function (redirect, data) { 260 | this.validate(); 261 | 262 | if (!this.additionalInvalid && !this.source.get('params.invalid')) { 263 | this.setAdditionalData(data) 264 | .submit(redirect); 265 | } else { 266 | this.focusInvalid(); 267 | } 268 | }, 269 | 270 | /** 271 | * Tries to set focus on first invalid form field. 272 | * 273 | * @returns {Object} 274 | */ 275 | focusInvalid: function () { 276 | var invalidField = _.find(this.delegate('checkInvalid')); 277 | 278 | if (!_.isUndefined(invalidField) && _.isFunction(invalidField.focused)) { 279 | invalidField.focused(true); 280 | } 281 | 282 | return this; 283 | }, 284 | 285 | /** 286 | * Set additional data to source before form submit and after validation. 287 | * 288 | * @param {Object} data 289 | * @returns {Object} 290 | */ 291 | setAdditionalData: function (data) { 292 | _.each(data, function (value, name) { 293 | this.source.set('data.' + name, value); 294 | }, this); 295 | 296 | return this; 297 | }, 298 | 299 | /** 300 | * Submits form 301 | * 302 | * @param {String} redirect 303 | */ 304 | submit: function (redirect) { 305 | var additional = collectData(this.additionalFields), 306 | source = this.source; 307 | 308 | _.each(additional, function (value, name) { 309 | source.set('data.' + name, value); 310 | }); 311 | 312 | source.save({ 313 | redirect: redirect, 314 | ajaxSave: this.ajaxSave, 315 | ajaxSaveType: this.ajaxSaveType, 316 | response: { 317 | data: this.responseData, 318 | status: this.responseStatus 319 | }, 320 | attributes: { 321 | id: this.namespace 322 | } 323 | }); 324 | }, 325 | 326 | /** 327 | * Validates each element and returns true, if all elements are valid. 328 | */ 329 | validate: function () { 330 | var self = this; 331 | 332 | require(['mage/validation'], function () { 333 | self.additionalFields = document.querySelectorAll(self.selector); 334 | self.source.set('params.invalid', false); 335 | self.source.trigger('data.validate'); 336 | self.set('additionalInvalid', !isValidFields(self.additionalFields)); 337 | }); 338 | }, 339 | 340 | /** 341 | * Trigger reset form data. 342 | */ 343 | reset: function () { 344 | this.source.trigger('data.reset'); 345 | $('[data-bind*=datepicker]').val(''); 346 | }, 347 | 348 | /** 349 | * Trigger overload form data. 350 | */ 351 | overload: function () { 352 | this.source.trigger('data.overload'); 353 | }, 354 | 355 | /** 356 | * Updates data from server. 357 | */ 358 | reload: function () { 359 | makeRequest(this.params, this.data, this.reloadUrl).then(function (data) { 360 | app(data, true); 361 | }); 362 | } 363 | }); 364 | }); 365 | -------------------------------------------------------------------------------- /Magento_Ui/web/js/lib/knockout/bindings/bootstrap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright © Magento, Inc. All rights reserved. 3 | * See COPYING.txt for license details. 4 | */ 5 | define(function (require) { 6 | 'use strict'; 7 | 8 | var renderer = require('../template/renderer'); 9 | 10 | renderer.addAttribute('repeat', renderer.handlers.wrapAttribute); 11 | 12 | renderer.addAttribute('outerfasteach', { 13 | binding: 'fastForEach', 14 | handler: renderer.handlers.wrapAttribute 15 | }); 16 | 17 | renderer 18 | .addNode('repeat') 19 | .addNode('fastForEach'); 20 | 21 | return { 22 | resizable: require('./resizable'), 23 | i18n: require('./i18n'), 24 | scope: require('./scope'), 25 | range: require('./range'), 26 | mageInit: require('./mage-init'), 27 | keyboard: require('./keyboard'), 28 | optgroup: require('./optgroup'), 29 | afterRender: require('./after-render'), 30 | autoselect: require('./autoselect'), 31 | //datepicker: require('./datepicker'), 32 | outerClick: require('./outer_click'), 33 | fadeVisible: require('./fadeVisible'), 34 | collapsible: require('./collapsible'), 35 | staticChecked: require('./staticChecked'), 36 | simpleChecked: require('./simple-checked'), 37 | bindHtml: require('./bind-html'), 38 | //tooltip: require('./tooltip'), 39 | repeat: require('knockoutjs/knockout-repeat'), 40 | fastForEach: require('knockoutjs/knockout-fast-foreach'), 41 | //colorPicker: require('./color-picker') 42 | }; 43 | }); 44 | -------------------------------------------------------------------------------- /Magento_Ui/web/js/lib/logger/formatter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright © Magento, Inc. All rights reserved. 3 | * See COPYING.txt for license details. 4 | */ 5 | 6 | define([ 7 | 'mage/utils/template' 8 | ], function (mageTemplate) { 9 | 'use strict'; 10 | 11 | /** 12 | * @param {String} dateFormat 13 | * @param {String} template 14 | */ 15 | function LogFormatter(dateFormat, template) { 16 | /** 17 | * @protected 18 | * @type {String} 19 | */ 20 | this.dateFormat_ = 'YYYY-MM-DD hh:mm:ss'; 21 | 22 | /** 23 | * @protected 24 | * @type {String} 25 | */ 26 | this.template_ = '[${ $.date }] [${ $.entry.levelName }] ${ $.message }'; 27 | 28 | if (dateFormat) { 29 | this.dateFormat_ = dateFormat; 30 | } 31 | 32 | if (template) { 33 | this.template_ = template; 34 | } 35 | } 36 | 37 | /** 38 | * @param {LogEntry} entry 39 | * @returns {String} 40 | */ 41 | LogFormatter.prototype.process = function (entry) { 42 | var message = mageTemplate.template(entry.message, entry.data), 43 | date = new Date(entry.timestamp).toLocaleString(); 44 | 45 | return mageTemplate.template(this.template_, { 46 | date: date, 47 | entry: entry, 48 | message: message 49 | }); 50 | }; 51 | 52 | return LogFormatter; 53 | }); 54 | -------------------------------------------------------------------------------- /Magento_Wishlist/templates/sidebar.phtml: -------------------------------------------------------------------------------- 1 | 9 | getData('wishlistDataViewModel'); 11 | ?> 12 | isAllow()): ?> 13 |
14 |
15 | escapeHtml($block->getTitle()) ?> 16 | 17 | 18 | 19 |
20 |
21 | escapeHtml(__('Last Added Items')) ?> 22 | 23 |
    26 |
  1. 27 | 28 | 29 | 30 | 31 | 32 |
    33 | 34 | 35 | 36 |
    37 |
    38 |
    39 | 40 |
    41 | 42 | 45 | escapeHtml(__('Add to Cart')) ?> 46 | 47 | 48 | 49 | 54 | 55 |
    56 | 57 | 64 |
    65 |
    66 |
    67 |
  2. 68 |
69 | 78 | 79 | 80 |
escapeHtml(__('You have no items in your wish list.')) ?>
81 | 82 |
83 |
84 | 97 | 98 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "magefan/theme-frontend-optimized", 3 | "description": "Optimized Magento 2 Theme", 4 | "require": { 5 | "magefan/module-theme-optimized" : "2.0.6", 6 | "magefan/module-blog" : ">=2.11.3", 7 | "magefan/module-lazyload" : ">=2.1.4", 8 | "magefan/module-rocketjavascript" : ">=2.1.9", 9 | "magefan/module-translation": ">=2.2.9", 10 | "magefan/module-html-sitemap": ">=2.2.0", 11 | "magefan/module-xml-sitemap": ">=2.0.1", 12 | "magefan/module-auto-related-product": ">=2.3.1", 13 | "magefan/module-google-tag-manager": ">=2.5.7", 14 | "magefan/module-facebook-pixel": ">=2.6.1" 15 | }, 16 | "type": "magento2-theme", 17 | "config": { 18 | "sort-packages": true 19 | }, 20 | "version": "2.0.6", 21 | "autoload": { 22 | "files": [ 23 | "registration.php" 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /media/preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/media/preview.jpg -------------------------------------------------------------------------------- /registration.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | Magefan Optimized 9 | Magento/blank 10 | 11 | media/preview.jpg 12 | 13 | -------------------------------------------------------------------------------- /web/css/source/_breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | .breadcrumbs { 12 | .lib-breadcrumbs( 13 | @_breadcrumbs-link-color-hover: @_breadcrumbs-link-color, 14 | @_breadcrumbs-link-color-active: @_breadcrumbs-link-color, 15 | @_breadcrumbs-link-color-visited: @_breadcrumbs-link-color 16 | ); 17 | .items { 18 | color: @_breadcrumbs-current-color; 19 | } 20 | } 21 | } 22 | 23 | // (max-width: 768px) 24 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) { 25 | .breadcrumbs { 26 | .item { 27 | &:last-child { 28 | display: inline-block; 29 | text-decoration: none; 30 | padding: 0; 31 | .lib-icon-font( 32 | @icon-prev, 33 | @_icon-font-size: 26px 34 | ); 35 | } 36 | &:not(:last-child) { 37 | display: none; 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /web/css/source/_buttons.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | 12 | // Using buttons mixins 13 | button, 14 | a.action.primary { 15 | .lib-css(border-radius, @button__border-radius); 16 | .lib-css(transition, all .2s ease); 17 | &:hover { 18 | .lib-css(transition, all .2s ease); 19 | } 20 | } 21 | 22 | button { 23 | &:active { 24 | .lib-css(box-shadow, @button__shadow); 25 | } 26 | } 27 | 28 | a.action.primary { 29 | .lib-link-as-button(); 30 | } 31 | 32 | .action.primary, 33 | .action-primary { 34 | .lib-button-primary(); 35 | .lib-css(transition, all .2s ease); 36 | &:hover { 37 | .lib-css(transition, all .2s ease); 38 | } 39 | } 40 | 41 | .action { 42 | &.continue { 43 | .lib-css(transition, all .2s ease); 44 | &:hover { 45 | .lib-css(transition, all .2s ease); 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /web/css/source/_forms.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Variables 8 | // _____________________________________________ 9 | 10 | @form-field__vertical-indent__desktop: 29px; 11 | @form-calendar-icon__color: @primary__color; 12 | 13 | // 14 | // Common 15 | // _____________________________________________ 16 | 17 | & when (@media-common = true) { 18 | .fieldset { 19 | .lib-form-fieldset(); 20 | &:last-child { 21 | margin-bottom: @indent__base; 22 | } 23 | 24 | > .field, 25 | > .fields > .field { 26 | .lib-form-field( 27 | @_label-font-weight: normal; 28 | ); 29 | 30 | &.no-label { 31 | > .label { 32 | &:extend(.abs-visually-hidden all); 33 | } 34 | } 35 | 36 | &.choice { 37 | .label { 38 | display: inline; 39 | font-weight: normal; 40 | } 41 | } 42 | 43 | .label { 44 | .column:not(.main) & { 45 | font-weight: normal; 46 | } 47 | } 48 | 49 | .field.choice { 50 | margin-bottom: @indent__s; 51 | 52 | &:last-child { 53 | margin-bottom: 0; 54 | } 55 | } 56 | 57 | input[type=file] { 58 | margin: @indent__xs 0; 59 | } 60 | } 61 | } 62 | 63 | .legend + .fieldset, 64 | .legend + div { 65 | clear: both; 66 | } 67 | 68 | .legend { 69 | strong { 70 | margin-left: @indent__xs; 71 | } 72 | } 73 | 74 | fieldset.field { 75 | border: 0; 76 | padding: 0; 77 | } 78 | 79 | .field { 80 | &.date { 81 | &:extend(.abs-field-date all); 82 | 83 | .time-picker { 84 | display: inline-block; 85 | margin-top: @indent__s; 86 | white-space: nowrap; 87 | } 88 | } 89 | 90 | .message { 91 | &.warning { 92 | margin-top: @indent__s; 93 | } 94 | } 95 | } 96 | 97 | .field-error, 98 | div.mage-error { 99 | margin-top: 7px; 100 | } 101 | 102 | .field-error { 103 | .lib-form-validation-note(); 104 | } 105 | 106 | .product-options-wrapper { 107 | .date { 108 | &.required { 109 | div[for*='options'] { 110 | &.mage-error { 111 | display: none !important; 112 | } 113 | } 114 | } 115 | } 116 | } 117 | 118 | .field .tooltip { 119 | .lib-tooltip(right); 120 | .tooltip-content { 121 | min-width: 200px; 122 | white-space: normal; 123 | } 124 | } 125 | 126 | input:focus ~ .tooltip .tooltip-content, 127 | select:focus ~ .tooltip .tooltip-content { 128 | display: block; 129 | } 130 | 131 | ._has-datepicker { 132 | ~ .ui-datepicker-trigger { 133 | .lib-button-reset(); 134 | .lib-icon-font( 135 | @_icon-font-content: @icon-calendar, 136 | @_icon-font-color: @primary__color__lighter, 137 | @_icon-font-size: @icon-calendar__font-size, 138 | @_icon-font-line-height: @icon-calendar__font-size, 139 | @_icon-font-display: block, 140 | @_icon-font-text-hide: true 141 | ); 142 | display: inline-block; 143 | vertical-align: middle; 144 | 145 | &:focus { 146 | box-shadow: none; 147 | outline: 0; 148 | } 149 | } 150 | } 151 | 152 | // 153 | // Sidebar forms 154 | // ----------------------------------------- 155 | 156 | .sidebar { 157 | .fieldset { 158 | margin: 0; 159 | 160 | > .field:not(.choice) >, 161 | .fields > .field { 162 | &:not(:last-child) { 163 | margin: 0 0 @form-field__vertical-indent; 164 | } 165 | 166 | .label { 167 | margin: 0 0 4px; 168 | padding: 0 0 @indent__xs; 169 | text-align: left; 170 | width: 100%; 171 | } 172 | 173 | .control { 174 | width: 100%; 175 | } 176 | } 177 | } 178 | } 179 | } 180 | 181 | // 182 | // Desktop 183 | // _____________________________________________ 184 | 185 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 186 | 187 | .fieldset { 188 | .legend { 189 | &:extend(.abs-margin-for-forms-desktop all); 190 | } 191 | 192 | > .field { 193 | //.lib-form-field-type-revert(); 194 | .lib-form-field-type-revert(@_type: block); 195 | margin: 0 0 @form-field__vertical-indent__desktop; 196 | > .label { 197 | font-weight: normal; 198 | } 199 | } 200 | } 201 | 202 | } 203 | -------------------------------------------------------------------------------- /web/css/source/_layout.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magento, Inc. All rights reserved. 3 | // * See COPYING.txt for license details. 4 | // */ 5 | 6 | @layout-column-main__sidebar-offset: 2%; 7 | @layout-column__additional-sidebar-offset: @layout-column-main__sidebar-offset; 8 | 9 | // 10 | // Common 11 | // _____________________________________________ 12 | 13 | & when (@media-common = true) { 14 | 15 | .columns { 16 | #lib-layout-columns(); 17 | 18 | .column.main { 19 | &:extend(.abs-add-box-sizing all); 20 | .lib-css(padding-bottom, @indent__xl); 21 | .lib-vendor-prefix-flex-basis(auto); 22 | .lib-vendor-prefix-flex-grow(1); 23 | .lib-vendor-prefix-order(1); 24 | width: 100%; 25 | } 26 | 27 | .sidebar-main { 28 | &:extend(.abs-add-box-sizing all); 29 | .lib-vendor-prefix-flex-grow(1); 30 | .lib-vendor-prefix-flex-basis(100%); 31 | .lib-vendor-prefix-order(1); 32 | } 33 | 34 | .sidebar-additional { 35 | &:extend(.abs-add-box-sizing all); 36 | .lib-vendor-prefix-flex-grow(1); 37 | .lib-vendor-prefix-flex-basis(100%); 38 | .lib-vendor-prefix-order(2); 39 | } 40 | } 41 | } 42 | 43 | // 44 | // Mobile 45 | // _____________________________________________ 46 | 47 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) { 48 | .navigation, 49 | .breadcrumbs, 50 | .page-header .header.panel, 51 | .header.content, 52 | .footer.content, 53 | .page-main, 54 | .page-wrapper > .widget, 55 | .page-wrapper > .page-bottom, 56 | .block.category.event, 57 | .top-container { 58 | padding-left: @layout__width-xs-indent; 59 | padding-right: @layout__width-xs-indent; 60 | } 61 | 62 | .page-main { 63 | .account &, 64 | .cms-privacy-policy & { 65 | padding-top: 41px; 66 | position: relative; 67 | } 68 | } 69 | } 70 | 71 | // 72 | // Desktop 73 | // _____________________________________________ 74 | 75 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 76 | .navigation, 77 | .breadcrumbs, 78 | .page-header .header.panel, 79 | .header.content, 80 | .footer.content, 81 | .page-wrapper > .widget, 82 | .page-wrapper > .page-bottom, 83 | .block.category.event, 84 | .top-container, 85 | .page-main { 86 | box-sizing: border-box; 87 | margin-left: auto; 88 | margin-right: auto; 89 | max-width: @layout__max-width; 90 | padding-left: @layout-indent__width; 91 | padding-right: @layout-indent__width; 92 | width: auto; 93 | } 94 | 95 | .page-main { 96 | width: 100%; 97 | } 98 | 99 | .columns { 100 | display: block; 101 | } 102 | 103 | .column.main { 104 | #lib-layout-columns > .main(); 105 | &:extend(.abs-add-box-sizing-desktop all); 106 | min-height: 300px; 107 | } 108 | 109 | .sidebar-main { 110 | #lib-layout-columns > .left(); 111 | padding-right: @layout-column-main__sidebar-offset; 112 | &:extend(.abs-add-box-sizing-desktop all); 113 | } 114 | 115 | .page-layout-2columns-right .sidebar-main { 116 | padding-left: @layout-column-main__sidebar-offset; 117 | padding-right: 0; 118 | } 119 | 120 | .sidebar-additional { 121 | #lib-layout-columns > .right(); 122 | clear: right; 123 | padding-left: @layout-column__additional-sidebar-offset; 124 | &:extend(.abs-add-box-sizing-desktop all); 125 | } 126 | 127 | .page-layout-2columns-left { 128 | .main { 129 | padding-left: @layout-column__additional-sidebar-offset 130 | } 131 | 132 | .sidebar-main { 133 | padding-right: 0; 134 | } 135 | 136 | .sidebar-additional { 137 | clear: left; 138 | float: left; 139 | padding-left: 0; 140 | } 141 | } 142 | 143 | .panel.header { 144 | padding: 10px 20px; 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /web/css/source/_pages.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | .pages { 12 | .lib-pager(); 13 | 14 | .items { 15 | white-space: normal; 16 | } 17 | 18 | .page { 19 | border-radius: 50%; 20 | } 21 | 22 | a.page { 23 | .lib-css(transition, all .2s ease); 24 | &:hover { 25 | .lib-css(transition, all .2s ease); 26 | } 27 | } 28 | 29 | .action { 30 | width: 65px; 31 | &.previous { 32 | margin-right: 0; 33 | } 34 | 35 | &.next { 36 | margin-left: 0; 37 | } 38 | 39 | .label + span { 40 | .lib-visually-hidden(); 41 | } 42 | 43 | svg { 44 | color: @theme__color__secondary; 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /web/css/source/_sections.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magento, Inc. All rights reserved. 3 | // * See COPYING.txt for license details. 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | .product.data.items { 12 | .lib-data-accordion(); 13 | margin-bottom: @indent__base 14 | } 15 | } 16 | 17 | // 18 | // Desktop 19 | // _____________________________________________ 20 | 21 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 22 | .product.data.items { 23 | //&:extend(.abs-data-tabs all); 24 | 25 | .lib-data-tabs( 26 | @_tab-control-font-weight: @font-weight__bold, 27 | @_tab-control-font-size: 1.6rem, 28 | @_tab-control-background-color: transparent, 29 | @_tab-control-background-color-hover: transparent, 30 | @_tab-control-background-color-active: transparent, 31 | @_tab-control-padding-bottom: 14px, 32 | @_tab-control-border-width: 0, 33 | 34 | @_tab-content-background-color: transparent, 35 | @_tab-content-margin-top: 38px, 36 | @_tab-content-padding-top: 20px, 37 | @_tab-content-padding-right: 0, 38 | @_tab-content-padding-bottom: 0, 39 | @_tab-content-padding-left: 0 40 | ); 41 | 42 | > .item.title { 43 | 44 | > .switch { 45 | border: none; 46 | position: relative; 47 | 48 | &:after { 49 | content: ''; 50 | background: @theme__color__secondary; 51 | height: 3px; 52 | position: absolute; 53 | left: 0; 54 | bottom: 0; 55 | right: 0; 56 | .lib-css(transition, all .2s ease); 57 | width: 100%; 58 | .lib-css(transform, scale(0,1)); 59 | .lib-css(backface-visibility, hidden); 60 | } 61 | } 62 | 63 | &:not(.disabled) > .switch:focus, 64 | &:not(.disabled) > .switch:hover { 65 | &:after { 66 | width: 100%; 67 | .lib-css(transform, scale(1,1)); 68 | } 69 | } 70 | 71 | &:not(.disabled) > .switch:active, 72 | &.active > .switch, 73 | &.active > .switch:focus, 74 | &.active > .switch:hover { 75 | padding: 5px 20px 14px 20px; 76 | &:after { 77 | width: 100%; 78 | .lib-css(transform, scale(1,1)); 79 | } 80 | } 81 | } 82 | 83 | > .item.content { 84 | border-width: 1px 0 0 0; 85 | } 86 | } 87 | } 88 | 89 | // 90 | // Mobile 91 | // _____________________________________________ 92 | 93 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) { 94 | .product.data.items { 95 | .lib-data-accordion(); 96 | //&:extend(.abs-data-tabs all); 97 | 98 | .data.item { 99 | display: block; 100 | } 101 | 102 | .item.title { 103 | 104 | > .switch { 105 | padding: 1px 15px 1px; 106 | } 107 | 108 | &:not(.disabled) > .switch:active, 109 | &.active > .switch, 110 | &.active > .switch:focus, 111 | &.active > .switch:hover { 112 | padding-bottom: 0; 113 | } 114 | } 115 | 116 | > .item.content { 117 | padding: 10px 15px 30px; 118 | } 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /web/css/source/_tables.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | .table-wrapper { 12 | margin-bottom: @indent__base; 13 | } 14 | 15 | table { 16 | .lib-table-caption(); 17 | } 18 | 19 | .table { 20 | &:not(.cart) { 21 | &:not(.totals):not(.table-comparison) { 22 | .lib-table-bordered( 23 | @_table_type: light, 24 | @_table_border-width: @table__border-width 25 | ); 26 | 27 | tfoot { 28 | > tr { 29 | &:first-child { 30 | th, 31 | td { 32 | border-top: @table__border-width @table__border-style @table__border-color; 33 | padding-top: @indent__base; 34 | } 35 | } 36 | } 37 | 38 | .mark { 39 | font-weight: @font-weight__regular; 40 | text-align: right; 41 | } 42 | } 43 | } 44 | } 45 | } 46 | } 47 | 48 | // 49 | // Mobile 50 | // _____________________________________________ 51 | 52 | .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) { 53 | .table-wrapper { 54 | .lib-table-overflow(); 55 | position: relative; // To hide unnecessary horizontal scrollbar in Safari 56 | 57 | .table { 58 | &:not(.cart) { 59 | &:not(.totals) { 60 | &:not(.table-comparison) { 61 | .lib-table-responsive(); 62 | 63 | tbody > tr { 64 | > td:first-child { 65 | padding-top: @indent__base; 66 | } 67 | 68 | > td:last-child { 69 | padding-bottom: @indent__base; 70 | } 71 | } 72 | 73 | &.additional-attributes { 74 | tbody { 75 | th { 76 | &:extend(.abs-no-display-s all); 77 | } 78 | 79 | td { 80 | &:last-child { 81 | border: none; 82 | padding: 0 0 @indent__xs; 83 | } 84 | } 85 | } 86 | } 87 | } 88 | } 89 | } 90 | } 91 | 92 | .table { 93 | &:not(.totals) { 94 | &:not(.table-comparison) { 95 | tfoot { 96 | display: block; 97 | 98 | tr { 99 | display: block; 100 | &:extend(.abs-add-clearfix-mobile all); 101 | 102 | &:first-child { 103 | th, 104 | td { 105 | padding-top: @indent__base; 106 | } 107 | } 108 | } 109 | 110 | th { 111 | box-sizing: border-box; 112 | float: left; 113 | padding-left: 0; 114 | padding-right: 0; 115 | text-align: left; 116 | width: 70%; 117 | } 118 | 119 | td { 120 | box-sizing: border-box; 121 | float: left; 122 | padding-left: 0; 123 | padding-right: 0; 124 | text-align: right; 125 | width: 30%; 126 | } 127 | } 128 | } 129 | } 130 | } 131 | } 132 | 133 | .data-table-definition-list { 134 | thead { 135 | display: none; 136 | } 137 | 138 | tbody th { 139 | padding-bottom: 0; 140 | } 141 | 142 | tbody th, 143 | tbody td { 144 | display: block; 145 | padding-left: 0; 146 | padding-right: 0; 147 | } 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /web/css/source/_theme.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Optimized theme overrides 8 | // _____________________________________________ 9 | 10 | // Theme file should contain declarations (overrides) ONLY OF EXISTING variables 11 | // Otherwise this theme won't be available for parent nesting 12 | // All new variables should be placed in local theme lib or local theme files 13 | 14 | // 15 | // Typography 16 | // --------------------------------------------- 17 | 18 | // Fonts 19 | //@font-family-name__base: 'Open Sans'; 20 | //@font-family__base: @font-family-name__base, @font-family__sans-serif; 21 | 22 | // Fonts Icons 23 | //@icons__font-name: 'optimized-icons'; 24 | //@icons__font-path: '@{baseDir}fonts/Optimized/Optimized-Icons'; 25 | 26 | // 27 | // Icons 28 | // --------------------------------------------- 29 | 30 | // ToDo UI: move it to optimized theme variables 31 | //@icon-wishlist-full: '\e600'; 32 | //@icon-wishlist-empty: '\e601'; 33 | //@icon-warning: '\e602'; 34 | //@icon-update: '\e603'; 35 | //@icon-trash: '\e604'; 36 | //@icon-star: '\e605'; 37 | //@icon-settings: '\e606'; 38 | //@icon-pointer-down: '\e607'; 39 | //@icon-next: '\e608'; 40 | //@icon-menu: '\e609'; 41 | //@icon-location: '\e60a'; 42 | //@icon-list: '\e60b'; 43 | //@icon-info: '\e60c'; 44 | //@icon-grid: '\e60d'; 45 | //@icon-comment-reflected: '\e60e'; 46 | //@icon-collapse: '\e60f'; 47 | //@icon-checkmark: '\e610'; 48 | //@icon-cart: '\e611'; 49 | //@icon-calendar: '\e612'; 50 | //@icon-arrow-up: '\e613'; 51 | //@icon-arrow-down: '\e614'; 52 | //@icon-search: '\e615'; 53 | //@icon-remove: '\e616'; 54 | //@icon-prev: '\e617'; 55 | //@icon-pointer-up: '\e618'; 56 | //@icon-pointer-right: '\e619'; 57 | //@icon-pointer-left: '\e61a'; 58 | //@icon-flag: '\e61b'; 59 | //@icon-expand: '\e61c'; 60 | //@icon-envelope: '\e61d'; 61 | //@icon-compare-full: '\e61e'; 62 | //@icon-compare-empty: '\e61f'; 63 | //@icon-comment: '\e620'; 64 | //@icon-up: '\e621'; 65 | //@icon-down: '\e622'; 66 | //@icon-help: '\e623'; 67 | //@icon-arrow-right-thin: '\e624'; 68 | //@icon-arrow-left-thin: '\e625'; 69 | //@icon-arrow-down-thin: '\e626'; 70 | //@icon-account: '\e627'; 71 | //@icon-gift-registry: '\e628'; 72 | //@icon-present: '\e629'; 73 | //@icon-arrow-up-thin: '\e633'; 74 | 75 | 76 | // 77 | // Layout grid 78 | // --------------------------------------------- 79 | 80 | // Number of total columns in layout (i.e. 1, 2, 3) 81 | @total-columns: 12; 82 | 83 | // Variables for layout columns 84 | @layout-column__sidebar-width: 3; 85 | 86 | // Page maximum width 87 | //@layout__max-width: 1280px; 88 | 89 | // Page indents on the left and right 90 | //@layout-indent__width: 20px; 91 | 92 | // Checkout columns width 93 | //@layout-column-checkout__width-left: 3; 94 | //@layout-column-checkout__width-main: @layout-column__width - @layout-column-checkout__width-left; 95 | 96 | // Checkout Sidebar 97 | @checkout-sidebar__margin: 0; 98 | @checkout-sidebar__margin__xl: 0; 99 | @checkout-sidebar__columns: 4; 100 | 101 | 102 | // 103 | // Shipping Information Variables 104 | // _____________________________________________ 105 | 106 | //@checkout-sidebar-shipping-information-edit-icon__color: @minicart-icons-color; 107 | @checkout-sidebar-shipping-information-edit-icon__color: @icon-font__color; 108 | //@checkout-sidebar-shipping-information-edit-icon__hover__color: @primary__color; 109 | @checkout-sidebar-shipping-information-edit-icon__hover__color: @icon-font__color-hover; 110 | 111 | 112 | // 113 | // Buttons 114 | // --------------------------------------------- 115 | 116 | // Font style 117 | @button__padding: 8px 15px; 118 | @button__border-radius: 0; 119 | 120 | // Default = secondary button 121 | //@button__color: @primary__color; 122 | //@button__background: @color-gray95; 123 | //@button__border: 1px solid @color-gray-darken2; 124 | //@button__gradient-color-start: false; 125 | //@button__gradient-color-end: false; 126 | // 127 | //@button__hover__color: @color-gray-darken3; 128 | //@button__hover__background: @color-gray-darken1; 129 | //@button__hover__border: @button__border; 130 | //@button__hover__gradient-color-start: false; 131 | //@button__hover__gradient-color-end: false; 132 | // 133 | //@button__active__color: @button__color; 134 | //@button__active__background: @button__hover__background; 135 | //@button__active__border: @button__border; 136 | //@button__active__gradient-color-start: false; 137 | //@button__active__gradient-color-end: false; 138 | 139 | 140 | 141 | // 142 | // Form variables 143 | // _____________________________________________ 144 | 145 | // 146 | // Field 147 | // --------------------------------------------- 148 | 149 | // Form field label 150 | @form-field-type-label-block__margin: 0 0 @indent__xs; 151 | @form-field-type-label-block__padding: false; 152 | @form-field-type-label-block__align: left; 153 | 154 | 155 | // 156 | // Actions-toolbar 157 | // _____________________________________________ 158 | 159 | //@actions-toolbar__margin: 0; 160 | 161 | 162 | 163 | // 164 | // Breadcrumbs variables 165 | // _____________________________________________ 166 | 167 | @breadcrumbs__font-size: 16px; 168 | 169 | // Breadcrumbs - separator symbol 170 | @breadcrumbs-icon__font-size: 24px; 171 | @breadcrumbs-icon__font-line-height: 28px; 172 | 173 | // Current page 174 | //@breadcrumbs-current__color: @color-gray64; 175 | // Link 176 | //@breadcrumbs-link__color: @primary__color; 177 | // Visited 178 | //@breadcrumbs-link__visited__color: @primary__color; 179 | // Hover 180 | //@breadcrumbs-link__hover__color: @primary__color; 181 | // Active 182 | //@breadcrumbs-link__active__color: @primary__color; 183 | 184 | 185 | 186 | // 187 | // Variables 188 | // _____________________________________________ 189 | //@checkout-tooltip-content__background-color: @sidebar__background-color; 190 | 191 | 192 | // 193 | // Pages 194 | // _____________________________________________ 195 | 196 | @pager-label__display: none; 197 | 198 | @pager__font-size: @font-size__m; 199 | @pager__font-weight: @font-weight__semibold; 200 | @pager__line-height: 42px; 201 | @pager-item__margin: 0 20px 20px 0; 202 | @pager-item__padding: 0 17px; 203 | // Page current 204 | @pager-current__color: @text__color; 205 | @pager-current__border: 1px solid @theme__color__secondary; 206 | @pager-current__background: @page__background-color; 207 | // Page item - text color 208 | @pager__color: @text__color; 209 | @pager__hover__color: @text__color; 210 | @pager__active__color: @text__color; 211 | @pager__visited__color: @text__color; 212 | // Page item - border 213 | @pager__border: 1px solid @theme__color__primary-alt; 214 | @pager__hover__border: 1px solid @theme__color__secondary; 215 | // Page item - background 216 | @pager__background: @theme__color__primary-alt; 217 | @pager__hover__background: @theme__color__primary-alt; 218 | // Page action icons 219 | @pager-icon__use: true; 220 | @pager-icon__previous-content: false; 221 | @pager-icon__next-content: false; 222 | @pager-icon__text-hide: false; 223 | // Page action item 224 | @pager-action__color: @theme__color__primary; 225 | @pager-action__hover__color: @pager-action__color; 226 | @pager-action__active__color: @pager-action__color; 227 | @pager-action__visited__color: @pager-action__color; 228 | // Page action - border 229 | @pager-action__border: false; 230 | @pager-action__visited__border: false; 231 | // Page action - background 232 | @pager-action__background: false; 233 | @pager-action__hover__background: none; 234 | @pager-action__active__background: none; 235 | @pager-action__visited__background: none; 236 | 237 | 238 | 239 | -------------------------------------------------------------------------------- /web/css/source/_typography.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Common 8 | // _____________________________________________ 9 | 10 | & when (@media-common = true) { 11 | .lib-font-face( 12 | @family-name: 'Open Sans', 13 | @font-path: '@{baseDir}fonts/opensans/light/opensans-300', 14 | @font-weight: 300, 15 | @font-style: normal, 16 | @font-display: swap 17 | ); 18 | 19 | .lib-font-face( 20 | @family-name: 'Open Sans', 21 | @font-path: '@{baseDir}fonts/opensans/regular/opensans-400', 22 | @font-weight: 400, 23 | @font-style: normal, 24 | @font-display: swap 25 | ); 26 | 27 | .lib-font-face( 28 | @family-name: 'Open Sans', 29 | @font-path: '@{baseDir}fonts/opensans/semibold/opensans-600', 30 | @font-weight: 600, 31 | @font-style: normal, 32 | @font-display: swap 33 | ); 34 | 35 | .lib-font-face( 36 | @family-name: 'Open Sans', 37 | @font-path: '@{baseDir}fonts/opensans/bold/opensans-700', 38 | @font-weight: 700, 39 | @font-style: normal, 40 | @font-display: swap 41 | ); 42 | 43 | .lib-font-face( 44 | @family-name:'Optimized Icons', 45 | @font-path:'@{baseDir}fonts/Optimized/Optimized-Icons', 46 | @font-weight: 400, 47 | @font-style: normal, 48 | @font-display: swap 49 | ); 50 | } 51 | 52 | // 53 | // Desktop 54 | // _____________________________________________ 55 | 56 | .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) { 57 | h1 { 58 | .lib-css(font-size, @h1__font-size-desktop); 59 | .lib-css(margin-bottom, @h1__margin-bottom__desktop); 60 | } 61 | } 62 | 63 | // 64 | // Common 65 | // _____________________________________________ 66 | 67 | & when (@media-common = true) { 68 | .items { 69 | .lib-list-reset-styles(); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /web/css/source/_variables.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Optimized theme variables 8 | // _____________________________________________ 9 | 10 | // 11 | // Typography 12 | // --------------------------------------------- 13 | 14 | // Fonts 15 | @font-family-name__base: 'Open Sans'; 16 | @font-family__base: @font-family-name__base, @font-family__sans-serif; 17 | 18 | // Sizes 19 | @font-size__m: ceil(1.05 * @font-size__base); // 15px 20 | 21 | 22 | // 23 | // Sections variables 24 | // _____________________________________________ 25 | 26 | // 27 | // Tabs 28 | // --------------------------------------------- 29 | //@tab-content__border-top-status: true; 30 | 31 | 32 | // 33 | // Sidebar 34 | // --------------------------------------------- 35 | 36 | // Used in cart sidebar, Checkout sidebar, Tier Prices, My account navigation, Rating block background 37 | //@sidebar__background-color: @color-white-smoke; 38 | //@sidebar__background-color: @theme__color__primary-alt; 39 | -------------------------------------------------------------------------------- /web/css/source/lib/_rating.less: -------------------------------------------------------------------------------- 1 | // /** 2 | // * Copyright © Magefan (support@magefan.com). All rights reserved. 3 | // * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). 4 | // */ 5 | 6 | // 7 | // Ratings 8 | // _____________________________________________ 9 | 10 | // Rating-vote mixin 11 | .lib-rating-vote( 12 | @_icon-count: @rating-icon__count, 13 | @_icon-content: @rating-icon__content, 14 | @_icon-font: @rating-icon__font, 15 | @_icon-font-size: @rating-icon__font-size, 16 | @_icon-letter-spacing: @rating-icon__letter-spacing, 17 | @_icon-color: @rating-icon__color, 18 | @_icon-color-active: @rating-icon__active__color 19 | ) { 20 | overflow: hidden; 21 | 22 | &:before { 23 | ._lib-rating-icon-defalt( 24 | @_icon-font, 25 | @_icon-font-size, 26 | @_icon-letter-spacing, 27 | @_icon-color 28 | ); 29 | .lib-rating-icons-content( 30 | @_icon-count, 31 | @_icon-content 32 | ); 33 | display: block; 34 | position: absolute; 35 | z-index: 1; 36 | } 37 | 38 | input[type="radio"] { 39 | .lib-visually-hidden(); 40 | 41 | &:hover, 42 | &:checked { 43 | + label { 44 | &:before { 45 | opacity: 1; 46 | } 47 | } 48 | } 49 | } 50 | 51 | label { 52 | cursor: pointer; 53 | display: block; 54 | position: absolute; 55 | 56 | span { 57 | .lib-visually-hidden(); 58 | } 59 | 60 | &:before { 61 | ._lib-rating-icon-defalt( 62 | @_icon-font, 63 | @_icon-font-size, 64 | @_icon-letter-spacing, 65 | @_icon-color-active 66 | ); 67 | opacity: 0; 68 | } 69 | 70 | &:hover { 71 | &:before { 72 | opacity: 1; 73 | } 74 | 75 | ~ label { 76 | &:before { 77 | opacity: 0; 78 | } 79 | } 80 | } 81 | } 82 | 83 | ._lib-rating-iteration( 84 | @_icon-content, 85 | @_icon-count 86 | ); 87 | } 88 | 89 | // Rating-summary mixin 90 | .lib-rating-summary( 91 | @_icon-count: @rating-icon__count, 92 | @_icon-content: @rating-icon__content, 93 | @_icon-font: @rating-icon__font, 94 | @_icon-font-size: @rating-icon__font-size, 95 | @_icon-letter-spacing: @rating-icon__letter-spacing, 96 | @_icon-color: @rating-icon__color, 97 | @_icon-color-active: @rating-icon__active__color, 98 | @_label-hide: @rating-label__hide 99 | ) { 100 | overflow: hidden; 101 | white-space: nowrap; 102 | ._lib-rating-label-hide(@_label-hide); 103 | 104 | .rating-result { 105 | .lib-css(width, (@_icon-font-size * @_icon-count) + ceil(@_icon-letter-spacing * (@_icon-count - 1))); 106 | display: inline-block; 107 | position: relative; 108 | vertical-align: middle; 109 | 110 | &:before { 111 | left: 0; 112 | position: absolute; 113 | top: 0; 114 | width: 100%; 115 | z-index: 1; 116 | ._lib-rating-summary-icon-default( 117 | @_icon-font, 118 | @_icon-font-size, 119 | @_icon-letter-spacing, 120 | @_icon-count, 121 | @_icon-content, 122 | @_icon-color 123 | ); 124 | } 125 | 126 | > span { 127 | display: block; 128 | overflow: hidden; 129 | 130 | &:before { 131 | position: relative; 132 | z-index: 2; 133 | ._lib-rating-summary-icon-default( 134 | @_icon-font, 135 | @_icon-font-size, 136 | @_icon-letter-spacing, 137 | @_icon-count, 138 | @_icon-content, 139 | @_icon-color-active 140 | ); 141 | } 142 | 143 | span { 144 | .lib-visually-hidden(); 145 | } 146 | } 147 | } 148 | } 149 | 150 | .lib-rating-summary-label-hide() { 151 | .label { 152 | .lib-visually-hidden(); 153 | } 154 | } 155 | 156 | // Internal use mixins 157 | ._lib-rating-label-hide(@_label-hide) when (@_label-hide = true) { 158 | .lib-rating-summary-label-hide(); 159 | } 160 | 161 | ._lib-rating-iteration( 162 | @_icon-content, 163 | @_icon-count 164 | ) { 165 | .loopingClass (@_index) when (@_index > 0) { 166 | .rating-@{_index} { 167 | z-index: @_icon-count - (@_index - 2); 168 | 169 | &:before { 170 | .lib-rating-icons-content(@_index, @_icon-content); 171 | } 172 | } 173 | // Next iteration 174 | .loopingClass(@_index - 1); 175 | } 176 | 177 | .loopingClass (0) {} 178 | .loopingClass (@_icon-count); 179 | } 180 | 181 | ._lib-rating-icon-defalt( 182 | @_icon-font, 183 | @_icon-font-size, 184 | @_icon-letter-spacing, 185 | @_icon-color 186 | ) { 187 | .lib-css(color, @_icon-color); 188 | .lib-css(font-family, @_icon-font); 189 | .lib-css(font-size, @_icon-font-size); 190 | .lib-css(height, @_icon-font-size); 191 | .lib-css(letter-spacing, @_icon-letter-spacing); 192 | .lib-css(line-height, @_icon-font-size); 193 | font-style: normal; 194 | font-weight: normal; 195 | speak: none; 196 | vertical-align: top; 197 | -webkit-font-smoothing: antialiased; 198 | } 199 | 200 | ._lib-rating-summary-icon-default( 201 | @_icon-font, 202 | @_icon-font-size, 203 | @_icon-letter-spacing, 204 | @_icon-count, 205 | @_icon-content, 206 | @_icon-color 207 | ) { 208 | -webkit-font-smoothing: antialiased; 209 | .lib-css(color, @_icon-color); 210 | .lib-css(font-family, @_icon-font); 211 | .lib-css(font-size, @_icon-font-size); 212 | .lib-css(height, @_icon-font-size); 213 | .lib-css(letter-spacing, @_icon-letter-spacing); 214 | .lib-css(line-height, @_icon-font-size); 215 | .lib-rating-icons-content(@_icon-count, @_icon-content); 216 | display: block; 217 | font-style: normal; 218 | font-weight: normal; 219 | speak: none; 220 | } 221 | 222 | .lib-rating-icons-content( 223 | @_icon-count: @rating-icon__count, 224 | @_icon-content: @rating-icon__content 225 | ) when (@_icon-count > 0) { 226 | .lib-rating-icons-content((@_icon-count - 1),@_icon-content); 227 | content+_: @_icon-content; 228 | } 229 | -------------------------------------------------------------------------------- /web/css/source/variables/_fo_theme_colors.less: -------------------------------------------------------------------------------- 1 | /**/ 2 | -------------------------------------------------------------------------------- /web/fonts/Optimized/Optimized-Theme-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/fonts/Optimized/Optimized-Theme-Icons.eot -------------------------------------------------------------------------------- /web/fonts/Optimized/Optimized-Theme-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/fonts/Optimized/Optimized-Theme-Icons.ttf -------------------------------------------------------------------------------- /web/fonts/Optimized/Optimized-Theme-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/fonts/Optimized/Optimized-Theme-Icons.woff -------------------------------------------------------------------------------- /web/fonts/Optimized/Optimized-Theme-Icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/fonts/Optimized/Optimized-Theme-Icons.woff2 -------------------------------------------------------------------------------- /web/fonts/roboto/Roboto.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/fonts/roboto/Roboto.ttf -------------------------------------------------------------------------------- /web/fonts/roboto/Roboto.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/fonts/roboto/Roboto.woff -------------------------------------------------------------------------------- /web/fonts/roboto/Roboto.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/fonts/roboto/Roboto.woff2 -------------------------------------------------------------------------------- /web/images/arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/images/arrow-right.png -------------------------------------------------------------------------------- /web/images/facebook-f.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/facebook-square-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/images/facebook-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/instagram-square-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/images/instagram-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/instagram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/linkedin-in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/linkedin-square-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/images/linkedin-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magefan/theme-frontend-optimized/8bc79ec50be613e9623088bbb672854f677310ff/web/images/logo.png -------------------------------------------------------------------------------- /web/images/twitter-square-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/images/twitter-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/youtube-square-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /web/images/youtube-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/images/youtube.svg: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------