<?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/truboprovodnaya-armatura-iz-nalichiya</id>
  <link href="https://www.pandoraburo.ru/truboprovodnaya-armatura-iz-nalichiya.xml" rel="self"/>
  <title>Трубопроводная арматура из наличия</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="Заглушки фланцевые и поворотные, тройники сварные равнопроходные и переходные, краны шаровые фланцевые, компенсаторы сальниковые односторонние и двухсторонние. Ду15–Ду1620, Ру6–Ру63. В наличии. Арсенал-Деталь, Екатеринбург. 8 (902) 873-36-90."&gt;
&lt;meta name="keywords" content="заглушка фланцевая, заглушка поворотная, АТК 24.200.02-90, АТК 26-18-5-93, тройник сварной, ОСТ 34-10-762-97, ОСТ 34-10-764-97, тройник равнопроходный, тройник переходный, кран шаровой фланцевый, КШ.Ф.Ф, кран шаровой под задвижку, компенсатор сальниковый, компенсатор сальниковый односторонний, компенсатор сальниковый двухсторонний, компенсатор Ду400, компенсатор Ду700, компенсатор Ру16, компенсатор Ру25, фланец стальной, крепёж фланцевый, прокладка паронитовая, Арсенал-Деталь, Екатеринбург, трубопроводная арматура, детали трубопроводов"&gt;
&lt;meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-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/catalog" /&gt;
&lt;style&gt;
  :root{
    --gold:#FFD700;--gold-light:#FFE55C;--gold-deep:#B8860B;
    --bg:#0a0a0a;--muted:#9a8040;--border:rgba(212,175,55,.35);
    --accent:#FF8C00;--ok:#7dff7d;--bad:#ff9a9a;
    --green:#7dff7d;--green-dark:#3aa03a;
  }
  *{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 160px;line-height:1.5;}
  .wrap{max-width:1600px;margin:0 auto}

  .banner{max-width:640px;margin:0 auto 14px;background:radial-gradient(120% 120% at 20% 0%,rgba(255,215,0,.18),transparent 55%),linear-gradient(135deg,#111,#0a0a0a);border:1px solid var(--gold);border-radius:14px;padding:24px;text-align:center;box-shadow:0 6px 22px rgba(0,0,0,.6);}
  .banner-tag{display:inline-block;background:var(--gold);color:#0a0a0a;font-size:10px;font-weight:800;letter-spacing:2px;padding:3px 12px;border-radius:999px;margin-bottom:12px;}
  .banner-title{font-weight:800;font-size:22px;line-height:1.15;color:#fff;margin-bottom:10px;}
  .banner-phone{font-size:18px;font-weight:800;color:var(--gold);margin-bottom:4px;}
  .banner-note{font-size:12px;color:var(--muted);}

  .ticker{display:flex;align-items:stretch;background:var(--bg);border:1px solid var(--gold);border-radius:8px;overflow:hidden;margin-bottom:14px;height:44px;}
  .ticker-label{background:var(--gold);color:#0a0a0a;font-weight:800;font-size:12px;letter-spacing:1.5px;padding:0 16px;display:flex;align-items:center;white-space:nowrap;}
  .ticker-vp{flex:1;overflow:hidden;position:relative}
  .ticker-track{display:inline-flex;align-items:center;height:100%;white-space:nowrap;animation:tickerMove 60s linear infinite;padding-left:20px;}
  .ticker-item{color:var(--gold);font-size:13px;padding:0 10px}
  .ticker-item b{color:var(--gold-light);font-weight:700}
  .ticker-dot{color:var(--gold);font-size:10px}
  @keyframes tickerMove{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}

  .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:32px 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),0 0 45px rgba(255,170,0,.6);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),0 0 45px rgba(255,170,0,.6);}50%{text-shadow:0 0 15px rgba(255,215,0,1),0 0 35px rgba(255,199,0,.95),0 0 60px rgba(255,170,0,.8);}}
  .line{width:80px;height:3px;background:var(--gold);margin:0 auto 14px;border-radius:2px;box-shadow:0 0 15px var(--gold);}
  .header p{color:var(--gold-light);font-size:14px;opacity:.95;}

  .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:22px 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:700px;margin:0 auto 16px;
    background:#0a0a0a;border:2px solid var(--green);
    border-radius:999px;height:36px;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;
  }
  .progress-label b{color:var(--gold);font-size:14px;}

  .discount-stats{
    display:grid;grid-template-columns:repeat(3,1fr);
    gap:12px;max-width:800px;margin:0 auto;
  }
  @media(max-width:600px){.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;
  }

  .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{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;}

  .toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;}
  .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;letter-spacing:.3px;}
  .btn:hover{background:var(--gold);color:#0a0a0a;}
  .btn.primary{background:var(--gold);color:#0a0a0a;}

  .filter{background:var(--bg);border:1px solid var(--gold);border-radius:14px;padding:16px;margin-bottom:16px;}
  .filter-row{display:grid;grid-template-columns:2fr 1fr;gap:12px;margin-bottom:12px;}
  @media(max-width:700px){.filter-row{grid-template-columns:1fr;}}
  .filter-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;}
  @media(max-width:1000px){.filter-grid{grid-template-columns:repeat(3,1fr);}}
  @media(max-width:700px){.filter-grid{grid-template-columns:1fr 1fr;}}
  @media(max-width:450px){.filter-grid{grid-template-columns:1fr;}}
  .fld{display:flex;flex-direction:column;gap:5px;}
  .fld label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--gold);opacity:.85;}
  .fld input,.fld select{padding:10px 12px;border:1px solid var(--gold);border-radius:9px;font-size:13px;background:var(--bg);color:var(--gold-light);outline:none;font-family:inherit;font-variant-numeric:tabular-nums;width:100%;}
  .fld input::placeholder{color:rgba(212,175,55,.35);}
  .search{width:100%;padding:13px 16px;border:2px solid var(--gold);border-radius:9px;font-size:14px;background:var(--bg);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:14px;white-space:nowrap;padding:13px 18px;border:1px solid var(--gold);border-radius:9px;background:var(--bg);font-weight:800;display:flex;align-items:center;justify-content:center;}
  .filter-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;}
  .search-help{font-size:11px;color:var(--muted);margin-top:8px;line-height:1.5;}
  .search-help b{color:var(--gold-light);}

  .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);}
  .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:var(--bg);font-size:13px;}
  th,td{padding:11px 10px;text-align:left;border-bottom:1px solid rgba(212,175,55,.2);vertical-align:middle;color:var(--gold);background:transparent;white-space:nowrap;}
  th{position:sticky;top:0;z-index:2;background:var(--bg);color:var(--gold);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:var(--gold-light);}
  th.desc::after{content:' ▼';opacity:1;color:var(--gold-light);}
  th.num,td.num{text-align:right;font-variant-numeric:tabular-nums;}
  th.col-star,td.col-star{width:44px;text-align:center;padding:8px 6px;}
  th.col-qty,td.col-qty{width:80px;text-align:center;padding:8px 6px;}
  th.col-star{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),0 0 24px rgba(255,199,0,.8);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;}}
  .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);}}
  tbody tr{transition:background .15s;}
  tbody tr:hover{background:#1a1408;box-shadow:inset 3px 0 0 var(--gold-light),inset -3px 0 0 var(--gold-light);}
  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.price{font-weight:800;color:var(--gold-light);font-size:14px;}
  td.price.discount{color:var(--green);text-shadow:0 0 10px rgba(125,255,125,.5);}
  td b{color:#fff;}
  td.col-qty input.qty{width:70px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;background:#0a0a0a;color:var(--gold-light);font-size:14px;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:var(--gold-light);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:var(--gold-light);border:1px solid rgba(212,175,55,.5);letter-spacing:.3px;white-space:nowrap;}
  .badge.many{background:rgba(57,255,20,.08);color:var(--ok);border-color:rgba(57,255,20,.3);}
  .badge.zero{background:rgba(255,107,107,.12);color:var(--bad);border-color:rgba(255,107,107,.4);}
  .badge.req{background:rgba(255,215,0,.1);color:var(--gold-light);border-color:rgba(255,215,0,.4);}
  .star{cursor:pointer;font-size:22px;color:rgba(212,175,55,.35);transition:all .2s;user-select:none;text-align:center;display:inline-block;}
  .star:hover{color:var(--gold);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:var(--gold);font-size:12px;position:relative;padding-left:14px;opacity:.9;}
  .fn::before{content:"◆";position:absolute;left:0;color:var(--gold);font-size:8px;top:4px;}

  mark.hl{background:linear-gradient(135deg,#FFD700,#FF8C00);color:#0a0a0a;border-radius:3px;padding:0 2px;font-weight:800;}

  .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);}
  .seo{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0;}

  .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(--accent),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:1600px;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(--bad);}
  .sticky-btn.clear:hover{background:var(--bad);color:#0a0a0a;border-color:var(--bad);}

  @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);}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="wrap" id="app"&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="barBase"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="sticky-stat"&gt;&lt;div class="lbl" id="barDiscountLabel"&gt;Скидка&lt;/div&gt;&lt;div class="val" id="barDiscount"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="sticky-stat"&gt;&lt;div class="lbl"&gt;Итого с НДС 22%&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;
/* ============================================================
   АРСЕНАЛ-ДЕТАЛЬ · Единый каталог
   - Заглушки фланцевые, заглушки поворотные
   - Тройники сварные (равнопроходные и переходные)
   - Краны шаровые фланцевые
   - Компенсаторы сальниковые (односторонние и двухсторонние)
   - Все цены ×1.7, в наличии
   - Скидка от 200 000 ₽ → 10%
   ============================================================ */

var PROJECT = {
  title: 'Заглушки, тройники, краны шаровые, компенсаторы',
  subtitle: 'Ду15–Ду1620 · Ру6–Ру63 · в наличии · цены с НДС',
  vat: 22,
  discountThreshold: 200000,
  discountPercent: 10,
  phone: '8 (902) 873-36-90',
  phoneHref: '+79028733690',
  email: 'arsenal-detal@list.ru',
  manager: 'Менеджер: Ольга · ООО «Арсенал-Деталь»'
};

/* ---------- ВСЕ ТОВАРЫ ---------- */
var PRODUCTS = [];

/* ===== 1. ЗАГЛУШКИ ФЛАНЦЕВЫЕ АТК 24.200.02-90 ===== */
(function(){
  var raw = [
    // Ду, Ру, материал, базовая цена (до ×1.7)
    [15,6,'ст. 20',310],[15,10,'ст. 20',310],[15,16,'ст. 20',325],[15,25,'ст. 20',340],
    [15,40,'12Х18Н10Т',3577],[15,40,'ст. 20',459],
    [20,6,'ст. 20',376],[20,10,'ст. 20',371],[20,16,'ст. 20',391],[20,25,'ст. 20',409],
    [20,40,'12Х18Н10Т',882],[20,40,'ст. 20',240],
    [25,6,'ст. 20',403],[25,10,'ст. 20',421],[25,16,'09Г2С',504],[25,16,'ст. 20',470],
    [25,16,'12Х18Н10Т',2862],[25,25,'ст. 20',222],[25,40,'12Х18Н10Т',2385],[25,40,'ст. 20',516],
    [32,6,'ст. 20',533],[32,10,'ст. 20',542],[32,16,'ст. 20',569],[32,25,'ст. 20',596],[32,40,'ст. 20',627],
    [40,6,'ст. 20',596],[40,10,'ст. 20',610],[40,16,'12Х18Н10Т',3575],[40,16,'ст. 20',631],
    [40,25,'ст. 20',664],[40,40,'12Х18Н10Т',3577],[40,40,'ст. 20',697],
    [50,6,'ст. 20',721],[50,10,'ст. 20',953],[50,16,'09Г2С',1041],[50,16,'12Х18Н10Т',5815],
    [50,16,'ст. 20',999],[50,25,'ст. 20',1053],[50,40,'12Х18Н10Т',4768],[50,40,'ст. 20',721],
    [65,6,'ст. 20',974],[65,10,'ст. 20',992],[65,16,'09Г2С',1171],[65,16,'ст. 20',1101],
    [65,25,'ст. 20',1155],[65,40,'ст. 20',1208],
    [80,6,'ст. 20',1046],[80,10,'ст. 20',1262],[80,10,'ст. 20',4919],[80,16,'09Г2С',1419],
    [80,16,'ст. 20',1316],[80,25,'ст. 20',1457],[80,40,'ст. 20',1528],
    [100,6,'12Х18Н10Т',8343],[100,6,'ст. 20',1262],[100,10,'ст. 20',1377],[100,10,'ст. 20',5297],
    [100,16,'12Х18Н10Т',4965],[100,16,'09Г2С',1703],[100,16,'ст. 20',1389],[100,25,'ст. 20',1839],
    [100,40,'ст. 20',1947],[100,40,'08Х18Н10Т',9296],[100,40,'ст. 20',2385],
    [125,6,'ст. 20',1442],[125,10,'ст. 20',1442],[125,10,'ст. 20',1050],[125,16,'ст. 20',1582],
    [125,25,'ст. 20',2874],[125,40,'ст. 20',3153],
    [150,6,'ст. 20',1160],[150,10,'ст. 20',2820],[150,16,'09Г2С',3600],[150,16,'ст. 20',2974],
    [150,25,'ст. 20',3568],[150,40,'ст. 20',4768],[150,40,'ст. 20',4013],[150,63,'12Х18Н10Т',30984],
    [200,6,'09Г2С',3974],[200,6,'ст. 20',3440],[200,10,'ст. 20',1613],[200,16,'12Х18Н10Т',23835],
    [200,16,'09Г2С',3815],[200,16,'12Х18Н10Т',25025],[200,16,'ст. 20',3514],[200,25,'ст. 20',2840],
    [200,40,'12Х18Н10Т',23835],[200,40,'ст. 20',7327],[200,63,'12Х18Н10Т',47669],
    [250,6,'ст. 20',5103],[250,10,'ст. 20',5765],[250,16,'12Х18Н10Т',39974],[250,16,'ст. 20',7748],
    [250,25,'ст. 20',8954],[250,25,'ст. 20',9269],[250,40,'ст. 20',11821],
    [300,6,'ст. 20',6021],[300,10,'12Х18Н10Т',53296],[300,10,'09Г2С',7416],[300,10,'ст. 20',3474],
    [300,16,'ст. 20',8118],[300,25,'ст. 20',12880],[300,25,'ст. 20',13242],[300,40,'ст. 20',16987],
    [350,6,'ст. 20',9116],[350,10,'ст. 20',7707],[350,16,'ст. 20',11481],[350,25,'ст. 20',18836],
    [350,25,'ст. 20',14593],[350,40,'ст. 20',24583],
    [400,6,'ст. 20',12880],[400,10,'ст. 20',15041],[400,16,'09Г2С',18887],[400,16,'ст. 20',18029],
    [400,25,'ст. 20',25052],[400,40,'ст. 20',36662],
    [450,6,'ст. 20',14982],[450,10,'ст. 20',16571],[450,16,'ст. 20',22895],[450,25,'ст. 20',17128],
    [450,40,'ст. 20',40561],
    [500,6,'ст. 20',6911],[500,10,'ст. 20',20787],[500,16,'ст. 20',30557],[500,25,'ст. 20',40505],
    [500,40,'ст. 20',54552],
    [600,6,'ст. 20',30253],[600,10,'09Г2С',33006],[600,10,'ст. 20',32346],[600,16,'09Г2С',49654],
    [600,16,'ст. 20',47311],[600,25,'ст. 20',51396],
    [700,6,'ст. 20',37856],[700,10,'ст. 20',60164],[700,16,'09Г2С',72326],[700,16,'ст. 20',61763],
    [700,25,'ст. 20',76905],
    [800,6,'ст. 20',56187],[800,10,'09Г2С',76042],[800,10,'ст. 20',72340],[800,16,'ст. 20',84526],
    [800,25,'ст. 20',108900],
    [900,6,'ст. 20',83312],[900,10,'ст. 20',102245],[900,16,'ст. 20',145340],[900,25,'ст. 20',134580],
    [1000,6,'ст. 20',87099],[1000,10,'ст. 20',108875],[1000,16,'ст. 20',153609],
    [1200,6,'ст. 20',142710],[1200,10,'ст. 20',186640],[1200,16,'ст. 20',246254]
  ];
  raw.forEach(function(x,i){
    var dn=x[0], pu=x[1], mat=x[2], base=x[3];
    var price = Math.round(base*1.7/100)*100;
    PRODUCTS.push({
      num: PRODUCTS.length+1,
      section: 'Заглушки фланцевые',
      name: 'Заглушка фланцевая АТК 24.200.02-90 Ду'+dn+' Ру'+pu,
      material: mat,
      dn: dn, pu: pu, weight: '', stock: 1, price: price, term: 'Со склада'
    });
  });
})();

/* ===== 2. ЗАГЛУШКИ ПОВОРОТНЫЕ АТК 26-18-5-93 ===== */
(function(){
  var raw = [
    [25,16,'09Г2С',902],[25,40,'12Х18Н10Т',2982],[25,63,'ст. 20',1295],
    [50,16,'09Г2С',1352],[50,16,'ст. 20',1283],[50,40,'12Х18Н10Т',5961],[50,40,'ст. 20',1488],
    [65,16,'ст. 20',1533],[65,40,'ст. 20',1685],
    [80,16,'09Г2С',2779],[80,16,'09Г2С',1712],[80,16,'15Х5М',2663],[80,16,'ст. 20',1632],[80,40,'ст. 20',1884],
    [100,16,'09Г2С',2343],[100,16,'ст. 20',1020],[100,16,'ст. 20',4632],[100,40,'08Х18Н10Т',9534],[100,40,'ст. 20',2523],
    [125,16,'ст. 20',2883],[125,40,'ст. 20',3207],
    [150,16,'09Г2С',3784],[150,16,'12Х18Н10Т',17659],[150,16,'ст. 20',3594],[150,40,'ст. 20',5306],[150,40,'15Х5М',1986],
    [200,16,'09Г2С',2730],[200,16,'ст. 20',2730],[200,25,'ст. 20',3495],[200,25,'ст. 20',6613],[200,40,'ст. 20',8677],
    [250,16,'09Г2С',8828],[250,16,'ст. 20',8287],[250,25,'ст. 20',10744],[250,40,'ст. 20',12396],
    [300,16,'ст. 20',11570],[300,25,'ст. 20',14462],[300,40,'ст. 20',17767],
    [350,16,'ст. 20',16940],[350,25,'ст. 20',20657],[350,40,'ст. 20',25616],
    [400,16,'09Г2С',22723],[400,25,'ст. 20',29745],[400,40,'ст. 20',38833],
    [450,16,'ст. 20',26483],
    [500,16,'ст. 20',37181],[500,25,'ст. 20',27082],[500,40,'ст. 20',61143],
    [600,16,'ст. 20',43379],
    [700,16,'ст. 20',85105]
  ];
  raw.forEach(function(x){
    var dn=x[0], pu=x[1], mat=x[2], base=x[3];
    var price = Math.round(base*1.7/100)*100;
    PRODUCTS.push({
      num: PRODUCTS.length+1,
      section: 'Заглушки поворотные',
      name: 'Заглушка поворотная АТК 26-18-5-93 Ду'+dn+' Ру'+pu,
      material: mat,
      dn: dn, pu: pu, weight: '', stock: 1, price: price, term: 'Со склада'
    });
  });
})();

/* ===== 3. ТРОЙНИКИ СВАРНЫЕ ОСТ 34-10-762-97 (равнопроходные) ===== */
(function(){
  var raw = [
    ['159х5(7)',400,25,4085],['159х5(9)',400,40,5223],['219х7(11)',450,40,8237],['219х7(9)',450,25,10011],
    ['273х6(8)',500,16,10681],['273х8(11)',500,25,13326],['273х8(14)',500,40,17946],
    ['325х6(8)',550,16,13995],['325х8(10)',550,25,17444],['325х8(16)',550,40,26952],
    ['377х9(11)',650,25,24843],['377х9(18)',650,40,40009],['426х10(9)',700,16,32786],['426х16(10)',700,25,36674],
    ['530х11(8)',800,16,20795],['530х12',800,10,23523],['530х14',800,16,24693],['530х14',800,40,23452],['530х18(8)',800,25,30730],
    ['630х10(8)',1000,10,46832],['630х12',1000,16,61872],['630х12',1000,25,61872],['630х14(8)',1000,16,63316],['630х14',1000,25,78431],['630х18(12)',1000,25,77989],
    ['720х11(9)',1100,10,72962],['720х12',1100,25,80212],['720х14',1100,40,84219],['720х18(9)',1100,16,88697],
    ['820х14(9)',1200,10,89066],['820х18(9)',1200,16,116320],['820х22(11)',1200,25,161197],
    ['1020х14(10)',1600,6,151829],['1020х18(10)',1600,10,185997],['1020х22(10)',1600,16,232474],
    ['1220х14(10)',1800,6,205178],['1220х18(10)',1800,10,307692],['1220х25(10)',1800,16,354596],
    ['1420х14(14)',2100,40,296349],['1420х18(14)',2100,6,387290],['1420х22(14)',2100,10,381746],['1420х25(14)',2100,16,425],
    ['1620х14(14)',2200,40,351594],['1620х18(14)',2200,6,370720],['1620х22(14)',2200,10,405964]
  ];
  raw.forEach(function(x){
    var sz=x[0], L=x[1], pu=x[2], base=x[3];
    var price = Math.round(base*1.7/100)*100;
    PRODUCTS.push({
      num: PRODUCTS.length+1,
      section: 'Тройники равнопроходные',
      name: 'Тройник сварной ОСТ 34-10-762-97 '+sz,
      material: 'ст. 20 / 09Г2С / 12Х18Н10Т',
      dn: sz, pu: pu, weight: 'L='+L, stock: 1, price: price, term: 'Со склада'
    });
  });
})();

/* ===== 4. ТРОЙНИКИ СВАРНЫЕ ОСТ 34-10-764-97 (переходные) ===== */
(function(){
  var raw = [
    ['219х7(9)—159х5(7)',400,40,7031],['273х8(11)—159х5(7)',400,40,10178],['273х8(11)—219х7(11)',400,40,11451],
    ['325х8(10)—273х8(8)',500,25,14531],['325х8(13)—159х5(7)',400,40,13861],['325х8(13)—219х7(11)',500,40,11060],
    ['325х8(16)—273х8(11)',500,40,13240],['325х8(10)—219х7(7)',500,25,13995],
    ['377х9(11)—325х8(10)',600,25,13340],['377х9(15)—159х5(7)',400,40,18414],['377х9(15)—219х7(9)',600,40,18515],
    ['377х9(15)—273х8(14)',600,40,47073],['377х9(11)—273х8(8)',600,25,12600],['377х9(18)—325х8(13)',600,40,56850],
    ['530х11(8)—325х10(8)',700,25,30892],['530х14(8)—426х10(10)',700,25,38126],['530х11(8)—133х4(4)',500,25,20403],
    ['530х11(8)—325х8(6)',700,16,31202],['530х11(8)—159х5(5)',500,25,20691],['530х11(8)—377х9(9)',700,16,30230],
    ['530х11(8)—219х7(7)',600,25,25044],['530х11(8)—426х9(9)',700,16,30723],['530х11(8)—273х10(8)',600,25,26458],
    ['530х14(8)—377х9(9)',700,25,37264],['630х12(8)—377х9(9)',700,16,38273],['630х14(12)—426х12(10)',800,25,47701],
    ['630х12(8)—426х9(9)',800,16,40446],['630х18(12)—530х8(8)',800,25,54978],['630х10(8)—219х7(6)',600,16,27231],
    ['630х12(8)—530х11(8)',800,16,41661],['630х10(8)—273х8(6)',600,16,27467],['630х14(12)—325х8(8)',700,25,43370],
    ['630х10(8)—325х8(6)',700,16,32565],['630х14(12)—377х11(9)',700,25,45101],
    ['720х11(9)—159х5(5)',600,25,33434],['720х14(9)—273х8(8)',750,25,45513],['720х18(9)—426х9(10)',900,25,60914],
    ['720х11(9)—219х9(7)',600,25,34465],['720х14(9)—325х10(8)',750,25,48865],['720х18(9)—530х11(8)',900,25,73717],
    ['720х11(9)—273х8(6)',750,16,42766],['720х14(9)—377х15(9)',750,25,49653],['720х11(9)—108х4(4)',600,25,33403],
    ['720х18(9)—630х14(12)',900,25,74350],['720х11(9)—377х15(9)',750,16,43141],['720х14(9)—530х8(8)',900,16,51605],
    ['720х11(9)—133х4(4)',600,25,33691],['720х9(9)—325х8(6)',750,16,78591],['720х11(9)—630х8(8)',900,10,52062],
    ['720х14(9)—630х10(8)',900,16,57623],
    ['820х14(11)—325х13(8)',750,25,57409],['820х11(9)—325х8(6)',750,16,41218],['820х18(9)—720х9(9)',1100,16,99408],
    ['820х11—273х8',750,16,66564],['820х14(9)—630х12(8)',1000,16,78121],['820х11(9)—377х9(9)',750,16,45219],
    ['820х22(11)—630х12(12)',1000,25,112915],['820х12(9)—426х14(9)',1000,16,64642],['820х18(11)—377х9(9)',750,25,70514],
    ['820х11(9)—530х11(8)',1000,16,44534],['820х22(11)—720х14(9)',1100,25,125924],['820х14(11)—219х7(7)',600,25,64642],
    ['820х18(11)—426х9(10)',1000,25,93580],['820х11(9)—630х10(8)',1000,10,60730],['820х9(9)—273х8(6)',750,16,36326],
    ['820х14(11)—273х11(8)',750,25,44328],['820х18(11)—530х14(8)',1000,25,96403],['820х11(9)—720х9(9)',1100,10,63243],
    ['1020х14(10)—219х7(6)',750,16,69098],['1020х18(14)—325х10(8)',750,25,88669],['1020х14(10)—530х11(8)',1000,16,93368],
    ['1020х22(14)—630х14(12)',1000,25,144676],['1020х18(10)—630х10(8)',1000,16,115655],['1020х14(10)—273х8(6)',750,16,68782],
    ['1020х18(14)—377х15(9)',750,25,90363],['1020х14(10)—530х8(8)',1000,10,90547],['1020х22(14)—720х18(9)',1200,25,178529],
    ['1020х18(10)—720х11(9)',1200,16,139984],['1020х14(10)—325х8(6)',750,16,69384],['1020х18(14)—426х16(10)',1000,25,120326],
    ['1020х14(10)—630х10(8)',1000,10,115953],['1020х25(14)—820х18(11)',1200,25,194121],['1020х18(14)—219х7(7)',750,25,88065],
    ['1020х14(10)—377х9(9)',750,16,69445],['1020х18(14)—820х14(9)',1200,16,141775],['1020х14(10)—720х9(9)',1200,10,139984],
    ['1020х18(14)—273х8(8)',750,25,87748],['1020х14(10)—426х9(9)',1000,16,92233],['1020х22(14)—530х11(8)',1000,25,139947],
    ['1020х14(10)—820х9(9)',1200,10,142138],
    ['1220х18(11)—530х8(8)',1000,16,137930],['1220х14(11)—273х8(6)',850,16,194121],['1220х25(14)—820х22(11)',1200,25,237940],
    ['1220х18(14)—273х11(8)',850,25,121069],['1220х14(11)—630х10(8)',1000,10,113151],['1220х22(14)—530х14(8)',1000,25,171591],
    ['1220х18(11)—630х12(8)',1000,25,177210],['1220х14(11)—325х8(6)',850,16,94473],['1220х18(14)—325х13(8)',850,25,121520],
    ['1220х14(11)—720х9(9)',1200,10,134548],['1220х22(14)—630х18(12)',1000,25,176762],['1220х18(11)—720х14(9)',1200,16,170928],
    ['1220х14(11)—377х9(9)',850,16,94001],['1220х22(11)—820х11(9)',1200,16,195013],['1220х14(11)—820х9(9)',1200,10,129429],
    ['1220х25(11)—1020х10(10)',1400,16,250314],['1220х18(14)—159х7(5)',850,25,71426],['1220х14(11)—426х16(9)',1000,16,111576],
    ['1220х22(14)—377х9(9)',850,25,119405],['1220х18(11)—1020х10(10)',1400,10,189268],['1220х14(11)—219х7(6)',850,16,94133],
    ['1220х25(14)—720х18(9)',1200,25,233373],['1220х18(14)—219х7(7)',850,25,119774],['1220х14(11)—530х8(8)',1000,10,108851],
    ['1220х22(14)—426х12(10)',1000,25,172091],
    ['1420х18(14)—426х9(9)',1000,16,129284],['1420х14(14)—426х9(9)',1000,10,128508],['1420х22(14)—1220х22(11)',1800,16,376523],
    ['1420х14(14)—720х9(9)',1200,6,151725],['1420х14(14)—325х13(6)',850,16,111045],['1420х18(14)—530х11(8)',1000,16,163149],
    ['1420х14(14)—530х8(8)',1000,10,126983],['1420х14(14)—1020х10(10)',1500,6,197782],['1420х22(14)—720х9(9)',1200,16,376523],
    ['1420х14(14)—820х9(9)',1200,6,156027],['1420х14(14)—325х8(6)',850,10,109219],['1420х18(14)—630х14(8)',1000,16,186174],
    ['1420х14(14)—630х10(8)',1000,10,150878],['1420х14(14)—1220х11(11)',1800,6,229867],['1420х22(14)—820х12(9)',1200,16,196471],
    ['1420х18(14)—1020х10(10)',1500,10,237307],['1420х14(14)—377х15(9)',850,16,111546],['1420х18(14)—820х11(9)',1200,10,159392],
    ['1420х14(14)—630х8(8)',1000,6,127191],['1420х14(14)—219х7(6)',850,16,126741],['1420х18(14)—1220х14(11)',1800,10,294265],
    ['1420х14(14)—377х9(9)',850,10,109247],['1420х22(14)—1020х18(10)',1500,16,303868],['1420х14(14)—720х11(9)',1200,10,155077],
    ['1420х14(14)—273х11(6)',850,16,110014]
  ];
  raw.forEach(function(x){
    var sz=x[0], L=x[1], pu=x[2], base=x[3];
    var price = Math.round(base*1.7/100)*100;
    PRODUCTS.push({
      num: PRODUCTS.length+1,
      section: 'Тройники переходные',
      name: 'Тройник сварной ОСТ 34-10-764-97 '+sz,
      material: 'Ст3сп5 / Ст3Гпс4',
      dn: sz, pu: pu, weight: 'L='+L, stock: 1, price: price, term: 'Со склада'
    });
  });
})();

/* ===== 5. КРАНЫ ШАРОВЫЕ ФЛАНЦЕВЫЕ ===== */
(function(){
  var raw = [
    // [тип, Ду, Ру, материал, базовая цена]
    ['КШ.Ф.Ф',15,16,'ст. 20',1450],['КШ.Ф.Ф',15,16,'09Г2С',1450],['КШ.Ф.Ф',15,16,'12Х18Н10Т',1450],
    ['КШ.Ф.Ф',15,25,'ст. 20',1450],['КШ.Ф.Ф',15,25,'09Г2С',1450],['КШ.Ф.Ф',15,25,'12Х18Н10Т',1450],
    ['КШ.Ф.Ф',15,40,'ст. 20',1450],['КШ.Ф.Ф',15,40,'09Г2С',1450],['КШ.Ф.Ф',15,40,'12Х18Н10Т',1450],
    ['КШ.Ф.Ф',20,16,'ст. 20',1750],['КШ.Ф.Ф',20,16,'09Г2С',1750],['КШ.Ф.Ф',20,16,'12Х18Н10Т',1750],
    ['КШ.Ф.Ф',20,25,'ст. 20',1750],['КШ.Ф.Ф',20,25,'09Г2С',1750],['КШ.Ф.Ф',20,25,'12Х18Н10Т',1750],
    ['КШ.Ф.Ф',20,40,'ст. 20',1750],['КШ.Ф.Ф',20,40,'09Г2С',1750],['КШ.Ф.Ф',20,40,'12Х18Н10Т',1750],
    ['КШ.Ф.Ф',25,16,'ст. 20',1980],['КШ.Ф.Ф',25,16,'09Г2С',1980],['КШ.Ф.Ф',25,16,'12Х18Н10Т',1980],
    ['КШ.Ф.Ф',25,25,'ст. 20',1980],['КШ.Ф.Ф',25,25,'09Г2С',1980],['КШ.Ф.Ф',25,25,'12Х18Н10Т',1980],
    ['КШ.Ф.Ф',25,40,'ст. 20',1980],['КШ.Ф.Ф',25,40,'09Г2С',1980],['КШ.Ф.Ф',25,40,'12Х18Н10Т',1980],
    ['КШ.Ф.Ф',32,16,'ст. 20',2200],['КШ.Ф.Ф',32,16,'09Г2С',2200],['КШ.Ф.Ф',32,16,'12Х18Н10Т',2200],
    ['КШ.Ф.Ф',32,25,'ст. 20',2200],['КШ.Ф.Ф',32,25,'09Г2С',2200],['КШ.Ф.Ф',32,25,'12Х18Н10Т',2200],
    ['КШ.Ф.Ф',32,40,'ст. 20',2200],['КШ.Ф.Ф',32,40,'09Г2С',2200],['КШ.Ф.Ф',32,40,'12Х18Н10Т',2200],
    ['КШ.Ф.Ф 32/20',32,16,'ст. 20',2100],['КШ.Ф.Ф 32/20',32,25,'ст. 20',2100],
    ['КШ.Ф.Ф',40,16,'ст. 20',2500],['КШ.Ф.Ф',40,16,'09Г2С',2500],['КШ.Ф.Ф',40,16,'12Х18Н10Т',1850],
    ['КШ.Ф.Ф',40,25,'ст. 20',2500],['КШ.Ф.Ф',40,25,'09Г2С',2500],['КШ.Ф.Ф',40,25,'12Х18Н10Т',2500],
    ['КШ.Ф.Ф',40,40,'ст. 20',2500],['КШ.Ф.Ф',40,40,'09Г2С',2500],['КШ.Ф.Ф',40,40,'12Х18Н10Т',2500],
    ['КШ.Ф.Ф',50,16,'ст. 20',3100],['КШ.Ф.Ф',50,16,'09Г2С',3100],['КШ.Ф.Ф',50,16,'12Х18Н10Т',3100],
    ['КШ.Ф.Ф',50,25,'ст. 20',3100],['КШ.Ф.Ф',50,25,'12Х18Н10Т',3100],['КШ.Ф.Ф',50,25,'09Г2С',3100],
    ['КШ.Ф.Ф',50,40,'ст. 20',3100],['КШ.Ф.Ф',50,40,'09Г2С',3100],['КШ.Ф.Ф',50,40,'12Х18Н10Т',3100],
    ['КШ.Ф.Ф 50/40',50,16,'ст. 20',2700],['КШ.Ф.Ф 50/40',50,25,'ст. 20',2700],
    ['КШ.Ф.Ф',65,16,'ст. 20',5000],['КШ.Ф.Ф',65,16,'09Г2С',5000],['КШ.Ф.Ф',65,16,'12Х18Н10Т',5000],
    ['КШ.Ф.Ф',65,25,'ст. 20',5000],['КШ.Ф.Ф',65,25,'09Г2С',5000],['КШ.Ф.Ф',65,25,'12Х18Н10Т',5000],
    ['КШ.Ф.Ф',65,40,'ст. 20',5000],['КШ.Ф.Ф',65,40,'09Г2С',5000],['КШ.Ф.Ф',65,40,'12Х18Н10Т',3150],
    ['КШ.Ф.Ф 65/50',65,16,'ст. 20',3300],['КШ.Ф.Ф 65/50',65,16,'09Г2С',3300],['КШ.Ф.Ф 65/50',65,16,'12Х18Н10Т',3300],
    ['КШ.Ф.Ф 65/50',65,25,'ст. 20',3300],['КШ.Ф.Ф 65/50',65,25,'09Г2С',3300],['КШ.Ф.Ф 65/50',65,25,'12Х18Н10Т',3300],
    ['КШ.Ф.Ф 65/50',65,40,'ст. 20',3300],['КШ.Ф.Ф 65/50',65,40,'09Г2С',3300],['КШ.Ф.Ф 65/50',65,40,'12Х18Н10Т',3300],
    ['КШ.Ф.Ф',80,16,'ст. 20',6400],['КШ.Ф.Ф',80,16,'09Г2С',6400],['КШ.Ф.Ф',80,16,'12Х18Н10Т',6400],
    ['КШ.Ф.Ф',80,25,'ст. 20',6400],['КШ.Ф.Ф',80,25,'09Г2С',6400],['КШ.Ф.Ф',80,25,'12Х18Н10Т',6400],
    ['КШ.Ф.Ф',80,40,'ст. 20',6400],['КШ.Ф.Ф',80,40,'09Г2С',6400],['КШ.Ф.Ф',80,40,'12Х18Н10Т',6400],
    ['КШ.Ф.Ф 80/70',80,16,'ст. 20',5100],['КШ.Ф.Ф 80/70',80,16,'09Г2С',5100],['КШ.Ф.Ф 80/70',80,16,'12Х18Н10Т',5100],
    ['КШ.Ф.Ф 80/70',80,25,'ст. 20',5100],['КШ.Ф.Ф 80/70',80,25,'09Г2С',5100],['КШ.Ф.Ф 80/70',80,25,'12Х18Н10Т',5100],
    ['КШ.Ф.Ф 80/70',80,40,'ст. 20',5100],['КШ.Ф.Ф 80/70',80,40,'09Г2С',5100],['КШ.Ф.Ф 80/70',80,40,'12Х18Н10Т',5100],
    ['КШ.Ф.Ф',100,16,'ст. 20',12800],['КШ.Ф.Ф',100,16,'09Г2С',12800],['КШ.Ф.Ф',100,16,'12Х18Н10Т',12800],
    ['КШ.Ф.Ф',100,25,'ст. 20',12800],['КШ.Ф.Ф',100,25,'09Г2С',12800],['КШ.Ф.Ф',100,25,'12Х18Н10Т',12800],
    ['КШ.Ф.Ф',100,40,'ст. 20',12800],['КШ.Ф.Ф',100,40,'09Г2С',12800],['КШ.Ф.Ф',100,40,'12Х18Н10Т',12800],
    ['КШ.Ф.Ф 100/70',100,16,'ст. 20',6000],['КШ.Ф.Ф 100/70',100,16,'09Г2С',6000],['КШ.Ф.Ф 100/70',100,16,'12Х18Н10Т',6000],
    ['КШ.Ф.Ф 100/70',100,25,'ст. 20',6000],['КШ.Ф.Ф 100/70',100,25,'09Г2С',6000],['КШ.Ф.Ф 100/70',100,25,'12Х18Н10Т',6000],
    ['КШ.Ф.Ф 100/70',100,40,'ст. 20',6000],['КШ.Ф.Ф 100/70',100,40,'09Г2С',6000],['КШ.Ф.Ф 100/70',100,40,'12Х18Н10Т',6000],
    ['КШ.Ф.Ф 125/100',125,16,'ст. 20',13500],['КШ.Ф.Ф 125/100',125,16,'09Г2С',13500],['КШ.Ф.Ф 125/100',125,16,'12Х18Н10Т',13500],
    ['КШ.Ф.Ф 125/100',125,25,'ст. 20',13500],['КШ.Ф.Ф 125/100',125,25,'09Г2С',13500],['КШ.Ф.Ф 125/100',125,25,'12Х18Н10Т',13500],
    ['КШ.Ф.Ф 125/100',125,40,'ст. 20',13500],['КШ.Ф.Ф 125/100',125,40,'09Г2С',13500],['КШ.Ф.Ф 125/100',125,40,'12Х18Н10Т',13500],
    ['КШ.Ф.Ф 150/100',150,16,'ст. 20',16900],['КШ.Ф.Ф 150/100',150,16,'09Г2С',16900],['КШ.Ф.Ф 150/100',150,16,'12Х18Н10Т',16900],
    ['КШ.Ф.Ф 150/100',150,25,'ст. 20',16900],['КШ.Ф.Ф 150/100',150,25,'09Г2С',16900],['КШ.Ф.Ф 150/100',150,25,'12Х18Н10Т',16900],
    ['КШ.Ф.Ф 150/100',150,40,'ст. 20',16900],['КШ.Ф.Ф 150/100',150,40,'09Г2С',16900],['КШ.Ф.Ф 150/100',150,40,'12Х18Н10Т',16900],
    ['КШ.Ф.Ф',150,16,'ст. 20',24000],['КШ.Ф.Ф',150,16,'09Г2С',24000],['КШ.Ф.Ф',150,16,'12Х18Н10Т',24000],
    ['КШ.Ф.Ф',150,25,'ст. 20',24000],['КШ.Ф.Ф',150,25,'09Г2С',24000],['КШ.Ф.Ф',150,25,'12Х18Н10Т',24000],
    ['КШ.Ф.Ф',150,40,'ст. 20',14040],['КШ.Ф.Ф',150,40,'09Г2С',24000],['КШ.Ф.Ф',150,40,'12Х18Н10Т',24000],
    ['КШ.Ф.Ф',200,16,'ст. 20',48800],['КШ.Ф.Ф',200,16,'09Г2С',48800],['КШ.Ф.Ф',200,16,'12Х18Н10Т',48800],
    ['КШ.Ф.Ф',200,25,'ст. 20',48800],['КШ.Ф.Ф',200,25,'09Г2С',48800],['КШ.Ф.Ф',200,25,'12Х18Н10Т',48800],
    ['КШ.Ф.Ф',200,40,'ст. 20',48800],['КШ.Ф.Ф',200,40,'09Г2С',48800],
    ['КШ.Ф.Ф 200/150',200,16,'ст. 20',31000],['КШ.Ф.Ф 200/150',200,16,'09Г2С',31000],['КШ.Ф.Ф 200/150',200,16,'12Х18Н10Т',31000],
    ['КШ.Ф.Ф 200/150',200,25,'ст. 20',31000],['КШ.Ф.Ф 200/150',200,25,'09Г2С',31000],['КШ.Ф.Ф 200/150',200,25,'12Х18Н10Т',31000],
    ['КШ.Ф.Ф 200/150',200,40,'ст. 20',31000],['КШ.Ф.Ф 200/150',200,40,'09Г2С',31000],['КШ.Ф.Ф 200/150',200,40,'12Х18Н10Т',31000],
    ['КШ.Ф.Ф 250/200',250,16,'ст. 20',58000],['КШ.Ф.Ф 250/200',250,16,'09Г2С',58000],['КШ.Ф.Ф 250/200',250,16,'12Х18Н10Т',58000],
    ['КШ.Ф.Ф 250/200',250,25,'ст. 20',58000],['КШ.Ф.Ф 250/200',250,25,'09Г2С',58000],['КШ.Ф.Ф 250/200',250,25,'12Х18Н10Т',58000],
    ['КШ.Ф.Ф 250/200',250,40,'ст. 20',58000],['КШ.Ф.Ф 250/200',250,40,'09Г2С',58000]
  ];
  raw.forEach(function(x){
    var typ=x[0], dn=x[1], pu=x[2], mat=x[3], base=x[4];
    var price = Math.round(base*1.7/100)*100;
    PRODUCTS.push({
      num: PRODUCTS.length+1,
      section: 'Краны шаровые фланцевые',
      name: 'Кран шаровой фланцевый '+typ+' Ду'+dn+' Ру'+pu,
      material: mat,
      dn: dn, pu: pu, weight: '', stock: 1, price: price, term: 'Со склада'
    });
  });
})();

/* ===== 6. КОМПЕНСАТОРЫ ОДНОСТОРОННИЕ ===== */
(function(){
  var raw = [
    [400,25,300,51288],[400,25,500,56100],[450,25,300,51288],[450,25,500,59813],
    [500,16,300,66275],[500,16,500,76038],[500,25,300,78238],[500,25,500,89788],
    [600,16,300,82500],[600,16,500,95563],[600,25,300,93500],[600,25,500,106425],
    [700,16,300,97213],[700,16,500,113025],[700,25,300,115638],[700,25,500,134338]
  ];
  raw.forEach(function(x){
    var dn=x[0], pu=x[1], cap=x[2], base=x[3];
    var price = Math.round(base*1.7/100)*100;
    PRODUCTS.push({
      num: PRODUCTS.length+1,
      section: 'Компенсаторы односторонние',
      name: 'Компенсатор сальниковый односторонний Ду'+dn+' Ру'+pu+' · ход '+cap,
      material: 'сталь',
      dn: dn, pu: pu, weight: 'ход '+cap, stock: 1, price: price, term: 'Со склада'
    });
  });
})();

/* ===== 7. КОМПЕНСАТОРЫ ДВУХСТОРОННИЕ ===== */
(function(){
  var raw = [
    [400,25,300,87409],[400,25,500,101775],[450,25,300,94357],[450,25,500,109620],
    [500,16,300,121072],[500,16,500,141199],[500,25,300,148058],[500,25,500,169488],
    [600,16,300,153796],[600,16,500,180332],[600,25,300,174796],[600,25,500,204380],
    [700,16,300,183604],[700,16,500,215699],[700,25,300,220427],[700,25,500,259246]
  ];
  raw.forEach(function(x){
    var dn=x[0], pu=x[1], cap=x[2], base=x[3];
    var price = Math.round(base*1.7/100)*100;
    PRODUCTS.push({
      num: PRODUCTS.length+1,
      section: 'Компенсаторы двухсторонние',
      name: 'Компенсатор сальниковый двухсторонний Ду'+dn+' Ру'+pu+' · 2×'+cap,
      material: 'сталь',
      dn: dn, pu: pu, weight: '2×'+cap, stock: 1, price: price, term: 'Со склада'
    });
  });
})();

/* ==================== ДВИЖОК ==================== */
var state = {search:'', sort:{key:null,dir:1}, section:'all'};
var picked = {};

function keyOf(num){ return 'p:'+num; }
function fmt(n){ return Math.round(n).toLocaleString('ru-RU'); }
function norm(s){
  return String(s==null?'':s).toLowerCase().replace(/ё/g,'е').replace(/,/g,'.').replace(/[×xх*]/g,'x')
    .replace(/[^\wа-я0-9.x\s-]+/gi,' ').replace(/\s+/g,' ').trim();
}
function tokenize(q){ return norm(q).split(' ').filter(function(t){return t.length&gt;0;}); }

function buildIndex(p){
  return norm([p.num,p.section,p.name,p.material,p.dn,p.pu,p.weight,p.term].join(' '));
}
function rowMatches(p, tokens){
  if (!tokens.length) return true;
  var idx = buildIndex(p);
  for (var i=0;i&lt;tokens.length;i++){
    if (idx.indexOf(tokens[i]) === -1) return false;
  }
  return true;
}
function highlight(text, tokens){
  if (!tokens.length) return text;
  var out = String(text);
  tokens.forEach(function(t){
    if (t.length &lt; 2) return;
    var re = new RegExp('('+t.replace(/[.*+?^${}()|[\]\\]/g,'\\$&amp;')+')','gi');
    out = out.replace(re,'&lt;mark class="hl"&gt;$1&lt;/mark&gt;');
  });
  return out;
}

function getFiltered(){
  var tokens = tokenize(state.search);
  var items = PRODUCTS.filter(function(p){ return rowMatches(p, tokens); });
  if (state.section !== 'all'){
    items = items.filter(function(p){ return p.section === state.section; });
  }
  if (state.sort.key){
    var k = state.sort.key, d = state.sort.dir;
    items.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 {items:items, tokens:tokens};
}

function calcBaseSum(){
  var total = 0;
  Object.keys(picked).forEach(function(k){
    var num = parseInt(k.split(':')[1],10);
    var p = PRODUCTS.find(function(x){return x.num===num;});
    if (p) total += p.price * (picked[k]||1);
  });
  return total;
}
function getDiscount(sum){ return sum &gt;= PROJECT.discountThreshold ? sum * (PROJECT.discountPercent/100) : 0; }
function isDiscountActive(sum){ return sum &gt;= PROJECT.discountThreshold; }

var SECTIONS = ['all'].concat(Array.from(new Set(PRODUCTS.map(function(p){return p.section;}))));

function renderApp(){
  var p = PROJECT;
  var html = '';

  html += '&lt;div class="banner"&gt;'+
    '&lt;div class="banner-tag"&gt;РЕКЛАМНЫЕ ПЛОЩАДИ&lt;/div&gt;'+
    '&lt;div class="banner-title"&gt;ЗДЕСЬ МОЖЕТ БЫТЬ&lt;br&gt;ВАША РЕКЛАМА&lt;/div&gt;'+
    '&lt;div class="banner-phone"&gt;8 902 873-36-90 · МАКС&lt;/div&gt;'+
    '&lt;div class="banner-note"&gt;Позвоните, а лучше пишите в МАКС&lt;/div&gt;'+
  '&lt;/div&gt;';

  var tickerItems = '';
  PRODUCTS.slice(0,8).forEach(function(pr){
    tickerItems += '&lt;span class="ticker-item"&gt;'+pr.name+' — &lt;b&gt;'+fmt(pr.price)+' ₽&lt;/b&gt;&lt;/span&gt;&lt;span class="ticker-dot"&gt;◆&lt;/span&gt;';
  });
  html += '&lt;div class="ticker"&gt;&lt;div class="ticker-label"&gt;ЦЕНЫ&lt;/div&gt;'+
    '&lt;div class="ticker-vp"&gt;&lt;div class="ticker-track"&gt;'+tickerItems+tickerItems+'&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;';

  html += '&lt;div class="header"&gt;'+
    '&lt;div class="tag"&gt;КАТАЛОГ · АРСЕНАЛ-ДЕТАЛЬ&lt;/div&gt;'+
    '&lt;h1&gt;'+p.title+'&lt;/h1&gt;&lt;div class="line"&gt;&lt;/div&gt;&lt;p&gt;'+p.subtitle+'&lt;/p&gt;&lt;/div&gt;';

  html += '&lt;div class="discount-banner" id="discountBanner"&gt;'+
    '&lt;h3&gt;★ Скидка от суммы ★&lt;/h3&gt;'+
    '&lt;p&gt;Закажите на сумму от &lt;b&gt;200 000 ₽&lt;/b&gt; — получите &lt;b style="color:#7dff7d"&gt;скидку 10%&lt;/b&gt;.&lt;br&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="discBase"&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="discRemain"&gt;200 000 ₽&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="discRate"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;'+
    '&lt;/div&gt;&lt;/div&gt;';

  html += '&lt;div class="cta-block"&gt;'+
    '&lt;h2&gt;'+p.title+'&lt;/h2&gt;'+
    '&lt;p&gt;Кликните &lt;b&gt;★&lt;/b&gt;, укажите количество — сумма появится внизу экрана.&lt;br&gt;'+
    'Все позиции &lt;b&gt;в наличии&lt;/b&gt;. Цены указаны с НДС '+p.vat+'%.&lt;/p&gt;'+
    '&lt;div class="cta-counter"&gt;Выбрано: &lt;b id="selectedCount"&gt;0&lt;/b&gt; из '+PRODUCTS.length+'&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;/div&gt;';

  html += '&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" id="statStock"&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="statCap"&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&gt;';

  html += '&lt;div class="toolbar"&gt;'+
    '&lt;button class="btn" onclick="resetFilters()"&gt;✕ Очистить фильтры&lt;/button&gt;'+
    '&lt;button class="btn" onclick="window.print()"&gt;? Печать каталога&lt;/button&gt;'+
  '&lt;/div&gt;';

  html += '&lt;div class="filter"&gt;'+
    '&lt;div class="filter-row"&gt;'+
      '&lt;input class="search" type="text" id="search" placeholder="? Поиск: Ду100, Ру25, 159х5, AISI304, компенсатор…"&gt;'+
      '&lt;div class="counter" id="counter"&gt;Найдено: 0&lt;/div&gt;'+
    '&lt;/div&gt;'+
    '&lt;div class="search-help"&gt;Поиск по &lt;b&gt;названию&lt;/b&gt;, &lt;b&gt;Ду&lt;/b&gt;, &lt;b&gt;Ру&lt;/b&gt;, &lt;b&gt;марке стали&lt;/b&gt;, &lt;b&gt;типоразмеру&lt;/b&gt;. Несколько слов — &lt;b&gt;все должны найтись&lt;/b&gt;.&lt;/div&gt;'+
    '&lt;div class="filter-grid" style="margin-top:12px"&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Раздел&lt;/label&gt;&lt;select id="fSection"&gt;'+SECTIONS.map(function(s){
        return '&lt;option value="'+s+'"'+(s===state.section?' selected':'')+'&gt;'+(s==='all'?'Все разделы':s)+'&lt;/option&gt;';
      }).join('')+'&lt;/select&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Ду, мм&lt;/label&gt;&lt;input type="number" id="fDn" placeholder="напр. 100"&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Ру, кгс/см²&lt;/label&gt;&lt;input type="number" id="fPu" placeholder="напр. 25"&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Материал&lt;/label&gt;&lt;input type="text" id="fMaterial" placeholder="09Г2С, 12Х18Н10Т…"&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;&amp;nbsp;&lt;/label&gt;&lt;button class="btn" onclick="resetFilters()"&gt;Сбросить&lt;/button&gt;&lt;/div&gt;'+
    '&lt;/div&gt;&lt;/div&gt;';

  html += '&lt;div 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 id="thead"&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;b&gt;★&lt;/b&gt;, укажите &lt;b&gt;количество&lt;/b&gt; — попадёт в запрос&lt;/div&gt;'+
      '&lt;div class="fn"&gt;Все цены указаны &lt;b&gt;с НДС '+p.vat+'%&lt;/b&gt;&lt;/div&gt;'+
      '&lt;div class="fn"&gt;При сумме &lt;b&gt;от 200 000 ₽&lt;/b&gt; — скидка 10% (автоматически)&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;/div&gt;';

  html += '&lt;div class="cta"&gt;'+
    '&lt;p class="cta-text"&gt;Отметили позиции? Нажмите «Скачать запрос КП»&lt;/p&gt;'+
    '&lt;button class="btn-big primary" onclick="downloadRequest()"&gt;⬇ Скачать запрос КП&lt;/button&gt;'+
    '&lt;div style="margin-top:20px"&gt;'+
      '&lt;a href="tel:'+p.phoneHref+'" class="cta-btn"&gt;'+p.phone+'&lt;/a&gt;'+
      '&lt;a href="mailto:'+p.email+'?subject=Запрос%20КП" class="cta-mail"&gt;✉ '+p.email+'&lt;/a&gt;'+
    '&lt;/div&gt;'+
    '&lt;p class="manager"&gt;'+p.manager+'&lt;/p&gt;&lt;/div&gt;';

  html += '&lt;div class="seo"&gt;&lt;p&gt;Заглушки фланцевые, заглушки поворотные, тройники сварные равнопроходные и переходные, краны шаровые фланцевые, компенсаторы сальниковые односторонние и двухсторонние. ООО «Арсенал-Деталь», Екатеринбург. 8 (902) 873-36-90.&lt;/p&gt;&lt;/div&gt;';

  document.getElementById('app').innerHTML = html;
}

function render(){
  var res = getFiltered();
  var items = res.items, tokens = res.tokens;
  var tbody = document.getElementById('tbody'), thead = document.getElementById('thead');
  if (!tbody || !thead) return;
  tbody.innerHTML = ''; thead.innerHTML = '';

  var baseSum = calcBaseSum();
  var discountActive = isDiscountActive(baseSum);

  var cols = [
    {key:'section', label:'Раздел'},
    {key:'name', label:'Наименование'},
    {key:'material', label:'Материал'},
    {key:'dn', label:'Ду, мм', sortable:true, num:true},
    {key:'pu', label:'Ру, кгс/см²', sortable:true, num:true},
    {key:'weight', label:'Параметр'},
    {key:'stock', label:'Наличие'},
    {key:'price', label:'Цена с НДС, ₽', num:true, sortable:true}
  ];

  var thHtml = '&lt;tr&gt;&lt;th class="col-star"&gt;★&lt;/th&gt;&lt;th class="col-qty"&gt;Кол-во&lt;/th&gt;';
  cols.forEach(function(c){
    var cls = (c.num?'num ':'') + (c.sortable?'sortable':'');
    thHtml += '&lt;th class="'+cls+'" '+(c.sortable?'data-key="'+c.key+'"':'')+'&gt;'+c.label+'&lt;/th&gt;';
  });
  thHtml += '&lt;/tr&gt;';
  thead.innerHTML = thHtml;

  if (!items.length){
    tbody.innerHTML = '&lt;tr&gt;&lt;td colspan="'+(cols.length+2)+'" style="text-align:center;padding:40px;opacity:.6"&gt;Ничего не найдено.&lt;/td&gt;&lt;/tr&gt;';
    document.getElementById('counter').textContent = 'Найдено: 0';
    updateStickyBar(); updateDiscountBanner(); bindSortHeaders();
    return;
  }

  items.forEach(function(pr){
    var k = keyOf(pr.num);
    var isPicked = picked[k]!==undefined;
    var qty = isPicked ? picked[k] : 1;
    var finalPrice = discountActive &amp;&amp; isPicked ? Math.round(pr.price*(1-PROJECT.discountPercent/100)) : pr.price;

    var tr = document.createElement('tr');
    if (isPicked) tr.className = discountActive ? 'picked discount-active' : 'picked';

    var cells =
      '&lt;td class="col-star"&gt;&lt;span class="star'+(isPicked?' on':'')+'" data-num="'+pr.num+'"&gt;'+(isPicked?'★':'☆')+'&lt;/span&gt;&lt;/td&gt;'+
      '&lt;td class="col-qty"&gt;&lt;input type="number" class="qty" data-num="'+pr.num+'" value="'+qty+'" min="1" max="9999"'+(isPicked?'':' disabled')+'&gt;&lt;/td&gt;';

    cells += '&lt;td&gt;'+pr.section+'&lt;/td&gt;';
    cells += '&lt;td&gt;'+(tokens.length ? highlight(pr.name, tokens) : pr.name)+'&lt;/td&gt;';
    cells += '&lt;td&gt;'+pr.material+'&lt;/td&gt;';
    cells += '&lt;td class="num"&gt;'+pr.dn+'&lt;/td&gt;';
    cells += '&lt;td class="num"&gt;'+pr.pu+'&lt;/td&gt;';
    cells += '&lt;td&gt;'+pr.weight+'&lt;/td&gt;';
    cells += '&lt;td&gt;&lt;span class="badge many"&gt;в наличии&lt;/span&gt;&lt;/td&gt;';
    cells += '&lt;td class="num price'+(discountActive&amp;&amp;isPicked?' discount':'')+'"&gt;'+fmt(finalPrice)+' ₽&lt;/td&gt;';

    tr.innerHTML = cells;
    tbody.appendChild(tr);
  });
  document.getElementById('counter').textContent = 'Найдено: '+items.length;
  updateSort(); bindStars(); bindQty(); updateStickyBar(); updateDiscountBanner(); bindSortHeaders();
}

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 bindSortHeaders(){
  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();
    });
  });
}
function bindStars(){
  document.querySelectorAll('.star').forEach(function(el){
    el.addEventListener('click',function(){
      var n = parseInt(this.dataset.num,10);
      var k = keyOf(n);
      if (picked[k]!==undefined) delete picked[k];
      else picked[k] = 1;
      render();
    });
  });
}
function bindQty(){
  document.querySelectorAll('input.qty').forEach(function(inp){
    inp.addEventListener('input',function(){
      var n = parseInt(this.dataset.num,10);
      var k = keyOf(n);
      if (picked[k]===undefined) return;
      var v = Math.max(1, parseInt(this.value,10)||1);
      picked[k] = v;
      render();
    });
  });
}

function updateDiscountBanner(){
  var baseSum = calcBaseSum();
  var discountActive = isDiscountActive(baseSum);
  var remaining = Math.max(0, PROJECT.discountThreshold - baseSum);
  var progressPct = Math.min(100, (baseSum / PROJECT.discountThreshold) * 100);

  var banner = document.getElementById('discountBanner');
  if (banner){ if (discountActive) 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 (baseSum === 0) lbl.innerHTML = 'Отметьте позиции — узнаете скидку';
    else if (discountActive) lbl.innerHTML = '✓ &lt;b&gt;СКИДКА АКТИВНА!&lt;/b&gt; −10%';
    else lbl.innerHTML = 'Набрано: &lt;b&gt;'+fmt(baseSum)+' ₽&lt;/b&gt; из '+fmt(PROJECT.discountThreshold)+' ₽';
  }
  var b = document.getElementById('discBase'); if (b) b.textContent = fmt(baseSum)+' ₽';
  var r = document.getElementById('discRemain'); if (r) r.textContent = discountActive ? '✓ Достигнуто' : fmt(remaining)+' ₽';
  var rate = document.getElementById('discRate');
  if (rate){
    if (discountActive){ rate.innerHTML = '−'+fmt(getDiscount(baseSum))+' ₽'; rate.style.color = '#7dff7d'; }
    else { rate.textContent = '0 ₽'; rate.style.color = ''; }
  }
}

function updateStickyBar(){
  var keys = Object.keys(picked);
  var count = keys.length;
  var totalQty = 0, baseSum = 0;
  keys.forEach(function(k){
    var num = parseInt(k.split(':')[1],10);
    var p = PRODUCTS.find(function(x){return x.num===num;});
    if (!p) return;
    var q = picked[k]||1;
    totalQty += q;
    baseSum += p.price * q;
  });
  var discountActive = isDiscountActive(baseSum);
  var discountAmount = getDiscount(baseSum);
  var totalSum = baseSum - discountAmount;

  document.getElementById('barCount').textContent = count;
  document.getElementById('barQty').textContent = totalQty;
  document.getElementById('barBase').textContent = fmt(baseSum)+' ₽';
  document.getElementById('barDiscount').textContent = discountActive ? '−'+fmt(discountAmount)+' ₽' : '0 ₽';
  document.getElementById('barDiscountLabel').textContent = discountActive ? '✓ Скидка 10%' : 'Скидка';
  document.getElementById('barTotal').textContent = fmt(totalSum)+' ₽';

  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 = {};
  render();
}

function updateStats(){
  document.getElementById('statTotal').textContent = PRODUCTS.length;
  document.getElementById('statStock').textContent = PRODUCTS.reduce(function(s,p){return s+(p.stock||0);},0)+' шт';
  var dns = PRODUCTS.map(function(p){return p.dn;}).filter(function(v){return typeof v==='number';});
  document.getElementById('statCap').textContent = Math.min.apply(null,dns)+'–'+Math.max.apply(null,dns)+' мм';
  var minP = Math.min.apply(null, PRODUCTS.map(function(p){return p.price;}));
  document.getElementById('statPrice').textContent = 'от '+fmt(minP)+' ₽';
}

function scrollToTable(){ document.getElementById('catalog').scrollIntoView({behavior:'smooth',block:'start'}); }
function resetFilters(){
  state.search=''; state.section='all';
  renderApp(); updateStats(); render(); bindFilterEvents();
}

function collectPicked(){
  var out = [];
  Object.keys(picked).forEach(function(k){
    var num = parseInt(k.split(':')[1],10);
    var p = PRODUCTS.find(function(x){return x.num===num;});
    if (!p) return;
    out.push({product:p, qty:picked[k]||1});
  });
  return out;
}

function downloadRequest(){
  var items = collectPicked();
  if (!items.length){ alert('Сначала отметьте нужные позиции звёздочкой ★ и укажите количество.'); scrollToTable(); return; }
  var baseSum = calcBaseSum();
  var discountActive = isDiscountActive(baseSum);
  var discountAmount = getDiscount(baseSum);

  var header = ['Раздел','№','Наименование','Материал','Ду','Ру','Параметр','Цена с НДС, ₽','Кол-во, шт','Сумма, ₽','Сроки'];
  var body = items.map(function(it){
    var finalPrice = discountActive ? Math.round(it.product.price*(1-PROJECT.discountPercent/100)) : it.product.price;
    return [it.product.section, it.product.num, it.product.name, it.product.material, it.product.dn, it.product.pu, it.product.weight, finalPrice, it.qty, Math.round(finalPrice*it.qty), it.product.term];
  });
  body.push([]);
  body.push(['','','','','','','','ИТОГО:','','',Math.round(baseSum - discountAmount), discountActive?'Скидка 10%':'']);

  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 sendByEmail(){
  var items = collectPicked();
  if (!items.length){ alert('Сначала отметьте нужные позиции звёздочкой ★.'); scrollToTable(); return; }
  var baseSum = calcBaseSum();
  var discountActive = isDiscountActive(baseSum);
  var discountAmount = getDiscount(baseSum);
  var totalQty = 0;
  var lines = ['Здравствуйте!','','Прошу подготовить коммерческое предложение:',''];
  items.forEach(function(it){
    totalQty += it.qty;
    var finalPrice = discountActive ? Math.round(it.product.price*(1-PROJECT.discountPercent/100)) : it.product.price;
    lines.push('№'+it.product.num+' · '+it.product.name+' · '+it.product.material+' · '+finalPrice+' ₽ × '+it.qty+' шт = '+fmt(finalPrice*it.qty)+' ₽');
  });
  lines.push('');
  lines.push('Всего позиций: '+items.length);
  lines.push('Всего штук: '+totalQty);
  lines.push('Сумма без скидки: '+fmt(baseSum)+' ₽');
  if (discountActive) lines.push('Скидка 10%: −'+fmt(discountAmount)+' ₽');
  lines.push('ИТОГО с НДС 22%: '+fmt(baseSum - discountAmount)+' ₽');
  lines.push('');
  lines.push('Прошу указать сроки изготовления и условия отгрузки.');
  lines.push('');
  lines.push('С уважением,');
  var subject = encodeURIComponent('Запрос КП — Арсенал-Деталь ('+items.length+' поз.)');
  var body = encodeURIComponent(lines.join('\n'));
  window.location.href = 'mailto:'+PROJECT.email+'?subject='+subject+'&amp;body='+body;
}

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 bindFilterEvents(){
  var s = document.getElementById('search');
  if (s) s.addEventListener('input',function(e){ state.search=e.target.value; render(); });
  var fs = document.getElementById('fSection');
  if (fs) fs.addEventListener('change',function(e){ state.section=e.target.value; render(); });
  var fdn = document.getElementById('fDn');
  if (fdn) fdn.addEventListener('input',function(e){
    var v = e.target.value;
    state.search = v ? 'Ду'+v : '';
    var sEl = document.getElementById('search'); if (sEl) sEl.value = state.search;
    render();
  });
  var fpu = document.getElementById('fPu');
  if (fpu) fpu.addEventListener('input',function(e){
    var v = e.target.value;
    var cur = state.search.replace(/Ру\d+\s*/g,'').trim();
    state.search = (cur ? cur+' ' : '') + (v ? 'Ру'+v : '');
    var sEl = document.getElementById('search'); if (sEl) sEl.value = state.search;
    render();
  });
  var fm = document.getElementById('fMaterial');
  if (fm) fm.addEventListener('input',function(e){
    var v = e.target.value;
    var cur = state.search.replace(/\S+\s*$/,'').trim();
    state.search = (cur ? cur+' ' : '') + v;
    var sEl = document.getElementById('search'); if (sEl) sEl.value = state.search;
    render();
  });
}

document.addEventListener('DOMContentLoaded', function(){
  renderApp();
  updateStats();
  render();
  bindFilterEvents();
});
&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>
