<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://brony-rf.ru/" xml:lang="ru">
  <id>https://brony-rf.ru/utyazheliteli-chugunnye-koltcevye-uchk-nefte-i-gazoprovodov</id>
  <link href="https://brony-rf.ru/utyazheliteli-chugunnye-koltcevye-uchk-nefte-i-gazoprovodov.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;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;--cyan:#6ee8e4;
    --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 50s 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%)}}

  .ad-strip{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px;}
  @media(max-width:700px){.ad-strip{grid-template-columns:1fr}}
  .ad-item{display:flex;align-items:center;gap:12px;padding:14px 18px;background:linear-gradient(135deg,rgba(255,215,0,.1) 0%,rgba(10,15,30,.7) 100%);border:1px solid var(--border);border-radius:14px;text-decoration:none;transition:all .25s;}
  .ad-item:hover{border-color:var(--gold);box-shadow:0 0 20px rgba(255,215,0,.3);transform:translateY(-2px);}
  .ad-tag{background:var(--gold);color:#0a0a0a;font-size:.68rem;font-weight:800;letter-spacing:.8px;text-transform:uppercase;padding:4px 10px;border-radius:999px;flex-shrink:0;}
  .ad-text{color:#e8f4ff;font-size:.9rem;font-weight:600;flex:1;}
  .ad-cta{color:var(--gold);font-size:.85rem;font-weight:800;letter-spacing:.5px;white-space:nowrap;}
  .ad-item:hover .ad-cta{color:var(--gold-light);text-shadow:0 0 8px var(--gold-light);}

  .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:30px;font-weight:900;letter-spacing:4px;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;
  }
  .discount-stat .val.old{
    color:var(--muted);text-decoration:line-through;
    font-size:14px;font-weight:700;
  }
  .discount-stat .val.new{color:var(--gold-light);font-size:20px;}

  /* Главный призыв */
  .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;}

  .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:60vh;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-num,td.col-num{width:38px;text-align:center;}
  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.article{font-family:'Courier New',monospace;font-size:12px;color:var(--gold-light);}
  td.dims{font-weight:700;color:var(--gold-light);font-size:13px;letter-spacing:.3px;}
  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);}
  .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;}

  .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-БАР */
  .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);}

  @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;text-shadow:none !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,.filter,.select-hint,th.col-star::before,.banner,.ticker,.ad-strip,.sticky-bar{display:none !important;}
    .block-title{color:#000 !important;border-color:#666 !important;text-shadow:none !important;}
    .val{color:#000 !important;}
    .cta-block h2,.cta-block p,.discount-banner h3,.discount-banner p{color:#000 !important;}
    .cta-counter{background:#fff !important;color:#000 !important;border-color:#666 !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.dims{color:#000 !important;}
    .cta-text{color:#000 !important;}
    .cta-btn{background:#000 !important;color:#fff !important;}
    td.col-qty input.qty{background:#fff !important;color:#000 !important;border-color:#ccc !important;}
    .progress-fill{background:#3aa03a !important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  }
&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="barWeight"&gt;0 кг&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="sticky-stat"&gt;
        &lt;div class="lbl" id="barRateLabel"&gt;Цена за кг&lt;/div&gt;
        &lt;div class="val" id="barRate"&gt;170 ₽/кг&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;
/* ============================================================
   ВНЕШНИЙ ПРАЙС · УЧК · Скидка от объёма
   - &lt; 5 тонн → 170 ₽/кг
   - ≥ 5 тонн → 135 ₽/кг (автоматически ко всей партии)
   ============================================================ */

var PROJECT = {
  id: 'uchk-public',
  title: 'Утяжелители чугунные УЧК',
  subtitle: 'Для нефте- и газопроводов · НДС 22%',
  tag: 'ПРАЙС-ЛИСТ · 14 ПОЗИЦИЙ',
  vat: 22,

  /* Цены за кг */
  basePricePerKg: 170,     // базовая
  discountPricePerKg: 135, // скидка от 5 тонн

  /* Порог скидки в тоннах */
  discountThresholdTons: 5,
  discountThresholdKg: 5000,

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

  ads: [
    {tag:'Акция', text:'Литье чугуна · Скидки от 5 тонн', cta:'Перейти →', href:'#'},
    {tag:'Склад', text:'Утяжелители УЧК · В наличии', cta:'Перейти →', href:'#'}
  ],

  columns: [
    {key:'num',    label:'№',              type:'num',  cls:'col-num'},
    {key:'name',   label:'Марка',          type:'text'},
    {key:'diam',   label:'Ø трубы, мм',    type:'num',  sortable:true},
    {key:'weight', label:'Масса, кг',      type:'num',  sortable:true},
    {key:'r1',     label:'R1',             type:'num',  sortable:true},
    {key:'r2',     label:'R2',             type:'num',  sortable:true},
    {key:'r3',     label:'R3',             type:'num',  sortable:true},
    {key:'a',      label:'A',              type:'num',  sortable:true},
    {key:'b',      label:'B',              type:'num',  sortable:true},
    {key:'c',      label:'C',              type:'num',  sortable:true},
    {key:'bolt',   label:'Болт, мм',       type:'text'},
    {key:'stock',  label:'Наличие, шт',    type:'badge',sortable:true},
    {key:'price',  label:'Цена с НДС, ₽',  type:'price'},
    {key:'term',   label:'Сроки',          type:'text'}
  ],

  quickFilters: [
    {label:'Со склада', field:'term', value:'Со склада'},
    {label:'Под заказ', field:'term', value:'Под заказ'},
    {label:'Ø до 530',  field:'diamMax', value:530},
    {label:'Ø от 720',  field:'diamMin', value:720}
  ],

  data: [
    {num:1,  name:'УЧК-159', diam:159, weight:150, r1:200, r2:117, r3:109, a:330, b:185, c:430, bolt:'16×100', stock:15, term:'Со склада'},
    {num:2,  name:'УЧК-219', diam:219, weight:200, r1:249, r2:185, r3:150, a:375, b:200, c:500, bolt:'16×100', stock:12, term:'Со склада'},
    {num:3,  name:'УЧК-273', diam:273, weight:200, r1:249, r2:183, r3:175, a:375, b:234, c:497, bolt:'16×120', stock:10, term:'Со склада'},
    {num:4,  name:'УЧК-325', diam:325, weight:250, r1:275, r2:210, r3:200, a:464, b:250, c:589, bolt:'20×130', stock:8,  term:'Со склада'},
    {num:5,  name:'УЧК-377', diam:377, weight:300, r1:300, r2:235, r3:225, a:546, b:275, c:636, bolt:'20×140', stock:6,  term:'Со склада'},
    {num:6,  name:'УЧК-426', diam:426, weight:350, r1:327, r2:262, r3:252, a:490, b:302, c:694, bolt:'20×140', stock:5,  term:'Со склада'},
    {num:7,  name:'УЧК-530', diam:530, weight:450, r1:380, r2:315, r3:305, a:530, b:355, c:800, bolt:'20×180', stock:4,  term:'Со склада'},
    {num:8,  name:'УЧК-630', diam:630, weight:500, r1:430, r2:387, r3:355, a:500, b:405, c:950, bolt:'20×180', stock:3,  term:'Со склада'},
    {num:9,  name:'УЧК-720', diam:720, weight:1100, r1:470, r2:410, r3:400, a:910, b:455, c:1050, bolt:'24×190', stock:2,  term:'Под заказ'},
    {num:10, name:'УЧК-820', diam:820, weight:1100, r1:530, r2:460, r3:450, a:820, b:505, c:1100, bolt:'24×190', stock:2,  term:'Под заказ'},
    {num:11, name:'УЧК-1020', diam:1020, weight:1100, r1:735, r2:560, r3:552, a:710, b:607, c:1332, bolt:'24×190', stock:1,  term:'Под заказ'},
    {num:12, name:'УЧК-1067', diam:1067, weight:1100, r1:652, r2:590, r3:580, a:680, b:630, c:1400, bolt:'н/д', stock:1,  term:'Под заказ'},
    {num:13, name:'УЧК-1220', diam:1220, weight:2000, r1:765, r2:660, r3:655, a:770, b:740, c:1570, bolt:'30×270', stock:1,  term:'Под заказ'},
    {num:14, name:'УЧК-1420', diam:1420, weight:2200, r1:850, r2:760, r3:755, a:775, b:825, c:1785, bolt:'30×270', stock:1,  term:'Под заказ'}
  ],

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

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

function fmt(n){ return Math.round(n).toLocaleString('ru-RU'); }

/* ---------- ГЛАВНОЕ: определение цены за кг в зависимости от общего веса ---------- */
function getCurrentRate(totalWeight){
  if (totalWeight &gt;= PROJECT.discountThresholdKg) return PROJECT.discountPricePerKg;
  return PROJECT.basePricePerKg;
}
function isDiscountActive(totalWeight){
  return totalWeight &gt;= PROJECT.discountThresholdKg;
}
function calcPrice(r, rate){
  return Math.round(r.weight * rate);
}

/* ---------- РЕНДЕР СТРАНИЦЫ ---------- */
function renderApp(){
  var p = PROJECT;
  var html = '';

  if (p.banner){
    html += '&lt;div class="banner"&gt;'+
      '&lt;div class="banner-tag"&gt;'+p.banner.tag+'&lt;/div&gt;'+
      '&lt;div class="banner-title"&gt;'+p.banner.title+'&lt;/div&gt;'+
      '&lt;div class="banner-phone"&gt;'+p.banner.phone+'&lt;/div&gt;'+
      '&lt;div class="banner-note"&gt;'+p.banner.note+'&lt;/div&gt;'+
    '&lt;/div&gt;';
  }

  var tickerItems = p.data.map(function(r){
    return '&lt;span class="ticker-item"&gt;'+r.name+' — &lt;b&gt;'+fmt(calcPrice(r, p.basePricePerKg))+' ₽&lt;/b&gt;&lt;/span&gt;&lt;span class="ticker-dot"&gt;◆&lt;/span&gt;';
  }).join('');
  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;';

  if (p.ads &amp;&amp; p.ads.length){
    html += '&lt;div class="ad-strip"&gt;'+p.ads.map(function(a){
      return '&lt;a class="ad-item" href="'+(a.href||'#')+'" target="_blank" rel="noopener"&gt;'+
        '&lt;span class="ad-tag"&gt;'+a.tag+'&lt;/span&gt;'+
        '&lt;span class="ad-text"&gt;'+a.text+'&lt;/span&gt;'+
        '&lt;span class="ad-cta"&gt;'+a.cta+'&lt;/span&gt;'+
      '&lt;/a&gt;';
    }).join('')+'&lt;/div&gt;';
  }

  html += '&lt;div class="header"&gt;'+
    '&lt;div class="tag"&gt;'+p.tag+'&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;5 тонн&lt;/b&gt; — цена литья снизится с &lt;b&gt;170 ₽/кг&lt;/b&gt; до &lt;b style="color:#7dff7d"&gt;135 ₽/кг&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="discWeight"&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;5 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;170 ₽/кг&lt;/div&gt;&lt;/div&gt;'+
    '&lt;/div&gt;'+
  '&lt;/div&gt;';

  html += '&lt;div class="cta-block"&gt;'+
    '&lt;h2&gt;Отметьте нужные позиции&lt;/h2&gt;'+
    '&lt;p&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; из '+p.data.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="statDiam"&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="? Поиск: № · марка · Ø · размеры · наличие…"&gt;'+
      '&lt;div class="counter" id="counter"&gt;Найдено: 0&lt;/div&gt;'+
    '&lt;/div&gt;'+
    '&lt;div class="filter-grid"&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Ø трубы, мм&lt;/label&gt;&lt;input type="number" id="fDiam" placeholder="напр. 530"&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Масса, кг&lt;/label&gt;&lt;input type="number" id="fWeight" placeholder="напр. 450"&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Наличие&lt;/label&gt;&lt;select id="fStock"&gt;&lt;option value="all"&gt;Все&lt;/option&gt;&lt;option value="in"&gt;Есть на складе&lt;/option&gt;&lt;option value="out"&gt;Под заказ&lt;/option&gt;&lt;/select&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Сроки&lt;/label&gt;&lt;select id="fTerm"&gt;&lt;option value="all"&gt;Все&lt;/option&gt;&lt;option value="Со склада"&gt;Со склада&lt;/option&gt;&lt;option value="Под заказ"&gt;Под заказ&lt;/option&gt;&lt;/select&gt;&lt;/div&gt;'+
      '&lt;div class="fld"&gt;&lt;label&gt;Болт, мм&lt;/label&gt;&lt;input type="text" id="fBolt" placeholder="напр. 20×140"&gt;&lt;/div&gt;'+
    '&lt;/div&gt;'+
    '&lt;div class="filter-actions"&gt;'+
      p.quickFilters.map(function(q,i){
        return '&lt;button class="btn" onclick="applyQuick('+i+')"&gt;'+q.label+'&lt;/button&gt;';
      }).join('')+
    '&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;Прайс-лист · '+p.title+'&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;'+
      p.columns.map(function(c){
        var cls = (c.type==='num'?'num ':'') + (c.cls||'');
        if (c.sortable) cls += ' sortable';
        return '&lt;th class="'+cls+'" '+(c.sortable?'data-key="'+c.key+'"':'')+'&gt;'+c.label+'&lt;/th&gt;';
      }).join('')+
    '&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;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;от 5 тонн&lt;/b&gt; цена 135 ₽/кг (автоматически)&lt;/div&gt;'+
      '&lt;div class="fn"&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КП%20на%20'+encodeURIComponent(p.title)+'" 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;'+p.title+'. Скидка от 5 тонн — 135 ₽/кг. Купить оптом и в розницу. ООО «Арсенал Деталь».&lt;/p&gt;&lt;/div&gt;';

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

/* ---------- ФИЛЬТРАЦИЯ ---------- */
function getFiltered(){
  var rows = PROJECT.data.slice();
  if (state.search){
    var q = state.search.trim().toLowerCase();
    var qn = q.replace(/\s+/g,'').replace(/₽/g,'').replace(/кг/g,'').replace(/,/g,'.');
    rows = rows.filter(function(r){
      if (String(r.num).indexOf(q)!==-1) return true;
      var fields = ['name','bolt','term'];
      for (var i=0;i&lt;fields.length;i++){
        if (r[fields[i]] &amp;&amp; String(r[fields[i]]).toLowerCase().indexOf(q)!==-1) return true;
      }
      if (String(r.diam).indexOf(qn)!==-1) return true;
      if (String(r.weight).indexOf(qn)!==-1) return true;
      if (Math.abs(r.diam - parseFloat(qn)) &lt; 0.01) return true;
      if (Math.abs(r.weight - parseFloat(qn)) &lt; 0.01) return true;
      return false;
    });
  }
  if (state.filters.diam){ var d=parseFloat(state.filters.diam); if(!isNaN(d)) rows=rows.filter(function(r){return r.diam===d;}); }
  if (state.filters.weight){ var w=parseFloat(state.filters.weight); if(!isNaN(w)) rows=rows.filter(function(r){return r.weight===w;}); }
  if (state.filters.stock==='in')  rows=rows.filter(function(r){return r.stock&gt;0;});
  if (state.filters.stock==='out') rows=rows.filter(function(r){return r.stock===0;});
  if (state.filters.term &amp;&amp; state.filters.term!=='all') rows=rows.filter(function(r){return r.term===state.filters.term;});
  if (state.filters.bolt){ var b=state.filters.bolt.toLowerCase(); rows=rows.filter(function(r){return String(r.bolt).toLowerCase().indexOf(b)!==-1;}); }
  if (state.quickFilter){
    var qf = state.quickFilter;
    if (qf.field==='term') rows=rows.filter(function(r){return r.term===qf.value;});
    else if (qf.field==='diamMax') rows=rows.filter(function(r){return r.diam&lt;=qf.value;});
    else if (qf.field==='diamMin') rows=rows.filter(function(r){return r.diam&gt;=qf.value;});
  }
  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 render(){
  var rows = getFiltered();
  var tbody = document.getElementById('tbody');
  if (!tbody) return;
  tbody.innerHTML = '';

  var totalWeight = getTotalWeight();
  var currentRate = getCurrentRate(totalWeight);
  var discountActive = isDiscountActive(totalWeight);

  if (!rows.length){
    tbody.innerHTML = '&lt;tr&gt;&lt;td colspan="'+(PROJECT.columns.length+2)+'" style="text-align:center;padding:40px;opacity:.6"&gt;Ничего не найдено.&lt;/td&gt;&lt;/tr&gt;';
    document.getElementById('counter').textContent = 'Найдено: 0';
    updateStickyBar();
    return;
  }
  rows.forEach(function(r){
    var isPicked = picked[r.num]!==undefined;
    var qty = isPicked ? picked[r.num] : 1;
    var price = calcPrice(r, currentRate);
    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="'+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="1" max="9999"'+(isPicked?'':' disabled')+'&gt;&lt;/td&gt;';
    PROJECT.columns.forEach(function(c){
      var v = r[c.key];
      if (c.type==='num')       cells += '&lt;td class="num '+(c.cls||'')+'"&gt;'+v+'&lt;/td&gt;';
      else if (c.type==='price') cells += '&lt;td class="num price'+(discountActive?' discount':'')+'"&gt;'+fmt(price)+' ₽&lt;/td&gt;';
      else if (c.type==='badge'){
        var cls = v&gt;=10 ? 'badge many' : v===0 ? 'badge zero' : 'badge';
        cells += '&lt;td class="num"&gt;&lt;span class="'+cls+'"&gt;'+v+'&lt;/span&gt;&lt;/td&gt;';
      }
      else cells += '&lt;td class="'+(c.cls||'')+'"&gt;'+(c.key==='num'?'&lt;b&gt;'+v+'&lt;/b&gt;':v)+'&lt;/td&gt;';
    });
    tr.innerHTML = cells;
    tbody.appendChild(tr);
  });
  document.getElementById('counter').textContent = 'Найдено: '+rows.length;
  updateSort();
  bindStars();
  bindQty();
  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(){
  document.querySelectorAll('.star').forEach(function(el){
    el.addEventListener('click',function(){
      var n = parseInt(this.dataset.num,10);
      if (picked[n]!==undefined) delete picked[n];
      else picked[n] = 1;
      render();
    });
  });
}

function bindQty(){
  document.querySelectorAll('input.qty').forEach(function(inp){
    inp.addEventListener('input',function(){
      var n = parseInt(this.dataset.num,10);
      if (picked[n]===undefined) return;
      var v = Math.max(1, parseInt(this.value,10)||1);
      picked[n] = v;
      render();
    });
  });
}

/* ---------- ОБЩИЙ ВЕС ВЫБРАННОГО ---------- */
function getTotalWeight(){
  var total = 0;
  Object.keys(picked).forEach(function(n){
    var r = PROJECT.data.find(function(x){return x.num===parseInt(n,10);});
    if (!r) return;
    total += r.weight * (picked[n]||1);
  });
  return total;
}

/* ---------- ОБНОВЛЕНИЕ БЛОКА СКИДКИ ---------- */
function updateDiscountBanner(){
  var totalWeight = getTotalWeight();
  var discountActive = isDiscountActive(totalWeight);
  var remaining = Math.max(0, PROJECT.discountThresholdKg - totalWeight);
  var progressPct = Math.min(100, (totalWeight / PROJECT.discountThresholdKg) * 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 (totalWeight === 0){
      lbl.innerHTML = 'Отметьте позиции — узнаете до скидки';
    } else if (discountActive){
      lbl.innerHTML = '? &lt;b&gt;СКИДКА АКТИВНА!&lt;/b&gt; Цена 135 ₽/кг';
    } else {
      lbl.innerHTML = 'Набрано: &lt;b&gt;'+fmt(totalWeight)+' кг&lt;/b&gt; из '+fmt(PROJECT.discountThresholdKg)+' кг';
    }
  }

  var w = document.getElementById('discWeight');
  if (w) w.textContent = fmt(totalWeight)+' кг';

  var r = document.getElementById('discRemain');
  if (r) r.textContent = discountActive ? '✓ Достигнуто' : fmt(remaining)+' кг';

  var rate = document.getElementById('discRate');
  if (rate){
    if (discountActive){
      rate.innerHTML = '&lt;span style="text-decoration:line-through;color:#9a8040;font-size:14px"&gt;170 ₽&lt;/span&gt; 135 ₽/кг';
      rate.style.color = '#7dff7d';
    } else {
      rate.textContent = '170 ₽/кг';
      rate.style.color = '';
    }
  }
}

/* ---------- STICKY-БАР ---------- */
function updateStickyBar(){
  var nums = Object.keys(picked);
  var count = nums.length;
  var totalQty = 0, totalWeight = 0, totalSum = 0;
  nums.forEach(function(n){
    var r = PROJECT.data.find(function(x){return x.num===parseInt(n,10);});
    if (!r) return;
    var q = picked[n]||1;
    totalQty += q;
    totalWeight += r.weight * q;
  });

  var rate = getCurrentRate(totalWeight);
  var discountActive = isDiscountActive(totalWeight);
  totalSum = totalWeight * rate;

  document.getElementById('barCount').textContent = count;
  document.getElementById('barQty').textContent = totalQty;
  document.getElementById('barWeight').textContent = totalWeight.toLocaleString('ru-RU')+' кг';
  document.getElementById('barRate').textContent = rate+' ₽/кг';
  document.getElementById('barRateLabel').textContent = discountActive ? '? Цена со скидкой' : 'Цена за кг';
  document.getElementById('barTotal').textContent = totalSum.toLocaleString('ru-RU')+' ₽';

  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(){
  var d = PROJECT.data;
  document.getElementById('statTotal').textContent = d.length;
  document.getElementById('statStock').textContent = d.reduce(function(s,r){return s+r.stock;},0)+' компл';
  var diam = d.map(function(r){return r.diam;});
  document.getElementById('statDiam').textContent = Math.min.apply(null,diam)+'–'+Math.max.apply(null,diam)+' мм';
  document.getElementById('statPrice').textContent = fmt(PROJECT.basePricePerKg * Math.min.apply(null,d.map(function(r){return r.weight;}))) + ' ₽';
}

/* ---------- КНОПКИ ---------- */
function scrollToTable(){
  document.getElementById('catalog').scrollIntoView({behavior:'smooth',block:'start'});
}

function resetFilters(){
  state.search=''; state.filters={}; state.quickFilter=null;
  ['search','fDiam','fWeight','fStock','fTerm','fBolt'].forEach(function(id){
    var el = document.getElementById(id);
    if (el){ if (el.tagName==='SELECT') el.value='all'; else el.value=''; }
  });
  render();
}

function applyQuick(i){
  resetFilters();
  state.quickFilter = PROJECT.quickFilters[i];
  render();
}

/* ---------- СКАЧАТЬ ЗАПРОС ---------- */
function downloadRequest(){
  var nums = Object.keys(picked);
  if (!nums.length){
    alert('Сначала отметьте нужные позиции звёздочкой ★ и укажите количество.');
    scrollToTable();
    return;
  }
  var rows = PROJECT.data.filter(function(r){return picked[r.num]!==undefined;});
  var totalWeight = getTotalWeight();
  var rate = getCurrentRate(totalWeight);

  var header = ['№','Марка','Ø трубы, мм','Масса, кг','R1','R2','R3','A','B','C','Болт, мм','Наличие, шт','Цена за кг, ₽','Кол-во, компл','Сумма, ₽','Сроки','Примечание'];
  var body = rows.map(function(r){
    var q = picked[r.num]||1;
    var sum = r.weight * rate * q;
    return [r.num,r.name,r.diam,r.weight,r.r1,r.r2,r.r3,r.a,r.b,r.c,r.bolt,r.stock,rate,q,Math.round(sum),r.term,''];
  });
  /* Итоговая строка */
  body.push([]);
  body.push(['','','','','','','','','','','','ИТОГО:',totalWeight+' кг','',Math.round(totalWeight*rate),'Скидка от 5 т','']);

  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);
}

/* ---------- ОТПРАВИТЬ НА E-MAIL ---------- */
function sendByEmail(){
  var nums = Object.keys(picked);
  if (!nums.length){
    alert('Сначала отметьте нужные позиции звёздочкой ★.');
    scrollToTable();
    return;
  }
  var rows = PROJECT.data.filter(function(r){return picked[r.num]!==undefined;});
  var totalWeight = getTotalWeight();
  var rate = getCurrentRate(totalWeight);
  var totalQty = 0;
  var lines = ['Здравствуйте!','','Прошу подготовить коммерческое предложение по утяжелителям УЧК:',''];
  rows.forEach(function(r){
    var q = picked[r.num]||1;
    totalQty += q;
    lines.push('№'+r.num+' · '+r.name+' · Ø'+r.diam+' мм · '+r.weight+' кг · '+rate+' ₽/кг × '+q+' компл = '+fmt(r.weight*rate*q)+' ₽');
  });
  lines.push('');
  lines.push('Всего позиций: '+rows.length);
  lines.push('Всего комплектов: '+totalQty);
  lines.push('Общая масса: '+totalWeight.toLocaleString('ru-RU')+' кг');
  lines.push('Цена за кг: '+rate+' ₽ (с НДС 22%)');
  if (isDiscountActive(totalWeight)) lines.push('✓ Скидка от 5 тонн применена');
  lines.push('ИТОГО: '+totalWeight.toLocaleString('ru-RU')+' × '+rate+' = '+(totalWeight*rate).toLocaleString('ru-RU')+' ₽');
  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;
}

/* ---------- УТИЛИТЫ ---------- */
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());
}

/* ---------- СОБЫТИЯ ---------- */
document.addEventListener('DOMContentLoaded', function(){
  renderApp();
  updateStats();
  render();

  document.getElementById('search').addEventListener('input',function(e){state.search=e.target.value;render();});
  document.getElementById('fDiam').addEventListener('input',function(e){state.filters.diam=e.target.value;render();});
  document.getElementById('fWeight').addEventListener('input',function(e){state.filters.weight=e.target.value;render();});
  document.getElementById('fStock').addEventListener('change',function(e){state.filters.stock=e.target.value;render();});
  document.getElementById('fTerm').addEventListener('change',function(e){state.filters.term=e.target.value;render();});
  document.getElementById('fBolt').addEventListener('input',function(e){state.filters.bolt=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-10-13T12:05:36Z</updated>
  <logo>https://brony-rf.ru/ssl/u/pic/b8/76297e0ea111e68628db370107e68a/-/logo.png</logo>
  <author>
    <name>1430938</name>
    <uri>https://brony-rf.ru/</uri>
  </author>
</feed>
