<?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/zmeeviki-iz-stali-kalkulyator-tcen</id>
  <link href="https://www.pandoraburo.ru/zmeeviki-iz-stali-kalkulyator-tcen.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;
    --line:  #d4af37;
    --gold:  #d4af37;
    --goldB: #f0d060;
    --red:   #e74c3c;
    --green: #2ecc71;
  }
  * { 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;
  }
  ::selection { background: var(--gold); color: #000; }
  .wrap { max-width: 1300px; margin: 0 auto; }

  /* БЕГУЩАЯ СТРОКА */
  .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 40s 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%); } }

  /* ШАПКА */
  header {
    background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
    padding: 30px 25px; text-align: center; margin-bottom: 14px;
  }
  .banner-line {
    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;
  }
  header p { margin: 0; color: var(--gold); font-size: 15px; opacity: .9; }

  /* О ПРОИЗВОДСТВЕ */
  .production-block {
    background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
    padding: 22px; margin-bottom: 14px;
  }
  .production-title {
    color: var(--gold); font-size: 12px; font-weight: 800; letter-spacing: 2px;
    text-transform: uppercase; text-align: center; padding-bottom: 12px;
    margin-bottom: 16px; border-bottom: 1px solid var(--line);
  }
  .production-grid {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
  }
  @media (max-width: 1000px) { .production-grid { grid-template-columns: repeat(2, 1fr); } }
  @media (max-width: 600px) { .production-grid { grid-template-columns: 1fr; } }
  .prod-card {
    background: #0a0a0a; border: 1px solid rgba(212,175,55,.3);
    border-radius: 10px; padding: 16px; text-align: center;
  }
  .prod-icon { font-size: 24px; color: var(--gold); margin-bottom: 8px; }
  .prod-label {
    font-size: 10px; font-weight: 700; letter-spacing: 1px;
    text-transform: uppercase; color: var(--gold); opacity: .7; margin-bottom: 6px;
  }
  .prod-value { font-size: 14px; font-weight: 800; color: var(--goldB); line-height: 1.3; }

  /* КАЛЬКУЛЯТОР */
  .calc-block {
    background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
    padding: 20px; margin-bottom: 14px;
  }
  .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;
  }

  .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-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  @media (max-width: 600px) { .field-row { grid-template-columns: 1fr; } }

  .auto-calc {
    background: rgba(212,175,55,.08); border: 1px dashed var(--gold);
    border-radius: 9px; padding: 12px 14px; margin-bottom: 14px;
    display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
  }
  .auto-item { text-align: center; }
  .auto-label { font-size: 10px; color: var(--gold); opacity: .7; text-transform: uppercase; font-weight: 700; }
  .auto-value { font-size: 18px; font-weight: 800; color: var(--goldB); font-variant-numeric: tabular-nums; }

  /* РЕЗУЛЬТАТ */
  .result-block {
    background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
    padding: 20px; margin-bottom: 14px;
  }
  .result-main {
    text-align: center; padding: 16px 0 20px;
    border-bottom: 1px solid rgba(212,175,55,.3); margin-bottom: 16px;
  }
  .result-main-label {
    font-size: 11px; font-weight: 800; letter-spacing: 2px;
    text-transform: uppercase; color: var(--gold); opacity: .8; margin-bottom: 8px;
  }
  .result-main-value {
    font-size: 42px; font-weight: 800; color: var(--goldB);
    line-height: 1; font-variant-numeric: tabular-nums; margin-bottom: 6px;
  }
  .result-main-unit { font-size: 16px; color: var(--gold); opacity: .8; }
  .result-main-note { font-size: 12px; color: var(--gold); opacity: .7; margin-top: 8px; }

  .result-grid {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 16px;
  }
  @media (max-width: 860px) { .result-grid { grid-template-columns: repeat(2, 1fr); } }
  @media (max-width: 500px) { .result-grid { grid-template-columns: 1fr; } }
  .result-item {
    background: #0a0a0a; border: 1px solid rgba(212,175,55,.3);
    border-radius: 9px; padding: 12px; 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: 18px; font-weight: 800; color: var(--goldB);
    line-height: 1.1; font-variant-numeric: tabular-nums; word-break: break-word;
  }
  .result-value.small { font-size: 15px; }

  /* КНОПКИ */
  .actions { display: flex; gap: 10px; flex-wrap: wrap; }
  .promo-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    padding: 12px 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; flex: 1; min-width: 140px;
  }
  .promo-btn:hover { background: var(--gold); color: #0a0a0a; }
  .promo-btn.primary { background: var(--gold); color: #0a0a0a; }
  .promo-btn.primary:hover { background: var(--goldB); }

  /* СТРУКТУРА ЗАТРАТ */
  .costs-toggle-btn {
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
    width: 100%; padding: 16px 20px;
    background: linear-gradient(135deg, rgba(212,175,55,.12) 0%, rgba(10,10,10,1) 100%);
    border: 1px solid var(--gold); border-radius: 12px; color: var(--goldB);
    font-size: 14px; font-weight: 800; letter-spacing: 1px; text-transform: uppercase;
    cursor: pointer; transition: .25s; font-family: inherit; margin-bottom: 14px;
  }
  .costs-toggle-btn:hover {
    background: linear-gradient(135deg, rgba(212,175,55,.25) 0%, rgba(10,10,10,1) 100%);
    box-shadow: 0 6px 20px rgba(212,175,55,.25);
  }
  .costs-toggle-btn .toggle-arrow { font-size: 20px; transition: transform .4s ease; color: var(--gold); }
  .costs-toggle-btn.open .toggle-arrow { transform: rotate(180deg); }
  .costs-toggle-btn .toggle-text { display: flex; align-items: center; gap: 10px; }

  .costs-block {
    max-height: 0; overflow: hidden; opacity: 0;
    transition: max-height .6s ease, opacity .4s ease, margin-bottom .4s ease; margin-bottom: 0;
  }
  .costs-block.open { max-height: 2000px; opacity: 1; margin-bottom: 14px; }
  .costs-inner {
    background: var(--bg); border: 1px solid var(--gold); border-radius: 12px; padding: 22px;
  }
  .costs-title {
    color: var(--gold); font-size: 12px; font-weight: 800; letter-spacing: 2px;
    text-transform: uppercase; text-align: center; padding-bottom: 12px;
    margin-bottom: 16px; border-bottom: 1px solid var(--line);
  }
  .costs-grid {
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 18px;
  }
  @media (max-width: 860px) { .costs-grid { grid-template-columns: 1fr 1fr; } }
  @media (max-width: 500px) { .costs-grid { grid-template-columns: 1fr; } }
  .cost-item {
    background: #0a0a0a; border: 1px solid rgba(212,175,55,.3); border-radius: 10px;
    padding: 16px 14px; display: flex; align-items: flex-start; gap: 12px;
    opacity: 0; transform: translateY(20px); transition: opacity .5s ease, transform .5s ease;
  }
  .costs-block.open .cost-item { opacity: 1; transform: translateY(0); }
  .costs-block.open .cost-item:nth-child(1) { transition-delay: .05s; }
  .costs-block.open .cost-item:nth-child(2) { transition-delay: .1s; }
  .costs-block.open .cost-item:nth-child(3) { transition-delay: .15s; }
  .costs-block.open .cost-item:nth-child(4) { transition-delay: .2s; }
  .costs-block.open .cost-item:nth-child(5) { transition-delay: .25s; }
  .costs-block.open .cost-item:nth-child(6) { transition-delay: .3s; }
  
  .cost-icon { font-size: 22px; line-height: 1; flex-shrink: 0; filter: drop-shadow(0 0 6px rgba(212,175,55,.5)); }
  .cost-text h4 {
    font-size: 13px; font-weight: 800; color: var(--goldB);
    text-transform: uppercase; letter-spacing: .5px; margin-bottom: 4px;
  }
  .cost-text p { font-size: 12px; color: var(--gold); opacity: .75; line-height: 1.4; }

  /* КОНТАКТЫ */
  .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; }

  /* ПОЛЗУНКИ */
  ::-webkit-scrollbar { width: 14px; height: 14px; }
  ::-webkit-scrollbar-track { background: #050505; border: 1px solid #2a2210; border-radius: 9px; }
  ::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, #ffd700 0%, #ff8c00 50%, #ffd700 100%);
    border: 1px solid #ffd700; border-radius: 9px;
    box-shadow: 0 0 10px rgba(255,215,0,.6);
  }

  @media print {
    body { background: #fff; color: #000; padding: 0; }
    .ticker-block, .promo-btn, .costs-toggle-btn { display: none !important; }
    .calc-block, .result-block, .cta-section, .production-block {
      background: #fff !important; border: 1px solid #999 !important;
    }
    .costs-block { max-height: none !important; opacity: 1 !important; }
    .field input, .field select { background: #fff !important; color: #000 !important; border-color: #999 !important; }
    .result-main-value, .result-value, .prod-value { color: #000 !important; }
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&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;от 95 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;09Г2С (труба) — &lt;b&gt;от 105 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;12Х18Н10Т (нержавейка) — &lt;b&gt;от 380 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Гибка змеевиков с дорном · Холодная деформация&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Срок изготовления партии: 5–12 рабочих дней&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Сталь 20 (труба) — &lt;b&gt;от 95 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;12Х18Н10Т (нержавейка) — &lt;b&gt;от 380 ₽/кг&lt;/b&gt;&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-line"&gt;КАЛЬКУЛЯТОР&lt;/div&gt;
    &lt;h1&gt;Гнутые спиральные змеевики&lt;/h1&gt;
    &lt;p&gt;Расчёт стоимости навивки · Труба круглая · Нержавеющая и углеродистая сталь&lt;/p&gt;
  &lt;/header&gt;

  &lt;div class="production-block"&gt;
    &lt;div class="production-title"&gt;Технология гибки змеевиков&lt;/div&gt;
    &lt;div class="production-grid"&gt;
      &lt;div class="prod-card"&gt;
        &lt;div class="prod-icon"&gt;?&lt;/div&gt;
        &lt;div class="prod-label"&gt;Метод&lt;/div&gt;
        &lt;div class="prod-value"&gt;Холодная гибка с дорном (без заломов)&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="prod-card"&gt;
        &lt;div class="prod-icon"&gt;?&lt;/div&gt;
        &lt;div class="prod-label"&gt;Диаметр трубы&lt;/div&gt;
        &lt;div class="prod-value"&gt;от 6 мм до 108 мм&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="prod-card"&gt;
        &lt;div class="prod-icon"&gt;?&lt;/div&gt;
        &lt;div class="prod-label"&gt;Мин. радиус&lt;/div&gt;
        &lt;div class="prod-value"&gt;от 1.5 × D трубы&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="prod-card"&gt;
        &lt;div class="prod-icon"&gt;⚙️&lt;/div&gt;
        &lt;div class="prod-label"&gt;Точность шага&lt;/div&gt;
        &lt;div class="prod-value"&gt;± 1 мм на виток&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="calc-block"&gt;
    &lt;div class="calc-title"&gt;Параметры змеевика&lt;/div&gt;

    &lt;div class="field"&gt;
      &lt;label&gt;Материал трубы&lt;/label&gt;
      &lt;select id="material"&gt;
        &lt;option value="st20" selected="selected"&gt;Сталь 20 (углеродистая) · ~95 ₽/кг&lt;/option&gt;
        &lt;option value="09g2s"&gt;Сталь 09Г2С (низколегированная) · ~105 ₽/кг&lt;/option&gt;
        &lt;option value="12x18"&gt;Нержавейка 12Х18Н10Т · ~380 ₽/кг&lt;/option&gt;
        &lt;option value="08x18"&gt;Нержавейка 08Х18Н10 · ~360 ₽/кг&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;

    &lt;div class="field-row"&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Наружный диаметр трубы (d), мм&lt;/label&gt;
        &lt;input type="number" id="pipeD" value="20" min="6" max="219" step="1" /&gt;
      &lt;/div&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Толщина стенки (s), мм&lt;/label&gt;
        &lt;input type="number" id="pipeS" value="2" min="0.5" max="16" step="0.1" /&gt;
      &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="coilD" value="100" min="20" max="2000" step="1" /&gt;
        &lt;div style="font-size:10px; color:var(--gold); opacity:0.6; margin-top:4px;"&gt;* Необходим для расчёта длины и сложности&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Количество полных витков (N)&lt;/label&gt;
        &lt;input type="number" id="turns" value="10" min="1" max="1000" step="1" /&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="field"&gt;
      &lt;label&gt;Шаг (расстояние между витками), мм&lt;/label&gt;
      &lt;input type="number" id="pitch" value="25" min="0" max="500" step="1" /&gt;
      &lt;div style="font-size:10px; color:var(--gold); opacity:0.6; margin-top:4px;"&gt;Если 0 — витки прилегают вплотную&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="auto-calc"&gt;
      &lt;div class="auto-item"&gt;
        &lt;div class="auto-label"&gt;Длина развертки трубы&lt;/div&gt;
        &lt;div class="auto-value" id="autoLength"&gt;0 м&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="auto-item"&gt;
        &lt;div class="auto-label"&gt;Расчётный вес заготовки&lt;/div&gt;
        &lt;div class="auto-value" id="autoWeight"&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="result-main"&gt;
      &lt;div class="result-main-label"&gt;Итоговая цена за 1 змеевик (с НДС 20%)&lt;/div&gt;
      &lt;div class="result-main-value" id="rPrice"&gt;0&lt;/div&gt;
      &lt;div class="result-main-unit"&gt;рублей&lt;/div&gt;
      &lt;div class="result-main-note" id="rNote"&gt;—&lt;/div&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="rMatCost"&gt;0 ₽&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="rBendCost"&gt;0 ₽&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="rCost"&gt;0 ₽&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="rMargin"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="actions"&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;? Печать&lt;/button&gt;
      &lt;button class="promo-btn" onclick="resetAll()"&gt;✕ Сброс&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;button class="costs-toggle-btn" id="costsToggle" onclick="toggleCosts()"&gt;
    &lt;span class="toggle-text"&gt;
      &lt;span class="toggle-icon"&gt;?&lt;/span&gt;
      &lt;span&gt;Показать структуру затрат&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="toggle-arrow"&gt;▼&lt;/span&gt;
  &lt;/button&gt;

  &lt;div class="costs-block" id="costsBlock"&gt;
    &lt;div class="costs-inner"&gt;
      &lt;div class="costs-title"&gt;Из чего складывается цена змеевика&lt;/div&gt;
      &lt;div class="costs-grid"&gt;
        &lt;div class="cost-item"&gt;
          &lt;div class="cost-icon"&gt;?&lt;/div&gt;
          &lt;div class="cost-text"&gt;
            &lt;h4&gt;Материал&lt;/h4&gt;
            &lt;p&gt;Стоимость трубы + 5% на технологические отходы (торцевание)&lt;/p&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="cost-item"&gt;
          &lt;div class="cost-icon"&gt;?&lt;/div&gt;
          &lt;div class="cost-text"&gt;
            &lt;h4&gt;Гибка (работа)&lt;/h4&gt;
            &lt;p&gt;Зависит от длины и коэффициента сложности (отношение D змеевика к d трубы)&lt;/p&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="cost-item"&gt;
          &lt;div class="cost-icon"&gt;⚙️&lt;/div&gt;
          &lt;div class="cost-text"&gt;
            &lt;h4&gt;Наладка станка&lt;/h4&gt;
            &lt;p&gt;Фиксированная стоимость переналадки оборудования под новый чертёж&lt;/p&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="cost-item"&gt;
          &lt;div class="cost-icon"&gt;⚡&lt;/div&gt;
          &lt;div class="cost-text"&gt;
            &lt;h4&gt;Электроэнергия и ТО&lt;/h4&gt;
            &lt;p&gt;Амортизация гибочного оборудования, дорнов и оснастки&lt;/p&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="cost-item"&gt;
          &lt;div class="cost-icon"&gt;?&lt;/div&gt;
          &lt;div class="cost-text"&gt;
            &lt;h4&gt;Накладные расходы&lt;/h4&gt;
            &lt;p&gt;ОТК, упаковка, управление производством (20% от прямых затрат)&lt;/p&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="cost-item"&gt;
          &lt;div class="cost-icon"&gt;?&lt;/div&gt;
          &lt;div class="cost-text"&gt;
            &lt;h4&gt;Рентабельность&lt;/h4&gt;
            &lt;p&gt;Плановая прибыль предприятия (25%) и НДС 20%&lt;/p&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="cta-section"&gt;
    &lt;p class="cta-text"&gt;Нестандартный шаг, коническая навивка или особые требования к овальности? Звоните для точного расчёта.&lt;/p&gt;
    &lt;a href="tel:+79920174973" class="cta-button"&gt;8 (992) 017-49-73&lt;/a&gt;
    &lt;p class="manager-info"&gt;Менеджер: Лариса · ООО «Арсенал-Деталь» · bronestali@inbox.ru&lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
/* ==================== ДАННЫЕ ==================== */
const MATERIALS = [
  {key:'st20',   name:'Сталь 20',               price:95,  density:7850},
  {key:'09g2s',  name:'Сталь 09Г2С',            price:105, density:7850},
  {key:'12x18',  name:'Нержавейка 12Х18Н10Т',   price:380, density:7900},
  {key:'08x18',  name:'Нержавейка 08Х18Н10',    price:360, density:7900}
];

/* ==================== УТИЛИТЫ ==================== */
const fmt = n =&gt; (n === null || n === undefined || isNaN(n)) ? '0' : n.toLocaleString('ru-RU', {maximumFractionDigits: 0});
const fmt2 = n =&gt; (n === null || n === undefined || isNaN(n)) ? '0' : n.toLocaleString('ru-RU', {maximumFractionDigits: 2});
const num = id =&gt; { const el = document.getElementById(id); if (!el) return 0; const v = parseFloat(el.value); return isNaN(v) ? 0 : v; };
const getMaterial = key =&gt; MATERIALS.find(m =&gt; m.key === key) || MATERIALS[0];

/* ==================== РАСЧЁТ ==================== */
function calculate() {
  const mat = getMaterial(document.getElementById('material').value);
  const d = num('pipeD');   // Наружный диаметр трубы
  const s = num('pipeS');   // Толщина стенки
  const D_coil = num('coilD'); // Диаметр змеевика (наружный)
  const N = num('turns');   // Количество витков
  const P = num('pitch');   // Шаг

  if (d &lt;= 0 || s &lt;= 0 || D_coil &lt;= 0 || N &lt;= 0) {
    document.getElementById('rPrice').textContent = '0';
    return;
  }

  // 1. Геометрия
  const D_mean = D_coil - d; // Средний диаметр навивки
  // Длина одного витка по теореме Пифагора для развернутой спирали
  const L_turn = Math.sqrt(Math.pow(Math.PI * D_mean, 2) + Math.pow(P, 2));
  const L_total_mm = L_turn * N;
  const L_total_m = L_total_mm / 1000;

  // 2. Вес (формула веса метра трубы: 0.02466 * s * (d - s))
  const weight_per_m = 0.02466 * s * (d - s);
  const total_weight = L_total_m * weight_per_m;
  const weight_with_scrap = total_weight * 1.05; // +5% на торцевание/отходы

  // 3. Стоимость
  const matCost = weight_with_scrap * mat.price;
  
  // Сложность гибки: чем меньше отношение D_coil / d, тем сложнее (нужен дорн, выше риск гофра)
  const ratio = D_coil / d;
  let bendRatePerMeter = 120; // Базовая цена гибки за метр, руб
  if (ratio &lt; 8) bendRatePerMeter = 350;      // Очень сложная
  else if (ratio &lt; 12) bendRatePerMeter = 220; // Средняя сложность
  else if (ratio &lt; 20) bendRatePerMeter = 150; // Легкая
  
  // Увеличиваем цену для толстостенных труб (s/d &gt; 0.1)
  if ((s / d) &gt; 0.1) bendRatePerMeter *= 1.4;

  const bendCost = L_total_m * bendRatePerMeter;
  const setupCost = 2500; // Фиксированная наладка станка на партию (распределяется на 1 шт для базового расчета)

  const directCost = matCost + bendCost + setupCost;
  const overhead = directCost * 0.20; // 20% накладные
  const totalCost = directCost + overhead;
  
  const margin = totalCost * 0.25; // 25% рентабельность
  const priceNoVat = totalCost + margin;
  const priceVat = priceNoVat * 1.20;

  // 4. Вывод
  document.getElementById('autoLength').textContent = fmt2(L_total_m) + ' м';
  document.getElementById('autoWeight').textContent = fmt2(total_weight) + ' кг';
  
  document.getElementById('rPrice').textContent = fmt(priceVat);
  document.getElementById('rMatCost').textContent = fmt(matCost) + ' ₽';
  document.getElementById('rBendCost').textContent = fmt(bendCost + setupCost) + ' ₽';
  document.getElementById('rCost').textContent = fmt(totalCost) + ' ₽';
  document.getElementById('rMargin').textContent = fmt(margin) + ' ₽';
  
  document.getElementById('rNote').textContent = 
    `Сложность: ${ratio &lt; 10 ? 'Высокая (требуется дорн)' : 'Стандартная'} · Материал: ${mat.name}`;

  // Сохраняем для экспорта
  state.result = {
    material: mat.name, pipeD: d, pipeS: s, coilD: D_coil, turns: N, pitch: P,
    length: L_total_m, weight: total_weight, price: priceVat
  };
}

/* ==================== СТРУКТУРА ЗАТРАТ ==================== */
function toggleCosts() {
  const btn = document.getElementById('costsToggle');
  const block = document.getElementById('costsBlock');
  btn.classList.toggle('open');
  block.classList.toggle('open');
}

/* ==================== СОБЫТИЯ ==================== */
document.getElementById('material').addEventListener('change', calculate);
['pipeD', 'pipeS', 'coilD', 'turns', 'pitch'].forEach(id =&gt; {
  document.getElementById(id).addEventListener('input', calculate);
});

/* ==================== СБРОС ==================== */
function resetAll() {
  document.getElementById('material').value = 'st20';
  document.getElementById('pipeD').value = 20;
  document.getElementById('pipeS').value = 2;
  document.getElementById('coilD').value = 100;
  document.getElementById('turns').value = 10;
  document.getElementById('pitch').value = 25;
  calculate();
}

/* ==================== ЭКСПОРТ ==================== */
function downloadBlob(blob, filename) {
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url; a.download = filename;
  document.body.appendChild(a); a.click(); a.remove();
  setTimeout(() =&gt; URL.revokeObjectURL(url), 500);
}
function today() { const d = new Date(), p = n =&gt; String(n).padStart(2,'0'); return `${d.getFullYear()}-${p(d.getMonth()+1)}-${p(d.getDate())}`; }

function downloadCSV() {
  if (!state.result) return;
  const r = state.result;
  const header = ['Параметр','Значение'];
  const body = [
    ['Материал', r.material],
    ['Диаметр трубы', r.pipeD + ' мм'],
    ['Толщина стенки', r.pipeS + ' мм'],
    ['Диаметр змеевика', r.coilD + ' мм'],
    ['Количество витков', r.turns],
    ['Шаг', r.pitch + ' мм'],
    ['Длина развертки', r.length.toFixed(2) + ' м'],
    ['Вес', r.weight.toFixed(2) + ' кг'],
    ['Цена за 1 шт (с НДС)', Math.round(r.price) + ' ₽']
  ];
  const esc = v =&gt; `"${String(v).replace(/"/g,'""')}"`;
  const csv = [header, ...body].map(row =&gt; row.map(esc).join(';')).join('\r\n');
  downloadBlob(new Blob(['\uFEFF' + csv], {type:'text/csv;charset=utf-8;'}), 'zmevik_calc_' + today() + '.csv');
}

function downloadExcel() {
  if (!state.result) return;
  const r = state.result;
  const header = ['Параметр','Значение'];
  const body = [
    ['Материал', r.material], ['Диаметр трубы', r.pipeD + ' мм'],
    ['Толщина стенки', r.pipeS + ' мм'], ['Диаметр змеевика', r.coilD + ' мм'],
    ['Количество витков', r.turns], ['Шаг', r.pitch + ' мм'],
    ['Длина развертки', r.length.toFixed(2) + ' м'], ['Вес', r.weight.toFixed(2) + ' кг'],
    ['Цена за 1 шт (с НДС)', Math.round(r.price) + ' ₽']
  ];
  const esc = v =&gt; String(v ?? '').replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');
  const table = `&lt;table border="1" cellspacing="0" cellpadding="4"&gt;
    &lt;thead style="background:#000;color:#ffd700;"&gt;&lt;tr&gt;${header.map(h=&gt;`&lt;th&gt;${esc(h)}&lt;/th&gt;`).join('')}&lt;/tr&gt;&lt;/thead&gt;
    &lt;tbody&gt;${body.map(row=&gt;`&lt;tr&gt;${row.map(c=&gt;`&lt;td&gt;${esc(c)}&lt;/td&gt;`).join('')}&lt;/tr&gt;`).join('')}&lt;/tbody&gt;&lt;/table&gt;`;
  const 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 (992) 017-49-73&lt;/p&gt;
    ${table}
    &lt;p&gt;&lt;i&gt;Расчёт является предварительным. Точная стоимость зависит от объёма партии и требований к овальности.&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;'}), 'zmevik_calc_' + today() + '.xls');
}

/* ==================== СТАРТ ==================== */
let state = { result: null };
calculate();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-10-12T05:31:23Z</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>
