ACADEMIA Boutique Hotels

historic secluded mansions, unique in their location, design, and atmosphere

Hospitality as an art!

Special offers

WE INVITE YOU TO OPEN‑AIR FILM SCREENINGS

We're watching movies all summer long in a cozy courtyard on Vasilievsky Island!

Relax at the ACADEMIA Vasilievsky Hotel and watch great European cinema in the open air during your stay.

Film screenings are held on weekends. Popcorn is included, and in addition to the screening, you can order drinks and snacks from the Brasserie concept chef from the short menu.

Spend a wonderful evening in St. Petersburg with a French flair!

CHOOSE A ROOM
(() => {
  // ================= КОНФИГУРАЦИЯ КОНТЕНТА =================
  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();
  }
})();

Historic city mansions

ACADEMIA Boutique Hotels

ACADEMIA
Mansion Shuvaloff

st. Mokhovaya, 10

Boutique hotel in a 19th-century mansion
An authentic boutique hotel in a 19th-century mansion in the heart of historic St. Petersburg

  • Cultural heritage site in the historic center
  • Unique historic residence
  • Authentic interior details and antiques
  • Concierge service
  • Executive shuttle service
  • ACADEMIA Bar Shuvaloff
  • ACADEMIA SPA
  • An atmosphere of experiences
  • Dyson hair dryers in Historical Residences
  • Your pet is welcome
  • Cultural heritage site in the historic center
  • Unique historic residence
  • Authentic interior details and antiques
  • Concierge service
  • Executive shuttle service
  • ACADEMIA Bar Shuvaloff
  • ACADEMIA SPA
  • An atmosphere of experiences
  • Dyson hair dryers in Historical Residences
  • Your pet is welcome

ACADEMIA
Mansion Teploff

st. Galernaya, 61

Classic city hotel
in the Teplov mansion, near the English Embankment and the Admiralty

  • Atmospheric hotel in the Teplov mansion
  • Panoramic suites
  • Welcome – refreshments upon check-in
  • Mansion near the English Embankment and the Admiralty
  • Interior design in the style of Catherine’s classicism
  • ACADEMIA care service
  • Spacious rooms and suites with equipped kitchens
  • Air conditioning in every room
  • Pet-friendly
  • Branded VIP transfer
  • Atmospheric hotel in the Teplov mansion
  • Panoramic suites
  • Welcome – refreshments upon check-in
  • Mansion near the English Embankment and the Admiralty
  • Interior design in the style of Catherine’s classicism
  • ACADEMIA care service
  • Spacious rooms and suites with equipped kitchens
  • Air conditioning in every room
  • Pet-friendly
  • Branded VIP transfer

ACADEMIA
Vasilevsky

3rd line V.O., 6

Classic city hotel
in the center of St. Petersburg, near the Palace Embankment of the Neva River

  • Hotel near the Palace Embankment
  • Spacious rooms and suites with elegant design
  • Refined luxury – clawfoot bathtub by the window
  • Fully equipped kitchens
  • Rooms for guests with disabilities
  • Pet-friendly
  • Exclusive VIP transfer
  • Welcome treat upon check-in
  • ACADEMIA concierge service
  • French restaurant BRASSERIE by ACADEMIA
  • Hotel near the Palace Embankment
  • Spacious rooms and suites with elegant design
  • Refined luxury – clawfoot bathtub by the window
  • Fully equipped kitchens
  • Rooms for guests with disabilities
  • Pet-friendly
  • Exclusive VIP transfer
  • Welcome treat upon check-in
  • ACADEMIA concierge service
  • French restaurant BRASSERIE by ACADEMIA

The service that becomes the head of your story

Every moment of your stay is a little story filled with attention, comfort, and care.

At ACADEMIA, hospitality becomes part of your story. We know that traveling is not only about the journey, but also about the emotions that stay with you for a long time.

Contacts

24-hour reservations department

BOOK ONLINE