ACADEMIA Boutique Hotels

Chamber hotels located in mansions
In the center of St. Petersburg with a private atmosphere and historical interiors

Hospitality as an art!

Special offers

WHERE TO SPEND NEW YEAR’S EVE IN ST. PETERSBURG

Celebrate New Year in St. Petersburg at the Shuvalov Mansion.

December 31, 2026 | starts at 8:00 PM

Here, New Year begins as a true reception in a historic St. Petersburg mansion.
Instead of an ordinary restaurant party — an intimate evening in the spirit of a high-society salon: the Count’s family, a festive table, live music, dancing and the traditions of the Shuvalov house.

01

Welcome

ELEGANT WELCOME RECEPTION

Sparkling wine and canapés from the very first minutes of the evening

02

Dinner

FESTIVE MULTI-COURSE DINNER

A gastronomic program with signature cocktails and a choice of meat or fish menu

03

Music

LIVE VOCALS AND DJ SETS

Music all night long, from the society reception to New Year’s midnight

04

Festive Program

IN THE BEST TRADITIONS OF A SOCIETY BALL

An interactive program with a host, gifts from the Count and memorable touches throughout the evening

05

The Count’s Family

THE COUNT AND COUNTESS IN ATTENDANCE

The Count and his family join the celebration, creating the atmosphere of a society reception in the Shuvalov house

06

New Year Magic

FATHER FROST AND THE SNOW MAIDEN

At midnight, the beloved heroes of the Russian New Year greet the guests of the mansion

(() => {
  // ================= КОНФИГУРАЦИЯ КОНТЕНТА =================
  const SLIDE_CONTENT = {
    default: {
      title: "WHERE TO SPEND THE MAY HOLIDAYS IN ST. PETERSBURG",
      text: '<p>Spring in St. Petersburg is always unhurried, dreamy and full of inspiration. We invite you to try the Count Breakfasts and to be a guest of honor at a gastronomic dinner in the bar-restaurant.<br/>Enjoy live music and a complimentary cocktail at the party celebrating the opening of the summer terrace at the French Brasserie on May 8.<br/><br/>Choose your ACADEMIA mansion for the May holidays, <a href="/booking/?date=2026-05-01&nights=2&adults=2&children-age=&access-code=&hotel_id=41018 ">book your room on the official website</a> and take part in a prize draw with gifts from ACADEMIA and our partners!<br/><br/>Spend your holidays in the ACADEMIA mansion collection!</p>',
      buttonText: "CHOOSE A ROOM",
      buttonUrl: "/booking/?date=2026-05-01&nights=2&adults=2&children-age=&access-code=&hotel_id=41018",
    },
    1: {
      title: "May prize draw",
      text: '<p>Choose any ACADEMIA mansion for the May holidays, <a href="/booking/?date=2026-05-01&nights=2&adults=2&children-age=&access-code=&hotel_id=41018">book on the official website</a> and take part in a prize draw with gifts from ACADEMIA and our partners!<br/><br/><strong>For higher room categories, the prizes are:</strong><br/>- a visit to ACADEMIA SPA<br/>- an executive transfer<br/>- a welcome set in your room<br/>- breakfast.<br/><br/><strong>For standard room categories, we have prepared gift certificates from our partners:</strong> RXBSHOES, Ruskala Brand, KIRICLAN, Amazing cacao and the Imperial Porcelain Factory.</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 mansions in the heart of St. Petersburg

The ACADEMIA Hotel Collection

ACADEMIA
MANSION SHUVALOFF

★★★★

10 Mokhovaya St.

  • Step back into the 19th century and meet the Count’s family
  • Historic residences with antique furniture
  • Count’s breakfasts
  • ACADEMIA Shuvalov Restaurant
  • ACADEMIA Massage & Spa Recovery Studio
  • Next to the Summer Garden and Mikhailovsky Castle

ACADEMIA
MANSION TEPLOFF

★★★★

61 Galernaya St.

  • An elegant mansion with a private atmosphere
  • Panoramic suites overlooking the rooftops of St. Petersburg
  • Spacious rooms and suites with kitchens
  • A ten-minute walk to Wedding Palace No. 1
  • Close to St. Isaac’s Cathedral and New Holland

ACADEMIA
VASILIEVSKY

★★★★

6, 3rd Line, Vasilievsky Island

  • A club hotel with a vibrant atmosphere on Vasilievsky Island
  • Spacious rooms and suites with kitchens
  • ACADEMIA Brasserie French restaurant with live music on weekends
  • Open-air film screenings
  • Close to University Embankment and Palace Bridge

ACADEMIA
MANSION FONTANKA

★★★★★

163 Fontanka River Embankment

COMING SOON

•  DECEMBER 2026  •

VISIT WEBSITE

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