/* Плавность лендинга (Задание — плавные окошки/лендинг):
   1) мягкое открытие + «накатка» секций при прокрутке (reveal-on-scroll);
   2) кросс-фейды внутри интерактивных демо вместо резких показов/скрытий.
   Прогрессивно: класс `reveal-ready` вешает инлайн-гейт/reveal.js ТОЛЬКО при поддержке
   requestAnimationFrame и без системного «уменьшить движение». Нет JS — секции видны как есть.
   Глобальный `@media(prefers-reduced-motion:reduce)` в styles.css уже гасит все transition/animation. */

/* ── 1. Накатка секций ──────────────────────────────────────────────────────────── */
/* Прячем секции только когда JS готов их «проявлять» (класс на <html>). Hero — первая
   секция во вьюпорте → проявится сразу на загрузке (это и есть «плавное открытие»). */
html.reveal-ready main > section {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 0.6s cubic-bezier(0.22, 1, 0.36, 1),
              transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
html.reveal-ready main > section.is-visible {
  opacity: 1;
  transform: none;
}
/* На мобилке секции высокие и скролл моментум-резкий — меньший сдвиг ощущается мягче, без «прыжка». */
@media (max-width: 680px) {
  html.reveal-ready main > section { transform: translateY(12px); }
}

/* ── 1b. Hero — своя page-load анимация со ступеньками ────────────────────────────── */
/* Общая накатка выше вешает на hero transition+`.is-visible` ДО первого пейнта (reveal.js
   deferred) → фейд частично отыгрывал за кадром и весь блок всплывал одним куском, резко.
   Выводим сам hero из generic-накатки (он всегда виден), а его текстовым детям даём
   keyframes-анимацию: она стартует от применения стилей, НЕ зависит от гонки с пейнтом, и
   `both` держит стартовое opacity:0 до своей задержки → честные ступеньки. `.hero-art`
   (кот/кольцо/облачко) НЕ анимируем — это LCP-элемент (fetchpriority=high) и на коротких
   экранах он ниже сгиба, ступенька отыграла бы за кадром. */
html.reveal-ready main > section.hero { opacity: 1; transform: none; transition: none; }

@keyframes hero-in {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: none; }
}
html.reveal-ready .hero-copy > * { animation: hero-in 0.9s cubic-bezier(0.22, 1, 0.36, 1) both; }
html.reveal-ready .hero-copy > h1                { animation-delay: 0s; }
html.reveal-ready .hero-copy > .hero-description { animation-delay: 0.2s; }
html.reveal-ready .hero-actions                  { animation-delay: 0.4s; }
html.reveal-ready .hero-note                     { animation-delay: 0.55s; }

/* ── 2. Кросс-фейды переключаемых панелей демо ───────────────────────────────────── */
/* Панели демо переключаются через DOM-свойство `hidden` (display:none↔block). @starting-style
   даёт входящей панели старт opacity:0 → плавное проявление; transition-behavior:allow-discrete
   + переход `display` дают уходящей панели доиграть fade перед скрытием. Старые браузеры без
   этих фич просто переключают резко (без поломки демо). */
#budget-plan, #budget-accounts, #budget-goals,
#rule-summary, #rule-editor, #rule-forgotten,
#chat-previous, #chat-receipt, #chat-reply, #chat-result, #chat-note, #chat-keyboard,
#drinks-equal {
  transition: opacity 0.28s ease, transform 0.28s ease,
              display 0.28s allow-discrete;
}
@starting-style {
  #budget-plan, #budget-accounts, #budget-goals,
  #rule-summary, #rule-editor, #rule-forgotten,
  #chat-previous, #chat-receipt, #chat-reply, #chat-result, #chat-note, #chat-keyboard,
  #drinks-equal {
    opacity: 0;
    transform: translateY(8px);
  }
}
#budget-plan[hidden], #budget-accounts[hidden], #budget-goals[hidden],
#rule-summary[hidden], #rule-editor[hidden], #rule-forgotten[hidden],
#chat-previous[hidden], #chat-receipt[hidden], #chat-reply[hidden], #chat-result[hidden],
#chat-note[hidden], #chat-keyboard[hidden], #drinks-equal[hidden] {
  opacity: 0;
  transform: translateY(6px);
}

/* Кнопки-переключатели демо: плавная смена активного состояния + живой отклик — лёгкий подъём
   с тенью на наведение и «вдавливание» на нажатие (как у основных кнопок сайта). В базовой вёрстке
   у них не было ни transition, ни hover — щёлкали рывком. */
.example, .segmented button, .learning-step,
.budget-tabs button, .budget-before-after button,
.rule-units button, .rule-categories button, .rule-actions button, .chat-keyboard button {
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease,
              box-shadow 0.2s ease, transform 0.2s ease;
  cursor: pointer;
}
.example:hover, .segmented button:hover, .learning-step:hover,
.budget-tabs button:hover, .budget-before-after button:hover,
.rule-units button:hover, .rule-categories button:hover, .rule-actions button:hover, .chat-keyboard button:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 16px rgba(103, 83, 60, 0.14);
}
.example:active, .segmented button:active, .learning-step:active,
.budget-tabs button:active, .budget-before-after button:active,
.rule-units button:active, .rule-categories button:active, .rule-actions button:active, .chat-keyboard button:active {
  transform: translateY(0);
  box-shadow: 0 2px 6px rgba(103, 83, 60, 0.12);
}

/* Полосы бюджета: при переключении «до/после» ширина едет плавно, а не прыгает. */
.main-progress > i, .category-bar > i {
  transition: width 0.45s cubic-bezier(0.22, 1, 0.36, 1);
}

/* Пояс безопасности: при «уменьшить движение» показываем всё сразу (на случай, если
   reveal-ready всё же выставлен). */
@media (prefers-reduced-motion: reduce) {
  html.reveal-ready main > section { opacity: 1; transform: none; }
}
