/* Карточка ленты трендов. Анатомия — по разбору piratex, палитра и шрифты наши.
   Сетку задаёт .grid из style.css: всегда три в строке, ширина до 660px.
   Поэтому все размеры здесь на clamp() — плитка ужимается вместе с окном.

   Подключается на index.html, 2.html, 2a.html и demo.html.
   Логика — в app.js, функция LEN.feed(). Данные — trends.json. */

:root{
  /* три ступени «жара» X-фактора: у piratex красный / оранжевый / янтарный,
     у нас те же три, но в тёплой фирменной гамме */
  --x3:#B8265F;
  --x2:#C97A2C;
  --x1:rgba(46,43,38,.55);
  --x1-text:#F7F4EC;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --x3:#FF8A4C;
    --x2:#D8A15E;
    --x1:rgba(234,230,218,.20);
    --x1-text:#EAE6DA;
  }
}
:root[data-theme="dark"]{
  --x3:#FF8A4C;
  --x2:#D8A15E;
  --x1:rgba(234,230,218,.20);
  --x1-text:#EAE6DA;
}

/* ---------- карточка ---------- */

.card{
  --zoom:1.8;   /* во сколько раз растёт под курсором; app.js ужимает под низкое окно */
  position:relative;z-index:1;
  display:flex;flex-direction:column;
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:clamp(6px,1vw,16px);
  overflow:hidden;
  cursor:pointer;
  transition:border-color .2s ease,transform .3s cubic-bezier(.2,.7,.2,1),
             box-shadow .3s ease,z-index 0s .3s;
}
/* Наведение только там, где есть настоящий курсор. Правка 13.09 (Елена): плитка
   под курсором растёт чуть меньше, чем вдвое, и ложится поверх соседей — они в это
   время замирают (app.js, hover()). Куда расти, считает app.js (zoomAt): масштаб от
   левого верхнего угла плюс сдвиг --dx/--dy, чтобы у края окна плитка росла внутрь
   и целиком осталась на экране. z-index падает с задержкой, чтобы уменьшающаяся
   плитка не ныряла под соседей на полпути. */
@media (hover:hover) and (pointer:fine){
  .card{transform-origin:0 0}
  .card:hover,.card:focus-within{
    z-index:20;
    border-color:var(--muted);
    transform:translate(var(--dx,0px),var(--dy,0px)) scale(var(--zoom));
    box-shadow:0 24px 48px -12px var(--scrim),0 8px 20px -8px var(--scrim);
    transition:border-color .2s ease,transform .3s cubic-bezier(.2,.7,.2,1),
               box-shadow .3s ease,z-index 0s;
  }
  .card:active{opacity:.9}
}
@media (hover:none),(pointer:coarse){
  .card:active{transform:scale(.98);opacity:.9}
}
/* сама плитка фокус больше не берёт — рамку рисуют ссылка и кнопка внутри неё */

/* ---------- обложка ---------- */
/* 3:4, как у piratex, а не 9:16: вертикальный кадр обрезается,
   зато плитка не вырастает в столб при трёх в строке */

/* Обложка — ссылка на экран 3 (17.09): первая из двух остановок клавиатуры на плитке.
   display:block и снятое подчёркивание — потому что это <a>, а не <div>, как было. */
.shot{
  position:relative;display:block;
  aspect-ratio:3/4;
  background:var(--tile-a);
  overflow:hidden;
  color:inherit;text-decoration:none;
  /* долгое касание на iPhone у ссылки вызывает меню «открыть / копировать» —
     на плитке это лишнее: она ведёт дальше одним касанием */
  -webkit-touch-callout:none;
}
/* Рамка фокуса у обложки — своим слоем поверх кадра. Обычный outline ссылки тут
   не виден: обложка и видео лежат absolute и закрашивают его собой. Скругление —
   как у плитки сверху, снизу у обложки углы прямые. */
.shot:focus-visible{outline:none}
.shot:focus-visible::after{
  content:"";position:absolute;inset:0;z-index:12;pointer-events:none;
  border:2px solid var(--focus);
  border-radius:clamp(6px,1vw,16px) clamp(6px,1vw,16px) 0 0;
}
html.flat .shot:focus-visible::after{border-radius:0}
.shot .cover,
.shot .clip{
  position:absolute;inset:0;
  width:100%;height:100%;
  object-fit:cover;
  display:block;
}
.shot .cover{transition:opacity .25s ease}
.shot .clip{opacity:0;transition:opacity .25s ease;pointer-events:none}
.card.playing .clip{opacity:1}
/* обложку под видео не прячем: видео непрозрачно и того же размера, а если под
   ним пусто (iOS выгрузил буфер, Chrome усыпил плеер) — видна обложка, не фон */

/* ?flat=1 — опыт для слабых Android: каждый <video> — отдельный слой, а скругление
   поверх него на слабом GPU — маска на плитку; здесь скругления и переходы сняты */
html.flat .card,html.flat .shot,html.flat .skel{border-radius:0}
html.flat .shot .cover,html.flat .shot .clip{transition:none}

/* нет обложки — не «No img», а тихая иконка: технических слов наружу не выносим */
.shot .empty{
  position:absolute;inset:0;
  display:grid;place-items:center;
  background:linear-gradient(160deg,var(--tile-a),var(--tile-b));
  color:var(--muted);
}
.shot .empty svg{width:clamp(16px,2.2vw,26px);height:clamp(16px,2.2vw,26px);opacity:.55}

/* два градиента — приём piratex: любой текст читается на любом кадре */
.veil{position:absolute;inset-inline:0;pointer-events:none}
.veil.t{
  top:0;height:clamp(32px,4.8vw,80px);z-index:1;
  background:linear-gradient(to bottom,rgba(0,0,0,.5),transparent);
}
.veil.b{
  bottom:0;height:clamp(40px,6vw,96px);
  background:linear-gradient(to top,rgba(0,0,0,.8),rgba(0,0,0,.4) 50%,transparent);
}

/* ---------- углы обложки ---------- */

.corner{
  position:absolute;z-index:10;
  display:flex;align-items:center;gap:clamp(3px,.55vw,7px);
}
.corner.tl{top:clamp(4px,.75vw,10px);left:clamp(4px,.75vw,10px)}
.corner.tr{top:clamp(4px,.75vw,10px);right:clamp(4px,.75vw,10px)}
.corner.bl{bottom:clamp(4px,.75vw,10px);left:clamp(4px,.75vw,10px);min-width:0}
.corner.br{bottom:clamp(4px,.75vw,10px);right:clamp(4px,.75vw,10px)}

.plat{
  width:clamp(14px,2vw,26px);height:clamp(14px,2vw,26px);
  display:block;color:#fff;
  filter:drop-shadow(0 2px 4px rgba(0,0,0,.5));
}

/* «свежак» — вместо бирюзы у piratex наш акцент */
.fresh{
  display:inline-flex;align-items:center;gap:clamp(2px,.3vw,4px);
  padding:clamp(2px,.35vw,4px) clamp(4px,.7vw,8px);
  border-radius:999px;
  background:var(--accent);color:var(--on-accent);
  font-family:"Jost","Golos Text",sans-serif;
  font-size:clamp(9px,.9vw,11px);font-weight:500;
  letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;
  box-shadow:0 2px 8px rgba(0,0,0,.3);
}
.fresh svg{width:clamp(7px,.85vw,10px);height:clamp(7px,.85vw,10px);flex:none}

.views{
  color:#fff;font-weight:600;
  font-size:clamp(11px,1.15vw,13px);line-height:1.2;
  font-variant-numeric:tabular-nums;white-space:nowrap;
  text-shadow:0 2px 6px rgba(0,0,0,.55);
}
.when{
  color:rgba(255,255,255,.62);
  font-size:clamp(9.5px,.9vw,11px);line-height:1.2;flex:none;
  text-shadow:0 2px 6px rgba(0,0,0,.5);
}

.dur{
  padding:clamp(1px,.25vw,3px) clamp(3px,.55vw,6px);
  border-radius:clamp(2px,.35vw,4px);
  /* без backdrop-filter: размытие поверх играющего видео пересчитывается
     на каждом кадре и роняет плавность на телефоне. Фон плотнее — читается так же */
  background:rgba(0,0,0,.78);
  color:#fff;font-size:clamp(9.5px,.9vw,11px);line-height:1.4;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-variant-numeric:tabular-nums;
}


/* ---------- тело карточки ---------- */

.body{
  display:flex;flex-direction:column;
  gap:clamp(3px,.6vw,6px);
  padding:clamp(5px,.95vw,10px);
}
.row{display:flex;align-items:center;gap:clamp(4px,.7vw,8px);min-width:0}
.who{
  font-size:clamp(11px,1.1vw,13px);font-weight:500;color:var(--text);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;
}

/* X-фактор объясняет себя цветом, без легенды — приём piratex */
.xf{
  margin-left:auto;flex:none;
  padding:clamp(1px,.25vw,2px) clamp(4px,.75vw,8px);
  border-radius:999px;
  font-family:"Jost","Golos Text",sans-serif;
  font-size:clamp(10px,1vw,11px);font-weight:500;
  font-variant-numeric:tabular-nums;
  color:#F7F4EC;
}
.xf.lv3{background:var(--x3)}
.xf.lv2{background:var(--x2)}
.xf.lv1{background:var(--x1);color:var(--x1-text)}

.why{
  margin:0;
  font-size:clamp(11px,1.02vw,12px);line-height:1.35;
  color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;
}
/* строка «почему в тренде» снова видна на телефоне: с двумя плитками
   в строке места под неё хватает (было спрятано, пока их было три) */

.withme{
  width:100%;
  font-family:"Jost","Golos Text",sans-serif;
  font-size:11px;font-weight:500;
  letter-spacing:clamp(.02em,.25vw,.12em);
  white-space:nowrap;
  padding:clamp(7px,1.2vw,10px) 2px;
  border:0;border-radius:clamp(3px,.5vw,8px);cursor:pointer;
  background:var(--accent);color:var(--on-accent);
  transition:background-color .2s ease;
}
.withme:hover{background:var(--accent-hover)}

/* ---------- заглушки на время загрузки ---------- */
/* piratex рисует их той же формы, что карточка — переход получается бесшовным */

.skel{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:clamp(6px,1vw,16px);
  overflow:hidden;
}
.skel .s-shot{aspect-ratio:3/4;background:var(--tile-a)}
.skel .s-body{
  display:flex;flex-direction:column;
  gap:clamp(4px,.8vw,8px);
  padding:clamp(7px,1.2vw,12px) clamp(5px,.95vw,10px);
}
.skel .s-line{height:clamp(7px,1vw,11px);border-radius:4px;background:var(--tile-a)}
.skel .s-line.w70{width:70%}
.skel .s-line.w45{width:45%}
.skel .s-line.tall{height:clamp(20px,3vw,30px);border-radius:6px}
.skel,.skel *{animation:pulse 1.5s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}

.feed-error{
  grid-column:1/-1;text-align:center;
  color:var(--muted);font-size:13px;padding:36px 0;
}
/* «свои» тренды (17.09): none — своих нет, строка над лентой; end — свои кончились,
   черта с подписью под последним своим. Во всю ширину сетки, как подписи ленты */
.feed-sep{
  grid-column:1/-1;margin:0;text-align:center;text-wrap:balance;
  font-family:"Golos Text",sans-serif;font-size:13.5px;letter-spacing:.01em;color:var(--muted);
}
.feed-sep.none{margin-bottom:2px}
.feed-sep.end{margin:10px 0 4px;padding-top:12px;border-top:1px solid var(--line)}

/* лента не пришла: строка и «ещё раз» (17.09). Сама строка — общая .oops (18.09),
   здесь только отступ до кнопки; вторая строка — подсказка себе, она остаётся серой */
.feed-error p{margin:0 0 16px}
.feed-error p.note{margin-top:-8px;font-size:13px;color:var(--muted)}

/* ---------- страница-объяснение demo.html ---------- */

.demobar{
  display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;
  margin:18px 0 0;padding:11px 15px;
  border:1px dashed var(--line);border-radius:10px;
  background:var(--surface);
  font-size:13px;line-height:1.5;color:var(--muted);
}
.demobar b{
  font-family:"Jost","Golos Text",sans-serif;
  font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--accent);font-weight:500;
}
.demohead{padding:clamp(34px,6vw,60px) 0 clamp(18px,3vw,28px)}
.demohead h1{max-width:20ch;margin:0}
.demohead p{
  margin:14px auto 0;max-width:46ch;
  color:var(--muted);font-size:clamp(14px,1.7vw,16px);line-height:1.55;
}

@media (prefers-reduced-motion:reduce){
  .skel,.skel *{animation:none}
  .card:hover,.card:focus-within{transform:none}
}
