/* ==========================================================================
   Компоненти: кнопки, поля, бейджі, перемикачі, дропдауни, модалки, тости
   Рамок немає — межі задають м'які тіні та фон (П12). Анімації — П13.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Кнопки
   -------------------------------------------------------------------------- */
.btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  height: var(--control-h);
  padding: 0 16px;
  border: 0;
  border-radius: var(--r-control);
  font-size: var(--fs-14);
  font-weight: var(--fw-semibold);
  line-height: 1;
  white-space: nowrap;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition:
    background-color var(--t-fast) var(--ease),
    color var(--t-fast) var(--ease),
    box-shadow var(--t) var(--ease),
    transform var(--t-fast) var(--ease);
}

.btn:active {
  transform: scale(0.97);
}

.btn svg.lucide {
  transition: transform var(--t) var(--ease);
}

.btn:hover .i-shift {
  transform: translateX(3px);
}

.btn--accent {
  background: var(--c-accent);
  color: var(--c-text-inv);
  box-shadow: 0 1px 2px rgba(196, 80, 11, 0.25);
}

.btn--accent:hover {
  background: var(--c-accent-hover);
  box-shadow: var(--sh-accent);
}

.btn--accent:active {
  background: var(--c-accent-press);
}

.btn--primary {
  background: var(--c-primary);
  color: var(--c-text-inv);
}

.btn--primary:hover {
  background: var(--c-primary-hover);
  box-shadow: 0 6px 16px -6px rgba(21, 28, 43, 0.5);
}

.btn--secondary {
  background: var(--c-surface);
  color: var(--c-text);
  box-shadow: var(--sh-sm);
}

/* Білі кнопки на сірому фоні: hover темніший за фон сторінки (світло-сірий з ним зливається) */
.btn--secondary:hover {
  background: var(--c-hover-on-bg);
  box-shadow: none;
  color: var(--c-text);
}

.btn--soft {
  background: var(--c-accent-soft);
  color: var(--c-accent-text);
}

.btn--soft:hover {
  background: #ffe3cf;
}

.btn--tonal {
  background: var(--c-surface-2);
  color: var(--c-text);
}

.btn--tonal:hover {
  background: var(--c-active);
}

/* Видалення: рожевий фон, червона іконка — скрізь однаково (П15) */
.btn--danger-soft {
  background: var(--c-danger-soft);
  color: var(--c-danger);
}

.btn--danger-soft:hover {
  background: #fbd3cf;
  color: #c92a20;
}

.btn--ghost {
  color: var(--c-text-2);
}

.btn--ghost:hover {
  background: var(--c-hover);
  color: var(--c-text);
}

.btn--ghost.is-active,
.btn--secondary.is-active {
  background: var(--c-active);
  color: var(--c-text);
}

.btn--link {
  height: auto;
  padding: 0;
  color: var(--c-text-2);
  font-weight: var(--fw-medium);
}

.btn--link:hover {
  color: var(--c-accent);
}

.btn--link:active {
  transform: none;
}

.btn--sm {
  height: var(--control-h-sm);
  padding: 0 12px;
  font-size: var(--fs-13);
  border-radius: var(--r-control);
}

.btn--lg {
  height: var(--control-h-lg);
  padding: 0 20px;
  font-size: var(--fs-15);
  border-radius: var(--r-control);
}

.btn--block {
  width: 100%;
}

.btn--icon {
  width: var(--control-h);
  padding: 0;
}

.btn--icon.btn--sm {
  width: var(--control-h-sm);
}

.btn--icon.btn--lg {
  width: var(--control-h-lg);
}

.btn:disabled,
.btn.is-disabled {
  opacity: 0.45;
  pointer-events: none;
  box-shadow: none;
}

.btn.is-loading {
  color: transparent !important;
  pointer-events: none;
}

.btn.is-loading > * {
  opacity: 0;
}

.btn.is-loading::after {
  content: "";
  position: absolute;
  inset: 0;
  margin: auto;
  width: 18px;
  height: 18px;
  border: 2px solid var(--c-text-inv);
  border-right-color: transparent;
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}

.btn--secondary.is-loading::after,
.btn--tonal.is-loading::after {
  border-color: var(--c-text);
  border-right-color: transparent;
}

/* Лічильник */
.count {
  display: inline-grid;
  place-items: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  border-radius: var(--r-counter);
  background: var(--c-accent);
  color: var(--c-text-inv);
  font-size: var(--fs-11);
  font-weight: var(--fw-bold);
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.count--muted {
  background: var(--c-active);
  color: var(--c-text-2);
}

.count--float {
  position: absolute;
  top: -4px;
  right: -4px;
  box-shadow: 0 0 0 2px var(--c-surface);
}

.count:empty,
.count[data-value="0"] {
  display: none;
}

/* --------------------------------------------------------------------------
   Поля форм (заливка замість рамки)
   -------------------------------------------------------------------------- */
.field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

.field__label {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-13);
  font-weight: var(--fw-medium);
  color: var(--c-text-2);
}

.field__label .req {
  color: var(--c-danger);
}

.field__hint.is-warn {
  color: var(--c-warning);
  font-weight: var(--fw-medium);
}

.field__hint,
.field__error {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-12);
  color: var(--c-text-3);
}

.field__error {
  display: none;
  color: var(--c-danger);
  animation: fade-up var(--t) var(--ease);
}

.field.is-invalid .field__error {
  display: flex;
}

.field.is-invalid .field__hint {
  display: none;
}

.field-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--s-3);
}

.input {
  width: 100%;
  height: var(--input-h);
  padding: 0 14px;
  border: 0;
  border-radius: var(--r-control);
  background: var(--c-surface-2);
  box-shadow: var(--sh-inset);
  font-size: var(--fs-14);
  color: var(--c-text);
  transition: background-color var(--t-fast), box-shadow var(--t-fast);
}

.input::placeholder {
  color: var(--c-text-3);
}

.input:hover {
  background: var(--c-hover);
}

.input:focus {
  outline: none;
  background: var(--c-surface);
  box-shadow: inset 0 0 0 1.5px var(--c-accent), 0 0 0 4px var(--c-focus);
}

.input--sm {
  height: var(--control-h);
  font-size: var(--fs-13);
  border-radius: var(--r-control);
}

textarea.input {
  height: auto;
  min-height: 88px;
  padding: 10px 14px;
  resize: vertical;
  line-height: var(--lh);
}

.field.is-invalid .input,
.field.is-invalid .select__trigger {
  background: var(--c-danger-soft);
  box-shadow: inset 0 0 0 1.5px var(--c-danger);
}

.field.is-invalid .input:focus {
  box-shadow: inset 0 0 0 1.5px var(--c-danger), 0 0 0 4px var(--c-danger-soft);
}

.input-wrap {
  position: relative;
  display: flex;
  align-items: center;
  min-width: 0;
}

.input-wrap > .input-wrap__icon {
  position: absolute;
  left: 12px;
  display: flex;
  color: var(--c-text-3);
  pointer-events: none;
}

.input-wrap > .input {
  padding-left: 38px;
}

.input-wrap > .input-wrap__suffix {
  position: absolute;
  right: 12px;
  font-size: var(--fs-12);
  color: var(--c-text-3);
  pointer-events: none;
}

/* --------------------------------------------------------------------------
   Чекбокс, радіо-картка, перемикач, сегменти
   -------------------------------------------------------------------------- */
.check {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 32px;
  font-size: var(--fs-14);
  color: var(--c-text);
  cursor: pointer;
  user-select: none;
}

.check input,
.rcard input {
  appearance: none;
  flex: none;
  width: 18px;
  height: 18px;
  border: 1.5px solid #c3c9d3;
  border-radius: 5px;
  background: var(--c-surface) center / 12px no-repeat;
  cursor: pointer;
  transition: background-color var(--t-fast), border-color var(--t-fast), transform var(--t-fast) var(--ease);
}

.check:hover input {
  border-color: var(--c-accent);
}

.check input:active {
  transform: scale(0.88);
}

.check input:checked {
  background-color: var(--c-accent);
  border-color: var(--c-accent);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
  animation: pop var(--t) var(--ease);
}

.check__label {
  flex: 1 1 auto;
  min-width: 0;
}

/* Бейдж-лічильник: будь-яке число біля підпису — сірий «пігулка»-бейдж, не голий текст (П14) */
.num,
.check__count,
.chip__count,
.nav-item__count,
.page-head__count {
  display: inline-grid;
  place-items: center;
  flex: none;
  min-width: 22px;
  height: 20px;
  padding: 0 7px;
  border-radius: var(--r-counter);
  background: var(--c-active);
  color: var(--c-text-2);
  font-size: var(--fs-12);
  font-weight: var(--fw-semibold);
  line-height: 1;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  transition: background-color var(--t-fast), color var(--t-fast);
}

.num:empty {
  display: none;
}

.check__count {
  margin-left: auto;
}

/* У пункті меню лічильник праворуч */
.dd-item > .num {
  margin-left: auto;
}

/* Лічильник одразу після тексту в рядку (перемикачі фільтрів) */
.ico-text > .check__count {
  margin-left: 2px;
}

.check.is-disabled {
  opacity: 0.45;
  pointer-events: none;
}

.rcard {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border-radius: var(--r-lg);
  background: var(--c-surface-2);
  box-shadow: var(--sh-inset);
  cursor: pointer;
  transition: background-color var(--t-fast), box-shadow var(--t);
}

.rcard:hover {
  background: var(--c-hover);
}

.rcard input {
  flex: none;
  border-radius: 50%;
}

.rcard input:checked {
  border: 5px solid var(--c-accent);
}

.rcard:has(input:checked) {
  background: var(--c-accent-soft);
  box-shadow: inset 0 0 0 1.5px var(--c-accent);
}

.rcard__body {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.rcard__title {
  font-size: var(--fs-14);
  font-weight: var(--fw-semibold);
}

.rcard__text {
  font-size: var(--fs-12);
  color: var(--c-text-3);
}

.rcard__icon {
  margin-left: auto;
  color: var(--c-text-3);
}

.rcard:has(input:checked) .rcard__icon {
  color: var(--c-accent);
}

.switch {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 32px;
  font-size: var(--fs-14);
  cursor: pointer;
  user-select: none;
}

.switch input {
  appearance: none;
  position: relative;
  flex: none;
  width: 38px;
  height: 22px;
  border-radius: var(--r-pill);
  background: #d3d8e0;
  cursor: pointer;
  transition: background-color var(--t) var(--ease);
}

.switch input::before {
  content: "";
  position: absolute;
  top: 3px;
  left: 3px;
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: var(--c-surface);
  box-shadow: 0 1px 3px rgba(16, 24, 40, 0.25);
  transition: transform var(--t) var(--ease-spring), width var(--t-fast) var(--ease);
}

.switch input:active::before {
  width: 20px;
}

.switch input:checked {
  background: var(--c-accent);
}

.switch input:checked::before {
  transform: translateX(16px);
}

.switch input:checked:active::before {
  transform: translateX(12px);
}

.seg {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  height: var(--control-h);
  padding: 3px;
  border-radius: var(--r-control);
  background: var(--c-active);
}

.seg__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 100%;
  min-width: 32px;
  padding: 0 12px;
  border-radius: var(--r-sm);
  font-size: var(--fs-13);
  font-weight: var(--fw-medium);
  color: var(--c-text-2);
  white-space: nowrap;
  transition: background-color var(--t-fast), color var(--t-fast), box-shadow var(--t), transform var(--t-fast);
}

.seg__btn:hover {
  color: var(--c-text);
}

.seg__btn:active {
  transform: scale(0.95);
}

.seg__btn.is-active {
  background: var(--c-surface);
  color: var(--c-text);
  box-shadow: var(--sh-sm);
}

.seg--icons .seg__btn {
  padding: 0;
  width: 32px;
}

.seg--block {
  display: flex;
}

.seg--block .seg__btn {
  flex: 1 1 0;
}

/* --------------------------------------------------------------------------
   Чіпи, бейджі, kbd, статуси
   -------------------------------------------------------------------------- */
.chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex: none;
  height: var(--control-h);
  padding: 0 14px;
  border-radius: var(--r-control);
  background: var(--c-surface);
  box-shadow: var(--sh-xs);
  font-size: var(--fs-14);
  font-weight: var(--fw-medium);
  color: var(--c-text-2);
  white-space: nowrap;
  transition: background-color var(--t-fast), color var(--t-fast), box-shadow var(--t), transform var(--t-fast);
}

/* Hover білих кнопок на сірому фоні — темніший за фон сторінки, нейтральний */
.chip:hover {
  background: var(--c-hover-on-bg);
  color: var(--c-text);
  box-shadow: none;
}

.chip:not(.is-active):hover .chip__count {
  background: var(--c-surface);
  color: var(--c-text);
}

.chip:active {
  transform: scale(0.96);
}

.chip.is-active {
  background: var(--c-accent);
  color: var(--c-text-inv);
  box-shadow: var(--sh-accent);
}

.chip__count {
  height: 20px;
  margin-right: -6px;
}

.chip.is-active .chip__count {
  background: rgba(255, 255, 255, 0.24);
  color: var(--c-text-inv);
}

/* Активний фільтр — насичений темний чип: добре видно на сірому фоні
   і не плутається з помаранчевими підкатегоріями */
.chip--filter {
  padding-right: 6px;
  background: var(--c-primary);
  color: var(--c-text-inv);
  box-shadow: none;
}

.chip--filter:hover {
  box-shadow: none;
  color: var(--c-text-inv);
  background: var(--c-primary-hover);
}

.chip--filter .chip__x {
  background: rgba(255, 255, 255, 0.16);
}

.chip__x {
  display: grid;
  place-items: center;
  width: 26px;
  height: 26px;
  border-radius: var(--r-sm);
  transition: background-color var(--t-fast);
  background: rgba(196, 80, 11, 0.1);
}

.chip--filter:hover .chip__x {
  background: rgba(255, 255, 255, 0.26);
}

/* Бейдж, що не вмістився, — лише іконка; натиск показує підказку з назвою */
.badge.is-compact {
  padding: 0 5px;
  pointer-events: auto;
  cursor: pointer;
}

.badge.is-compact .badge__text {
  display: none;
}

/* Підказка (App.tip) */
.tip {
  position: fixed;
  z-index: var(--z-toast);
  max-width: 220px;
  padding: 6px 10px;
  border-radius: var(--r-sm);
  background: var(--c-primary);
  color: var(--c-text-inv);
  font-size: var(--fs-12);
  font-weight: var(--fw-semibold);
  line-height: 1.3;
  box-shadow: var(--sh-md);
  pointer-events: none;
  animation: tip-in var(--t) var(--ease) both;
}

.tip.is-leaving {
  animation: tip-out var(--t-fast) var(--ease) both;
}

@keyframes tip-in {
  from { opacity: 0; transform: translateY(4px) scale(0.96); }
}

@keyframes tip-out {
  to { opacity: 0; transform: translateY(4px); }
}

.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 22px;
  padding: 0 8px;
  border-radius: var(--r-counter);
  font-size: var(--fs-11);
  font-weight: var(--fw-bold);
  line-height: 1;
  letter-spacing: 0.01em;
  white-space: nowrap;
  background: var(--c-active);
  color: var(--c-text-2);
}

.badge--accent {
  background: var(--c-accent);
  color: var(--c-text-inv);
}

.badge--danger {
  background: var(--c-danger);
  color: var(--c-text-inv);
}

.badge--success {
  background: var(--c-success-soft);
  color: var(--c-success);
}

.badge--info {
  background: var(--c-info);
  color: var(--c-text-inv);
}

.badge--info-soft {
  background: var(--c-info-soft);
  color: var(--c-info);
}

.badge--warning {
  background: var(--c-warning-soft);
  color: var(--c-warning);
}

.badge--dark {
  background: var(--c-primary);
  color: var(--c-text-inv);
}

.kbd {
  display: inline-grid;
  place-items: center;
  min-width: 22px;
  height: 22px;
  padding: 0 6px;
  border-radius: var(--r-counter);
  background: var(--c-surface);
  box-shadow: var(--sh-xs);
  font-family: var(--font-mono);
  font-size: var(--fs-11);
  color: var(--c-text-3);
  line-height: 1;
}

.dot {
  flex: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
}

.status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: var(--fs-13);
  font-weight: var(--fw-medium);
  white-space: nowrap;
}

.status--in { color: var(--c-success); }
.status--order { color: var(--c-warning); }
.status--out { color: var(--c-text-3); }

.status--in .dot {
  box-shadow: 0 0 0 3px var(--c-success-soft);
}

.status__note {
  color: var(--c-text-3);
  font-weight: var(--fw-regular);
}

/* --------------------------------------------------------------------------
   Дропдаун з трикутником (П3)
   -------------------------------------------------------------------------- */
.dd {
  position: relative;
  display: inline-flex;
  min-width: 0;
}

.dd__panel {
  --arrow-x: 16px;
  position: absolute;
  top: calc(100% + 10px);
  left: 0;
  z-index: var(--z-dropdown);
  min-width: max(100%, 220px);
  padding: 6px;
  border-radius: var(--r-lg);
  background: var(--c-surface);
  box-shadow: var(--sh-lg), 0 0 0 1px rgba(16, 24, 40, 0.04);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px) scale(0.98);
  transform-origin: var(--arrow-x) top;
  transition: opacity var(--t-fast) var(--ease), transform var(--t) var(--ease), visibility 0s linear var(--t);
}

/* Трикутник: той самий фон і та сама тінь-контур, що й панель */
.dd__panel::before {
  content: "";
  position: absolute;
  top: -6px;
  left: var(--arrow-x);
  width: 12px;
  height: 12px;
  background: var(--c-surface);
  border-top-left-radius: 3px;
  box-shadow: -1px -1px 0 0 rgba(16, 24, 40, 0.05);
  transform: translateX(-50%) rotate(45deg);
}

/* Вирівнювання за замовчуванням задає CSS (щоб закрита панель не створювала переповнення),
   JS лише перевертає його класами is-start / is-end, якщо панель не вміщується */
.dd__panel[data-align="end"],
.dd__panel.is-end {
  left: auto;
  right: 0;
}

.dd__panel.is-start {
  left: 0;
  right: auto;
}

/* Режим усередині модалки / панелі (координати ставить JS).
   Fixed з самого початку: закриті панелі не займають місця в прокручуваному блоці
   і не створюють зайвого скролу в модалці */
.dd__panel.is-fixed,
.modal__body .dd__panel,
.panel__body .dd__panel {
  position: fixed;
}

/* Відкриття вгору: трикутник знизу */
.dd__panel.is-up {
  transform: translateY(6px) scale(0.98);
  transform-origin: var(--arrow-x) bottom;
}

.dd__panel.is-up::before {
  top: auto;
  bottom: -6px;
  transform: translateX(-50%) rotate(225deg);
}

.dd.is-open > .dd__panel {
  opacity: 1;
  visibility: visible;
  transform: none;
  transition: opacity var(--t-fast) var(--ease), transform var(--t) var(--ease), visibility 0s;
}

.dd__scroll {
  position: relative;
  max-height: 320px;
  overflow-y: auto;
  overscroll-behavior: contain;
}

.dd__label {
  padding: 8px 10px 4px;
  font-size: var(--fs-11);
  font-weight: var(--fw-bold);
  color: var(--c-text-3);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.dd__sep {
  height: 1px;
  margin: 6px 4px;
  background: var(--c-line);
}

.dd__search {
  padding: 2px 2px 6px;
}

.dd__empty {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 10px;
  font-size: var(--fs-13);
  color: var(--c-text-3);
}

.dd-item {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  min-height: 38px;
  padding: 8px 10px;
  border-radius: var(--r-sm);
  font-size: var(--fs-14);
  color: var(--c-text);
  text-align: left;
  transition: background-color var(--t-fast), color var(--t-fast);
}

.dd-item > svg.lucide:first-child {
  color: var(--c-text-3);
  transition: color var(--t-fast);
}

.dd-item:hover,
.dd-item.is-focused {
  background: var(--c-hover);
}

.dd-item:hover > svg.lucide:first-child {
  color: var(--c-accent);
}

.dd-item[aria-selected="true"] {
  font-weight: var(--fw-semibold);
  color: var(--c-accent-text);
}

.dd-item[aria-selected="true"] > svg.lucide:first-child {
  color: var(--c-accent);
}

.dd-item__check {
  margin-left: auto;
  color: var(--c-accent);
  visibility: hidden;
}

.dd-item[aria-selected="true"] .dd-item__check {
  visibility: visible;
  animation: pop var(--t) var(--ease);
}

.dd-item__meta {
  margin-left: auto;
  font-size: var(--fs-12);
  font-weight: var(--fw-regular);
  color: var(--c-text-3);
  white-space: nowrap;
}

/* Кастомний select (тригер) */
.select {
  display: flex;
  width: 100%;
}

.select__trigger {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  height: var(--input-h);
  padding: 0 12px 0 14px;
  border-radius: var(--r-control);
  background: var(--c-surface-2);
  box-shadow: var(--sh-inset);
  font-size: var(--fs-14);
  text-align: left;
  transition: background-color var(--t-fast), box-shadow var(--t-fast);
}

.select__trigger > svg.lucide:first-child {
  color: var(--c-text-3);
}

.select__trigger:hover {
  background: var(--c-hover);
}

.select.is-open .select__trigger {
  background: var(--c-surface);
  box-shadow: inset 0 0 0 1.5px var(--c-accent), 0 0 0 4px var(--c-focus);
}

.select__value {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.select__value.is-placeholder {
  color: var(--c-text-3);
}

.select__chevron {
  color: var(--c-text-3);
  transition: transform var(--t) var(--ease);
}

.select.is-open .select__chevron,
.dd.is-open > .btn .select__chevron,
.dd.is-open > [data-dd-trigger] .select__chevron {
  transform: rotate(180deg);
}

.select.is-disabled {
  opacity: 0.5;
  pointer-events: none;
}

.select > .dd__panel {
  width: 100%;
}

/* --------------------------------------------------------------------------
   Модалки (П9): центр на ПК, шторка знизу на телефоні, бокова панель для форм
   -------------------------------------------------------------------------- */
.modal {
  position: fixed;
  inset: 0;
  z-index: var(--z-modal);
  display: grid;
  visibility: hidden;
  pointer-events: none;
  transition: visibility 0s linear var(--t-slow);
}

.modal.is-open {
  visibility: visible;
  pointer-events: auto;
  transition: visibility 0s;
}

/* Фон під модалкою — лише затемнення, без розмиття (плавно змінюється колір) */
.modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(14, 19, 30, 0);
  transition: background-color var(--t-slow) var(--ease);
}

.modal.is-open .modal__backdrop {
  background: var(--c-overlay);
}

.modal__dialog {
  position: relative;
  display: flex;
  flex-direction: column;
  min-height: 0;
  background: var(--c-surface);
  box-shadow: var(--sh-xl);
  outline: none;
  transition: transform var(--t-slow) var(--ease-ios), opacity var(--t) var(--ease);
}

/* Центр */
.modal[data-variant="center"] .modal__dialog {
  place-self: center;
  width: min(var(--modal-w, 580px), calc(100vw - 32px));
  max-height: min(820px, calc(100dvh - 64px));
  border-radius: var(--r-2xl);
  opacity: 0;
  transform: translateY(16px) scale(0.96);
}

.modal[data-variant="center"].is-open .modal__dialog {
  opacity: 1;
  transform: none;
}

/* Бокова панель справа / зліва */
.modal[data-variant="right"] .modal__dialog,
.modal[data-variant="left"] .modal__dialog {
  position: absolute;
  top: 10px;
  bottom: 10px;
  width: min(var(--modal-w, 460px), calc(100vw - 20px));
  border-radius: var(--r-2xl);
}

.modal[data-variant="right"] .modal__dialog {
  right: 10px;
  transform: translateX(calc(100% + 20px));
}

.modal[data-variant="left"] .modal__dialog {
  left: 10px;
  transform: translateX(calc(-100% - 20px));
}

.modal[data-variant="right"].is-open .modal__dialog,
.modal[data-variant="left"].is-open .modal__dialog {
  transform: none;
}

/* --------------------------------------------------------------------------
   Модалка-список (П21): пошук зверху, великі рядки під палець
   -------------------------------------------------------------------------- */
.picker__search {
  flex: none;
  padding: 14px 24px;
  box-shadow: 0 1px 0 var(--c-line);
  position: relative;
  z-index: 1;
}

.picker__search .input::-webkit-search-cancel-button {
  -webkit-appearance: none;
  appearance: none;
}

#modal-picker .modal__body {
  padding: 8px 12px 16px;
}

.picker__list {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.picker__list.is-busy {
  pointer-events: none;
}

.picker-item {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-height: 48px;
  padding: 10px 12px;
  border-radius: var(--r-control);
  font-size: var(--fs-15);
  color: var(--c-text);
  text-align: left;
  transition: background-color var(--t-fast), color var(--t-fast);
}

.picker-item:hover {
  background: var(--c-hover);
}

.picker-item:active {
  background: var(--c-active);
}

.picker-item__icon {
  flex: none;
  color: var(--c-text-3);
}

.picker-item__text {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

.picker-item__label {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.picker-item__label mark {
  background: none;
  color: var(--c-accent-text);
  font-weight: var(--fw-semibold);
}

.picker-item__meta {
  font-size: var(--fs-13);
  color: var(--c-text-3);
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.picker-item__check {
  flex: none;
  margin-left: auto;
  color: var(--c-accent);
  opacity: 0;
  transform: scale(0.6);
  transition: opacity var(--t-fast), transform var(--t) var(--ease-spring);
}

.picker-item[aria-selected="true"] {
  background: var(--c-accent-soft);
  color: var(--c-accent-text);
  font-weight: var(--fw-semibold);
}

.picker-item[aria-selected="true"] .picker-item__check {
  opacity: 1;
  transform: none;
}

.picker-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
  padding: 48px 16px;
  color: var(--c-text-3);
  text-align: center;
}

.picker-empty svg.lucide {
  width: 28px;
  height: 28px;
}

/* Наступний список у тому самому вікні (марка → модель) */
.picker-next {
  animation: picker-next var(--t-slow) var(--ease-ios);
}

@keyframes picker-next {
  from { opacity: 0; transform: translateX(48px); }
}

/* Тригер «модалки-списку»: стрілка вправо, не обертається */
.select--picker .select__chevron {
  transform: none !important;
}

/* Перехід між модалками (П21): фон не мерехтить, вікна зсуваються на 48px з проявом */
.modal[data-swap] .modal__backdrop {
  transition: none;
}

.modal.no-transition .modal__dialog {
  transition: none !important;
}

.modal[data-swap="in-forward"]:not(.is-open) .modal__dialog,
.modal[data-swap="out-back"]:not(.is-open) .modal__dialog {
  opacity: 0;
  transform: translateX(48px);
}

.modal[data-swap="in-back"]:not(.is-open) .modal__dialog,
.modal[data-swap="out-forward"]:not(.is-open) .modal__dialog {
  opacity: 0;
  transform: translateX(-48px);
}

/* Шапка з кнопкою «Назад» зліва */
.modal__head--back {
  padding-left: 14px;
}

.modal__handle {
  display: none;
}

.modal__head {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
  min-height: 64px;
  padding: 14px 14px 14px 24px;
  box-shadow: 0 1px 0 var(--c-line);
  position: relative;
  z-index: 1;
}

.modal__title {
  flex: 1 1 auto;
  min-width: 0;
  font-size: var(--fs-18);
  font-weight: var(--fw-bold);
  letter-spacing: -0.01em;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.modal__body {
  flex: 1 1 auto;
  min-height: 0;
  padding: 24px;
  overflow-y: auto;
  overscroll-behavior: contain;
}

.modal__foot {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: none;
  padding: 16px 24px;
  background: var(--c-surface);
  border-radius: 0 0 var(--r-2xl) var(--r-2xl);
  box-shadow: 0 -10px 24px -16px rgba(16, 24, 40, 0.18);
  position: relative;
  z-index: 1;
}

@media (max-width: 767px) {
  .picker__search {
    padding: 12px 16px;
  }

  /* Центральна модалка → шторка знизу як на iPhone */
  .modal[data-variant="center"] .modal__dialog {
    place-self: end stretch;
    width: 100%;
    max-height: 90dvh;
    border-radius: 20px 20px 0 0;
    opacity: 1;
    transform: translateY(100%);
    padding-bottom: env(safe-area-inset-bottom);
  }

  /* transform: none у відкритому стані — інакше fixed-дропдауни всередині зміщуються */
  .modal[data-variant="center"].is-open .modal__dialog {
    transform: none;
  }

  .modal[data-variant="center"].is-dragging .modal__dialog {
    transform: translateY(var(--drag-y, 0px));
    transition: none;
  }

  .modal[data-variant="center"] .modal__handle {
    display: block;
    flex: none;
    height: 22px;
    position: relative;
    touch-action: none;
    cursor: grab;
  }

  .modal[data-variant="center"] .modal__handle::before {
    content: "";
    position: absolute;
    top: 9px;
    left: 50%;
    width: 40px;
    height: 5px;
    border-radius: var(--r-pill);
    background: #d3d8e0;
    transform: translateX(-50%);
  }

  .modal[data-variant="center"] .modal__head {
    min-height: 48px;
    padding-top: 0;
  }

  .modal[data-variant="right"] .modal__dialog,
  .modal[data-variant="left"] .modal__dialog {
    top: 0;
    bottom: 0;
    width: 100vw;
    border-radius: 0;
  }

  .modal[data-variant="right"] .modal__dialog {
    right: 0;
  }

  .modal[data-variant="left"] .modal__dialog {
    left: 0;
  }

  .modal__foot {
    border-radius: 0;
    padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  }

  .modal__body {
    padding: 16px;
  }

  .modal__head {
    padding-left: 16px;
    min-height: 56px;
  }
}

/* --------------------------------------------------------------------------
   Акордеон (плавне розкриття без стрибків)
   -------------------------------------------------------------------------- */
.acc__head {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  min-height: 44px;
  font-size: var(--fs-14);
  font-weight: var(--fw-semibold);
  text-align: left;
}

.acc__chevron {
  margin-left: auto;
  color: var(--c-text-3);
  transition: transform var(--t) var(--ease);
}

.acc__head:hover .acc__chevron {
  color: var(--c-text);
}

.acc.is-open > .acc__head .acc__chevron {
  transform: rotate(180deg);
}

.acc__body {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows var(--t-slow) var(--ease);
}

.acc.is-open > .acc__body {
  grid-template-rows: 1fr;
}

.acc__inner {
  min-height: 0;
  overflow: hidden;
}

/* --------------------------------------------------------------------------
   Степер кількості
   -------------------------------------------------------------------------- */
.stepper {
  display: inline-flex;
  align-items: center;
  height: var(--control-h);
  border-radius: var(--r-control);
  background: var(--c-accent-soft);
  overflow: hidden;
  /* Без анімації за замовчуванням: при оновленні сторінки й на «+»/«−» степер не підстрибує.
     «pop» — лише в момент, коли «Купити» стає степером (syncBuy додає .anim-pop) */
}

.stepper__btn {
  display: grid;
  place-items: center;
  flex: none;
  width: 34px;
  height: 100%;
  color: var(--c-accent-text);
  transition: background-color var(--t-fast), color var(--t-fast), transform var(--t-fast);
}

.stepper__btn:hover {
  background: #ffe3cf;
}

.stepper__btn:active svg.lucide {
  transform: scale(0.82);
}

/* Кнопка «−», що видаляє товар (кількість 1 → 0) */
.stepper__btn--danger {
  color: var(--c-danger);
}

.stepper__btn--danger:hover {
  background: #fbd3cf;
  color: #c92a20;
}

.stepper__btn:disabled {
  opacity: 0.35;
  pointer-events: none;
}

.stepper__value {
  flex: 1 1 auto;
  width: 32px;
  min-width: 0;
  height: 100%;
  border: 0;
  background: none;
  text-align: center;
  font-size: var(--fs-13);
  font-weight: var(--fw-semibold);
  color: var(--c-accent-text);
  font-variant-numeric: tabular-nums;
  -moz-appearance: textfield;
}

.stepper__value::-webkit-inner-spin-button,
.stepper__value::-webkit-outer-spin-button {
  appearance: none;
}

.stepper__value:focus {
  outline: none;
  background: #ffe3cf;
}

/* --------------------------------------------------------------------------
   Подвійний повзунок ціни
   -------------------------------------------------------------------------- */
.range {
  position: relative;
  height: 22px;
}

.range__track,
.range__fill {
  position: absolute;
  top: 50%;
  height: 4px;
  border-radius: var(--r-pill);
  transform: translateY(-50%);
}

.range__track {
  left: 0;
  right: 0;
  background: var(--c-active);
}

.range__fill {
  background: var(--c-accent);
}

.range input {
  position: absolute;
  inset: 0;
  width: 100%;
  appearance: none;
  background: none;
  pointer-events: none;
}

.range input::-webkit-slider-thumb {
  appearance: none;
  width: 20px;
  height: 20px;
  border: 0;
  border-radius: 50%;
  background: var(--c-surface);
  box-shadow: 0 0 0 5px var(--c-accent) inset, var(--sh-md);
  pointer-events: auto;
  cursor: grab;
  transition: transform var(--t-fast) var(--ease);
}

.range input::-webkit-slider-thumb:hover {
  transform: scale(1.12);
}

.range input:active::-webkit-slider-thumb {
  transform: scale(1.2);
  cursor: grabbing;
}

.range input::-moz-range-thumb {
  width: 14px;
  height: 14px;
  border: 4px solid var(--c-accent);
  border-radius: 50%;
  background: var(--c-surface);
  pointer-events: auto;
  cursor: grab;
}

.range input:focus-visible::-webkit-slider-thumb {
  box-shadow: 0 0 0 5px var(--c-accent) inset, 0 0 0 4px var(--c-focus);
}

/* --------------------------------------------------------------------------
   Тости
   -------------------------------------------------------------------------- */
.toasts {
  position: fixed;
  left: 50%;
  bottom: 24px;
  z-index: var(--z-toast);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  width: min(440px, calc(100vw - 24px));
  transform: translateX(-50%);
  pointer-events: none;
}

/* Колір за типом: успіх — зелений, помилка — червоний, інформація — темний */
.toast {
  --toast-bg: var(--c-success);
  display: flex;
  align-items: center;
  gap: 12px;
  max-width: 100%;
  min-height: 52px;
  padding: 8px 8px 8px 16px;
  border-radius: var(--r-xl);
  background: var(--toast-bg);
  color: var(--c-text-inv);
  font-size: var(--fs-14);
  box-shadow: var(--sh-xl);
  pointer-events: auto;
  animation: toast-in var(--t-slow) var(--ease-spring);
}

.toast--error {
  --toast-bg: var(--c-danger);
}

.toast--info {
  --toast-bg: var(--c-primary);
}

.toast.is-leaving {
  animation: toast-out var(--t) var(--ease) forwards;
}

.toast__text {
  flex: 1 1 auto;
  min-width: 0;
  padding: 4px 0;
}

.toast__title {
  font-weight: var(--fw-semibold);
}

.toast__sub {
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  font-size: var(--fs-12);
  color: rgba(255, 255, 255, 0.82);
}

/* Дія — біла кнопка з текстом кольору сповіщення */
.toast__action {
  flex: none;
  height: 34px;
  padding: 0 12px;
  border-radius: var(--r-control);
  background: var(--c-surface);
  font-size: var(--fs-13);
  font-weight: var(--fw-semibold);
  color: var(--toast-bg);
  transition: background-color var(--t-fast), transform var(--t-fast);
}

.toast__action:hover {
  background: rgba(255, 255, 255, 0.88);
}

.toast__action:active {
  transform: scale(0.96);
}

.toast__close {
  display: grid;
  place-items: center;
  flex: none;
  width: 34px;
  height: 34px;
  border-radius: var(--r-control);
  background: rgba(255, 255, 255, 0.18);
  color: var(--c-text-inv);
  transition: background-color var(--t-fast), transform var(--t-fast);
}

.toast__close:hover {
  background: rgba(255, 255, 255, 0.28);
}

.toast__close:active {
  transform: scale(0.92);
}

/* Телефон: внизу екрана на всю ширину, з урахуванням безпечної зони iPhone */
@media (max-width: 767px) {
  .toasts {
    bottom: calc(12px + env(safe-area-inset-bottom));
    align-items: stretch;
  }
}

/* --------------------------------------------------------------------------
   Стани: порожньо, помилка, спінер
   -------------------------------------------------------------------------- */
.state {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  padding: 64px 24px;
  border-radius: var(--r-xl);
  background: var(--c-surface);
  box-shadow: var(--sh-sm);
  text-align: center;
  animation: fade-up var(--t-slow) var(--ease);
}

.state__icon {
  display: grid;
  place-items: center;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--c-accent-soft);
  color: var(--c-accent);
}

.state__icon svg.lucide {
  width: 24px;
  height: 24px;
}

.state__icon--error {
  background: var(--c-danger-soft);
  color: var(--c-danger);
}

.state__icon--success {
  background: var(--c-success-soft);
  color: var(--c-success);
}

.state__icon--muted {
  background: var(--c-hover);
  color: var(--c-text-3);
}

.state__text {
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-width: 400px;
}

.state__title {
  font-size: var(--fs-18);
  font-weight: var(--fw-bold);
}

.state__desc {
  font-size: var(--fs-14);
  color: var(--c-text-3);
}

.state__actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
}

.state--plain {
  background: none;
  box-shadow: none;
}

.spinner {
  width: 16px;
  height: 16px;
  border: 2px solid currentColor;
  border-right-color: transparent;
  border-radius: 50%;
  animation: spin 0.7s linear infinite;
}

@keyframes toast-in {
  from { opacity: 0; transform: translateY(16px) scale(0.96); }
}

@keyframes toast-out {
  to { opacity: 0; transform: translateY(8px) scale(0.97); }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 1ms !important;
    transition-duration: 1ms !important;
  }
}

/* --------------------------------------------------------------------------
   Згода на cookies (components/cookies.js): ПК — картка в правому нижньому куті,
   телефон — на всю ширину внизу. Виїжджає знизу; поверх сторінки, під модалками
   -------------------------------------------------------------------------- */
.cookies {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: calc(var(--z-modal) - 1);
  display: flex;
  flex-direction: column;
  gap: var(--s-3);
  width: min(440px, calc(100vw - 48px));
  padding: var(--s-4);
  border-radius: var(--r-xl);
  background: var(--c-surface);
  box-shadow: var(--sh-xl);
  opacity: 0;
  transform: translateY(16px);
  transition: opacity var(--t-slow) var(--ease-ios), transform var(--t-slow) var(--ease-ios);
}

.cookies[hidden] {
  display: none;
}

.cookies.is-shown {
  opacity: 1;
  transform: none;
}

.cookies__text {
  color: var(--c-text-2);
  font-size: var(--fs-13);
  line-height: 1.55;
}

.cookies__text b {
  color: var(--c-text);
  font-weight: var(--fw-semibold);
}

.cookies__text a {
  color: var(--c-accent-text);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.cookies__actions {
  display: flex;
  gap: var(--s-2);
}

.cookies__actions .btn {
  flex: 1;
}

@media (max-width: 767px) {
  .cookies {
    left: 12px;
    right: 12px;
    bottom: calc(12px + env(safe-area-inset-bottom));
    width: auto;
  }
}

@media (prefers-reduced-motion: reduce) {
  .cookies {
    transition: none;
  }
}

/* --------------------------------------------------------------------------
   Скелетон сторінки (html.is-skeleton — віддає сервер, знімає components/skeleton.js).
   Та сама розмітка, лише вигляд: розміри елементів не змінюються → заміна піксель у піксель.
   Шапка й футер — одразу справжні; скелетон — у контенті, лівій панелі, новинах і перевагах
   -------------------------------------------------------------------------- */
html.is-skeleton {
  --sk-a: #e4e8ee;
  --sk-b: #f8f9fb;
}

/* Великі блоки на сірому фоні сторінки — трохи темніші, щоб читались */
html.is-skeleton :is(.hero__slider, .promo, .vinb, .hbrand, .section-head h2, .page-head h1, .section-head .btn) {
  --sk-a: #d3d8e0;
  --sk-b: #ebeef2;
}

/* 1. Блоки-заглушки: банери, фото, іконки — суцільний блок, вміст схований */
html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) :is(
  .hero__slider, .promo, .vinb, .hbrand, .hcat__media, .pcard__media, .ncard__mediawrap,
  .benefit__icon, .nav-ico, .pgallery__main, .pgallery__thumb, .pfit__ico, .pterms__ico,
  .ifact__ico, .iway__ico, .icontact__ico, .nf__code
) {
  background-image: linear-gradient(90deg, var(--sk-a) 30%, var(--sk-b) 50%, var(--sk-a) 70%) !important;
  background-size: 200% 100% !important;
  box-shadow: none !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
}

html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) :is(
  .hero__slider, .promo, .vinb, .hbrand, .hcat__media, .pcard__media, .ncard__mediawrap,
  .benefit__icon, .nav-ico, .pgallery__main, .pgallery__thumb, .pfit__ico, .pterms__ico,
  .ifact__ico, .iway__ico, .icontact__ico, .nf__code
) > * {
  visibility: hidden !important;
}

/* 2. Текст — смужки лише в межах тексту (без внутрішніх відступів елемента).
   Кілька рядків — смужка на кожен рядок; один рядок — одна смужка по центру висоти */
html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) :is(
  .section-head h2, .page-head h1, .hcat__name, .hcat__count, .pcard__title, .pcard__specs,
  .ncard__title, .ncard__excerpt, .benefit__title, .benefit__desc, .nav__title, .nav-item__label,
  .filters__title, .fgroup .acc__head > span:first-child, .check__label,
  .pinfo__title, .pblock__title, .pblock__note, .specs dt, .specs dd, .pbuy__old s, .pfit__text > *, .pterms__title, .pterms__text b, .pterms__text > span:not(.pterms__line), .pterms__val,
  .article__title, .article__lead, .article__body :is(p, li, h2), .toc__title, .toc a, .ihelp__title, .ihelp__text, .ihelp__phone,
  .help-panel :is(h1, h2, h3, p, dt, dd, .ilist > li, .idoc__list > li, .ifact__text > *, .isteps__text > *, .icontact__text > *, .acc__head > span, .iway__title),
  .nf__title, .nf__text
) {
  background-image: linear-gradient(90deg, var(--sk-a) 30%, var(--sk-b) 50%, var(--sk-a) 70%) !important;
  background-clip: content-box !important;
  background-origin: content-box !important;
  background-size: 200% 100% !important;
  color: transparent !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") 0 0 / 100% 1lh repeat-y content-box;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") 0 0 / 100% 1lh repeat-y content-box;
}

html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) :is(
  .section-head h2, .page-head h1, .hcat__count, .pcard__specs, .nav__title, .nav-item__label,
  .filters__title, .fgroup .acc__head > span:first-child, .check__label,
  .pblock__title, .pblock__note, .specs dt, .specs dd, .pbuy__old s, .pfit__text b, .pterms__title, .pterms__text b, .pterms__val,
  .article__body h2, .toc__title, .toc a, .ihelp__title, .ihelp__phone, .nf__title
) {
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") left center / 100% 1lh no-repeat content-box;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") left center / 100% 1lh no-repeat content-box;
}

/* 3. Короткі підписи, ціни, лічильники, бейджі, кнопки — плашка за розміром елемента */
html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) :is(
  .pcard__brand, .pcard__sku, .status, .price__now, .price__old, .ncard__meta > *, .ncard__more,
  .num, .nav-item__count, .badge, .btn, .copy-btn, .pcard__fav, .chip, .store-status > *, .stepper,
  .crumbs > a, .crumbs__current, .seg, .input, .range, .switch > span, .switch input, .check input, .check__count, .pager__btn, .pager__info,
  .pbuy__now, .fit-tag, .pterms__row--pair .ico-text, .article__body .inote
) {
  background-image: linear-gradient(90deg, var(--sk-a) 30%, var(--sk-b) 50%, var(--sk-a) 70%) !important;
  background-size: 200% 100% !important;
  box-shadow: none !important;
  color: transparent !important;
  text-decoration-color: transparent !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
}

html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) :is(.btn, .copy-btn, .pcard__fav, .chip, .badge, .status, .ncard__meta > *, .ncard__more, .store-status > *, .stepper, .crumbs > a, .seg, .range, .switch > span, .pager__btn, .fit-tag, .pterms__row--pair .ico-text) * {
  visibility: hidden !important;
}

/* Шапка: лого, авто, пошук, «Обране», кошик — плашки за розміром елементів */
html.is-skeleton .header :is(.logo, .btn, .hdr-act, .search__input) {
  background-image: linear-gradient(90deg, var(--sk-a) 30%, var(--sk-b) 50%, var(--sk-a) 70%) !important;
  background-size: 200% 100% !important;
  box-shadow: none !important;
  color: transparent !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
}

html.is-skeleton .header :is(.logo, .btn, .hdr-act) *,
html.is-skeleton .header .search__wrap > .input-wrap__icon {
  visibility: hidden !important;
}

html.is-skeleton .header .search__input::placeholder {
  color: transparent !important;
}

/* Верхня темна смуга — напівпрозорі плашки */
html.is-skeleton .topbar :is(.topbar__item, .topbar__link, .topbar__btn) {
  background-image: linear-gradient(90deg, rgba(255, 255, 255, 0.07) 30%, rgba(255, 255, 255, 0.18) 50%, rgba(255, 255, 255, 0.07) 70%) !important;
  background-size: 200% 100% !important;
  border-radius: var(--r-xs);
  color: transparent !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
}

html.is-skeleton .topbar :is(.topbar__item, .topbar__link, .topbar__btn) * {
  visibility: hidden !important;
}

html.is-skeleton :is(.header, .topbar) {
  pointer-events: none;
}

html.is-skeleton .header.is-over {
  background: rgba(255, 255, 255, 0.94) !important;
  box-shadow: 0 1px 0 rgba(16, 24, 40, 0.04), 0 4px 16px -8px rgba(16, 24, 40, 0.1) !important;
}

html.is-skeleton .header.is-over::before {
  opacity: 0 !important;
}

/* Футер (темний): напівпрозорі плашки; опис — смужками по рядках */
html.is-skeleton .footer {
  --sk-a: rgba(255, 255, 255, 0.06);
  --sk-b: rgba(255, 255, 255, 0.16);
  pointer-events: none;
}

html.is-skeleton .footer :is(
  .logo, .social, .footer__title, .footer__link, .footer__phone, .btn, .pay-group__title, .pay-logo,
  .footer__bottom > span, .footer__legal a
) {
  background-image: linear-gradient(90deg, var(--sk-a) 30%, var(--sk-b) 50%, var(--sk-a) 70%) !important;
  background-color: transparent !important;
  background-size: 200% 100% !important;
  border-radius: var(--r-xs);
  box-shadow: none !important;
  color: transparent !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
}

html.is-skeleton .footer :is(.logo, .social, .footer__link, .footer__phone, .btn, .pay-logo, .footer__legal a) * {
  visibility: hidden !important;
}

/* Блокові підписи на всю ширину колонки — смужка точно на ширину тексту (ліворуч вирівняні — нічого не зсувається) */
html.is-skeleton .footer :is(.footer__title, .pay-group__title, .footer__phone) {
  width: fit-content;
}

html.is-skeleton .footer .footer__about {
  background-image: linear-gradient(90deg, var(--sk-a) 30%, var(--sk-b) 50%, var(--sk-a) 70%) !important;
  background-size: 200% 100% !important;
  color: transparent !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") 0 0 / 100% 1lh repeat-y;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") 0 0 / 100% 1lh repeat-y;
}

/* Стрілки пунктів меню — сховані */
html.is-skeleton .panel--left .nav-item__chev {
  visibility: hidden;
}

/* Каталог: роздільники крихт, стрілки груп фільтрів, підказки й іконки в полях — сховані;
   активний пункт меню — без кольорової підкладки, прапорці й перемикачі — без рамки й «кружечка» */
html.is-skeleton :is(.crumbs > svg, .acc__chevron, .input-wrap__icon, .input-wrap__suffix, .price-inputs > span) {
  visibility: hidden;
}

html.is-skeleton .switch input::before {
  visibility: hidden;
}

html.is-skeleton .input::placeholder {
  color: transparent !important;
}

html.is-skeleton .panel--left .nav-item.is-active {
  background: none;
}

html.is-skeleton .check input {
  border-color: transparent !important;
}

html.is-skeleton .range {
  border-radius: var(--r-xs);
}

/* Підпис пункту фільтра — смужка на ширину тексту (лічильник і так притиснутий праворуч) */
html.is-skeleton .check__label {
  flex: 0 1 auto;
}

/* Плашки без власного заокруглення (підписи, ціни, лого) — те саме заокруглення, що й у решти */
html.is-skeleton :is(.logo, .pcard__brand, .pcard__sku, .status, .price__now, .pager__info, .store-status > *, .switch > span, .ncard__more, .ncard__meta > *, .pbuy__now, .pterms__row--pair .ico-text) {
  border-radius: var(--r-xs);
}

/* Крихти — смужки по тексту (без внутрішніх відступів посилань), усі однакові */
html.is-skeleton .crumbs :is(a, .crumbs__current) {
  background-clip: content-box !important;
  background-origin: content-box !important;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") left center / 100% 1lh no-repeat content-box;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") left center / 100% 1lh no-repeat content-box;
}

/* Сторінка товару: стрілка «Сумісність з авто», іконка в примітці, позначка активної підкатегорії — сховані;
   підписи в колонках блоку купівлі — смужки на ширину тексту (вирівняні ліворуч — нічого не зсувається) */
html.is-skeleton :is(.pfit__chev, .pblock__note > svg) {
  visibility: hidden;
}

html.is-skeleton .panel--left .nav-sub__item.is-active::before {
  visibility: hidden;
}

html.is-skeleton :is(.pfit__text, .pterms__text) > :not(.pterms__line) {
  align-self: flex-start;
}

html.is-skeleton :is(.pblock__title, .pterms__title) {
  width: fit-content;
}

/* Стаття: посилання й виділення в тексті — теж прозорі; логотипи операторів у «Залишились питання?» сховані;
   пункт змісту — без підсвітки; заголовки блоків і телефони — смужки на ширину тексту */
html.is-skeleton .article__body * {
  color: transparent !important;
  text-decoration-color: transparent !important;
}

html.is-skeleton .ihelp__phone img {
  visibility: hidden;
}

html.is-skeleton .toc a.is-active {
  background: none;
}

html.is-skeleton .toc a::before {
  visibility: hidden;
}

html.is-skeleton :is(.toc__title, .toc a, .ihelp__title, .ihelp__phone) {
  width: fit-content;
}

/* Довідка: увесь текст прозорий (смужки — на рядках вище), іконки списків, логотипи операторів і номери кроків — сховані */
html.is-skeleton .help-panel * {
  color: transparent !important;
  text-decoration-color: transparent !important;
}

html.is-skeleton .help-panel :is(li > svg, .op-logo, .icontact__go) {
  visibility: hidden;
}

html.is-skeleton .isteps li::before {
  visibility: hidden;
}

html.is-skeleton .nf__code {
  border-radius: var(--r-xl);
}

/* «Показано 1–12 з 20» — смужка на ширину тексту (вирівняний ліворуч — нічого не зсувається) */
html.is-skeleton .pager__info {
  width: fit-content;
}

/* Стара ціна над новою — окрема смужка з проміжком, а не одна фігура з новою */
html.is-skeleton .price__old {
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") left center / 100% 1lh no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Crect y='18%25' width='100%25' height='64%25' rx='4'/%3E%3C/svg%3E") left center / 100% 1lh no-repeat;
}

/* Текст усередині заглушок (посилання в назвах тощо) — теж прозорий */
html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) :is(.pcard__title, .ncard__title, .section-head h2) * {
  color: transparent !important;
}

/* Наведення під час скелетона нічого не підсвічує */
html.is-skeleton :is(.main, .news, .benefits, .panel--left, .panel--right) {
  pointer-events: none;
}

/* Окремі фото, що вантажаться пізніше (нижче екрана, модалки): скелетон на їхньому блоці */
.is-img-wait {
  background-image: linear-gradient(90deg, #e9ecf1 0%, #f4f6f9 40%, #e9ecf1 80%) !important;
  background-size: 200% 100% !important;
  animation: sk-shimmer 1.6s ease-in-out infinite;
}

:is(.hslide, .promo:not(.promo--light), .vinb).is-img-wait {
  background-image: linear-gradient(90deg, rgba(255, 255, 255, 0.03) 0%, rgba(255, 255, 255, 0.09) 40%, rgba(255, 255, 255, 0.03) 80%) !important;
}

img.img-wait {
  opacity: 0;
}

img.img-in {
  animation: fade-in 280ms var(--ease);
}

@media (prefers-reduced-motion: reduce) {
  html.is-skeleton *,
  .is-img-wait {
    animation: none !important;
  }

  img.img-in {
    animation: none;
  }
}

/* Переливання скелетона: одна світла смуга проходить блок за цикл (фон — 200% ширини блоку) */
@keyframes sk-shimmer {
  from {
    background-position: 150% 0;
  }

  to {
    background-position: -50% 0;
  }
}
