<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.xn--80abmnojgpmk.xn--p1ai/" xml:lang="ru">
  <id>https://www.xn--80abmnojgpmk.xn--p1ai/plitka-perforirovannaya-napolnaya-dlya-promyshlennykh-polov</id>
  <link href="https://www.xn--80abmnojgpmk.xn--p1ai/plitka-perforirovannaya-napolnaya-dlya-promyshlennykh-polov.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;Плитка перфорированная напольная 300×300 · Прайс-лист · ООО Арсенал-Деталь&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);
    --green:#7dff7d;--green-dark:#3aa03a;--orange:#FF8C00;
    --red:#ff8a7a;--cyan:#6ee8e4;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  body{background:#050505;color:#e8e8e8;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;padding:20px 14px 180px;line-height:1.5;}
  .wrap{max-width:1800px;margin:0 auto}

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

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

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

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

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

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

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

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

  .table-wrap{overflow:auto;max-height:65vh;border-radius:8px;border:1px solid var(--gold);}
  table{width:100%;table-layout:auto;border-collapse:collapse;background:#0a0a0a;font-size:13px;}
  th,td{padding:8px 6px;text-align:left;border-bottom:1px solid rgba(212,175,55,.2);vertical-align:middle;color:var(--gold);background:transparent;white-space:nowrap;}
  th{position:sticky;top:0;z-index:2;background:#0a0a0a;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;position:sticky;top:0;background:linear-gradient(180deg,#1a1408,#0a0a0a) !important;}
  th.col-star::before{content:'▼';position:absolute;top:100%;left:50%;transform:translateX(-50%);color:var(--gold);font-size:20px;line-height:1;text-shadow:0 0 12px rgba(255,215,0,1);animation:arrowBounce 1s ease-in-out infinite;pointer-events:none;}
  @keyframes arrowBounce{0%,100%{transform:translateX(-50%) translateY(0);opacity:1;}50%{transform:translateX(-50%) translateY(6px);opacity:.7;}}
  th.col-qty,td.col-qty{width:90px;text-align:center;padding:8px 6px;}

  tbody tr{transition:background .15s;}
  tbody tr:hover{background:#1a1408;}
  tbody tr.picked{background:linear-gradient(90deg,rgba(255,215,0,.15),rgba(255,215,0,.04));box-shadow:inset 4px 0 0 var(--gold);}
  tbody tr.discount-active{background:linear-gradient(90deg,rgba(125,255,125,.15),rgba(255,215,0,.04));box-shadow:inset 4px 0 0 var(--green);}
  
  td.article{font-family:'Courier New',monospace;font-size:12px;color:var(--gold-light);}
  td b{color:#fff;}
  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.price-old{color:var(--muted);text-decoration:line-through;font-size:12px;}

  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 6px;border-radius:10px;font-size:9px;font-weight:800;text-transform:uppercase;background:rgba(212,175,55,.15);color:var(--gold-light);border:1px solid rgba(212,175,55,.5);white-space:nowrap;}
  .badge.t1{background:rgba(78,205,196,.12);color:#7fdcd4;border-color:rgba(78,205,196,.4);}
  .badge.t12{background:rgba(116,185,255,.12);color:#a8cfff;border-color:rgba(116,185,255,.4);}
  .badge.t15{background:rgba(255,159,67,.12);color:#ffb980;border-color:rgba(255,159,67,.4);}
  .badge.t18{background:rgba(255,107,107,.12);color:#ff9a9a;border-color:rgba(255,107,107,.4);}
  .badge.h64{background:rgba(232,67,147,.12);color:#ff8fc0;border-color:rgba(232,67,147,.4);}
  .badge.h32{background:rgba(162,155,254,.12);color:#c4bfff;border-color:rgba(162,155,254,.4);}
  .badge.galv{background:rgba(180,220,255,.12);color:#cfe6ff;border-color:rgba(180,220,255,.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 низ ===== */
  .cta{text-align:center;background:var(--bg);border:1px solid var(--gold);border-radius:14px;padding:28px 20px;margin-top:16px;}
  .cta-text{font-size:16px;font-weight:600;color:var(--gold);margin-bottom:16px;}
  .cta-btn{display:inline-block;background:var(--gold);color:#0a0a0a;text-decoration:none;padding:16px 40px;font-size:20px;font-weight:800;letter-spacing:1px;border-radius:999px;transition:.25s;margin:0 6px;}
  .cta-btn:hover{background:var(--gold-light);transform:scale(1.03);}
  .cta-mail{display:inline-block;color:var(--gold);text-decoration:none;padding:16px 30px;font-size:16px;font-weight:700;border:1px solid var(--gold);border-radius:999px;transition:.25s;margin:0 6px;}
  .cta-mail:hover{background:var(--gold);color:#0a0a0a;}
  .manager{margin-top:16px;font-size:13px;color:var(--muted);}

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

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

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

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

  &lt;div class="header"&gt;
    &lt;div class="tag"&gt;ПЛИТКА ПЕРФОРИРОВАННАЯ НАПОЛЬНАЯ · ПРАЙС-ЛИСТ&lt;/div&gt;
    &lt;h1&gt;300×300 мм · Промышленные полы&lt;/h1&gt;
    &lt;div class="line"&gt;&lt;/div&gt;
    &lt;p&gt;Усиление бетонных полов · Автосервисы · Склады · Производственные цеха&lt;/p&gt;
    &lt;div class="company-info"&gt;
      &lt;b&gt;ООО «Арсенал-Деталь»&lt;/b&gt; · ИНН 6670215323 / КПП 667001001 · ОГРН 1086670018445&lt;br /&gt;
      Телефон: &lt;b&gt;8 992-017-49-73&lt;/b&gt; · E-mail: &lt;b&gt;bronestali@inbox.ru&lt;/b&gt;
    &lt;/div&gt;
  &lt;/div&gt;

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

  
  &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;2 000 шт&lt;/b&gt; скидка применится автоматически.&lt;/p&gt;
    &lt;div class="cta-counter"&gt;Выбрано: &lt;b id="selectedCount"&gt;0&lt;/b&gt; из &lt;span id="totalPositions"&gt;0&lt;/span&gt;&lt;/div&gt;
    &lt;div class="cta-buttons"&gt;
      &lt;button class="btn-big primary" onclick="downloadRequest()"&gt;⬇ Скачать запрос КП&lt;/button&gt;
      &lt;button class="btn-big" onclick="sendByEmail()"&gt;? Отправить на e-mail&lt;/button&gt;
      &lt;button class="btn-big" onclick="scrollToTable()"&gt;↓ К каталогу&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;

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

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

  &lt;div class="table-block" id="catalog"&gt;
    &lt;div class="select-hint"&gt;→ НАЖМИ ★ ДЛЯ ВЫБОРА →&lt;/div&gt;
    &lt;div class="block-title"&gt;Прайс-лист · Плитка перфорированная 300×300 мм&lt;/div&gt;
    &lt;div class="table-wrap"&gt;
      &lt;table id="tbl"&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th class="col-star" title="Отметь позиции"&gt;★&lt;/th&gt;
            &lt;th class="col-qty"&gt;Кол-во, шт&lt;/th&gt;
            &lt;th class="num sortable" data-key="num"&gt;№&lt;/th&gt;
            &lt;th class="sortable" data-key="size"&gt;Размер&lt;/th&gt;
            &lt;th&gt;Толщина&lt;/th&gt;
            &lt;th&gt;Отверстия&lt;/th&gt;
            &lt;th&gt;Материал&lt;/th&gt;
            &lt;th class="num sortable" data-key="weight"&gt;Вес, кг&lt;/th&gt;
            &lt;th class="num sortable" data-key="price"&gt;Цена без скидки, ₽/шт&lt;/th&gt;
            &lt;th class="num"&gt;Цена со скидкой, ₽/шт&lt;/th&gt;
            &lt;th class="num"&gt;Мин. кол-во, шт&lt;/th&gt;
            &lt;th class="num"&gt;Сумма, ₽&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody id="tbody"&gt;&lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
    &lt;div class="footnote"&gt;
      &lt;div class="fn"&gt;Материал: &lt;b&gt;Сталь 08ПС/08КП&lt;/b&gt; (холоднокатаная) или &lt;b&gt;оцинкованная&lt;/b&gt;&lt;/div&gt;
      &lt;div class="fn"&gt;Отверстия: Ø20-22 мм · Усики (отгибы): 20 мм · Отбортовка: 10 мм&lt;/div&gt;
      &lt;div class="fn"&gt;Срок изготовления: &lt;b&gt;8-15 рабочих дней&lt;/b&gt; на партию 2000 шт.&lt;/div&gt;
      &lt;div class="fn"&gt;Скидка применяется &lt;b&gt;ко всей партии&lt;/b&gt; при достижении порога по количеству&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="cta"&gt;
    &lt;p class="cta-text"&gt;Изготовим плитку любого размера по вашим чертежам&lt;/p&gt;
    &lt;a href="tel:+79920174973" class="cta-btn"&gt;8 (992) 017-49-73&lt;/a&gt;
    &lt;a href="mailto:bronestali@inbox.ru?subject=Запрос%20на%20плитку%20перфорированную" class="cta-mail"&gt;✉ bronestali@inbox.ru&lt;/a&gt;
    &lt;p class="manager"&gt;Менеджер: Лариса · ООО «Арсенал-Деталь»&lt;/p&gt;
  &lt;/div&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;0%&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="sticky-stat"&gt;
        &lt;div class="lbl" id="barTotalLabel"&gt;Итого&lt;/div&gt;
        &lt;div class="val big" id="barTotal"&gt;0 ₽&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="sticky-actions"&gt;
      &lt;button class="sticky-btn primary" onclick="downloadRequest()"&gt;⬇ Скачать запрос КП&lt;/button&gt;
      &lt;button class="sticky-btn" onclick="sendByEmail()"&gt;? На e-mail&lt;/button&gt;
      &lt;button class="sticky-btn clear" onclick="clearPicked()"&gt;✕ Очистить&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
/* ============================================================
   ВНЕШНИЙ ПРАЙС · ПЛИТКА ПЕРФОРИРОВАННАЯ
   Накопительная скидка от объёма (по количеству, шт)
   ============================================================ */

var PROJECT = {
  id: 'tile-public',
  title: 'Плитка перфорированная напольная 300×300',
  vat: 20,

  /* ПОРОГИ СКИДОК (по количеству, шт) — накопительно */
  discounts: [
    {qty: 2000,  pct: 5},
    {qty: 5000,  pct: 10},
    {qty: 10000, pct: 15}
  ],

  /* Материалы: 08ПС/08КП — коэффициент 1.0; оцинковка — 1.3 */
  materials: [
    {key:'08ПС',  k:1.00, name:'Сталь 08ПС (ХК)'},
    {key:'08КП',  k:1.00, name:'Сталь 08КП (ХК)'},
    {key:'оцинк', k:1.30, name:'Оцинкованная сталь'}
  ],

  /* Базовые цены: 1,2 мм = 130 ₽ × 1,6 = 208 ₽; остальные — пропорционально весу */
  data: [
    {num:1, size:'300×300', thickness:'1мм',   holes:'64 отв', material:'08ПС',  weight:0.75, price:173, minQty:2000},
    {num:2, size:'300×300', thickness:'1мм',   holes:'32 отв', material:'08ПС',  weight:0.75, price:173, minQty:2000},
    {num:3, size:'300×300', thickness:'1,2мм', holes:'64 отв', material:'08ПС',  weight:0.90, price:208, minQty:2000},
    {num:4, size:'300×300', thickness:'1,2мм', holes:'32 отв', material:'08ПС',  weight:0.90, price:208, minQty:2000},
    {num:5, size:'300×300', thickness:'1,5мм', holes:'64 отв', material:'08ПС',  weight:1.12, price:259, minQty:2000},
    {num:6, size:'300×300', thickness:'1,5мм', holes:'32 отв', material:'08ПС',  weight:1.12, price:259, minQty:2000},
    {num:7, size:'300×300', thickness:'1,8мм', holes:'64 отв', material:'08ПС',  weight:1.35, price:312, minQty:2000},
    {num:8, size:'300×300', thickness:'1,8мм', holes:'32 отв', material:'08ПС',  weight:1.35, price:312, minQty:2000},
    /* Оцинковка — те же толщины, коэффициент 1.3 */
    {num:9, size:'300×300', thickness:'1,2мм', holes:'64 отв', material:'оцинк', weight:0.90, price:208, minQty:2000},
    {num:10,size:'300×300', thickness:'1,2мм', holes:'32 отв', material:'оцинк', weight:0.90, price:208, minQty:2000},
    {num:11,size:'300×300', thickness:'1,5мм', holes:'64 отв', material:'оцинк', weight:1.12, price:259, minQty:2000},
    {num:12,size:'300×300', thickness:'1,5мм', holes:'32 отв', material:'оцинк', weight:1.12, price:259, minQty:2000},
    {num:13,size:'300×300', thickness:'1,8мм', holes:'64 отв', material:'оцинк', weight:1.35, price:312, minQty:2000},
    {num:14,size:'300×300', thickness:'1,8мм', holes:'32 отв', material:'оцинк', weight:1.35, price:312, minQty:2000}
  ],

  phone: '8 (992) 017-49-73',
  phoneHref: '+79920174973',
  email: 'bronestali@inbox.ru',
  manager: 'Менеджер: Лариса · ООО «Арсенал-Деталь»'
};

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

function fmt(n){ return Math.round(n).toLocaleString('ru-RU'); }
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 basePrice(r){
  var mat = PROJECT.materials.find(function(m){return m.key===r.material;}) || {k:1};
  return Math.round(r.price * mat.k);
}

/* ---------- СКИДКА ПО ОБЩЕМУ КОЛИЧЕСТВУ ---------- */
function getDiscountPct(totalQty){
  var pct = 0;
  PROJECT.discounts.forEach(function(d){
    if (totalQty &gt;= d.qty) pct = d.pct;
  });
  return pct;
}
function getNextThreshold(totalQty){
  for (var i=0;i&lt;PROJECT.discounts.length;i++){
    if (totalQty &lt; PROJECT.discounts[i].qty) return PROJECT.discounts[i];
  }
  return null;
}
function calcPriceWithDiscount(r, pct){
  return Math.round(basePrice(r) * (1 - pct/100));
}

/* ---------- ОБЩЕЕ КОЛИЧЕСТВО / ВЕС ВЫБРАННОГО ---------- */
function getTotalQty(){
  var total = 0;
  Object.keys(picked).forEach(function(n){
    total += (picked[n]||1);
  });
  return total;
}
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) total += r.weight * (picked[n]||1);
  });
  return total;
}

/* ---------- ФИЛЬТРАЦИЯ ---------- */
function getFiltered(){
  var rows = PROJECT.data.slice();
  if (state.search){
    var q = state.search.trim().toLowerCase();
    rows = rows.filter(function(r){
      var mat = PROJECT.materials.find(function(m){return m.key===r.material;});
      var matName = mat ? mat.name.toLowerCase() : '';
      return String(r.num).indexOf(q)!==-1 ||
             (r.size||'').toLowerCase().indexOf(q)!==-1 ||
             (r.thickness||'').toLowerCase().indexOf(q)!==-1 ||
             (r.holes||'').toLowerCase().indexOf(q)!==-1 ||
             matName.indexOf(q)!==-1 ||
             String(r.weight).indexOf(q)!==-1;
    });
  }
  if (state.sort.key){
    var k=state.sort.key, d=state.sort.dir;
    rows.sort(function(a,b){
      var va=a[k], vb=b[k];
      if(typeof va==='number' &amp;&amp; typeof vb==='number') return (va-vb)*d;
      return String(va).localeCompare(String(vb),'ru')*d;
    });
  }
  return rows;
}

/* ---------- СТАТИСТИКА ---------- */
function updateStats(){
  var d = PROJECT.data;
  document.getElementById('statTotal').textContent = d.length;
  var w = d.map(function(r){return r.weight;});
  document.getElementById('statWeight').textContent = Math.min.apply(null,w)+'–'+Math.max.apply(null,w)+' кг';
  var prices = d.map(basePrice);
  document.getElementById('statPrice').textContent = fmt(Math.min.apply(null,prices))+' ₽';
  var maxPct = PROJECT.discounts.reduce(function(m,x){return Math.max(m,x.pct);},0);
  document.getElementById('statMaxDisc').textContent = 'до '+maxPct+'%';
  document.getElementById('totalPositions').textContent = d.length;
}

/* ---------- РЕНДЕР ТАБЛИЦЫ ---------- */
function render(){
  var rows = getFiltered();
  var tbody = document.getElementById('tbody');
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);

  tbody.innerHTML = '';
  document.getElementById('counter').textContent = 'Найдено: ' + rows.length;

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

  rows.forEach(function(r){
    var isPicked = picked[r.num]!==undefined;
    var qty = isPicked ? picked[r.num] : r.minQty;
    var bp = basePrice(r);
    var dp = calcPriceWithDiscount(r, discPct);
    var sum = dp * (isPicked ? qty : 0);
    var discountActive = discPct &gt; 0;
    var mat = PROJECT.materials.find(function(m){return m.key===r.material;});
    var matName = mat ? mat.name : r.material;
    var isGalv = r.material === 'оцинк';

    var thkBadge = r.thickness==='1мм'?'t1':(r.thickness==='1,2мм'?'t12':(r.thickness==='1,5мм'?'t15':'t18'));
    var holesBadge = r.holes==='64 отв'?'h64':'h32';

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

    var matCell = isGalv
      ? '&lt;span class="badge galv"&gt;Оцинк.&lt;/span&gt;'
      : matName;

    tr.innerHTML =
      '&lt;td class="col-star"&gt;&lt;span class="star'+(isPicked?' on':'')+'" data-num="'+r.num+'"&gt;'+(isPicked?'★':'☆')+'&lt;/span&gt;&lt;/td&gt;'+
      '&lt;td class="col-qty"&gt;&lt;input type="number" class="qty" data-num="'+r.num+'" value="'+qty+'" min="'+r.minQty+'" step="500"'+(isPicked?'':' disabled')+'&gt;&lt;/td&gt;'+
      '&lt;td class="num"&gt;'+r.num+'&lt;/td&gt;'+
      '&lt;td&gt;&lt;span class="badge '+thkBadge+'"&gt;'+r.size+'&lt;/span&gt;&lt;/td&gt;'+
      '&lt;td&gt;&lt;span class="badge '+thkBadge+'"&gt;'+r.thickness+'&lt;/span&gt;&lt;/td&gt;'+
      '&lt;td&gt;&lt;span class="badge '+holesBadge+'"&gt;'+r.holes+'&lt;/span&gt;&lt;/td&gt;'+
      '&lt;td style="font-size:12px"&gt;'+matCell+'&lt;/td&gt;'+
      '&lt;td class="num"&gt;'+r.weight+'&lt;/td&gt;'+
      '&lt;td class="num price-old"&gt;'+fmt(bp)+' ₽&lt;/td&gt;'+
      '&lt;td class="num price'+(discountActive?' discount':'')+'"&gt;'+(discountActive?fmt(dp)+' ₽':fmt(bp)+' ₽')+'&lt;/td&gt;'+
      '&lt;td class="num"&gt;'+fmt(r.minQty)+'&lt;/td&gt;'+
      '&lt;td class="num '+(isPicked?'price':'')+'"&gt;'+(isPicked?fmt(sum)+' ₽':'—')+'&lt;/td&gt;';
    tbody.appendChild(tr);
  });

  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 {
        var r = PROJECT.data.find(function(x){return x.num===n;});
        picked[n] = r ? r.minQty : 2000;
      }
      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 r = PROJECT.data.find(function(x){return x.num===n;});
      var min = r ? r.minQty : 1;
      var v = Math.max(min, parseInt(this.value,10)||min);
      picked[n] = v;
      render();
    });
  });
}

/* ---------- ОБНОВЛЕНИЕ БЛОКА СКИДКИ ---------- */
function updateDiscountBanner(){
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);
  var next = getNextThreshold(totalQty);
  var maxThreshold = PROJECT.discounts[PROJECT.discounts.length-1].qty;
  var progressPct = Math.min(100, (totalQty / maxThreshold) * 100);

  var banner = document.getElementById('discountBanner');
  if (banner){
    if (discPct &gt; 0) banner.classList.add('active');
    else banner.classList.remove('active');
  }

  var fill = document.getElementById('progressFill');
  if (fill) fill.style.width = progressPct.toFixed(1)+'%';

  var lbl = document.getElementById('progressLabel');
  if (lbl){
    if (totalQty === 0){
      lbl.innerHTML = 'Отметьте позиции — узнаете свою скидку';
    } else if (!next){
      lbl.innerHTML = '? &lt;b&gt;МАКСИМАЛЬНАЯ СКИДКА '+discPct+'%&lt;/b&gt; применена ко всей партии';
    } else {
      lbl.innerHTML = 'Набрано: &lt;b&gt;'+fmt(totalQty)+' шт&lt;/b&gt; · до скидки '+next.pct+'% осталось '+fmt(next.qty-totalQty)+' шт';
    }
  }

  var q = document.getElementById('discQty');
  if (q) q.textContent = fmt(totalQty)+' шт';

  var nxt = document.getElementById('discNext');
  if (nxt) nxt.textContent = next ? fmt(next.qty)+' шт (−'+next.pct+'%)' : 'Максимум ✓';

  var rate = document.getElementById('discRate');
  if (rate) rate.textContent = discPct+'%';

  var priceEl = document.getElementById('discPrice');
  if (priceEl){
    if (totalQty === 0){
      priceEl.textContent = '—';
    } else if (discPct &gt; 0){
      priceEl.textContent = '−'+discPct+'% ко всей партии';
    } else {
      priceEl.textContent = 'Пока без скидки';
    }
  }
}

/* ---------- STICKY-БАР ---------- */
function updateStickyBar(){
  var nums = Object.keys(picked);
  var count = nums.length;
  var totalQty = getTotalQty();
  var totalWeight = getTotalWeight();
  var discPct = getDiscountPct(totalQty);
  var discountActive = discPct &gt; 0;

  var 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;
    totalSum += calcPriceWithDiscount(r, discPct) * q;
  });

  document.getElementById('barCount').textContent = count;
  document.getElementById('barQty').textContent = fmt(totalQty);
  document.getElementById('barWeight').textContent = fmt(totalWeight)+' кг';
  document.getElementById('barRate').textContent = discountActive ? '−'+discPct+'%' : '0%';
  document.getElementById('barRateLabel').textContent = discountActive ? '? Скидка' : 'Скидка';
  document.getElementById('barTotal').textContent = fmt(totalSum)+' ₽';
  document.getElementById('barTotalLabel').textContent = discountActive ? 'Итого со скидкой' : 'Итого';

  var bar = document.getElementById('stickyBar');
  if (count &gt; 0) bar.classList.add('show');
  else bar.classList.remove('show');

  if (discountActive) bar.classList.add('discount-active');
  else bar.classList.remove('discount-active');

  var sel = document.getElementById('selectedCount');
  if (sel) sel.textContent = count;
}

function clearPicked(){
  if (!Object.keys(picked).length) return;
  if (!confirm('Очистить все отмеченные позиции?')) return;
  picked = {};
  render();
}

function resetAll(){
  if (!confirm('Сбросить все данные?')) return;
  picked = {};
  state.search = '';
  state.sort = {key:'num', dir:1};
  document.getElementById('search').value = '';
  render();
}

function scrollToTable(){
  document.getElementById('catalog').scrollIntoView({behavior:'smooth',block:'start'});
}

/* ---------- CSV / EXCEL ---------- */
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 totalQty = getTotalQty();
  var totalWeight = getTotalWeight();
  var discPct = getDiscountPct(totalQty);

  var header = ['№','Размер','Толщина','Отверстия','Материал','Вес, кг','Цена без скидки, ₽','Скидка, %','Цена со скидкой, ₽','Кол-во, шт','Сумма, ₽'];
  var body = rows.map(function(r){
    var q = picked[r.num]||1;
    var bp = basePrice(r);
    var dp = calcPriceWithDiscount(r, discPct);
    var mat = PROJECT.materials.find(function(m){return m.key===r.material;});
    return [r.num, r.size, r.thickness, r.holes, mat?mat.name:r.material, r.weight, bp, discPct, dp, q, dp*q];
  });
  body.push([]);
  body.push(['','','','','','ИТОГО:',totalWeight+' кг','',discPct+'%','',totalQty, Math.round(rows.reduce(function(s,r){
    return s + calcPriceWithDiscount(r, discPct) * (picked[r.num]||1);
  },0))]);

  var esc = function(v){return '"'+String(v==null?'':v).replace(/"/g,'""')+'"';};
  var csv = [header].concat(body).map(function(r){return r.map(esc).join(';');}).join('\r\n');
  var blob = new Blob(['\uFEFF'+csv],{type:'text/csv;charset=utf-8;'});
  var url = URL.createObjectURL(blob);
  var a = document.createElement('a');
  a.href = url;
  a.download = 'Запрос_КП_Плитка_'+today()+'.csv';
  document.body.appendChild(a); a.click(); a.remove();
  setTimeout(function(){URL.revokeObjectURL(url);},500);
}

function dlExcel(){
  var rows = getFiltered();
  var totalQty = getTotalQty();
  var discPct = getDiscountPct(totalQty);
  var header = ['№','Размер','Толщина','Отверстия','Материал','Вес, кг','Цена без скидки, ₽','Скидка, %','Цена со скидкой, ₽','Мин. кол-во, шт'];
  var body = rows.map(function(r){
    var mat = PROJECT.materials.find(function(m){return m.key===r.material;});
    return [r.num, r.size, r.thickness, r.holes, mat?mat.name:r.material, r.weight, basePrice(r), discPct, calcPriceWithDiscount(r, discPct), r.minQty];
  });
  var esc = function(v){return String(v==null?'':v).replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');};
  var table = '&lt;table border="1"&gt;&lt;thead&gt;&lt;tr&gt;'+header.map(function(h){return '&lt;th&gt;'+esc(h)+'&lt;/th&gt;';}).join('')+'&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;'+body.map(function(r){return '&lt;tr&gt;'+r.map(function(c){return '&lt;td&gt;'+esc(c)+'&lt;/td&gt;';}).join('')+'&lt;/tr&gt;';}).join('')+'&lt;/tbody&gt;&lt;/table&gt;';
  var html = '&lt;html xmlns:x="urn:schemas-microsoft-com:office:excel"&gt;&lt;head&gt;&lt;meta charset="UTF-8"&gt;&lt;/head&gt;&lt;body&gt;&lt;h2&gt;Плитка перфорированная 300×300 — прайс-лист&lt;/h2&gt;'+table+'&lt;/body&gt;&lt;/html&gt;';
  var blob = new Blob(['\uFEFF'+html],{type:'application/vnd.ms-excel;charset=utf-8;'});
  var url = URL.createObjectURL(blob);
  var a = document.createElement('a');
  a.href = url;
  a.download = 'Плитка_прайс_'+today()+'.xls';
  document.body.appendChild(a); a.click(); a.remove();
  setTimeout(function(){URL.revokeObjectURL(url);},500);
}

/* ---------- 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 totalQty = getTotalQty();
  var totalWeight = getTotalWeight();
  var discPct = getDiscountPct(totalQty);
  var totalSum = 0;
  var lines = ['Здравствуйте!','','Прошу подготовить коммерческое предложение по плите перфорированной напольной 300×300:',''];
  rows.forEach(function(r){
    var q = picked[r.num]||1;
    var dp = calcPriceWithDiscount(r, discPct);
    var mat = PROJECT.materials.find(function(m){return m.key===r.material;});
    totalSum += dp*q;
    lines.push('№'+r.num+' · '+r.size+' · '+r.thickness+' · '+r.holes+' · '+(mat?mat.name:r.material)+' · '+r.weight+' кг · '+fmt(dp)+' ₽/шт × '+fmt(q)+' шт = '+fmt(dp*q)+' ₽');
  });
  lines.push('');
  lines.push('Всего позиций: '+rows.length);
  lines.push('Всего штук: '+fmt(totalQty));
  lines.push('Общая масса: '+fmt(totalWeight)+' кг');
  if (discPct &gt; 0) lines.push('✓ Скидка от объёма: '+discPct+'% (применена ко всей партии)');
  lines.push('ИТОГО: '+fmt(totalSum)+' ₽ (без НДС)');
  lines.push('ИТОГО с НДС '+PROJECT.vat+'%: '+fmt(totalSum*(1+PROJECT.vat/100))+' ₽');
  lines.push('');
  lines.push('Прошу указать сроки изготовления и условия отгрузки.');
  lines.push('');
  lines.push('С уважением,');
  var subject = encodeURIComponent('Запрос КП — плитка перфорированная 300×300 ('+rows.length+' поз.)');
  var body = encodeURIComponent(lines.join('\n'));
  window.location.href = 'mailto:'+PROJECT.email+'?subject='+subject+'&amp;body='+body;
}

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

  document.getElementById('search').addEventListener('input',function(e){
    state.search = e.target.value;
    render();
  });

  document.querySelectorAll('#tbl th.sortable').forEach(function(th){
    th.addEventListener('click',function(){
      var k = th.dataset.key;
      if (state.sort.key===k) state.sort.dir *= -1;
      else state.sort = {key:k, dir:1};
      render();
    });
  });
});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-10-13T12:05:27Z</updated>
  <logo>https://xn--80abmnojgpmk.xn--p1ai/ssl/u/pic/f9/71f28ebd6c11f1bc96a94a3b2a5b30/-/XpnoBpMGVrE3AtfQUGFKD80ejOZ4gg39jykiODEqmDqeUPqSFm0Kxv05wtgrESirqqynC9qM7bP1a92QW6pNZBkp.jpg</logo>
  <author>
    <name>1761815</name>
    <uri>https://www.xn--80abmnojgpmk.xn--p1ai/</uri>
  </author>
</feed>
