/* Upload progress */
.upload-progress { position: relative; height: 10px; background: rgba(0,0,0,.08); border-radius: 6px; overflow: hidden; max-width: 360px; margin: 6px 0 10px; }
.upload-progress.hidden { display: none; }
.upload-progress__bar { position: absolute; left: 0; top: 0; bottom: 0; background: linear-gradient(90deg, #4caf50, #2e7d32); width: 0%; transition: width .2s ease; }
.upload-progress__text { position: absolute; right: 6px; top: 50%; transform: translateY(-50%); font-size: 12px; color: #fff; text-shadow: 0 1px 2px rgba(0,0,0,.4); }
/* Плавающая нижняя панель действий в админке */
.admin-footer {
  position: sticky;
  bottom: 0;
  background: #fff;
  padding: 16px 12px;
  display: flex;
  align-items: center;
  gap: 12px;
  border-top: 1px solid rgba(0,0,0,.08);
  z-index: 1000;
  margin-top: 32px; /* большой отступ от основных действий */
}

.admin-footer button {
  min-width: 120px;
  padding: 12px 16px;
}

/* Яркая кнопка Сброса */
#btn-reset-all {
  background: #d7263d;
  color: #fff;
  border: 2px solid #b01f32;
}
#btn-reset-all:hover {
  filter: brightness(1.05);
}

/* На узких экранах фиксируем навигацию к низу экрана */
@media (max-width: 640px) {
  .admin-footer.admin-nav {
    position: fixed;
    left: 0; right: 0; bottom: 0;
    padding: 16px;
    background: rgba(255,255,255,0.98);
    backdrop-filter: saturate(1.2) blur(6px);
  }
  .admin-footer.admin-nav + * { margin-bottom: 72px; }
}

/* Нижняя навигация: одна строка, две колонки (Назад/Далее), отделена от других кнопок */
.admin-footer.admin-nav {
  display: flex;
  justify-content: space-between;
  gap: 16px;
}
.admin-footer.admin-nav button {
  flex: 1 1 0;
}
/* Минимальный CSS, сохраняющий эстетику "как без CSS".
   Ничего не меняем в цветах и шрифтах, только адаптивность и базовая удобочитаемость. */

/* Адаптивные медиа */
img,
svg,
video,
canvas,
iframe {
  max-width: 100%;
  height: auto;
}

/* Контейнер и базовая типографика */
html { /* увеличиваем базовый размер, чтобы все элементы стали крупнее */
  font-size: 18px;
  transition: background-color .25s ease, color .25s ease;
  background: #fff; /* гарантируем белый фон у корня */
  height: 100svh; /* фиксируем высоту под экран, убираем длинный скролл */
  overscroll-behavior-y: none;
}

body {
  max-width: 68ch; /* комфортная ширина строки для чтения */
  margin: 0 auto;
  padding: 0 1rem 1rem; /* чуть меньше нижний отступ, чтобы не создавать лишнюю высоту */
  line-height: 1.6;
  /* Системный стек шрифтов (нативный вид на каждой платформе) */
  font-family: "SF Pro Text", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial,
               "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji",
               "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  /* Safe area отступы (fallback к env() если JS ещё не обновил переменные) */
  padding-top: calc(var(--safe-top, env(safe-area-inset-top, 0px)));
  padding-bottom: calc(var(--safe-bottom, env(safe-area-inset-bottom, 0px)) + 3.5rem);
  padding-left: calc(1rem + var(--safe-left, env(safe-area-inset-left, 0px)));
  padding-right: calc(1rem + var(--safe-right, env(safe-area-inset-right, 0px)));
  transition: background-color .25s ease, color .25s ease;
  background: #fff; /* страхуемся от чёрного фона при оверскролле */
  color: #000; /* всегда чёрный текст в светлой теме */
  height: 100svh; /* не больше высоты экрана */
  overflow-y: hidden; /* убираем скролл на странице */
  overflow-x: hidden;
}

/* Блокируем прокрутку во время показа полароида */
body.stream-lock {
  overflow: hidden !important;
  height: 100vh;
  touch-action: none;
}

/* ===== Локальные шрифты (кешируемые) ===== */
/* Используем пути /fonts/... (раздаются с Cache-Control: immutable) */
@font-face {
  font-family: 'SF Pro Text';
  src: url('/fonts/SFProText-Regular.ttf') format('truetype');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'SF Pro Text';
  src: url('/fonts/SFProText-Medium.ttf') format('truetype');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'SF Pro Text';
  src: url('/fonts/SFProText-Semibold.ttf') format('truetype');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'SF Pro Text';
  src: url('/fonts/SFProText-Bold.ttf') format('truetype');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'SF Pro Text';
  src: url('/fonts/SFProText-Heavy.ttf') format('truetype');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
}

main { background: #fff; min-height: 0; }

/* Утилита для скрытия */
.hidden { display: none !important; }

/* В fullscreen дополнительно опускаем контент ниже шапки Telegram */
body.fullscreen-active {
  padding-top: calc(var(--safe-top, env(safe-area-inset-top, 0px)) + 25px);
}

/* SPA: по умолчанию скрываем все view, кроме активного */
.view { display: none; }
.view.view--active { display: block; }

header,
footer {
  margin: 1rem 0;
}

h1 {
  font-size: 2.5rem; /* гигантизм */
  line-height: 1.25;
  margin: 1.25rem 0 0.75rem;
}

h2 {
  font-size: 2rem; /* гигантизм для подзаголовков */
  line-height: 1.35;
  margin: 1.25rem 0 0.75rem; /* немного больше снизу для разделения секций */
}

/* Ряд кнопок выбора роли с нормальным отступом */
.view p {
  display: flex;
  gap: 0.75rem;
  flex-wrap: wrap;
}

/* Разделы и горизонтальные линии */
section {
  margin: 1.5rem 0 2rem; /* больше воздуха */
}

hr {
  margin: 2rem 0;
}

/* Сетка лотов 2xN и карточка лота */
.lot-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1rem; /* аккуратные отступы между карточками */
}

.lot-card {
  display: block;
  text-decoration: none; /* ссылки без подчёркивания, в духе "без CSS" */
  color: inherit; /* цвета браузера */
}

.lot-thumb {
  width: 100%;
  height: auto;
  display: block;
  /* Для реальных фото поддержим пропорции и кроп */
  aspect-ratio: 1 / 1; /* квадратные превью */
  object-fit: cover;
}

.lot-title {
  margin-top: 0.4rem;
  font-weight: 400; /* не жирным */
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis; /* длинные заголовки с троеточием */
}

.lot-price {
  margin-top: 0.02rem; /* минимальный отступ между названием и ценой в списке */
}

/* Детальная страница лота: цена в 2 раза больше названия */
.view[data-lot] .price strong {
  font-size: 2rem; /* цена в 2 раза больше, чем описание/название (~1rem) */
}

/* Детальная страница: выравниваем отступы и размеры */
.view[data-lot] h2 {
  font-size: 1rem; /* как описание */
  font-weight: 700; /* жирное */
  margin: 0.3rem 0 0.3rem; /* немного компактнее */
}
.view[data-lot] p { margin: 0.45rem 0; }
.view[data-lot] > p:first-child { margin-top: calc(var(--safe-top, env(safe-area-inset-top, 0px)) + 0.0rem); }
.view[data-lot] .price { margin: 0.08rem 0 0.06rem; }

/* Респонсив: 2 колонки на телефоне, 3 на средних, 4 на широких экранах */
@media (min-width: 600px) {
  .lot-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (min-width: 900px) {
  .lot-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* Тёмная тема (минимум изменений) */
body.theme-dark {
  background-color: #000;
  color: #fff;
}

/* Кнопки в тёмной теме — сохраняем форму браузера, меняем только цвет текста */
button { transition: color .25s ease, background-color .25s ease, border-color .25s ease; }
body.theme-dark button { color: #333; }

/* Всегда 2 колонки и на маленьких экранах (как просили) */
@media (max-width: 360px) {
  .lot-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Доп. нижняя safe-area подвал для списков и экранов лота */
#view-list, .view[data-lot] {
  padding-bottom: calc(var(--safe-bottom, env(safe-area-inset-bottom, 0px)) + 2rem);
}

p {
  margin: 0.75rem 0;
}

/* Область стрима читаема на светлом фоне */
pre {
  padding: 0.75rem;
  border: 1px solid #ddd;
  border-radius: 6px;
  background: #fff;
  color: inherit;
}

/* Оверлей для показа квадратной картинки без прогрессивной загрузки */
.overlay {
  position: relative;
  width: 100%;
  max-width: 40rem;
  margin: 0 0 1rem 0;
}
.overlay img {
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1; /* квадрат */
  object-fit: cover;   /* кроп по центру */
  border: 1px solid #ddd;
  border-radius: 6px;
  background: #fff; /* предотвращаем тёмные мерцания */
}

/* ===== Полароид и вспышка анимации показа ===== */
.flash {
  position: fixed;
  inset: 0;
  background: #000; /* чёрная вспышка по просьбе */
  opacity: 0;
  pointer-events: none;
  z-index: 9999;
}

.flash.flash--active { animation: flash-blink 320ms ease-out both; }

@keyframes flash-blink {
  0% { opacity: 0; }
  20% { opacity: 1; }
  60% { opacity: 1; }
  100% { opacity: 0; }
}

.polaroid {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9998;
}

.polaroid-inner {
  --final-rot: -7deg; /* перезапишем из JS случайным значением */
  position: fixed;
  top: 50%;
  left: 50%;
  width: min(92vmin, 40rem); /* ещё больше фото */
  background: #000; /* чёрная карточка */
  /* Толще боковые рамки, верх/низ чуть тоньше */
  border-top: 22px solid #000;
  border-right: 32px solid #000;
  border-bottom: 22px solid #000;
  border-left: 32px solid #000;
  border-radius: 0; /* убираем скругления у рамки */
  box-shadow: 0 8px 28px rgba(0,0,0,.38);
  transform: translate(-50%, 110%) rotate(0deg) scale(1); /* старт ниже экрана относительно центра */
  transform-origin: 50% 50%;
  will-change: transform, box-shadow;
}

.polaroid-inner img {
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  border-radius: 0; /* убираем скругления у фото */
}

.polaroid-caption {
  padding: 0.85rem 1rem 1.35rem;
  text-align: center;
  font-weight: 800;
  color: #fff; /* белая подпись на чёрной карточке */
  font-size: 1.6rem; /* ещё больше текст */
}

.polaroid.state-peek .polaroid-inner { animation: polaroid-peek 2800ms ease-out both; }
.polaroid.state-fling .polaroid-inner { animation: polaroid-fling 700ms cubic-bezier(.2,.9,.2,1.1) both; }
.polaroid.state-drop  .polaroid-inner { animation: polaroid-drop 900ms cubic-bezier(.18,.8,.2,1) both; }

@keyframes polaroid-peek {
  0%   { transform: translate(-50%, 110%) rotate(0deg) scale(1); }
  80%  { transform: translate(-50%, 38%) rotate(0deg) scale(1); } /* чуть выше, чем раньше */
  100% { transform: translate(-50%, 38%) rotate(0deg) scale(1); }
}

@keyframes polaroid-fling {
  0%   { transform: translate(-50%, 38%) rotate(0deg) scale(0.96); }
  100% { transform: translate(-50%, -50%) rotate(0deg) scale(1); }
}

@keyframes polaroid-drop {
  0%   { transform: translate(-50%, -50%) rotate(0deg) scale(1); box-shadow: 0 2px 10px rgba(0,0,0,.18); }
  80%  { transform: translate(-50%, -50%) rotate(var(--final-rot)) scale(1); box-shadow: 0 20px 36px rgba(0,0,0,.3); }
  100% { transform: translate(-50%, -50%) rotate(calc(var(--final-rot) + 0deg)) scale(1); box-shadow: 0 12px 22px rgba(0,0,0,.25); }
}

/* Экран ожидания — огромный текст по центру */
#viewer-wait {
  position: fixed;
  inset: 0;
  display: grid;
  place-items: center;
  font-size: clamp(2rem, 10vw, 6rem);
  font-weight: 900;
  text-align: center;
}

ul {
  padding-left: 1.25rem; /* сохраняем маркеры, но чуть аккуратнее */
}

/* Читаемость списков лотов и истории ставок */
ul li {
  margin-bottom: 0.5rem;
}

/* На главной странице делаем элементы списка лотов более разреженными */
main ul > li {
  margin: 1.25rem 0 1.75rem;
}

/* Единый акцент для цены */
.price {
  margin-top: 0.4rem;
}

/* Последняя ставка — менее акцентная, компактная строка */
.last-bid {
  font-size: 0.95rem;
  margin: 0.5rem 0 1rem;
}

/* Усиление визуально для значения цены */
.price strong {
  font-size: 1.6rem;
}

/* На главной странице — чуть больше отступ от картинки до цены */
#view-list .price {
  margin-top: 0.75rem;
}

/* Главные ссылки названий лотов на главной странице — чуть крупнее и жирнее */
main ul li > a:first-child {
  font-size: 1.25rem; /* крупнее заголовок лота в списке */
  font-weight: 600;
}

/* Формы: на узких экранах элементы на всю ширину */
input,
select,
textarea,
button {
  box-sizing: border-box;
}

label {
  font-weight: 600; /* лёгкая иерархия без изменения цветов */
  display: inline-block;
  margin-bottom: 0.25rem;
}

input,
select,
textarea {
  padding: 0.7rem 0.85rem; /* крупнее поля */
  font-size: 1.125rem; /* гигантизм для текстовых полей */
}

button {
  padding: 0.75rem 1rem; /* крупнее кнопки */
  font-size: 1.125rem;
  font-weight: 600;
  cursor: pointer;
}

/* Чуть выделим важные числа (например, цену) без изменения цвета */
p strong,
li strong {
  font-size: 1.375rem; /* крупнее цена и важные числа */
}

@media (max-width: 480px) {
  input,
  select,
  textarea,
  button {
    width: 100%;
  }
}

/* Не трогаем цвета ссылок и системные шрифты браузера. */
