/* ============================================================
   ЗАДАЧИ: ДОК И ПАНЕЛЬ (docs/QUESTS-DESIGN.md §17).

   Один набор правил на два макета. Разница между вебом и телефоном — только в
   том, ОТКУДА выезжает панель: справа во всю высоту сцены на десктопе, шторкой
   снизу на телефоне. Внутренности (карточки, шкалы, сундук, доски) не
   раздваиваются: вторая раскладка карточки — это гарантированное расхождение
   толщины шкалы при первой же правке.

   Слои. Панель обязана лежать выше нижней навигации (z 50) и ниже тоста
   (z 100): тост — это подтверждение забора, и прятать его под панелью, из
   которой забирают, нельзя.

   Цвета и радиусы — только из токенов (/shared/styles/tokens.css).
   ============================================================ */

/* ---- строка задач на телефоне (#qsStrip) ---------------------------------- */
/* В ПОТОКЕ лобби, между шапкой и рейтинговым HUD, и в его же стиле: это два
   ответа на один вопрос «где я сейчас», и выглядеть они должны родственно.
   Ни плавающего элемента, ни карточки: первое на узком экране читается чужим
   слоем поверх контента, второе занимает место, которого у первого экрана нет.

   Сегмент на дейлик — весь смысл этой формы: три полоски занимают меньше
   строки, а говорят больше, чем «1/3», потому что показывают И состояние
   каждой задачи, И прогресс внутри незакрытой.

   Имя `.qsBar` для неё занято — это шкала прогресса внутри карточки задачи, и её
   правило `.qsBar i{height:100%}` обнуляло здесь все иконки и сегменты. Отсюда
   свой префикс `qss*` у внутренностей строки. */
/* Поля и радиус — ровно как у рейтинговой карточки под ней (`.hudcard`:
   margin 2px 18px, radius 24px): строка и карточка стоят вплотную, и любое
   расхождение по краю читается как съехавшая вёрстка, а не как два блока. */
.qsStrip{display:none;align-items:center;gap:10px;margin:2px 18px 12px;padding:11px 16px;
  border-radius:20px;cursor:pointer;
  border:1px solid var(--bord);background:var(--card);
  transition:border-color .2s ease,background .2s ease}
.qsStrip.has{display:flex}
.qsStrip:active{background:rgba(255,255,255,.05)}
.qsStrip.alert{border-color:rgba(255,194,75,.4);background:linear-gradient(120deg,rgba(255,194,75,.1),var(--card) 70%)}

.qssIc{flex:none;font-size:19px;color:var(--p1)}
.qsStrip.alert .qssIc{color:var(--gold)}

.qssSegs{flex:1;min-width:0;display:flex;gap:5px}
.qssSeg{flex:1;height:7px;border-radius:999px;overflow:hidden;background:rgba(255,255,255,.08)}
.qssSeg b{display:block;height:100%;border-radius:999px;width:0;
  background:linear-gradient(90deg,var(--p2),var(--p1));transition:width .35s var(--ease-glass)}
/* Забрано — бирюза, готово к забору — золото, идёт — сирень. Тот же язык
   цвета, что у шкал в панели: там золотая шкала тоже значит «можно забрать». */
.qssSeg.done b{background:rgba(45,226,197,.7)}
.qssSeg.ready b{background:linear-gradient(90deg,var(--gold2),var(--gold));box-shadow:0 0 10px rgba(255,194,75,.5)}

.qssFlame{flex:none;display:inline-flex;align-items:center;gap:2px;padding:1px 6px;border-radius:999px;
  font-family:var(--num);font-weight:700;font-size:10.5px;color:#FFD79A;
  background:rgba(255,157,43,.16);border:1px solid rgba(255,157,43,.32)}
.qssFlame i{font-size:11px}
.qssCount{flex:none;font-family:var(--num);font-weight:700;font-size:12.5px;color:var(--muted)}
.qsStrip.alert .qssCount{color:var(--gold)}
.qssAr{flex:none;font-size:16px;color:var(--dim)}
.qsStrip.alert .qssAr{color:var(--gold)}

/* ---- плавающий док (#qsDock) — только веб ------------------------------- */
/* На телефоне его нет вовсе: там задачи стоят строкой в потоке (см. выше).
   Здесь углы сцены пусты, нижней навигации нет, и карточке есть где висеть —
   поэтому вход в задачи виден не только в лобби, но и на «Клубах» с профилем.
   Список экранов — тот же, что у нижней навигации (FULLSCREEN в src/shell.js),
   плюс отдельно исключён стол: задачам поверх сукна места нет. */
.qsDock{display:none;position:absolute;z-index:60;
  align-items:center;cursor:pointer;color:var(--text);font-family:var(--font);text-align:left}

.qsdRing{position:relative;flex:none;border-radius:50%;
  display:flex;align-items:center;justify-content:center}
/* Кольцо — это conic-gradient на самом узле, поэтому «дырка» рисуется маской
   поверх: второй элемент внутри держал бы ту же геометрию в двух местах. */
.qsdRing::before{content:"";position:absolute;border-radius:50%}
.qsdRing b{position:relative;font-family:var(--num);font-weight:700}
.qsdTx{min-width:0;display:flex}
.qsdTx b{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:800;white-space:nowrap}
.qsdTx small{min-width:0;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qsDock.alert .qsdTx small{color:var(--gold2)}
.qsdFlame{display:inline-flex;align-items:center;gap:2px;padding:1px 6px;border-radius:999px;
  font-family:var(--num);font-weight:700;font-size:10.5px;color:#FFD79A;
  background:rgba(255,157,43,.16);border:1px solid rgba(255,157,43,.32)}
.qsdFlame i{font-size:11px}
.qsdDot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--gold);
  box-shadow:0 0 0 3px rgba(255,194,75,.18)}

/* Точка на пункте сайдбара: повод забрать награду не должен исчезать вместе с
   доком, когда панель открыта или когда игрок ушёл со стола. */
.navDot{display:none;width:7px;height:7px;border-radius:50%;background:var(--gold);
  box-shadow:0 0 0 3px rgba(255,194,75,.16)}
.navDot.on{display:block}

/* ---- панель ------------------------------------------------------------ */
.qsScrim{position:absolute;inset:0;z-index:65;opacity:0;pointer-events:none;
  background:rgba(6,4,14,.5);backdrop-filter:blur(1.5px);transition:opacity .22s ease}
.qsScrim.on{opacity:1;pointer-events:auto}

.qsPanel{position:absolute;z-index:70;display:flex;flex-direction:column;
  background:linear-gradient(180deg,#120e26,#0b0818);
  border:1px solid var(--lg-brd);box-shadow:-18px 0 48px rgba(0,0,0,.5);
  visibility:hidden;transition:transform .26s var(--ease-glass),visibility .26s}
.qsPanel.on{visibility:visible;transform:none}

/* Телефон: шторка снизу. Высота ограничена, чтобы за ней было видно, что
   контент на месте, — панель не «переход на другой экран». */
.qsPanel{left:0;right:0;bottom:0;max-height:86dvh;border-radius:20px 20px 0 0;
  transform:translateY(101%)}
/* Ручка шторки: на телефоне панель тянут вниз глазами, и край без неё читается
   как обрезанная страница. */
.qsPanel::before{content:"";position:absolute;top:7px;left:50%;transform:translateX(-50%);
  width:38px;height:4px;border-radius:999px;background:rgba(255,255,255,.18)}

.qsPhead{flex:none;display:flex;align-items:center;gap:10px;padding:18px 16px 10px}
.qsPhead>b{flex:1;display:flex;align-items:center;gap:8px;font-family:'Unbounded','Rajdhani',var(--font);
  font-weight:800;font-size:19px}
.qsPhead>b i{font-size:19px;color:var(--gold)}
.qsClose{flex:none;width:32px;height:32px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--bord);background:var(--glass);color:var(--muted)}
.qsClose i{font-size:18px}
.qsClose:active{transform:scale(.94)}

.qsStreak{display:flex;align-items:center;gap:6px}
.qsStreak small{font-size:10.5px;color:var(--dim)}
.qsFlame{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:999px;
  font-family:var(--num);font-weight:700;font-size:11.5px;color:#FFD79A;
  background:rgba(255,157,43,.16);border:1px solid rgba(255,157,43,.32)}
.qsFlame i{font-size:13px}

/* Вкладки — сегментированный переключатель, а не три ссылки: их ровно три и они
   равноправны. */
.qsPtabs{flex:none;display:flex;gap:4px;margin:0 16px 12px;padding:4px;
  border-radius:14px;background:rgba(255,255,255,.04);border:1px solid var(--bord)}
.qsPtab{flex:1;padding:8px 6px;border:0;border-radius:10px;background:0;
  font-family:var(--font);font-size:12.5px;font-weight:700;color:var(--muted)}
.qsPtab.on{color:var(--text);background:rgba(124,92,255,.22);box-shadow:0 1px 0 rgba(255,255,255,.06) inset}

.qsPbody{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  padding:0 16px calc(20px + env(safe-area-inset-bottom));scrollbar-width:none}
.qsPbody::-webkit-scrollbar{display:none}

.qsSec{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:2px 0 10px}
.qsSec h3{font-family:'Rajdhani',var(--font);font-weight:700;font-size:11px;
  letter-spacing:2.2px;text-transform:uppercase;color:var(--muted);margin:0}
.qsLeft{display:inline-flex;align-items:center;gap:4px;
  font-family:var(--num);font-weight:700;font-size:11px;color:var(--dim);white-space:nowrap}
.qsLeft i{font-size:13px}

/* ---- карточка задачи --------------------------------------------------- */
.qsCard,.qsChest{display:flex;gap:11px;margin-bottom:9px;padding:12px;
  border-radius:var(--r-lg);border:1px solid var(--bord);background:var(--card)}
.qsIc{flex:none;width:38px;height:38px;border-radius:12px;
  display:flex;align-items:center;justify-content:center}
.qsIc i{font-size:20px}
.qsIc.teal{background:rgba(45,226,197,.12);color:var(--teal)}
.qsIc.gold{background:rgba(255,194,75,.12);color:var(--gold)}
.qsIc.violet{background:rgba(124,92,255,.16);color:#A996FF}
.qsIc.mag{background:rgba(177,75,255,.14);color:var(--mag)}
.qsIc.red{background:rgba(255,92,110,.13);color:var(--red)}

.qsMain{flex:1;min-width:0}
.qsTop{display:flex;align-items:flex-start;gap:9px}
.qsTitle{flex:1;font-size:13.5px;font-weight:700;line-height:1.3}
.qsRew{flex:none;display:flex;align-items:center;gap:5px}
.qsPill{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:8px;
  font-family:var(--num);font-weight:700;font-size:11px;white-space:nowrap;
  color:var(--gold);background:rgba(255,194,75,.1)}
.qsPill i{font-size:12px}
.qsPill.xp{color:var(--teal);background:rgba(45,226,197,.1)}
.qsPill.item{color:var(--mag);background:rgba(177,75,255,.12)}
.qsCond{font-size:11px;color:var(--dim);margin:3px 0 9px}

.qsFoot{display:flex;align-items:center;gap:9px}
.qsBar{flex:1;min-width:40px;height:6px;border-radius:999px;overflow:hidden;background:rgba(255,255,255,.07)}
.qsBar i{display:block;height:100%;border-radius:999px;
  background:linear-gradient(90deg,var(--p2),var(--p1));transition:width .35s var(--ease-glass)}
.qsCount{flex:none;font-family:var(--num);font-weight:700;font-size:12px;color:var(--muted);white-space:nowrap}

/* Выполненная задача перекрашивает и шкалу, и рамку: до кнопки «Забрать» глаз
   доходит вторым, а цвет читается сразу. */
.qsCard.ready,.qsChest.ready{border-color:rgba(255,194,75,.42);background:linear-gradient(160deg,rgba(255,194,75,.09),var(--card) 60%)}
.qsCard.ready .qsBar i,.qsChest.ready .qsBar i{background:linear-gradient(90deg,var(--gold2),var(--gold))}
.qsCard.done,.qsChest.done{opacity:.5}
.qsCard.done .qsBar i,.qsChest.done .qsBar i{background:rgba(45,226,197,.45)}

.qsNote{font-size:11px;color:var(--amber);margin-top:8px;line-height:1.4}
.qsTag{flex:none;display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--teal)}
.qsTag i{font-size:14px}

.qsBtn{flex:none;display:inline-flex;align-items:center;gap:5px;cursor:pointer;
  padding:7px 12px;border-radius:11px;border:1px solid transparent;
  font-family:var(--font);font-size:12px;font-weight:700;
  color:#2A1A00;background:linear-gradient(135deg,#FFD873,var(--gold));
  box-shadow:0 4px 16px rgba(255,194,75,.26)}
.qsBtn i{font-size:14px}
.qsBtn:active{transform:scale(.95)}
.qsBtn.ghost{color:var(--text);background:var(--glass);border-color:var(--bord);box-shadow:none}
.qsIcBtn{flex:none;width:30px;height:30px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--bord);background:var(--glass);color:var(--muted)}
.qsIcBtn i{font-size:15px}
.qsIcBtn:active{transform:scale(.94)}

/* Сундук — мета-цель, и он обязан выглядеть крупнее задачи, иначе читается как
   четвёртая из них. Золото здесь плотнее всего в фиче: это её главный приз. */
.qsChest{margin-bottom:14px;padding:13px;
  border-color:rgba(255,194,75,.34);
  background:linear-gradient(150deg,rgba(255,194,75,.15),rgba(124,92,255,.07) 72%,var(--card))}
.qsChest .qsIc{border:1px solid rgba(255,194,75,.32);background:rgba(255,194,75,.16)}
.qsChest .qsTitle{font-family:'Rajdhani',var(--font);font-size:15px;letter-spacing:.2px;color:#FFE3A6}
/* Шкала сундука золотая и пока он набирается: «золото = готово» сундук не
   нарушает — у готового есть и свечение, и кнопка, а тут золото говорит о
   призе, а не о состоянии. */
.qsChest .qsBar i{background:linear-gradient(90deg,rgba(245,166,35,.55),rgba(255,194,75,.75))}
.qsChest.ready{border-color:rgba(255,194,75,.6);
  box-shadow:0 0 26px rgba(255,194,75,.14) inset,0 8px 26px rgba(0,0,0,.35)}

.qsEmpty{padding:22px 0;text-align:center;font-size:12.5px;color:var(--dim)}
.qsHint{font-size:11px;color:var(--dim);line-height:1.45;margin:12px 0 0}

/* ---- доски ------------------------------------------------------------- */
.qsBtabs{display:flex;gap:7px;overflow-x:auto;padding:0 0 12px;
  scrollbar-width:none;-ms-overflow-style:none}
.qsBtabs::-webkit-scrollbar{display:none}
.qsBtab{flex:none;cursor:pointer;padding:6px 13px;border-radius:999px;
  border:1px solid var(--bord);background:var(--card);
  font-family:var(--font);font-size:12px;font-weight:700;color:var(--muted);white-space:nowrap}
.qsBtab.on{color:var(--text);border-color:var(--p1);background:rgba(124,92,255,.16)}

/* Своя строка — отдельным блоком и выше таблицы: она интереснее всего, а в
   топе её обычно нет. Доска, которая говорит «вас здесь нет» и на этом
   заканчивает разговор, не даёт цели (§12 проекта). */
.qsMe{display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin:0 0 12px;padding:11px 14px;border-radius:14px;
  border:1px solid rgba(124,92,255,.35);background:rgba(124,92,255,.12)}
.qsMe b{font-size:13px;font-weight:800}
.qsMe span{font-family:var(--num);font-weight:700;font-size:13px;color:var(--muted);text-align:right}

.qsBrow{display:flex;align-items:center;gap:11px;padding:9px 0;border-bottom:1px solid var(--bord)}
.qsBrow:last-child{border-bottom:0}
.qsBrank{flex:none;width:26px;font-family:var(--num);font-weight:700;font-size:13px;color:var(--dim);text-align:right}
.qsBname{flex:1;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qsBval{font-family:var(--num);font-weight:700;font-size:13.5px;color:var(--text);white-space:nowrap}
.qsBrow.me{margin:0 -10px;padding:9px 10px;border-radius:11px;border-bottom-color:transparent;
  background:rgba(124,92,255,.14)}
.qsBrow.me .qsBrank{color:var(--p1)}

/* Первые три места подкрашиваются — иначе таблица читается как список. */
.qsBrow:nth-child(1) .qsBrank{color:var(--gold)}
.qsBrow:nth-child(2) .qsBrank{color:#D7D2F0}
.qsBrow:nth-child(3) .qsBrank{color:#E0A277}

/* ---- десктоп ----------------------------------------------------------- */
/* Пункт «Задачи» существует только в сайдбаре: на мобильной панели шестая
   кнопка по 54px не влезает в 320px, а вход туда — плавающий док. */
.nav .sbOnly{display:none}

@media (min-width:1024px){
  .nav .sbOnly{display:flex}
  /* В сайдбаре точка уезжает к правому краю строки. */
  .nav .sbOnly .navDot{margin-left:auto}

  /* Строки в потоке на вебе нет: у задач здесь свой угол. Скрывается ЯВНО, вместе
     с `.has`, а не в расчёте на то, что мобильное лобби (.lobM) и так спрятано:
     иначе правило молча зависело бы от чужого файла. */
  .qsStrip,.qsStrip.has{display:none}
  body[data-screen="home"] .qsDock.has,
  body[data-screen="clubs"] .qsDock.has,
  body[data-screen="profile"] .qsDock.has{display:flex}

  /* Золота здесь заметно больше, чем в мобильной строке: это единственный
     постоянный элемент фичи на экране, и он должен читаться как «награда», а не
     как ещё одна серая плашка. */
  .qsDock{right:24px;bottom:24px;max-width:320px;
    gap:12px;padding:10px 14px 10px 11px;border-radius:18px;
    border:1px solid rgba(255,194,75,.28);
    background:linear-gradient(150deg,rgba(255,194,75,.1),var(--lg) 60%);
    box-shadow:var(--shadow-card),0 12px 32px rgba(0,0,0,.45);
    backdrop-filter:blur(18px) saturate(150%);
    transition:transform .18s var(--ease-glass),opacity .18s ease,border-color .2s ease,box-shadow .2s ease}
  .qsDock:hover{border-color:rgba(255,194,75,.5)}
  .qsDock:active{transform:scale(.97);background:linear-gradient(150deg,rgba(255,194,75,.14),var(--lg) 60%)}
  .qsDock.under{transform:translateY(8px)}
  /* Есть что забрать — золото перестаёт быть акцентом и становится подсветкой. */
  .qsDock.alert{border-color:rgba(255,194,75,.62);
    background:linear-gradient(150deg,rgba(255,194,75,.18),var(--lg) 62%);
    box-shadow:0 0 0 1px rgba(255,194,75,.2),0 0 34px rgba(255,194,75,.16),0 12px 34px rgba(0,0,0,.5)}
  .qsdRing{width:40px;height:40px}
  .qsdRing::before{inset:4px;background:#130e28}
  .qsdRing b{font-size:12px;color:var(--gold2)}
  /* Обратно в две строки: в карточке есть высота, и подпись состояния читается
     лучше отдельной строкой, чем хвостом за названием. */
  .qsdTx{flex-direction:column;align-items:flex-start;gap:2px}
  .qsdTx small{font-size:11px}

  /* Карточка висит над правой колонкой лобби и над концом профиля, поэтому у них
     запас под неё: перекрыть середину прокрутки можно, а последнюю карточку, до
     которой нельзя доскроллить, — нет. Сам `#p-home` на десктопе не
     прокручивается (колонки внутри держат прокрутку сами). */
  .lobD .home-social{padding-bottom:96px}
  #p-profile{padding-bottom:96px}

  /* Панель выезжает справа во всю высоту сцены. Ширина фиксированная: панель
     задач — не второй макет лобби, и растягивать её на пол-экрана значит
     возвращать ту же простыню, от которой уходили. */
  .qsPanel{left:auto;top:0;bottom:0;right:0;width:min(430px,100%);max-height:none;
    border-radius:0;border-right:0;transform:translateX(101%)}
  /* Ручка шторки на вебе не нужна (панель не тянут), и тот же псевдоэлемент
     становится золотой линией по верхнему краю — тем же приёмом, которым
     подчёркнута рейтинговая карточка в лобби (.rankCard::before). */
  .qsPanel::before{top:0;left:0;transform:none;width:auto;right:0;height:2px;border-radius:0;
    background:linear-gradient(90deg,transparent,rgba(255,194,75,.6),transparent)}
  /* Заголовок и таймеры — золотом: на вебе панель высокая, и без акцентов
     колонка карточек читается как таблица. */
  .qsPhead>b{color:#FFE9BE}
  .qsSec h3{color:#C6A96E}
  .qsLeft{color:var(--gold2)}
  .qsPtab.on{background:linear-gradient(135deg,rgba(124,92,255,.28),rgba(255,194,75,.16));
    box-shadow:0 1px 0 rgba(255,255,255,.07) inset}
  .qsPhead{padding:22px 20px 12px}
  .qsPtabs{margin:0 20px 14px}
  .qsPbody{padding:0 20px 24px}
}
