<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.pandoraburo.ru/" xml:lang="ru">
  <id>https://www.pandoraburo.ru/drobemety-2</id>
  <link href="https://www.pandoraburo.ru/drobemety-2.xml" rel="self"/>
  <title>Дробеметы 2</title>
  <subtitle type="html">&lt;html lang="ru"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;


&lt;title&gt;Запчасти на дробемет купить от производителя — прайс-лист ООО Арсенал-Деталь&lt;/title&gt;


&lt;meta name="description" content="Запчасти на дробемет и дробеметную установку от производителя. Колесо рабочее, импеллер, лопасть, защита торцевая, распредкамера, кольцо отражательное, броня. Цены, артикулы 42115.001.400, 42115.000.002, 9.8604.000.005-01. Скидки от объёма, доставка по России. 8 (902) 873-36-90."&gt;


&lt;meta name="keywords" content="запчасти на дробемет, запчасти для дробеметной установки, дробемет, дробеметная установка, дробеметное оборудование, запчасти дробемет, купить запчасти на дробемет, прайс-лист на запчасти для дробемета, колесо рабочее, колесо рабочее 42115.001.400, защита торцевая, защита торцевая 42115.001.360, защита торцевая 42115.001.301, защита боковая, защита боковая 42115.001.303, лопасть, лопасть 42115.001.009, распредкамера, распредкамера 42115.001.003, кольцо отражательное, кольцо отражательное 42115.001.004, защита верхняя, защита верхняя 42115.001.302, импеллер, импеллер 42115.000.002, броня, броня 9.8604.000.005-01, 42115.001.400, 42115.001.360, 42115.001.301, 42115.001.303, 42115.001.009, 42115.001.003, 42115.001.004, 42115.001.302, 42115.000.002, 9.8604.000.005-01, купить запчасти для дробемета, запчасти для дробемета цена, запчасти для дробеметной установки цена, запчасти для дробемета с доставкой, изготовление запчастей для дробемета, запчасти для дробемета по чертежам, ремонт дробемета, комплектующие для дробемета, износ деталей дробемета, скидка на запчасти для дробемета, ООО Арсенал-Деталь, Арсенал-Деталь запчасти, запчасти для дробемета Арсенал-Деталь, запчасти для дробемета от производителя, дробеметная камера, дробеметная установка запчасти, дробеметный аппарат, дробеметная машина, дробеструйная установка, дробеструйное оборудование, дробеметные лопатки, дробеметное колесо, импеллер для дробемета, лопасть для дробемета, чугун ИЧХ-15, сталь 110Г13Л, сталь Х12МФ"&gt;


&lt;meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"&gt;
&lt;meta name="author" content="ООО «Арсенал-Деталь»"&gt;
&lt;meta name="geo.region" content="RU"&gt;
&lt;meta name="geo.placename" content="Россия"&gt;
&lt;meta name="language" content="Russian"&gt;
&lt;link rel="canonical" href="https://arsenal-detal.ru/drobemet-parts" /&gt;


&lt;meta property="og:type" content="website"&gt;
&lt;meta property="og:site_name" content="ООО «Арсенал-Деталь»"&gt;
&lt;meta property="og:title" content="Запчасти на дробемет купить от производителя — прайс-лист"&gt;
&lt;meta property="og:description" content="Запчасти для дробеметных установок: колесо рабочее, импеллер, лопасть, защита, распредкамера, броня. Артикулы 42115.001.400, 42115.000.002, 9.8604.000.005-01. Скидки от объёма. 8 (902) 873-36-90."&gt;
&lt;meta property="og:url" content="https://arsenal-detal.ru/drobemet-parts"&gt;
&lt;meta property="og:locale" content="ru_RU"&gt;


&lt;meta name="twitter:card" content="summary_large_image"&gt;
&lt;meta name="twitter:title" content="Запчасти на дробемет — прайс-лист от производителя"&gt;
&lt;meta name="twitter:description" content="Колесо рабочее, импеллер, лопасть, защита торцевая, распредкамера, броня. Цены, артикулы, скидки от объёма. ООО «Арсенал-Деталь»."&gt;


&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "ООО «Арсенал-Деталь»",
  "url": "https://arsenal-detal.ru",
  "telephone": "+79028733690",
  "email": "arsenal-detal@list.ru",
  "taxID": "6670215323",
  "vatID": "667001001",
  "identifier": "1086670018445",
  "description": "Изготовление и продажа запчастей для дробеметных и дробеструйных установок по чертежам и ТУ.",
  "address": {
    "@type": "PostalAddress",
    "addressCountry": "RU",
    "addressRegion": "Свердловская область"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+79028733690",
    "contactType": "sales",
    "availableLanguage": "Russian"
  }
}
&lt;/script&gt;


&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "Запчасти на дробемет — прайс-лист",
  "description": "Каталог запчастей для дробеметных установок с ценами, весами, материалами и артикулами",
  "numberOfItems": 10,
  "itemListElement": [
    {"@type":"ListItem","position":1,"item":{"@type":"Product","name":"Колесо рабочее 42115.001.400 (правое вращение)","sku":"42115.001.400","material":"ИЧХ-15 / 110Г13Л","weight":{"@type":"QuantitativeValue","value":55,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"135000","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":2,"item":{"@type":"Product","name":"Защита торцевая 42115.001.360","sku":"42115.001.360","material":"ИЧХ-15 / 110Г13Л","weight":{"@type":"QuantitativeValue","value":29,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"43000","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":3,"item":{"@type":"Product","name":"Защита торцевая 42115.001.301","sku":"42115.001.301","material":"ИЧХ-15 / 110Г13Л","weight":{"@type":"QuantitativeValue","value":28.3,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"36800","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":4,"item":{"@type":"Product","name":"Защита боковая 42115.001.303","sku":"42115.001.303","material":"Х12МФ (HRC 60±5) / ИЧХ-15","weight":{"@type":"QuantitativeValue","value":8.3,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"13380","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":5,"item":{"@type":"Product","name":"Лопасть 42115.001.009","sku":"42115.001.009","material":"ИЧХ-15 / Х12МФ","weight":{"@type":"QuantitativeValue","value":1.4,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"2800","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":6,"item":{"@type":"Product","name":"Распредкамера 42115.001.003","sku":"42115.001.003","material":"Х12МФ","weight":{"@type":"QuantitativeValue","value":5.5,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"8700","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":7,"item":{"@type":"Product","name":"Кольцо отражательное 42115.001.004","sku":"42115.001.004","material":"Сталь / ИЧХ-15","weight":{"@type":"QuantitativeValue","value":3.2,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"13400","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":8,"item":{"@type":"Product","name":"Защита верхняя 42115.001.302","sku":"42115.001.302","material":"110Г13Л / ИЧХ-15","weight":{"@type":"QuantitativeValue","value":11.5,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"17560","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":9,"item":{"@type":"Product","name":"Импеллер 42115.000.002","sku":"42115.000.002","material":"Х12МФ","weight":{"@type":"QuantitativeValue","value":3.6,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"7300","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}},
    {"@type":"ListItem","position":10,"item":{"@type":"Product","name":"Броня 9.8604.000.005-01","sku":"9.8604.000.005-01","material":"ИЧХ-15 / 110Г13Л","weight":{"@type":"QuantitativeValue","value":9.4,"unitCode":"KGM"},"brand":{"@type":"Brand","name":"Арсенал-Деталь"},"offers":{"@type":"Offer","price":"11840","priceCurrency":"RUB","availability":"https://schema.org/InStock"}}}
  ]
}
&lt;/script&gt;


&lt;script type="application/ld+json"&gt;
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {"@type":"ListItem","position":1,"name":"Главная","item":"https://arsenal-detal.ru"},
    {"@type":"ListItem","position":2,"name":"Запчасти на дробемет","item":"https://arsenal-detal.ru/drobemet-parts"}
  ]
}
&lt;/script&gt;

&lt;style&gt;
  :root{
    --gold:#FFD700;--gold-light:#FFE55C;--gold-deep:#B8860B;
    --bg:#0a0a0a;--muted:#9a8040;--border:rgba(212,175,55,.35);
    --green:#7dff7d;--green-dark:#3aa03a;--orange:#FF8C00;
    --red:#ff8a7a;--cyan:#6ee8e4;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  body{background:#050505;color:#e8e8e8;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;padding:20px 14px 180px;line-height:1.5;}
  .wrap{max-width:1800px;margin:0 auto}

  /* ===== СКРЫТЫЙ SEO-БЛОК (для поисковиков) ===== */
  .seo-hidden{
    position:absolute !important;
    width:1px !important;
    height:1px !important;
    padding:0 !important;
    margin:-1px !important;
    overflow:hidden !important;
    clip:rect(0,0,0,0) !important;
    white-space:nowrap !important;
    border:0 !important;
    color:transparent !important;
    pointer-events:none !important;
  }

  /* ===== HEADER ===== */
  .header{background:radial-gradient(120% 120% at 20% 0%,rgba(255,215,0,.25),transparent 55%),linear-gradient(135deg,#1a1408,#0a0a0a);border:2px solid var(--gold);border-radius:14px;padding:28px 24px;text-align:center;margin-bottom:16px;box-shadow:0 0 40px rgba(255,215,0,.25),0 6px 22px rgba(0,0,0,.6);}
  .tag{display:inline-block;background:var(--gold);color:#0a0a0a;font-size:10px;font-weight:800;letter-spacing:2px;padding:4px 14px;border-radius:999px;margin-bottom:14px;box-shadow:0 0 16px rgba(255,215,0,.7);}
  .header h1{font-size:28px;font-weight:900;letter-spacing:3px;color:var(--gold);text-transform:uppercase;margin-bottom:12px;text-shadow:0 0 10px rgba(255,215,0,.95),0 0 25px rgba(255,199,0,.8);animation:goldPulse 3s ease-in-out infinite;}
  @keyframes goldPulse{0%,100%{text-shadow:0 0 10px rgba(255,215,0,.95),0 0 25px rgba(255,199,0,.8);}50%{text-shadow:0 0 15px rgba(255,215,0,1),0 0 35px rgba(255,199,0,.95);}}
  .line{width:80px;height:3px;background:var(--gold);margin:0 auto 12px;border-radius:2px;box-shadow:0 0 15px var(--gold);}
  .header p{color:var(--gold-light);font-size:14px;opacity:.95;}
  .company-info{background:rgba(255,215,0,.05);border:1px solid var(--border);border-radius:8px;padding:12px;margin-top:12px;font-size:12px;color:var(--gold-light);}
  .company-info b{color:var(--gold);}

  /* ===== БЛОК НАКОПИТЕЛЬНОЙ СКИДКИ (зелёный) ===== */
  .discount-banner{
    background:linear-gradient(135deg,rgba(125,255,125,.12),rgba(10,10,10,.9));
    border:3px solid var(--green);border-radius:16px;
    padding:24px 26px;margin-bottom:16px;
    text-align:center;position:relative;
    box-shadow:0 0 40px rgba(125,255,125,.2);
    transition:all .4s;
  }
  .discount-banner.active{
    background:linear-gradient(135deg,rgba(125,255,125,.25),rgba(10,10,10,.9));
    box-shadow:0 0 60px rgba(125,255,125,.5),inset 0 0 30px rgba(125,255,125,.15);
    animation:discountActive 1.5s ease-in-out infinite;
  }
  @keyframes discountActive{
    0%,100%{box-shadow:0 0 60px rgba(125,255,125,.5),inset 0 0 30px rgba(125,255,125,.15);}
    50%{box-shadow:0 0 80px rgba(125,255,125,.8),inset 0 0 40px rgba(125,255,125,.25);}
  }
  .discount-banner::before{
    content:'? СКИДКА ОТ ОБЪЁМА ?';
    position:absolute;top:-14px;left:50%;transform:translateX(-50%);
    background:#0a0a0a;color:var(--green);
    padding:4px 22px;border:2px solid var(--green);border-radius:999px;
    font-size:12px;font-weight:900;letter-spacing:3px;
    text-shadow:0 0 15px rgba(125,255,125,1);
    white-space:nowrap;box-shadow:0 0 20px rgba(125,255,125,.6);
  }
  .discount-banner h3{
    color:var(--green);font-size:20px;font-weight:900;
    letter-spacing:1.5px;text-transform:uppercase;
    margin-bottom:12px;
    text-shadow:0 0 15px rgba(125,255,125,.7);
  }
  .discount-banner p{
    color:#c8e8c8;font-size:14px;
    margin-bottom:16px;line-height:1.6;
  }
  .discount-banner p b{color:#fff;}

  .progress-wrap{
    max-width:800px;margin:0 auto 16px;
    background:#0a0a0a;border:2px solid var(--green);
    border-radius:999px;height:40px;position:relative;overflow:hidden;
  }
  .progress-fill{
    height:100%;background:linear-gradient(90deg,#3aa03a,#7dff7d,#3aa03a);
    background-size:200% 100%;
    width:0%;transition:width .5s ease-out;
    animation:progressShine 2s linear infinite;
    border-radius:999px;
    box-shadow:0 0 20px rgba(125,255,125,.7);
  }
  @keyframes progressShine{0%{background-position:200% 0;}100%{background-position:-200% 0;}}
  .progress-label{
    position:absolute;inset:0;
    display:flex;align-items:center;justify-content:center;
    color:#fff;font-size:13px;font-weight:900;
    text-shadow:0 1px 3px rgba(0,0,0,.9);
    z-index:2;letter-spacing:.5px;text-align:center;padding:0 12px;
  }
  .progress-label b{color:var(--gold);font-size:14px;}

  .discount-stats{
    display:grid;grid-template-columns:repeat(4,1fr);
    gap:12px;max-width:1000px;margin:0 auto;
  }
  @media(max-width:800px){.discount-stats{grid-template-columns:repeat(2,1fr);}}
  @media(max-width:450px){.discount-stats{grid-template-columns:1fr;}}
  .discount-stat{
    background:rgba(0,0,0,.5);border:1px solid var(--green);
    border-radius:10px;padding:12px;
    display:flex;flex-direction:column;gap:4px;text-align:center;
  }
  .discount-stat .lbl{
    font-size:9px;font-weight:800;text-transform:uppercase;
    letter-spacing:1.2px;color:var(--green);opacity:.8;
  }
  .discount-stat .val{
    font-size:18px;font-weight:900;color:var(--green);
    font-variant-numeric:tabular-nums;
  }
  .discount-stat .val.new{color:var(--gold-light);font-size:20px;}

  /* ===== CTA ===== */
  .cta-block{background:linear-gradient(135deg,rgba(255,215,0,.15),rgba(10,10,10,.9));border:3px solid var(--gold);border-radius:16px;padding:24px 20px;margin-bottom:16px;text-align:center;box-shadow:0 0 40px rgba(255,215,0,.3);position:relative;}
  .cta-block::before{content:'★';position:absolute;top:-18px;left:50%;transform:translateX(-50%);background:#0a0a0a;color:var(--gold);padding:0 18px;font-size:26px;text-shadow:0 0 20px rgba(255,215,0,1);animation:starPulse 1.5s ease-in-out infinite;}
  @keyframes starPulse{0%,100%{transform:translateX(-50%) scale(1);}50%{transform:translateX(-50%) scale(1.2);}}
  .cta-block h2{color:var(--gold);font-size:22px;font-weight:900;letter-spacing:2px;text-transform:uppercase;margin-bottom:10px;text-shadow:0 0 15px rgba(255,215,0,.7);}
  .cta-block p{color:var(--gold-light);font-size:15px;margin-bottom:16px;line-height:1.6;}
  .cta-block p b{color:#fff;}
  .cta-counter{display:inline-block;background:#0a0a0a;border:2px solid var(--gold);border-radius:999px;padding:10px 24px;color:var(--gold);font-size:16px;font-weight:900;letter-spacing:1px;margin-bottom:14px;}
  .cta-counter b{color:#fff;font-size:22px;}
  .cta-buttons{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:14px;}
  .btn-big{display:inline-flex;align-items:center;gap:10px;padding:16px 32px;border-radius:999px;border:2px solid var(--gold);background:transparent;color:var(--gold);font-size:16px;font-weight:900;cursor:pointer;transition:.2s;font-family:inherit;letter-spacing:1px;text-transform:uppercase;}
  .btn-big:hover{background:var(--gold);color:#0a0a0a;transform:scale(1.03);}
  .btn-big.primary{background:linear-gradient(135deg,#FFD700,#FF8C00);color:#0a0a0a;border-color:#FFD700;box-shadow:0 0 25px rgba(255,215,0,.6);animation:btnPulse 2s ease-in-out infinite;}
  @keyframes btnPulse{0%,100%{box-shadow:0 0 25px rgba(255,215,0,.6);}50%{box-shadow:0 0 40px rgba(255,215,0,.9),0 0 70px rgba(255,140,0,.5);}}
  .btn-big.primary:hover{transform:scale(1.05);}

  /* ===== STATS ===== */
  .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px;}
  @media(max-width:800px){.stats{grid-template-columns:repeat(2,1fr);}}
  @media(max-width:500px){.stats{grid-template-columns:1fr;}}
  .stat{background:var(--bg);border:1px solid var(--gold);border-radius:12px;padding:16px;text-align:center;}
  .lbl{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--gold);opacity:.7;margin-bottom:6px;}
  .val{font-size:22px;font-weight:800;color:var(--gold-light);line-height:1.1;}
  .val.sm{font-size:16px;}
  .val.green{color:var(--green);}

  /* ===== TOOLBAR ===== */
  .toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;align-items:center;}
  .search{flex:1;min-width:250px;padding:10px 14px;border:1px solid var(--gold);border-radius:9px;font-size:13px;background:#0a0a0a;color:var(--gold-light);outline:none;font-family:inherit;font-weight:600;}
  .search::placeholder{color:rgba(212,175,55,.4);}
  .counter{color:var(--gold);font-size:13px;white-space:nowrap;padding:10px 16px;border:1px solid var(--gold);border-radius:9px;background:#0a0a0a;font-weight:800;}
  .btn{display:inline-flex;align-items:center;gap:6px;padding:10px 16px;border-radius:9px;border:1px solid var(--gold);background:transparent;color:var(--gold);font-size:13px;font-weight:700;cursor:pointer;transition:.15s;font-family:inherit;}
  .btn:hover{background:var(--gold);color:#0a0a0a;}
  .btn.primary{background:var(--gold);color:#0a0a0a;}
  .btn.green{background:linear-gradient(135deg,#7dff7d,#3aa03a);color:#0a0a0a;border-color:#7dff7d;}
  .btn.red{background:transparent;color:var(--red);border-color:var(--red);}
  .btn.red:hover{background:var(--red);color:#0a0a0a;}

  /* ===== TABLE ===== */
  .table-block{background:var(--bg);border:1px solid var(--gold);border-radius:14px;padding:20px;margin-bottom:16px;position:relative;}
  .block-title{color:var(--gold);font-size:12px;font-weight:800;letter-spacing:2px;text-align:center;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border);text-transform:uppercase;text-shadow:0 0 12px rgba(255,215,0,.6);}
  .select-hint{position:absolute;top:-14px;left:0;background:linear-gradient(135deg,#FFD700,#FF8C00);color:#0a0a0a;font-size:11px;font-weight:900;letter-spacing:1.5px;padding:6px 18px;border-radius:999px;box-shadow:0 0 20px rgba(255,215,0,.7);text-transform:uppercase;animation:hintPulse 1.5s ease-in-out infinite;z-index:5;white-space:nowrap;}
  @keyframes hintPulse{0%,100%{box-shadow:0 0 20px rgba(255,215,0,.7);transform:scale(1);}50%{box-shadow:0 0 35px rgba(255,215,0,1),0 0 60px rgba(255,140,0,.6);transform:scale(1.05);}}

  .table-wrap{overflow:auto;max-height:65vh;border-radius:8px;border:1px solid var(--gold);}
  table{width:100%;table-layout:auto;border-collapse:collapse;background:#0a0a0a;font-size:13px;}
  th,td{padding:8px 6px;text-align:left;border-bottom:1px solid rgba(212,175,55,.2);vertical-align:middle;color:#fff;background:transparent;white-space:nowrap;}
  th{position:sticky;top:0;z-index:2;background:#0a0a0a;color:#fff;font-weight:800;text-transform:uppercase;font-size:10px;letter-spacing:1px;border-bottom:1px solid var(--gold);cursor:pointer;user-select:none;}
  th:hover{background:#1a1408;}
  th.sortable::after{content:' ⇅';opacity:.5;margin-left:4px;font-size:9px;}
  th.asc::after{content:' ▲';opacity:1;color:#fff;}
  th.desc::after{content:' ▼';opacity:1;color:#fff;}
  th.num,td.num{text-align:right;font-variant-numeric:tabular-nums;}
  th.col-star,td.col-star{width:40px;text-align:center;padding:8px 4px;position:sticky;top:0;background:linear-gradient(180deg,#1a1408,#0a0a0a) !important;}
  th.col-star::before{content:'▼';position:absolute;top:100%;left:50%;transform:translateX(-50%);color:var(--gold);font-size:20px;line-height:1;text-shadow:0 0 12px rgba(255,215,0,1);animation:arrowBounce 1s ease-in-out infinite;pointer-events:none;}
  @keyframes arrowBounce{0%,100%{transform:translateX(-50%) translateY(0);opacity:1;}50%{transform:translateX(-50%) translateY(6px);opacity:.7;}}
  th.col-qty,td.col-qty{width:64px;text-align:center;padding:8px 4px;}
  th.col-weight,td.col-weight{width:70px;text-align:right;padding:8px 6px;font-variant-numeric:tabular-nums;}
  th.col-material,td.col-material{white-space:normal;min-width:140px;max-width:220px;padding:8px 6px;font-size:12px;line-height:1.35;}

  tbody tr{transition:background .15s;}
  tbody tr:hover{background:#1a1408;}
  tbody tr.picked{background:linear-gradient(90deg,rgba(255,215,0,.15),rgba(255,215,0,.04));box-shadow:inset 4px 0 0 var(--gold);}
  tbody tr.discount-active{background:linear-gradient(90deg,rgba(125,255,125,.15),rgba(255,215,0,.04));box-shadow:inset 4px 0 0 var(--green);}

  td.article{font-family:'Courier New',monospace;font-size:12px;color:#fff;}
  td b{color:#fff;}
  td.price{font-weight:800;color:#fff;font-size:14px;}
  td.price.discount{color:var(--green);text-shadow:0 0 10px rgba(125,255,125,.5);}
  td.price-old{color:#fff;opacity:.55;text-decoration:line-through;font-size:12px;}

  td.col-qty input.qty{width:52px;padding:5px 4px;border:1px solid var(--border);border-radius:6px;background:#0a0a0a;color:#fff;font-size:13px;font-weight:800;text-align:center;font-family:inherit;outline:none;font-variant-numeric:tabular-nums;transition:.2s;}
  td.col-qty input.qty:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(255,215,0,.2);}
  td.col-qty input.qty:disabled{opacity:.25;cursor:not-allowed;}
  tbody tr.picked td.col-qty input.qty{border-color:var(--gold);color:#fff;box-shadow:0 0 8px rgba(255,215,0,.4);}

  .badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:800;text-transform:uppercase;background:rgba(212,175,55,.15);color:#fff;border:1px solid rgba(212,175,55,.5);white-space:nowrap;}

  .star{cursor:pointer;font-size:22px;color:rgba(255,255,255,.3);transition:all .2s;user-select:none;text-align:center;display:inline-block;}
  .star:hover{color:#fff;transform:scale(1.3);}
  .star.on{color:var(--gold-light);text-shadow:0 0 12px var(--gold-light),0 0 24px rgba(255,215,0,.5);}

  .footnote{display:flex;flex-wrap:wrap;gap:20px;margin-top:14px;padding-top:12px;border-top:1px solid var(--gold);}
  .fn{color:#fff;font-size:12px;position:relative;padding-left:14px;opacity:.85;}
  .fn::before{content:"◆";position:absolute;left:0;color:var(--gold);font-size:8px;top:4px;}
  .fn b{color:#fff;}

  /* ===== CTA низ ===== */
  .cta{text-align:center;background:var(--bg);border:1px solid var(--gold);border-radius:14px;padding:28px 20px;margin-top:16px;}
  .cta-text{font-size:16px;font-weight:600;color:var(--gold);margin-bottom:16px;}
  .cta-btn{display:inline-block;background:var(--gold);color:#0a0a0a;text-decoration:none;padding:16px 40px;font-size:20px;font-weight:800;letter-spacing:1px;border-radius:999px;transition:.25s;margin:0 6px;}
  .cta-btn:hover{background:var(--gold-light);transform:scale(1.03);}
  .cta-mail{display:inline-block;color:var(--gold);text-decoration:none;padding:16px 30px;font-size:16px;font-weight:700;border:1px solid var(--gold);border-radius:999px;transition:.25s;margin:0 6px;}
  .cta-mail:hover{background:var(--gold);color:#0a0a0a;}
  .manager{margin-top:16px;font-size:13px;color:var(--muted);}

  /* ===== STICKY-БАР ===== */
  .sticky-bar{position:fixed;left:0;right:0;bottom:0;background:linear-gradient(180deg,rgba(10,10,10,.95),#0a0a0a);border-top:3px solid var(--gold);box-shadow:0 -10px 40px rgba(255,215,0,.25),0 -4px 15px rgba(0,0,0,.8);padding:14px 20px;z-index:1000;transform:translateY(110%);transition:transform .35s cubic-bezier(.34,1.56,.64,1);backdrop-filter:blur(8px);}
  .sticky-bar.show{transform:translateY(0);}
  .sticky-bar.discount-active{border-top-color:var(--green);box-shadow:0 -10px 40px rgba(125,255,125,.4),0 -4px 15px rgba(0,0,0,.8);}
  .sticky-bar::before{content:'';position:absolute;top:-3px;left:0;right:0;height:3px;background:linear-gradient(90deg,transparent,var(--gold),var(--orange),var(--gold),transparent);background-size:200% 100%;animation:barShine 3s linear infinite;}
  .sticky-bar.discount-active::before{background:linear-gradient(90deg,transparent,var(--green),#3aa03a,var(--green),transparent);background-size:200% 100%;}
  @keyframes barShine{0%{background-position:200% 0;}100%{background-position:-200% 0;}}
  .sticky-inner{max-width:1800px;margin:0 auto;display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
  .sticky-info{display:flex;gap:16px;align-items:center;flex-wrap:wrap;flex:1;}
  .sticky-stat{display:flex;flex-direction:column;gap:2px;padding:6px 14px;border-left:2px solid var(--gold);}
  .sticky-stat:first-child{border-left:none;padding-left:0;}
  .sticky-stat .lbl{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:1.2px;color:var(--gold);opacity:.7;margin:0;}
  .sticky-stat .val{font-size:18px;font-weight:900;color:var(--gold-light);line-height:1;font-variant-numeric:tabular-nums;}
  .sticky-stat .val.big{font-size:26px;color:var(--gold);text-shadow:0 0 15px rgba(255,215,0,.7);animation:totalPulse 1.5s ease-in-out infinite;}
  @keyframes totalPulse{0%,100%{text-shadow:0 0 15px rgba(255,215,0,.7);}50%{text-shadow:0 0 25px rgba(255,215,0,1),0 0 40px rgba(255,140,0,.6);}}
  .sticky-bar.discount-active .sticky-stat{border-color:var(--green);}
  .sticky-bar.discount-active .sticky-stat .lbl{color:var(--green);}
  .sticky-bar.discount-active .sticky-stat .val{color:#c8ffb8;}
  .sticky-bar.discount-active .sticky-stat .val.big{color:var(--green);text-shadow:0 0 15px rgba(125,255,125,.8);animation:totalPulseGreen 1.5s ease-in-out infinite;}
  @keyframes totalPulseGreen{0%,100%{text-shadow:0 0 15px rgba(125,255,125,.8);}50%{text-shadow:0 0 25px rgba(125,255,125,1),0 0 40px rgba(58,160,58,.8);}}
  .sticky-actions{display:flex;gap:10px;flex-wrap:wrap;}
  .sticky-btn{display:inline-flex;align-items:center;gap:6px;padding:12px 22px;border-radius:999px;border:2px solid var(--gold);background:transparent;color:var(--gold);font-size:14px;font-weight:900;cursor:pointer;transition:.2s;font-family:inherit;letter-spacing:.5px;text-transform:uppercase;white-space:nowrap;}
  .sticky-btn:hover{background:var(--gold);color:#0a0a0a;transform:scale(1.03);}
  .sticky-btn.primary{background:linear-gradient(135deg,#FFD700,#FF8C00);color:#0a0a0a;border-color:#FFD700;box-shadow:0 0 20px rgba(255,215,0,.5);}
  .sticky-btn.primary:hover{transform:scale(1.05);box-shadow:0 0 30px rgba(255,215,0,.8);}
  .sticky-bar.discount-active .sticky-btn.primary{background:linear-gradient(135deg,#7dff7d,#3aa03a);color:#0a0a0a;border-color:#7dff7d;box-shadow:0 0 25px rgba(125,255,125,.7);}
  .sticky-btn.clear{border-color:rgba(255,138,122,.5);color:var(--red);}
  .sticky-btn.clear:hover{background:var(--red);color:#0a0a0a;border-color:var(--red);}

  @media(max-width:900px){
    .sticky-inner{flex-direction:column;gap:10px;}
    .sticky-info{justify-content:center;width:100%;}
    .sticky-actions{width:100%;justify-content:center;}
    .sticky-stat{padding:4px 10px;}
    .sticky-stat .val{font-size:15px;}
    .sticky-stat .val.big{font-size:20px;}
    .sticky-btn{padding:10px 16px;font-size:12px;}
  }
  @media(max-width:500px){
    body{padding-bottom:220px;}
    .sticky-info{gap:8px;}
    .sticky-stat{padding:2px 8px;}
    .sticky-stat .val{font-size:13px;}
    .sticky-stat .val.big{font-size:17px;}
    .sticky-stat .lbl{font-size:8px;}
  }

  .wrap ::-webkit-scrollbar{width:14px;height:14px;}
  .wrap ::-webkit-scrollbar-track{background:#050505;border:1px solid #2a2210;border-radius:9px;}
  .wrap ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#FFE55C,#FFD700,#FF8C00);border-radius:9px;border:1px solid #FFD700;box-shadow:0 0 10px rgba(255,215,0,.9);}

  @media print{
    body{background:#fff;color:#000;padding:0;}
    .header{background:#000 !important;color:#FFD700 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
    .header h1{color:#FFD700 !important;animation:none !important;}
    .tag{background:#FFD700 !important;color:#000 !important;}
    .line{background:#FFD700 !important;}
    .stats,.table-block,.cta,.cta-block,.discount-banner{background:#fff !important;border-color:#666 !important;box-shadow:none !important;}
    .toolbar,.search,.counter,.select-hint,th.col-star::before,.sticky-bar,.cta-buttons,.progress-wrap{display:none !important;}
    .stat,.discount-stat{background:#fff !important;border-color:#999 !important;}
    .lbl,.discount-stat .lbl{color:#000 !important;}
    .val,.discount-stat .val{color:#000 !important;}
    .block-title{color:#000 !important;}
    th{background:#000 !important;color:#FFD700 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
    td{color:#000 !important;border-color:#ccc !important;}
    td.price,td.price.discount{color:#000 !important;}
    input,select{background:#fff !important;color:#000 !important;border-color:#ccc !important;}
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="wrap"&gt;

  
  &lt;div class="seo-hidden" aria-hidden="true"&gt;
    Запчасти на дробемет, запчасти для дробеметной установки, дробемет, дробеметная установка, дробеметное оборудование,
    запчасти дробемет, купить запчасти на дробемет, прайс-лист на запчасти для дробемета, колесо рабочее,
    колесо рабочее 42115.001.400, защита торцевая, защита торцевая 42115.001.360, защита торцевая 42115.001.301,
    защита боковая, защита боковая 42115.001.303, лопасть, лопасть 42115.001.009, распредкамера, распредкамера 42115.001.003,
    кольцо отражательное, кольцо отражательное 42115.001.004, защита верхняя, защита верхняя 42115.001.302,
    импеллер, импеллер 42115.000.002, броня, броня 9.8604.000.005-01, 42115.001.400, 42115.001.360, 42115.001.301,
    42115.001.303, 42115.001.009, 42115.001.003, 42115.001.004, 42115.001.302, 42115.000.002, 9.8604.000.005-01,
    купить запчасти для дробемета, запчасти для дробемета цена,
    запчасти для дробеметной установки цена, запчасти для дробемета с доставкой, изготовление запчастей для дробемета,
    запчасти для дробемета по чертежам, ремонт дробемета, комплектующие для дробемета, износ деталей дробемета,
    скидка на запчасти для дробемета, ООО Арсенал-Деталь, Арсенал-Деталь запчасти, запчасти для дробемета Арсенал-Деталь,
    запчасти для дробемета от производителя, дробеметная камера, дробеметная установка запчасти, дробеметный аппарат,
    дробеметная машина, дробеструйная установка, дробеструйное оборудование, дробеметные лопатки, дробеметное колесо,
    импеллер для дробемета, лопасть для дробемета, чугун ИЧХ-15, сталь 110Г13Л, сталь Х12МФ
  &lt;/div&gt;

  
  &lt;header class="header"&gt;
    &lt;div class="tag"&gt;ПРАЙС-ЛИСТ · ЗАПЧАСТИ ДЛЯ ДРОБЕМЁТНЫХ УСТАНОВОК&lt;/div&gt;
    &lt;h1&gt;Запчасти на дробемет купить от производителя&lt;/h1&gt;
    &lt;div class="line"&gt;&lt;/div&gt;
    &lt;p&gt;Промышленное оборудование · Изготовление по чертежам и ТУ&lt;/p&gt;
    &lt;div class="company-info"&gt;
      &lt;b&gt;ООО «Арсенал-Деталь»&lt;/b&gt; · ИНН 6670215323 / КПП 667001001 · ОГРН 1086670018445&lt;br /&gt;
      Телефон: &lt;b&gt;8 (902) 873-36-90&lt;/b&gt; · E-mail: &lt;b&gt;arsenal-detal@list.ru&lt;/b&gt;
    &lt;/div&gt;
  &lt;/header&gt;

  
  &lt;section class="discount-banner" id="discountBanner"&gt;
    &lt;h3&gt;? Скидка от объёма ?&lt;/h3&gt;
    &lt;p&gt;Чем больше партия — тем ниже цена за штуку. Скидка применяется &lt;b&gt;автоматически ко всей партии&lt;/b&gt; при достижении порога.&lt;/p&gt;
    &lt;div class="progress-wrap"&gt;
      &lt;div class="progress-fill" id="progressFill" style="width:0%"&gt;&lt;/div&gt;
      &lt;div class="progress-label" id="progressLabel"&gt;Отметьте позиции — узнаете свою скидку&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="discount-stats"&gt;
      &lt;div class="discount-stat"&gt;&lt;div class="lbl"&gt;Набрано, шт&lt;/div&gt;&lt;div class="val" id="discQty"&gt;0 шт&lt;/div&gt;&lt;/div&gt;
      &lt;div class="discount-stat"&gt;&lt;div class="lbl"&gt;Следующий порог&lt;/div&gt;&lt;div class="val" id="discNext"&gt;5 шт&lt;/div&gt;&lt;/div&gt;
      &lt;div class="discount-stat"&gt;&lt;div class="lbl"&gt;Ваша скидка&lt;/div&gt;&lt;div class="val new" id="discRate"&gt;0%&lt;/div&gt;&lt;/div&gt;
      &lt;div class="discount-stat"&gt;&lt;div class="lbl"&gt;Цена со скидкой&lt;/div&gt;&lt;div class="val new" id="discPrice"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  
  &lt;section class="cta-block"&gt;
    &lt;h2&gt;Отметьте нужные позиции&lt;/h2&gt;
    &lt;p&gt;Кликните &lt;b&gt;★&lt;/b&gt; или задайте &lt;b&gt;количество&lt;/b&gt; — сумма по строке и итог пересчитаются мгновенно.&lt;br /&gt;
    При партии от &lt;b&gt;5 шт&lt;/b&gt; скидка применится автоматически.&lt;/p&gt;
    &lt;div class="cta-counter"&gt;Выбрано: &lt;b id="selectedCount"&gt;0&lt;/b&gt; из &lt;span id="totalPositions"&gt;0&lt;/span&gt;&lt;/div&gt;
    &lt;div class="cta-buttons"&gt;
      &lt;button class="btn-big primary" onclick="downloadRequest()"&gt;⬇ Скачать запрос КП&lt;/button&gt;
      &lt;button class="btn-big" onclick="sendByEmail()"&gt;? Отправить на e-mail&lt;/button&gt;
      &lt;button class="btn-big" onclick="scrollToTable()"&gt;↓ К каталогу&lt;/button&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;div class="stats"&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Всего позиций&lt;/div&gt;&lt;div class="val" id="statTotal"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Мин. цена&lt;/div&gt;&lt;div class="val sm" id="statPrice"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Макс. цена&lt;/div&gt;&lt;div class="val sm" id="statPriceMax"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Макс. скидка&lt;/div&gt;&lt;div class="val sm green" id="statMaxDisc"&gt;—&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="toolbar"&gt;
    &lt;input type="text" class="search" id="search" placeholder="? Поиск по артикулу, наименованию, материалу..." /&gt;
    &lt;div class="counter" id="counter"&gt;Найдено: 0&lt;/div&gt;
    &lt;button class="btn red" onclick="resetAll()"&gt;✕ Очистить всё&lt;/button&gt;
    &lt;button class="btn primary" onclick="downloadRequest()"&gt;⬇ CSV&lt;/button&gt;
    &lt;button class="btn primary" onclick="dlExcel()"&gt;⬇ Excel&lt;/button&gt;
    &lt;button class="btn" onclick="window.print()"&gt;? Печать&lt;/button&gt;
  &lt;/div&gt;

  &lt;section class="table-block" id="catalog"&gt;
    &lt;div class="select-hint"&gt;→ НАЖМИ ★ ИЛИ ВВЕДИ КОЛ-ВО →&lt;/div&gt;
    &lt;div class="block-title"&gt;Прайс-лист · Запчасти для дробеметных установок · Цены с НДС&lt;/div&gt;
    &lt;div class="table-wrap"&gt;
      &lt;table id="tbl"&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th class="col-star" title="Отметь позиции"&gt;★&lt;/th&gt;
            &lt;th class="col-qty"&gt;Кол-во, шт&lt;/th&gt;
            &lt;th class="num sortable" data-key="num"&gt;№&lt;/th&gt;
            &lt;th class="sortable" data-key="article"&gt;Артикул&lt;/th&gt;
            &lt;th class="sortable" data-key="name"&gt;Наименование&lt;/th&gt;
            &lt;th class="num sortable col-weight" data-key="weight"&gt;Вес, кг&lt;/th&gt;
            &lt;th class="sortable col-material" data-key="material"&gt;Материал&lt;/th&gt;
            &lt;th class="num sortable" data-key="price"&gt;Цена без скидки, ₽/шт&lt;/th&gt;
            &lt;th class="num"&gt;Цена со скидкой, ₽/шт&lt;/th&gt;
            &lt;th class="num"&gt;Сумма, ₽&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody id="tbody"&gt;&lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
    &lt;div class="footnote"&gt;
      &lt;div class="fn"&gt;Цены указаны с НДС · Кратность отгрузки по запросу&lt;/div&gt;
      &lt;div class="fn"&gt;Срок изготовления: &lt;b&gt;15-20 рабочих дней&lt;/b&gt; на партию&lt;/div&gt;
      &lt;div class="fn"&gt;Материал исполнения — &lt;b&gt;по чертежу&lt;/b&gt;; в таблице указаны допустимые марки&lt;/div&gt;
      &lt;div class="fn"&gt;Скидка применяется &lt;b&gt;ко всей партии&lt;/b&gt; при достижении порога по количеству&lt;/div&gt;
      &lt;div class="fn"&gt;Возможно изготовление по вашим чертежам и ТУ&lt;/div&gt;
    &lt;/div&gt;
  &lt;/section&gt;

  &lt;section class="cta"&gt;
    &lt;p class="cta-text"&gt;Изготовим запчасти для дробемета по вашим чертежам и ТУ&lt;/p&gt;
    &lt;a href="tel:+79028733690" class="cta-btn"&gt;8 (902) 873-36-90&lt;/a&gt;
    &lt;a href="mailto:arsenal-detal@list.ru?subject=Запрос%20на%20запчасти%20для%20дробемета" class="cta-mail"&gt;✉ arsenal-detal@list.ru&lt;/a&gt;
    &lt;p class="manager"&gt;Менеджер: Ольга · ООО «Арсенал-Деталь»&lt;/p&gt;
  &lt;/section&gt;

&lt;/div&gt;

&lt;div class="sticky-bar" id="stickyBar"&gt;
  &lt;div class="sticky-inner"&gt;
    &lt;div class="sticky-info"&gt;
      &lt;div class="sticky-stat"&gt;
        &lt;div class="lbl"&gt;Позиций&lt;/div&gt;
        &lt;div class="val" id="barCount"&gt;0&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="sticky-stat"&gt;
        &lt;div class="lbl"&gt;Всего, шт&lt;/div&gt;
        &lt;div class="val" id="barQty"&gt;0&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="sticky-stat"&gt;
        &lt;div class="lbl"&gt;Скидка&lt;/div&gt;
        &lt;div class="val" id="barRate"&gt;0%&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="sticky-stat"&gt;
        &lt;div class="lbl" id="barTotalLabel"&gt;Итого с НДС&lt;/div&gt;
        &lt;div class="val big" id="barTotal"&gt;0 ₽&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="sticky-actions"&gt;
      &lt;button class="sticky-btn primary" onclick="downloadRequest()"&gt;⬇ Скачать запрос КП&lt;/button&gt;
      &lt;button class="sticky-btn" onclick="sendByEmail()"&gt;? На e-mail&lt;/button&gt;
      &lt;button class="sticky-btn clear" onclick="clearPicked()"&gt;✕ Очистить&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
/* ============================================================
   ВНЕШНИЙ ПРАЙС · ЗАПЧАСТИ НА ДРОБЕМЕТ · ООО «Арсенал-Деталь»
   ------------------------------------------------------------
   ЦЕНЫ — от экономистов, продажные, с НДС.
   Наценка НЕ применяется. Значения вставлены как есть:
   • Колесо рабочее 42115.001.400 — 135 000,0 ₽
   • Защита торцевая 42115.001.360 — 43 000,0 ₽
   • Защита торцевая 42115.001.301 — 36 800,0 ₽
   • Защита боковая 42115.001.303 — 13 380,0 ₽
   • Лопасть 42115.001.009 — 2 800,0 ₽
   • Распредкамера 42115.001.003 — 8 700,0 ₽
   • Кольцо отражательное 42115.001.004 — 13 400,0 ₽
   • Защита верхняя 42115.001.302 — 17 560,0 ₽
   • Импеллер 42115.000.002 — 7 300,0 ₽
   • Броня 9.8604.000.005-01 — 11 840,0 ₽
   ------------------------------------------------------------
   МАТЕРИАЛЫ — допустимые марки (по чертежу):
   • ИЧХ-15 — высокохромистый износостойкий чугун
   • 110Г13Л — высокомарганцовистая износостойкая сталь
   • Х12МФ — штамповая сталь, HRC 60±5
   ------------------------------------------------------------
   ПОВЕДЕНИЕ:
   • Ввод количества в поле "Кол-во" автоматически отмечает позицию.
   • Сумма по строке и итог в нижней панели пересчитываются на лету
     (без перерисовки всей таблицы — фокус не теряется).
   • Кол-во = 0 или пусто → позиция снимается с выбора.
   ============================================================ */

var PROJECT = {
  id: 'drobemet-parts',
  title: 'Запчасти на дробемет',
  subtitle: 'Промышленное оборудование · Изготовление по чертежам',
  vat: 22,
  pricePerKg: 0,

  discounts: [
    {qty: 5,  pct: 5},
    {qty: 10, pct: 10},
    {qty: 20, pct: 15}
  ],

  /* Цены — как дали экономисты, без наценки */
  data: [
    {num:1,  article:'42115.001.400',      name:'Колесо рабочее 42115.001.400 (правое вращение)', weight:55,   material:'ИЧХ-15 / 110Г13Л',      price:135000},
    {num:2,  article:'42115.001.360',      name:'Защита торцевая 42115.001.360',                  weight:29,   material:'ИЧХ-15 / 110Г13Л',      price:43000},
    {num:3,  article:'42115.001.301',      name:'Защита торцевая 42115.001.301',                  weight:28.3, material:'ИЧХ-15 / 110Г13Л',      price:36800},
    {num:4,  article:'42115.001.303',      name:'Защита боковая 42115.001.303',                   weight:8.3,  material:'Х12МФ (HRC 60±5) / ИЧХ-15', price:13380},
    {num:5,  article:'42115.001.009',      name:'Лопасть 42115.001.009',                          weight:1.4,  material:'ИЧХ-15 / Х12МФ',        price:2800},
    {num:6,  article:'42115.001.003',      name:'Распредкамера 42115.001.003',                    weight:5.5,  material:'Х12МФ',                 price:8700},
    {num:7,  article:'42115.001.004',      name:'Кольцо отражательное 42115.001.004',             weight:3.2,  material:'Сталь / ИЧХ-15',        price:13400},
    {num:8,  article:'42115.001.302',      name:'Защита верхняя 42115.001.302',                   weight:11.5, material:'110Г13Л / ИЧХ-15',      price:17560},
    {num:9,  article:'42115.000.002',      name:'Импеллер 42115.000.002',                         weight:3.6,  material:'Х12МФ',                 price:7300},
    {num:10, article:'9.8604.000.005-01',  name:'Броня 9.8604.000.005-01',                        weight:9.4,  material:'ИЧХ-15 / 110Г13Л',      price:11840}
  ],

  phone: '8 (902) 873-36-90',
  phoneHref: '+79028733690',
  email: 'arsenal-detal@list.ru',
  manager: 'Менеджер: Ольга · ООО «Арсенал-Деталь»'
};

/* ==================== СОСТОЯНИЕ ==================== */
var state = {search:'', sort:{key:'num', dir:1}};
var picked = {};          // {num: qty}
var rowRefs = {};         // {num: {tr, star, qty, cellSum, cellPrice, cellPriceOld}}

function fmt(n){ return Math.round(n).toLocaleString('ru-RU'); }
function fmtWeight(w){
  if (w == null) return '—';
  return String(w).replace('.', ',') + ' кг';
}
function today(){
  var d=new Date(), p=function(n){return String(n).padStart(2,'0');};
  return d.getFullYear()+'-'+p(d.getMonth()+1)+'-'+p(d.getDate());
}
function getBasePrice(r){ return Math.round(r.price); }
function getRowByNum(n){ return PROJECT.data.find(function(x){return x.num===n;}); }

function getDiscountPct(totalQty){
  var pct = 0;
  PROJECT.discounts.forEach(function(d){
    if (totalQty &gt;= d.qty) pct = d.pct;
  });
  return pct;
}
function getNextThreshold(totalQty){
  for (var i=0;i&lt;PROJECT.discounts.length;i++){
    if (totalQty &lt; PROJECT.discounts[i].qty) return PROJECT.discounts[i];
  }
  return null;
}
function calcPriceWithDiscount(r, pct){
  return Math.round(getBasePrice(r) * (1 - pct/100));
}
function getTotalQty(){
  var total = 0;
  Object.keys(picked).forEach(function(n){ total += (picked[n]||0); });
  return total;
}
function getFiltered(){
  var rows = PROJECT.data.slice();
  if (state.search){
    var q = state.search.trim().toLowerCase();
    rows = rows.filter(function(r){
      return String(r.num).indexOf(q)!==-1 ||
             (r.article||'').toLowerCase().indexOf(q)!==-1 ||
             (r.name||'').toLowerCase().indexOf(q)!==-1 ||
             (r.material||'').toLowerCase().indexOf(q)!==-1;
    });
  }
  if (state.sort.key){
    var k=state.sort.key, d=state.sort.dir;
    rows.sort(function(a,b){
      var va=a[k], vb=b[k];
      if(typeof va==='number' &amp;&amp; typeof vb==='number') return (va-vb)*d;
      return String(va).localeCompare(String(vb),'ru')*d;
    });
  }
  return rows;
}
function updateStats(){
  var d = PROJECT.data;
  document.getElementById('statTotal').textContent = d.length;
  var prices = d.map(getBasePrice);
  document.getElementById('statPrice').textContent = fmt(Math.min.apply(null,prices))+' ₽';
  document.getElementById('statPriceMax').textContent = fmt(Math.max.apply(null,prices))+' ₽';
  var maxPct = PROJECT.discounts.reduce(function(m,x){return Math.max(m,x.pct);},0);
  document.getElementById('statMaxDisc').textContent = 'до '+maxPct+'%';
  document.getElementById('totalPositions').textContent = d.length;
}

/* -------- Полная перерисовка таблицы -------- */
function render(){
  var rows = getFiltered();
  var tbody = document.getElementById('tbody');
  tbody.innerHTML = '';
  rowRefs = {};
  document.getElementById('counter').textContent = 'Найдено: ' + rows.length;

  if(!rows.length){
    tbody.innerHTML = '&lt;tr&gt;&lt;td colspan="10" style="text-align:center;padding:40px;opacity:.6"&gt;Ничего не найдено&lt;/td&gt;&lt;/tr&gt;';
    updateStickyBar(); updateDiscountBanner(); return;
  }

  var discPct = getDiscountPct(getTotalQty());

  rows.forEach(function(r){
    var isPicked = picked[r.num]!==undefined &amp;&amp; picked[r.num] &gt; 0;
    var qty = picked[r.num]!==undefined ? picked[r.num] : 1;
    var bp = getBasePrice(r);
    var dp = calcPriceWithDiscount(r, discPct);
    var sum = isPicked ? dp * qty : 0;

    var tr = document.createElement('tr');
    if (isPicked) tr.className = 'picked' + (discPct&gt;0 ? ' discount-active' : '');

    tr.innerHTML =
      '&lt;td class="col-star"&gt;&lt;span class="star'+(isPicked?' on':'')+'" data-num="'+r.num+'"&gt;'+(isPicked?'★':'☆')+'&lt;/span&gt;&lt;/td&gt;'+
      '&lt;td class="col-qty"&gt;&lt;input type="number" class="qty" data-num="'+r.num+'" value="'+qty+'" min="0" step="1"'+(isPicked?'':' data-empty="1"')+'&gt;&lt;/td&gt;'+
      '&lt;td class="num"&gt;'+r.num+'&lt;/td&gt;'+
      '&lt;td class="article"&gt;'+r.article+'&lt;/td&gt;'+
      '&lt;td&gt;&lt;b&gt;'+r.name+'&lt;/b&gt;&lt;/td&gt;'+
      '&lt;td class="num col-weight"&gt;'+fmtWeight(r.weight)+'&lt;/td&gt;'+
      '&lt;td class="col-material"&gt;'+r.material+'&lt;/td&gt;'+
      '&lt;td class="num price-old"&gt;'+fmt(bp)+' ₽&lt;/td&gt;'+
      '&lt;td class="num price'+(discPct&gt;0?' discount':'')+'"&gt;'+(discPct&gt;0?fmt(dp)+' ₽':fmt(bp)+' ₽')+'&lt;/td&gt;'+
      '&lt;td class="num '+(isPicked?'price':'')+'"&gt;'+(isPicked?fmt(sum)+' ₽':'—')+'&lt;/td&gt;';
    tbody.appendChild(tr);

    rowRefs[r.num] = {
      tr: tr,
      star: tr.querySelector('.star'),
      qty: tr.querySelector('input.qty'),
      cellPriceOld: tr.querySelector('.price-old'),
      cellPrice: tr.querySelector('.price'),
      cellSum: tr.querySelector('td:last-child')
    };
  });

  bindStars(); bindQty();
  updateSort(); updateStickyBar(); updateDiscountBanner();
}

function updateSort(){
  document.querySelectorAll('#tbl th.sortable').forEach(function(th){
    th.classList.remove('asc','desc');
    if (th.dataset.key===state.sort.key) th.classList.add(state.sort.dir===1?'asc':'desc');
  });
}
function bindStars(){
  Object.keys(rowRefs).forEach(function(n){
    var ref = rowRefs[n];
    ref.star.addEventListener('click',function(){
      var num = parseInt(this.dataset.num,10);
      if (picked[num]!==undefined &amp;&amp; picked[num]&gt;0){
        delete picked[num];
        if (rowRefs[num]) rowRefs[num].qty.value = '';
      } else {
        picked[num] = 1;
        if (rowRefs[num]) rowRefs[num].qty.value = 1;
      }
      refreshAll();
    });
  });
}
function bindQty(){
  Object.keys(rowRefs).forEach(function(n){
    var inp = rowRefs[n].qty;
    inp.addEventListener('input',function(){
      var num = parseInt(this.dataset.num,10);
      var v = this.value.trim();
      if (v === '' || v === '0'){
        delete picked[num];
      } else {
        var q = Math.max(0, parseInt(v,10)||0);
        if (q &gt; 0) picked[num] = q; else delete picked[num];
      }
      refreshAll();
    });
    inp.addEventListener('blur',function(){
      var num = parseInt(this.dataset.num,10);
      if (picked[num]===undefined){
        this.value = '';
      }
    });
  });
}

/* Обновить всё: каждую строку, итог, баннер */
function refreshAll(){
  var discPct = getDiscountPct(getTotalQty());
  Object.keys(rowRefs).forEach(function(n){
    var r = getRowByNum(parseInt(n,10));
    if (!r) return;
    var ref = rowRefs[n];
    var isPicked = picked[n]!==undefined &amp;&amp; picked[n]&gt;0;
    var qty = isPicked ? picked[n] : 0;
    var bp = getBasePrice(r);
    var dp = calcPriceWithDiscount(r, discPct);

    ref.tr.classList.remove('picked','discount-active');
    if (isPicked) ref.tr.classList.add('picked');
    if (isPicked &amp;&amp; discPct&gt;0) ref.tr.classList.add('discount-active');

    ref.star.textContent = isPicked ? '★' : '☆';
    ref.star.classList.toggle('on', isPicked);

    if (document.activeElement !== ref.qty){
      ref.qty.value = (picked[n]!==undefined) ? picked[n] : 1;
    }

    ref.cellPriceOld.textContent = fmt(bp) + ' ₽';
    ref.cellPrice.textContent = discPct&gt;0 ? fmt(dp)+' ₽' : fmt(bp)+' ₽';
    ref.cellPrice.classList.toggle('discount', discPct&gt;0);

    var sum = isPicked ? dp * qty : 0;
    ref.cellSum.textContent = isPicked ? fmt(sum)+' ₽' : '—';
  });
  updateStickyBar(); updateDiscountBanner();
}

function updateDiscountBanner(){
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);
  var next = getNextThreshold(totalQty);
  var maxThreshold = PROJECT.discounts[PROJECT.discounts.length-1].qty;
  var progressPct = Math.min(100, (totalQty / maxThreshold) * 100);

  var banner = document.getElementById('discountBanner');
  if (banner){
    if (discPct &gt; 0) banner.classList.add('active');
    else banner.classList.remove('active');
  }
  var fill = document.getElementById('progressFill');
  if (fill) fill.style.width = progressPct.toFixed(1)+'%';

  var lbl = document.getElementById('progressLabel');
  if (lbl){
    if (totalQty === 0) lbl.innerHTML = 'Отметьте позиции — узнаете свою скидку';
    else if (!next) lbl.innerHTML = '? &lt;b&gt;МАКСИМАЛЬНАЯ СКИДКА '+discPct+'%&lt;/b&gt; применена ко всей партии';
    else lbl.innerHTML = 'Набрано: &lt;b&gt;'+fmt(totalQty)+' шт&lt;/b&gt; · до скидки '+next.pct+'% осталось '+fmt(next.qty-totalQty)+' шт';
  }
  var q = document.getElementById('discQty');
  if (q) q.textContent = fmt(totalQty)+' шт';
  var nxt = document.getElementById('discNext');
  if (nxt) nxt.textContent = next ? fmt(next.qty)+' шт (−'+next.pct+'%)' : 'Максимум ✓';
  var rate = document.getElementById('discRate');
  if (rate) rate.textContent = discPct+'%';
  var priceEl = document.getElementById('discPrice');
  if (priceEl){
    if (totalQty === 0) priceEl.textContent = '—';
    else if (discPct &gt; 0) priceEl.textContent = '−'+discPct+'% ко всей партии';
    else priceEl.textContent = 'Пока без скидки';
  }
}
function updateStickyBar(){
  var nums = Object.keys(picked).filter(function(n){return picked[n]&gt;0;});
  var count = nums.length;
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);
  var discountActive = discPct &gt; 0;
  var totalSum = 0;
  nums.forEach(function(n){
    var r = getRowByNum(parseInt(n,10));
    if (!r) return;
    totalSum += calcPriceWithDiscount(r, discPct) * picked[n];
  });
  document.getElementById('barCount').textContent = count;
  document.getElementById('barQty').textContent = fmt(totalQty);
  document.getElementById('barRate').textContent = discountActive ? '−'+discPct+'%' : '0%';
  document.getElementById('barTotal').textContent = fmt(totalSum)+' ₽';
  document.getElementById('barTotalLabel').textContent = discountActive ? 'Итого со скидкой' : 'Итого с НДС';
  var bar = document.getElementById('stickyBar');
  if (count &gt; 0) bar.classList.add('show'); else bar.classList.remove('show');
  if (discountActive) bar.classList.add('discount-active'); else bar.classList.remove('discount-active');
  var sel = document.getElementById('selectedCount');
  if (sel) sel.textContent = count;
}
function clearPicked(){
  if (!Object.keys(picked).length) return;
  if (!confirm('Очистить все отмеченные позиции?')) return;
  picked = {};
  Object.keys(rowRefs).forEach(function(n){ rowRefs[n].qty.value = ''; });
  render();
}
function resetAll(){
  if (!confirm('Сбросить все данные?')) return;
  picked = {}; state.search = ''; state.sort = {key:'num', dir:1};
  document.getElementById('search').value = '';
  render();
}
function scrollToTable(){
  document.getElementById('catalog').scrollIntoView({behavior:'smooth',block:'start'});
}
function downloadRequest(){
  var nums = Object.keys(picked).filter(function(n){return picked[n]&gt;0;});
  if (!nums.length){
    alert('Сначала отметьте нужные позиции звёздочкой ★ или задайте количество.');
    scrollToTable(); return;
  }
  var rows = PROJECT.data.filter(function(r){return picked[r.num]&gt;0;});
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);
  var header = ['№','Артикул','Наименование','Вес, кг','Материал','Цена без скидки, ₽','Скидка, %','Цена со скидкой, ₽','Кол-во, шт','Сумма, ₽'];
  var body = rows.map(function(r){
    var q = picked[r.num]||0;
    var dp = calcPriceWithDiscount(r, discPct);
    return [r.num, r.article, r.name, String(r.weight).replace('.', ','), r.material, getBasePrice(r), discPct, dp, q, dp*q];
  });
  body.push([]);
  body.push(['','','ИТОГО:','','','',discPct+'%','',totalQty, Math.round(rows.reduce(function(s,r){
    return s + calcPriceWithDiscount(r, discPct) * (picked[r.num]||0);
  },0))]);
  var esc = function(v){return '"'+String(v==null?'':v).replace(/"/g,'""')+'"';};
  var csv = [header].concat(body).map(function(r){return r.map(esc).join(';');}).join('\r\n');
  var blob = new Blob(['\uFEFF'+csv],{type:'text/csv;charset=utf-8;'});
  var url = URL.createObjectURL(blob);
  var a = document.createElement('a');
  a.href = url;
  a.download = 'Запрос_КП_Дробемет_'+today()+'.csv';
  document.body.appendChild(a); a.click(); a.remove();
  setTimeout(function(){URL.revokeObjectURL(url);},500);
}
function dlExcel(){
  var rows = getFiltered();
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);
  var header = ['№','Артикул','Наименование','Вес, кг','Материал','Цена без скидки, ₽','Скидка, %','Цена со скидкой, ₽'];
  var body = rows.map(function(r){
    return [r.num, r.article, r.name, String(r.weight).replace('.', ','), r.material, getBasePrice(r), discPct, calcPriceWithDiscount(r, discPct)];
  });
  var esc = function(v){return String(v==null?'':v).replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');};
  var table = '&lt;table border="1"&gt;&lt;thead&gt;&lt;tr&gt;'+header.map(function(h){return '&lt;th&gt;'+esc(h)+'&lt;/th&gt;';}).join('')+'&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;'+body.map(function(r){return '&lt;tr&gt;'+r.map(function(c){return '&lt;td&gt;'+esc(c)+'&lt;/td&gt;';}).join('')+'&lt;/tr&gt;';}).join('')+'&lt;/tbody&gt;&lt;/table&gt;';
  var html = '&lt;html xmlns:x="urn:schemas-microsoft-com:office:excel"&gt;&lt;head&gt;&lt;meta charset="UTF-8"&gt;&lt;/head&gt;&lt;body&gt;&lt;h2&gt;Запчасти на дробемет — прайс-лист (с НДС)&lt;/h2&gt;'+table+'&lt;/body&gt;&lt;/html&gt;';
  var blob = new Blob(['\uFEFF'+html],{type:'application/vnd.ms-excel;charset=utf-8;'});
  var url = URL.createObjectURL(blob);
  var a = document.createElement('a');
  a.href = url;
  a.download = 'Дробемет_прайс_'+today()+'.xls';
  document.body.appendChild(a); a.click(); a.remove();
  setTimeout(function(){URL.revokeObjectURL(url);},500);
}
function sendByEmail(){
  var nums = Object.keys(picked).filter(function(n){return picked[n]&gt;0;});
  if (!nums.length){
    alert('Сначала отметьте нужные позиции звёздочкой ★.');
    scrollToTable(); return;
  }
  var rows = PROJECT.data.filter(function(r){return picked[r.num]&gt;0;});
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);
  var totalSum = 0;
  var lines = ['Здравствуйте!','','Прошу подготовить коммерческое предложение по запчастям для дробемета:',''];
  rows.forEach(function(r){
    var q = picked[r.num]||0;
    var dp = calcPriceWithDiscount(r, discPct);
    totalSum += dp*q;
    lines.push('№'+r.num+' · '+r.article+' · '+r.name+' · вес '+String(r.weight).replace('.', ',')+' кг · материал: '+r.material+' · '+fmt(dp)+' ₽/шт × '+fmt(q)+' шт = '+fmt(dp*q)+' ₽');
  });
  lines.push('');
  lines.push('Всего позиций: '+rows.length);
  lines.push('Всего штук: '+fmt(totalQty));
  if (discPct &gt; 0) lines.push('✓ Скидка от объёма: '+discPct+'% (применена ко всей партии)');
  lines.push('ИТОГО: '+fmt(totalSum)+' ₽ (с НДС)');
  lines.push('');
  lines.push('Прошу указать сроки изготовления и условия отгрузки.');
  lines.push('');
  lines.push('С уважением,');
  var subject = encodeURIComponent('Запрос КП — запчасти на дробемет ('+rows.length+' поз.)');
  var body = encodeURIComponent(lines.join('\n'));
  window.location.href = 'mailto:'+PROJECT.email+'?subject='+subject+'&amp;body='+body;
}
document.addEventListener('DOMContentLoaded', function(){
  updateStats(); render();
  document.getElementById('search').addEventListener('input',function(e){
    state.search = e.target.value; render();
  });
  document.querySelectorAll('#tbl th.sortable').forEach(function(th){
    th.addEventListener('click',function(){
      var k = th.dataset.key;
      if (state.sort.key===k) state.sort.dir *= -1;
      else state.sort = {key:k, dir:1};
      render();
    });
  });
});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-11-01T09:35:14Z</updated>
  <logo>https://pandoraburo.ru/ssl/u/pic/07/26436cc3c611f19d9efcd8c4a10874/-/0c723f71762611f1b3964aaba1665535.jpg</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
