/* ═══════════════════════════════════════════════════════════════════════════
   FT Admin Component Library — uses ONLY theme tokens (no hardcoded hex)
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Page shell ─── */

.ft-page {
    background: var(--ft-color-bg-page);
    color: var(--ft-color-text-primary);
    min-height: calc(100vh - var(--ft-header-height));
    padding: var(--ft-space-4);
    font-family: var(--ft-font-family);
}

.ft-page-banner {
    background: var(--ft-page-banner-bg);
    border: 1px solid var(--ft-page-banner-border);
    color: var(--ft-page-banner-text);
    padding: var(--ft-space-6) var(--ft-space-7);
    border-radius: var(--ft-radius-md);
    margin-bottom: var(--ft-space-5);
    box-shadow: var(--ft-shadow-glow);
}

.ft-page-banner__title {
    margin: 0;
    font-size: var(--ft-font-size-xl);
    font-weight: var(--ft-font-weight-bold);
    color: var(--ft-page-banner-text);
}

.ft-page-banner__subtitle {
    margin: var(--ft-space-2) 0 0;
    opacity: 0.85;
    font-size: var(--ft-font-size-md);
    color: var(--ft-page-banner-text);
}

.ft-page-banner__actions {
    display: flex;
    gap: var(--ft-space-2);
    flex-wrap: wrap;
    justify-content: flex-end;
}

/* ─── Stat cards ─── */

.ft-stat-card {
    background: var(--ft-stat-card-bg);
    border: 1px solid var(--ft-card-border);
    border-radius: var(--ft-radius-md);
    padding: var(--ft-space-5);
    box-shadow: var(--ft-card-shadow);
}

.ft-stat-card__value {
    font-size: var(--ft-font-size-xl);
    font-weight: var(--ft-font-weight-bold);
    color: var(--ft-stat-card-value);
}

.ft-stat-card__label {
    font-size: var(--ft-font-size-sm);
    color: var(--ft-color-text-secondary);
    margin-top: var(--ft-space-1);
}

/* ─── Cards ─── */

.ft-card {
    background: var(--ft-card-bg);
    border: 1px solid var(--ft-card-border);
    border-radius: var(--ft-radius-md);
    box-shadow: var(--ft-card-shadow);
    overflow: hidden;
}

.ft-card__header {
    background: var(--ft-table-header-bg);
    padding: var(--ft-space-5) var(--ft-space-6);
    border-bottom: 1px solid var(--ft-table-border);
}

.ft-card__header h3 {
    margin: 0 0 var(--ft-space-2);
    color: var(--ft-color-text-primary);
    font-size: var(--ft-font-size-lg);
    font-weight: var(--ft-font-weight-bold);
}

.ft-card__header p {
    margin: 0;
    color: var(--ft-color-text-secondary);
    font-size: var(--ft-font-size-md);
}

.ft-card__body {
    padding: var(--ft-space-5);
}

/* ─── Data table ─── */

.ft-data-table-wrapper {
    overflow-x: auto;
    max-height: 80vh;
    position: relative;
}

.ft-data-table {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--ft-font-size-md);
}

.ft-data-table th {
    background: var(--ft-table-header-bg);
    color: var(--ft-color-text-secondary);
    font-weight: var(--ft-font-weight-semibold);
    padding: var(--ft-space-4) var(--ft-space-3);
    text-align: left;
    border-bottom: 2px solid var(--ft-table-border);
    position: sticky;
    top: 0;
    z-index: 10;
    white-space: nowrap;
}

.ft-data-table td {
    padding: var(--ft-space-4) var(--ft-space-3);
    border-bottom: 1px solid var(--ft-table-border);
    vertical-align: top;
    color: var(--ft-color-text-primary);
}

.ft-data-table__row {
    transition: background var(--ft-transition-normal);
}

.ft-data-table__row:hover {
    background: var(--ft-table-row-hover);
}

.ft-data-table__row--featured {
    background: var(--ft-color-warning-bg);
}

.ft-data-table__row--featured:hover {
    background: rgba(245, 158, 11, 0.18);
}

.ft-data-table__row--breaking {
    background: var(--ft-color-danger-bg);
}

.ft-data-table__row--breaking:hover {
    background: rgba(239, 68, 68, 0.18);
}

.ft-data-table__actions-cell {
    position: sticky;
    right: 0;
    background: var(--ft-card-bg);
    box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);
    z-index: 5;
}

.ft-data-table__row:hover .ft-data-table__actions-cell {
    background: var(--ft-table-row-hover);
}

/* ─── Badges ─── */

.ft-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--ft-space-1);
    padding: var(--ft-space-1) var(--ft-space-2);
    border-radius: 999px;
    font-size: var(--ft-font-size-xs);
    font-weight: var(--ft-font-weight-medium);
    white-space: nowrap;
    line-height: 1.3;
}

.ft-badge--default {
    background: var(--ft-badge-default-bg);
    color: var(--ft-badge-default-text);
}

.ft-badge--primary {
    background: var(--ft-badge-primary-bg);
    color: var(--ft-badge-primary-text);
}

.ft-badge--success {
    background: var(--ft-badge-success-bg);
    color: var(--ft-badge-success-text);
}

.ft-badge--warning {
    background: var(--ft-badge-warning-bg);
    color: var(--ft-badge-warning-text);
}

.ft-badge--danger {
    background: var(--ft-badge-danger-bg);
    color: var(--ft-badge-danger-text);
}

.ft-badge--info {
    background: var(--ft-badge-info-bg);
    color: var(--ft-badge-info-text);
}

.ft-badge--id {
    background: var(--ft-color-accent-blue);
    color: var(--ft-color-text-inverse);
    border-radius: var(--ft-radius-sm);
    font-weight: var(--ft-font-weight-semibold);
}

/* ─── Buttons ─── */

.ft-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--ft-space-2);
    padding: var(--ft-space-2) var(--ft-space-4);
    border: none;
    border-radius: var(--ft-radius-sm);
    font-size: var(--ft-font-size-sm);
    font-weight: var(--ft-font-weight-medium);
    cursor: pointer;
    transition: all var(--ft-transition-normal);
    font-family: inherit;
}

.ft-btn--primary {
    background: var(--ft-btn-primary-bg);
    color: var(--ft-btn-primary-text);
}

.ft-btn--primary:hover {
    background: var(--ft-gradient-cta-hover);
    transform: translateY(-1px);
}

.ft-btn--secondary {
    background: var(--ft-btn-secondary-bg);
    color: var(--ft-btn-secondary-text);
    border: 1px solid var(--ft-color-border);
}

.ft-btn--danger {
    background: var(--ft-btn-danger-bg);
    color: var(--ft-btn-danger-text);
}

.ft-btn--sm {
    padding: var(--ft-space-1) var(--ft-space-3);
    font-size: var(--ft-font-size-xs);
}

/* ─── Search & filters ─── */

.ft-search-bar {
    display: flex;
    gap: var(--ft-space-4);
    align-items: center;
    margin-bottom: var(--ft-space-5);
    flex-wrap: wrap;
}

.ft-search-bar__input {
    flex: 1;
    min-width: 280px;
    background: var(--ft-search-bg);
    border: 1px solid var(--ft-search-border);
    border-radius: var(--ft-radius-sm);
    padding: var(--ft-space-3) var(--ft-space-4);
    font-size: var(--ft-font-size-md);
    color: var(--ft-color-text-primary);
    transition: border-color var(--ft-transition-normal), box-shadow var(--ft-transition-normal);
}

.ft-search-bar__input:focus {
    outline: none;
    border-color: var(--ft-search-focus-border);
    box-shadow: 0 0 0 3px rgba(34, 211, 238, 0.12);
}

.ft-search-bar__input::placeholder {
    color: var(--ft-color-text-muted);
}

.ft-filter-btn-wrap {
    position: relative;
    display: flex;
    align-items: center;
}

.ft-filter-btn__badge {
    position: absolute;
    top: -8px;
    right: -8px;
    min-width: 20px;
    height: 20px;
    font-size: var(--ft-font-size-xs);
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.ft-filter-panel {
    background: var(--ft-filter-panel-bg);
    border: 1px solid var(--ft-filter-panel-border);
    border-radius: var(--ft-radius-md);
    padding: var(--ft-space-6);
    margin-bottom: var(--ft-space-5);
    box-shadow: var(--ft-shadow-sm);
    animation: ft-slide-down 0.3s ease-out;
}

@keyframes ft-slide-down {
    from { opacity: 0; transform: translateY(-10px); }
    to { opacity: 1; transform: translateY(0); }
}

.ft-filter-panel--inline {
    margin-bottom: var(--ft-space-4);
    box-shadow: none;
    animation: none;
}

.ft-filter-panel__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: var(--ft-space-5);
    padding-bottom: var(--ft-space-4);
    border-bottom: 1px solid var(--ft-table-border);
}

.ft-filter-panel__header h4 {
    margin: 0;
    color: var(--ft-color-text-primary);
    font-size: var(--ft-font-size-lg);
    font-weight: var(--ft-font-weight-semibold);
}

.ft-filter-panel__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: var(--ft-space-5);
    margin-bottom: var(--ft-space-5);
}

.ft-filter-panel__group {
    display: flex;
    flex-direction: column;
    gap: var(--ft-space-2);
}

.ft-filter-panel__label {
    font-weight: var(--ft-font-weight-medium);
    color: var(--ft-color-text-secondary);
    font-size: var(--ft-font-size-sm);
}

.ft-filter-panel__actions {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-top: var(--ft-space-4);
    border-top: 1px solid var(--ft-table-border);
}

/* ─── Sidebar (token-based, shared with HUD) ─── */

.ft-sidebar {
    background: var(--ft-gradient-sidebar);
    border-right: 1px solid var(--ft-color-border);
    box-shadow: var(--ft-shadow-md);
}

.ft-sidebar__item {
    display: flex;
    align-items: center;
    gap: var(--ft-space-3);
    padding: var(--ft-space-2) var(--ft-space-4);
    margin: var(--ft-space-1) var(--ft-space-2);
    border-radius: var(--ft-radius-sm);
    color: var(--ft-color-text-secondary);
    text-decoration: none;
    border: 1px solid transparent;
    transition: all var(--ft-transition-fast);
    font-size: var(--ft-font-size-md);
}

.ft-sidebar__item:hover {
    color: var(--ft-color-text-primary);
    background: var(--ft-sidebar-hover-bg);
    border-color: var(--ft-color-border);
}

.ft-sidebar__item--active {
    color: var(--ft-sidebar-active-text);
    background: var(--ft-sidebar-active-bg);
    border-color: var(--ft-color-border-strong);
    box-shadow: var(--ft-shadow-glow);
}

/* ─── Radzen scope overrides (token-mapped) ─── */

.ft-radzen-scope .rz-textbox,
.ft-radzen-scope .rz-dropdown,
.ft-radzen-scope .rz-numeric,
.ft-radzen-scope .rz-datepicker {
    background: var(--ft-search-bg) !important;
    border-color: var(--ft-search-border) !important;
    color: var(--ft-color-text-primary) !important;
}

.ft-radzen-scope .rz-textbox:focus,
.ft-radzen-scope .rz-dropdown:focus-within {
    border-color: var(--ft-search-focus-border) !important;
    box-shadow: 0 0 0 2px rgba(34, 211, 238, 0.12) !important;
}

.ft-radzen-scope .rz-button.rz-button-md.rz-variant-filled.rz-primary {
    background: var(--ft-btn-primary-bg) !important;
    color: var(--ft-btn-primary-text) !important;
}

.ft-radzen-scope .rz-datatable {
    background: var(--ft-card-bg);
    border: 1px solid var(--ft-card-border);
    border-radius: var(--ft-radius-md);
}

.ft-radzen-scope .rz-datatable thead th {
    background: var(--ft-table-header-bg) !important;
    color: var(--ft-color-text-secondary) !important;
    border-color: var(--ft-table-border) !important;
}

.ft-radzen-scope .rz-datatable tbody tr:hover {
    background: var(--ft-table-row-hover) !important;
}

.ft-radzen-scope .rz-paginator {
    background: var(--ft-color-bg-surface);
    border-color: var(--ft-table-border);
    color: var(--ft-color-text-secondary);
}

.ft-radzen-scope .rz-card {
    background: var(--ft-card-bg) !important;
    border: 1px solid var(--ft-card-border) !important;
    color: var(--ft-color-text-primary) !important;
}

.ft-radzen-scope .rz-text,
.ft-radzen-scope .rz-column-title {
    color: var(--ft-color-text-primary);
}

.ft-radzen-scope .rz-tabs {
    background: transparent;
}

.ft-radzen-scope .rz-tabview-nav {
    background: var(--ft-color-bg-surface);
    border-color: var(--ft-table-border);
}

/* ─── Radzen Material Symbols icon fix (ligatures break under uppercase parents) ─── */

@font-face {
    font-family: "Material Symbols";
    src: url("/_content/Radzen.Blazor/fonts/MaterialSymbolsOutlined.woff2") format("woff2");
    font-style: normal;
    font-weight: 100 700;
    font-display: block;
}

.rzi,
.rz-icon,
.material-icons,
.material-symbols-outlined,
.hud-layout .rzi,
.ft-radzen-scope .rzi,
[class*="rz-"] .rzi,
[class*="rz-"] .rz-icon {
    font-family: "Material Symbols", "Material Symbols Outlined", "Material Icons" !important;
    font-weight: normal !important;
    font-style: normal !important;
    letter-spacing: normal !important;
    text-transform: none !important;
    font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24;
    -webkit-font-smoothing: antialiased;
    display: inline-block;
    line-height: 1;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
}

/* ─── Canonical HUD page stats row ─── */

.ft-page-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: var(--ft-space-4);
    margin-top: var(--ft-space-5);
    padding-top: var(--ft-space-5);
    border-top: 1px solid rgba(255, 255, 255, 0.1);
}

.ft-page-stats .ft-stat-card {
    display: flex;
    align-items: center;
    gap: var(--ft-space-4);
    transition: border-color var(--ft-transition-normal), box-shadow var(--ft-transition-normal);
}

.ft-page-stats .ft-stat-card:hover {
    border-color: var(--ft-color-border-strong);
    box-shadow: var(--ft-shadow-glow);
}

.ft-stat-card--error .ft-stat-card__value { color: var(--ft-color-danger-text); }
.ft-stat-card--warning .ft-stat-card__value { color: var(--ft-color-warning-text); }
.ft-stat-card--info .ft-stat-card__value { color: var(--ft-color-info-text); }
.ft-stat-card--success .ft-stat-card__value { color: var(--ft-color-success-text); }

.ft-stat-card__icon {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1.15rem;
    background: rgba(34, 211, 238, 0.1);
    color: var(--ft-color-primary);
    flex-shrink: 0;
}

.ft-stat-card--error .ft-stat-card__icon {
    background: var(--ft-color-danger-bg);
    color: var(--ft-color-danger-text);
}

.ft-stat-card--warning .ft-stat-card__icon {
    background: var(--ft-color-warning-bg);
    color: var(--ft-color-warning-text);
}

.ft-stat-card--info .ft-stat-card__icon {
    background: var(--ft-color-info-bg);
    color: var(--ft-color-info-text);
}

/* ─── HUD bracket table card (alias + extension) ─── */

.ft-hud-bracket-card,
.ft-page-content.ft-hud-table-card {
    position: relative;
}

/* ─── Deprecated legacy purple gradient — remapped to HUD tokens ─── */

.ft-legacy-gradient-banner,
.logs-header.ft-page-banner {
    background: var(--ft-page-banner-bg) !important;
    border: 1px solid var(--ft-page-banner-border) !important;
    color: var(--ft-page-banner-text) !important;
    box-shadow: var(--ft-shadow-glow) !important;
}

/* ─── Empty state ─── */

.ft-empty-state {
    text-align: center;
    padding: var(--ft-space-8);
    color: var(--ft-color-text-muted);
}

.ft-empty-state__icon {
    font-size: 3rem;
    margin-bottom: var(--ft-space-4);
    opacity: 0.5;
}

/* ─── Responsive ─── */

@media (max-width: 768px) {
    .ft-page { padding: var(--ft-space-3); }
    .ft-page-banner { padding: var(--ft-space-5); }
    .ft-search-bar { flex-direction: column; align-items: stretch; }
    .ft-search-bar__input { min-width: auto; }
    .ft-filter-panel__grid { grid-template-columns: 1fr; }
    .ft-filter-panel__actions { flex-direction: column; gap: var(--ft-space-3); }
}
