[removeprofile]
[html]<style>
  .calculator {
    max-width: 660px;
    margin: 0 auto;
  }

  h1 {
    background: url(https://forumstatic.ru/files/001c/9d/fc/28922.png) no-repeat center center;
    border-radius: 2px;
    box-shadow: 0px 0px 0px 1px #42594B, 0px 0px 0px 2px #181D1A;
    padding: 10px;
    margin: 0 0 46px;
  }

  h1 p {
    color: #3B5A4D;
    font-size: 22px;
    font-family: var(--font-accent);
    display: flex;
    justify-content: center;
    align-items: center;
    line-height: 1.4;
    padding: 0;
    font-weight: 700;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    background: linear-gradient(181deg, #3B5A4D 0%, #56A289 100%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    filter: drop-shadow(1px 2px 1px rgba(0, 0, 0, 1));
    text-align: center;
    height: 89px;
  }

  .form-group {
    margin-bottom: 20px;
  }

  select,
  input {
    width: 100%;
    padding: 12px;
    border: 2px solid #d7ccc8;
    border-radius: 8px;
    font-size: 16px;
    background: #fafafa;
    box-sizing: border-box;
  }

  .school-info {
    margin-top: 15px;
    margin-bottom: 15px;
    background: rgba(0, 0, 0, .05);
    border: 1px solid #969696;
    padding: 15px 25px;
    border-radius: 0 10px 10px;
  }

  .early-option input {
    width: 10px;
    height: 10px;
    margin: 0 10px 2px 0;
  }

  .stage {
    margin: 15px 0;
    text-align: left;
    background: rgba(0, 0, 0, .05);
    border: 1px solid #969696;
    padding: 15px 25px;
    border-radius: 0 10px 10px;
  }

  .stage-title {
    margin-bottom: 8px;
    text-transform: uppercase;
    font-size: 1.06em;
    font-weight: 700;
    letter-spacing: 0.06em;
  }

  .stage-dates {
    display: flex;
    justify-content: space-between;
    margin: 10px 0;
    font-size: 18px;
  }

  .stage-desc {
    font-size: 14px;
    color: #666;
    margin-top: 8px;
    padding-top: 8px;
    border-top: 1px solid transparent;
    border-image: linear-gradient(90deg, #969696 0%, rgba(150, 150, 150, 0) 100%);
    border-image-slice: 1;
  }

  .final {
    margin: 30px 40px 0;
    padding: 10px;
    border: 1px solid transparent;
    border-radius: 10px;
    background: url(https://forumstatic.ru/files/001c/9d/fc/28922.png) no-repeat center center / cover padding-box, linear-gradient(270deg, #253836 0%, #4D5A59 50%, #253836 100%) border-box;
    background-clip: padding-box, border-box;
    text-align: center;
    font-size: 20px;
    text-transform: uppercase;
    font-weight: 700;
    color: #52645E;
  }

  .result {
    margin-top: 25px;
  }
</style>

<div class="calculator">
  <h1>
    <p>Калькулятор выпуска из школ магии</p>
  </h1>

  <div class="form-group">
    <label for="school">Выберите школу:</label>
    <select id="school">
      <option value="hogwarts">Хогвартс</option>
      <option value="beauxbatons">Шармбатон</option>
      <option value="durmstrang">Дурмстранг</option>
      <option value="koldovstorets">Колдовстворец</option>
      <option value="ilvermorny">Ильверморни</option>
      <option value="uagadou">Уагаду</option>
      <option value="mahoutokoro">Махотокоро</option>
    </select>
    <div id="schoolDescription" class="school-info"></div>
  </div>

  <div class="form-group">
    <label for="birthYear">Год рождения:</label>
    <input type="number" id="birthYear" min="1800" max="2100" value="1953" placeholder="Введите год рождения">
  </div>

  <div class="form-group">
    <label for="birthMonth">Месяц рождения:</label>
    <select id="birthMonth">
      <option value="1" selected>Январь</option>
      <option value="2">Февраль</option>
      <option value="3">Март</option>
      <option value="4">Апрель</option>
      <option value="5">Май</option>
      <option value="6">Июнь</option>
      <option value="7">Июль</option>
      <option value="8">Август</option>
      <option value="9">Сентябрь</option>
      <option value="10">Октябрь</option>
      <option value="11">Ноябрь</option>
      <option value="12">Декабрь</option>
    </select>
  </div>

  <div id="earlyOptionContainer" class="early-option" style="display: none;">
    <input type="checkbox" id="earlyAdmission">
    <label for="earlyAdmission" style="display: inline; font-weight: normal;">
      Раннее поступление (с 7 лет)
    </label>
  </div>

  <div id="result" class="result"></div>
</div>

<script>
  const schoolRules = {
      hogwarts: {
        name: "Хогвартс",
        description: "Шотландия • Базовый курс (5 лет) + Повышенный курс (2 года)",
        stages: [
          { name: "Базовый курс (OWL)", startAge: 11, duration: 5, endAge: 16, desc: "базовый курс, сдача СОВ (5 лет, 11→16 лет)" },
          { name: "Повышенный курс (NEWT)", startAge: 16, duration: 2, endAge: 18, desc: "повышенный курс, сдача ЖАБА (2 года, 16→18 лет)" }
        ],
        color: "#8B4513"
      },
      beauxbatons: {
        name: "Шармбатон",
        description: "Франция • Подготовительное (3 года) + Основной (6 лет) + Углубленный (2 года)",
        stages: [
          { name: "Подготовительное отделение", startAge: 8, duration: 3, endAge: 11, desc: "подготовительное отделение (3 года, 8→11 лет)" },
          { name: "Основной курс", startAge: 11, duration: 6, endAge: 17, desc: "основной курс (6 лет, 11→17 лет)" },
          { name: "Углубленный курс", startAge: 17, duration: 2, endAge: 19, desc: "углубленный курс (2 года, 17→19 лет)" }
        ],
        color: "#4169E1"
      },
      durmstrang: {
        name: "Дурмстранг",
        description: "Скандинавия • Раннее обучение (3 года) + Базовый (6 лет) + Полный (8 лет)",
        stages: [
          { name: "Раннее обучение", startAge: 7, duration: 3, endAge: 10, desc: "раннее обучение (3 года, 7→10 лет)" },
          { name: "Базовый курс", startAge: 10, duration: 6, endAge: 16, desc: "базовый курс (6 лет, 10→16 лет)" },
          { name: "Полный курс", startAge: 10, duration: 8, endAge: 18, desc: "полный курс (8 лет, 10→18 лет)" }
        ],
        color: "#8B0000"
      },
      koldovstorets: {
        name: "Колдовстворец",
        description: "Россия • Младшая (4 года) + Средняя (5 лет) + Старшая школа (3 года)",
        stages: [
          { name: "Младшая школа", startAge: 7, duration: 4, endAge: 10, desc: "младшая школа (без факультетов, 4 года, 7→10 лет)" },
          { name: "Средняя школа", startAge: 11, duration: 5, endAge: 15, desc: "средняя школа (5 лет, 11→15 лет)" },
          { name: "Старшая школа", startAge: 16, duration: 3, endAge: 18, desc: "старшая школа (3 года, 16→18 лет)" }
        ],
        color: "#B22222"
      },
      ilvermorny: {
        name: "Ильверморни",
        description: "США • Базовый курс (5 лет) + Полный курс (2 года)",
        stages: [
          { name: "Базовый курс", startAge: 11, duration: 5, endAge: 16, desc: "базовый курс (5 лет, 11→16 лет)" },
          { name: "Полный курс", startAge: 16, duration: 2, endAge: 18, desc: "полный курс (2 года, 16→18 лет)" }
        ],
        color: "#228B22"
      },
      uagadou: {
        name: "Уагаду",
        description: "Африка • Единый курс (8 лет)",
        stages: [
          { name: "Полный курс", startAge: 10, duration: 8, endAge: 18, desc: "полное обучение (8 лет, 10→18 лет)" }
        ],
        color: "#DAA520"
      },
      mahoutokoro: {
        name: "Махотокоро",
        description: "Япония • Подготовительная школа (4 года) + Полный курс (7 лет) + Магическая степень (3 года)",
        stages: [
          { name: "Подготовительная школа", startAge: 7, duration: 4, endAge: 11, desc: "подготовительная школа (4 года, 7→11 лет)" },
          { name: "Полный курс", startAge: 11, duration: 7, endAge: 18, desc: "полный курс (7 лет, 11→18 лет)" },
          { name: "Магическая ученая степень", startAge: 18, duration: 3, endAge: 21, desc: "ученая степень (3 года, 18→21 год)" }
        ],
        japaneseSchoolYear: true,
        color: "#9932CC"
      }
    };

    function calculateGraduation() {
      const schoolSelect = document.getElementById('school');
      const birthYearInput = document.getElementById('birthYear');
      const birthMonthSelect = document.getElementById('birthMonth');
      const earlyAdmission = document.getElementById('earlyAdmission');
      const resultDiv = document.getElementById('result');

      const schoolKey = schoolSelect.value;
      const birthYear = parseInt(birthYearInput.value);
      const birthMonth = parseInt(birthMonthSelect.value);
      const useEarly = earlyAdmission?.checked || false;

      if (!birthYear || birthYear < 1900 || birthYear > 2100) {
        resultDiv.innerHTML = `<strong>❌ Ошибка:</strong> Пожалуйста, введите корректный год рождения (1900-2100)`;
        resultDiv.style.backgroundColor = '#ffebee';
        resultDiv.style.borderColor = '#f44336';
        resultDiv.style.color = '#c62828';
        return;
      }

      try {
        const rules = schoolRules[schoolKey];
        let allStages = [];

        // Специальная обработка для разных школ
        if (schoolKey === 'beauxbatons') {
          // Подготовительное отделение (8→11 лет)
          const prepStage = rules.stages[0];
          const prepAdmission = calculateAdmissionYear(birthYear, birthMonth, prepStage.startAge, rules.japaneseSchoolYear);
          const prepGraduation = prepAdmission + prepStage.duration;

          allStages.push({
            name: prepStage.name,
            admission: prepAdmission,
            graduation: prepGraduation,
            desc: prepStage.desc
          });

          // Основной курс (11→17 лет)
          const mainStage = rules.stages[1];
          const mainAdmission = prepGraduation;
          const mainGraduation = mainAdmission + mainStage.duration;

          allStages.push({
            name: mainStage.name,
            admission: mainAdmission,
            graduation: mainGraduation,
            desc: mainStage.desc
          });

          // Углубленный курс (17→19 лет)
          const advancedStage = rules.stages[2];
          const advancedAdmission = mainGraduation;
          const advancedGraduation = advancedAdmission + advancedStage.duration;

          allStages.push({
            name: advancedStage.name,
            admission: advancedAdmission,
            graduation: advancedGraduation,
            desc: advancedStage.desc
          });

        } else if (schoolKey === 'durmstrang') {
          if (useEarly) {
            // Раннее обучение (7→10 лет)
            const earlyStage = rules.stages[0];
            const earlyAdmissionYear = calculateAdmissionYear(birthYear, birthMonth, earlyStage.startAge, rules.japaneseSchoolYear);
            const earlyGraduationYear = earlyAdmissionYear + earlyStage.duration;

            allStages.push({
              name: earlyStage.name,
              admission: earlyAdmissionYear,
              graduation: earlyGraduationYear,
              desc: earlyStage.desc
            });

            // Базовый курс (10→16 лет)
            const baseStage = rules.stages[1];
            const baseAdmissionYear = earlyGraduationYear;
            const baseGraduationYear = baseAdmissionYear + baseStage.duration;

            allStages.push({
              name: baseStage.name,
              admission: baseAdmissionYear,
              graduation: baseGraduationYear,
              desc: baseStage.desc
            });

            // Полный курс (до 18 лет)
            const fullStage = rules.stages[2];
            const fullAdmissionYear = baseGraduationYear;
            const fullGraduationYear = fullAdmissionYear + (fullStage.duration - baseStage.duration);

            allStages.push({
              name: fullStage.name,
              admission: fullAdmissionYear,
              graduation: fullGraduationYear,
              desc: fullStage.desc
            });
          } else {
            // Базовый курс (10→16 лет)
            const baseStage = rules.stages[1];
            const baseAdmissionYear = calculateAdmissionYear(birthYear, birthMonth, baseStage.startAge, rules.japaneseSchoolYear);
            const baseGraduationYear = baseAdmissionYear + baseStage.duration;

            allStages.push({
              name: baseStage.name,
              admission: baseAdmissionYear,
              graduation: baseGraduationYear,
              desc: baseStage.desc
            });

            // Полный курс (до 18 лет)
            const fullStage = rules.stages[2];
            const fullAdmissionYear = baseGraduationYear;
            const fullGraduationYear = fullAdmissionYear + (fullStage.duration - baseStage.duration);

            allStages.push({
              name: fullStage.name,
              admission: fullAdmissionYear,
              graduation: fullGraduationYear,
              desc: fullStage.desc
            });
          }

        } else if (schoolKey === 'hogwarts') {
          // Базовый курс (OWL)
          const owlStage = rules.stages[0];
          const owlAdmission = calculateAdmissionYear(birthYear, birthMonth, owlStage.startAge, rules.japaneseSchoolYear);
          const owlGraduation = owlAdmission + owlStage.duration;

          allStages.push({
            name: owlStage.name,
            admission: owlAdmission,
            graduation: owlGraduation,
            desc: owlStage.desc
          });

          // Повышенный курс (NEWT)
          const newtStage = rules.stages[1];
          const newtAdmission = owlGraduation;
          const newtGraduation = newtAdmission + newtStage.duration;

          allStages.push({
            name: newtStage.name,
            admission: newtAdmission,
            graduation: newtGraduation,
            desc: newtStage.desc
          });

        } else if (schoolKey === 'ilvermorny') {
          // Базовый курс (11→16 лет)
          const baseStage = rules.stages[0];
          const baseAdmission = calculateAdmissionYear(birthYear, birthMonth, baseStage.startAge, rules.japaneseSchoolYear);
          const baseGraduation = baseAdmission + baseStage.duration;

          allStages.push({
            name: baseStage.name,
            admission: baseAdmission,
            graduation: baseGraduation,
            desc: baseStage.desc
          });

          // Полный курс (16→18 лет)
          const fullStage = rules.stages[1];
          const fullAdmission = baseGraduation;
          const fullGraduation = fullAdmission + fullStage.duration;

          allStages.push({
            name: fullStage.name,
            admission: fullAdmission,
            graduation: fullGraduation,
            desc: fullStage.desc
          });

        } else if (schoolKey === 'koldovstorets') {
          // Младшая школа (7→10 лет)
          const juniorStage = rules.stages[0];
          const juniorAdmission = calculateAdmissionYear(birthYear, birthMonth, juniorStage.startAge, rules.japaneseSchoolYear);
          const juniorGraduation = juniorAdmission + juniorStage.duration;

          allStages.push({
            name: juniorStage.name,
            admission: juniorAdmission,
            graduation: juniorGraduation,
            desc: juniorStage.desc
          });

          // Средняя школа (11→15 лет)
          const middleStage = rules.stages[1];
          const middleAdmission = juniorGraduation;
          const middleGraduation = middleAdmission + middleStage.duration;

          allStages.push({
            name: middleStage.name,
            admission: middleAdmission,
            graduation: middleGraduation,
            desc: middleStage.desc
          });

          // Старшая школа (16→18 лет)
          const seniorStage = rules.stages[2];
          const seniorAdmission = middleGraduation;
          const seniorGraduation = seniorAdmission + seniorStage.duration;

          allStages.push({
            name: seniorStage.name,
            admission: seniorAdmission,
            graduation: seniorGraduation,
            desc: seniorStage.desc
          });

        } else if (schoolKey === 'mahoutokoro') {
          // Подготовительная школа (7→11 лет)
          const prepStage = rules.stages[0];
          const prepAdmission = calculateAdmissionYear(birthYear, birthMonth, prepStage.startAge, true);
          const prepGraduation = prepAdmission + prepStage.duration;

          allStages.push({
            name: prepStage.name,
            admission: prepAdmission,
            graduation: prepGraduation,
            desc: prepStage.desc
          });

          // Полный курс (11→18 лет)
          const mainStage = rules.stages[1];
          const mainAdmission = prepGraduation;
          const mainGraduation = mainAdmission + mainStage.duration;

          allStages.push({
            name: mainStage.name,
            admission: mainAdmission,
            graduation: mainGraduation,
            desc: mainStage.desc
          });

          // Магическая степень (18→21 год)
          const degreeStage = rules.stages[2];
          const degreeAdmission = mainGraduation;
          const degreeGraduation = degreeAdmission + degreeStage.duration;

          allStages.push({
            name: degreeStage.name,
            admission: degreeAdmission,
            graduation: degreeGraduation,
            desc: degreeStage.desc
          });

        } else {
          // Для школ с одним курсом (Уагаду)
          const stage = rules.stages[0];
          const admissionYear = calculateAdmissionYear(birthYear, birthMonth, stage.startAge, rules.japaneseSchoolYear);
          const graduationYear = admissionYear + stage.duration;

          allStages.push({
            name: stage.name,
            admission: admissionYear,
            graduation: graduationYear,
            desc: stage.desc
          });
        }

        // Формируем HTML
        let html = '';
        allStages.forEach((stage, index) => {
          const stageNames = ['Первый этап', 'Второй этап', 'Третий этап', 'Четвертый этап'];
          html += `
                <div class="stage">
                    <div class="stage-title">${stageNames[index] || 'Следующий этап'}</div>
                    <div class="stage-dates">
                        <span>Поступление: <strong>${stage.admission}</strong></span>
                        <span>Выпуск: <strong>${stage.graduation}</strong></span>
                    </div>
                    <div class="stage-desc">${stage.desc}</div>
                </div>
            `;
        });

        // Итоговый выпуск
        const finalYear = allStages[allStages.length - 1].graduation;
        html += `
            <div class="final">
                Итоговый выпуск: ${finalYear} год
            </div>
        `;

        resultDiv.innerHTML = html;

      } catch (error) {
        resultDiv.innerHTML = `<strong>❌ Ошибка:</strong> ${error.message}`;
      }
    }

  function updateSchoolInfo() {
      const schoolSelect = document.getElementById('school');
      const schoolKey = schoolSelect.value;
      const rules = schoolRules[schoolKey];
      const descriptionDiv = document.getElementById('schoolDescription');
      const earlyContainer = document.getElementById('earlyOptionContainer');

      // Обновляем описание школы
      descriptionDiv.textContent = rules.description;

      // Показываем опцию раннего обучения только для Дурмстранга
      if (schoolKey === 'durmstrang') {
        earlyContainer.style.display = 'block';
      } else {
        earlyContainer.style.display = 'none';
        document.getElementById('earlyAdmission').checked = false;
      }

      calculateGraduation();
    }

    // Функция для расчета года поступления
    function calculateAdmissionYear(birthYear, birthMonth, startAge, isJapaneseSchool) {
      if (isJapaneseSchool) {
        // Японская система: учебный год начинается 1 апреля
        if (birthMonth >= 1 && birthMonth <= 3) {
          return birthYear + startAge;
        } else {
          return birthYear + startAge + 1;
        }
      } else {
        // Стандартная система: учебный год начинается 1 сентября
        if (birthMonth >= 1 && birthMonth <= 8) {
          return birthYear + startAge;
        } else {
          return birthYear + startAge + 1;
        }
      }
    }

    // Обработчики событий
    document.getElementById('school').addEventListener('change', updateSchoolInfo);
    document.getElementById('birthYear').addEventListener('input', calculateGraduation);
    document.getElementById('birthMonth').addEventListener('change', calculateGraduation);
    document.getElementById('earlyAdmission').addEventListener('change', calculateGraduation);

    // Инициализация
    updateSchoolInfo();
</script>[/html]