/* ============================================================================
   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-body);
    font-size:12px;
    font-weight:700;
    letter-spacing:0.06em;
    text-transform:uppercase;
    color:var(--muted);
    margin-bottom:10px;
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:10px;
  }
  .admin-count{
    font-family:var(--font-body);
    font-size:11px;
    font-weight:700;
    letter-spacing:0;
    color:var(--muted);
    border:1px solid var(--border-strong);
    border-radius:999px;
    padding:2px 10px;
    white-space:nowrap;
  }
  /* Подзаголовок внутри секции — группирует форму действия и список
     (Модерация: форма + "Активные баны", Telegram: заявки/привязанные). */
  .admin-sub{
    font-size:12px;
    font-weight:600;
    color:var(--muted);
    margin:20px 2px 8px;
  }
  .admin-section-title + .admin-sub{margin-top:2px;}

  /* ---- Единый стеклянный контейнер секции ---- */
  .admin-panel{
    border-radius:var(--radius-md);
    overflow:hidden;
  }
  /* Подсветка строк при наведении — панели плоские, ховер даёт считываемость */
  .prow, .brow, .trow, .fb-row, .log-row{transition:background 0.15s ease;}
  .prow:hover, .brow:hover, .trow:hover, .fb-row:hover, .log-row:hover{background:rgba(255,255,255,0.025);}

  /* ---- Сводка (счётчики) — считается на фронте из уже загруженных
     5 запросов дашборда, отдельного запроса на бэкенд не нужно ---- */
  .admin-stats-row{
    display:grid;
    grid-template-columns:repeat(4, 1fr);
    gap:12px;
    margin-bottom:30px;
  }
  .admin-stat-card{
    position:relative;
    padding:18px 20px 18px 24px;
    border-radius:var(--radius-md);
    overflow:hidden;
  }
  /* Цветная кромка слева — смысл цифры считывается без чтения подписи */
  .admin-stat-card::before{
    content:'';
    position:absolute;
    left:0; top:0; bottom:0;
    width:3px;
    background:var(--muted-2);
  }
  .admin-stat-card.ok::before{background:var(--success);}
  .admin-stat-card.ban::before{background:var(--ban);}
  .admin-stat-card.pending::before{background:var(--text);}
  .admin-stat-num{
    font-family:var(--font-display);
    font-size:28px;
    font-weight:600;
    line-height:1.1;
    margin-bottom:4px;
  }
  .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-ava{
    width:34px;
    height:34px;
    border-radius:50%;
    border:1.5px solid var(--border-strong);
    color:var(--muted);
    display:flex;
    align-items:center;
    justify-content:center;
    font-family:var(--font-body);
    font-weight:700;
    font-size:14px;
    flex-shrink:0;
    user-select:none;
  }
  .prow-ava.online{
    border-color:var(--success);
    color:var(--success);
    box-shadow:0 0 10px var(--success-dim);
  }
  .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);
  }

  /* ---- Кнопки-пилюли — семантический цвет = смысл действия,
     шрифт Comfortaa как у всех кнопок сайта ---- */
  .pill-btn{
    font-family:var(--font-btn);
    font-size:11.5px;
    font-weight:700;
    letter-spacing:0.03em;
    text-transform:uppercase;
    padding:7px 15px;
    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;
    min-width:0;
  }
  /* Строка "Сейчас: ..." в форме версии — всегда с новой строки, иначе
     на средних ширинах вылезает за рамку формы */
  #version-config-form input{flex:1;}
  #version-config-form > span{flex:1 1 100%;}
  .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;}

  /* ---- Контент-редактор: строки правятся инлайн ---- */
  .cedit-row{
    display:flex;
    gap:8px;
    padding:10px 14px;
    align-items:center;
    flex-wrap:wrap;
  }
  .cedit-row + .cedit-row{border-top:1px solid var(--glass-border);}
  .cedit-row input{
    flex:1 1 140px;
    min-width:0;
    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;
  }
  .cedit-row input:focus{
    outline:none;
    border-color:var(--accent);
  }
  .cedit-row input[name="descr"]{flex:2 1 200px;}

  .admin-tab-switch{max-width:100%; overflow-x:auto; scrollbar-width:none; margin-bottom:28px; justify-content:flex-start; justify-content:safe center;}
  .admin-tab-switch::-webkit-scrollbar{display:none;}
  .admin-tab-switch .chat-switch-btn{flex-shrink:0;}

  /* ---- Подсказки-инструкции в секциях ---- */
  .admin-hint{
    font-size:13px;
    color:var(--muted);
    line-height:1.65;
    margin:0 2px 10px;
    max-width:64ch;
  }
  .admin-hint code{
    font-size:12px;
    color:var(--text);
    background:rgba(255,255,255,0.06);
    border:1px solid var(--border);
    border-radius:6px;
    padding:1px 7px;
    user-select:all;
  }
  .admin-hint a{color:var(--text);}

  /* ---- Быстрые ссылки ---- */
  .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;}
  }