/* Dance Studio Template - theme.css
   Works with Bootstrap 3.2 + jQuery 1.11
   Brand palette:
   #ff18ff (accent), #679dc6 (primary), #d9534f (danger), #f0ad4e (warning)
*/
:root{
  --brand-accent:#ff18ff;
  --brand-primary:#679dc6;
  --brand-danger:#d9534f;
  --brand-warning:#f0ad4e;

  --bg:#ffffff;
  --surface:#ffffff;
  --text:#1c1f23;
  --muted:#66707a;
  --border:#e6eaef;

  --shadow: 0 5px 15px rgba(16,24,40,.08);
  --radius: 16px;

  /* тени карточек (светлая тема) */
  --card-shadow: 0 2px 5px rgba(16,24,40,.06);
  --card-shadow-hover: 0 4px 8px rgba(16,24,40,.10);

  /* Динамический оффсет под navbar (JS будет обновлять --nav-h) */
  --nav-h: 70px;
  --nav-gap: 12px;
}

/* =========================
   SCROLL (единый источник правды)
   - скроллится html
   - полоса скрыта, но прокрутка работает
   - без "съезда" от модалки
   ========================= */

/* Скролл-контейнер */
html{
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
  scrollbar-gutter: stable;
}

/* Body не делаем скроллером */
body{
  margin: 0;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  color: var(--text);
  background: var(--bg);

  overflow-x: hidden;
  overflow-y: visible;

  /* остальной layout можешь оставлять flex — это не ломает скролл,
     пока html скроллится */
  display: flex;
  flex-direction: column;
  min-height: 100%;
}

/* Скрыть полосу прокрутки, оставив прокрутку */
html, body{
  -ms-overflow-style: none;   /* old Edge/IE */
  scrollbar-width: none;      /* Firefox */
}
html::-webkit-scrollbar,
body::-webkit-scrollbar{
  width: 0;
  height: 0;
}

/* Bootstrap: блокируем прокрутку только когда модалка реально открыта */
body.modal-open{
  overflow: hidden !important;
}

/* Защита: если твой JS добавляет ds-modal-open на html — НЕ убиваем скролл */
html.ds-modal-open{
  overflow: hidden !important;
}


/* Динамический оффсет под navbar (JS будет обновлять --nav-h) */
:root{
  --nav-h: 70px;
  --nav-gap: 12px;
}

.ds-container{
  padding-top: calc(var(--nav-h) + var(--nav-gap));
    flex: 1 0 auto;              /* занимает всё доступное место */
  display: flex;
  flex-direction: column;

  /* чтобы padding-top не делал элемент "выше экрана" */
  box-sizing: border-box;
  min-height: 20vh;
}

/* Чтобы якоря всегда оказывались ниже navbar (полезно и без JS) */
section[id]{
  scroll-margin-top: calc(var(--nav-h) + var(--nav-gap) + 8px);
}


/* скрываем полосу прокрутки, но оставляем прокрутку */
body{
  -ms-overflow-style: none;   /* IE/old Edge */
  scrollbar-width: none;      /* Firefox */
}
body::-webkit-scrollbar{
  width: 0;
  height: 0;
}
html::-webkit-scrollbar{ width:0; height:0; }

html.theme-ready body{
  transition: background 260ms ease, color 260ms ease;
}

/* Prevent "flash" on reload: no transitions until theme is ready */
html:not(.theme-ready) *, html:not(.theme-ready) body{
  transition: none !important;
}

/* Preloader должен сохранять собственный переход до инициализации темы. */
html:not(.theme-ready) .tummy-preloader {
  transition: opacity 120ms cubic-bezier(0.22, 1, 0.36, 1), visibility 0s linear 120ms !important;
}


a{ color: var(--brand-primary); }
a:hover{
  color: var(--brand-accent); 
  outline:none;box-shadow:none;
  text-decoration:none;
  }

.navbar{
  border: 0;
  border-bottom: 1px solid var(--border);
  background: rgba(255,255,255,.85);
  backdrop-filter: blur(6px);
}


/* =========================
   TinyMCE — интеграция под тему сайта
   ========================= */
.ds-review-form-wrap .mce-tinymce,
#ticketMessengerWrap .mce-tinymce{
  border: 1px solid var(--border) !important;
  border-radius: 16px !important;
  overflow: hidden;
  background: var(--surface) !important;
  box-shadow: inset 0 1px 2px rgba(16,24,40,.03);
  transition: border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}

.ds-review-form-wrap .mce-tinymce.mce-focus,
#ticketMessengerWrap .mce-tinymce.mce-focus{
  border-color: rgba(103,157,198,.55) !important;
  box-shadow: 0 0 0 3px rgba(103,157,198,.18), inset 0 1px 2px rgba(16,24,40,.03) !important;
}

.ds-review-form-wrap .mce-panel,
#ticketMessengerWrap .mce-panel,
.ds-review-form-wrap .mce-container-body,
#ticketMessengerWrap .mce-container-body{
  background: transparent !important;
}

.ds-review-form-wrap .mce-toolbar-grp,
#ticketMessengerWrap .mce-toolbar-grp{
  background: linear-gradient(180deg, rgba(255,255,255,.72) 0%, rgba(255,255,255,.96) 100%) !important;
  border-bottom: 1px solid var(--border) !important;
  padding: 8px 8px 6px !important;
}

html.theme-dark .ds-review-form-wrap .mce-toolbar-grp,
html.theme-dark #ticketMessengerWrap .mce-toolbar-grp{
  background: linear-gradient(180deg, rgba(255,255,255,.03) 0%, rgba(255,255,255,.06) 100%) !important;
  border-bottom-color: rgba(255,255,255,.08) !important;
}

.ds-review-form-wrap .mce-btn,
#ticketMessengerWrap .mce-btn,
.ds-review-form-wrap .mce-menubtn,
#ticketMessengerWrap .mce-menubtn{
  background: transparent !important;
  border: 1px solid transparent !important;
  border-radius: 10px !important;
  box-shadow: none !important;
  transition: background .15s ease, border-color .15s ease, box-shadow .15s ease;
}

.ds-review-form-wrap .mce-btn:hover,
#ticketMessengerWrap .mce-btn:hover,
.ds-review-form-wrap .mce-btn:focus,
#ticketMessengerWrap .mce-btn:focus,
.ds-review-form-wrap .mce-menubtn:hover,
#ticketMessengerWrap .mce-menubtn:hover,
.ds-review-form-wrap .mce-menubtn:focus,
#ticketMessengerWrap .mce-menubtn:focus{
  background: rgba(103,157,198,.10) !important;
  border-color: rgba(103,157,198,.24) !important;
}

.ds-review-form-wrap .mce-active,
#ticketMessengerWrap .mce-active{
  background: rgba(103,157,198,.15) !important;
  border-color: rgba(103,157,198,.28) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.18) !important;
}

.ds-review-form-wrap .mce-btn button,
#ticketMessengerWrap .mce-btn button,
.ds-review-form-wrap .mce-ico,
#ticketMessengerWrap .mce-ico,
.ds-review-form-wrap .mce-caret,
#ticketMessengerWrap .mce-caret{
  color: var(--text) !important;
}

html.theme-dark .ds-review-form-wrap .mce-btn button,
html.theme-dark #ticketMessengerWrap .mce-btn button,
html.theme-dark .ds-review-form-wrap .mce-ico,
html.theme-dark #ticketMessengerWrap .mce-ico,
html.theme-dark .ds-review-form-wrap .mce-caret,
html.theme-dark #ticketMessengerWrap .mce-caret{
  color: rgba(255,255,255,.92) !important;
}

.ds-review-form-wrap .mce-edit-area,
#ticketMessengerWrap .mce-edit-area,
.ds-review-form-wrap .mce-edit-area iframe,
#ticketMessengerWrap .mce-edit-area iframe{
  background: transparent !important;
}

.ds-review-form-wrap .mce-statusbar,
#ticketMessengerWrap .mce-statusbar{
  border-top: 1px solid var(--border) !important;
  background: rgba(255,255,255,.72) !important;
}

html.theme-dark .ds-review-form-wrap .mce-statusbar,
html.theme-dark #ticketMessengerWrap .mce-statusbar{
  background: rgba(255,255,255,.04) !important;
  border-top-color: rgba(255,255,255,.08) !important;
}




/* =========================
   TUMMY Preloader (BLOCK ONLY)
   base sizes: 350 (mobile) / 500 (desktop)
   ========================= */
:root {
  --tummy-size-desktop: 500px;
  --tummy-size-mobile: 350px;

  /* NEW: общий масштаб (1 = как сейчас) */
  --tummy-size-scale: 0.7; /*1.2  +20% */
}


/* блокируем взаимодействие, НЕ сбрасывая позицию скролла */
html.tummy-loading {
  overscroll-behavior: none;
}



/* УБРАТЬ position:fixed отсюда полностью */
html.tummy-loading,
body.tummy-loading{
  overflow: hidden !important;
}

body.tummy-loading{
  position: fixed !important;
  width: 100% !important;
  left: 0 !important;
  right: 0 !important;
  /* top задаём из JS: -scrollY */
}


.marg-tab {
  margin-top: 1.5rem;
}

.marg-bottom {
  margin-bottom: 1.5rem;
}


/* прозрачный оверлей, только блокирует */
.tummy-preloader {
  position: fixed;
  inset: 0;
  z-index: 999999;
  background: transparent;   /* не затемняем */
  display: grid;
  place-items: center;
  pointer-events: all;       /* блок кликов */
  opacity: 1;
  visibility: visible;
  transition: opacity 120ms cubic-bezier(0.22, 1, 0.36, 1), visibility 0s linear 120ms;
  will-change: opacity;
}

.tummy-preloader.is-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.tummy-preloader__center {
  position: relative;

  /* NEW: умножаем размеры на scale */
  width:  calc(var(--tummy-size-desktop) * var(--tummy-size-scale));
  height: calc(var(--tummy-size-desktop) * var(--tummy-size-scale));

  display: grid;
  place-items: center;
}

/* canvas выше glass */
.tummy-preloader__canvas {
  position: relative;
  z-index: 2;
  width: 100%;
  height: 100%;
  display: block;
}

/* "замыливание" под надписью (только центральный круг) */
.tummy-preloader__glass {
  position: absolute;
  z-index: 1;
  width: 62%;
  height: 62%;
  border-radius: 50%;

  /* blur фона сайта */
  backdrop-filter: blur(5px);
  -webkit-backdrop-filter: blur(5px);

  /* лёгкая молочная вуаль + тонкий контур */
  background: rgba(255, 255, 255, 0.10);
  border: 1px solid rgba(255, 255, 255, 0.18);

  /* мягкая “подсветка” */
  box-shadow:
    0 0 0 1px rgba(0,0,0,0.04) inset,
    0 14px 40px rgba(0,0,0,0.10);

  pointer-events: none;
}

/* mobile */
@media (max-width: 767px) {
  .tummy-preloader__center {
    width:  calc(var(--tummy-size-mobile) * var(--tummy-size-scale));
    height: calc(var(--tummy-size-mobile) * var(--tummy-size-scale));
  }
}

/* very small screens */
@media (max-width: 380px), (max-height: 520px) {
  .tummy-preloader__center {
    width: min(
      calc(var(--tummy-size-mobile) * var(--tummy-size-scale)),
      calc(100vw - 24px),
      calc(100vh - 24px)
    );
    height: min(
      calc(var(--tummy-size-mobile) * var(--tummy-size-scale)),
      calc(100vw - 24px),
      calc(100vh - 24px)
    );
  }
}

/*//////////// TUMMY Preloader //////////////*/


/* Mobile/touch: remove persistent tap glow/focus artifacts in the navbar */
.navbar a,
.navbar button{
  -webkit-tap-highlight-color: transparent;
}
.navbar .navbar-toggle:focus,
.navbar .navbar-toggle:active{
  outline: none !important;
  box-shadow: none !important;
  background: transparent !important;
}

/* Bootstrap adds a grey background on hover; on touch devices it can look like a "glow".
   We keep the burger button visually neutral in all states. */
.navbar .navbar-toggle:hover{
  outline: none !important;
  box-shadow: none !important;
  background: transparent !important;
}
.navbar .navbar-toggle{
  box-shadow: none !important;
}
.navbar .navbar-brand{ font-weight: 700; letter-spacing: .2px; }
.navbar .navbar-nav>li>a{ font-weight: 600; }


/* HERO lines */
.ds-hero-lines{
  margin-top: 30px;      /* небольшой отступ сверху */
}

.ds-hero-lines .line{
  position: relative;
  margin: 0 0 8px;
  padding-left: 18px;    /* место под “точку” слева */
  opacity: .95;
}

.ds-hero-lines .line:before{
  content: "•";
  position: absolute;
  left: 0;
  top: 0;
  opacity: .7;
}


.ds-hero{
  position: relative;
  border-radius: calc(var(--radius) + 6px);
  overflow: hidden;
  box-shadow: var(--shadow);
  min-height: 380px;
  background: #0c0f14;
  color: #fff;
}
.ds-hero .ds-hero-bg{
  position:absolute; inset:0;
  background: radial-gradient(1200px 400px at 20% 10%, rgba(255,24,255,.45), transparent 55%),
              radial-gradient(900px 400px at 70% 80%, rgba(103,157,198,.55), transparent 60%),
              linear-gradient(135deg, rgba(0,0,0,.55), rgba(0,0,0,.55));
  transform: scale(1.02);
}
.ds-hero .ds-hero-content{
  position: relative;
  padding: 40px 40px;
}
.ds-hero h1{
  font-size: 44px;
  line-height: 1.1;
  margin: 0 0 12px 0;
}
.ds-hero p{
  max-width: 680px;
  font-size: 18px;
  color: rgba(255,255,255,.88);
}
.ds-hero .ds-cta{
  margin-top: 22px;
}


/* мобилка — компактнее и строго симметрично */
@media (max-width: 767px){

  .ds-hero{
    min-height: 0 !important; /* если не хочешь фикс. высоту на мобилке */
  }

  .ds-hero .ds-hero-content{
    padding-top: 28px !important;
    padding-bottom: 22px !important; /* симметрия */
  }

  /* часто "лишний низ" даёт именно последний элемент в колонке */
  .ds-hero .col-md-7,
  .ds-hero .col-md-5{
    margin-bottom: 0 !important;
  }

  .ds-hero h1{
    margin-bottom: 10px !important;
    line-height: 1.12; /* чуть плотнее, меньше "воздуха" */
  }

  .ds-spacer-12{
    height: 8px !important; /* чтобы низ не был больше */
  }
}


.ds-section{
  padding: 56px 0;
}
.ds-section-title{
  margin: 0 0 18px 0;
  font-weight: 800;
  letter-spacing: .2px;
}
.ds-section-sub{
  margin: 0 0 26px 0;
  color: var(--muted);
  max-width: 800px;
}

.ds-card{
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--card-shadow);
  transition: transform 240ms ease, box-shadow 240ms ease, border-color 240ms ease;
  overflow: hidden;
}

.ds-card:hover{
  transform: translateY(-2px);
  box-shadow: var(--card-shadow-hover);
  border-color: rgba(103,157,198,.45);
}

.ds-card .ds-card-body{
  padding: 18px 18px 16px 18px;
}
.ds-badge{
  display:inline-block;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  background: rgba(103,157,198,.14);
  color: var(--brand-primary);
  margin-bottom: 8px;


  width: auto !important;
  flex: 0 0 auto;          /* если родитель flex */
  align-self: flex-start;  /* если родитель flex и растягивает детей */
}
.ds-card h3{
  margin: 2px 0 6px 0;
  font-size: 18px;
  font-weight: 800;
}
.ds-card p{
  margin: 0;
  color: var(--muted);
  font-size: 13px;
  line-height: 1.5;
}

.ds-img{
  width: 100%;
  display:block;
  background: #0c0f14;
}
.ds-img.ph{
  height: 170px;
  background: linear-gradient(120deg, rgba(255,24,255,.25), rgba(103,157,198,.35)),
              radial-gradient(800px 200px at 15% 25%, rgba(255,24,255,.35), transparent 50%),
              radial-gradient(800px 220px at 70% 75%, rgba(103,157,198,.45), transparent 55%),
              #0c0f14;
}

.btn{
  border-radius: 12px;
  transition: transform 200ms ease, filter 200ms ease, background 200ms ease, border-color 200ms ease;
}
.btn:active{ transform: translateY(1px); }
.btn-primary{
  background: var(--brand-primary);
  border-color: var(--brand-primary);
}
.btn-primary:hover, .btn-primary:focus{
  background: #568bb2;
  border-color: #568bb2;
}
.btn-accent{
  background: var(--brand-accent);
  border-color: var(--brand-accent);
  color: #1b0820;
  font-weight: 800;
}
.btn-accent:hover, .btn-accent:focus{
  filter: brightness(.92);
  color: #1b0820;
}

.ds-pill{
  border-radius: 999px;
  padding-left: 14px;
  padding-right: 14px;
}

.form-control{
  border-radius: 12px;
  box-shadow: none;
  border-color: var(--border);
  height: 42px;
}
.form-control:focus{
  border-color: rgba(255,24,255,.55);
  box-shadow: 0 0 0 2px rgba(255,24,255,.15);
}
.has-error .form-control{
  border-color: var(--brand-danger);
  box-shadow: 0 0 0 2px rgba(217,83,79,.10);
}

.alert{
  border-radius: 14px;
  border: 1px solid var(--border);
}
.alert-danger{ border-color: rgba(217,83,79,.35); }
.alert-success{ border-color: rgba(92,184,92,.35); }

.ds-footer{
  border-top: 1px solid var(--border);
  padding: 20px 0;
  color: var(--muted);
  margin-top: auto;
}



/* Cookie notice */
.ds-cookie-notice{
  position: fixed;
  left: 18px;
  bottom: 18px;
  z-index: 1085;
  width: min(380px, calc(100vw - 36px));
  padding: 16px;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--surface);
  color: var(--text);
}
.ds-cookie-notice__text{
  margin: 0 0 12px;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.50;
}
.ds-cookie-notice__text a{
  font-weight: 800;
  text-decoration: underline;
  text-underline-offset: 2px;
}

.ds-cookie-notice.is-hidden{
  display: none !important;
}

.ds-cookie-notice__btn{
  width: 100%;
}


/* =========================================================
   ГАЛЕРЕЯ/КАРУСЕЛЬ
   ========================================================= */
.carousel .item{
  border-radius: var(--radius);
  overflow: hidden;
}
.carousel-indicators li{
  border: 0;
  background: rgba(255,255,255,.40);
}
.carousel-indicators .active{
  background: var(--brand-accent);
}
.carousel-control{
  opacity: .9;
}
.carousel-control:hover{
  opacity: 1;
}

/* Gallery */
.ds-filter{
  margin-bottom: 18px;
}
.ds-filter .btn{
  margin: 0 6px 8px 0;
}
.ds-gallery-tile{
  position: relative;
  border-radius: 14px;
  overflow:hidden;
  border: 1px solid var(--border);
  box-shadow: 0 10px 22px rgba(16,24,40,.06);
  transition: transform 240ms ease, box-shadow 240ms ease, border-color 240ms ease;
}
.ds-gallery-tile:hover{
  transform: translateY(-2px);
  box-shadow: 0 18px 34px rgba(16,24,40,.10);
  border-color: rgba(255,24,255,.28);
}
.ds-gallery-tile img{
  width: 100%;
  height: 210px;
  object-fit: cover;
  display:block;
  background: #0c0f14;
}
.ds-gallery-tile .ds-cap{
  position:absolute;
  left: 0; right: 0; bottom: 0;
  padding: 10px 12px;
  background: linear-gradient(180deg, transparent, rgba(0,0,0,.70));
  color: #fff;
  font-size: 12px;
}

/* =========================================================
   убрать затемнение по краям и сделать
   небольшой круг вокруг стрелок (Bootstrap 3 carousel-control)
   ========================================================= */

/* Убираем градиент/затемнение у контролов (они по умолчанию закрывают пол-экрана) */
.carousel .carousel-control{
  background: transparent !important;
  background-image: none !important;
  filter: none !important;
  text-shadow: none !important;
  opacity: 1 !important;
}
.carousel .carousel-control:hover,
.carousel .carousel-control:focus{
  background: transparent !important;
  opacity: 1 !important;
  outline: none !important;
}

/* Круглая кнопка вокруг стрелки */
.carousel .carousel-control .glyphicon{
  position: absolute !important;
  top: 50% !important;
  transform: translateY(-50%) !important;

  width: 44px;
  height: 44px;
  line-height: 44px;

  display: inline-flex;
  align-items: center;
  justify-content: center;

  font-size: 18px;
  color: #fff;

  border-radius: 999px;
  background: rgba(0,0,0,.22);
  border: 1px solid rgba(var(--ds-accent-rgb, 255, 24, 255), .22);

  box-shadow:
    0 10px 24px rgba(0,0,0,.16),
    0 10px 24px rgba(var(--ds-accent-rgb, 255, 24, 255), .10);

  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);

  margin: 0 !important; /* перебиваем bootstrap-овские отступы */
}

/* Позиционирование кружков */
.carousel .left.carousel-control .glyphicon{ left: 14px !important; }
.carousel .right.carousel-control .glyphicon{ right: 14px !important; }

/* На тёмной теме кружок чуть плотнее, чтобы читался на светлых фото */
html.theme-dark .carousel .carousel-control .glyphicon{
  background: rgba(0,0,0,.30);
  border-color: rgba(var(--ds-accent-rgb, 255, 24, 255), .20);
}




/* Theme toggle */
.ds-theme-toggle{
  cursor: pointer;
  padding: 8px 10px !important;
  border-radius: 12px;
  margin-left: 8px;
}
.ds-theme-toggle i{ margin-right: 6px; }
.ds-theme-toggle:hover{
  background: rgba(103,157,198,.10);
}

/* Small helpers */
.ds-spacer-12{ height: 12px; }
.ds-spacer-24{ height: 24px; }
.ds-spacer-36{ height: 36px; }

/* Responsive */
@media (max-width: 767px){
  .ds-hero .ds-hero-content{ padding: 34px 22px; }
  .ds-hero h1{ font-size: 32px; }
  .ds-hero p{ font-size: 15px; }

  .ds-footer{
    padding: 8px 0;
    font-size: 10px;
  }

  .ds-footer-row{
    text-align: center;
  }

  .ds-footer-left,
  .ds-footer-right{
    text-align: center !important;
  }

  /* уменьшить вертикальные отступы между строками */
  .ds-footer-left{ margin-bottom: 4px; }
  .ds-footer-right small{ display: inline-block; line-height: 1.3; }

  .ds-cookie-notice{
    left: 12px;
    right: 12px;
    bottom: 12px;
    width: auto;
    padding: 14px;
    background: rgba(255,255,255,.98);
    border: 1px solid var(--brand-accent);

  }


}

/* === Utilities to keep HTML чистым (без inline style) === */
.ds-accent{ color: var(--brand-accent) !important; }
.ds-primary{ color: var(--brand-primary) !important; }
.ds-muted{ color: var(--muted) !important; }
.ds-opacity-75{ opacity: .75 !important; }
.ds-m0{ margin: 0 !important; }
.ds-mt0{ margin-top: 0 !important; }
.ds-mb0{ margin-bottom: 0 !important; }
.ds-mb10{ margin-bottom: 10px !important; }
.ds-pt0{ padding-top: 0 !important; }
.ds-ml8{ margin-left: 8px !important; }
.ds-r14{ border-radius: 14px !important; }
.ds-h-auto{ height: auto !important; }
.ds-border-top{ border-top: 1px solid var(--border) !important; }
.ds-btn-compact{ margin-top: 8px !important; padding: 8px 14px !important; }
.ds-mapframe{ border: 0; width: 100%; height: 420px; }
.ds-textarea{ height: auto !important; border-radius: 14px !important; }


/* Mobile: меню на весь экран, без скроллбара во время анимации */
@media (max-width: 767px){
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse{
    max-height: calc(100vh - 60px);
    overflow: hidden;              /* ВАЖНО: пока закрыто/анимируется — без скролла */
    overflow-x: hidden;
    -webkit-overflow-scrolling: touch;
  }

  /* когда меню полностью открыто */
  .navbar-fixed-top .navbar-collapse.in,
  .navbar-fixed-bottom .navbar-collapse.in{
    overflow-y: auto;              /* скроллим только тут */
    overscroll-behavior: contain;

    /* прячем полосу прокрутки, оставляя прокрутку */
    -ms-overflow-style: none;
    scrollbar-width: none;
  }

  .navbar-fixed-top .navbar-collapse.in::-webkit-scrollbar,
  .navbar-fixed-bottom .navbar-collapse.in::-webkit-scrollbar{
    width: 0;
    height: 0;
  }

  /* во время анимации раскрытия/закрытия (Bootstrap добавляет .collapsing) */
  .navbar-fixed-top .navbar-collapse.collapsing,
  .navbar-fixed-bottom .navbar-collapse.collapsing{
    overflow: hidden !important;   /* чтобы не мигал скроллбар */
  }
}



/* ============================================
   MODALS (Bootstrap 3)
   Плавное открытие и закрытие без рывков
   ============================================ */

.modal {
    -webkit-overflow-scrolling: touch;
}

/*
  Важно: Bootstrap завершает hide по transition самой .modal,
  поэтому длительность overlay и dialog должна совпадать.
  Иначе окно успевает исчезнуть раньше, чем доиграет reverse-анимация.
*/
.modal.fade {
    opacity: 0;
    -webkit-transition: opacity 0.22s ease;
    transition: opacity 0.22s ease;
}

.modal.in {
    opacity: 1;
}

.modal .modal-dialog {
    width: calc(100% - 36px);
    max-width: 1040px;
    margin: 18px auto;
    will-change: transform, opacity;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-transform: translate3d(0, 0, 0) scale(1);
    transform: translate3d(0, 0, 0) scale(1);
    opacity: 1;
}

.modal.fade .modal-dialog {
    -webkit-transform: translate3d(0, 18px, 0) scale(0.985);
    transform: translate3d(0, 18px, 0) scale(0.985);
    opacity: 0;
    -webkit-transition:
        -webkit-transform 0.22s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.22s ease;
    transition:
        transform 0.22s cubic-bezier(0.22, 1, 0.36, 1),
        opacity 0.22s ease;
}

.modal.in .modal-dialog {
    -webkit-transform: translate3d(0, 0, 0) scale(1);
    transform: translate3d(0, 0, 0) scale(1);
    opacity: 1;
}


/* чтобы bootstrap >=768px не подставлял фиксированную ширину */
@media (min-width: 768px) {
    .modal .modal-dialog {
        width: calc(100% - 36px);
    }
}

.modal-open .modal {
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}

.modal .modal-content {
    border-radius: calc(var(--radius) + 2px);
    box-shadow: var(--shadow);

    display: flex;
    flex-direction: column;
    max-height: calc(100vh - 36px);

    -webkit-transform: translateZ(0);
    transform: translateZ(0);
}

.modal .modal-header,
.modal .modal-footer {
    flex: 0 0 auto;
}

.modal .modal-body {
    flex: 1 1 auto;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;
}

/* скрываем scrollbar, но скролл оставляем */
.modal .modal-body,
.modal-open .modal {
    -ms-overflow-style: none;
    scrollbar-width: none;
}

.modal .modal-body::-webkit-scrollbar,
.modal-open .modal::-webkit-scrollbar {
    width: 0;
    height: 0;
}

@media (max-width: 767px) {
    .modal .modal-dialog {
        width: calc(100% - 24px);
        margin: 12px auto;
    }

    .modal.fade .modal-dialog {
        -webkit-transform: translate3d(0, 14px, 0) scale(0.985);
        transform: translate3d(0, 14px, 0) scale(0.985);
    }

    .modal.in .modal-dialog {
        -webkit-transform: translate3d(0, 0, 0) scale(1);
        transform: translate3d(0, 0, 0) scale(1);
    }

    .modal .modal-content {
        max-height: calc(100vh - 24px);
    }

    .ds-section-title {
        font-size: 20px;
        line-height: 1.2;
        margin: 0 0 14px 0;
    }

    .ds-section-sub {
        font-size: 14px;
        line-height: 1.6;
        margin: 0 0 18px 0;
    }
}

@media (max-width: 380px) {
    .ds-section-title {
        font-size: 18px;
    }
}

.modal-backdrop {
    background-color: rgba(0, 0, 0, 0.35);
    -webkit-transition: opacity 0.22s ease;
    transition: opacity 0.22s ease;
}


.modal-backdrop.in {
    opacity: 1;
}

@supports ((-webkit-backdrop-filter: blur(2px)) or (backdrop-filter: blur(2px))) {
    .modal-backdrop {
        -webkit-backdrop-filter: blur(2px);
        backdrop-filter: blur(2px);
    }
}

/* iOS/Safari fix */
@supports (height: 100dvh) {
    .modal .modal-content {
        max-height: calc(100dvh - 36px);
    }

    @media (max-width: 767px) {
        .modal .modal-content {
            max-height: calc(100dvh - 24px);
        }
    }
}



/* =========================================================
   RICHTEXT (контент из БД)
   Использование:
   <div class="ds-richtext"><?= blockContent(...) ?></div>
   Влияет ТОЛЬКО на .ds-richtext и его внутренние теги.
   ========================================================= */

/* базовая типографика */
.ds-richtext{
  font-size: 16px;
  line-height: 1.6;
  color: var(--muted);
  overflow-wrap: break-word;
  word-wrap: break-word;
}

/* железобетонно перебиваем шаблонные правила карточек типа .ds-card p { font-size:13px } */
.ds-card .ds-richtext,
.ds-card .ds-richtext p,
.ds-card .ds-richtext li,
.ds-card .ds-richtext a,
.ds-card .ds-richtext span,
.ds-card .ds-richtext div{
  font-size: 16px;
  line-height: 1.6;
}

/* базовые отступы для текста */
.ds-richtext p{
  margin: 0 0 12px 0;
}

/* заголовки внутри контента */
.ds-richtext h1,
.ds-richtext h2,
.ds-richtext h3,
.ds-richtext h4,
.ds-richtext h5,
.ds-richtext h6{
  margin: 18px 0 10px;
  color: var(--text);
  font-weight: 800;
  line-height: 1.25;
}

/* размеры заголовков (можешь подстроить) */
.ds-richtext h1{ font-size: 30px; }
.ds-richtext h2{ font-size: 26px; }
.ds-richtext h3{ font-size: 22px; }
.ds-richtext h4{ font-size: 20px; }
.ds-richtext h5{ font-size: 18px; } /* твой <h5> станет равным базовому размеру */
.ds-richtext h6{ font-size: 16px; }

/* ссылки */
.ds-richtext a{
  color: var(--brand-primary);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.ds-richtext a:hover,
.ds-richtext a:focus{
  color: var(--brand-accent);
  outline:none;box-shadow:none;
  text-decoration:none;
}

/* списки */
.ds-richtext ul,
.ds-richtext ol{
  margin: 0 0 12px 0;
  padding-left: 22px;
}
.ds-richtext li{
  margin: 6px 0;
}

/* разделители */
.ds-richtext hr{
  border: 0;
  border-top: 1px solid var(--border);
  margin: 16px 0;
}

/* цитаты */
.ds-richtext blockquote{
  margin: 12px 0;
  padding: 10px 14px;
  border-left: 4px solid rgba(103,157,198,.45);
  background: rgba(103,157,198,.08);
  color: var(--text);
  border-radius: 12px;
}

/* код */
.ds-richtext code{
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  font-size: 0.95em;
  background: rgba(103,157,198,.10);
  padding: 2px 6px;
  border-radius: 8px;
  color: var(--text);
}
.ds-richtext pre{
  margin: 0 0 12px 0;
  padding: 12px 14px;
  border-radius: 14px;
  border: 1px solid var(--border);
  background: rgba(103,157,198,.06);
  overflow: auto;
}
.ds-richtext pre code{
  background: transparent;
  padding: 0;
  border-radius: 0;
}

/* таблицы (на всякий случай) */
.ds-richtext table{
  width: 100%;
  border-collapse: collapse;
  margin: 0 0 12px 0;
}
.ds-richtext th,
.ds-richtext td{
  border: 1px solid var(--border);
  padding: 10px 10px;
  vertical-align: top;
}
.ds-richtext th{
  background: rgba(103,157,198,.08);
  color: var(--text);
  font-weight: 800;
}

/* медиа */
.ds-richtext img{
  max-width: 100%;
  height: auto;
  display: block;
  border-radius: 14px;
  margin: 10px 0 12px;
}

/* мелкие inline-теги */
.ds-richtext strong{ color: var(--text); font-weight: 800; }
.ds-richtext em{ font-style: italic; }
.ds-richtext small{ font-size: 0.9em; }

/* мобилка: немного меньше, но всё равно читабельно */
@media (max-width: 767px){
  .ds-richtext{
    font-size: 14px;
    line-height: 1.75;
  }

  .ds-card .ds-richtext,
  .ds-card .ds-richtext p,
  .ds-card .ds-richtext li,
  .ds-card .ds-richtext a,
  .ds-card .ds-richtext span,
  .ds-card .ds-richtext div{
    font-size: 14px;
    line-height: 1.75;
  }

  .ds-richtext h1{ font-size: 22px; }
  .ds-richtext h2{ font-size: 20px; }
  .ds-richtext h3{ font-size: 18px; }
  .ds-richtext h4{ font-size: 16px; }
  .ds-richtext h5{ font-size: 14px; }
  .ds-richtext h6{ font-size: 13px; }
}