/* ============================================================================
   admin.css — вкладка "Админка": presence-карточки, список банов, журнал
   входов, отзывы внутри панели, заявки на привязку Telegram, быстрые ссылки.

   Паттерн переведён на admin_demo.html: ОДИН стеклянный .admin-panel.frosted
   на секцию, строки внутри — плоские (без своего фона/рамки/radius),
   разделены border-top между собой. Раньше здесь было три разных паттерна
   сразу (сессии/баны — .frosted-контейнер с непрозрачными карточками внутри,
   что и давало "двойной блюр" на скрине; tglink/feedback — вообще без
   .frosted) — это и убираем.
   ============================================================================ */

  .admin-section{
    margin-bottom:30px;
  }
  .admin-section-title{
    font-family:var(--font-mono);
    font-size:11.5px;
    font-weight:600;
    letter-spacing:0.06em;
    text-transform:uppercase;
    color:var(--muted-2);
    margin-bottom:10px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;
  }

  /* ---- Единый стеклянный контейнер секции ---- */
  .admin-panel{
    border-radius:var(--radius-md);
    overflow:hidden;
  }

  /* ---- Сводка (счётчики) — считается на фронте из уже загруженных
     5 запросов дашборда, отдельного запроса на бэкенд не нужно ---- */
  .admin-stats-row{
    display:grid;
    grid-template-columns:repeat(4, 1fr);
    gap:12px;
    margin-bottom:30px;
  }
  .admin-stat-card{
    padding:18px 20px;
    border-radius:var(--radius-md);
  }
  .admin-stat-num{
    font-family:var(--font-display);
    font-size:26px;
    font-weight:500;
    margin-bottom:2px;
  }
  .admin-stat-label{
    font-family:var(--font-body);
    font-size:12px;
    color:var(--muted);
  }
  .admin-stat-card.ok .admin-stat-num{color:var(--success);}
  .admin-stat-card.ban .admin-stat-num{color:var(--ban);}
  .admin-stat-card.pending .admin-stat-num{color:var(--accent);}

  /* ---- Presence (Sessions) ---- */
  .prow{
    display:flex;
    align-items:center;
    gap:14px;
    padding:14px 20px;
    flex-wrap:wrap;
  }
  .prow + .prow{border-top:1px solid var(--glass-border);}
  .status-dot{
    width:8px;
    height:8px;
    border-radius:50%;
    background:var(--muted-2);
    flex-shrink:0;
  }
  .status-dot.online{background:var(--success); box-shadow:0 0 8px var(--success);}
  .prow-name{
    font-family:var(--font-body);
    font-weight:700;
    font-size:14px;
    min-width:100px;
  }
  .prow-meta{
    font-size:12px;
    color:var(--muted-2);
    font-family:var(--font-mono);
    display:flex;
    gap:14px;
    flex-wrap:wrap;
    flex:1;
  }
  .prow-actions{
    display:flex;
    gap:8px;
    margin-left:auto;
  }

  /* ---- Bans ---- */
  .brow{
    display:flex;
    align-items:center;
    gap:14px;
    padding:14px 20px;
    flex-wrap:wrap;
  }
  .brow + .brow{border-top:1px solid var(--glass-border);}
  .brow-target{
    font-family:var(--font-mono);
    font-weight:700;
    font-size:14px;
    min-width:110px;
  }
  .brow-comment{
    font-size:13px;
    color:var(--muted);
    flex:1;
  }
  .brow-meta{
    font-size:11.5px;
    color:var(--muted-2);
    font-family:var(--font-mono);
    white-space:nowrap;
  }

  /* ---- TG link requests / approved links — тот же rowный паттерн ---- */
  .trow{
    display:flex;
    align-items:center;
    gap:14px;
    padding:14px 20px;
    flex-wrap:wrap;
  }
  .trow + .trow{border-top:1px solid var(--glass-border);}
  .trow-name{
    font-family:var(--font-mono);
    font-weight:700;
    font-size:14px;
    min-width:110px;
  }
  .trow-meta{
    font-size:11.5px;
    color:var(--muted-2);
    font-family:var(--font-mono);
    flex:1;
  }

  /* ---- Роли: чипы с крестиком снятия рядом с ником в админке ---- */
  .role-chips{
    display:flex;
    flex-wrap:wrap;
    gap:6px;
  }
  .role-chip{
    display:inline-flex;
    align-items:center;
    gap:6px;
  }
  .role-chip-remove{
    background:none;
    border:none;
    color:inherit;
    opacity:0.6;
    cursor:pointer;
    font-size:14px;
    line-height:1;
    padding:0;
  }
  .role-chip-remove:hover{opacity:1;}

  /* ---- Login log ---- */
  .log-list{
    max-height:340px;
    overflow-y:auto;
    scrollbar-width:none;
    -ms-overflow-style:none;
  }
  .log-list::-webkit-scrollbar{display:none;}
  .log-row{
    display:flex;
    gap:16px;
    align-items:center;
    padding:9px 20px;
    font-size:12px;
    font-family:var(--font-mono);
    flex-wrap:wrap;
  }
  .log-row + .log-row{border-top:1px solid var(--glass-border);}
  .log-time{color:var(--muted-2); white-space:nowrap;}
  .log-name{font-family:var(--font-body); font-weight:600; min-width:90px;}
  .log-detail{color:var(--muted);}

  /* ---- Feedback ----
     Раньше здесь было различие read/unread (приглушённая карточка + бейдж) —
     оно потеряло смысл: бэкенд теперь физически удаляет отзыв при отметке
     "прочитано" (read-флага в БД нет), так что GET /feedback и так отдаёт
     только непрочитанные — рисовать "прочитано" было бы враньём. Все строки
     рендерятся одинаково. */
  .fb-row{
    padding:16px 20px;
  }
  .fb-row + .fb-row{border-top:1px solid var(--glass-border);}
  .fb-head{
    display:flex;
    align-items:center;
    gap:10px;
    margin-bottom:6px;
    flex-wrap:wrap;
  }
  .fb-stars{
    color:var(--mute);
    letter-spacing:1px;
    font-size:13px;
  }
  .fb-text{
    font-size:13.5px;
    color:var(--muted);
  }

  /* ---- Кнопки-пилюли — семантический цвет = смысл действия ---- */
  .pill-btn{
    font-family:var(--font-body);
    font-size:11.5px;
    font-weight:700;
    letter-spacing:0.03em;
    text-transform:uppercase;
    padding:6px 14px;
    border-radius:var(--radius-pill);
    cursor:pointer;
    border:1px solid transparent;
    background:transparent;
    flex-shrink:0;
    transition:opacity 0.2s ease, transform 0.15s cubic-bezier(0.4,0,0.2,1), background 0.2s ease;
  }
  .pill-btn:active{transform:scale(0.96);}
  .pill-btn.kick{border-color:var(--del); color:var(--del); background:var(--del-dim);}
  .pill-btn.kick:hover{background:rgba(127,184,224,0.22);}
  .pill-btn.unban, .pill-btn.approve{border-color:var(--success); color:var(--success); background:var(--ok-dim);}
  .pill-btn.unban:hover, .pill-btn.approve:hover{background:rgba(127,224,184,0.22);}
  .pill-btn.ban-open, .pill-btn.reject{border-color:var(--ban); color:var(--ban); background:var(--ban-dim);}
  .pill-btn.ban-open:hover, .pill-btn.reject:hover{background:rgba(239,123,143,0.22);}
  .pill-btn.read{border-color:var(--accent); color:var(--accent); background:var(--accent-dim);}
  .pill-btn.read:hover{background:rgba(232,180,216,0.22);}

  /* ---- Модалка временного пароля (admin reset без Telegram) ---- */
  .reveal-password-box{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;
    background:var(--bg);
    border:1px solid var(--border);
    border-radius:var(--radius-sm);
    padding:11px 14px;
    margin-bottom:18px;
  }
  .reveal-password-box code{
    font-family:var(--font-mono);
    font-size:15px;
    color:var(--text);
    letter-spacing:0.02em;
    user-select:all;
  }

  /* ---- Форма бана (инлайн, под Presence) ---- */
  .admin-ban-form{
    display:flex;
    gap:8px;
    flex-wrap:wrap;
    margin-top:12px;
    padding:14px;
    background:var(--glass);
    border:1px solid var(--glass-border);
    border-radius:var(--radius-md);
  }
  .admin-ban-form input, .admin-ban-form select{
    background:rgba(255,255,255,0.05);
    border:1px solid var(--glass-border);
    border-radius:var(--radius-sm);
    color:var(--text);
    padding:8px 10px;
    font-family:var(--font-body);
    font-size:13px;
  }
  .admin-ban-form input:focus, .admin-ban-form select:focus{
    outline:none;
    border-color:var(--accent);
  }
  .admin-ban-form input[name="target"]{flex:1; min-width:140px;}
  .admin-ban-form input[name="comment"]{flex:2; min-width:180px;}

  /* ---- Быстрые ссылки ---- */
  .admin-links{
    display:flex;
    flex-direction:column;
    gap:8px;
  }
  .admin-link{
    display:flex;
    align-items:center;
    gap:10px;
    padding:12px 16px;
    background:var(--glass);
    border:1px solid var(--glass-border);
    border-radius:var(--radius-md);
    color:var(--text);
    text-decoration:none;
    font-size:13px;
    transition:border-color 0.2s ease, background 0.2s ease, transform 0.15s cubic-bezier(0.4,0,0.2,1);
  }
  .admin-link:hover{
    border-color:var(--accent);
    background:var(--accent-dim);
    transform:translateY(-1px);
  }

  /* ---- Пустые состояния (.note) — глобальный класс из content.css рисует
     непрозрачный фон, что поверх .frosted-панели даёт "второй слой"/серую
     плашку. Внутри админки это лишнее — обнуляем фон/рамку, остальное
     (отступы, цвет текста) наследуем от глобального .note. ---- */
  .admin-panel .note{
    background:transparent;
    border:none;
    box-shadow:none;
    padding:16px 20px;
  }

  @media (max-width: 820px){
    .admin-stats-row{grid-template-columns:1fr 1fr;}
    .prow, .brow, .trow{flex-direction:column; align-items:flex-start;}
    .prow-actions{margin-left:0;}
    .log-row{flex-direction:column; align-items:flex-start; gap:4px;}
    .admin-ban-form{flex-direction:column;}
  }