<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.pandoraburo.ru/" xml:lang="ru">
  <id>https://www.pandoraburo.ru/shar-baby-i-shary-iz-broni-110g13l-stali-20l-i-chuguna</id>
  <link href="https://www.pandoraburo.ru/shar-baby-i-shary-iz-broni-110g13l-stali-20l-i-chuguna.xml" rel="self"/>
  <title>Шар бабы и шары из брони 110г13л, стали 20л и чугуна</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"&gt;
&lt;title&gt;Калькулятор шар-баб и шаров · Арсенал-Деталь&lt;/title&gt;
&lt;style&gt;
  :root {
    --bg:#0a0a0a; --bg2:#111111; --bg3:#16130a;
    --line:#d4af37; --gold:#d4af37; --goldB:#f0d060; --goldD:#8a7020;
    --red:#e74c3c; --green:#2ecc71; --cyan:#6ee8e4;
    --ad-gold:#d4af37; --ad-goldB:#f0d060;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; }
  body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
    background: var(--bg); color: var(--gold); line-height: 1.5; padding: 20px 14px 200px;
  }
  ::selection { background: var(--gold); color: #000; }
  .wrap { max-width: 1300px; margin: 0 auto; }

  /* ============ БАННЕР СВЕРХУ ============ */
  .adb-top-wrap { max-width:640px; margin:0 auto 24px; position:relative; z-index:2; }
  .adb { width:100%; aspect-ratio:5/2; min-height:180px; position:relative;
    font-family:'Manrope','Segoe UI',sans-serif; overflow:hidden; border-radius:14px;
    background:#0a0a0a; border:1px solid var(--ad-gold);
    box-shadow:0 6px 22px rgba(0,0,0,.6), 0 0 0 1px rgba(212,175,55,.15); }
  .adb-frame { position:absolute; inset:0; padding-top:34px; }
  .adb-ticker { position:absolute; top:0; left:0; right:0; height:34px; display:flex;
    align-items:center; background:#0a0a0a; border-bottom:1px solid var(--ad-gold);
    overflow:hidden; z-index:5; }
  .adb-ticker::before { content:'ЦЕНЫ'; background:var(--ad-gold); color:#0a0a0a;
    font-size:10px; font-weight:800; letter-spacing:1.5px; padding:0 12px;
    height:100%; display:flex; align-items:center; flex-shrink:0; }
  .adb-ticker-track { display:inline-flex; align-items:center; white-space:nowrap;
    animation:adb-ticker 40s linear infinite; padding-left:16px; }
  .adb-ticker-track span { color:var(--ad-gold); font-size:12px; font-weight:500; padding:0 8px; }
  .adb-ticker-track b { color:var(--ad-goldB); font-weight:800; }
  .adb-ticker-track .dot { color:var(--ad-gold); font-size:8px; padding:0; }
  @keyframes adb-ticker { 0% { transform:translateX(0); } 100% { transform:translateX(-50%); } }
  .adb-slide { position:absolute; inset:34px 0 0 0; display:flex; align-items:center;
    opacity:0; pointer-events:none; transform:translateX(2em);
    transition:opacity .5s ease,transform .5s ease; text-decoration:none; }
  .adb-slide.active { opacity:1; pointer-events:auto; transform:none; }
  .adb-tag { position:absolute; top:.5em; right:.6em; font-size:.5em;
    letter-spacing:.12em; text-transform:uppercase; color:var(--ad-gold);
    background:rgba(10,10,10,.7); border:1px solid var(--ad-gold);
    padding:.25em .7em; border-radius:999px; z-index:3; }
  .adb-splash { background:radial-gradient(120% 120% at 20% 0%,rgba(212,175,55,.18),transparent 55%),linear-gradient(135deg,#111,#0a0a0a); }
  .adb-splash-txt { padding:0 1.4em; width:100%; }
  .adb-splash-title { font-family:'Unbounded','Arial Black',sans-serif; font-weight:800;
    font-size:1.05em; line-height:1.15; color:#fff; }
  .adb-splash-title br { display:block; }
  .adb-splash-phone { margin-top:.5em; font-size:.95em; font-weight:800; color:var(--ad-gold); }
  .adb-splash-note { margin-top:.3em; font-size:.55em; color:#9a8040; }
  .adb-ad { color:#fff; }
  .adb-ad-img { position:absolute; inset:0; background-size:cover; background-position:center; }
  .adb-ad-txt { position:relative; z-index:2; padding:0 1.4em; }
  .adb-ad-title { font-family:'Unbounded','Arial Black',sans-serif; font-weight:800;
    font-size:1.05em; line-height:1.1; color:#fff; text-shadow:0 2px 10px rgba(0,0,0,.7); }
  .adb-ad-cta { margin-top:.5em; display:inline-block; font-size:.6em; font-weight:700;
    letter-spacing:.06em; text-transform:uppercase; color:#0a0a0a;
    background:var(--ad-gold); padding:.45em 1em; border-radius:999px; }
  .adb-dots { position:absolute; bottom:.5em; left:0; right:0; display:flex;
    justify-content:center; gap:.3em; z-index:4; }
  .adb-dots i { width:.34em; height:.34em; border-radius:50%;
    background:rgba(212,175,55,.3); cursor:pointer; transition:.2s; }
  .adb-dots i.on { background:var(--ad-gold); transform:scale(1.25); }
  .adb-bar { position:absolute; left:0; right:0; bottom:0; height:.14em;
    background:rgba(212,175,55,.15); z-index:4; }
  .adb-bar i { display:block; height:100%; width:0;
    background:linear-gradient(90deg,var(--ad-gold),var(--ad-goldB)); }

  /* ============ БЕГУЩАЯ СТРОКА ============ */
  .ticker-block { display:flex; align-items:stretch; background:var(--bg);
    border:1px solid var(--line); 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-viewport { flex:1; overflow:hidden; position:relative; }
  .ticker-track { display:inline-flex; align-items:center; height:100%; white-space:nowrap;
    animation:tickerScroll 50s linear infinite; padding-left:20px; }
  .ticker-item { color:var(--gold); font-size:13px; padding:0 10px; letter-spacing:.3px; }
  .ticker-item b { color:var(--goldB); font-weight:700; }
  .ticker-dot { color:var(--gold); font-size:10px; }
  @keyframes tickerScroll { 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-strip-item { display:flex; align-items:center; gap:12px; padding:14px 18px;
    background:linear-gradient(135deg,rgba(212,175,55,.1) 0%,rgba(10,15,30,.7) 100%);
    border:1px solid rgba(212,175,55,.4); border-radius:14px;
    text-decoration:none; transition:all .25s; }
  .ad-strip-item:hover { border-color:var(--ad-gold); box-shadow:0 0 20px rgba(212,175,55,.3); transform:translateY(-2px); }
  .ad-strip-tag { background:var(--ad-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-strip-text { color:#e8f4ff; font-size:.9rem; font-weight:600; flex:1; }
  .ad-strip-cta { color:var(--ad-gold); font-size:.85rem; font-weight:800; letter-spacing:.5px; white-space:nowrap; }

  /* ============ ШАПКА ============ */
  header { background:var(--bg); border:1px solid var(--line); border-radius:12px;
    padding:30px 25px; text-align:center; margin-bottom:14px; }
  .banner-tag { display:inline-block; background:var(--gold); color:#0a0a0a;
    font-size:11px; font-weight:800; letter-spacing:2px; padding:4px 14px;
    border-radius:999px; margin-bottom:14px; }
  header h1 { margin:0 0 12px 0; font-size:28px; color:var(--gold);
    text-transform:uppercase; letter-spacing:3px; font-weight:800; }
  .banner-line { width:60px; height:2px; background:var(--gold); margin:0 auto 14px; }
  header p { margin:0; color:var(--gold); font-size:15px; letter-spacing:.5px; opacity:.9; }

  /* ============ ТУЛБАР ============ */
  .promo-toolbar { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:14px; }
  .promo-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; }
  .promo-btn:hover { background:var(--gold); color:#0a0a0a; }
  .promo-btn.primary { background:var(--gold); color:#0a0a0a; }
  .promo-btn.primary:hover { background:var(--goldB); }
  .promo-btn.danger { border-color:var(--red); color:var(--red); }
  .promo-btn.danger:hover { background:var(--red); color:#0a0a0a; }

  /* ============ КАЛЬКУЛЯТОР ============ */
  .calc-grid { display:grid; grid-template-columns:1fr; gap:14px; margin-bottom:14px; }
  .calc-block { background:var(--bg); border:1px solid var(--line); border-radius:12px; padding:20px; }
  .calc-title { color:var(--gold); font-size:12px; font-weight:800; letter-spacing:2px;
    text-transform:uppercase; padding-bottom:12px; margin-bottom:16px;
    border-bottom:1px solid var(--line); text-align:center; }
  .input-grid { display:grid; grid-template-columns:1fr 1fr; gap:20px; }
  @media (max-width:860px) { .input-grid { grid-template-columns:1fr; } }

  .field { display:flex; flex-direction:column; gap:6px; margin-bottom:14px; }
  .field label { font-size:11px; font-weight:700; color:var(--gold);
    text-transform:uppercase; letter-spacing:1px; opacity:.8; }
  .field input, .field select { padding:12px 14px; border:1px solid var(--line);
    border-radius:9px; font-size:14px; background:var(--bg); color:var(--gold);
    outline:none; transition:.15s; font-family:inherit; font-variant-numeric:tabular-nums; }
  .field input:focus, .field select:focus { border-color:var(--goldB); box-shadow:0 0 0 3px rgba(212,175,55,.2); }
  .field select option { background:var(--bg); color:var(--gold); }
  .field input.error { border-color:var(--red); box-shadow:0 0 0 3px rgba(231,76,60,.2); }
  .field-hint { font-size:11px; color:var(--gold); opacity:.55; font-style:italic; }
  .field-row { display:grid; grid-template-columns:1fr 1fr; gap:10px; }

  .info-box { background:rgba(212,175,55,.08); border:1px dashed var(--gold);
    border-radius:9px; padding:14px 16px; margin-top:10px; }
  .info-box-title { font-size:10px; color:var(--gold); opacity:.7;
    text-transform:uppercase; font-weight:700; margin-bottom:6px; }
  .info-box-value { font-size:22px; font-weight:800; color:var(--goldB);
    font-variant-numeric:tabular-nums; }
  .info-box-note { font-size:11px; color:var(--gold); opacity:.6; margin-top:6px; }

  /* ============ БЛОК СКИДКИ ============ */
  .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.new{color:var(--goldB);font-size:20px;}

  /* ============ РЕЗУЛЬТАТ ============ */
  .result-block { background:var(--bg); border:1px solid var(--line); border-radius:12px;
    padding:20px; margin-bottom:14px; }
  .result-grid { display:grid; grid-template-columns:repeat(6,1fr); gap:12px; margin-bottom:16px; }
  @media (max-width:1000px) { .result-grid { grid-template-columns:repeat(3,1fr); } }
  @media (max-width:700px) { .result-grid { grid-template-columns:1fr 1fr; } }
  .result-item { background:#0a0a0a; border:1px solid rgba(212,175,55,.3);
    border-radius:9px; padding:14px; text-align:center; }
  .result-label { font-size:10px; font-weight:700; letter-spacing:1px;
    text-transform:uppercase; color:var(--gold); opacity:.7; margin-bottom:6px; }
  .result-value { font-size:22px; font-weight:800; color:var(--goldB);
    line-height:1.1; font-variant-numeric:tabular-nums; word-break:break-word; }
  .result-value.small { font-size:18px; }
  .result-value.green { color:var(--green); }
  .result-unit { font-size:12px; color:var(--gold); opacity:.7; font-weight:600; margin-left:3px; }

  .result-total { background:linear-gradient(135deg,#1a1408,#0a0a0a);
    border:2px solid var(--gold); border-radius:12px; padding:20px;
    text-align:center; margin-top:8px; transition:all .4s; }
  .result-total.discount-active {
    background:linear-gradient(135deg,rgba(46,204,113,.2),rgba(10,10,10,.95));
    border-color:var(--green);
    box-shadow:0 0 40px rgba(46,204,113,.4);
  }
  .result-total-label { font-size:12px; font-weight:800; letter-spacing:2px;
    text-transform:uppercase; color:var(--gold); opacity:.8; margin-bottom:8px; }
  .result-total.discount-active .result-total-label { color:var(--green); }
  .result-total-value { font-size:40px; font-weight:800; color:var(--goldB);
    line-height:1; font-variant-numeric:tabular-nums; word-break:break-word; }
  .result-total.discount-active .result-total-value { color:var(--green); }
  .result-total-note { font-size:12px; color:var(--gold); opacity:.7; margin-top:8px; }
  .result-total.discount-active .result-total-note { color:#c8e8c8; }

  .warn { background:rgba(231,76,60,.1); border:1px solid var(--red);
    border-left:4px solid var(--red); border-radius:8px; padding:12px 16px;
    margin-bottom:12px; color:#ff8a7a; font-size:13px; display:none; }
  .warn.show { display:block; }
  .warn b { color:#ffaa99; }

  /* ============ SUMMARY ============ */
  .summary-block { background:var(--bg); border:1px solid var(--line);
    border-radius:12px; padding:20px; margin-bottom:14px; }
  .summary-table { width:100%; border-collapse:collapse; font-size:14px; }
  .summary-table td { padding:10px 12px; border-bottom:1px solid rgba(212,175,55,.2); color:var(--gold); }
  .summary-table td:first-child { color:var(--gold); opacity:.8; width:60%; }
  .summary-table td:last-child { color:var(--goldB); font-weight:700; text-align:right;
    font-variant-numeric:tabular-nums; white-space:nowrap; }
  .summary-table tr:last-child td { border-bottom:none; }
  .summary-table .highlight-row td { background:rgba(46,204,113,.08); }
  .summary-table .highlight-row td:last-child { color:var(--green); }

  /* ============ CTA ============ */
  .cta-section { text-align:center; background:var(--bg); border:1px solid var(--gold);
    border-radius:12px; padding:28px 20px; margin-top:14px; }
  .cta-text { font-size:16px; font-weight:600; color:var(--gold); margin:0 0 16px 0; }
  .cta-button { display:inline-block; background:var(--gold); color:#0a0a0a !important;
    text-decoration:none; padding:16px 40px; font-size:20px; font-weight:800;
    letter-spacing:1px; border-radius:999px; transition:.25s; }
  .cta-button:hover { background:var(--goldB); transform:scale(1.03); }
  .manager-info { margin:16px 0 0 0; font-size:13px; color:var(--gold); opacity:.8; }

  .seo-text { 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),#FF8C00,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:1300px;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(--goldB);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;align-items:center;}
  .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);}
  .sticky-btn.hide{padding:12px 14px;min-width:auto;font-size:16px;line-height:1;}
  .sticky-btn.hide:hover{background:var(--red);color:#0a0a0a;border-color:var(--red);}

  /* ============ СКРОЛЛ ============ */
  ::-webkit-scrollbar { width:18px; height:18px; }
  ::-webkit-scrollbar-track { background:#050505; border:1px solid #2a2210;
    border-radius:9px; box-shadow:inset 0 0 12px rgba(212,175,55,.2); }
  ::-webkit-scrollbar-thumb { background:linear-gradient(180deg,#ffffcc 0%,#ffd700 15%,#ff8c00 35%,#d4af37 50%,#ff8c00 65%,#ffd700 85%,#ffffcc 100%);
    border:1px solid #ffd700; border-radius:9px;
    box-shadow:0 0 10px rgba(255,215,0,.9),0 0 20px rgba(255,140,0,.7),0 0 30px rgba(255,80,0,.4),inset 0 0 8px rgba(255,255,255,.5);
    background-size:100% 200%; animation:fireFlow 2.5s linear infinite; }
  @keyframes fireFlow { 0% { background-position:0% 0%; } 100% { background-position:0% 200%; } }
  * { scrollbar-width:thin; scrollbar-color:#ffd700 #0a0a0a; }

  /* ============ АДАПТИВ ============ */
  @media (max-width:700px) {
    body { padding:12px 10px 240px; }
    header h1 { font-size:20px; letter-spacing:1.5px; }
    header p { font-size:13px; }
    .result-total-value { font-size:30px; }
    .result-value { font-size:18px; }
    .promo-btn { padding:9px 12px; font-size:12px; }
    .cta-button { width:100%; padding:16px 10px; font-size:17px; }
    .ticker-block { height:40px; }
    .ticker-item { font-size:12px; }
    .field-row { grid-template-columns:1fr; }
    .adb-top-wrap { padding:0; }
    .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) {
    .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;}
  }

  @media print {
    body { background:#fff; color:#000; padding:0; }
    .ticker-block, .promo-toolbar,
    .adb-top-wrap, .ad-strip, .sticky-bar { display:none !important; }
    header { background:#000 !important; color:#ffd700 !important;
      border-color:#000 !important; -webkit-print-color-adjust:exact; print-color-adjust:exact; }
    header h1, header p { color:#ffd700 !important; }
    .banner-tag { background:#ffd700 !important; color:#000 !important;
      -webkit-print-color-adjust:exact; print-color-adjust:exact; }
    .banner-line { background:#ffd700 !important; }
    .calc-block, .result-block, .summary-block, .discount-banner {
      background:#fff !important; border:1px solid #999 !important; box-shadow:none !important; }
    .calc-title, .result-label, .result-total-label,
    .discount-banner h3, .discount-banner p { color:#000 !important; }
    .field label { color:#000 !important; }
    .field input, .field select { background:#fff !important; color:#000 !important; border-color:#999 !important; }
    .result-item { background:#f5f5f5 !important; border-color:#999 !important; }
    .result-value { color:#000 !important; }
    .result-total { background:#000 !important; border-color:#000 !important; }
    .result-total-value { color:#ffd700 !important; }
    .summary-table td { color:#000 !important; }
    .summary-table td:last-child { color:#000 !important; }
    .cta-section { background:#fff !important; }
    .cta-button { background:#000 !important; color:#fff !important;
      -webkit-print-color-adjust:exact; print-color-adjust:exact; }
    .manager-info { color:#666 !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="adb-top-wrap"&gt;
  &lt;div class="adb" id="adb"&gt;
    &lt;div class="adb-frame"&gt;
      &lt;div class="adb-ticker"&gt;
        &lt;div class="adb-ticker-track"&gt;
          &lt;span&gt;БТВТ 450 — &lt;b&gt;300 ₽/кг&lt;/b&gt;&lt;/span&gt;
          &lt;span class="dot"&gt;◆&lt;/span&gt;
          &lt;span&gt;C500 6 мм — &lt;b&gt;425 ₽/кг&lt;/b&gt;&lt;/span&gt;
          &lt;span class="dot"&gt;◆&lt;/span&gt;
          &lt;span&gt;6×1500×6000 БТВТ — &lt;b&gt;129 000 ₽/лист&lt;/b&gt;&lt;/span&gt;
          &lt;span class="dot"&gt;◆&lt;/span&gt;
          &lt;span&gt;6×1500×6000 C500 — &lt;b&gt;182 750 ₽/лист&lt;/b&gt;&lt;/span&gt;
          &lt;span class="dot"&gt;◆&lt;/span&gt;
          &lt;span&gt;Класс Бр2 / С2 · от 1 листа · НДС 22%&lt;/span&gt;
          &lt;span class="dot"&gt;◆&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;a class="adb-slide adb-splash active" href="https://brony-rf.ru/kuski-i-listy-na-probu" target="_blank" rel="noopener"&gt;
        &lt;div class="adb-tag"&gt;Рекламные площади&lt;/div&gt;
        &lt;div class="adb-splash-txt"&gt;
          &lt;div class="adb-splash-title"&gt;ЗДЕСЬ МОЖЕТ БЫТЬ&lt;br /&gt;ВАША РЕКЛАМА&lt;/div&gt;
          &lt;div class="adb-splash-phone"&gt;8 902 873-36-90 · МАКС&lt;/div&gt;
          &lt;div class="adb-splash-note"&gt;Позвоните, а лучше пишите в МАКС&lt;/div&gt;
        &lt;/div&gt;
      &lt;/a&gt;

      &lt;a class="adb-slide adb-ad" href="https://brony-rf.ru/aktciya-solnechnyy-oktyabr" target="_blank" rel="noopener"&gt;
        &lt;div class="adb-ad-img" style="background-image:linear-gradient(90deg,rgba(5,10,18,.9) 0%,rgba(5,10,18,.4) 60%,rgba(5,10,18,.1) 100%),url('bronya.jpg')"&gt;&lt;/div&gt;
        &lt;div class="adb-tag"&gt;Броня&lt;/div&gt;
        &lt;div class="adb-ad-txt"&gt;
          &lt;div class="adb-ad-title"&gt;C500 · 6 мм&lt;/div&gt;
          &lt;div class="adb-ad-cta"&gt;Перейти на сайт →&lt;/div&gt;
        &lt;/div&gt;
      &lt;/a&gt;

      &lt;a class="adb-slide adb-ad" href="https://brony-rf.ru/btvt-450-list-6-mm" target="_blank" rel="noopener"&gt;
        &lt;div class="adb-ad-img" style="background-image:linear-gradient(90deg,rgba(5,10,18,.9) 0%,rgba(5,10,18,.4) 60%,rgba(5,10,18,.1) 100%),url('tank.jpg')"&gt;&lt;/div&gt;
        &lt;div class="adb-tag"&gt;Броня&lt;/div&gt;
        &lt;div class="adb-ad-txt"&gt;
          &lt;div class="adb-ad-title"&gt;БТВТ 450 · 6 мм&lt;/div&gt;
          &lt;div class="adb-ad-cta"&gt;Перейти на сайт →&lt;/div&gt;
        &lt;/div&gt;
      &lt;/a&gt;

      &lt;div class="adb-dots"&gt;&lt;/div&gt;
      &lt;div class="adb-bar"&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class="wrap"&gt;

  &lt;div class="ticker-block"&gt;
    &lt;div class="ticker-label"&gt;ЦЕНЫ&lt;/div&gt;
    &lt;div class="ticker-viewport"&gt;
      &lt;div class="ticker-track"&gt;
        &lt;span class="ticker-item"&gt;Шар-баба СЧ20 — &lt;b&gt;390 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Шар-баба 20Л — &lt;b&gt;360 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Шар-баба 110Г13Л — &lt;b&gt;520 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Скидки от 1 тонны — &lt;b&gt;до 15%&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Вес до 5 тонн · НДС 22%&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Шар-баба СЧ20 — &lt;b&gt;390 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Шар-баба 20Л — &lt;b&gt;360 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Шар-баба 110Г13Л — &lt;b&gt;520 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Скидки от 1 тонны — &lt;b&gt;до 15%&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Вес до 5 тонн · НДС 22%&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;header&gt;
    &lt;div class="banner-tag"&gt;КАЛЬКУЛЯТОР&lt;/div&gt;
    &lt;h1&gt;Шар-бабы и шары стальные (чугунные)&lt;/h1&gt;
    &lt;div class="banner-line"&gt;&lt;/div&gt;
    &lt;p&gt;СЧ20 · 20Л · 110Г13Л · Вес до 5 тонн · Скидки от 1 тонны&lt;/p&gt;
  &lt;/header&gt;

  &lt;div class="ad-strip"&gt;
    &lt;a class="ad-strip-item" href="https://brony-rf.ru/aktciya-solnechnyy-oktyabr" target="_blank" rel="noopener"&gt;
      &lt;span class="ad-strip-tag"&gt;Акция&lt;/span&gt;
      &lt;span class="ad-strip-text"&gt;Солнечный Октябрь · БТВТ 450 · C500&lt;/span&gt;
      &lt;span class="ad-strip-cta"&gt;Перейти →&lt;/span&gt;
    &lt;/a&gt;
    &lt;a class="ad-strip-item" href="https://brony-rf.ru/btvt-450-list-6-mm" target="_blank" rel="noopener"&gt;
      &lt;span class="ad-strip-tag"&gt;Броня&lt;/span&gt;
      &lt;span class="ad-strip-text"&gt;БТВТ 450 · 6 мм · класс Бр2 / С2&lt;/span&gt;
      &lt;span class="ad-strip-cta"&gt;Перейти →&lt;/span&gt;
    &lt;/a&gt;
  &lt;/div&gt;

  &lt;div class="promo-toolbar"&gt;
    &lt;button class="promo-btn primary" onclick="downloadCSV()"&gt;⬇ Скачать расчёт CSV&lt;/button&gt;
    &lt;button class="promo-btn primary" onclick="downloadExcel()"&gt;⬇ Скачать Excel&lt;/button&gt;
    &lt;button class="promo-btn" onclick="window.print()"&gt;? Печать / PDF&lt;/button&gt;
    &lt;button class="promo-btn danger" onclick="resetAll()"&gt;✕ Сбросить&lt;/button&gt;
    &lt;button class="promo-btn danger" onclick="hideStickyBar()"&gt;▼ Скрыть панель&lt;/button&gt;
  &lt;/div&gt;

  &lt;div class="calc-block" style="margin-bottom:14px"&gt;
    &lt;div class="calc-title"&gt;Параметры заказа&lt;/div&gt;

    &lt;div class="input-grid"&gt;
      &lt;div&gt;
        &lt;div class="field"&gt;
          &lt;label&gt;Материал&lt;/label&gt;
          &lt;select id="material"&gt;&lt;/select&gt;
        &lt;/div&gt;

        &lt;div class="field"&gt;
          &lt;label&gt;Вес одной шар-бабы, кг&lt;/label&gt;
          &lt;input type="number" id="weightInput" min="5" step="0.1" value="50" /&gt;
          &lt;div class="field-hint"&gt;от 5 кг · без верхнего ограничения&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div class="field"&gt;
          &lt;label&gt;Количество, шт&lt;/label&gt;
          &lt;input type="number" id="qty" min="0" step="1" value="1" /&gt;
          &lt;div class="field-hint"&gt;любое количество&lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="info-box"&gt;
          &lt;div class="info-box-title"&gt;Диаметр шара (автоматически)&lt;/div&gt;
          &lt;div class="info-box-value" id="grindDiam"&gt;— мм&lt;/div&gt;
          &lt;div class="info-box-note"&gt;рассчитывается по весу и плотности материала&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&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;1 тонны&lt;/b&gt; — скидка &lt;b style="color:#7dff7d"&gt;5%&lt;/b&gt;.&lt;br /&gt;
       От &lt;b&gt;3 тонн&lt;/b&gt; — &lt;b style="color:#7dff7d"&gt;10%&lt;/b&gt;. От &lt;b&gt;5 тонн&lt;/b&gt; — &lt;b style="color:#7dff7d"&gt;15%&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;1 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="discPct"&gt;0%&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="result-block"&gt;
    &lt;div class="calc-title"&gt;Результат расчёта&lt;/div&gt;
    &lt;div class="warn" id="warnBox"&gt;&lt;/div&gt;

    &lt;div class="result-grid"&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Вес детали&lt;/div&gt;&lt;div class="result-value" id="resWeight"&gt;—&lt;/div&gt;&lt;div class="result-unit"&gt;кг&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Диаметр&lt;/div&gt;&lt;div class="result-value small" id="resDiam"&gt;—&lt;/div&gt;&lt;div class="result-unit"&gt;мм&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Кол-во&lt;/div&gt;&lt;div class="result-value" id="resQty"&gt;—&lt;/div&gt;&lt;div class="result-unit"&gt;шт&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Вес партии&lt;/div&gt;&lt;div class="result-value" id="resBatchWeight"&gt;—&lt;/div&gt;&lt;div class="result-unit"&gt;кг&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Цена за кг&lt;/div&gt;&lt;div class="result-value small" id="resPriceKg"&gt;—&lt;/div&gt;&lt;div class="result-unit"&gt;₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Цена за деталь&lt;/div&gt;&lt;div class="result-value small" id="resPriceOne"&gt;—&lt;/div&gt;&lt;div class="result-unit"&gt;₽&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="result-total" id="resultTotal"&gt;
      &lt;div class="result-total-label"&gt;Цена за партию (с НДС 22%)&lt;/div&gt;
      &lt;div class="result-total-value" id="resPriceBatch"&gt;—&lt;/div&gt;
      &lt;div class="result-total-note" id="resPriceBatchNote"&gt;—&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="summary-block"&gt;
    &lt;div class="calc-title"&gt;Детализация расчёта&lt;/div&gt;
    &lt;table class="summary-table"&gt;
      &lt;tr&gt;&lt;td&gt;Материал&lt;/td&gt;&lt;td id="sumMaterial"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Группа&lt;/td&gt;&lt;td id="sumGroup"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Цена материала (с НДС)&lt;/td&gt;&lt;td id="sumPriceKg"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Плотность&lt;/td&gt;&lt;td id="sumDensity"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Вес одной детали&lt;/td&gt;&lt;td id="sumWeightOne"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Диаметр&lt;/td&gt;&lt;td id="sumDiam"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Количество&lt;/td&gt;&lt;td id="sumQty"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Общий вес партии&lt;/td&gt;&lt;td id="sumBatchWeight"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Коэффициент точности 16-00-16&lt;/td&gt;&lt;td id="sumCoef"&gt;+15%&lt;/td&gt;&lt;/tr&gt;
      &lt;tr class="highlight-row"&gt;&lt;td&gt;&lt;b&gt;Скидка от веса партии&lt;/b&gt;&lt;/td&gt;&lt;td id="sumDiscount"&gt;0%&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;&lt;b&gt;Цена за деталь&lt;/b&gt;&lt;/td&gt;&lt;td id="sumPriceOne"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr class="highlight-row"&gt;&lt;td&gt;&lt;b&gt;Цена за партию&lt;/b&gt;&lt;/td&gt;&lt;td id="sumPriceBatch"&gt;—&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;div class="cta-section"&gt;
    &lt;p class="cta-text"&gt;Нужен точный расчёт или нестандартный вес — звоните&lt;/p&gt;
    &lt;a href="tel:+79028733690" class="cta-button"&gt;8 902 873-36-90&lt;/a&gt;
    &lt;p class="manager-info"&gt;Менеджер: Ольга · ООО «Арсенал Деталь»&lt;/p&gt;
  &lt;/div&gt;

  &lt;div class="seo-text"&gt;
    &lt;p&gt;Калькулятор шар-баб и шаров стальных (чугунных). Материалы: СЧ20, 20Л, 110Г13Л. Вес до 5 тонн без ограничений. Расчёт диаметра шара по весу. Скидки от веса партии от 1 тонны. Цены с НДС 22%. ООО «Арсенал-Деталь», 8 902 873-36-90.&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="barWeight"&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="barDiscount"&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="barPriceOne"&gt;0 ₽&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="sticky-stat"&gt;
        &lt;div class="lbl"&gt;Итого с НДС 22%&lt;/div&gt;
        &lt;div class="val big" id="barTotal"&gt;0 ₽&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="sticky-actions"&gt;
      &lt;button class="sticky-btn primary" onclick="downloadExcel()"&gt;⬇ Скачать расчёт&lt;/button&gt;
      &lt;button class="sticky-btn" onclick="window.print()"&gt;? Печать&lt;/button&gt;
      &lt;button class="sticky-btn clear" onclick="resetAll()"&gt;✕ Сброс&lt;/button&gt;
      &lt;button class="sticky-btn hide" onclick="hideStickyBar()" title="Скрыть панель"&gt;✕&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
/* ==================== БАННЕР ==================== */
(function(){
  var root=document.getElementById('adb'); if(!root) return;
  var INTERVAL=4500;
  var slides=root.querySelectorAll('.adb-slide');
  var dotsBox=root.querySelector('.adb-dots');
  var bar=root.querySelector('.adb-bar i');
  var N=slides.length, idx=0, timer=null, hover=false;

  function fit(){ var w=root.getBoundingClientRect().width; root.style.fontSize=(w/22)+'px'; }
  if(window.ResizeObserver) new ResizeObserver(fit).observe(root);
  window.addEventListener('resize',fit); fit();

  for(var i=0;i&lt;N;i++){ var d=document.createElement('i'); dotsBox.appendChild(d); }
  var dots=dotsBox.querySelectorAll('i');

  function restartBar(){
    if(!bar) return;
    bar.style.animation='none'; void bar.offsetWidth;
    bar.style.animation='adb-fill '+INTERVAL+'ms linear';
  }
  var st=document.createElement('style');
  st.textContent='@keyframes adb-fill{from{width:0}to{width:100%}}';
  document.head.appendChild(st);

  function show(i){
    idx=(i+N)%N;
    slides.forEach(function(s,k){ s.classList.toggle('active',k===idx); });
    dots.forEach(function(d,k){ d.classList.toggle('on',k===idx); });
    restartBar();
  }
  function start(){
    stop();
    timer=setInterval(function(){ if(!hover) show(idx+1); },INTERVAL);
    restartBar();
  }
  function stop(){ if(timer){ clearInterval(timer); timer=null; } }

  root.addEventListener('mouseenter',function(){ hover=true; });
  root.addEventListener('mouseleave',function(){ hover=false; });
  dots.forEach(function(d,k){ d.addEventListener('click',function(){ show(k); }); });

  show(0); start();
})();

/* ==================== ДАННЫЕ: МАТЕРИАЛЫ ==================== */
var MATERIALS = [
  {key:'sch20',    name:'СЧ20 (чугун)',    priceVat:390, density:7100, group:'Чугун'},
  {key:'st20l',    name:'20Л (сталь)',     priceVat:360, density:7820, group:'Сталь'},
  {key:'st110g13l',name:'110Г13Л (сталь)', priceVat:520, density:7820, group:'Сталь'}
];

var COEF_PRECISION = 1.15;
var MIN_WEIGHT = 5;

/* Пороги скидки от веса партии (кг) */
var DISCOUNT_TIERS = [
  {minKg: 5000, pct: 15, label: 'от 5 тонн'},
  {minKg: 3000, pct: 10, label: 'от 3 тонн'},
  {minKg: 1000, pct: 5,  label: 'от 1 тонны'}
];

var state = {
  material: 'sch20',
  result: null,
  userInteracted: false,
  manuallyHidden: false
};

/* ==================== ЗАПОЛНЕНИЕ SELECT ==================== */
var matSelect = document.getElementById('material');
MATERIALS.forEach(function(item){
  var opt = document.createElement('option');
  opt.value = item.key;
  opt.textContent = item.name + ' — ' + item.priceVat + ' ₽/кг';
  matSelect.appendChild(opt);
});

/* ==================== УТИЛИТЫ ==================== */
var fmt = function(n){ return (n === null || n === undefined || isNaN(n)) ? '—' : n.toLocaleString('ru-RU', {maximumFractionDigits: 2}); };
var fmtInt = function(n){ return (n === null || n === undefined || isNaN(n)) ? '—' : Math.round(n).toLocaleString('ru-RU'); };
var num = function(id){ var el = document.getElementById(id); if (!el) return 0; var v = parseFloat(el.value); return isNaN(v) ? 0 : v; };
var getMaterial = function(key){ var found = MATERIALS.find(function(m){return m.key===key;}); return found || MATERIALS[0]; };
var priceNoVat = function(m){ return m.priceVat / 1.2; };

/* ==================== СКИДКА ==================== */
function getVolumeDiscount(batchWeight){
  for (var i = 0; i &lt; DISCOUNT_TIERS.length; i++){
    if (batchWeight &gt;= DISCOUNT_TIERS[i].minKg) return DISCOUNT_TIERS[i];
  }
  return {minKg: 1000, pct: 0, label: 'до 1 тонны'};
}

/* ==================== ДИАМЕТР ШАРА ИЗ ВЕСА ==================== */
function weightToDiameter(weightKg, density){
  if (weightKg &lt;= 0 || density &lt;= 0) return 0;
  var V = weightKg / density;
  var r = Math.cbrt((3 * V) / (4 * Math.PI));
  return r * 2 * 1000;
}

/* ==================== ПРОВЕРКИ ==================== */
function validate(weightOne) {
  var warns = [];
  var wEl = document.getElementById('weightInput');
  if (weightOne &lt; MIN_WEIGHT) {
    warns.push('Минимальный вес шар-бабы — ' + MIN_WEIGHT + ' кг');
    if (wEl) wEl.classList.add('error');
  } else {
    if (wEl) wEl.classList.remove('error');
  }
  return warns;
}

/* ==================== РАСЧЁТ ==================== */
function calculate() {
  var m = getMaterial(state.material);
  var weightOne = num('weightInput');
  var warns = validate(weightOne);

  var diameter = weightToDiameter(weightOne, m.density);
  document.getElementById('grindDiam').textContent = diameter &gt; 0 ? diameter.toFixed(1) + ' мм' : '— мм';

  var qtyRaw = parseInt(num('qty'));
  var qty = isNaN(qtyRaw) ? 0 : Math.max(0, qtyRaw);
  var batchWeight = weightOne * qty;

  var priceVat = m.priceVat;
  var priceNoVatVal = priceNoVat(m);
  var priceVatCoef = priceVat * COEF_PRECISION;

  /* Скидка от веса партии */
  var discount = getVolumeDiscount(batchWeight);
  var discountMultiplier = 1 - discount.pct / 100;

  var priceOne = weightOne * priceVatCoef * discountMultiplier;
  var priceBatch = batchWeight * priceVatCoef * discountMultiplier;
  var priceBatchNoDiscount = batchWeight * priceVatCoef;

  /* Warns */
  var warnBox = document.getElementById('warnBox');
  if (warns.length) {
    warnBox.innerHTML = warns.map(function(w){ return '• ' + w; }).join('&lt;br&gt;');
    warnBox.classList.add('show');
  } else {
    warnBox.classList.remove('show');
  }

  /* Если данных нет — обнуляем результат и скрываем sticky-бар */
  if (qty &lt;= 0 || weightOne &lt;= 0 || batchWeight &lt;= 0) {
    document.getElementById('resWeight').textContent = weightOne &gt; 0 ? fmt(weightOne) : '—';
    document.getElementById('resDiam').textContent = diameter &gt; 0 ? diameter.toFixed(1) : '—';
    document.getElementById('resQty').textContent = qty || '0';
    document.getElementById('resBatchWeight').textContent = '0';
    document.getElementById('resPriceKg').textContent = '—';
    document.getElementById('resPriceOne').textContent = '—';
    document.getElementById('resPriceBatch').textContent = '0 ₽';
    document.getElementById('resPriceBatchNote').textContent = 'Укажите количество шар-баб';

    document.getElementById('sumMaterial').textContent = m.name;
    document.getElementById('sumGroup').textContent = m.group;
    document.getElementById('sumPriceKg').textContent = fmtInt(m.priceVat) + ' ₽/кг (с НДС) · ' + fmtInt(priceNoVatVal) + ' ₽/кг (без НДС)';
    document.getElementById('sumDensity').textContent = fmtInt(m.density) + ' кг/м³';
    document.getElementById('sumWeightOne').textContent = weightOne &gt; 0 ? fmt(weightOne) + ' кг' : '—';
    document.getElementById('sumDiam').textContent = diameter &gt; 0 ? diameter.toFixed(1) + ' мм' : '—';
    document.getElementById('sumQty').textContent = qty + ' шт';
    document.getElementById('sumBatchWeight').textContent = '0 кг';
    document.getElementById('sumDiscount').textContent = '0%';
    document.getElementById('sumPriceOne').textContent = '—';
    document.getElementById('sumPriceBatch').textContent = '—';

    state.result = null;
    updateDiscountBanner(0, {minKg:1000, pct:0, label:'до 1 тонны'}, 0, 0);
    updateStickyBar();
    return;
  }

  /* Вывод */
  document.getElementById('resWeight').textContent = fmt(weightOne);
  document.getElementById('resDiam').textContent = diameter.toFixed(1);
  document.getElementById('resQty').textContent = qty;
  document.getElementById('resBatchWeight').textContent = fmt(batchWeight);
  document.getElementById('resPriceKg').textContent = fmtInt(priceVatCoef * discountMultiplier);
  document.getElementById('resPriceOne').textContent = fmtInt(priceOne) + ' ₽';
  document.getElementById('resPriceBatch').textContent = fmtInt(priceBatch) + ' ₽';

  var noteText = 'Вес партии: ' + fmt(batchWeight) + ' кг';
  if (discount.pct &gt; 0) noteText += ' · Скидка ' + discount.pct + '% (' + discount.label + ')';
  document.getElementById('resPriceBatchNote').textContent = noteText;

  /* Summary */
  document.getElementById('sumMaterial').textContent = m.name;
  document.getElementById('sumGroup').textContent = m.group;
  document.getElementById('sumPriceKg').textContent = fmtInt(m.priceVat) + ' ₽/кг (с НДС) · ' + fmtInt(priceNoVatVal) + ' ₽/кг (без НДС)';
  document.getElementById('sumDensity').textContent = fmtInt(m.density) + ' кг/м³';
  document.getElementById('sumWeightOne').textContent = fmt(weightOne) + ' кг';
  document.getElementById('sumDiam').textContent = diameter.toFixed(1) + ' мм';
  document.getElementById('sumQty').textContent = qty + ' шт';
  document.getElementById('sumBatchWeight').textContent = fmt(batchWeight) + ' кг';
  document.getElementById('sumDiscount').textContent = discount.pct + '%' + (discount.pct &gt; 0 ? ' (' + discount.label + ')' : '');
  document.getElementById('sumPriceOne').textContent = fmtInt(priceOne) + ' ₽';
  document.getElementById('sumPriceBatch').textContent = fmtInt(priceBatch) + ' ₽';

  /* Сохраняем результат */
  state.result = {
    material: m,
    weightOne: weightOne,
    diameter: diameter,
    qty: qty,
    batchWeight: batchWeight,
    priceVat: priceVat,
    priceNoVat: priceNoVatVal,
    priceVatCoef: priceVatCoef,
    discount: discount,
    discountPct: discount.pct,
    priceOne: priceOne,
    priceBatch: priceBatch,
    priceBatchNoDiscount: priceBatchNoDiscount
  };

  /* Обновляем блок скидки и sticky-бар */
  updateDiscountBanner(batchWeight, discount, priceOne, priceBatch);
  updateStickyBar();
}

/* ==================== ОБНОВЛЕНИЕ БЛОКА СКИДКИ ==================== */
function updateDiscountBanner(batchWeight, discount, priceOne, priceBatch){
  var nextTier = null;
  for (var i = DISCOUNT_TIERS.length - 1; i &gt;= 0; i--){
    if (batchWeight &lt; DISCOUNT_TIERS[i].minKg){
      nextTier = DISCOUNT_TIERS[i];
    }
  }
  var maxTier = DISCOUNT_TIERS[0];
  var progressPct = Math.min(100, (batchWeight / maxTier.minKg) * 100);

  var banner = document.getElementById('discountBanner');
  if (discount.pct &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 (batchWeight === 0){
      lbl.innerHTML = 'Укажите количество — узнаете скидку';
    } else if (discount.pct === maxTier.pct){
      lbl.innerHTML = '★ &lt;b&gt;МАКСИМАЛЬНАЯ СКИДКА ' + discount.pct + '%&lt;/b&gt;';
    } else if (discount.pct &gt; 0){
      lbl.innerHTML = '✓ Скидка &lt;b&gt;' + discount.pct + '%&lt;/b&gt;' + (nextTier ? ' · до ' + nextTier.pct + '% осталось ' + fmt(nextTier.minKg - batchWeight) + ' кг' : '');
    } else {
      lbl.innerHTML = 'Вес партии: &lt;b&gt;' + fmt(batchWeight) + ' кг&lt;/b&gt;' + (nextTier ? ' · до скидки ' + nextTier.pct + '% осталось ' + fmt(nextTier.minKg - batchWeight) + ' кг' : '');
    }
  }

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

  var r = document.getElementById('discRemain');
  if (r){
    if (nextTier) r.textContent = fmt(nextTier.minKg - batchWeight) + ' кг';
    else r.textContent = '✓ Максимум';
  }

  var pct = document.getElementById('discPct');
  if (pct){
    if (discount.pct &gt; 0){
      pct.innerHTML = '&lt;span style="text-decoration:line-through;color:#9a8040;font-size:14px"&gt;0%&lt;/span&gt; ' + discount.pct + '%';
    } else {
      pct.textContent = '0%';
    }
  }

  /* Результат-total */
  var total = document.getElementById('resultTotal');
  if (total){
    if (discount.pct &gt; 0) total.classList.add('discount-active');
    else total.classList.remove('discount-active');
  }

  /* Заполняем значения sticky-бара (показ/скрытие — в updateStickyBar) */
  var bw = document.getElementById('barWeight');
  if (bw) bw.textContent = fmt(batchWeight) + ' кг';
  var bd = document.getElementById('barDiscount');
  if (bd) bd.textContent = discount.pct + '%';
  var bp = document.getElementById('barPriceOne');
  if (bp) bp.textContent = fmtInt(priceOne) + ' ₽';
  var bt = document.getElementById('barTotal');
  if (bt) bt.textContent = fmtInt(priceBatch) + ' ₽';
}

/* ==================== STICKY-БАР ==================== */
function updateStickyBar(){
  var bar = document.getElementById('stickyBar');
  if (!bar) return;

  // Показываем только если:
  // 1. Пользователь уже взаимодействовал с формой
  // 2. Не скрывал вручную
  // 3. Есть валидный результат с ненулевым весом партии
  if (!state.userInteracted || state.manuallyHidden || !state.result || state.result.batchWeight &lt;= 0){
    bar.classList.remove('show');
    bar.classList.remove('discount-active');
    return;
  }

  var r = state.result;
  if (r.discountPct &gt; 0) bar.classList.add('discount-active');
  else bar.classList.remove('discount-active');
  bar.classList.add('show');
}

/* ==================== РУЧНОЕ СКРЫТИЕ STICKY-БАРА ==================== */
function hideStickyBar(){
  state.manuallyHidden = true;
  var bar = document.getElementById('stickyBar');
  if (bar) bar.classList.remove('show');
}

/* ==================== СОБЫТИЯ ==================== */
matSelect.addEventListener('change', function(e){
  state.userInteracted = true;
  state.manuallyHidden = false;
  state.material = e.target.value;
  calculate();
});
document.getElementById('qty').addEventListener('input', function(){
  state.userInteracted = true;
  state.manuallyHidden = false;
  calculate();
});
document.getElementById('weightInput').addEventListener('input', function(){
  state.userInteracted = true;
  state.manuallyHidden = false;
  calculate();
});

/* ==================== СБРОС ==================== */
function resetAll() {
  state.userInteracted = false;
  state.manuallyHidden = false;
  matSelect.value = 'sch20';
  state.material = 'sch20';
  document.getElementById('qty').value = 1;
  document.getElementById('weightInput').value = 50;
  document.querySelectorAll('.error').forEach(function(el){ el.classList.remove('error'); });
  calculate();
  document.getElementById('stickyBar').classList.remove('show');
}

/* ==================== ЭКСПОРТ ==================== */
function downloadBlob(blob, filename) {
  var url = URL.createObjectURL(blob);
  var a = document.createElement('a');
  a.href = url; a.download = filename;
  document.body.appendChild(a); a.click(); a.remove();
  setTimeout(function(){ URL.revokeObjectURL(url); }, 500);
}
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 buildRows() {
  var r = state.result;
  if (!r) return {header:[], body:[]};
  var header = ['Параметр','Значение'];
  var body = [
    ['Материал', r.material.name],
    ['Группа', r.material.group],
    ['Цена с НДС', r.priceVat + ' ₽/кг'],
    ['Цена без НДС', r.priceNoVat.toFixed(2) + ' ₽/кг'],
    ['Цена с коэф. 16-00-16 (с НДС)', r.priceVatCoef.toFixed(2) + ' ₽/кг'],
    ['Плотность', r.material.density + ' кг/м³'],
    ['Вес одной детали', r.weightOne.toFixed(2) + ' кг'],
    ['Диаметр', r.diameter.toFixed(1) + ' мм'],
    ['Количество', r.qty + ' шт'],
    ['Вес партии', r.batchWeight.toFixed(2) + ' кг'],
    ['Скидка от веса партии', r.discountPct + '%' + (r.discount.label ? ' (' + r.discount.label + ')' : '')],
    ['Цена без скидки (партия)', Math.round(r.priceBatchNoDiscount) + ' ₽'],
    ['Цена за деталь', Math.round(r.priceOne) + ' ₽'],
    ['Цена за партию', Math.round(r.priceBatch) + ' ₽']
  ];
  return {header: header, body: body};
}

function downloadCSV() {
  var res = buildRows();
  if (!res.body.length) return;
  var esc = function(v){ return '"' + String(v).replace(/"/g,'""') + '"'; };
  var csv = [res.header].concat(res.body).map(function(r){ return r.map(esc).join(';'); }).join('\r\n');
  downloadBlob(new Blob(['\uFEFF' + csv], {type:'text/csv;charset=utf-8;'}), 'calc_sharby_' + today() + '.csv');
}
function downloadExcel() {
  var res = buildRows();
  if (!res.body.length) return;
  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" cellspacing="0" cellpadding="4"&gt;&lt;thead style="background:#000;color:#ffd700;"&gt;&lt;tr&gt;' +
    res.header.map(function(h){ return '&lt;th&gt;' + esc(h) + '&lt;/th&gt;'; }).join('') + '&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;' +
    res.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;style&gt;td,th{font-family:Arial;font-size:12px;}&lt;/style&gt;&lt;/head&gt;' +
    '&lt;body&gt;&lt;h2&gt;Расчёт шар-баб и шаров — ' + today() + '&lt;/h2&gt;' +
    '&lt;p&gt;ООО «Арсенал-Деталь» · 8 902 873-36-90&lt;/p&gt;' + table +
    '&lt;p&gt;&lt;i&gt;Точность отливки 16-00-16 · Цены с НДС 22%&lt;/i&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;';
  downloadBlob(new Blob(['\uFEFF' + html], {type:'application/vnd.ms-excel;charset=utf-8;'}), 'calc_sharby_' + today() + '.xls');
}

/* ==================== СТАРТ ==================== */
calculate();
document.getElementById('stickyBar').classList.remove('show');
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-10-14T10:54:36Z</updated>
  <logo>https://pandoraburo.ru/ssl/u/pic/07/26436cc3c611f19d9efcd8c4a10874/-/0c723f71762611f1b3964aaba1665535.jpg</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
