Коллекция особняков ACADEMIA

Камерные отели, расположенные в особняках
в центре Санкт-Петербурга с приватной атмосферой и историческими интерьерами

Гостеприимство как искусство!

Спецпредложения

ГРАФ ШУВАЛОВ ПРИГЛАШАЕТ
НА ДЕНЬ РОЖДЕНИЯ ОСОБНЯКА!

В этот праздничный день дарим особенные подарки для гостей особняка: винное казино в Игорном доме графа Шувалова, мастер-класс по живописи с графиней, приветственную наливку, розыгрыш приятных сюрпризов, десерт в подарок в ресторане
и встречу с графской семьей.

Все мероприятия в этот день бесплатны для гостей особняка,
количество мест ограничено.

Забронируйте номер в ACADEMIA Особняк Шувалова на 26 июля
и разделите праздник с нами!

ВЫБРАТЬ НОМЕР
(() => {
  // ================= КОНФИГУРАЦИЯ КОНТЕНТА =================
  const SLIDE_CONTENT = {
    default: {
      title: "ГДЕ ПРОВЕСТИ МАЙСКИЕ ВЫХОДНЫЕ В САНКТ-ПЕТЕРБУРГЕ",
      text: '<p>Весна в Петербурге всегда нетороплива, мечтательна и наполнена вдохновением. Приглашаем вас попробовать Графские завтраки, стать званым гостем на гастрономическом ужине в баре-ресторане.<br/>Послушать живую музыку и получить коктейль в подарок на вечеринке в честь открытия летней террасы во французской Брассери 8 мая.<br/><br/>Выбирайте свой особняк ACADEMIA для ваших майских выходных, <a href="/booking/?date=2026-05-01&nights=2&adults=2&children-age=&access-code=&hotel_id=41018 ">бронируйте ваш номер на официальном сайте</a> и участвуйте в розыгрыше приятных подарков от ACADEMIA и наших партнеров!<br/><br/>Проведите свои выходные в коллекции особняков ACADEMIA!</p>',
      buttonText: "ВЫБРАТЬ НОМЕР",
      buttonUrl: "/booking/?date=2026-05-01&nights=2&adults=2&children-age=&access-code=&hotel_id=41018",
    },
    1: {
      title: "Майский розыгрыш подарков",
      text: '<p>Выбирайте любой из особняков ACADEMIA для ваших майских выходных, <a href="/booking/?date=2026-05-01&nights=2&adults=2&children-age=&access-code=&hotel_id=41018">бронируйте на официальном сайте</a> и участвуйте в розыгрыше приятных подарков от ACADEMIA и наших партнеров!<br/><br/><strong>Для номеров высоких категорий будут разыграны:</strong><br/>- визит в ACADEMIA СПА<br/>- представительский трансфер<br/>- приветственный сет в номер<br/>- завтрак.<br/><br/><strong>Для стандартных категорий номеров мы подготовили подарочные сертификаты от наших партнеров:</strong> RXBSHOES, Ruskala Brand, KIRICLAN, Amazing cacao и Императорского фарфорового завода.</p>',
    },
  };

  // ================= СЕЛЕКТОРЫ =================
  const SELECTORS = {
    slider: ".brxe-slider", // Контейнер слайдера
    slide: ".swiper-slide", // Слайды
    activeSlide: ".swiper-slide-active", // Активный слайд
    header: "#sliderHeader",
    text: "#sliderText",
    button: "#sliderBtn",
  };

  // ================= СОСТОЯНИЕ =================
  const currentContent = {
    title: null,
    text: null,
    buttonText: null,
    buttonUrl: null,
  };

  // ================= ОБНОВЛЕНИЕ КОНТЕНТА =================
  function updateContent(slideIndex) {
    const els = {
      header: document.querySelector(SELECTORS.header),
      text: document.querySelector(SELECTORS.text),
      button: document.querySelector(SELECTORS.button),
    };

    if (!els.button) return; // Если нет кнопки - выходим

    const slideConfig = SLIDE_CONTENT[slideIndex] || {};
    const def = SLIDE_CONTENT.default;

    // Формируем новое состояние (с fallback на default)
    const newContent = {
      title: slideConfig.title !== undefined ? slideConfig.title : def.title,
      text: slideConfig.text !== undefined ? slideConfig.text : def.text,
      buttonText:
        slideConfig.buttonText !== undefined
          ? slideConfig.buttonText
          : def.buttonText,
      buttonUrl:
        slideConfig.buttonUrl !== undefined
          ? slideConfig.buttonUrl
          : def.buttonUrl,
    };

    // Обновляем только изменившиеся поля
    if (newContent.title !== currentContent.title && els.header) {
      els.header.textContent = newContent.title;
      currentContent.title = newContent.title;
    }

    if (newContent.text !== currentContent.text && els.text) {
      els.text.innerHTML = newContent.text; // innerHTML для поддержки HTML тегов
      currentContent.text = newContent.text;
    }

    if (newContent.buttonText !== currentContent.buttonText) {
      els.button.textContent = newContent.buttonText;
      currentContent.buttonText = newContent.buttonText;
    }

    if (newContent.buttonUrl !== currentContent.buttonUrl) {
      els.button.href = newContent.buttonUrl;
      currentContent.buttonUrl = newContent.buttonUrl;
    }
  }

  // ================= ПОЛУЧЕНИЕ ИНДЕКСА АКТИВНОГО СЛАЙДА =================
  function getActiveSlideIndex() {
    const activeSlide = document.querySelector(SELECTORS.activeSlide);
    if (!activeSlide) return 0;

    // Пробуем получить индекс из разных атрибутов
    const index =
      activeSlide.getAttribute("data-swiper-slide-index") ||
      activeSlide.getAttribute("data-brx-swiper-index") ||
      0;

    return parseInt(index, 10);
  }

  // ================= ИНИЦИАЛИЗАЦИЯ =================
  function init() {
    const slider = document.querySelector(SELECTORS.slider);
    if (!slider) {
      setTimeout(init, 300); // Повторяем если слайдер еще не загружен
      return;
    }

    // Начальное обновление
    const initialIndex = getActiveSlideIndex();
    updateContent(initialIndex);

    // Способ 1: Используем события Swiper (если доступен)
    if (typeof Swiper !== "undefined") {
      const swiperInstance = slider.swiper;
      if (swiperInstance) {
        swiperInstance.on("slideChange", function () {
          updateContent(this.activeIndex);
        });
      }
    }

    // Способ 2: MutationObserver (универсальный, работает всегда)
    const observer = new MutationObserver((mutations) => {
      mutations.forEach((mutation) => {
        if (
          mutation.type === "attributes" &&
          mutation.attributeName === "class" &&
          mutation.target.classList.contains("swiper-slide")
        ) {
          // Проверяем, появился ли класс swiper-slide-active
          if (mutation.target.classList.contains("swiper-slide-active")) {
            const index = getActiveSlideIndex();
            updateContent(index);
          }
        }
      });
    });

    // Наблюдаем за всеми слайдами
    const slides = document.querySelectorAll(SELECTORS.slide);
    slides.forEach((slide) => {
      observer.observe(slide, { attributes: true, attributeFilter: ["class"] });
    });

    // Также наблюдаем за добавлением новых слайдов (для динамических слайдеров)
    const wrapper = slider.querySelector(".swiper-wrapper");
    if (wrapper) {
      const wrapperObserver = new MutationObserver(() => {
        const newSlides = wrapper.querySelectorAll(SELECTORS.slide);
        newSlides.forEach((slide) => {
          observer.observe(slide, {
            attributes: true,
            attributeFilter: ["class"],
          });
        });
      });

      wrapperObserver.observe(wrapper, { childList: true });
    }
  }

  // ================= ЗАПУСК =================
  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", init);
  } else {
    init();
  }
})();

Особняки с историей в центре Петербурга

Коллекция отелей ACADEMIA

ACADEMIA
Особняк Шувалова

ул. Моховая, д. 10

Изысканный отель в особняке XIX века
с богатой историей в центре Петербурга

  • Объект культурного наследия в историческом центре
  • Уникальные исторические резиденции
  • Подлинные детали в интерьере и предметы антиквариата
  • Консьерж-сервис
  • Представительский трансфер
  • Бар-ресторан Академиа Шувалова
  • ACADEMIA СПА
  • Атмосфера впечатлений
  • Фены Dyson в Исторических резиденциях
  • Рады вашему питомцу
  • Объект культурного наследия в историческом центре
  • Уникальные исторические резиденции
  • Подлинные детали в интерьере и предметы антиквариата
  • Консьерж-сервис
  • Представительский трансфер
  • Бар-ресторан Академиа Шувалова
  • ACADEMIA СПА
  • Атмосфера впечатлений
  • Фены Dyson в Исторических резиденциях
  • Рады вашему питомцу

ACADEMIA
Особняк Теплова

ул. Галерная, д. 61

Клубный отель-особняк
с приватной атмосферой, рядом с Английской набережной и Адмиралтейством

  • Объект культурного наследия на Галерной улице
  • Атмосфера неспешного и уединенного отдыха
  • Элегантный отель в особняке Теплова
  • Панорамный сьюты
  • Приветственное угощение при заселении
  • Изысканные интерьеры в Екатерининском классицизме
  • Служба заботы ACADEMIA
  • Просторные номера и сьюты с кухнями
  • Представительский трансфер
  • Рады вашему питомцу
  • Объект культурного наследия на Галерной улице
  • Атмосфера неспешного и уединенного отдыха
  • Элегантный отель в особняке Теплова
  • Панорамный сьюты
  • Приветственное угощение при заселении
  • Изысканные интерьеры в Екатерининском классицизме
  • Служба заботы ACADEMIA
  • Просторные номера и сьюты с кухнями
  • Представительский трансфер
  • Рады вашему питомцу

ACADEMIA
Васильевский

3-я линия В.О., д. 6

Классический отель
в тихом центре Петербурга на Васильевском острове

  • Отель с дизайнерским интерьером рядом с Дворцовой набережной
  • Просторные номера и люксы с кухнями
  • Элегантные ванны на ножках у окна
  • Номера для гостей с ограниченными возможностями
  • Служба заботы ACADEMIA
  • Приветственное угощение при заселении
  • Представительский трансфер
  • Французский ресторан Brasserie by ACADEMIA
  • Рады вашему питомцу
  • Отель с дизайнерским интерьером рядом с Дворцовой набережной
  • Просторные номера и люксы с кухнями
  • Элегантные ванны на ножках у окна
  • Номера для гостей с ограниченными возможностями
  • Служба заботы ACADEMIA
  • Приветственное угощение при заселении
  • Представительский трансфер
  • Французский ресторан Brasserie by ACADEMIA
  • Рады вашему питомцу

Сервис, который становится главой вашей истории

Каждый момент вашего пребывания — это маленькая история, наполненная вниманием, уютом и заботой.

В ACADEMIA гостеприимство становится частью вашей истории. Мы знаем, что путешествие — это не только дорога, но и эмоции, которые остаются с вами надолго.

контакты

Круглосуточный отдел бронирования

ЗАБРОНИРОВАТЬ

РОЗЫГРЫШ БИЛЕТА

в Михайловский театр
на легендарный балет «ЩЕЛКУНЧИК»

Забронировать стол:

Стоимость билета на персону до 31.11.2025: от 30 000 ₽