1<!DOCTYPE html>
2<html lang="ru">
3<head>
4<link rel="preconnect" href="https://mc.yandex.ru">
5<link rel="preconnect" href="https://vk.com">
6<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
7<meta http-equiv="Content-Language" content="ru">
8<meta name="viewport" content="width=device-width, initial-scale=1.0">
9<meta name="theme-color" content="#ffffff">
10<link rel="preload" href="/assets/fonts/fontawesome-webfont.woff2?v=4.7.0" as="font" type="font/woff2" crossorigin="anonymous">
11<style>
12 @font-face { font-family: 'FontAwesome'; font-display: swap; }
13 body { font-display: swap; }
14 .prod .labels-block { z-index: 20 !important; }
15
16 body.modal-open {
17 overflow: auto !important;
18 overflow-y: scroll !important;
19 padding-right: 0 !important;
20 }
21
22 @keyframes shimmer {
23 0% { background-position: -1000px 0; }
24 100% { background-position: 1000px 0; }
25 }
26
27 .cat-item-card-cover {
28 /* Светло-серый фон с градиентным бликом */
29 background: #f6f7f8;
30 background-image: linear-gradient(to right, #f6f7f8 0%, #edeef1 20%, #f6f7f8 40%, #f6f7f8 100%);
31 background-repeat: no-repeat;
32 background-size: 1000px 100%;
33 animation: shimmer 1.5s infinite linear forwards;
34
35 overflow: hidden;
36 position: relative;
37 display: block;
38 }
39
40 .cat-item-cover-img {
41 opacity: 0;
42 transform: scale(1.03); /* Легкий зум */
43 filter: blur(5px); /* Легкое размытие в начале */
44 transition: opacity 0.5s ease-out, transform 0.7s ease-out, filter 0.5s ease-out;
45
46 width: 100%;
47 height: auto;
48 object-fit: contain;
49 display: block;
50 will-change: opacity, transform;
51 }
52
53 .cat-item-cover-img.loaded {
54 opacity: 1;
55 transform: scale(1);
56 filter: blur(0);
57 }
58
59 .cat-item-card-cover.img-loaded {
60 animation: none;
61 background: none;
62 }
63 .topm, .feedback-link br{
64 display:none;
65 }
66 @media all and (min-width:1340px){
67 body a[aria-label="Позвонить нам"]{
68 padding:0 !important;
69 padding-top:15px !important;
70 }
71 .nav .dropdown{
72 display:none;
73 }
74 .feedback-link br{
75 display:block;
76 }
77 .topm{
78 display: flex;
79 flex-flow: wrap;
80 list-style: unset;
81 gap: 5px;
82 margin: 0;
83 padding: 0 12px;
84 float: left;
85 }
86 .topm li {
87 list-style: none;
88 }
89 .topm a {
90 display: flex;
91 flex-flow: column;
92 font-size: 10px;
93 gap: 5px;
94 align-items: center;
95 }
96 .topm .menu-icon{
97 margin-right:0;
98 }
99 .navbar-form.navbar-left{
100 padding:0;
101 }
102 .navbar-form .form-control{
103 max-width:100px;
104 }
105 .navbar-default .navbar-nav>li>a.feedback-link{
106 padding: 0;
107 padding-top: 5px;
108 font-size:12px;
109 text-align:center;
110 }
111 }
112 @media all and (min-width:1510px){
113 .topm{
114 width: 50%;
115 gap:10px;
116 justify-content: space-between;
117 padding: 0 5px;
118 }
119 .topm a {
120 font-size: 10px;
121 }
122 }
123 @media all and (min-width:1610px){
124 .navbar-form .form-control{
125 max-width:none;
126 }
127 }
128 @media all and (min-width:1890px){
129 .topm{
130 width: 54%;
131 gap:10px;
132 justify-content: space-between;
133 }
134 .topm a {
135 font-size: 14px;
136 gap:0;
137 }
138 .topm .menu-icon {
139 width: 31px;
140 }
141 body .navbar-form .form-control {
142 width: 220px;
143 }
144 }
145 @media all and (min-width:1950px){
146 .topm{
147 width: 55%;
148 }
149 }
150 @media all and (min-width:2000px){
151 .topm{
152 width: 56%;
153 }
154 }
155 @media all and (min-width:2100px){
156 .topm{
157 width: 58%;
158 }
159 }
160 </style>
161<title>Распродажа мебели! Большой выбор, низкие цены, доставка, сборка, гарантия.</title>
162<meta name="description" content="У нас распродажа! Весь ассортимент стеллажей «Билли», комодов и тумб «Нордик» и «Йорк» мы продаём с хорошей скидкой! Стиль, добротность, качество, гарантия два года, а теперь ещё и самые низкие цены!">
163<meta name="keywords" content="мебель, кухни, комоды, тумбы, обувницы, прихожие, столы, стулья, шкафы, библиотеки, стенки, спальни, купить, москва, спб">
164<link rel="icon" href="/favicon.ico" type="image/x-icon">
165<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
166<link rel="apple-touch-icon" sizes="180x180" href="/favicon-180x180.png">
167<link rel="icon" sizes="192x192" href="/favicon-192x192.png" type="image/png">
168<link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
169<link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
170<link rel="manifest" href="/manifest.json">
171<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"><link rel="canonical" href="https://komodmsk.ru/cat/sale"/><meta property="og:locale" content="ru_RU">
172<meta property="og:site_name" content="КомодМск — производство и продажа мебели">
173<meta property="og:type" content="website">
174<meta property="og:title" content="Распродажа мебели! Большой выбор, низкие цены, доставка, сборка, гарантия.">
175<meta property="og:description" content="У нас распродажа! Весь ассортимент стеллажей «Билли», комодов и тумб «Нордик» и «Йорк» мы продаём с хорошей скидкой! Стиль, добротность, качество, гарантия два года, а теперь ещё и самые низкие цены!">
176<meta property="og:image" content="https://komodmsk.ru/pages/about/img/hight-quality.jpg">
177<meta property="og:image:alt" content="У нас распродажа! Весь ассортимент стеллажей «Билли», комодов и тумб «Нордик» и «Йорк» мы продаём с хорошей скидкой! Стиль, добротность, качество, гарантия два года, а теперь ещё и самые низкие цены!">
178<style>
179 .slider-top { min-height: 290px; background: #fff; }
180 @media(max-width:600px){ .slider-top { min-height: 180px; } }
181
182 /* Ссылки в тексте - синие и подчеркнутые */
183 .main-article a, .main-intro a { text-decoration: underline !important; color: #0056b3; }
184 .main-article a:hover, .main-intro a:hover { text-decoration: none !important; }
185
186 /* Стрелки навигации - черные */
187 #btn-nav-previous svg, #btn-nav-next svg { fill: #000; }
188
189 /* === ПРАВКИ ДЛЯ ПРОХОЖДЕНИЯ ТЕСТА (Accessibility) === */
190
191 /* 1. Боковое меню: больше отступы */
192 .cat-menu li a {
193 padding-top: 12px !important;
194 padding-bottom: 12px !important;
195 display: block;
196 }
197
198 /* 2. ТЕЛЕФОНЫ: Делаем абсолютно черными и жирными */
199 .navbar-default .navbar-nav > li > a {
200 color: #000000 !important;
201 font-weight: 600 !important;
202 }
203
204 /* 3. ЗАКАЗАТЬ ЗВОНОК: Темно-бордовый цвет (проходит все тесты) */
205 .navbar-nav > li > a.feedback-link {
206 color: #b30000 !important;
207 text-decoration: underline;
208 font-weight: 600 !important;
209 }
210</style>
211<link rel="stylesheet" href="/assets/libs/bootstrap-3.3.7.min.css">
212<link rel="stylesheet" href="/assets/build/build.css?v24442">
213<link rel="stylesheet" href="/assets/css/styles2.css?v422">
214<link rel="stylesheet" href="/assets/libs/fontawesome-4.7.0.min.css" media="print" onload="this.media='all'">
215<noscript><link rel="stylesheet" href="/assets/libs/fontawesome-4.7.0.min.css"></noscript>
216<link rel="stylesheet" href="/assets/libs/select2.min.css" media="print" onload="this.media='all'">
217<noscript><link rel="stylesheet" href="/assets/libs/select2.min.css"></noscript>
218<link rel="stylesheet" href="/assets/libs/owl.carousel.min.css" media="print" onload="this.media='all'">
219<noscript><link rel="stylesheet" href="/assets/libs/owl.carousel.min.css"></noscript>
220<script>
221setTimeout(function() {
222 (function(m,e,t,r,i,k,a){
223 m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
224 m[i].l=1*new Date();
225 k=e.createElement(t),a=e.getElementsByTagName(t)[0];
226 k.async=1;
227 k.src=r;
228 a.parentNode.insertBefore(k,a)
229 })(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
230
231 ym(31590058, "init", {
232 clickmap:false,
233 trackLinks:false,
234 accurateTrackBounce:false,
235 webvisor:false,
236 ecommerce:"dataLayer"
237 });
238}, 1500);
239</script><link rel="preload" href="/assets/libs/jquery-2.2.4.min.js" as="script">
240<script src="/assets/libs/jquery-2.2.4.min.js" fetchpriority="high"></script><script>
241 $(function() {
242 $('#btn-nav-previous').click(function(){
243 $(".menu-inner-box").animate({scrollLeft: "-=100px"});
244 });
245 $('#btn-nav-next').click(function(){
246 $(".menu-inner-box").animate({scrollLeft: "+=100px"});
247 });
248 });
249 </script><script>
250 // Ждем полной загрузки страницы (картинки, стили)
251 window.addEventListener("load", function(){
252 // Ждем еще 2.5 секунды, чтобы браузер "отдохнул"
253 setTimeout(function() {
254 var t=document.createElement("script");
255 t.type="text/javascript";
256 t.async=true;
257 t.src="https://vk.com/js/api/openapi.js?169";
258 t.onload=function(){
259 // Проверка на существование VK, чтобы избежать ошибок
260 if (typeof VK !== 'undefined' && VK.Retargeting) {
261 VK.Retargeting.Init("VK-RTRG-1753336-4SKta");
262 VK.Retargeting.Hit();
263 }
264 };
265 document.head.appendChild(t);
266 }, 2500);
267 });
268 </script>
269</head>
270<body id="body">
271<noscript><img src="https://vk.com/rtrg?p=VK-RTRG-1753336-4SKta" style="position:fixed; left:-999px;" alt="vk"></noscript>
<noindex></noindex><nav class="navbar navbar-default navbar-fixed-top"><div class="container-fluid">
272<div class="navbar-header">
273<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-main-navbar-collapse" aria-expanded="false"><span class="sr-only">Toggle</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="https://komodmsk.ru"><img src="/img/logo-n.png" class="no-lazy" loading="eager" width="160" height="23" decoding="async" alt="KomodMsk.ru — мебельная фабрика и интернет-магазин с доставкой по всей России"></a>
274</div>
275<div class="collapse navbar-collapse" id="bs-main-navbar-collapse">
276<ul class="nav navbar-nav" style="vertical-align:middle;">
277<li><a href="#" class="city-chooser" rel="nofollow"><i class="fas fa-map-marker-alt"></i>
<span class="city-chooser__city js-link">Москва</span></a></li>
278<li class="dropdown">
279<a href="#" class="dropdown-toggle nav-catalog" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Каталог мебели<span class="caret"></span></a><ul class="dropdown-menu">
280<li itemprop="name">
<a href="/cat/sale" itemprop="url" style="color:#cc0000"><img src="/images/cat/1799.svg" width="24" height="24" alt="Распродажа" class="menu-icon">Распродажа</a></li>
281<li itemprop="name"><a href="/cat/../constructor" itemprop="url"><img src="/images/cat/2051.jpg" width="24" height="24" alt="Конструктор" class="menu-icon">Конструктор</a></li>
282<li itemprop="name"><a href="/cat/komody" itemprop="url"><img src="/images/cat/1680.svg" width="24" height="24" alt="Комоды" class="menu-icon">Комоды</a></li>
283<li itemprop="name"><a href="/cat/kuhny" itemprop="url"><img src="/images/cat/2012.svg" width="24" height="24" alt="Кухни" class="menu-icon">Кухни</a></li>
284<li itemprop="name"><a href="/cat/tumby" itemprop="url"><img src="/images/cat/1725.svg" width="24" height="24" alt="Тумбы" class="menu-icon">Тумбы</a></li>
285<li itemprop="name"><a href="/cat/obuvnicy" itemprop="url"><img src="/images/cat/1700.svg" width="24" height="24" alt="Обувницы" class="menu-icon">Обувницы</a></li>
286<li itemprop="name"><a href="/cat/prihozhie" itemprop="url"><img src="/images/cat/1731.svg" width="24" height="24" alt="Прихожие" class="menu-icon">Прихожие</a></li>
287<li itemprop="name"><a href="/cat/stoly" itemprop="url"><img src="/images/cat/1701.svg" width="24" height="24" alt="Столы" class="menu-icon">Столы</a></li>
288<li itemprop="name"><a href="/cat/chairs" itemprop="url"><img src="/images/cat/2042.svg" width="24" height="24" alt="Стулья" class="menu-icon">Стулья</a></li>
289<li itemprop="name"><a href="/cat/shkafy" itemprop="url"><img src="/images/cat/1722.svg" width="24" height="24" alt="Шкафы" class="menu-icon">Шкафы</a></li>
290<li itemprop="name"><a href="/cat/stellazhi" itemprop="url"><img src="/images/cat/1703.svg" width="24" height="24" alt="Стеллажи" class="menu-icon">Стеллажи</a></li>
291<li itemprop="name"><a href="/cat/stenki" itemprop="url"><img src="/images/cat/1743.svg" width="24" height="24" alt="Стенки" class="menu-icon">Стенки</a></li>
292<li itemprop="name"><a href="/cat/mebel-dlya-spalni" itemprop="url"><img src="/images/cat/1749.svg" width="24" height="24" alt="Спальни" class="menu-icon">Спальни</a></li>
293</ul>
294</li>
295</ul>
296<form class="navbar-form navbar-left" name="form1" action="/search.php">
297<div class="form-group"><input type="text" name="q" class="form-control input-sm" placeholder="Поиск по названию или артикулу"></div>
298<button class="btn btn-default btn-sm">Найти</button>
299</form>
300<ul class="topm">
301<li itemprop="name"><a href="/cat/../constructor" itemprop="url"><img src="/images/cat/const.png" width="24" height="24" alt="Конструктор" class="menu-icon">Конструктор</a></li>
302<li itemprop="name"><a href="/cat/komody" itemprop="url"><img src="/images/cat/1680.svg" width="24" height="24" alt="Комоды" class="menu-icon">Комоды</a></li>
303<li itemprop="name"><a href="/cat/tumby" itemprop="url"><img src="/images/cat/1725.svg" width="24" height="24" alt="Тумбы" class="menu-icon">Тумбы</a></li>
304<li itemprop="name"><a href="/cat/stellazhi" itemprop="url"><img src="/images/cat/1703.svg" width="24" height="24" alt="Стеллажи" class="menu-icon">Стеллажи</a></li>
305<li itemprop="name"><a href="/cat/shkafy" itemprop="url"><img src="/images/cat/1722.svg" width="24" height="24" alt="Шкафы" class="menu-icon">Шкафы</a></li>
306<li itemprop="name"><a href="/cat/stenki" itemprop="url"><img src="/images/cat/1743.svg" width="24" height="24" alt="Стенки" class="menu-icon">Стенки</a></li>
307<li itemprop="name"><a href="/cat/prihozhie" itemprop="url"><img src="/images/cat/1731.svg" width="24" height="24" alt="Прихожие" class="menu-icon">Прихожие</a></li>
308<li itemprop="name"><a href="/cat/obuvnicy" itemprop="url"><img src="/images/cat/1700.svg" width="24" height="24" alt="Обувницы" class="menu-icon">Обувницы</a></li>
309<li itemprop="name"><a href="/cat/stoly" itemprop="url"><img src="/images/cat/1701.svg" width="24" height="24" alt="Столы" class="menu-icon">Столы</a></li>
310<li itemprop="name"><a href="/cat/chairs" itemprop="url"><img src="/images/cat/2042.svg" width="24" height="24" alt="Стулья" class="menu-icon">Стулья</a></li>
311<li itemprop="name"><a href="/cat/kuhny" itemprop="url"><img src="/images/cat/2012.svg" width="24" height="24" alt="Кухни" class="menu-icon">Кухни</a></li>
312<li itemprop="name"><a href="/cat/mebel-dlya-spalni" itemprop="url"><img src="/images/cat/1749.svg" width="24" height="24" alt="Спальни" class="menu-icon">Спальни</a></li>
313<li itemprop="name"><a href="/cat/sale" itemprop="url" style="color:#cc0000"><img src="/images/cat/1799.svg" width="24" height="24" alt="Распродажа" class="menu-icon">Распродажа</a></li>
314</ul>
315<ul class="nav navbar-nav navbar-right">
316<li>
<a rel="nofollow" class="feedback-link" href="/feedback/form" target="_blank">Заказать<br> звонок</a></li>
317<li><a href="https://t.me/+79915674335" rel="nofollow" aria-label="Написать нам в Telegram">
<i class="fa fa-telegram nav-msg-img" target="_blank" aria-hidden="true"></i></a></li>
318<li>
<a href="tel:88002002327" class="" rel="nofollow" aria-label="Позвонить нам">
<i class="fa fa-phone nav-msg-img" target="_blank" aria-hidden="true"></i>8 800 200–23–27</a></li>
319<li>
<noindex><div class="main-basket">
320<div class="main-basket-row">
321<a href="/basket/list" rel="nofollow" aria-label="Перейти в корзину" style="display:block;width:100%;height:100%;cursor:pointer;"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" class="svg-shop" viewBox="0 484 516 516" enable-background="new 0 484 516 516" xml:space="preserve">
322
323 <polyline fill="none" stroke-width="30" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points=" 26.9,577.6 114,621.8 201.9,886.7 "></polyline>
324
325 <circle fill="none" stroke-width="30" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="218" cy="933.2" r="44.8"></circle>
326
327 <line fill="none" stroke-width="30" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="262.1" y1="918.1" x2="486.9" y2="844.2"></line>
328 <path fill="none" stroke-width="30" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d=" M462.3,790.1l-206,67.2c-0.5,0.2-1-0.1-1.2-0.6l-67.2-206c-0.2-0.5,0.1-1,0.6-1.2l206-67.2c0.5-0.2,1,0.1,1.2,0.6l67.2,206 C463,789.4,462.8,789.9,462.3,790.1z"></path>
329
330 <line fill="none" stroke-width="30" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="312.3" y1="680.1" x2="291.8" y2="618.4"></line>
331 </svg></a><a id="basket_items_title"><span class="no-products-text"></span><span id="basket_items_txt" style="display:none;">товаров: 0</span></a>
332</div>
333<div class="main-basket-list">
334<div class="js-basket-list-container-top"></div>
335<center class="to-basket" style="display:none;"><a rel="/basket/list" href="/basket/list" class="btn btn-yellow-inline btn-lg" style="margin-right:0!important;">
336 Перейти в корзину
337 </a></center>
338</div>
339</div></noindex></li>
340</ul>
341</div>
342</div></nav><div class="main-block container-fluid"><div class="row" style="margin-right: unset;margin-left: unset;"><div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" style="padding-right:0px;padding-left:0px;background: white;box-shadow: 0 3px 1px rgba(0, 0, 0, .05), 0 2px 0 rgba(0, 0, 0, .05), 0 1px 0 rgba(0, 0, 0, .05);"><div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" style="padding-left: 0px;padding-right: 0px;"><div class="main-content">
343<nav id="menu-container" class="arrow"><div id="btn-nav-previous"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></div>
344<div id="btn-nav-next"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></div>
345<div class="menu-inner-box"><div class="menu">
346<a href="/cat/sale" class="menu-item" itemprop="url" style="color:#cc0000">Распродажа</a>
<a href="/cat/../constructor" class="menu-item" itemprop="url">Конструктор</a>
<a href="/cat/komody" class="menu-item" itemprop="url">Комоды</a>
<a href="/cat/kuhny" class="menu-item" itemprop="url">Кухни</a>
<a href="/cat/tumby" class="menu-item" itemprop="url">Тумбы</a>
<a href="/cat/obuvnicy" class="menu-item" itemprop="url">Обувницы</a>
<a href="/cat/prihozhie" class="menu-item" itemprop="url">Прихожие</a>
<a href="/cat/stoly" class="menu-item" itemprop="url">Столы</a>
<a href="/cat/chairs" class="menu-item" itemprop="url">Стулья</a>
<a href="/cat/shkafy" class="menu-item" itemprop="url">Шкафы</a>
<a href="/cat/stellazhi" class="menu-item" itemprop="url">Стеллажи</a>
<a href="/cat/stenki" class="menu-item" itemprop="url">Стенки</a>
<a href="/cat/mebel-dlya-spalni" class="menu-item last-item" itemprop="url">Спальни</a>
347</div></div></nav>
<div class="breadcrumbs" itemscope="itemscope" itemtype="//schema.org/BreadcrumbList">
348<span itemscope="itemscope" itemprop="itemListElement" itemtype="http://schema.org/ListItem"><meta itemprop="position" content="1">
349<a href="/" itemprop="item">
<span itemprop="name" class="breadcrumb-item">Главная</span></a></span>
350 /
351 <span itemscope="itemscope" itemprop="itemListElement" itemtype="http://schema.org/ListItem"><meta itemprop="position" content="2">
352<a href="/cat/sale" itemprop="item">
<span class="breadcrumb-item" itemprop="name">Распродажа</span></a></span>
353 /
354 <span class="breadcrumb-item"></span>
355</div>
356<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper/swiper-bundle.min.css">
357<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/swiper@9.1.1/swiper-bundle.min.js"></script>
<script type="text/javascript" src="/assets/js/card-swiper.js"></script><link rel="stylesheet" href="/assets/css/cat.css">
358<style>
359 @keyframes shimmer {
360 0% { background-position: -1000px 0; }
361 100% { background-position: 1000px 0; }
362 }
363
364 .cat-item-card-cover {
365 background: #f6f7f8;
366 background-image: linear-gradient(to right, #f6f7f8 0%, #edeef1 20%, #f6f7f8 40%, #f6f7f8 100%);
367 background-repeat: no-repeat;
368 background-size: 1000px 100%;
369 animation: shimmer 1.5s infinite linear forwards;
370 overflow: hidden;
371 position: relative;
372 display: block;
373 }
374
375 .cat-item-card-cover.img-loaded {
376 animation: none;
377 background: none;
378 }
379
380 .cat-item-cover-img {
381 opacity: 0;
382 transform: scale(1.03);
383 filter: blur(5px);
384 transition: opacity 0.5s ease-out, transform 0.7s ease-out, filter 0.5s ease-out;
385 width: 100%;
386 height: auto;
387 object-fit: contain;
388 display: block;
389 will-change: opacity, transform;
390 }
391
392 .cat-item-cover-img.loaded {
393 opacity: 1;
394 transform: scale(1);
395 filter: blur(0);
396 }
397
398 .cat-items.row {
399 min-height: 800px;
400 position: relative;
401 }
402
403 .pagination-wrapper {
404 position: -webkit-sticky;
405 position: sticky;
406 bottom: 0;
407 z-index: 990;
408 background: rgba(255, 255, 255, 0.98);
409 border-top: 1px solid #e5e5e5;
410 padding: 12px 0;
411 width: 100%;
412 box-shadow: 0 -4px 20px rgba(0,0,0,0.04);
413 display: flex;
414 justify-content: center;
415 align-items: center;
416 }
417
418 .pagination {
419 display: flex !important;
420 justify-content: center;
421 align-items: center;
422 flex-wrap: wrap;
423 margin: 0 !important;
424 padding: 0 !important;
425 float: none !important;
426 gap: 6px;
427 }
428
429 .pagination li {
430 display: block !important;
431 padding: 0 !important;
432 margin: 0 !important;
433 border: none !important;
434 background: none !important;
435 float: none !important;
436 }
437
438 .pagination li a {
439 display: flex;
440 align-items: center;
441 justify-content: center;
442 height: 40px;
443 min-width: 40px;
444 padding: 0 12px !important;
445 font-family: 'Montserrat', sans-serif;
446 font-size: 15px !important;
447 font-weight: 600;
448 color: #333 !important;
449 text-decoration: none !important;
450 background: #fff;
451 border: 1px solid #e0e0e0;
452 border-radius: 6px;
453 transition: all 0.2s ease;
454 }
455
456 .pagination li a:hover {
457 border-color: #ffda44;
458 background-color: #fffdf0;
459 color: #000 !important;
460 transform: translateY(-1px);
461 }
462
463 .pagination li.active a {
464 background-color: #ffda44 !important;
465 border-color: #ffda44 !important;
466 color: #000 !important;
467 pointer-events: none;
468 }
469
470 .pagination li.copy a {
471 background-color: #f8f9fa;
472 }
473
474 .pagination li.disabled a {
475 opacity: 0.4;
476 cursor: default;
477 pointer-events: none;
478 }
479
480 .pagination li.hidden { display: none; }
481
482 @keyframes fadeInUpCard {
483 0% {
484 opacity: 0;
485 transform: translateY(40px);
486 }
487 100% {
488 opacity: 1;
489 transform: translateY(0);
490 }
491 }
492
493 .cat-item-card.newly-added {
494 opacity: 0;
495 animation: fadeInUpCard 0.6s ease-out forwards;
496 }
497/* === PREMIUM THIN PROGRESS LINE (NEWS STYLE) === */
498 @media (max-width: 768px) {
499
500 /* 1. ТОВАРЫ - ОДИН СТОЛБЕЦ (Без изменений, оставляем как было красиво) */
501 .cat-items.row,
502 .catalogue-products.row {
503 display: block !important;
504 width: 100% !important;
505 margin: 0 !important;
506 padding: 0 10px !important;
507 box-sizing: border-box !important;
508 }
509
510 .cat-item-card,
511 .product-col,
512 .catalog-col,
513 .col-xs-12 {
514 width: 100% !important;
515 max-width: 100% !important;
516 display: block !important;
517 float: none !important;
518 margin: 0 0 35px 0 !important;
519 padding: 0 !important;
520 height: auto !important;
521 }
522
523 .cat-item-card-cover-block,
524 .product-col img {
525 margin: 0 auto !important;
526 display: block !important;
527 }
528
529 /* 2. СКРЫВАЕМ СТАРУЮ ПАГИНАЦИЮ */
530 .pagination-wrapper {
531 display: none !important;
532 }
533
534 /* 3. НОВАЯ ТОНКАЯ ЛИНИЯ */
535 #progress-line-container {
536 position: fixed;
537 bottom: 0;
538 left: 0;
539 width: 100%;
540 height: 5px; /* Толщина линии */
541 background: transparent; /* Фон прозрачный */
542 z-index: 99999; /* Поверх всего */
543 display: block !important;
544 pointer-events: none; /* Чтобы сквозь нее можно было кликать */
545 }
546
547 #progress-line-bar {
548 height: 100%;
549 background: #ffda44; /* Ваш желтый брендовый */
550 width: 0%;
551 box-shadow: 0 0 10px rgba(255, 218, 68, 0.7); /* Легкое свечение */
552 transition: width 0.1s linear; /* Плавность */
553 border-top-right-radius: 4px;
554 border-bottom-right-radius: 4px;
555 }
556 }
557
558 /* Скрываем на ПК */
559 #progress-line-container {
560 display: none;
561 }
562 </style>
563<div itemscope="" itemtype="https://schema.org/ItemList">
564<meta itemprop="name" content="Распродажа">
565<meta itemprop="numberOfItems" content="0">
566<div class="content-item"><div class="cat-heading">
<h1 class="h1">Распродажа в Москве</h1><span class="cat-total">
<sup>0</sup></span>
567</div></div>
568<div class="col-md-2">
<filter><filter><link rel="stylesheet" href="/assets/js/ion.rangeSlider/css/ion.rangeSlider.css">
569 <link rel="stylesheet" href="/assets/js/ion.rangeSlider/css/ion.rangeSlider.skinFlat.css">
570 <link rel="stylesheet" href="/assets/css/filters.css">
571 <script src="/assets/js/ion.rangeSlider/js/ion.rangeSlider.min.js"></script>
572 <script src="/assets/js/filters.js"></script>
573 <form class="fltr-form fltr-form-hidden">
574 <div class="sorting-filter">
575
<span class="compact-mode-hide">
576 Сортировка:
577 </span>
578 <div class="btn-group btn-group-toggle btn-group-sorting">
579 <div data-toggle="dropdown" class="btn btn-sm btn-default dropdown-toggle" aria-expanded="true">
580
<span>По популярности</span>
581 <i class="caret"></i>
582 </div>
583 <ul class="dropdown-menu">
584<li>
585
<a href="#" onclick="filterSortBy('По популярности', 'popular', 'asc');return false;">
586 По популярности
587 </a>
588 </li>
589<li>
590
<a href="#" onclick="filterSortBy('Сначала дешевле', 'price', 'asc');return false;">
591 Сначала дешевле
592 </a>
593 </li>
594<li>
595
<a href="#" onclick="filterSortBy('Сначала дороже', 'price', 'desc');return false;">
596 Сначала дороже
597 </a>
598 </li>
599<li>
600
<a href="#" onclick="filterSortBy('Название А — Я', 'model', 'asc');return false;">
601 Название А — Я
602 </a>
603 </li>
604<li>
605
<a href="#" onclick="filterSortBy('Название Я — А', 'model', 'desc');return false;">
606 Название Я — А
607 </a>
608 </li>
609<li>
610
<a href="#" onclick="filterSortBy('Сначала узкие', '187', 'asc');return false;">
611 Сначала узкие
612 </a>
613 </li>
614<li>
615
<a href="#" onclick="filterSortBy('Сначала широкие', '187', 'desc');return false;">
616 Сначала широкие
617 </a>
618 </li>
619<li>
620
<a href="#" onclick="filterSortBy('Сначала низкие', '188', 'asc');return false;">
621 Сначала низкие
622 </a>
623 </li>
624<li>
625
<a href="#" onclick="filterSortBy('Сначала высокие', '188', 'desc');return false;">
626 Сначала высокие
627 </a>
628 </li>
629<li>
630
<a href="#" onclick="filterSortBy('Сначала неглубокие', '189', 'asc');return false;">
631 Сначала неглубокие
632 </a>
633 </li>
634<li>
635
<a href="#" onclick="filterSortBy('Сначала глубокие', '189', 'desc');return false;">
636 Сначала глубокие
637 </a>
638 </li>
639</ul>
640 </div>
641 <input type="hidden" id="f-order" name="order" value="popular">
642 <input type="hidden" id="f-order_pos" name="order_pos" value="asc">
643 </div>
644<span class="compact-mode-hide fltr-title" style="display: inline-block;float: left;margin: 2px 5px 0 0;">
645 Фильтр:
646 </span>
647 <span class="filter-color-selector-wrapper">
648 <div class="btn-group btn-group-toggle filter-color-selector">
649 <button type="button" class="btn btn-sm btn-warning dropdown-toggle" data-toggle="dropdown" style="margin-right: 2px;">
650 <span class="compact-mode-hide">Фильтр по цветам </span>
651 <span class="compact-mode-show">Цвета </span>
652 <span class="caret"></span>
653 </button>
654 <ul class="dropdown-menu colors-dropdown"><li class="filter-color-selector-container"></ul>
655 </div>
656 </span>
657 <input type="hidden" name="f-colors" id="f-colors" value="">
658 <span class="filter-colors-selected"></span>
659
<div class="btn btn-warning btn-sm show-fltr-form-btn" style="margin: 0 1em 1em 0;float: left;">
660 Показать фильтры
661 </div>
662 <div class="fltrs">
663 <div class="row">
664 <div class="col-md-6 col-lg-3 fltr-attr-wr">
665
<div class="filter-name">
666 По цене, р.:
667 </div>
668 <div class="fltr-int-range-wr">
669
<input type="text" value="-to-" id="fprice-range" name="fprice" class="fltr-input fltr-int-range">
670 </div>
671 </div>
672 <script>
673 (function($) {
674 $(function() {
675 FILTER_INITIALIZATORS.push(function(){
676 $("#fprice-range").ionRangeSlider({
677 type: "double",
678 input_values_separator: "-to-",
679 disable: true,
680 min: 0,
681 max: 0,
682 prettify: function (num) {
683 return num;
684 }
685 });
686 });
687 });
688 })(jQuery);
689 </script>
690 <div class="col-md-6 col-lg-3 fltr-attr-wr">
691
<div class="filter-name">
692 Глубина, см:
693 </div>
694 <div class="fltr-int-range-wr">
695
<input type="text" value="0-to-0" id="f189-range" name="f189" class="fltr-input fltr-int-range">
696 </div>
697 </div>
698 <script>
699 (function($) {
700 $(function() {
701 FILTER_INITIALIZATORS.push(function(){
702 $("#f189-range").ionRangeSlider({
703 type: "double",
704 input_values_separator: "-to-",
705 disable: true,
706 min: 0,
707 max: 0,
708 prettify: function (num) {
709 return parseFloat(num / 10);
710 }
711 });
712 });
713 });
714 })(jQuery);
715 </script>
716 <div class="col-md-6 col-lg-3 fltr-attr-wr">
717
<div class="filter-name">
718 Высота, см:
719 </div>
720 <div class="fltr-int-range-wr">
721
<input type="text" value="0-to-0" id="f188-range" name="f188" class="fltr-input fltr-int-range">
722 </div>
723 </div>
724 <script>
725 (function($) {
726 $(function() {
727 FILTER_INITIALIZATORS.push(function(){
728 $("#f188-range").ionRangeSlider({
729 type: "double",
730 input_values_separator: "-to-",
731 disable: true,
732 min: 0,
733 max: 0,
734 prettify: function (num) {
735 return parseFloat(num / 10);
736 }
737 });
738 });
739 });
740 })(jQuery);
741 </script>
742 <div class="col-md-6 col-lg-3 fltr-attr-wr">
743
<div class="filter-name">
744 Ширина, см:
745 </div>
746 <div class="fltr-int-range-wr">
747
<input type="text" value="0-to-0" id="f187-range" name="f187" class="fltr-input fltr-int-range">
748 </div>
749 </div>
750 <script>
751 (function($) {
752 $(function() {
753 FILTER_INITIALIZATORS.push(function(){
754 $("#f187-range").ionRangeSlider({
755 type: "double",
756 input_values_separator: "-to-",
757 disable: true,
758 min: 0,
759 max: 0,
760 prettify: function (num) {
761 return parseFloat(num / 10);
762 }
763 });
764 });
765 });
766 })(jQuery);
767 </script>
768</div>
769<div class="form-group">
770 <button class="btn btn-warning btn-sm submit-filter-btn">Применить фильтры</button>
771
<a class="btn btn-link btn-sm" href="/cat/sale">
772 Сбросить
773 </a>
774
<a class="btn btn-link btn-sm hide-fltr-form-btn">
775 Скрыть фильтры
776 </a>
777 </div>
778</div>
779 </form></filter></filter></div>
780<div class="col-md-8"><div class="note note-info">
781<h2>К сожалению, этих товаров временно нет:(</h2>
782<h3>Заходите почаще, чтобы быть в курсе!</h3>
783</div></div>
784<div class="col-md-2">
785<div class="cat-main-text"></div>
786<div class="cat-main-text"><div class="sale">
<h2>Время покупать мебель сканди!</h2>
<p>Если вы приглядывались к качественной и стильной мебели и мечтали не только сэкономить, но и идеально вписать её в свой интерьер, вы оказались в нужном месте в нужное время!</p>
<p>Смотрите — у нас отличный выбор мебели с хорошей скидкой для людей со вкусом!</p>
<p>Сканди-мебель — строгая, функциональная, удобная, бесшумная, продуманная до мелочей, и эта классика в безупречном стиле окажется в вашем доме в любом из десятков цветов корпусов и фасадов, которые вы легко подберёте на нашем сайте. Не нуждающиеся в отдельном представлении модели ушедшей ИКЕА, корпусная мебель высочайшего качества и проверенная временем, комоды, стеллажи, тумбы — всё это по самым низким ценам.</p>
<p>Мы можем себе позволить порадовать вас, позвольте и вы себе добротную, красивую мебель, которая добавит уюта вашему дому на долгие годы!</p>
<p>Мы делаем мебель с 2002 года и гордимся тем, что умеем делать мебель лучше других.</p>
<p>Выбирайте, заказывайте, звоните, а мы привезём и соберём у вас дома эту прекрасную мебель.</p></div></div>
787</div>
788</div>
789<script>
790document.addEventListener("DOMContentLoaded", function() {
791 var containerSelector = '.cat-items.row';
792 var itemSelector = '.cat-item-card';
793 var paginationBlockSelector = '.pagination-wrapper';
794
795 var urlParams = new URLSearchParams(window.location.search);
796 var startPage = parseInt(urlParams.get('page'));
797 if (!startPage || startPage < 1) startPage = 1;
798
799 var minLoadedPage = startPage;
800 var maxLoadedPage = startPage;
801 var isLoading = false;
802 var scrollTimeout;
803
804 var paginationCache = {};
805 var currentPagEl = document.querySelector(paginationBlockSelector);
806 if (currentPagEl) {
807 paginationCache[startPage] = currentPagEl.innerHTML;
808 }
809
810 var initialItems = document.querySelectorAll(itemSelector);
811 for (var i = 0; i < initialItems.length; i++) {
812 initialItems[i].setAttribute('data-page', startPage);
813 }
814
815 var h1 = document.querySelector('h1');
816 if (h1) {
817 h1.innerHTML = h1.innerHTML.replace(/([.,-—])?\s*Страница\s*\d+/i, '').trim();
818 }
819
820 var originalTitle = document.title.replace(/ - Страница \d+/i, '').replace(/ - Page \d+/i, '');
821 var metaDescTag = document.querySelector('meta[name="description"]');
822 var originalDesc = "";
823 if (metaDescTag) {
824 originalDesc = metaDescTag.getAttribute('content').replace(/ - Страница \d+/i, '');
825 }
826
827 function updateState() {
828 if (window.scrollY < 100) {
829 setPageActive(minLoadedPage);
830 return;
831 }
832
833 var items = document.querySelectorAll(itemSelector);
834 var viewportHeight = window.innerHeight;
835
836 var pageWeights = {};
837
838 for (var i = 0; i < items.length; i++) {
839 var item = items[i];
840 var rect = item.getBoundingClientRect();
841
842 var visibleTop = Math.max(0, rect.top);
843 var visibleBottom = Math.min(viewportHeight, rect.bottom);
844 var visibleHeight = Math.max(0, visibleBottom - visibleTop);
845
846 if (visibleHeight > 0) {
847 var p = parseInt(item.getAttribute('data-page'));
848 if (p) {
849 if (!pageWeights[p]) pageWeights[p] = 0;
850 pageWeights[p] += visibleHeight;
851 }
852 }
853 }
854
855 var bestPage = -1;
856 var maxWeight = 0;
857 for (var key in pageWeights) {
858 if (pageWeights[key] > maxWeight) {
859 maxWeight = pageWeights[key];
860 bestPage = parseInt(key);
861 }
862 }
863
864 if (bestPage !== -1) {
865 setPageActive(bestPage);
866 }
867 }
868
869 function setPageActive(page) {
870 var currentUrlPage = parseInt(new URLSearchParams(window.location.search).get('page'));
871 if (!currentUrlPage) currentUrlPage = 1;
872
873 if (page !== currentUrlPage) {
874 var newUrl = new URL(window.location);
875 if (page === 1) newUrl.searchParams.delete('page');
876 else newUrl.searchParams.set('page', page);
877 window.history.replaceState(null, null, newUrl);
878
879 var suffix = (page > 1) ? (' - Страница ' + page) : '';
880 document.title = originalTitle + suffix;
881 if (metaDescTag) {
882 metaDescTag.setAttribute('content', originalDesc + suffix);
883 }
884
885 if (paginationCache[page]) {
886 var pagWrapper = document.querySelector(paginationBlockSelector);
887 if (pagWrapper && pagWrapper.innerHTML !== paginationCache[page]) {
888 pagWrapper.innerHTML = paginationCache[page];
889 }
890 }
891
892 var allActive = document.querySelectorAll('.pagination li.active');
893 for(var k=0; k < allActive.length; k++) allActive[k].classList.remove('active');
894
895 var activeLink = document.querySelector('.pagination li.number a[data-pagenumber="' + page + '"]');
896 if (activeLink) activeLink.parentElement.classList.add('active');
897 }
898 }
899
900 function loadNext() {
901 if (isLoading) return;
902
903 var nextPage = maxLoadedPage + 1;
904 var lastPagHtml = paginationCache[maxLoadedPage];
905 if (!lastPagHtml && document.querySelector(paginationBlockSelector)) {
906 lastPagHtml = document.querySelector(paginationBlockSelector).innerHTML;
907 }
908 if (!lastPagHtml) return;
909
910 var tempDiv = document.createElement('div');
911 tempDiv.innerHTML = lastPagHtml;
912
913 var nextLink = tempDiv.querySelector('.pagination li.next:not(.disabled) a');
914 if (!nextLink || nextLink.innerText.trim() === '...') return;
915
916 var nextUrl = nextLink.getAttribute('href');
917 if (!nextUrl || nextUrl === '#') return;
918
919 isLoading = true;
920 var container = document.querySelector(containerSelector);
921
922 var request = new XMLHttpRequest();
923 request.open('GET', nextUrl, true);
924
925 request.onload = function() {
926 if (this.status >= 200 && this.status < 400) {
927 var parser = new DOMParser();
928 var doc = parser.parseFromString(this.response, 'text/html');
929 var newItems = doc.querySelectorAll(containerSelector + ' ' + itemSelector);
930
931 if (newItems.length > 0) {
932 maxLoadedPage++;
933 var newPagEl = doc.querySelector(paginationBlockSelector);
934 if(newPagEl) paginationCache[nextPage] = newPagEl.innerHTML;
935
936 for (var i = 0; i < newItems.length; i++) {
937 var item = newItems[i];
938 item.setAttribute('data-page', nextPage);
939 item.classList.add('newly-added');
940 item.style.animationDelay = (i * 0.05) + 's';
941 container.appendChild(item);
942
943 var lazyImgs = item.querySelectorAll('img[loading="lazy"], img.js-lazy-src');
944 for(var j=0; j < lazyImgs.length; j++) {
945 if(lazyImgs[j].dataset.src) lazyImgs[j].src = lazyImgs[j].dataset.src;
946 }
947 }
948 updateState();
949 }
950 }
951 isLoading = false;
952 };
953 request.onerror = function() { isLoading = false; };
954 request.send();
955 }
956
957 function loadPrev() {
958 if (isLoading) return;
959 if (minLoadedPage <= 1) return;
960
961 var prevPage = minLoadedPage - 1;
962 var firstPagHtml = paginationCache[minLoadedPage];
963 if (!firstPagHtml && document.querySelector(paginationBlockSelector)) {
964 firstPagHtml = document.querySelector(paginationBlockSelector).innerHTML;
965 }
966
967 var tempDiv = document.createElement('div');
968 tempDiv.innerHTML = firstPagHtml;
969 var prevLink = tempDiv.querySelector('.pagination li.previous:not(.disabled) a');
970
971 var prevUrl = "";
972 if (prevLink) prevUrl = prevLink.getAttribute('href');
973 else {
974 var path = window.location.pathname;
975 if (prevPage > 1) prevUrl = path + '?page=' + prevPage;
976 else prevUrl = path;
977 }
978
979 isLoading = true;
980 var container = document.querySelector(containerSelector);
981 var prevH = container.scrollHeight;
982 var prevScroll = window.scrollY;
983
984 var request = new XMLHttpRequest();
985 request.open('GET', prevUrl, true);
986
987 request.onload = function() {
988 if (this.status >= 200 && this.status < 400) {
989 var parser = new DOMParser();
990 var doc = parser.parseFromString(this.response, 'text/html');
991 var newItems = doc.querySelectorAll(containerSelector + ' ' + itemSelector);
992
993 if (newItems.length > 0) {
994 minLoadedPage--;
995 var newPagEl = doc.querySelector(paginationBlockSelector);
996 if(newPagEl) paginationCache[prevPage] = newPagEl.innerHTML;
997
998 for (var i = newItems.length - 1; i >= 0; i--) {
999 var item = newItems[i];
1000 item.setAttribute('data-page', prevPage);
1001 container.insertBefore(item, container.firstChild);
1002
1003 var lazyImgs = item.querySelectorAll('img[loading="lazy"], img.js-lazy-src');
1004 for(var j=0; j < lazyImgs.length; j++) {
1005 if(lazyImgs[j].dataset.src) lazyImgs[j].src = lazyImgs[j].dataset.src;
1006 }
1007 }
1008
1009 var newH = container.scrollHeight;
1010 window.scrollTo(0, prevScroll + (newH - prevH));
1011 updateState();
1012 }
1013 }
1014 isLoading = false;
1015 };
1016 request.onerror = function() { isLoading = false; };
1017 request.send();
1018 }
1019
1020 var tick = false;
1021 window.addEventListener('scroll', function() {
1022 if (!tick) {
1023 window.requestAnimationFrame(function() {
1024 var container = document.querySelector(containerSelector);
1025 if (container) {
1026 var rect = container.getBoundingClientRect();
1027
1028 if (rect.bottom <= window.innerHeight + 2000) loadNext();
1029 if (window.scrollY < 400 && minLoadedPage > 1) loadPrev();
1030
1031 updateState();
1032 }
1033 tick = false;
1034 });
1035 tick = true;
1036 }
1037 });
1038
1039 updateState();
1040});
1041</script><div id="progress-line-container"><div id="progress-line-bar"></div></div>
1042<script type="text/javascript">
1043 var totalItemsGlobal = 0;
1044
1045 document.addEventListener("DOMContentLoaded", function() {
1046 var progressBar = document.getElementById('progress-line-bar');
1047
1048 // Основная функция расчета
1049 function updateScrollProgress() {
1050 if (!progressBar) return;
1051
1052 // 1. Сколько проскроллили на ТЕКУЩЕЙ странице (от 0 до 1)
1053 var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
1054 var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
1055 var scrolledPercent = 0;
1056
1057 if (height > 0) {
1058 scrolledPercent = winScroll / height;
1059 }
1060
1061 // 2. Сколько товаров загружено относительно общего числа (от 0 до 1)
1062 var items = document.querySelectorAll('.cat-item-card, .product-col');
1063 var loadedCount = items.length;
1064
1065 // Защита от деления на ноль
1066 if (totalItemsGlobal < 1) totalItemsGlobal = 1;
1067
1068 var loadedRatio = loadedCount / totalItemsGlobal;
1069 if (loadedRatio > 1) loadedRatio = 1;
1070
1071 // 3. ИТОГОВАЯ ФОРМУЛА:
1072 // Мы умножаем текущий скролл на долю загруженного.
1073 // Пример: Скролл в самом низу (1.0) * Загружено полкаталога (0.5) = Полоска на 50% экрана.
1074 var finalWidth = (scrolledPercent * loadedRatio) * 100;
1075
1076 // Минимальная видимость (чтобы было видно, что бар есть)
1077 if (finalWidth < 1 && loadedCount > 0) finalWidth = 1;
1078
1079 progressBar.style.width = finalWidth + "%";
1080 }
1081
1082 // Слушаем скролл
1083 window.addEventListener('scroll', updateScrollProgress, {passive: true});
1084 window.addEventListener('resize', updateScrollProgress);
1085
1086 // Слушаем изменения DOM (когда подгрузились новые товары)
1087 var container = document.querySelector('.cat-items.row') || document.querySelector('.catalogue-products');
1088 if (container && window.MutationObserver) {
1089 var observer = new MutationObserver(function() {
1090 // Даем небольшую задержку, чтобы браузер пересчитал высоту страницы
1091 setTimeout(updateScrollProgress, 100);
1092 });
1093 observer.observe(container, { childList: true, subtree: true });
1094 }
1095
1096 // Инициализация
1097 updateScrollProgress();
1098 });
1099 </script>
1100</div></div></div></div></div>
1101<footer class="footer-m"><div class="x_menu_list">
1102<div class="x_menu_col footer-logo-col">
1103<div itemscope="" itemtype="https://schema.org/ImageObject" class="footer-logo-cell">
1104<meta itemprop="url" content="/assets/img/logo-w.png">
1105<a href="https://komodmsk.ru"><img src="/assets/img/logo-w.png" alt="КомодМск" title="КомодМск" width="120" height="17" itemprop="url" loading="lazy" class="footer-logo"></a>
1106</div>
1107<div class="footer-time">10:00 — 20:00</div>
1108<div class="copy" itemscope="" itemtype="https://schema.org/CreativeWork">
1109© <span itemprop="copyrightHolder"> КомодМск</span> <span itemprop="copyrightYear">2002–2026</span>
1110</div>
1111</div>
1112<div class="x_menu_col">
1113<div class="footer-phone">
1114<img src="/assets/img/phone.svg" width="18" height="16" alt="Телефон" loading="lazy"><a href="tel:88002002327" title="Бесплатно по России">8 800 200–23–27</a>
1115</div>
1116<div class="footer-phone">
1117<img src="/assets/img/phone.svg" width="18" height="16" alt="Телефон" loading="lazy"><a href="tel:+74994033617" title="Москва">+7 (499) 403–36–17</a>
1118</div>
1119<div class="footer-phone">
1120<img src="/assets/img/phone.svg" width="18" height="16" alt="Телефон" loading="lazy"><a href="tel:+78122411743" title="Санкт-Петербург">+7 (812) 241–17–43</a>
1121</div>
1122<div class="footer-email">
1123<img src="/assets/img/email.svg" width="18" height="16" alt="Email" loading="lazy"><a href="mailto:">zakaz@komodmsk.ru</a>
1124</div>
1125<div class="footer-phone">
1126<img src="/assets/img/wa.svg" width="18" height="16" alt="WhatsApp" loading="lazy"><a href="https://api.whatsapp.com/send?phone=79915674335" rel="nofollow">Написать в WhatsApp</a>
1127</div>
1128<div class="footer-phone">
1129<img src="/assets/img/tg.svg" width="18" height="16" alt="Telegram" loading="lazy"><a href="https://t.me/+79915674335" rel="nofollow">Написать в Telegram</a>
1130</div>
1131</div>
1132<ul class="x_menu_col" itemscope="" itemtype="https://schema.org/SiteNavigationElement">
1133<li class="x_menu_title" itemprop="name">Каталог</li>
1134<li class="x_menu_item" itemprop="name">
<a href="/cat/sale" rel="nofollow">Распродажа</a></li>
1135<li class="x_menu_item" itemprop="name">
<a href="/cat/kuhny" rel="nofollow">Кухни</a></li>
1136<li class="x_menu_item" itemprop="name">
<a href="/cat/komody" rel="nofollow">Комоды</a></li>
1137<li class="x_menu_item" itemprop="name">
<a href="/cat/tumby" rel="nofollow">Тумбы</a></li>
1138<li class="x_menu_item" itemprop="name">
<a href="/cat/obuvnicy" rel="nofollow">Обувницы</a></li>
1139<li class="x_menu_item" itemprop="name">
<a href="/cat/prihozhie" rel="nofollow">Прихожие</a></li>
1140<li class="x_menu_item" itemprop="name">
<a href="/cat/stoly" rel="nofollow">Столы</a></li>
1141<li class="x_menu_item" itemprop="name">
<a href="/cat/chairs" rel="nofollow">Стулья</a></li>
1142<li class="x_menu_item" itemprop="name">
<a href="/cat/shkafy" rel="nofollow">Шкафы</a></li>
1143<li class="x_menu_item" itemprop="name">
<a href="/cat/stellazhi" rel="nofollow">Стеллажи</a></li>
1144<li class="x_menu_item" itemprop="name">
<a href="/cat/stenki" rel="nofollow">Стенки</a></li>
1145<li class="x_menu_item" itemprop="name">
<a href="/cat/mebel-dlya-spalni" rel="nofollow">Спальни</a></li>
1146</ul>
1147<ul class="x_menu_col" itemscope="" itemtype="https://schema.org/SiteNavigationElement">
1148<li class="x_menu_title" itemprop="name">Информация</li>
1149<li class="x_menu_item" itemprop="name"><a href="/doc/about" itemprop="url">О компании</a></li>
1150<li class="x_menu_item" itemprop="name"><a href="/faq" itemprop="url">Вопросы и ответы</a></li>
1151<li class="x_menu_item" itemprop="name"><a href="/doc/vozvrat-obmen" itemprop="url">Возврат / обмен / гарантия</a></li>
1152<li class="x_menu_item" itemprop="name"><a href="/doc/oplata" itemprop="url">Как оплатить?</a></li>
1153<li class="x_menu_item" itemprop="name"><a href="/doc/dostavka/moskva-i-oblast" itemprop="url">Условия доставки и сборки</a></li>
1154<li class="x_menu_item" itemprop="name"><a href="/doc/contacts" itemprop="url">Контакты</a></li>
1155<li class="x_menu_item" itemprop="name"><a href="/oferta" itemprop="url">Публичная оферта</a></li>
1156</ul>
1157<ul class="x_menu_col" itemscope="" itemtype="https://schema.org/SiteNavigationElement">
1158<li class="x_menu_title" itemprop="name">Полезное</li>
1159<li class="x_menu_item" itemprop="name"><a href="/articles">Статьи</a></li>
1160<li class="x_menu_item" itemprop="name"><a href="/materials">Материалы</a></li>
1161<li class="x_menu_item" itemprop="name"><a href="/textures">Текстуры</a></li>
1162<li class="x_menu_item" itemprop="name"><a href="/series">Серии мебели</a></li>
1163<li class="x_menu_item" itemprop="name"><a href="/lacobel">Стекло Lacobel</a></li>
1164</ul>
1165<div class="x_menu_col"><div class="x-sn">
1166<a href="https://vk.com/komodmsk_ru" target="_blank" rel="nofollow noreferrer noopener"><img src="/assets/img/vk.svg" width="36" height="36" alt="КомодМск Вконтакте" title="КомодМск Вконтакте" loading="lazy" class="sn-img"></a>
<a href="https://ok.ru/komodmsk" target="_blank" rel="nofollow noreferrer noopener"><img src="/assets/img/ok.svg" width="36" height="36" alt="КомодМск в Одноклассниках" title="КомодМск в Одноклассниках" loading="lazy" class="sn-img"></a>
<a href="https://www.youtube.com/@komodmsk" target="_blank" rel="nofollow noreferrer noopener"><img src="/assets/img/yt.svg" width="36" height="36" alt="КомодМск на Ютубе" title="КомодМск на Ютубе" loading="lazy" class="sn-img"></a>
<a href="https://www.instagram.com/komodmsk.ru/" target="_blank" rel="nofollow noreferrer noopener"><img src="/assets/img/insta.svg" width="36" height="36" alt="КомодМск в Инстаграме" title="КомодМск в Инстаграме" loading="lazy" class="sn-img"></a>
<a href="https://dzen.ru/komodmsk.ru" target="_blank" rel="nofollow noreferrer noopener"><img src="/assets/img/zn.svg" width="36" height="36" alt="КомодМск в Дзене" title="КомодМск в Дзене" loading="lazy" class="sn-img"></a>
1167</div></div>
1168</div></footer><div id="helper"></div>
1169<div id="message" style="display: none; text-align: center;"><div id="messageText"></div></div>
1170<div id="after-order" class="after-order" style="display:none;width:300px">
1171<a href="/basket/list" rel="nofollow">
1172 Перейти в корзину
1173 </a><br><a href="#" class="simplemodal-close" rel="nofollow">
1174 Продолжить покупки
1175 </a>
1176</div>
1177<div style="display:none;" class="item-colors-select-modal">
1178<div class="item-colors-select-modal-content">
<center style="font-weight: 500;margin-top: 20px;font-size: 20px;">Товар добавлен в корзину!</center></div>
1179<div class="error"></div>
1180<br><br><div class="modal-close-btn" onclick="Basket.hideActionsForm();return false;"></div>
1181<noindex><div class="f-l-h">
1182<button type="button" onclick="Basket.addAndOpenCart();return false;" class="btn btn-yellow-inline btn-lg">
1183 Оформить заказ
1184 </button><button type="button" onclick="Basket.addAndHideActionsForm();return false;" class="btn btn-grey btn-lg">
1185 Продолжить покупки
1186 </button>
1187</div></noindex>
1188</div>
1189<div id="msgBox" onclick="$(this).hide();">...</div>
1190<div style="display:none;" id="js-popup-container"></div>
1191<div href="#" class="scrollToTop" title="В начало"></div>
1192<div id="note-content"></div>
1193<div class="modal fade out" id="modal-main" tabindex="-1" role="dialog"><div class="modal-dialog" role="document"><div class="modal-content"></div></div></div>
1194<script src="/assets/libs/owl.carousel.min.js"></script><script src="/assets/libs/select2.min.js"></script><script>
1195 if (typeof ymaps === 'undefined') {
1196 var ymaps = {
1197 ready: function(callback) {
1198 }
1199 };
1200 }
1201 </script><script src="/assets/build/build.js?28648"></script><script>
1202 (function() {
1203 function init() {
1204 var images = document.getElementsByTagName('img');
1205
1206 function loadVisible() {
1207 for (var i = 0; i < images.length; i++) {
1208 var img = images[i];
1209 var dataSrc = img.getAttribute('data-src');
1210
1211 if (!dataSrc) continue;
1212 var rect = img.getBoundingClientRect();
1213 if (rect.top >= 0 && rect.left >= 0 && rect.top <= (window.innerHeight || document.documentElement.clientHeight)) {
1214 img.src = dataSrc;
1215 img.removeAttribute('data-src');
1216 }
1217 }
1218 }
1219
1220 if (window.addEventListener) {
1221 window.addEventListener('scroll', loadVisible);
1222 window.addEventListener('resize', loadVisible);
1223 window.addEventListener('load', loadVisible);
1224 } else {
1225 window.attachEvent('onscroll', loadVisible);
1226 window.attachEvent('onload', loadVisible);
1227 }
1228
1229 loadVisible();
1230 }
1231 init();
1232 })();
1233 </script><script src="/assets/js/shop.js"></script><script src="/assets/js/cardColors.min.js"></script><script src="/assets/js/modules/basket.js"></script><script src="/assets/build/newkm.js"></script><script>
1234 (function ($) {
1235 var GEO = {
1236 init: function () {
1237 GEO.$modal = window.Modal && new Modal(
1238 '.modal-container',
1239 { small: true }
1240 );
1241
1242 GEO.openCityPopupClickHandler = function (e) {
1243 e.preventDefault();
1244 e.stopPropagation();
1245 requestAnimationFrame(GEO.openCityPopup);
1246 return false;
1247 };
1248
1249 GEO.collectElements();
1250
1251 GEO.$input = null;
1252 GEO.region = "Москва";
1253 GEO.city = "Москва";
1254 GEO.data = {
1255 "utm_param_name": "utm_label",
1256 "phones": {
1257 "default": "+7 (499) 403-36-17",
1258 "region": {
1259 "Санкт-Петербург и Ленинградская область": "+7 (812) 241-17-43",
1260 "Санкт-Петербург": "+7 (812) 241-17-43",
1261 "Ленинградская область": "+7 (499) 403-36-17",
1262 "Москва и Московская область": "+7 (499) 403-36-17",
1263 "Москва": "+7 (499) 403-36-17",
1264 "Московская область": "+7 (499) 403-36-17"
1265 },
1266 "utm": {
1267 "test_test_1": "+7 (495) 777-77-77",
1268 "test_test_2": "+7 (812) 777-77-77"
1269 }
1270 }
1271};
1272 GEO.utm = "";
1273 GEO.needsClientSetup = "yes";
1274 GEO.updateDOM();
1275
1276 if (GEO.data && GEO.region) {
1277 GEO.updateDOM();
1278 }
1279 /** if (GEO.needsClientSetup == 'yes') { */
1280 if (false) {
1281 ymaps.ready(function () {
1282 if (!ymaps.geolocation) {
1283 console.error('Не подключен ymaps.geolocation');
1284 return;
1285 }
1286 GEO.getYandex();
1287 setTimeout(GEO.getAuto.bind(GEO), 2000);
1288 });
1289 }
1290 },
1291
1292 getAuto: function () {
1293 ymaps.geolocation.get({
1294 provider: 'auto',
1295 }).then(function (res) {
1296 return ymaps.geocode(res.geoObjects.get(0).geometry.getCoordinates());
1297 })
1298 .then(function (res) {
1299 var aa = res.geoObjects.get(0).getAdministrativeAreas();
1300 var l = res.geoObjects.get(0).getLocalities();
1301 return {
1302 region: aa && aa[ 0 ] ? aa[ 0 ] : null,
1303 city: l && l[ 0 ] ? l[ 0 ] : false
1304 };
1305 })
1306 .then(function (data) {
1307 var region = data.region;
1308 var city = data.city;
1309 if (city && typeof region != 'undefined') {
1310 if (GEO.region !== region || GEO.city !== city) {
1311 GEO.region = region;
1312 GEO.city = city;
1313 GEO.updateDOM();
1314 var reload = false;
1315 GEO.updateGeo(GEO.region, GEO.city, reload);
1316 }
1317 }
1318 });
1319 },
1320
1321 getYandex: function () {
1322 ymaps.geolocation.get({
1323 provider: 'yandex',
1324 autoReverseGeocode: false
1325 })
1326 .then(function (res) {
1327 return ymaps.geocode(res.geoObjects.get(0).geometry.getCoordinates());
1328 })
1329 .then(function (res) {
1330 var aa = res.geoObjects.get(0).getAdministrativeAreas();
1331 var l = res.geoObjects.get(0).getLocalities();
1332 return {
1333 region: aa && aa[ 0 ] ? aa[ 0 ] : null,
1334 city: l && l[ 0 ] ? l[ 0 ] : false
1335 };
1336 })
1337 .then(function (data) {
1338 var region = data.region;
1339 var city = data.city;
1340 if (city && typeof region != 'undefined') {
1341 GEO.region = region;
1342 GEO.city = city;
1343 GEO.updateDOM();
1344 var reload = false;
1345 GEO.updateGeo(GEO.region, GEO.city, reload);
1346 }
1347 })
1348 .catch(function (err) {
1349 if(err)console.error(err);
1350 });
1351 },
1352
1353 collectElements: function () {
1354 GEO.$el = $('.city-chooser');
1355 GEO.$el.off('click', GEO.openCityPopupClickHandler);
1356 GEO.$el.on('click', GEO.openCityPopupClickHandler);
1357 GEO.$city = $('.city-chooser__city');
1358 GEO.$region = $('.js-region');
1359 GEO.$phone = $('.js-phone');
1360 },
1361
1362 openCityPopup: function () {
1363 $.get('/ajax.handler.php?location', function (data) {
1364 requestAnimationFrame(function () {
1365
1366 $('#modal-main .modal-content').html(data);
1367 $('#modal-main').modal('show');
1368
1369 GEO.$input = $('#cityChooserInput');
1370 GEO.$input.focus();
1371 requestAnimationFrame(function () {
1372 GEO.$input.focus();
1373 });
1374 });
1375 });
1376 },
1377
1378 setCity: function (city) {
1379 GEO.city = city;
1380 GEO.updateCity();
1381 },
1382
1383 saveCity: function (city) {
1384 $.post('/ajax.handler.php', {
1385 action: 'setCity',
1386 city: city
1387 }, function (data) {
1388 if (data == 'success') {
1389 GEO.setCity(city);
1390 GEO.$modal.close();
1391 } else {
1392 alert('Что-то пошло не так. Попробуйте другой город.');
1393 }
1394 });
1395 },
1396
1397 /**
1398 * Обновить DOM согласно текущим данным.
1399 */
1400 updateDOM: function () {
1401 GEO.setPhone(GEO.data, GEO.region, GEO.utm);
1402 GEO.updateCity();
1403 },
1404
1405 /**
1406 * Отобразить город в DOM.
1407 */
1408 updateCity: function () {
1409 GEO.$city.html(GEO.city);// + ' (' + GEO.region + ')');
1410 if (GEO.region) {
1411 GEO.$city.attr('title', GEO.region);
1412 }
1413 },
1414
1415 selectGeo: function (region, city) {
1416 GEO._region = region;
1417 GEO._city = city;
1418 },
1419
1420 updateGeo: function (region, city) {
1421 region = region || GEO._region;
1422 city = city || GEO._city;
1423 if (!city) {
1424 return;
1425 }
1426 $.post('/ajax.handler.php', {
1427 action: 'setGeo',
1428 region: region,
1429 city: city,
1430 }, function (data) {
1431 if (data == 'success') {
1432 GEO.setRegion(region);
1433 GEO.setCity(city);
1434 GEO.updateInfoFromServer();
1435 GEO.closePopup();
1436
1437 var catid = $('.catid').text();
1438 if (catid && catid != 0) {
1439 $.ajax({
1440 url: '/location/index.php',
1441 data: {itemId : catid, quant: Number($('.quant').text())},
1442 success: function(data){
1443 //var deliveryrespons = data != "" ? $.parseJSON(data) : {};
1444 var deliveryrespons = $.parseJSON(data);
1445 if (deliveryrespons.nopek != 'Y') {
1446 $('.topdelivery').empty().append(deliveryrespons.delivery_varchar_nopek);
1447 $('.middelivery').empty().append(deliveryrespons.delivery_text_nopek);
1448 }
1449 }
1450 });
1451 }
1452
1453 } else {
1454 console.error('Что-то пошло не так.');
1455 }
1456 });
1457 },
1458
1459 /**
1460 * Получает с сервера текущую информацию
1461 * по городу, региону и т.д.
1462 *
1463 * Нужно вызывать после установки на клиенте местоположния, т.к.
1464 * сгенерированная на сервере информация не может быть обновлена
1465 * только на клиенте и требует дополнительного запроса.
1466 */
1467 updateInfoFromServer: function (section, data) {
1468 $.post('/ajax.handler.php', {
1469 action: 'getGeoInfo',
1470 section: section || 'main',
1471 data: data || {},
1472 }, function (data) {
1473 });
1474
1475 var url = window.location.href;
1476 $.post(url, {}, function (data) {
1477 $.each([
1478 'deliveryBlock',
1479 'payments',
1480 'ratingSmall',
1481 'services',
1482 ], function (index, type) {
1483 var $container = $('.js-' + type + '-container');
1484 if (data[ type ] && $container.length) {
1485 $container.replaceWith(data[ type ]);
1486 }
1487 });
1488
1489 /**
1490 * После обновления DOM
1491 * надо заново собрать элементы
1492 */
1493 GEO.collectElements();
1494 GEO.updateDOM();
1495 if (window.CheckOnScrollElements) {
1496 /**
1497 * После обновления сразу проверем, есть ли
1498 * зависимые от скролла элементы.
1499 */
1500 CheckOnScrollElements();
1501 }
1502
1503 /**
1504 * Шлем event о необходимости поменять
1505 * состояние все зависимых компонентов.
1506 */
1507 $('body').trigger('geo-changed');
1508 })
1509 },
1510
1511 closePopup: function () {
1512 GEO.$input = null;
1513 $('#modal-main').modal('hide');
1514 },
1515
1516 setPhone: function (data, region, utm) {
1517 var phone = data.phones.default;
1518 if (utm && data.phones && data.phones.utm) {
1519 for (var i in data.phones.utm) {
1520 if (i == utm) {
1521 phone = data.phones.utm[ i ];
1522 GEO.$phone.attr('href', 'tel:' + phone)
1523 .text(phone);
1524 return;
1525 }
1526 }
1527 }
1528 if (region && data.phones && data.phones.region) {
1529 for (var i in data.phones.region) {
1530 var r = i.toLowerCase();
1531 if (r == region.toLowerCase()) {
1532 phone = data.phones.region[ i ];
1533 GEO.$phone.attr('href', 'tel:' + phone)
1534 .text(phone);
1535 return;
1536 }
1537 }
1538 }
1539 GEO.$phone.attr('href', 'tel:' + phone)
1540 .text(phone);
1541 },
1542
1543 setRegion: function (region) {
1544 GEO.region = region;
1545 GEO.$region.text(region);
1546 },
1547
1548 };
1549
1550 window.GEO = GEO;
1551 })(jQuery);
1552
1553 jQuery(function () {
1554 requestAnimationFrame(GEO.init.bind(GEO));
1555 });
1556</script><script>
1557 document.addEventListener("DOMContentLoaded", function() {
1558 let envyboxLoaded = false;
1559
1560 // Функция загрузки (запустится только от действий человека)
1561 function loadEnvybox() {
1562 if (envyboxLoaded) return;
1563 envyboxLoaded = true;
1564
1565 // 1. Грузим стили
1566 var style = document.createElement('link');
1567 style.rel = 'stylesheet';
1568 style.href = "https://cdn.envybox.io/widget/cbk.css";
1569
1570 // 2. Внутренняя функция запуска JS
1571 function runWidgetScript() {
1572 // Ждем 500 мс, чтобы стили успели примениться
1573 setTimeout(function() {
1574 var script = document.createElement('script');
1575 script.src = "https://cdn.envybox.io/widget/cbk.js?wcb_code=d1b2985288776e9024eb86254eae9201";
1576 script.async = true;
1577 document.body.appendChild(script);
1578 }, 500);
1579 }
1580
1581 style.onload = runWidgetScript;
1582 style.onerror = runWidgetScript;
1583 document.head.appendChild(style);
1584
1585 // Убираем слушатели
1586 ['mousemove', 'touchstart', 'scroll', 'click'].forEach(function(e) {
1587 window.removeEventListener(e, loadEnvybox);
1588 });
1589 }
1590
1591 // Загрузка ТОЛЬКО по физическому взаимодействию.
1592 ['mousemove', 'touchstart', 'scroll', 'click'].forEach(function(e) {
1593 window.addEventListener(e, loadEnvybox, { passive: true, once: true });
1594 });
1595 });
1596 </script>
1597</body>
1598</html>