<?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/lite-metallov-dobavil-shary</id>
  <link href="https://www.pandoraburo.ru/lite-metallov-dobavil-shary.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"&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 120px;
  }
  ::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); }

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

  .shape-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-bottom:16px; }
  .shape-btn { padding:14px 8px; background:var(--bg); border:1px solid var(--line);
    border-radius:9px; cursor:pointer; text-align:center; transition:.15s;
    color:var(--gold); font-family:inherit; }
  .shape-btn:hover { background:rgba(212,175,55,.1); }
  .shape-btn.active { background:var(--gold); color:#0a0a0a; }
  .shape-icon { font-size:22px; display:block; margin-bottom:4px; }
  .shape-name { font-size:11px; font-weight:800; letter-spacing:.5px; text-transform:uppercase; }

  .mode-toggle { display:flex; gap:8px; margin-bottom:16px; }
  .mode-btn { flex:1; padding:10px 14px; background:var(--bg); border:1px solid var(--line);
    border-radius:9px; cursor:pointer; font-size:13px; font-weight:700;
    color:var(--gold); transition:.15s; font-family:inherit; }
  .mode-btn.active { background:var(--gold); color:#0a0a0a; }

  .discount-badge {
    display:inline-block; padding:6px 14px; border-radius:999px;
    background:linear-gradient(135deg,rgba(46,204,113,.2),rgba(46,204,113,.05));
    border:2px solid var(--green); color:var(--green);
    font-size:13px; font-weight:900; letter-spacing:1px;
    text-transform:uppercase; margin-bottom:14px;
    animation:discountPulse 2s ease-in-out infinite;
  }
  @keyframes discountPulse {
    0%,100% { box-shadow:0 0 15px rgba(46,204,113,.4); }
    50% { box-shadow:0 0 30px rgba(46,204,113,.8); }
  }

  .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; }
  .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-value { font-size:40px; font-weight:800; color:var(--goldB);
    line-height:1; font-variant-numeric:tabular-nums; word-break:break-word; }
  .result-total-note { font-size:12px; color:var(--gold); opacity:.7; margin-top:8px; }

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

  ::-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; }
  ::-webkit-scrollbar-thumb:hover { background:linear-gradient(180deg,#ffffff 0%,#ffffcc 20%,#ffd700 40%,#ff8c00 60%,#ffd700 80%,#ffffff 100%);
    box-shadow:0 0 18px rgba(255,215,0,1),0 0 36px rgba(255,140,0,.9),0 0 54px rgba(255,80,0,.6),inset 0 0 12px rgba(255,255,255,.8); }
  @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 120px; }
    header h1 { font-size:20px; letter-spacing:1.5px; }
    header p { font-size:13px; }
    .shape-grid { grid-template-columns:repeat(3,1fr); }
    .shape-icon { font-size:18px; }
    .shape-name { font-size:10px; }
    .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; }
  }

  @media print {
    body { background:#fff; color:#000; padding:0; }
    .ticker-block, .promo-toolbar, .shape-btn, .mode-btn,
    .adb-top-wrap, .ad-strip, .ad-bottom { 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 { background:#fff !important; border:1px solid #999 !important; }
    .calc-title, .result-label, .result-total-label { 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; }
  }
&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;ВЧ40 — &lt;b&gt;480 ₽/кг&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;800 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;ЧХ3 — &lt;b&gt;1 000 ₽/кг&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;Шары 5–1000 кг · Скидки от 5 шт&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;ВЧ40 — &lt;b&gt;480 ₽/кг&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;800 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;ЧХ3 — &lt;b&gt;1 000 ₽/кг&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;Шары 5–1000 кг · Скидки от 5 шт&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;Чугун · Сталь · Бронза · Шары 5–1000 кг · Скидки от количества&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" onclick="resetAll()"&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;div class="shape-grid"&gt;
            &lt;div class="shape-btn active" data-shape="circle"&gt;&lt;span class="shape-icon"&gt;⬤&lt;/span&gt;&lt;span class="shape-name"&gt;Круг&lt;/span&gt;&lt;/div&gt;
            &lt;div class="shape-btn" data-shape="bushing"&gt;&lt;span class="shape-icon"&gt;◎&lt;/span&gt;&lt;span class="shape-name"&gt;Втулка&lt;/span&gt;&lt;/div&gt;
            &lt;div class="shape-btn" data-shape="plate"&gt;&lt;span class="shape-icon"&gt;▬&lt;/span&gt;&lt;span class="shape-name"&gt;Плита&lt;/span&gt;&lt;/div&gt;
            &lt;div class="shape-btn" data-shape="ball"&gt;&lt;span class="shape-icon"&gt;●&lt;/span&gt;&lt;span class="shape-name"&gt;Шар&lt;/span&gt;&lt;/div&gt;
            &lt;div class="shape-btn" data-shape="bar"&gt;&lt;span class="shape-icon"&gt;▭&lt;/span&gt;&lt;span class="shape-name"&gt;Брусок&lt;/span&gt;&lt;/div&gt;
            &lt;div class="shape-btn" data-shape="ball_grind"&gt;&lt;span class="shape-icon"&gt;⚫&lt;/span&gt;&lt;span class="shape-name"&gt;Шар мелющий&lt;/span&gt;&lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="field"&gt;
          &lt;label&gt;Способ расчёта&lt;/label&gt;
          &lt;div class="mode-toggle"&gt;
            &lt;button class="mode-btn active" data-mode="size"&gt;По размерам&lt;/button&gt;
            &lt;button class="mode-btn" data-mode="weight"&gt;По весу&lt;/button&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div&gt;
        &lt;div id="sizeFields"&gt;
          &lt;div class="shape-fields" data-shape="circle"&gt;
            &lt;div class="field"&gt;&lt;label&gt;Диаметр, мм&lt;/label&gt;&lt;input type="number" id="circleD" min="50" max="500" step="1" value="100" /&gt;&lt;div class="field-hint"&gt;от 50 до 500 мм&lt;/div&gt;&lt;/div&gt;
            &lt;div class="field"&gt;&lt;label&gt;Длина, мм&lt;/label&gt;&lt;input type="number" id="circleL" min="100" max="600" step="1" value="200" /&gt;&lt;div class="field-hint"&gt;от 100 до 600 мм&lt;/div&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="shape-fields" data-shape="bushing" style="display:none"&gt;
            &lt;div class="field-row"&gt;
              &lt;div class="field"&gt;&lt;label&gt;Наружный Ø, мм&lt;/label&gt;&lt;input type="number" id="bushD" min="50" max="500" step="1" value="200" /&gt;&lt;/div&gt;
              &lt;div class="field"&gt;&lt;label&gt;Внутренний Ø, мм&lt;/label&gt;&lt;input type="number" id="bushd" min="30" max="450" step="1" value="100" /&gt;&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class="field"&gt;&lt;label&gt;Длина, мм&lt;/label&gt;&lt;input type="number" id="bushL" min="20" max="600" step="1" value="200" /&gt;&lt;div class="field-hint"&gt;от 20 до 600 мм&lt;/div&gt;&lt;/div&gt;
            &lt;div class="field-hint"&gt;мин. толщина стенки 10 мм&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="shape-fields" data-shape="plate" style="display:none"&gt;
            &lt;div class="field"&gt;&lt;label&gt;Толщина, мм&lt;/label&gt;&lt;input type="number" id="plateT" min="30" max="300" step="1" value="50" /&gt;&lt;div class="field-hint"&gt;от 30 до 300 мм&lt;/div&gt;&lt;/div&gt;
            &lt;div class="field-row"&gt;
              &lt;div class="field"&gt;&lt;label&gt;Ширина, мм&lt;/label&gt;&lt;input type="number" id="plateW" min="50" max="500" step="1" value="200" /&gt;&lt;/div&gt;
              &lt;div class="field"&gt;&lt;label&gt;Длина, мм&lt;/label&gt;&lt;input type="number" id="plateL" min="50" max="600" step="1" value="300" /&gt;&lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="shape-fields" data-shape="ball" style="display:none"&gt;
            &lt;div class="field"&gt;&lt;label&gt;Диаметр, мм&lt;/label&gt;&lt;input type="number" id="ballD" min="50" max="500" step="1" value="100" /&gt;&lt;div class="field-hint"&gt;от 50 до 500 мм&lt;/div&gt;&lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="shape-fields" data-shape="bar" style="display:none"&gt;
            &lt;div class="field"&gt;&lt;label&gt;Высота, мм&lt;/label&gt;&lt;input type="number" id="barH" min="30" max="300" step="1" value="50" /&gt;&lt;div class="field-hint"&gt;от 30 до 300 мм&lt;/div&gt;&lt;/div&gt;
            &lt;div class="field-row"&gt;
              &lt;div class="field"&gt;&lt;label&gt;Ширина, мм&lt;/label&gt;&lt;input type="number" id="barW" min="50" max="500" step="1" value="200" /&gt;&lt;/div&gt;
              &lt;div class="field"&gt;&lt;label&gt;Длина, мм&lt;/label&gt;&lt;input type="number" id="barL" min="50" max="600" step="1" value="300" /&gt;&lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;

          &lt;div class="shape-fields" data-shape="ball_grind" style="display:none"&gt;
            &lt;div class="field"&gt;
              &lt;label&gt;Вес одного шара, кг&lt;/label&gt;
              &lt;input type="number" id="grindWeight" min="5" max="1000" step="0.1" value="50" /&gt;
              &lt;div class="field-hint"&gt;от 5 до 1000 кг · диаметр пересчитывается автоматически&lt;/div&gt;
            &lt;/div&gt;
            &lt;div class="auto-calc" style="background:rgba(212,175,55,.08);border:1px dashed var(--gold);border-radius:9px;padding:12px 14px;margin-top:10px;text-align:center;"&gt;
              &lt;div class="auto-label" style="font-size:10px;color:var(--gold);opacity:.7;text-transform:uppercase;font-weight:700;"&gt;Диаметр шара (автоматически)&lt;/div&gt;
              &lt;div class="auto-value" id="grindDiam" style="font-size:22px;font-weight:800;color:var(--goldB);font-variant-numeric:tabular-nums;"&gt;— мм&lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div id="weightFields" style="display:none"&gt;
          &lt;div class="field"&gt;&lt;label&gt;Вес одной детали, кг&lt;/label&gt;&lt;input type="number" id="weightInput" min="0.5" max="700" step="0.1" value="10" /&gt;&lt;div class="field-hint"&gt;от 0,5 до 700 кг&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="1" max="1000" step="1" value="1" /&gt;
        &lt;/div&gt;

        &lt;div class="field" id="discountField" style="display:none"&gt;
          &lt;div class="discount-badge" id="discountBadge"&gt;Скидка 0%&lt;/div&gt;
        &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 small" id="resVolume"&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="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&gt;

    &lt;div class="result-total"&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="sumShape"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Способ расчёта&lt;/td&gt;&lt;td id="sumMode"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Объём одной детали&lt;/td&gt;&lt;td id="sumVolume"&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="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&gt;&lt;td&gt;Минимальная плавка&lt;/td&gt;&lt;td id="sumMinMelt"&gt;—&lt;/td&gt;&lt;/tr&gt;
      &lt;tr&gt;&lt;td&gt;Расчётный вес для оплаты&lt;/td&gt;&lt;td id="sumPayWeight"&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="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, ВЧ40, ЧХ1, ЧХ3, сталь 20Л, 110Г13Л. Шары мелющие 5–1000 кг. Расчёт диаметра по весу. Скидки от количества. Цены с НДС 22%. ООО «Арсенал-Деталь», 8 902 873-36-90.&lt;/p&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, minMelt:100, group:'Чугун'},
  {key:'sch1836',  name:'СЧ18-36',     priceVat:390,  density:7100, minMelt:50,  group:'Чугун'},
  {key:'sch25',    name:'СЧ25',        priceVat:420,  density:7200, minMelt:100, group:'Чугун'},
  {key:'vch40',    name:'ВЧ40',        priceVat:480,  density:7200, minMelt:300, group:'Чугун'},
  {key:'chh16',    name:'ЧХ16',        priceVat:1200, density:7300, minMelt:300, group:'Чугун'},
  {key:'chh3',     name:'ЧХ3',         priceVat:1000, density:7300, minMelt:300, group:'Чугун'},
  {key:'chh1',     name:'ЧХ1',         priceVat:800,  density:7300, minMelt:200, group:'Чугун'},
  {key:'achs1',    name:'АЧС-1',       priceVat:460,  density:7200, minMelt:200, group:'Чугун'},

  // Сталь
  {key:'st110g13l',name:'110Г13Л',     priceVat:520,  density:7820, minMelt:100, group:'Сталь'},
  {key:'st20l',    name:'20Л',         priceVat:360,  density:7820, minMelt:100, group:'Сталь'},
  {key:'st25l',    name:'25Л',         priceVat:480,  density:7820, minMelt:100, group:'Сталь'},
  {key:'st30l',    name:'30Л',         priceVat:500,  density:7820, minMelt:100, group:'Сталь'},

  // Легированная сталь
  {key:'st40hnl',  name:'40ХНЛ',       priceVat:450,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st40hml',  name:'40ХМЛ',       priceVat:470,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st30hml',  name:'30ХМЛ',       priceVat:450,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st35hghfl',name:'35ХГФЛ',      priceVat:320,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st70h2gl', name:'70Х2ГЛ',      priceVat:480,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st60hgl',  name:'60ХГЛ',       priceVat:460,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st50hgl',  name:'50ХГЛ',       priceVat:440,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st35hgl',  name:'35ХГЛ',       priceVat:420,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st25hgl',  name:'25ХГЛ',       priceVat:390,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st30hl',   name:'30ХЛ',        priceVat:380,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st55sl',   name:'55СЛ',        priceVat:480,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st70gl',   name:'70ГЛ',        priceVat:480,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st45gl',   name:'45ГЛ',        priceVat:420,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st30gl',   name:'30ГЛ',        priceVat:390,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st35ngml', name:'35НГМЛ',      priceVat:560,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st35hgsl', name:'35ХГСЛ',      priceVat:490,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st30hnml', name:'30ХНМЛ',      priceVat:490,  density:7830, minMelt:300, group:'Легированная сталь'},
  {key:'st35hml',  name:'35ХМЛ',       priceVat:430,  density:7830, minMelt:300, group:'Легированная сталь'},

  // Бронза
  {key:'bro10f1',  name:'Бронза БрО10Ф1', priceVat:3200, density:8700, minMelt:200, group:'Бронза'},
  {key:'bro10c2',  name:'Бронза БрО10Ц2', priceVat:2800, density:8700, minMelt:200, group:'Бронза'}
];

var SHAPES = {
  circle:'Круг (сигара)', bushing:'Втулка', plate:'Плита',
  ball:'Шар', bar:'Брусок', ball_grind:'Шар мелющий'
};

var COEF_PRECISION = 1.15;
var MIN_WEIGHT = 0.5;
var MAX_WEIGHT = 700;
var MIN_WALL = 10;

/* Скидки от количества */
var DISCOUNTS = [
  {min: 20, pct: 15},
  {min: 10, pct: 10},
  {min: 5,  pct: 5}
];

var state = { material:'sch20', shape:'circle', mode:'size', qty:1 };

/* ==================== ЗАПОЛНЕНИЕ SELECT ==================== */
var matSelect = document.getElementById('material');
var groups = { 'Чугун':[], 'Сталь':[], 'Легированная сталь':[], 'Бронза':[] };
MATERIALS.forEach(function(m){
  if (!groups[m.group]) groups[m.group] = [];
  groups[m.group].push(m);
});
Object.entries(groups).forEach(function(entry){
  var groupName = entry[0], items = entry[1];
  var og = document.createElement('optgroup');
  og.label = groupName;
  items.forEach(function(item){
    var opt = document.createElement('option');
    opt.value = item.key;
    opt.textContent = item.name + ' — ' + item.priceVat + ' ₽/кг (мин. плавка ' + item.minMelt + ' кг)';
    og.appendChild(opt);
  });
  matSelect.appendChild(og);
});

/* ==================== УТИЛИТЫ ==================== */
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 getDiscountPct(qty){
  for (var i=0; i&lt;DISCOUNTS.length; i++){
    if (qty &gt;= DISCOUNTS[i].min) return DISCOUNTS[i].pct;
  }
  return 0;
}

/* ==================== ДИАМЕТР ШАРА ИЗ ВЕСА ==================== */
function weightToDiameter(weightKg, density){
  /* D = 2 * cbrt(3V / 4pi), V = m / 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 calcVolume() {
  var m = 0.001;
  switch (state.shape) {
    case 'circle': { var r = num('circleD')*m/2; return Math.PI * r * r * num('circleL')*m; }
    case 'bushing': { var R = num('bushD')*m/2, r = num('bushd')*m/2; return Math.PI * (R*R - r*r) * num('bushL')*m; }
    case 'plate': return num('plateT')*m * num('plateW')*m * num('plateL')*m;
    case 'ball': { var r = num('ballD')*m/2; return (4/3) * Math.PI * r**3; }
    case 'bar': return num('barH')*m * num('barW')*m * num('barL')*m;
    case 'ball_grind': {
      var w = num('grindWeight');
      var mat = getMaterial(state.material);
      return w / mat.density;
    }
  }
  return 0;
}

/* ==================== ПРОВЕРКИ ==================== */
function validate() {
  var warns = [];
  var checks = {
    circle: [
      {id:'circleD',min:50,max:500,label:'Диаметр'},
      {id:'circleL',min:100,max:600,label:'Длина'}
    ],
    bushing: [
      {id:'bushD',min:50,max:500,label:'Наружный Ø'},
      {id:'bushd',min:30,max:450,label:'Внутренний Ø'},
      {id:'bushL',min:20,max:600,label:'Длина'}
    ],
    plate: [
      {id:'plateT',min:30,max:300,label:'Толщина'},
      {id:'plateW',min:50,max:500,label:'Ширина'},
      {id:'plateL',min:50,max:600,label:'Длина'}
    ],
    ball: [
      {id:'ballD',min:50,max:500,label:'Диаметр'}
    ],
    bar: [
      {id:'barH',min:30,max:300,label:'Высота'},
      {id:'barW',min:50,max:500,label:'Ширина'},
      {id:'barL',min:50,max:600,label:'Длина'}
    ],
    ball_grind: [
      {id:'grindWeight',min:5,max:1000,label:'Вес шара'}
    ]
  };
  if (state.mode === 'size') {
    (checks[state.shape] || []).forEach(function(c){
      var el = document.getElementById(c.id);
      if (!el) return;
      var v = parseFloat(el.value);
      if (isNaN(v) || v &lt; c.min || v &gt; c.max) {
        el.classList.add('error');
        warns.push(c.label + ': от ' + c.min + ' до ' + c.max + (c.id==='grindWeight'?' кг':' мм'));
      } else {
        el.classList.remove('error');
      }
    });
    if (state.shape === 'bushing') {
      var D = num('bushD');
      var d = num('bushd');
      if (d &gt;= D) {
        warns.push('Внутренний Ø должен быть меньше наружного');
        document.getElementById('bushd').classList.add('error');
      } else {
        var wall = (D - d) / 2;
        if (wall &lt; MIN_WALL) {
          warns.push('Мин. толщина стенки втулки — ' + MIN_WALL + ' мм (у вас ' + wall.toFixed(1) + ' мм)');
          document.getElementById('bushD').classList.add('error');
          document.getElementById('bushd').classList.add('error');
        }
      }
    }
  } else {
    var w = num('weightInput');
    if (w &lt; MIN_WEIGHT || w &gt; MAX_WEIGHT) {
      warns.push('Вес детали: от ' + MIN_WEIGHT + ' до ' + MAX_WEIGHT + ' кг');
      document.getElementById('weightInput').classList.add('error');
    } else {
      document.getElementById('weightInput').classList.remove('error');
    }
  }
  return warns;
}

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

  var volume = 0, weightOne = 0, diameter = 0;

  if (state.shape === 'ball_grind') {
    /* Шар мелющий: вес задаётся напрямую, диаметр пересчитывается */
    weightOne = num('grindWeight');
    volume = weightOne / m.density;
    diameter = weightToDiameter(weightOne, m.density);
    document.getElementById('grindDiam').textContent = diameter.toFixed(1) + ' мм';
  } else if (state.mode === 'size') {
    volume = calcVolume();
    weightOne = volume * m.density;
    /* Для обычного шара тоже показываем диаметр */
    if (state.shape === 'ball') diameter = num('ballD');
  } else {
    weightOne = num('weightInput');
    volume = weightOne / m.density;
  }

  if (weightOne &lt; MIN_WEIGHT) warns.push('Минимальный вес детали — ' + MIN_WEIGHT + ' кг');
  if (weightOne &gt; MAX_WEIGHT) warns.push('Максимальный вес детали — ' + MAX_WEIGHT + ' кг');

  var qty = Math.max(1, parseInt(num('qty')) || 1);
  var batchWeight = weightOne * qty;

  /* Базовая цена (без скидки) */
  var priceVat = m.priceVat;
  var priceNoVatVal = priceNoVat(m);
  var priceVatCoef = priceVat * COEF_PRECISION;
  var priceNoVatCoef = priceNoVatVal * COEF_PRECISION;

  /* Скидка от количества */
  var discountPct = getDiscountPct(qty);
  var discountMultiplier = 1 - discountPct / 100;

  var priceOne = weightOne * priceVatCoef * discountMultiplier;
  var minMelt = m.minMelt || 300;
  var payWeight = Math.max(batchWeight, minMelt);
  var priceBatch = payWeight * priceVatCoef * discountMultiplier;

  /* Вывод */
  document.getElementById('resVolume').textContent = volume.toFixed(6);
  document.getElementById('resWeight').textContent = fmt(weightOne);
  document.getElementById('resDiam').textContent = diameter &gt; 0 ? diameter.toFixed(1) : '—';
  document.getElementById('resQty').textContent = qty;
  document.getElementById('resBatchWeight').textContent = fmt(batchWeight);
  document.getElementById('resPriceKg').textContent = fmtInt(priceVatCoef * discountMultiplier);
  document.getElementById('resPriceBatch').textContent = fmtInt(priceBatch) + ' ₽';
  document.getElementById('resPriceBatchNote').textContent = batchWeight &lt; minMelt
    ? 'Оплата за ' + minMelt + ' кг (мин. плавка) · Скидка ' + discountPct + '%'
    : 'Фактический вес: ' + fmt(batchWeight) + ' кг · Скидка ' + discountPct + '%';

  /* Бейдж скидки */
  var discountField = document.getElementById('discountField');
  var discountBadge = document.getElementById('discountBadge');
  if (discountPct &gt; 0) {
    discountField.style.display = 'block';
    discountBadge.textContent = 'Скидка ' + discountPct + '%';
    discountBadge.style.borderColor = '#2ecc71';
    discountBadge.style.color = '#2ecc71';
  } else {
    discountField.style.display = 'none';
  }

  /* 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');
  }

  /* 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('sumShape').textContent = SHAPES[state.shape];
  document.getElementById('sumMode').textContent = state.shape === 'ball_grind' ? 'По весу (авто-диаметр)' : (state.mode === 'size' ? 'По размерам' : 'По весу');
  document.getElementById('sumVolume').textContent = volume.toFixed(6) + ' м³';
  document.getElementById('sumWeightOne').textContent = fmt(weightOne) + ' кг';
  document.getElementById('sumQty').textContent = qty + ' шт';
  document.getElementById('sumBatchWeight').textContent = fmt(batchWeight) + ' кг';
  document.getElementById('sumMinMelt').textContent = minMelt + ' кг';
  document.getElementById('sumPayWeight').textContent = fmt(payWeight) + ' кг';
  document.getElementById('sumDiscount').textContent = discountPct + '%';
  document.getElementById('sumPriceOne').textContent = fmtInt(priceOne) + ' ₽';
  document.getElementById('sumPriceBatch').textContent = fmtInt(priceBatch) + ' ₽';

  state.result = {
    material: m, shape: SHAPES[state.shape],
    mode: state.shape === 'ball_grind' ? 'По весу (авто-диаметр)' : (state.mode === 'size' ? 'По размерам' : 'По весу'),
    volume: volume, weightOne: weightOne, diameter: diameter, qty: qty, batchWeight: batchWeight, payWeight: payWeight,
    priceVat: priceVat, priceNoVat: priceNoVatVal, priceVatCoef: priceVatCoef, priceNoVatCoef: priceNoVatCoef,
    discountPct: discountPct, priceOne: priceOne, priceBatch: priceBatch, minMelt: minMelt
  };
}

/* ==================== ФОРМЫ ==================== */
function setShape(shape) {
  state.shape = shape;
  document.querySelectorAll('.shape-btn').forEach(function(b){ b.classList.toggle('active', b.dataset.shape === shape); });
  document.querySelectorAll('.shape-fields').forEach(function(f){ f.style.display = f.dataset.shape === shape ? 'block' : 'none'; });
  calculate();
}
function setMode(mode) {
  state.mode = mode;
  document.querySelectorAll('.mode-btn').forEach(function(b){ b.classList.toggle('active', b.dataset.mode === mode); });
  document.getElementById('sizeFields').style.display = mode === 'size' ? 'block' : 'none';
  document.getElementById('weightFields').style.display = mode === 'weight' ? 'block' : 'none';
  calculate();
}

/* ==================== СОБЫТИЯ ==================== */
document.querySelectorAll('.shape-btn').forEach(function(btn){ btn.addEventListener('click', function(){ setShape(btn.dataset.shape); }); });
document.querySelectorAll('.mode-btn').forEach(function(btn){ btn.addEventListener('click', function(){ setMode(btn.dataset.mode); }); });
matSelect.addEventListener('change', function(e){ state.material = e.target.value; calculate(); });
document.getElementById('qty').addEventListener('input', calculate);
['circleD','circleL','bushD','bushd','bushL','plateT','plateW','plateL','ballD','barH','barW','barL','weightInput','grindWeight']
  .forEach(function(id){ var el = document.getElementById(id); if (el) el.addEventListener('input', calculate); });

/* ==================== СБРОС ==================== */
function resetAll() {
  matSelect.value = 'sch20';
  state.material = 'sch20';
  setShape('circle');
  setMode('size');
  document.getElementById('qty').value = 1;
  document.getElementById('circleD').value = 100;
  document.getElementById('circleL').value = 200;
  document.getElementById('bushD').value = 200;
  document.getElementById('bushd').value = 100;
  document.getElementById('bushL').value = 200;
  document.getElementById('plateT').value = 50;
  document.getElementById('plateW').value = 200;
  document.getElementById('plateL').value = 300;
  document.getElementById('ballD').value = 100;
  document.getElementById('barH').value = 50;
  document.getElementById('barW').value = 200;
  document.getElementById('barL').value = 300;
  document.getElementById('weightInput').value = 10;
  document.getElementById('grindWeight').value = 50;
  document.querySelectorAll('.error').forEach(function(el){ el.classList.remove('error'); });
  calculate();
}

/* ==================== ЭКСПОРТ ==================== */
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.shape],
    ['Способ расчёта', r.mode],
    ['Объём детали', r.volume.toFixed(6) + ' м³'],
    ['Вес детали', r.weightOne.toFixed(2) + ' кг'],
    ['Диаметр', r.diameter &gt; 0 ? r.diameter.toFixed(1) + ' мм' : '—'],
    ['Количество', r.qty + ' шт'],
    ['Вес партии', r.batchWeight.toFixed(2) + ' кг'],
    ['Минимальная плавка', r.minMelt + ' кг'],
    ['Расчётный вес для оплаты', r.payWeight.toFixed(2) + ' кг'],
    ['Скидка от количества', r.discountPct + '%'],
    ['Цена за деталь', Math.round(r.priceOne) + ' ₽'],
    ['Цена за партию', Math.round(r.priceBatch) + ' ₽']
  ];
  return {header: header, body: body};
}

function downloadCSV() {
  var res = buildRows();
  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_otlivki_' + today() + '.csv');
}
function downloadExcel() {
  var res = buildRows();
  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_otlivki_' + today() + '.xls');
}

/* ==================== СТАРТ ==================== */
calculate();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-10-14T08:12:43Z</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>
