/* Портал лицензирования: дополнения к теме Color Admin (Default).
   Цвет бренда берётся из переменных темы (--bs-app-theme*), поэтому меняется одной настройкой. */

/* ---------- Логотип и аватары ---------- */
.portal-mark {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 9px; margin-right: .6rem; flex: none;
  background: var(--bs-app-theme-gradient, linear-gradient(135deg, var(--bs-app-theme), var(--bs-app-theme)));
  color: var(--bs-app-theme-color, #fff); font-size: 14px;
  box-shadow: 0 4px 10px rgba(var(--bs-app-theme-rgb), .35);
}
.portal-mark-lg { width: 40px; height: 40px; border-radius: 12px; font-size: 18px; margin-right: 0; }

.portal-avatar {
  display: inline-flex; align-items: center; justify-content: center; flex: none;
  width: 40px; height: 40px; border-radius: 50%; font-weight: 700; font-size: 14px; letter-spacing: .02em;
  background: rgba(var(--bs-app-theme-rgb), .18); color: var(--bs-app-theme);
}
.portal-avatar-sm { width: 30px; height: 30px; font-size: 12px; }
.app-sidebar .portal-avatar { background: rgba(255, 255, 255, .12); color: #fff; }

.app-sidebar .menu .menu-profile .portal-profile { display: flex; align-items: center; gap: .75rem; }
.app-sidebar .menu .menu-profile .portal-profile-info { min-width: 0; line-height: 1.25; }
.app-sidebar .menu .menu-profile .portal-profile-info > * { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.app-sidebar-minified .portal-profile-info { display: none; }

/* ---------- Переключатели темы и языка ---------- */
.portal-icon-sun { display: none; }
[data-bs-theme="dark"] .portal-icon-sun { display: inline-block; }
[data-bs-theme="dark"] .portal-icon-moon { display: none; }
.portal-flag {
  display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 18px;
  border-radius: 4px; font-size: 10px; font-weight: 700; background: rgba(var(--bs-app-theme-rgb), .15); color: var(--bs-app-theme);
}
.app-header .menu .menu-item .dropdown-menu form { margin: 0; }
.app-header .dropdown-menu .dropdown-item { cursor: pointer; }

/* ---------- Статусы ---------- */
.portal-badge { padding: .35rem .6rem; border-radius: 6px; font-size: 12px; font-weight: 600; display: inline-flex; align-items: center; gap: .3rem; white-space: nowrap; }

/* ---------- Ключи, коды, моноширинный текст ---------- */
.portal-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; }
.portal-key {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
  font-size: 13px; letter-spacing: .04em; padding: .25rem .5rem; border-radius: 6px;
  background: var(--bs-tertiary-bg); border: 1px solid var(--bs-border-color); white-space: nowrap;
}
.portal-code-input { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; letter-spacing: .28em; }
.portal-code-input::placeholder { letter-spacing: .18em; opacity: .4; }
.portal-key-reveal {
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 20px; font-weight: 700; letter-spacing: .08em;
  text-align: center; padding: 1rem; border-radius: 12px; border: 2px dashed rgba(var(--bs-app-theme-rgb), .55);
  background: rgba(var(--bs-app-theme-rgb), .08); user-select: all;
}

/* ---------- Страницы входа ---------- */
.auth-tools { position: fixed; top: 1rem; right: 1rem; z-index: 20; display: flex; gap: .5rem; }
.portal-auth-art {
  background:
    radial-gradient(circle at 18% 22%, rgba(255, 255, 255, .16) 0, rgba(255, 255, 255, 0) 38%),
    radial-gradient(circle at 85% 80%, rgba(var(--bs-app-theme-rgb), .55) 0, rgba(var(--bs-app-theme-rgb), 0) 55%),
    repeating-linear-gradient(135deg, rgba(255, 255, 255, .035) 0 2px, rgba(255, 255, 255, 0) 2px 22px),
    linear-gradient(160deg, #0f1c2e 0%, #123a3f 100%);
}
.portal-icon-circle {
  display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%; font-size: 26px;
  background: rgba(var(--bs-app-theme-rgb), .15); color: var(--bs-app-theme);
}
.portal-icon-circle.is-success { background: rgba(var(--bs-success-rgb), .15); color: var(--bs-success); }
.portal-invite-card { border: 1px solid var(--bs-border-color); border-radius: 14px; padding: 1rem; background: var(--bs-tertiary-bg); }

.portal-steps { display: flex; align-items: center; gap: .75rem; justify-content: center; font-size: 13px; font-weight: 600; color: var(--bs-secondary-color); }
.portal-step { display: flex; align-items: center; gap: .5rem; }
.portal-step-dot {
  display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 50%;
  border: 2px solid var(--bs-border-color); font-size: 12px; font-weight: 700;
}
.portal-step.is-current { color: var(--bs-body-color); }
.portal-step.is-current .portal-step-dot { border-color: var(--bs-app-theme); background: var(--bs-app-theme); color: var(--bs-app-theme-color, #fff); }
.portal-step.is-done .portal-step-dot { border-color: var(--bs-success); background: var(--bs-success); color: #fff; }
.portal-step-line { flex: 0 0 36px; height: 2px; background: var(--bs-border-color); }

/* ---------- Карточки и таблицы ---------- */
.portal-kv { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 1rem 1.5rem; }
.portal-kv dt { font-size: 12px; font-weight: 600; color: var(--bs-secondary-color); margin-bottom: .15rem; text-transform: uppercase; letter-spacing: .03em; }
.portal-kv dd { margin: 0; font-weight: 600; }
.portal-table td, .portal-table th { vertical-align: middle; }
.portal-table .dt-container, .dt-container { padding: 0; }
.portal-toolbar { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-bottom: 1rem; }
.portal-toolbar .spacer { flex: 1; }
.portal-feature {
  display: inline-flex; align-items: center; gap: .3rem; padding: .2rem .55rem; border-radius: 999px; font-size: 12px; font-weight: 600;
  background: rgba(var(--bs-app-theme-rgb), .12); color: var(--bs-app-theme);
}
.portal-empty { text-align: center; padding: 2.5rem 1rem; color: var(--bs-secondary-color); }
.portal-empty i { font-size: 2.5rem; opacity: .35; display: block; margin-bottom: .75rem; }
.portal-timeline { list-style: none; margin: 0; padding: 0; }
.portal-timeline li { display: flex; gap: .75rem; padding: .7rem 0; border-bottom: 1px solid var(--bs-border-color); }
.portal-timeline li:last-child { border-bottom: 0; }
.portal-timeline .ico {
  flex: none; width: 34px; height: 34px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center;
  background: rgba(var(--bs-app-theme-rgb), .12); color: var(--bs-app-theme);
}
.portal-chart { min-height: 260px; }
.card-header-title { margin: 0; }
.dt-container .dt-search input, .dt-container .dt-length select { border-radius: 8px; }
.page-header small { font-size: 14px; }

.auth-tools .btn { height: 38px; min-width: 38px; display: inline-flex; align-items: center; justify-content: center; }

/* Заголовок страницы: контейнер с собственным контекстом форматирования, чтобы float-хлебные крошки не сужали ряд ниже */
.portal-page-head { display: flow-root; }
.app-sidebar .menu .menu-profile .portal-profile-info > div { white-space: normal; }

/* Шрифт: без загрузки с внешних серверов. Если положить Noto Sans в static/fonts и подключить через @font-face,
   внешний вид совпадёт с демо шаблона; пока используются системные шрифты с поддержкой кириллицы. */
:root, [data-bs-theme] {
  --bs-font-sans-serif: "Noto Sans", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Liberation Sans", sans-serif;
}
