* {
    box-sizing: border-box;
    margin: 0;
    padding: 0
}

:root {
    --lightningcss-light: initial;
    --lightningcss-dark: ;
    color-scheme: light;
    --bg: #f8f9fb;
    --bg2: #fff;
    --bg3: #f2f3f7;
    --bg4: #ebedf2;
    --device-screen: #fff;
    --border: #e2e5ed;
    --border2: #d1d5e0;
    --text: #1e2432;
    --text2: #6b7280;
    --text3: #9ca3af;
    --accent: #4f6ef7;
    --accent2: #3b5ce5;
    --accent-light: #eef2ff;
    --green: #10b981;
    --green-light: #ecfdf5;
    --red: #ef4444;
    --red-light: #fef2f2;
    --orange: #f59e0b;
    --orange-light: #fffbeb;
    --purple: #8b5cf6;
    --purple-light: #f5f3ff;
    --radius: 10px;
    --radius-lg: 14px;
    --radius-sm: 6px;
    --shadow-sm: 0 1px 2px #0000000a;
    --shadow-md: 0 2px 8px #0000000f, 0 1px 2px #00000008;
    --shadow-lg: 0 4px 16px #00000014, 0 1px 4px #0000000a;
    --shadow-xl: 0 8px 32px #0000001a, 0 2px 8px #0000000d;
    --transition: .18s ease;
    --bg-primary: var(--bg);
    --bg-secondary: var(--bg2);
    --text-1: var(--text);
    --text-2: var(--text2);
    --bg-hover: var(--bg3);
    --accent-hover: var(--accent2)
}

html[data-theme=dark] {
    --lightningcss-light: ;
    --lightningcss-dark: initial;
    color-scheme: dark;
    --bg: #07090d;
    --bg2: #0d1016;
    --bg3: #141821;
    --bg4: #1c212b;
    --device-screen: #1c212b;
    --border: #303844;
    --border2: #465160;
    --text: #f8fafc;
    --text2: #cbd2dc;
    --text3: #98a3b2;
    --accent: #8291ff;
    --accent2: #9eabff;
    --accent-light: #171d3b;
    --green: #35d399;
    --green-light: #0c271f;
    --red: #ff6878;
    --red-light: #2b1118;
    --orange: #f8b84e;
    --orange-light: #2b2110;
    --purple: #b49aff;
    --purple-light: #231a38;
    --shadow-sm: 0 1px 2px #0000004d;
    --shadow-md: 0 4px 12px #0000004d;
    --shadow-lg: 0 12px 30px #0000006b;
    --shadow-xl: 0 22px 60px #0000008f
}

body {
    background: var(--bg);
    color: var(--text);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    height: 100vh;
    font-family: Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;
    transition: background-color .18s,color .18s;
    overflow: hidden
}

.app {
    flex-direction: column;
    height: 100vh;
    display: flex
}

.header {
    background: var(--bg2);
    border-bottom: 1px solid var(--border);
    height: 58px;
    box-shadow: none;
    z-index: 10;
    flex-shrink: 0;
    justify-content: space-between;
    align-items: center;
    padding: 0 20px;
    display: flex;
    position: relative
}

.app-brand {
    flex: 0 0 126px;
    align-items: center;
    width: 126px;
    display: flex
}

.moying-brand {
    color: #172033;
    align-items: center;
    gap: 11px;
    width: fit-content;
    display: inline-flex
}

.moying-brand-mark {
    filter: drop-shadow(0 4px 10px #4054d629);
    flex: none;
    display: block
}

.moying-wordmark {
    white-space: nowrap;
    align-items: center;
    gap: 7px;
    display: inline-flex
}

.moying-wordmark strong {
    color: currentColor;
    letter-spacing: -.06em;
    font-size: 20px;
    font-weight: 780;
    line-height: 1
}

.moying-wordmark em {
    color: #4054d6;
    letter-spacing: .05em;
    background: #4054d612;
    border: 1px solid #4054d62e;
    border-radius: 5px;
    justify-content: center;
    align-items: center;
    height: 18px;
    padding: 0 6px;
    font-size: 9px;
    font-style: normal;
    font-weight: 800;
    line-height: 1;
    display: inline-flex
}

.moying-brand.is-inverse {
    color: #fff
}

.moying-brand.is-inverse .moying-wordmark em {
    color: #cbd2ff;
    background: #ffffff14;
    border-color: #ffffff2e
}

.moying-brand.is-compact {
    gap: 9px
}

.moying-brand.is-compact .moying-wordmark {
    gap: 5px
}

.moying-brand.is-compact .moying-wordmark strong {
    font-size: 16px
}

.moying-brand.is-compact .moying-wordmark em {
    height: 16px;
    padding: 0 5px;
    font-size: 8px
}

.header .moying-brand-mark {
    filter: none
}

.header .moying-wordmark strong {
    color: #242d41
}

.header .moying-wordmark em {
    color: #4054d6
}

.header-center {
    flex: 1;
    justify-content: center;
    align-items: center;
    gap: 14px;
    min-width: 0;
    display: flex
}

.search-box {
    color: var(--text);
    width: 280px;
    transition: border-color var(--transition), box-shadow var(--transition);
    background: #f6f7f9;
    border: 1px solid #e6e8ec;
    border-radius: 9px;
    outline: none;
    padding: 8px 12px;
    font-size: 13px
}

.search-box:focus {
    border-color: var(--accent);
    background: var(--bg2);
    box-shadow: 0 0 0 2px #4f6ef717
}

.overview-strip {
    flex-shrink: 0;
    align-items: center;
    gap: 0;
    height: 36px;
    padding: 0 2px;
    display: flex
}

.overview-card {
    min-width: 94px;
    height: 36px;
    box-shadow: none;
    white-space: nowrap;
    background: 0 0;
    border: none;
    border-radius: 0;
    align-items: center;
    gap: 7px;
    padding: 0 12px;
    display: flex;
    position: relative;
    overflow: hidden
}

.overview-card:after {
    display: none
}

.overview-card+.overview-card {
    border-left: 1px solid #e7e9ed
}

.overview-icon {
    border-radius: 7px;
    flex-shrink: 0;
    place-items: center;
    width: 24px;
    height: 24px;
    display: grid
}

.overview-icon svg {
    width: 14px;
    height: 14px
}

.overview-copy {
    grid-template-columns: auto;
    align-content: center;
    line-height: 1;
    display: grid
}

.overview-copy strong {
    letter-spacing: -.35px;
    font-variant-numeric: tabular-nums;
    font-size: 15px;
    font-weight: 800;
    line-height: 16px
}

.overview-copy small {
    color: var(--text3);
    letter-spacing: .5px;
    margin-top: 2px;
    font-size: 8px;
    font-weight: 600
}

.overview-online {
    color: #059669
}

.overview-online .overview-icon {
    box-shadow: none;
    background: #e9f8f2
}

.overview-online .overview-icon svg {
    animation: none
}

.overview-total {
    color: #475569
}

.overview-total .overview-icon {
    box-shadow: none;
    background: #eef1f5
}

@keyframes overview-signal {
    0%,to {
        opacity: 1;
        transform: scale(1)
    }

    50% {
        opacity: .62;
        transform: scale(.94)
    }
}

@keyframes pulse-dot {
    0%,to {
        opacity: 1
    }

    50% {
        opacity: .4
    }
}

@keyframes pulse-notice {
    0%,to {
        opacity: 1;
        transform: scale(1)
    }

    50% {
        opacity: .85;
        transform: scale(1.02)
    }
}

.stats-bar {
    background: #f8f9fb;
    border: 1px solid #e6e8ec;
    border-radius: 10px;
    flex-shrink: 0;
    align-items: center;
    gap: 0;
    height: 38px;
    padding: 2px 4px;
    display: flex
}

.stats-group {
    height: 32px;
    box-shadow: none;
    background: 0 0;
    border: none;
    border-radius: 0;
    align-items: stretch;
    display: flex;
    overflow: hidden
}

.stats-group-yesterday {
    border-left: 1px solid #e1e4e9;
    margin-left: 4px;
    padding-left: 4px
}

.stats-group-title {
    flex-direction: column;
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    width: 40px;
    line-height: 1;
    display: flex
}

.stats-group-title span {
    letter-spacing: .5px;
    font-size: 9px;
    font-weight: 750
}

.stats-group-title small {
    display: none
}

.stats-group-today .stats-group-title {
    color: #4361ee;
    background: 0 0;
    border-right: none
}

.stats-group-yesterday .stats-group-title {
    color: #64748b;
    background: 0 0;
    border-right: none
}

.stat-card {
    white-space: nowrap;
    cursor: default;
    min-width: 55px;
    height: 100%;
    transition: background var(--transition), transform var(--transition);
    border-left: 1px solid #e6e8ec;
    border-right: none;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    gap: 1px;
    padding: 0 8px;
    display: flex
}

.stat-card:hover {
    background: #f1f3f6
}

.stat-card .stat-num {
    letter-spacing: -.25px;
    font-variant-numeric: tabular-nums;
    font-size: 13px;
    font-weight: 750;
    line-height: 15px
}

.stat-card .stat-label {
    color: var(--text3);
    letter-spacing: .25px;
    font-size: 8px;
    font-weight: 600
}

.stat-card.card-today-new .stat-num {
    color: #4361ee
}

.stat-card.card-today-off .stat-num {
    color: #ef4444
}

.stat-card.card-today-acc .stat-num {
    color: #8b5cf6
}

.stat-card.card-yest-on .stat-num {
    color: #475569
}

.stat-card.card-yest-off .stat-num,.stat-card.card-yest-acc .stat-num {
    color: #64748b
}

.stats-sep {
    display: none
}

.header-right {
    flex-shrink: 0;
    align-items: center;
    gap: 5px;
    display: flex
}

.account-card {
    height: 36px;
    box-shadow: none;
    background: #f6f7f9;
    border: none;
    border-radius: 9px;
    align-items: center;
    gap: 7px;
    min-width: 220px;
    padding: 3px 7px 3px 5px;
    display: flex
}

.account-avatar {
    color: #fff;
    width: 26px;
    height: 26px;
    box-shadow: none;
    background: #4658d9;
    border-radius: 7px;
    flex-shrink: 0;
    place-items: center;
    font-size: 10px;
    font-weight: 800;
    display: grid
}

.account-copy {
    flex-direction: column;
    justify-content: center;
    min-width: 0;
    line-height: 1;
    display: flex
}

.account-copy strong {
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 112px;
    color: var(--text);
    font-size: 10px;
    font-weight: 700;
    line-height: 12px;
    overflow: hidden
}

.account-copy small {
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 145px;
    color: var(--text3);
    letter-spacing: .15px;
    margin-top: 2px;
    font-size: 8px;
    font-weight: 600;
    line-height: 10px;
    overflow: hidden
}

.account-expiry {
    white-space: nowrap;
    border-radius: 6px;
    margin-left: auto;
    padding: 3px 6px;
    font-size: 8px;
    font-weight: 750;
    line-height: 1
}

.account-expiry.is-valid {
    color: #07875f;
    background: #e8faf2
}

.account-expiry.is-warning {
    color: #b66b06;
    background: #fff7df
}

.account-expiry.is-expired {
    color: #dc2626;
    background: #fff0f0
}

.header-action {
    height: 34px;
    color: var(--text2);
    box-shadow: none;
    cursor: pointer;
    background: #fff;
    border: 1px solid #e6e8ec;
    border-radius: 8px;
    justify-content: center;
    align-items: center;
    gap: 5px;
    padding: 0 9px;
    font-size: 10px;
    font-weight: 700;
    transition: border-color .15s,color .15s,background .15s;
    display: inline-flex
}

.header-action svg {
    width: 14px;
    height: 14px
}

.header-action:hover {
    color: var(--text);
    background: #f7f8fa;
    border-color: #cfd4dd
}

.header-speed.is-good {
    color: #059669;
    background: #f6fbf8;
    border-color: #d3eadf
}

.header-speed.is-warning {
    color: #b66b06;
    background: #fcfaf5;
    border-color: #eadfc8
}

.header-speed.is-poor {
    color: #dc2626;
    background: #fdf8f8;
    border-color: #ecd4d4
}

.header-logout:hover {
    color: #dc2626;
    background: #fff5f5;
    border-color: #f3c7c7
}

.theme-switch {
    border: 1px solid var(--border);
    height: 34px;
    color: var(--text2);
    background: var(--bg2);
    cursor: pointer;
    white-space: nowrap;
    font: inherit;
    border-radius: 8px;
    justify-content: center;
    align-items: center;
    gap: 6px;
    padding: 0 10px;
    font-size: 10px;
    font-weight: 700;
    transition: color .15s,border-color .15s,background .15s;
    display: inline-flex
}

.theme-switch:hover {
    color: var(--text);
    border-color: var(--border2);
    background: var(--bg3)
}

.theme-switch-icon {
    flex: none;
    place-items: center;
    width: 15px;
    height: 15px;
    display: grid
}

.theme-switch-icon svg {
    width: 15px;
    height: 15px
}

.theme-switch.is-compact {
    border-radius: 7px;
    width: 32px;
    height: 30px;
    padding: 0
}

.auth-theme-switch {
    z-index: 20;
    background: color-mix(in srgb, var(--bg2) 90%, transparent);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    height: 36px;
    padding: 0 12px;
    position: fixed;
    top: 22px;
    right: 24px
}

@media (width<=1640px) {
    .account-card {
        min-width: 180px
    }

    .account-expiry {
        display: none
    }

    .account-copy small {
        max-width: 122px
    }
}

@media (width<=1180px) {
    .account-card {
        min-width: 0;
        padding-right: 6px
    }

    .account-copy small {
        display: none
    }

    .account-copy strong {
        max-width: 84px
    }

    .header-action {
        width: 38px;
        padding: 0
    }

    .header-action span {
        display: none
    }

    .header-right>.theme-switch {
        width: 38px;
        padding: 0
    }

    .header-right>.theme-switch .theme-switch-label {
        display: none
    }
}

@media (width<=1640px) {
    .header {
        padding: 0 16px
    }

    .header-center {
        gap: 10px
    }

    .search-box {
        width: 220px
    }

    .overview-card {
        min-width: 90px;
        padding: 0 10px
    }

    .stat-card {
        min-width: 52px;
        padding: 0 7px
    }
}

@media (width<=1400px) {
    .search-box,.stats-group-yesterday {
        display: none
    }
}

@media (width<=1000px) {
    .stats-bar {
        display: none
    }

    .overview-card {
        min-width: 88px
    }
}

.main {
    flex: 1;
    display: flex;
    overflow: hidden
}

.sidebar {
    z-index: 5;
    width: 68px;
    box-shadow: none;
    background: #fff;
    border-right: 1px solid #e6e8ec;
    flex-direction: column;
    flex-shrink: 0;
    align-items: center;
    gap: 2px;
    padding: 8px 6px 6px;
    display: flex;
    position: relative
}

.sidebar:before {
    display: none
}

.nav-btn {
    width: 52px;
    min-height: 48px;
    color: var(--text2);
    cursor: pointer;
    background: 0 0;
    border: 1px solid #0000;
    border-radius: 10px;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    gap: 4px;
    padding: 6px 4px 5px;
    text-decoration: none;
    transition: color .15s,background .15s;
    display: flex;
    position: relative
}

.nav-btn:hover {
    color: #3f4b61;
    box-shadow: none;
    background: #f5f6f8;
    border-color: #0000;
    transform: none
}

.nav-btn.active {
    color: #4361ee;
    box-shadow: none;
    background: #f0f2ff;
    border-color: #0000
}

.nav-btn.active:before {
    content: "";
    width: 2px;
    box-shadow: none;
    background: #4f63e9;
    border-radius: 0 2px 2px 0;
    position: absolute;
    top: 12px;
    bottom: 12px;
    left: -7px
}

.nav-btn svg {
    stroke-width: 1.8px;
    flex-shrink: 0;
    width: 19px;
    height: 19px;
    transition: transform .16s
}

.nav-btn:hover svg {
    transform: none
}

.nav-btn.active svg {
    filter: none
}

.nav-btn .nav-label {
    letter-spacing: .35px;
    white-space: nowrap;
    font-size: 9px;
    font-weight: 600;
    line-height: 10px
}

.nav-announcement {
    color: #7c5ce7;
    background: 0 0;
    border-color: #0000;
    margin-bottom: 0
}

.v2-logo {
    border-bottom: 1px solid var(--border);
    cursor: default;
    justify-content: center;
    align-items: center;
    width: 48px;
    height: 48px;
    margin-bottom: 8px;
    padding-bottom: 10px;
    animation: 3s ease-in-out infinite v2pulse;
    display: flex
}

@keyframes v2pulse {
    0%,to {
        filter: drop-shadow(0 0 4px #4f6ef74d)
    }

    50% {
        filter: drop-shadow(0 0 12px #4f6ef780)
    }
}

.table-area {
    flex-direction: column;
    flex: 1;
    display: flex;
    overflow: hidden
}

.table-toolbar {
    border-bottom: 1px solid var(--border);
    background: #fff;
    flex-wrap: wrap;
    flex-shrink: 0;
    align-items: center;
    gap: 10px;
    min-height: 50px;
    padding: 7px 12px;
    display: flex
}

.table-toolbar .count {
    color: var(--text2);
    font-size: 13px;
    font-weight: 500
}

.toolbar-primary {
    min-height: 34px;
    box-shadow: none;
    background: 0 0;
    border: none;
    border-radius: 0;
    align-items: center;
    gap: 7px;
    padding: 0;
    display: flex
}

.device-count-card {
    color: #3f4b61;
    white-space: nowrap;
    background: #f5f6f8;
    border-radius: 8px;
    align-items: baseline;
    gap: 5px;
    height: 34px;
    padding: 0 10px;
    display: flex
}

.device-count-card strong {
    color: #344054;
    font-variant-numeric: tabular-nums;
    font-size: 14px;
    font-weight: 800
}

.device-count-card span {
    color: var(--text3);
    letter-spacing: .2px;
    font-size: 9px;
    font-weight: 650
}

.toolbar-refresh {
    color: #fff;
    cursor: pointer;
    white-space: nowrap;
    background: #4658d9;
    border: 1px solid #4658d9;
    border-radius: 8px;
    align-items: center;
    gap: 5px;
    height: 34px;
    padding: 0 11px;
    font-size: 10px;
    font-weight: 750;
    transition: background .15s,border-color .15s;
    display: inline-flex
}

.toolbar-refresh svg {
    width: 14px;
    height: 14px
}

.toolbar-refresh:hover:not(:disabled) {
    box-shadow: none;
    background: #3949bd;
    border-color: #3949bd;
    transform: none
}

.toolbar-refresh:disabled {
    opacity: .62;
    cursor: wait
}

.toolbar-refresh:disabled svg {
    animation: .85s linear infinite toolbar-spin
}

@keyframes toolbar-spin {
    to {
        transform: rotate(360deg)
    }
}

.toolbar-clean-offline {
    color: #c2412d;
    cursor: pointer;
    white-space: nowrap;
    background: #fff7f4;
    border: 1px solid #f0d1c7;
    border-radius: 8px;
    align-items: center;
    gap: 5px;
    height: 34px;
    padding: 0 10px;
    font-size: 10px;
    font-weight: 750;
    transition: color .15s,background .15s,border-color .15s;
    display: inline-flex
}

.toolbar-clean-offline svg {
    width: 13px;
    height: 13px
}

.toolbar-clean-offline:hover:not(:disabled) {
    color: #9f2f20;
    background: #ffede8;
    border-color: #e7b8aa
}

.toolbar-clean-offline:disabled {
    opacity: .58;
    cursor: wait
}

.snapshot-hint {
    color: var(--text3);
    white-space: nowrap;
    align-items: center;
    gap: 5px;
    padding: 0 7px 0 4px;
    font-size: 9px;
    font-weight: 550;
    display: inline-flex
}

.snapshot-hint i {
    width: 5px;
    height: 5px;
    box-shadow: none;
    background: #c6ccd7;
    border-radius: 50%
}

.snapshot-hint.is-loading {
    color: #4361ee
}

.snapshot-hint.is-loading i {
    box-shadow: none;
    background: #617af8;
    animation: 1s ease-in-out infinite pulse-dot
}

.filter-chips {
    min-height: 34px;
    box-shadow: none;
    background: 0 0;
    border: none;
    border-radius: 0;
    align-items: center;
    gap: 5px;
    padding: 0;
    display: flex
}

.table-toolbar .filter-chip {
    color: #697386;
    letter-spacing: .1px;
    cursor: pointer;
    white-space: nowrap;
    background: #f5f6f8;
    border: 1px solid #0000;
    border-radius: 8px;
    align-items: center;
    gap: 5px;
    height: 30px;
    padding: 0 8px;
    font-size: 9px;
    font-weight: 650;
    line-height: 1;
    transition: color .15s,background .15s,border-color .15s;
    display: inline-flex;
    position: relative
}

.filter-chip input {
    opacity: 0;
    pointer-events: none;
    width: 1px;
    height: 1px;
    position: absolute
}

.filter-indicator {
    width: 5px;
    height: 5px;
    box-shadow: none;
    background: #c9ced8;
    border-radius: 50%;
    flex-shrink: 0;
    transition: background .15s,box-shadow .15s
}

.table-toolbar .filter-chip:hover {
    color: var(--text);
    background: #eceef2
}

.table-toolbar .filter-chip.is-active {
    color: #4361ee;
    box-shadow: none;
    background: #eff1ff;
    border-color: #d9e1ff
}

.filter-chip.is-active .filter-indicator {
    box-shadow: none;
    background: #617af8
}

.table-toolbar .filter-online.is-active {
    color: #07875f;
    background: #effbf6;
    border-color: #c9eddc
}

.filter-online.is-active .filter-indicator {
    box-shadow: none;
    background: #10b981
}

.table-toolbar .filter-acc.is-active {
    color: #7c3aed;
    background: #f7f2ff;
    border-color: #e2d5fb
}

.filter-acc.is-active .filter-indicator {
    box-shadow: none;
    background: #8b5cf6
}

.table-toolbar .filter-important.is-active {
    color: #dc2626;
    background: #fff3f3;
    border-color: #f1cccc
}

.filter-important.is-active .filter-indicator {
    box-shadow: none;
    background: #ef4444
}

.table-toolbar .filter-follow.is-active {
    color: #b66b06;
    background: #fff9ed;
    border-color: #f2dfb9
}

.filter-follow.is-active .filter-indicator {
    box-shadow: none;
    background: #f59e0b
}

.table-toolbar .date-filter-control {
    color: #7b8494;
    height: 34px;
    box-shadow: none;
    background: #f5f6f8;
    border: 1px solid #0000;
    border-radius: 8px;
    align-items: center;
    gap: 6px;
    padding: 0 9px;
    display: flex
}

.date-filter-control svg {
    flex-shrink: 0;
    width: 14px;
    height: 14px
}

.date-filter-control input {
    width: 104px;
    color: var(--text2);
    cursor: pointer;
    background: 0 0;
    border: none;
    outline: none;
    font-family: inherit;
    font-size: 9px;
    font-weight: 650
}

.table-toolbar .date-filter-control.has-value {
    color: #4361ee;
    background: #f7f8ff;
    border-color: #d8e0ff
}

@media (width<=1500px) {
    .snapshot-hint {
        display: none
    }

    .table-toolbar {
        gap: 7px
    }

    .table-toolbar .filter-chip {
        padding: 0 7px
    }
}

@media (width<=1180px) {
    .filter-chips {
        order: 3;
        width: 100%;
        overflow-x: auto
    }

    .date-filter-control {
        margin-left: auto
    }
}

.table-toolbar .refresh-btn,.refresh-btn {
    background: var(--bg2);
    border: 1px solid var(--border);
    color: var(--text);
    border-radius: var(--radius-sm);
    cursor: pointer;
    box-shadow: var(--shadow-sm);
    transition: all var(--transition);
    padding: 6px 16px;
    font-size: 12px;
    font-weight: 500
}

.table-toolbar .refresh-btn:hover,.refresh-btn:hover {
    border-color: var(--accent);
    color: var(--accent);
    background: var(--accent-light)
}

.table-wrap {
    background: var(--bg2);
    flex: 1;
    overflow: auto
}

table {
    border-collapse: collapse;
    width: 100%;
    font-size: 13px
}

thead {
    z-index: 2;
    position: sticky;
    top: 0
}

th {
    background: var(--bg3);
    color: var(--text2);
    text-align: left;
    border-bottom: 1px solid var(--border2);
    white-space: nowrap;
    text-transform: uppercase;
    letter-spacing: .5px;
    padding: 10px 14px;
    font-size: 11px;
    font-weight: 600
}

td {
    border-bottom: 1px solid var(--border);
    white-space: nowrap;
    text-overflow: ellipsis;
    max-width: 200px;
    padding: 10px 14px;
    overflow: hidden
}

tr {
    cursor: pointer;
    transition: background var(--transition)
}

tr:hover {
    background: var(--accent-light)
}

tr.selected {
    box-shadow: inset 3px 0 0 var(--accent);
    background: #4f6ef714
}

tr.pinned-row {
    border-left: 3px solid var(--accent)!important;
    background: #4f6ef71a!important
}

tr.pinned-row:hover {
    background: #4f6ef726!important
}

.status-dot {
    border-radius: 50%;
    width: 8px;
    height: 8px;
    margin-right: 6px;
    transition: all .3s;
    display: inline-block
}

.status-dot.on {
    background: var(--green);
    box-shadow: 0 0 0 3px #10b98126
}

.status-dot.off {
    background: var(--text3);
    opacity: .4
}

.battery {
    font-size: 12px;
    font-weight: 600
}

.battery.high {
    color: var(--green)
}

.battery.mid {
    color: var(--orange)
}

.battery.low {
    color: var(--red)
}

.tag {
    border-radius: 20px;
    padding: 3px 10px;
    font-size: 11px;
    font-weight: 600;
    display: inline-block
}

.tag-wifi {
    background: var(--accent-light);
    color: var(--accent)
}

.tag-4g {
    background: var(--purple-light);
    color: var(--purple)
}

.tag-5g {
    background: var(--green-light);
    color: var(--green)
}

.tag-warn {
    background: var(--orange-light);
    color: var(--orange)
}

.tag-acc-on {
    background: var(--green-light);
    color: var(--green);
    font-weight: 600
}

.tag-acc-off {
    background: var(--red-light);
    color: var(--red);
    font-weight: 600
}

.tag-acc-ever {
    background: var(--orange-light);
    color: var(--orange);
    font-weight: 600
}

.tag-gray {
    background: var(--bg3);
    color: var(--text2)
}

.device-id {
    color: var(--text2);
    font-family: SF Mono,Cascadia Code,monospace;
    font-size: 11px
}

.note-cell {
    cursor: text;
    min-width: 80px
}

.note-cell:hover {
    background: var(--bg3);
    border-radius: 4px
}

.cb-wrap {
    text-align: center;
    width: 30px
}

.cb-wrap input {
    cursor: pointer;
    accent-color: var(--accent)
}

.ctrl-link {
    background: var(--accent);
    color: #fff;
    white-space: nowrap;
    transition: background var(--transition);
    border-radius: 20px;
    padding: 4px 12px;
    font-size: 11px;
    font-weight: 600;
    text-decoration: none;
    display: inline-block
}

.ctrl-link:hover {
    background: var(--accent2);
    color: #fff
}

.detail-panel {
    background: var(--bg2);
    border-left: 1px solid var(--border);
    flex-shrink: 0;
    width: 0;
    transition: width .25s;
    overflow-y: auto;
    box-shadow: -2px 0 8px #0000000a
}

.detail-panel.open {
    width: 380px
}

.dp-header {
    border-bottom: 1px solid var(--border);
    justify-content: space-between;
    align-items: center;
    padding: 18px 20px;
    display: flex
}

.dp-header h3 {
    font-size: 15px;
    font-weight: 700
}

.dp-close {
    background: var(--bg3);
    border: 1px solid var(--border);
    color: var(--text2);
    cursor: pointer;
    border-radius: var(--radius-sm);
    transition: all var(--transition);
    padding: 4px 8px;
    font-size: 14px
}

.dp-close:hover {
    background: var(--bg4);
    color: var(--text)
}

.dp-section {
    border-bottom: 1px solid var(--border);
    padding: 14px 20px
}

.dp-section h4 {
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: .6px;
    margin-bottom: 10px;
    font-size: 11px;
    font-weight: 600
}

.dp-info {
    grid-template-columns: auto 1fr;
    gap: 6px 14px;
    font-size: 13px;
    display: grid
}

.dp-info .label {
    color: var(--text2)
}

.dp-info .value {
    color: var(--text);
    word-break: break-all
}

.cmd-grid {
    grid-template-columns: 1fr 1fr;
    gap: 6px;
    display: grid
}

.cmd-btn {
    border: 1px solid var(--border);
    background: var(--bg2);
    color: var(--text);
    border-radius: var(--radius-sm);
    cursor: pointer;
    text-align: center;
    transition: all var(--transition);
    white-space: nowrap;
    text-overflow: ellipsis;
    padding: 8px 4px;
    font-size: 11px;
    overflow: hidden
}

.cmd-btn:hover {
    border-color: var(--accent);
    color: var(--accent);
    background: var(--accent-light)
}

.cmd-btn:active {
    background: var(--bg3)
}

.cmd-btn.danger {
    color: var(--red)
}

.cmd-btn.danger:hover {
    background: var(--red-light);
    border-color: var(--red)
}

.cmd-btn.success {
    color: var(--green)
}

.cmd-btn.success:hover {
    background: var(--green-light);
    border-color: var(--green)
}

.cmd-cat {
    color: var(--accent);
    text-transform: uppercase;
    margin: 8px 0 4px;
    font-size: 11px;
    font-weight: 600
}

.cmd-cat:first-child {
    margin-top: 0
}

.msg-list {
    max-height: 300px;
    overflow-y: auto
}

.msg-item {
    border-bottom: 1px solid var(--border);
    padding: 6px 0;
    font-size: 12px
}

.msg-item .msg-time {
    color: var(--text3);
    font-size: 11px
}

.msg-item .msg-action {
    margin: 0 4px;
    font-weight: 600
}

.msg-item .msg-dir-in {
    color: var(--green)
}

.msg-item .msg-dir-out {
    color: var(--orange)
}

.msg-item .msg-preview {
    color: var(--text2);
    word-break: break-all;
    max-height: 60px;
    font-size: 11px;
    overflow: hidden
}

.modal-overlay {
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
    z-index: 100;
    background: #0000004d;
    justify-content: center;
    align-items: center;
    display: none;
    position: fixed;
    inset: 0
}

.modal-overlay.show {
    display: flex
}

.modal {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    width: 480px;
    max-width: 90vw;
    max-height: 80vh;
    box-shadow: var(--shadow-xl);
    padding: 28px;
    animation: .2s ease-out modal-in;
    overflow-y: auto
}

@keyframes modal-in {
    0% {
        opacity: 0;
        transform: scale(.96)translateY(8px)
    }

    to {
        opacity: 1;
        transform: scale(1)translateY(0)
    }
}

.modal h3 {
    margin-bottom: 18px;
    font-size: 17px;
    font-weight: 700
}

.modal label {
    color: var(--text2);
    margin-bottom: 5px;
    font-size: 13px;
    font-weight: 500;
    display: block
}

.modal input,.modal textarea,.modal select {
    background: var(--bg3);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    width: 100%;
    color: var(--text);
    transition: border-color var(--transition), box-shadow var(--transition);
    outline: none;
    margin-bottom: 14px;
    padding: 10px 14px;
    font-size: 13px
}

.modal input:focus,.modal textarea:focus {
    border-color: var(--accent);
    background: var(--bg2);
    box-shadow: 0 0 0 3px #4f6ef714
}

.modal textarea {
    resize: vertical;
    min-height: 60px
}

.modal-actions {
    justify-content: flex-end;
    gap: 10px;
    margin-top: 10px;
    display: flex
}

.modal-actions button {
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: all var(--transition);
    border: none;
    padding: 9px 22px;
    font-size: 13px;
    font-weight: 600
}

.btn-primary {
    background: var(--accent);
    color: #fff;
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: all var(--transition);
    border: none;
    padding: 9px 22px;
    font-size: 13px;
    font-weight: 600
}

.btn-primary:hover {
    background: var(--accent2);
    box-shadow: 0 4px 12px #4f6ef740
}

.btn-primary:disabled {
    opacity: .5;
    cursor: not-allowed
}

.btn-cancel {
    background: var(--bg3);
    color: var(--text);
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: all var(--transition);
    padding: 9px 22px;
    font-size: 13px;
    font-weight: 600;
    border: 1px solid var(--border)!important
}

.btn-cancel:hover {
    background: var(--bg4)
}

.btn-danger-sm {
    background: var(--red);
    color: #fff;
    border-radius: var(--radius-sm);
    cursor: pointer;
    border: none;
    padding: 5px 12px;
    font-size: 11px;
    font-weight: 600
}

.btn-danger-sm:hover {
    background: #dc2626
}

.toast-container {
    z-index: 200;
    flex-direction: column;
    gap: 8px;
    display: flex;
    position: fixed;
    top: 64px;
    right: 24px
}

.toast {
    border-radius: var(--radius);
    min-width: 220px;
    box-shadow: var(--shadow-lg);
    padding: 12px 18px;
    font-size: 13px;
    font-weight: 500;
    animation: .25s ease-out slideIn
}

@keyframes slideIn {
    0% {
        opacity: 0;
        transform: translate(100%)scale(.9)
    }

    to {
        opacity: 1;
        transform: translate(0)scale(1)
    }
}

@keyframes hdPulse {
    0%,to {
        opacity: 1;
        transform: scale(1)
    }

    50% {
        opacity: .5;
        transform: scale(1.3)
    }
}

.toast-success {
    background: var(--green-light);
    color: var(--green);
    border: 1px solid #10b98133
}

.toast-error {
    background: var(--red-light);
    color: var(--red);
    border: 1px solid #ef444433
}

.toast-info {
    background: var(--accent-light);
    color: var(--accent);
    border: 1px solid #4f6ef733
}

.dp-tabs {
    border-bottom: 1px solid var(--border);
    background: var(--bg2);
    display: flex
}

.dp-tab {
    text-align: center;
    color: var(--text2);
    cursor: pointer;
    transition: all var(--transition);
    border-bottom: 2px solid #0000;
    flex: 1;
    padding: 10px;
    font-size: 12px;
    font-weight: 500
}

.dp-tab:hover {
    color: var(--text);
    background: var(--bg3)
}

.dp-tab.active {
    color: var(--accent);
    border-bottom-color: var(--accent);
    font-weight: 600
}

.dp-tab-content {
    display: none
}

.dp-tab-content.active {
    display: block
}

::-webkit-scrollbar {
    width: 6px;
    height: 6px
}

::-webkit-scrollbar-track {
    background: 0 0
}

::-webkit-scrollbar-thumb {
    background: var(--border2);
    border-radius: 3px
}

::-webkit-scrollbar-thumb:hover {
    background: var(--text3)
}

.inj-cat {
    color: var(--accent);
    border-bottom: 1px solid var(--border);
    align-items: center;
    gap: 8px;
    margin: 18px 0 10px;
    padding-bottom: 6px;
    font-size: 13px;
    font-weight: 700;
    display: flex
}

.inj-cat:first-child {
    margin-top: 0
}

.inj-cat svg {
    width: 16px;
    height: 16px
}

.inj-grid {
    grid-template-columns: repeat(auto-fill,minmax(280px,1fr));
    gap: 8px;
    display: grid
}

.inj-card {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    transition: all var(--transition);
    box-shadow: var(--shadow-sm);
    justify-content: space-between;
    align-items: center;
    padding: 12px 16px;
    display: flex
}

.inj-card:hover {
    border-color: var(--accent);
    box-shadow: var(--shadow-md)
}

.inj-card .app-name {
    color: var(--text);
    font-size: 13px;
    font-weight: 600
}

.inj-card .app-pkg {
    color: var(--text3);
    margin-top: 2px;
    font-size: 10px
}

.inj-toggle {
    cursor: pointer;
    flex-shrink: 0;
    width: 40px;
    height: 22px;
    position: relative
}

.inj-toggle input {
    opacity: 0;
    width: 0;
    height: 0
}

.inj-toggle .slider {
    background: var(--bg4);
    border: 1px solid var(--border);
    border-radius: 11px;
    transition: all .2s;
    position: absolute;
    inset: 0
}

.inj-toggle .slider:before {
    content: "";
    background: #fff;
    border-radius: 50%;
    width: 16px;
    height: 16px;
    transition: all .2s;
    position: absolute;
    bottom: 2px;
    left: 2px;
    box-shadow: 0 1px 3px #00000026
}

.inj-toggle input:checked+.slider {
    background: var(--accent);
    border-color: var(--accent)
}

.inj-toggle input:checked+.slider:before {
    transform: translate(18px)
}

.country-card {
    cursor: pointer;
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    text-align: center;
    transition: all var(--transition);
    padding: 16px
}

.country-card:hover {
    border-color: var(--accent);
    box-shadow: var(--shadow-md)
}

.note-edit {
    align-items: center;
    gap: 4px;
    margin-top: 8px;
    display: flex
}

.note-edit input {
    background: var(--bg3);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    color: var(--text);
    outline: none;
    flex: 1;
    padding: 6px 10px;
    font-size: 12px
}

.note-edit input:focus {
    border-color: var(--accent)
}

.note-edit button {
    background: var(--accent);
    color: #fff;
    border-radius: var(--radius-sm);
    cursor: pointer;
    border: none;
    min-width: 36px;
    min-height: 30px;
    padding: 6px 14px;
    font-size: 16px;
    line-height: 1
}

.login-page {
    background: linear-gradient(135deg,#f0f4ff 0%,#faf5ff 50%,#fff1f2 100%);
    justify-content: center;
    align-items: center;
    height: 100vh;
    display: flex
}

.auth-page {
    --auth-x: 50%;
    --auth-y: 45%;
    --auth-shift-x: 0px;
    --auth-shift-y: 0px;
    box-sizing: border-box;
    color: #172033;
    isolation: isolate;
    background-color: #f7f8fb;
    background-image: linear-gradient(#dce1eb52 1px,#0000 1px),linear-gradient(90deg,#dce1eb52 1px,#0000 1px),none;
    background-position: 0 0,0 0,0 0;
    background-repeat: repeat,repeat,repeat;
    background-size: 40px 40px;
    background-attachment: scroll,scroll,scroll;
    background-origin: padding-box,padding-box,padding-box;
    background-clip: border-box,border-box,border-box;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    padding: 32px;
    display: flex;
    position: relative;
    overflow: hidden
}

.auth-page-interactive:before,.auth-page-interactive:after {
    content: "";
    pointer-events: none;
    z-index: -1;
    position: absolute
}

.auth-page-interactive:before {
    background: radial-gradient(circle 360px at var(--auth-x) var(--auth-y), #5265e621, transparent 68%);
    transition: opacity .2s;
    inset: 0
}

.auth-page-interactive:after {
    width: 260px;
    height: 260px;
    left: calc(var(--auth-x) - 130px);
    top: calc(var(--auth-y) - 130px);
    opacity: .7;
    transform: translate3d(var(--auth-shift-x), var(--auth-shift-y), 0);
    border: 1px solid #4054d617;
    border-radius: 50%;
    transition: left 80ms linear,top 80ms linear,transform .16s ease-out
}

.auth-shell-stage {
    width: min(1040px,100%)
}

.auth-shell {
    background: #fff;
    border: 1px solid #dfe3eb;
    border-radius: 22px;
    grid-template-columns: 1.06fr .94fr;
    width: 100%;
    min-height: 620px;
    transition: box-shadow .2s;
    display: grid;
    overflow: hidden;
    box-shadow: 0 28px 80px #1f2a441c
}

.auth-page-interactive:hover .auth-shell {
    box-shadow: 0 32px 88px #1f2a4424
}

.auth-brand-panel {
    z-index: 1;
    color: #fff;
    isolation: isolate;
    background: #172033;
    flex-direction: column;
    min-width: 0;
    padding: 46px 50px 40px;
    display: flex;
    position: relative;
    overflow: hidden
}

.auth-brand-panel:before,.auth-brand-panel:after {
    content: "";
    z-index: -1;
    pointer-events: none;
    position: absolute
}

.auth-ambient-visual {
    z-index: -1;
    pointer-events: none;
    width: 310px;
    height: 310px;
    transform: translate3d(var(--auth-shift-x), var(--auth-shift-y), 0);
    border-radius: 50%;
    transition: transform .18s cubic-bezier(.22,1,.36,1);
    position: absolute;
    top: 84px;
    right: -72px
}

.auth-orbit,.auth-orbit-core {
    border-radius: 50%;
    position: absolute
}

.auth-orbit {
    border: 1px solid #abb6ff2b;
    animation: 18s linear infinite auth-orbit-spin;
    inset: 0
}

.auth-orbit i {
    background: #8496ff;
    border-radius: 50%;
    width: 7px;
    height: 7px;
    position: absolute;
    top: -4px;
    left: 50%;
    box-shadow: 0 0 18px #8496ffbf
}

.auth-orbit-two {
    border-style: dashed;
    animation-duration: 13s;
    animation-direction: reverse;
    inset: 44px
}

.auth-orbit-two i {
    background: #70e0b1;
    width: 5px;
    height: 5px;
    top: auto;
    bottom: -3px;
    box-shadow: 0 0 16px #70e0b1b3
}

.auth-orbit-three {
    border-color: #ffffff17;
    animation-duration: 8s;
    inset: 84px
}

.auth-orbit-core {
    color: #fff;
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    background: #586ae138;
    border: 1px solid #9daaff5c;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    display: flex;
    inset: 112px;
    box-shadow: 0 0 34px #4759d540,inset 0 0 22px #ffffff0a
}

.auth-orbit-core b {
    font-size: 21px;
    line-height: 1
}

.auth-orbit-core small {
    color: #aab6ff;
    letter-spacing: .15em;
    margin-top: 4px;
    font-size: 8px;
    font-weight: 800
}

@keyframes auth-orbit-spin {
    to {
        transform: rotate(360deg)
    }
}

.auth-brand-panel:before {
    border: 1px solid #ffffff14;
    border-radius: 50%;
    width: 380px;
    height: 380px;
    top: 88px;
    right: -190px;
    box-shadow: 0 0 0 70px #ffffff06,0 0 0 140px #ffffff05
}

.auth-brand-panel:after {
    background: #ffffff1c;
    height: 1px;
    bottom: 76px;
    left: 50px;
    right: 50px
}

.auth-brand-copy {
    z-index: 1;
    max-width: 430px;
    margin: auto 0 42px;
    position: relative
}

.auth-eyebrow,.auth-form-kicker {
    letter-spacing: .16em;
    color: #95a5ff;
    margin-bottom: 18px;
    font-size: 11px;
    font-weight: 800;
    line-height: 1;
    display: block
}

.auth-brand-copy h1 {
    letter-spacing: -.045em;
    color: #fff;
    max-width: 420px;
    margin: 0;
    font-size: clamp(34px,4vw,46px);
    font-weight: 750;
    line-height: 1.25
}

.auth-brand-copy p {
    color: #ebeff8a8;
    max-width: 390px;
    margin: 24px 0 0;
    font-size: 14px;
    line-height: 1.9
}

.auth-capabilities {
    z-index: 1;
    color: #f5f7fccc;
    flex-wrap: wrap;
    gap: 10px 20px;
    margin-bottom: 42px;
    font-size: 12px;
    display: flex;
    position: relative
}

.auth-capabilities span {
    align-items: center;
    gap: 7px;
    display: inline-flex
}

.auth-capabilities svg {
    color: #7f91ff;
    font-size: 12px
}

.auth-brand-footer {
    z-index: 1;
    color: #ebeff86b;
    letter-spacing: .04em;
    align-items: center;
    gap: 9px;
    font-size: 11px;
    display: flex;
    position: relative
}

.auth-status-dot {
    background: #5ed39d;
    border-radius: 50%;
    width: 7px;
    height: 7px;
    box-shadow: 0 0 0 4px #5ed39d1a
}

.auth-form-panel {
    z-index: 2;
    background: #fff;
    flex-direction: column;
    justify-content: center;
    padding: 56px 64px 36px;
    display: flex;
    position: relative
}

.auth-mobile-logo {
    display: none
}

.auth-form-heading {
    margin-bottom: 30px
}

.auth-form-kicker {
    color: #4054d6;
    margin-bottom: 14px
}

.auth-form-heading h2 {
    color: #172033;
    letter-spacing: -.035em;
    margin: 0;
    font-size: 30px;
    font-weight: 750;
    line-height: 1.25
}

.auth-form-heading p {
    color: #7a8498;
    margin: 10px 0 0;
    font-size: 13px;
    line-height: 1.65
}

.auth-step-track {
    color: #9aa3b3;
    align-items: center;
    min-height: 28px;
    margin: -12px 0 22px;
    font-size: 10px;
    font-weight: 650;
    display: flex
}

.auth-step-track span {
    white-space: nowrap;
    align-items: center;
    gap: 6px;
    transition: color .2s;
    display: inline-flex
}

.auth-step-track i {
    color: #8c96a8;
    background: #fff;
    border: 1px solid #d8dde7;
    border-radius: 50%;
    justify-content: center;
    align-items: center;
    width: 20px;
    height: 20px;
    font-size: 9px;
    font-style: normal;
    transition: color .2s,border-color .2s,background .2s,box-shadow .2s;
    display: inline-flex
}

.auth-step-track b {
    font-weight: 700
}

.auth-step-track em {
    background: #dfe3eb;
    width: 28px;
    height: 1px;
    margin: 0 9px;
    transition: background .2s
}

.auth-step-track span.is-active {
    color: #4054d6
}

.auth-step-track span.is-active i {
    color: #4054d6;
    border-color: #8f9cf0;
    box-shadow: 0 0 0 4px #4054d614
}

.auth-step-track span.is-done {
    color: #35836a
}

.auth-step-track span.is-done i {
    color: #fff;
    background: #4aa988;
    border-color: #4aa988
}

.auth-alert {
    overflow: hidden
}

.auth-alert .ant-alert {
    border-radius: 9px;
    margin-bottom: 20px;
    padding: 10px 12px;
    font-size: 12px
}

.auth-form {
    z-index: 2;
    flex-direction: column;
    gap: 18px;
    display: flex;
    position: relative
}

.auth-field {
    flex-direction: column;
    gap: 8px;
    display: flex;
    position: relative
}

.auth-field>span:first-child {
    color: #44506a;
    font-size: 12px;
    font-weight: 650;
    line-height: 1;
    transition: color .18s,transform .18s;
    transform: translate(0)
}

.auth-field.is-active>span:first-child {
    color: #4054d6;
    transform: translate(3px)
}

.auth-field .ant-input-affix-wrapper {
    min-height: 50px;
    box-shadow: none;
    background: #f8f9fb;
    border-color: #dfe3eb;
    border-radius: 10px;
    padding: 0 15px
}

.auth-field .ant-input-affix-wrapper:hover {
    background: #fff;
    border-color: #b9c1d1
}

.auth-field .ant-input-affix-wrapper-focused {
    background: #fff;
    border-color: #4054d6;
    box-shadow: 0 0 0 3px #4054d61a
}

.auth-field .ant-input-prefix {
    color: #8d96a8;
    margin-inline-end:11px}

.auth-field .ant-input {
    color: #202a3d;
    background: 0 0;
    font-size: 14px
}

.auth-field .ant-input::placeholder {
    color: #a7afbd
}

.auth-code-wrap {
    overflow: hidden
}

.auth-code-input .ant-input {
    text-align: center;
    letter-spacing: .32em;
    font-size: 19px;
    font-weight: 700
}

.auth-submit.ant-btn {
    height: 50px;
    box-shadow: none;
    isolation: isolate;
    background: #4054d6;
    border: 0;
    border-radius: 10px;
    justify-content: center;
    align-items: center;
    gap: 12px;
    margin-top: 4px;
    font-size: 14px;
    font-weight: 700;
    display: flex;
    position: relative;
    overflow: hidden
}

.auth-submit.ant-btn:before {
    content: "";
    z-index: -1;
    background: #fff3;
    width: 22%;
    height: 260%;
    transition: transform .65s cubic-bezier(.22,1,.36,1);
    position: absolute;
    top: -80%;
    left: -28%;
    transform: rotate(18deg)translate(-220%)
}

.auth-submit.ant-btn:hover,.auth-submit.ant-btn:focus {
    box-shadow: 0 8px 22px #4054d633;
    background: #3447c4!important
}

.auth-submit.ant-btn:hover:before {
    transform: rotate(18deg)translate(720%)
}

.auth-submit.ant-btn .anticon-arrow-right {
    transition: transform .2s
}

.auth-submit.ant-btn:hover .anticon-arrow-right {
    transform: translate(4px)
}

.auth-submit.ant-btn:active {
    background: #2d3eaf!important
}

.auth-security-note {
    color: #8a93a5;
    background: #fafbfc;
    border: 1px solid #e7eaf0;
    border-radius: 9px;
    align-items: flex-start;
    gap: 10px;
    margin-top: 24px;
    padding: 13px 14px;
    font-size: 11px;
    line-height: 1.55;
    display: flex
}

.auth-security-note>svg {
    color: #64708a;
    margin-top: 2px
}

.auth-security-note span {
    flex-direction: column;
    display: flex
}

.auth-security-note strong {
    color: #4b566c;
    font-weight: 700
}

.auth-form-footer {
    text-align: center;
    color: #a1a8b5;
    letter-spacing: .04em;
    margin-top: auto;
    padding-top: 32px;
    font-size: 10px
}

@media (width<=860px) {
    .auth-page {
        padding: 20px
    }

    .auth-shell-stage {
        width: min(480px,100%)
    }

    .auth-shell {
        min-height: 0;
        display: block;
        transform: none
    }

    .auth-brand-panel {
        display: none
    }

    .auth-form-panel {
        min-height: 610px;
        padding: 38px 42px 28px
    }

    .auth-mobile-logo {
        margin-bottom: 54px;
        display: block
    }
}

@media (width<=520px) {
    .auth-page {
        background: #fff;
        align-items: stretch;
        padding: 0
    }

    .auth-shell-stage {
        width: 100%;
        min-height: 100vh
    }

    .auth-shell {
        width: 100%;
        min-height: 100vh;
        box-shadow: none;
        border: 0;
        border-radius: 0
    }

    .auth-form-panel {
        box-sizing: border-box;
        min-height: 100vh;
        padding: 30px 24px 24px
    }

    .auth-mobile-logo {
        margin-bottom: 46px
    }

    .auth-form-heading h2 {
        font-size: 27px
    }

    .auth-form-footer {
        padding-top: 26px
    }
}

@media (prefers-reduced-motion:reduce) {
    .auth-shell,.auth-ambient-visual,.auth-page-interactive:after {
        transition: none!important;
        transform: none!important
    }

    .auth-orbit {
        animation: none!important
    }

    .auth-submit.ant-btn:before {
        display: none
    }
}

.user-area {
    flex-direction: column;
    flex: 1;
    display: flex;
    overflow: hidden
}

.user-toolbar {
    border-bottom: 1px solid var(--border);
    background: var(--bg2);
    align-items: center;
    gap: 12px;
    padding: 14px 20px;
    display: flex
}

.user-toolbar .btn-add {
    background: var(--accent);
    color: #fff;
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: all var(--transition);
    border: none;
    padding: 8px 20px;
    font-size: 13px;
    font-weight: 600
}

.user-toolbar .btn-add:hover {
    background: var(--accent2);
    box-shadow: 0 4px 12px #4f6ef740
}

.user-cards {
    background: var(--bg);
    flex: 1;
    grid-template-columns: repeat(auto-fill,minmax(320px,1fr));
    grid-auto-rows: min-content;
    align-content: start;
    gap: 14px;
    padding: 20px;
    display: grid;
    overflow-y: auto
}

.user-card {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    padding: 18px;
    transition: all .2s;
    position: relative;
    overflow: visible
}

.user-card:before {
    display: none
}

.user-card:hover {
    box-shadow: var(--shadow-lg);
    border-color: var(--accent)
}

.user-card-header {
    justify-content: space-between;
    align-items: center;
    margin-bottom: 12px;
    display: flex
}

.user-card-name {
    font-size: 15px;
    font-weight: 700
}

.user-role-tag {
    border-radius: 20px;
    padding: 3px 12px;
    font-size: 11px;
    font-weight: 600
}

.user-role-tag.admin {
    background: var(--purple-light);
    color: var(--purple)
}

.user-role-tag.agent {
    background: var(--accent-light);
    color: var(--accent)
}

.user-role-tag.client {
    background: var(--green-light);
    color: var(--green)
}

.user-meta {
    color: var(--text2);
    flex-direction: column;
    gap: 4px;
    margin-bottom: 12px;
    font-size: 12px;
    display: flex
}

.user-expire.warn {
    color: var(--orange)
}

.user-expire.expired {
    color: var(--red)
}

.user-actions {
    gap: 6px;
    display: flex
}

.user-actions button {
    border-radius: var(--radius-sm);
    border: 1px solid var(--border);
    background: var(--bg2);
    color: var(--text);
    cursor: pointer;
    transition: all var(--transition);
    padding: 6px 16px;
    font-size: 12px;
    font-weight: 500
}

.user-actions button:hover {
    border-color: var(--accent);
    color: var(--accent);
    background: var(--accent-light)
}

.user-actions button.danger {
    color: var(--red)
}

.user-actions button.danger:hover {
    border-color: var(--red);
    background: var(--red-light)
}

.transfer-bar {
    align-items: center;
    gap: 8px;
    display: flex
}

.transfer-bar select {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    color: var(--text);
    outline: none;
    padding: 6px 12px;
    font-size: 12px
}

.transfer-bar button {
    background: var(--accent);
    color: #fff;
    border-radius: var(--radius-sm);
    cursor: pointer;
    border: none;
    padding: 6px 16px;
    font-size: 12px;
    font-weight: 600
}

.transfer-bar button:hover {
    background: var(--accent2)
}

.transfer-bar input {
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg2);
    width: 140px;
    color: var(--text);
    outline: none;
    padding: 6px 10px;
    font-size: 12px
}

.transfer-bar-fixed {
    background: var(--bg2);
    border-top: 1px solid var(--border);
    z-index: 50;
    align-items: center;
    gap: 10px;
    padding: 12px 24px;
    animation: .2s slideUp;
    display: flex;
    position: fixed;
    bottom: 0;
    left: 68px;
    right: 0;
    box-shadow: 0 -2px 8px #0000000a
}

@keyframes slideUp {
    0% {
        transform: translateY(100%)
    }

    to {
        transform: none
    }
}

.dev-pagination {
    color: var(--text2);
    background: var(--bg2);
    border-top: 1px solid var(--border);
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    gap: 8px;
    padding: 12px 0;
    font-size: 12px;
    display: flex
}

.table-toolbar label {
    color: var(--text2);
    cursor: pointer;
    -webkit-user-select: none;
    user-select: none;
    white-space: nowrap;
    align-items: center;
    gap: 4px;
    font-size: 12px;
    font-weight: 500;
    display: flex
}

.loading-screen {
    background: var(--bg);
    flex-direction: column;
    justify-content: center;
    align-items: center;
    height: 100vh;
    display: flex;
    position: relative
}

.moying-loader {
    --loader-x: 50%;
    --loader-y: 46%;
    --loader-tilt-x: 0deg;
    --loader-tilt-y: 0deg;
    isolation: isolate;
    min-height: 100svh;
    color: var(--text);
    -webkit-user-select: none;
    user-select: none;
    perspective: 900px;
    touch-action: none;
    overflow: hidden
}

.moying-loader:before {
    content: "";
    z-index: -2;
    background: radial-gradient(circle at var(--loader-x) var(--loader-y), #4f6ef729, transparent 26%), radial-gradient(circle at 50% 48%, #8b5cf612, transparent 38%);
    transition: background-position .12s;
    position: absolute;
    inset: -18%
}

.moying-loader-grid {
    z-index: -1;
    opacity: .24;
    pointer-events: none;
    background-image: radial-gradient(circle,#4f6ef738 1px,#0000 1px);
    background-size: 24px 24px;
    position: absolute;
    inset: 0;
    -webkit-mask-image: radial-gradient(circle at 50% 48%,#000 0,#0000 55%);
    mask-image: radial-gradient(circle at 50% 48%,#000 0,#0000 55%)
}

.moying-loader-stage {
    width: 176px;
    height: 176px;
    transform-style: preserve-3d;
    transform: rotateX(var(--loader-tilt-x)) rotateY(var(--loader-tilt-y));
    place-items: center;
    transition: transform .14s ease-out;
    display: grid;
    position: relative
}

.moying-loader-stage:before {
    content: "";
    filter: blur(18px);
    background: #4f6ef72e;
    border-radius: 50%;
    width: 106px;
    height: 30px;
    animation: 2.4s ease-in-out infinite moying-loader-shadow;
    position: absolute;
    bottom: 18px;
    left: 35px
}

.moying-loader-orbit {
    pointer-events: none;
    border-radius: 50%;
    position: absolute
}

.moying-loader-orbit:before,.moying-loader-orbit:after {
    content: "";
    border-radius: 50%;
    position: absolute
}

.moying-loader-orbit.orbit-outer {
    border: 1px solid #4f6ef747;
    border-top-color: var(--accent);
    border-right-color: #8b5cf69e;
    animation: 4.8s linear infinite moying-loader-orbit;
    inset: 10px
}

.moying-loader-orbit.orbit-outer:before {
    background: var(--accent);
    width: 8px;
    height: 8px;
    top: 16px;
    right: 20px;
    box-shadow: 0 0 15px #4f6ef7bf
}

.moying-loader-orbit.orbit-outer:after {
    background: var(--purple);
    width: 5px;
    height: 5px;
    bottom: 36px;
    left: 13px;
    box-shadow: 0 0 11px #8b5cf6a6
}

.moying-loader-orbit.orbit-outer i,.moying-loader-orbit.orbit-inner i {
    background: var(--bg);
    border: 1px solid var(--border2);
    border-radius: 999px;
    display: block;
    position: absolute
}

.moying-loader-orbit.orbit-outer i:first-child {
    width: 22px;
    height: 7px;
    top: -4px;
    left: 45px
}

.moying-loader-orbit.orbit-outer i:last-child {
    width: 7px;
    height: 20px;
    bottom: 42px;
    right: -4px
}

.moying-loader-orbit.orbit-inner {
    border: 1px dashed #4f6ef742;
    animation: 7s linear infinite moying-loader-orbit-reverse;
    inset: 27px
}

.moying-loader-orbit.orbit-inner:before {
    background: var(--green);
    width: 6px;
    height: 6px;
    top: 11px;
    left: 16px;
    box-shadow: 0 0 12px #10b98194
}

.moying-loader-orbit.orbit-inner i {
    width: 18px;
    height: 5px;
    bottom: 8px;
    left: 8px
}

.moying-loader-core {
    z-index: 2;
    background: var(--bg2);
    background: color-mix(in srgb, var(--bg2) 92%, transparent);
    border: 1px solid var(--border2);
    width: 88px;
    height: 88px;
    box-shadow: var(--shadow-lg), inset 0 1px 0 #ffffff0f;
    border-radius: 27px;
    place-items: center;
    animation: 2.4s ease-in-out infinite moying-loader-breathe;
    display: grid;
    position: relative;
    overflow: hidden
}

.moying-loader-core .moying-brand {
    width: 54px;
    height: 54px;
    display: block
}

.moying-loader-core .moying-brand-mark {
    filter: drop-shadow(0 8px 18px #4054d652)
}

.moying-loader-core .moying-wordmark {
    display: none
}

.moying-loader-scan {
    background: linear-gradient(90deg,#0000,#8291ffeb,#0000);
    height: 1px;
    animation: 2.2s ease-in-out infinite moying-loader-scan;
    position: absolute;
    top: 14px;
    left: 10px;
    right: 10px;
    box-shadow: 0 0 8px #8291ff73
}

.moying-loader-copy {
    z-index: 2;
    flex-direction: column;
    align-items: center;
    gap: 9px;
    margin-top: 4px;
    display: flex;
    position: relative
}

.moying-loader-copy strong {
    color: var(--text);
    letter-spacing: -.03em;
    font-size: 17px;
    line-height: 1
}

.moying-loader-copy strong em {
    color: var(--accent);
    background: var(--accent-light);
    letter-spacing: .05em;
    vertical-align: 2px;
    border-radius: 4px;
    margin-left: 5px;
    padding: 2px 5px;
    font-size: 9px;
    font-style: normal
}

.moying-loader-copy>span {
    min-width: 150px;
    color: var(--text2);
    letter-spacing: .06em;
    text-align: center;
    font-size: 11px
}

.moying-loader-dots {
    vertical-align: 2px;
    gap: 3px;
    margin-left: 6px;
    display: inline-flex
}

.moying-loader-dots i {
    background: var(--accent);
    border-radius: 50%;
    width: 3px;
    height: 3px;
    animation: 1.2s ease-in-out infinite moying-loader-dot
}

.moying-loader-dots i:nth-child(2) {
    animation-delay: .16s
}

.moying-loader-dots i:nth-child(3) {
    animation-delay: .32s
}

.moying-loader-hint {
    color: var(--text3);
    letter-spacing: .08em;
    opacity: 0;
    margin-top: 18px;
    font-size: 9px;
    transition: opacity .2s,transform .2s;
    transform: translateY(4px)
}

.moying-loader:hover .moying-loader-hint {
    opacity: .76;
    transform: translateY(0)
}

.moying-loader:hover .orbit-outer {
    animation-duration: 3.7s
}

.moying-loader:hover .orbit-inner {
    animation-duration: 5.5s
}

.moying-loader:active .moying-loader-stage {
    transform: rotateX(var(--loader-tilt-x)) rotateY(var(--loader-tilt-y)) scale(.97)
}

html[data-theme=dark] .moying-loader:before {
    background: radial-gradient(circle at var(--loader-x) var(--loader-y), #8291ff2e, transparent 27%), radial-gradient(circle at 50% 48%, #b49aff14, transparent 38%)
}

html[data-theme=dark] .moying-loader-grid {
    opacity: .2
}

html[data-theme=dark] .moying-loader-core {
    background: #0d1016e6
}

@keyframes moying-loader-orbit {
    to {
        transform: rotate(360deg)
    }
}

@keyframes moying-loader-orbit-reverse {
    to {
        transform: rotate(-360deg)
    }
}

@keyframes moying-loader-breathe {
    0%,to {
        box-shadow: var(--shadow-lg), 0 0 0 #4f6ef700;
        transform: translateZ(10px)scale(1)
    }

    50% {
        box-shadow: var(--shadow-lg), 0 0 28px #4f6ef729;
        transform: translateZ(18px)scale(1.035)
    }
}

@keyframes moying-loader-shadow {
    0%,to {
        opacity: .42;
        transform: scale(.86)
    }

    50% {
        opacity: .72;
        transform: scale(1.05)
    }
}

@keyframes moying-loader-scan {
    0%,to {
        opacity: 0;
        transform: translateY(0)
    }

    20% {
        opacity: .8
    }

    80% {
        opacity: .8
    }

    to {
        opacity: 0;
        transform: translateY(58px)
    }
}

@keyframes moying-loader-dot {
    0%,60%,to {
        opacity: .35;
        transform: translateY(0)
    }

    30% {
        opacity: 1;
        transform: translateY(-3px)
    }
}

@media (prefers-reduced-motion:reduce) {
    .moying-loader-stage,.moying-loader-core,.moying-loader-orbit,.moying-loader-stage:before,.moying-loader-scan,.moying-loader-dots i {
        transition: none!important;
        animation: none!important
    }
}

.spinner {
    border: 3px solid var(--border);
    border-top-color: var(--accent);
    border-radius: 50%;
    width: 32px;
    height: 32px;
    animation: .8s linear infinite spin
}

@keyframes spin {
    to {
        transform: rotate(360deg)
    }
}

.bh-item {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    gap: 16px;
    margin-bottom: 12px;
    padding: 18px;
    display: flex
}

.bh-qr {
    border-radius: var(--radius);
    background: var(--bg3);
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    width: 90px;
    height: 90px;
    display: flex;
    overflow: hidden
}

.bh-info {
    flex: 1;
    min-width: 0
}

.bh-name {
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
    font-size: 15px;
    font-weight: 700;
    display: flex
}

.bh-status {
    color: #fff;
    border-radius: 20px;
    padding: 3px 12px;
    font-size: 11px;
    font-weight: 600;
    display: inline-block
}

.bh-status.done {
    background: var(--green)
}

.bh-status.building {
    background: var(--orange)
}

.bh-status.failed {
    background: var(--red)
}

.bh-info-row {
    color: var(--text2);
    margin-bottom: 3px;
    font-size: 12px
}

.bh-label {
    min-width: 50px;
    display: inline-block
}

.bh-value {
    color: var(--text);
    font-weight: 500
}

.bh-actions {
    gap: 6px;
    margin-top: 10px;
    display: flex
}

.bh-btn {
    cursor: pointer;
    transition: all var(--transition);
    border-radius: 20px;
    padding: 5px 14px;
    font-size: 12px;
    font-weight: 600;
    text-decoration: none
}

.bh-btn-dl {
    background: var(--accent);
    color: #fff;
    border: none
}

.bh-btn-dl:hover {
    background: var(--accent2)
}

.bh-btn-copy {
    color: var(--accent);
    border: 1px solid var(--accent);
    background: 0 0
}

.bh-btn-copy:hover {
    background: var(--accent-light)
}

.bh-empty {
    text-align: center;
    color: var(--text2);
    padding: 24px;
    font-size: 13px
}

.ctrl-page {
    background: var(--bg);
    flex-direction: column;
    height: 100vh;
    display: flex;
    overflow: hidden
}

.ctrl-topbar {
    background: var(--bg2);
    border-bottom: 1px solid var(--border);
    flex-shrink: 0;
    align-items: center;
    gap: 10px;
    height: 44px;
    padding: 0 14px;
    font-size: 12px;
    display: flex
}

.ctrl-back {
    cursor: pointer;
    color: var(--text2);
    background: 0 0;
    border: none;
    padding: 2px 6px;
    font-size: 16px
}

.ctrl-back:hover {
    color: var(--accent)
}

.ctrl-dev-name {
    color: var(--text);
    font-size: 13px;
    font-weight: 700
}

.ctrl-dev-meta {
    color: var(--text2);
    font-size: 11px
}

.ctrl-note-box {
    align-items: center;
    gap: 4px;
    margin-left: 8px;
    display: flex
}

.ctrl-note-input {
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg3);
    width: 160px;
    height: 28px;
    color: var(--text);
    outline: none;
    padding: 0 10px;
    font-size: 11px
}

.ctrl-note-input:focus {
    border-color: var(--accent);
    background: var(--bg2)
}

.ctrl-note-save {
    border-radius: var(--radius-sm);
    background: var(--accent);
    color: #fff;
    cursor: pointer;
    white-space: nowrap;
    border: none;
    height: 28px;
    padding: 0 12px;
    font-size: 11px;
    font-weight: 600
}

.ctrl-note-save:hover {
    background: var(--accent2)
}

.ctrl-tags {
    align-items: center;
    gap: 4px;
    margin-left: auto;
    display: flex
}

.ctrl-tag {
    border-radius: 20px;
    align-items: center;
    gap: 3px;
    padding: 3px 8px;
    font-size: 10px;
    font-weight: 600;
    display: inline-flex
}

.ctrl-tag.green {
    background: var(--green-light);
    color: var(--green)
}

.ctrl-tag.blue {
    background: var(--accent-light);
    color: var(--accent)
}

.ctrl-tag.gray {
    background: var(--bg3);
    color: var(--text2)
}

.ctrl-tag.red {
    background: var(--red-light);
    color: var(--red)
}

.ctrl-tag.orange {
    background: var(--orange-light);
    color: var(--orange)
}

.ctrl-layout {
    flex: 1;
    display: flex;
    overflow: hidden
}

.ctrl-sidebar {
    background: var(--bg2);
    border-right: 1px solid var(--border);
    flex-direction: column;
    flex-shrink: 0;
    gap: 4px;
    width: 110px;
    padding: 8px;
    display: flex;
    overflow-y: auto
}

.ctrl-nav-item {
    cursor: pointer;
    color: var(--text);
    border-radius: var(--radius-sm);
    transition: all var(--transition);
    text-align: center;
    border: 1px solid var(--border);
    background: var(--bg2);
    justify-content: center;
    align-items: center;
    padding: 9px 6px;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.2;
    display: flex
}

.ctrl-nav-item:hover {
    background: var(--accent-light);
    color: var(--accent);
    border-color: var(--accent)
}

.ctrl-nav-item.active {
    color: #fff;
    background: var(--accent);
    border-color: var(--accent);
    font-weight: 600
}

.ctrl-action-bar {
    background: var(--bg2);
    border-left: 1px solid var(--border);
    flex-shrink: 0;
    width: 155px;
    overflow-y: auto
}

.ctrl-action-panel {
    background: var(--bg2);
    border-left: 1px solid var(--border);
    flex-direction: column;
    flex-shrink: 0;
    gap: 7px;
    width: 176px;
    padding: 10px;
    display: flex;
    overflow-y: auto
}

.ctrl-side-btn {
    border: 1px solid var(--border);
    width: 100%;
    min-height: 34px;
    color: var(--text);
    background: var(--bg2);
    cursor: pointer;
    border-radius: 7px;
    justify-content: center;
    align-items: center;
    padding: 7px 9px;
    font-size: 11px;
    font-weight: 650;
    line-height: 1.25;
    transition: color .14s,background .14s,border-color .14s;
    display: flex
}

.ctrl-side-btn:hover {
    color: var(--accent);
    background: var(--accent-light);
    border-color: var(--accent)
}

.ctrl-side-btn.is-primary {
    color: var(--accent);
    background: var(--accent-light);
    border-color: color-mix(in srgb, var(--accent) 28%, var(--border))
}

.ctrl-side-btn.is-success {
    color: var(--green);
    background: var(--green-light);
    border-color: color-mix(in srgb, var(--green) 28%, var(--border))
}

.ctrl-side-btn.is-danger {
    color: var(--red);
    background: var(--red-light);
    border-color: color-mix(in srgb, var(--red) 28%, var(--border))
}

.ctrl-side-btn.is-dark {
    color: var(--text);
    background: var(--bg3);
    border-color: var(--border2)
}

.ctrl-side-group {
    flex-direction: column;
    gap: 5px;
    width: 100%;
    display: flex
}

.ctrl-side-group-title {
    color: var(--text3);
    letter-spacing: .12em;
    text-transform: uppercase;
    padding: 2px 3px;
    font-size: 9px;
    font-weight: 750;
    line-height: 1
}

.ctrl-side-group-items {
    flex-direction: column;
    gap: 5px;
    display: flex
}

.ctrl-side-divider {
    background: var(--border);
    flex: none;
    width: 100%;
    height: 1px;
    margin: 2px 0
}

.ctrl-qbar {
    flex-direction: column;
    align-items: center;
    gap: 5px;
    width: 100%;
    padding: 8px;
    display: flex
}

.ctrl-qb {
    cursor: pointer;
    color: var(--text);
    border-radius: var(--radius-sm);
    transition: all var(--transition);
    text-align: center;
    border: 1px solid var(--border);
    background: var(--bg2);
    justify-content: center;
    align-items: center;
    width: 100%;
    padding: 9px 6px;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.2;
    display: flex
}

.ctrl-qb:hover {
    border-color: var(--accent);
    color: var(--accent);
    background: var(--accent-light)
}

.ctrl-qb.accent {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent)
}

.ctrl-qb.accent:hover {
    background: var(--accent2);
    border-color: var(--accent2)
}

.ctrl-qb-sep {
    background: var(--border);
    width: 100%;
    height: 1px;
    margin: 4px 0
}

.ctrl-black-ctrl {
    flex-direction: column;
    gap: 3px;
    width: 100%;
    padding: 4px;
    display: flex
}

.ctrl-black-row {
    color: var(--text2);
    align-items: center;
    gap: 3px;
    font-size: 11px;
    display: flex
}

.ctrl-black-row input[type=range] {
    width: 50px;
    accent-color: var(--accent)
}

.ctrl-black-select {
    background: var(--bg3);
    width: 100%;
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    padding: 3px;
    font-size: 11px
}

.ctrl-content {
    background: var(--bg);
    flex: 1;
    overflow-y: auto
}

.ctrl-info-grid {
    grid-template-columns: 1fr 1fr;
    gap: 8px;
    display: grid
}

.ctrl-info-card {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 10px 14px
}

.ctrl-info-card h3 {
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: .5px;
    border-bottom: 1px solid var(--border);
    margin-bottom: 6px;
    padding-bottom: 6px;
    font-size: 11px;
    font-weight: 600
}

.ctrl-ai-warning {
    border: 1px solid color-mix(in srgb, var(--orange) 34%, var(--border));
    color: var(--orange);
    background: var(--orange-light);
    border-radius: 9px;
    margin-bottom: 14px;
    padding: 12px 14px;
    font-size: 12px;
    line-height: 1.65
}

.ctrl-ai-warning a {
    color: var(--accent)!important
}

.ctrl-info-row {
    border-bottom: 1px solid var(--border);
    justify-content: space-between;
    padding: 3px 0;
    font-size: 11px;
    display: flex
}

.ctrl-info-row:last-child {
    border: none
}

.ctrl-info-label {
    color: var(--text2)
}

.ctrl-info-value {
    color: var(--text);
    text-align: right;
    word-break: break-all;
    max-width: 60%;
    font-weight: 500
}

.ctrl-empty {
    color: var(--text2);
    text-align: center;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    padding: 80px 20px;
    font-size: 13px;
    display: flex
}

.ctrl-fetch-bar {
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
    display: flex
}

.ctrl-fetch-btn {
    background: var(--bg2);
    color: var(--text);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    cursor: pointer;
    transition: var(--transition);
    align-items: center;
    gap: 6px;
    padding: 8px 18px;
    font-size: 13px;
    font-weight: 600;
    display: inline-flex
}

.ctrl-fetch-btn:hover {
    border-color: var(--accent);
    color: var(--accent);
    background: var(--accent-light)
}

.ctrl-fetch-btn:disabled {
    opacity: .5;
    cursor: not-allowed
}

.ctrl-fetch-btn.success {
    background: var(--green);
    color: #fff;
    border: none
}

.ctrl-fetch-btn.loading .ctrl-btn-text {
    display: none
}

.ctrl-fetch-btn.loading .ctrl-spinner {
    display: inline-block
}

.ctrl-spinner {
    border: 2px solid #4f6ef733;
    border-top-color: var(--accent);
    border-radius: 50%;
    width: 14px;
    height: 14px;
    animation: .6s linear infinite spin;
    display: none
}

.ctrl-search-box {
    margin-bottom: 12px
}

.ctrl-search-box input {
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg2);
    width: 100%;
    max-width: 400px;
    color: var(--text);
    outline: none;
    padding: 8px 14px;
    font-size: 12px
}

.ctrl-search-box input:focus {
    border-color: var(--accent)
}

.ctrl-sms-count {
    color: var(--text2);
    margin-bottom: 10px;
    font-size: 11px
}

.ctrl-sms-card {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    transition: border-color var(--transition);
    margin-bottom: 8px;
    padding: 16px
}

.ctrl-sms-card:hover {
    border-color: var(--accent)
}

.ctrl-sms-header {
    align-items: center;
    gap: 10px;
    margin-bottom: 8px;
    display: flex
}

.ctrl-sms-avatar {
    color: #fff;
    border-radius: 50%;
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    width: 36px;
    height: 36px;
    font-size: 15px;
    font-weight: 700;
    display: flex
}

.ctrl-sms-sender {
    color: var(--text);
    flex: 1;
    font-size: 13px;
    font-weight: 600
}

.ctrl-sms-time {
    color: var(--text3);
    flex-shrink: 0;
    font-size: 11px
}

.ctrl-sms-body {
    color: var(--text);
    word-break: break-word;
    white-space: pre-wrap;
    font-size: 12px;
    line-height: 1.7
}

.ctrl-app-search {
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
    display: flex
}

.ctrl-app-search input {
    border-radius: var(--radius);
    border: 1px solid var(--border);
    background: var(--bg2);
    color: var(--text);
    outline: none;
    flex: 1;
    padding: 9px 16px;
    font-size: 13px
}

.ctrl-app-search input:focus {
    border-color: var(--accent)
}

.ctrl-app-total {
    color: var(--text2);
    white-space: nowrap;
    font-size: 12px
}

.ctrl-app-sys-toggle {
    color: var(--text2);
    cursor: pointer;
    border-radius: var(--radius-sm);
    border: 1px solid var(--border);
    background: var(--bg2);
    white-space: nowrap;
    padding: 5px 12px;
    font-size: 11px;
    font-weight: 500
}

.ctrl-app-sys-toggle:hover {
    border-color: var(--accent);
    color: var(--accent)
}

.ctrl-app-group {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    overflow: hidden
}

.ctrl-app-item {
    border-bottom: 1px solid var(--border);
    align-items: center;
    gap: 12px;
    padding: 10px 16px;
    font-size: 12px;
    display: flex
}

.ctrl-app-item:last-child {
    border-bottom: none
}

.ctrl-app-icon {
    border-radius: var(--radius);
    object-fit: cover;
    flex-shrink: 0;
    width: 40px;
    height: 40px
}

.ctrl-app-icon-ph {
    border-radius: var(--radius);
    background: var(--bg3);
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    width: 40px;
    height: 40px;
    font-size: 20px;
    display: flex
}

.ctrl-app-info {
    flex: 1;
    min-width: 0
}

.ctrl-app-name {
    color: var(--text);
    font-size: 13px;
    font-weight: 600
}

.ctrl-app-pkg {
    color: var(--text3);
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 200px;
    font-size: 11px;
    overflow: hidden
}

.ctrl-app-actions {
    flex-shrink: 0;
    gap: 4px;
    display: flex
}

.ctrl-app-actions button {
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    cursor: pointer;
    background: var(--bg2);
    color: var(--text);
    transition: var(--transition);
    padding: 5px 12px;
    font-size: 11px;
    font-weight: 500
}

.ctrl-app-actions button:hover {
    border-color: var(--accent);
    color: var(--accent)
}

.ctrl-app-actions button.danger {
    color: var(--red);
    border-color: var(--red);
    background: 0 0
}

.ctrl-app-actions button.danger:hover {
    background: var(--red-light)
}

.ctrl-album-grid {
    grid-template-columns: repeat(auto-fill,minmax(140px,1fr));
    gap: 8px;
    display: grid
}

.ctrl-album-item {
    border: 1px solid var(--border);
    border-radius: var(--radius);
    background: var(--bg2);
    overflow: hidden
}

.ctrl-album-item img {
    aspect-ratio: 1;
    object-fit: cover;
    cursor: pointer;
    width: 100%
}

.ctrl-album-ph {
    aspect-ratio: 1;
    background: var(--bg3);
    justify-content: center;
    align-items: center;
    width: 100%;
    font-size: 28px;
    display: flex
}

.ctrl-album-name {
    color: var(--text3);
    white-space: nowrap;
    text-overflow: ellipsis;
    padding: 4px 8px;
    font-size: 10px;
    overflow: hidden
}

.ctrl-cmd-section {
    margin-bottom: 16px
}

.ctrl-cmd-section h3 {
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: .5px;
    margin-bottom: 8px;
    font-size: 11px;
    font-weight: 600
}

.ctrl-cmd-grid {
    grid-template-columns: repeat(auto-fill,minmax(120px,1fr));
    gap: 6px;
    display: grid
}

.ctrl-cmd-btn {
    border: 1px solid var(--border);
    background: var(--bg2);
    border-radius: var(--radius-sm);
    cursor: pointer;
    text-align: center;
    transition: var(--transition);
    color: var(--text);
    padding: 10px 8px;
    font-size: 11px;
    font-weight: 500
}

.ctrl-cmd-btn:hover {
    border-color: var(--accent);
    color: var(--accent);
    background: var(--accent-light)
}

.ctrl-cmd-btn.danger {
    color: var(--red)
}

.ctrl-cmd-btn.danger:hover {
    border-color: var(--red);
    background: var(--red-light)
}

.ctrl-cmd-btn.success {
    color: var(--green)
}

.ctrl-cmd-btn.success:hover {
    border-color: var(--green);
    background: var(--green-light)
}

.ctrl-cmd-icon {
    margin-bottom: 2px;
    font-size: 18px
}

.ctrl-kl-filters {
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
    display: flex
}

.ctrl-kl-filters select,.ctrl-kl-filters input {
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg2);
    color: var(--text);
    outline: none;
    padding: 6px 10px;
    font-size: 12px
}

.ctrl-kl-filters input {
    width: 160px
}

.ctrl-kl-tbl {
    border-collapse: collapse;
    width: 100%;
    font-size: 12px
}

.ctrl-kl-tbl th {
    text-align: left;
    color: var(--text2);
    border-bottom: 1px solid var(--border2);
    background: var(--bg3);
    padding: 8px 12px;
    font-size: 11px;
    font-weight: 600;
    position: sticky;
    top: 0
}

.ctrl-kl-tbl td {
    border-bottom: 1px solid var(--border);
    vertical-align: middle;
    white-space: nowrap;
    padding: 6px 12px
}

.ctrl-kl-tbl tr:hover {
    background: var(--accent-light)
}

.ctrl-kl-t {
    text-align: center;
    border-radius: 20px;
    min-width: 32px;
    padding: 2px 8px;
    font-size: 10px;
    font-weight: 600;
    display: inline-block
}

.ctrl-kl-t.pi {
    background: var(--accent-light);
    color: var(--accent)
}

.ctrl-kl-t.pa {
    background: var(--purple-light);
    color: var(--purple)
}

.ctrl-kl-t.ap {
    background: var(--orange-light);
    color: var(--orange)
}

.ctrl-kl-t.tx {
    background: var(--green-light);
    color: var(--green)
}

.ctrl-kl-t.ot {
    background: var(--bg3);
    color: var(--text2)
}

.ctrl-kl-v {
    text-overflow: ellipsis;
    max-width: 280px;
    font-family: SF Mono,monospace;
    font-size: 12px;
    overflow: hidden
}

.ctrl-kl-app {
    color: var(--text2);
    text-overflow: ellipsis;
    max-width: 100px;
    font-size: 11px;
    overflow: hidden
}

.ctrl-kl-tm {
    color: var(--text3);
    font-size: 11px
}

.ctrl-kl-btn {
    cursor: pointer;
    color: var(--accent);
    border: 1px solid var(--accent);
    white-space: nowrap;
    transition: var(--transition);
    background: 0 0;
    border-radius: 20px;
    padding: 3px 10px;
    font-size: 10px;
    font-weight: 500
}

.ctrl-kl-btn:hover {
    background: var(--accent);
    color: #fff
}

.ctrl-kl-pagination {
    text-align: center;
    color: var(--text2);
    justify-content: center;
    align-items: center;
    gap: 8px;
    margin-top: 10px;
    font-size: 11px;
    display: flex
}

.ctrl-kl-pagination button {
    border: 1px solid var(--border);
    background: var(--bg2);
    border-radius: var(--radius-sm);
    cursor: pointer;
    color: var(--text);
    padding: 5px 12px;
    font-size: 11px
}

.ctrl-kl-pagination button:hover {
    border-color: var(--accent);
    color: var(--accent)
}

.ctrl-pay-split {
    height: calc(100vh - 140px);
    min-height: 500px;
    display: flex
}

.ctrl-pay-left {
    border-right: 1px solid var(--border);
    background: var(--bg2);
    flex-direction: column;
    width: 30%;
    min-width: 240px;
    max-width: 320px;
    display: flex
}

.ctrl-pay-right {
    flex-direction: column;
    flex: 1;
    display: flex;
    overflow: hidden
}

.ctrl-pay-search {
    border-bottom: 1px solid var(--border);
    padding: 10px
}

.ctrl-pay-search input {
    border: 1px solid var(--border);
    border-radius: var(--radius);
    background: var(--bg3);
    width: 100%;
    color: var(--text);
    outline: none;
    padding: 9px 14px;
    font-size: 12px
}

.ctrl-pay-search input:focus {
    border-color: var(--accent);
    background: var(--bg2)
}

.ctrl-pay-app-list {
    flex: 1;
    padding: 6px;
    overflow-y: auto
}

.ctrl-pay-app-item {
    cursor: pointer;
    border-radius: var(--radius);
    transition: all var(--transition);
    border: 1px solid #0000;
    align-items: center;
    gap: 10px;
    margin-bottom: 2px;
    padding: 10px 12px;
    display: flex
}

.ctrl-pay-app-item:hover {
    background: var(--bg3);
    border-color: var(--border)
}

.ctrl-pay-app-item.active {
    background: var(--accent-light);
    border-color: #4f6ef74d
}

.ctrl-pay-app-icon {
    border-radius: var(--radius);
    background: var(--bg3);
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    width: 38px;
    height: 38px;
    font-size: 18px;
    display: flex
}

.ctrl-pay-app-info {
    flex: 1;
    min-width: 0
}

.ctrl-pay-app-name {
    color: var(--text);
    white-space: nowrap;
    text-overflow: ellipsis;
    font-size: 13px;
    font-weight: 600;
    overflow: hidden
}

.ctrl-pay-app-pkg {
    color: var(--text3);
    white-space: nowrap;
    text-overflow: ellipsis;
    font-size: 10px;
    overflow: hidden
}

.ctrl-pay-app-badge {
    align-items: center;
    gap: 6px;
    margin-top: 3px;
    display: flex
}

.ctrl-pay-app-count {
    background: var(--accent);
    color: #fff;
    border-radius: 20px;
    padding: 1px 8px;
    font-size: 10px;
    font-weight: 600
}

.ctrl-pay-app-time {
    color: var(--text3);
    font-size: 10px
}

.ctrl-pay-header {
    border-bottom: 1px solid var(--border);
    background: var(--bg2);
    padding: 18px 24px
}

.ctrl-pay-header-title {
    color: var(--text);
    font-size: 16px;
    font-weight: 700
}

.ctrl-pay-header-sub {
    color: var(--text2);
    margin-top: 3px;
    font-size: 11px
}

.ctrl-pay-stats {
    border-bottom: 1px solid var(--border);
    background: var(--bg2);
    gap: 12px;
    padding: 16px 24px;
    display: flex
}

.ctrl-pay-stat {
    background: var(--bg3);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    text-align: center;
    flex: 1;
    padding: 16px
}

.ctrl-pay-stat:hover {
    border-color: var(--accent)
}

.ctrl-pay-stat-num {
    color: var(--text);
    font-family: SF Mono,Consolas,monospace;
    font-size: 24px;
    font-weight: 700
}

.ctrl-pay-stat-num.green {
    color: var(--green)
}

.ctrl-pay-stat-num.blue {
    color: var(--accent)
}

.ctrl-pay-stat-label {
    color: var(--text3);
    text-transform: uppercase;
    letter-spacing: .5px;
    margin-top: 4px;
    font-size: 10px
}

.ctrl-pay-records {
    flex: 1;
    padding: 16px 24px;
    overflow-y: auto
}

.ctrl-pay-record {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    margin-bottom: 8px;
    padding: 16px
}

.ctrl-pay-record:hover {
    border-color: var(--accent)
}

.ctrl-pay-record-head {
    justify-content: space-between;
    align-items: center;
    margin-bottom: 6px;
    display: flex
}

.ctrl-pay-record-time {
    color: var(--text3);
    font-size: 11px
}

.ctrl-pay-record-badge {
    border-radius: 20px;
    padding: 2px 12px;
    font-size: 10px;
    font-weight: 600
}

.ctrl-pay-record-badge.success {
    background: var(--green-light);
    color: var(--green)
}

.ctrl-pay-record-content {
    letter-spacing: 6px;
    text-align: center;
    color: var(--text);
    padding: 10px 0;
    font-family: SF Mono,Consolas,monospace;
    font-size: 22px;
    font-weight: 400
}

.ctrl-pay-record-type {
    color: var(--text3);
    text-align: center;
    margin-top: 4px;
    font-size: 11px
}

@keyframes floatIn {
    0% {
        opacity: 0;
        transform: translateY(12px)scale(.96)
    }

    to {
        opacity: 1;
        transform: translateY(0)scale(1)
    }
}

.c2-float-panel {
    -webkit-backdrop-filter: blur(18px)saturate(130%);
    background: color-mix(in srgb, var(--bg2) 96%, transparent);
    border: 1px solid var(--border2);
    box-shadow: var(--shadow-xl);
    border-radius: 12px;
    flex-direction: column;
    animation: .25s ease-out floatIn;
    display: flex;
    overflow: hidden
}

.c2-float-title {
    cursor: grab;
    -webkit-user-select: none;
    user-select: none;
    border-bottom: 1px solid var(--border);
    background: var(--bg3);
    flex-shrink: 0;
    align-items: center;
    gap: 8px;
    padding: 10px 14px;
    display: flex
}

.c2-float-title-text {
    color: var(--text);
    flex: 1;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    font-weight: 700;
    display: flex
}

.c2-float-count {
    color: var(--text2);
    background: var(--bg4);
    border-radius: 6px;
    padding: 2px 8px;
    font-size: 10px;
    font-weight: 600
}

.c2-float-close {
    width: 24px;
    height: 24px;
    color: var(--text3);
    cursor: pointer;
    background: 0 0;
    border: none;
    border-radius: 50%;
    justify-content: center;
    align-items: center;
    font-size: 14px;
    line-height: 1;
    transition: all .15s;
    display: flex
}

.c2-float-close:hover {
    background: var(--bg4);
    color: var(--text)
}

.c2-float-body {
    flex: 1;
    padding: 8px;
    overflow-y: auto
}

.c2-float-footer {
    border-top: 1px solid var(--border);
    background: var(--bg3);
    flex-shrink: 0;
    padding: 10px 12px
}

.c2-pwd-entry {
    cursor: pointer;
    border: 1px solid var(--border);
    background: var(--bg3);
    border-radius: 10px;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
    padding: 8px 10px;
    transition: all .15s;
    display: flex
}

.c2-pwd-entry:hover {
    background: var(--bg4);
    border-color: var(--border2)
}

.c2-pwd-entry.active {
    background: var(--accent-light);
    border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
    box-shadow: inset 2px 0 0 var(--accent)
}

.c2-pwd-type-pill {
    background: var(--bg4);
    color: var(--text2);
    border-radius: 6px;
    flex-shrink: 0;
    padding: 2px 7px;
    font-size: 10px;
    font-weight: 600
}

.c2-pwd-display {
    color: var(--text);
    letter-spacing: 1.5px;
    white-space: nowrap;
    text-overflow: ellipsis;
    font-family: SF Mono,Consolas,monospace;
    font-weight: 700;
    overflow: hidden
}

.c2-pwd-display.locktype {
    letter-spacing: 0;
    font-size: 12px
}

.c2-pwd-meta {
    color: var(--text3);
    gap: 6px;
    margin-top: 2px;
    font-size: 10px;
    display: flex
}

.c2-pwd-meta-pkg {
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100px;
    overflow: hidden
}

.c2-pwd-btn {
    cursor: pointer;
    border: none;
    border-radius: 10px;
    padding: 7px 12px;
    font-size: 12px;
    font-weight: 600;
    transition: all .15s
}

.c2-pwd-btn:disabled {
    opacity: .5;
    cursor: wait
}

.c2-pwd-btn.copy {
    background: var(--bg4);
    color: var(--text2);
    border: 1px solid var(--border2)
}

.c2-pwd-btn.copy:hover:not(:disabled) {
    background: var(--bg2);
    color: var(--text)
}

.c2-pwd-btn.primary {
    color: #fff;
    background: linear-gradient(135deg,#3b82f6,#2563eb);
    flex: 1;
    box-shadow: 0 2px 8px #2563eb40
}

.c2-pwd-btn.primary:hover:not(:disabled) {
    transform: scale(1.02);
    box-shadow: 0 4px 14px #2563eb59
}

.c2-pwd-btn.secondary {
    color: #fff;
    background: linear-gradient(135deg,#6366f1,#4f46e5);
    flex: 1;
    box-shadow: 0 2px 8px #4f46e540
}

.c2-pwd-btn.secondary:hover:not(:disabled) {
    transform: scale(1.02);
    box-shadow: 0 4px 14px #4f46e559
}

.c2-pwd-filters {
    flex-wrap: wrap;
    flex-shrink: 0;
    gap: 4px;
    padding: 8px 10px 0;
    display: flex
}

.c2-pwd-filter-btn {
    cursor: pointer;
    border: 1px solid var(--border);
    background: var(--bg3);
    color: var(--text2);
    border-radius: 8px;
    padding: 3px 10px;
    font-size: 11px;
    font-weight: 600;
    transition: all .15s
}

.c2-pwd-filter-btn:hover {
    background: var(--bg4);
    color: var(--text)
}

.c2-pwd-filter-btn.active {
    background: var(--accent-light);
    border-color: color-mix(in srgb, var(--accent) 42%, var(--border));
    color: var(--accent)
}

.c2-inj-row {
    border: 1px solid var(--border);
    background: var(--bg3);
    border-radius: 12px;
    margin-bottom: 6px;
    padding: 10px;
    transition: all .15s
}

.c2-inj-row:hover {
    background: var(--bg4);
    border-color: var(--border2)
}

.c2-inj-row.has-content {
    background: #0596690d;
    border-color: #05966926
}

.c2-inj-row.has-content:hover {
    background: #05966914
}

.c2-inj-icon {
    background: var(--bg4);
    border: 1px solid var(--border);
    border-radius: 10px;
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    width: 36px;
    height: 36px;
    display: flex;
    overflow: hidden;
    box-shadow: 0 1px 3px #0000000f
}

.c2-inj-status {
    border-radius: 10px;
    padding: 2px 8px;
    font-size: 10px;
    font-weight: 600
}

.c2-inj-btn {
    cursor: pointer;
    border: 1px solid;
    border-radius: 8px;
    padding: 4px 10px;
    font-size: 11px;
    font-weight: 600;
    transition: all .15s
}

.c2-inj-btn:disabled {
    opacity: .5;
    cursor: wait
}

.c2-inj-btn.skip {
    color: #6b7280;
    background: #00000008;
    border-color: #0000001a
}

.c2-inj-btn.open {
    color: #059669;
    background: #0596690f;
    border-color: #05966933
}

.c2-inj-btn.open:hover:not(:disabled) {
    background: #0596691f
}

.c2-inj-btn.reinject {
    color: #7c3aed;
    background: #7c3aed0f;
    border-color: #7c3aed33
}

.c2-inj-btn.reinject:hover:not(:disabled) {
    background: #7c3aed1f
}

.c2-inj-content-block {
    background: #05966908;
    border: 1px solid #0596691a;
    border-radius: 10px;
    margin-top: 8px;
    padding: 8px 10px
}

.ctrl-inj-card {
    background: var(--bg2);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    border-left: 3px solid var(--green);
    margin-bottom: 8px;
    padding: 16px
}

.ctrl-inj-header {
    align-items: center;
    gap: 10px;
    margin-bottom: 8px;
    display: flex
}

.ctrl-inj-icon {
    border-radius: var(--radius);
    background: var(--bg3);
    flex-shrink: 0;
    justify-content: center;
    align-items: center;
    width: 32px;
    height: 32px;
    font-size: 16px;
    display: flex
}

.ctrl-inj-app-name {
    color: var(--text);
    flex: 1;
    font-size: 13px;
    font-weight: 600
}

.ctrl-inj-badge {
    color: #fff;
    background: var(--green);
    border-radius: 20px;
    padding: 2px 10px;
    font-size: 10px;
    font-weight: 600
}

.ctrl-inj-content {
    color: var(--text);
    word-break: break-word;
    font-size: 12px;
    line-height: 1.7
}

.ctrl-inj-key {
    color: var(--accent);
    font-weight: 500
}

.ctrl-inj-val {
    color: var(--text);
    font-weight: 600
}

.ctrl-inj-template {
    color: var(--text3);
    margin-top: 6px;
    font-size: 10px
}

.ctrl-float {
    background: var(--bg2);
    border: 1px solid var(--border2);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-xl);
    resize: both;
    flex-direction: column;
    display: flex;
    position: fixed;
    overflow: hidden
}

.ctrl-float-title {
    background: var(--bg3);
    border-bottom: 1px solid var(--border);
    cursor: grab;
    -webkit-user-select: none;
    user-select: none;
    flex-shrink: 0;
    align-items: center;
    gap: 6px;
    padding: 8px 12px;
    display: flex
}

.ctrl-float-label {
    color: var(--text);
    flex: 1;
    font-size: 11px;
    font-weight: 700
}

.ctrl-float-status {
    color: var(--green);
    font-size: 10px;
    font-weight: 600
}

.ctrl-float-close {
    color: var(--text2);
    cursor: pointer;
    background: 0 0;
    border: none;
    border-radius: 4px;
    padding: 2px 6px;
    font-size: 16px;
    line-height: 1
}

.ctrl-float-close:hover {
    color: var(--red);
    background: var(--red-light)
}

.ctrl-float-body {
    background: var(--bg4);
    flex: 1;
    justify-content: center;
    align-items: center;
    min-height: 0;
    display: flex;
    position: relative;
    overflow: hidden
}

.ctrl-float-body img {
    pointer-events: none;
    display: block
}

.ctrl-float-nav {
    background: var(--bg3);
    border-top: 1px solid var(--border);
    flex-shrink: 0;
    gap: 0;
    display: flex
}

.ctrl-float-nav button {
    color: var(--text2);
    cursor: pointer;
    transition: var(--transition);
    background: 0 0;
    border: none;
    flex: 1;
    padding: 7px 0;
    font-size: 11px;
    font-weight: 500
}

.ctrl-float-nav button:hover {
    background: var(--accent-light);
    color: var(--accent)
}

.ctrl-float-input-bar {
    border-top: 1px solid var(--border);
    background: var(--bg2);
    flex-shrink: 0;
    align-items: center;
    gap: 4px;
    padding: 4px 8px;
    display: flex
}

.ctrl-float-input-bar input {
    background: var(--bg3);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    color: var(--text);
    outline: none;
    flex: 1;
    padding: 5px 10px;
    font-size: 12px
}

.ctrl-float-input-bar input::placeholder {
    color: var(--text3)
}

.ctrl-float-input-bar input:focus {
    border-color: var(--accent)
}

.ctrl-float-input-bar button {
    background: var(--accent);
    color: #fff;
    border-radius: var(--radius-sm);
    cursor: pointer;
    white-space: nowrap;
    border: none;
    padding: 5px 12px;
    font-size: 11px;
    font-weight: 600
}

.ctrl-float-footer {
    color: var(--text3);
    border-top: 1px solid var(--border);
    flex-shrink: 0;
    padding: 4px 12px;
    font-size: 10px
}

.ctrl-toast-container {
    z-index: 10000;
    position: fixed;
    top: 52px;
    right: 16px
}

.ctrl-toast {
    border-radius: var(--radius-sm);
    box-shadow: var(--shadow-md);
    margin-bottom: 6px;
    padding: 10px 16px;
    font-size: 12px;
    font-weight: 500;
    animation: .2s ctrl-slideIn
}

@keyframes ctrl-slideIn {
    0% {
        opacity: 0;
        transform: translate(100%)
    }

    to {
        opacity: 1;
        transform: translate(0)
    }
}

.ctrl-toast-success {
    background: var(--green-light);
    color: var(--green);
    border: 1px solid #10b98133
}

.ctrl-toast-error {
    background: var(--red-light);
    color: var(--red);
    border: 1px solid #ef444433
}

.ctrl-toast-info {
    background: var(--accent-light);
    color: var(--accent);
    border: 1px solid #4f6ef733
}

.ctrl-ai-cb {
    cursor: pointer;
    background: var(--accent-light);
    color: var(--accent);
    transition: var(--transition);
    white-space: nowrap;
    border: 1px solid #4f6ef726;
    border-radius: 20px;
    align-items: center;
    gap: 4px;
    margin-left: 4px;
    padding: 3px 10px;
    font-size: 10px;
    font-weight: 600;
    display: inline-flex
}

.ctrl-ai-cb:hover {
    border-color: var(--accent)
}

.ctrl-ai-cb input {
    cursor: pointer;
    accent-color: var(--accent);
    margin: 0
}

.ctrl-topbar-btn {
    cursor: pointer;
    transition: var(--transition);
    white-space: nowrap;
    border: none;
    border-radius: 20px;
    margin-left: 4px;
    padding: 3px 12px;
    font-size: 10px;
    font-weight: 600
}

.ctrl-topbar-btn.danger {
    background: var(--red-light);
    color: var(--red);
    border: 1px solid #ef444426
}

.ctrl-topbar-btn.danger:hover {
    background: #ef444426
}

.ctrl-topbar-btn.safe-mode {
    border-radius: var(--radius-sm);
    color: #fff;
    padding: 6px 16px;
    font-size: 12px;
    font-weight: 700
}

.ctrl-topbar-btn.safe-mode:hover {
    opacity: .85
}

.ctrl-ssf-btn {
    border: 1px solid var(--border);
    background: var(--bg2);
    color: var(--text);
    cursor: pointer;
    white-space: nowrap;
    transition: all var(--transition);
    border-radius: 20px;
    padding: 3px 10px;
    font-size: 10px;
    font-weight: 500
}

.ctrl-ssf-btn:hover {
    background: var(--accent);
    color: #fff;
    border-color: var(--accent)
}

.ctrl-modal-overlay {
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    z-index: 10200;
    background: #00000040;
    justify-content: center;
    align-items: center;
    display: flex;
    position: fixed;
    inset: 0
}

.ctrl-modal {
    background: var(--bg2);
    border-radius: var(--radius-lg);
    width: 460px;
    max-width: 95vw;
    max-height: 85vh;
    box-shadow: var(--shadow-xl);
    border: 1px solid var(--border);
    padding: 24px;
    overflow-y: auto
}

.ctrl-modal h3 {
    color: var(--text);
    margin-bottom: 16px;
    font-size: 15px;
    font-weight: 700
}

.ctrl-modal-body {
    margin-bottom: 16px
}

.ctrl-modal-body label {
    color: var(--text2);
    margin-bottom: 4px;
    font-size: 11px;
    font-weight: 500;
    display: block
}

.ctrl-modal-body input,.ctrl-modal-body textarea {
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: var(--bg3);
    width: 100%;
    color: var(--text);
    box-sizing: border-box;
    transition: border-color var(--transition);
    outline: none;
    margin-bottom: 12px;
    padding: 8px 12px;
    font-size: 12px
}

.ctrl-modal-body input:focus,.ctrl-modal-body textarea:focus {
    border-color: var(--accent);
    background: var(--bg2)
}

.ctrl-modal-actions {
    justify-content: flex-end;
    gap: 8px;
    display: flex
}

.ctrl-btn-primary {
    border-radius: var(--radius-sm);
    cursor: pointer;
    background: var(--accent);
    color: #fff;
    transition: var(--transition);
    border: none;
    padding: 8px 20px;
    font-size: 12px;
    font-weight: 600
}

.ctrl-btn-primary:hover {
    background: var(--accent2)
}

.ctrl-btn-cancel {
    border-radius: var(--radius-sm);
    border: 1px solid var(--border);
    cursor: pointer;
    background: var(--bg3);
    color: var(--text);
    transition: var(--transition);
    padding: 8px 20px;
    font-size: 12px;
    font-weight: 600
}

.ctrl-btn-cancel:hover {
    background: var(--bg4)
}

.report-section {
    margin-bottom: 16px
}

.report-section label {
    color: var(--text2);
    margin-bottom: 6px;
    font-size: 12px;
    font-weight: 500;
    display: block
}

.report-error {
    color: var(--red);
    background: var(--red-light);
    border-radius: var(--radius-sm);
    margin-bottom: 12px;
    padding: 8px 12px;
    font-size: 12px
}

.report-stats {
    background: var(--bg3);
    border-radius: var(--radius);
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    padding: 16px;
    display: grid
}

.report-stat-item {
    flex-direction: column;
    gap: 2px;
    display: flex
}

.report-stat-label {
    color: var(--text2);
    font-size: 11px;
    font-weight: 500
}

.report-stat-value {
    color: var(--text);
    font-size: 18px;
    font-weight: 700
}

.fgp-root {
    z-index: 9200;
    -webkit-user-select: none;
    user-select: none;
    touch-action: none;
    position: fixed
}

.fgp-root.is-dragging {
    cursor: grabbing
}

.fgp-root.is-dragging .fgp-panel,.fgp-root.is-dragging .fgp-fab {
    transition: none
}

.fgp-fab {
    color: #fff;
    cursor: grab;
    background: linear-gradient(145deg,#5b7cff 0%,#3b5ce5 100%);
    border: none;
    border-radius: 16px;
    place-items: center;
    width: 52px;
    height: 52px;
    transition: transform .18s,box-shadow .18s;
    display: grid;
    position: relative;
    box-shadow: 0 8px 24px #3b5ce559,0 2px 6px #00000014
}

.fgp-fab:hover {
    transform: translateY(-2px)scale(1.03);
    box-shadow: 0 12px 28px #3b5ce56b,0 4px 10px #0000001a
}

.fgp-fab:active {
    cursor: grabbing;
    transform: scale(.98)
}

.fgp-fab-ring {
    opacity: .22;
    filter: blur(1px);
    pointer-events: none;
    border-radius: 18px;
    position: absolute;
    inset: -3px
}

.fgp-fab-icon {
    z-index: 1;
    position: relative
}

.fgp-fab-badge {
    z-index: 2;
    color: #fff;
    background: #ef4444;
    border-radius: 999px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    font-size: 10px;
    font-weight: 700;
    line-height: 18px;
    animation: .9s ease-in-out infinite alternate fgp-pulse;
    position: absolute;
    top: -5px;
    right: -5px;
    box-shadow: 0 2px 6px #ef444466
}

.fgp-fab-tip {
    white-space: nowrap;
    color: #fff;
    pointer-events: none;
    opacity: 0;
    box-shadow: var(--shadow-md);
    background: #1e2432e0;
    border-radius: 8px;
    padding: 5px 10px;
    font-size: 11px;
    font-weight: 600;
    transition: opacity .15s;
    position: absolute;
    top: 50%;
    right: calc(100% + 10px);
    transform: translateY(-50%)
}

.fgp-fab:hover .fgp-fab-tip {
    opacity: 1
}

@keyframes fgp-pulse {
    0% {
        transform: scale(1)
    }

    to {
        transform: scale(1.08)
    }
}

.fgp-panel {
    -webkit-backdrop-filter: blur(16px)saturate(1.2);
    background: #ffffffeb;
    border: 1px solid #e2e5edf2;
    border-radius: 16px;
    flex-direction: column;
    animation: .18s fgp-in;
    display: flex;
    overflow: hidden;
    box-shadow: 0 16px 48px #1e243224,0 4px 12px #1e24320f
}

@keyframes fgp-in {
    0% {
        opacity: 0;
        transform: translateY(8px)scale(.97)
    }

    to {
        opacity: 1;
        transform: none
    }
}

.fgp-head {
    border-bottom: 1px solid var(--border);
    cursor: grab;
    background: linear-gradient(#f7f8fc 0%,#f7f8fc00 100%);
    justify-content: space-between;
    align-items: center;
    gap: 8px;
    padding: 12px 12px 10px;
    display: flex
}

.fgp-head-left {
    align-items: center;
    gap: 10px;
    min-width: 0;
    display: flex
}

.fgp-grip {
    opacity: .35;
    grid-template-rows: repeat(3,1fr);
    align-content: center;
    gap: 3px;
    width: 14px;
    height: 18px;
    display: grid
}

.fgp-grip i {
    background: var(--text2);
    border-radius: 2px;
    height: 2px;
    display: block
}

.fgp-title {
    color: var(--text);
    letter-spacing: .01em;
    font-size: 13px;
    font-weight: 700
}

.fgp-sub {
    color: var(--text2);
    margin-top: 1px;
    font-size: 11px
}

.fgp-head-actions {
    gap: 4px;
    display: flex
}

.fgp-icon-btn {
    background: var(--bg3);
    width: 30px;
    height: 30px;
    color: var(--text2);
    cursor: pointer;
    border: none;
    border-radius: 8px;
    place-items: center;
    transition: all .15s;
    display: grid
}

.fgp-icon-btn:hover {
    background: var(--accent-light);
    color: var(--accent)
}

.fgp-list {
    flex: 1;
    min-height: 120px;
    max-height: 240px;
    padding: 8px;
    overflow-y: auto
}

.fgp-item-wrap {
    position: relative
}

.fgp-item {
    width: 100%;
    color: var(--text);
    cursor: pointer;
    text-align: left;
    background: 0 0;
    border: 1px solid #0000;
    border-radius: 10px;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
    padding: 8px 10px;
    transition: background .12s,border-color .12s,box-shadow .12s;
    display: flex
}

.fgp-item:hover {
    background: var(--bg3)
}

.fgp-item.is-active {
    background: color-mix(in srgb, var(--fgp-active,var(--accent)) 12%, #fff);
    border-color: color-mix(in srgb, var(--fgp-active,var(--accent)) 35%, #fff);
    box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--fgp-active,var(--accent)) 18%, transparent)
}

.fgp-dot {
    border-radius: 50%;
    flex-shrink: 0;
    width: 9px;
    height: 9px;
    box-shadow: 0 0 0 2px #fffc
}

.fgp-dot-all {
    background: linear-gradient(135deg,#5b7cff,#3b5ce5)
}

.fgp-item-name {
    text-overflow: ellipsis;
    white-space: nowrap;
    flex: 1;
    min-width: 0;
    font-size: 12px;
    font-weight: 550;
    overflow: hidden
}

.fgp-count {
    color: var(--text2);
    background: var(--bg3);
    border-radius: 999px;
    padding: 1px 7px;
    font-size: 11px;
    font-weight: 650
}

.fgp-item.is-active .fgp-count {
    background: color-mix(in srgb, var(--fgp-active,var(--accent)) 18%, #fff);
    color: var(--text)
}

.fgp-more {
    opacity: 0;
    color: var(--text2);
    letter-spacing: 1px;
    cursor: pointer;
    background: 0 0;
    border: none;
    padding: 0 2px;
    font-size: 14px;
    font-weight: 700;
    line-height: 1;
    transition: opacity .12s
}

.fgp-item:hover .fgp-more,.fgp-item-wrap:focus-within .fgp-more {
    opacity: 1
}

.fgp-more:hover {
    color: var(--text)
}

.fgp-menu {
    z-index: 5;
    background: var(--bg2);
    border: 1px solid var(--border);
    min-width: 108px;
    box-shadow: var(--shadow-lg);
    border-radius: 10px;
    padding: 4px;
    animation: .12s fgp-in;
    position: absolute;
    top: calc(100% - 4px);
    right: 8px
}

.fgp-menu button {
    text-align: left;
    width: 100%;
    color: var(--text);
    cursor: pointer;
    background: 0 0;
    border: none;
    border-radius: 7px;
    padding: 7px 10px;
    font-size: 12px;
    display: block
}

.fgp-menu button:hover {
    background: var(--bg3)
}

.fgp-menu button.danger {
    color: var(--red)
}

.fgp-menu button.danger:hover {
    background: var(--red-light)
}

.fgp-empty {
    text-align: center;
    color: var(--text3);
    padding: 28px 12px;
    font-size: 12px;
    line-height: 1.5
}

.fgp-foot {
    border-top: 1px solid var(--border);
    background: linear-gradient(#fff 0%,#fafbfe 100%);
    padding: 10px 12px 12px
}

.fgp-move-label {
    color: var(--text2);
    margin-bottom: 8px;
    font-size: 11px
}

.fgp-move-label b {
    color: var(--accent);
    font-weight: 700
}

.fgp-move-row {
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 10px;
    display: flex
}

.fgp-chip {
    border: 1px solid color-mix(in srgb, var(--chip,var(--accent)) 35%, var(--border));
    background: color-mix(in srgb, var(--chip,var(--accent)) 10%, #fff);
    max-width: 100%;
    color: var(--text);
    cursor: pointer;
    border-radius: 999px;
    align-items: center;
    gap: 5px;
    padding: 5px 10px;
    font-size: 11px;
    font-weight: 600;
    transition: transform .12s,box-shadow .12s;
    display: inline-flex
}

.fgp-chip i {
    border-radius: 50%;
    flex-shrink: 0;
    width: 7px;
    height: 7px
}

.fgp-chip:hover {
    box-shadow: 0 4px 10px color-mix(in srgb, var(--chip,var(--accent)) 22%, transparent);
    transform: translateY(-1px)
}

.fgp-chip-out {
    --chip: #f59e0b;
    color: #b45309
}

.fgp-hint {
    color: var(--text3);
    margin-bottom: 10px;
    font-size: 11px;
    line-height: 1.4
}

.fgp-create {
    color: #fff;
    cursor: pointer;
    background: linear-gradient(135deg,#5b7cff 0%,#3b5ce5 100%);
    border: none;
    border-radius: 11px;
    justify-content: center;
    align-items: center;
    gap: 6px;
    width: 100%;
    padding: 9px 12px;
    font-size: 12px;
    font-weight: 700;
    transition: transform .15s,box-shadow .15s,filter .15s;
    display: flex;
    box-shadow: 0 6px 16px #3b5ce547
}

.fgp-create:hover {
    filter: brightness(1.05);
    transform: translateY(-1px);
    box-shadow: 0 8px 20px #3b5ce55c
}

.fgp-create:active {
    transform: translateY(0)
}

.gge {
    padding: 2px 0 4px
}

.gge-hero {
    border: 1px solid var(--border);
    border-radius: 14px;
    margin: -4px 0 16px;
    padding: 16px 14px 14px
}

.gge-preview {
    box-shadow: var(--shadow-sm);
    background: #fff;
    border: 1px solid #0000;
    border-radius: 12px;
    align-items: center;
    gap: 8px;
    padding: 10px 12px;
    display: flex
}

.gge-preview-dot {
    border-radius: 50%;
    flex-shrink: 0;
    width: 10px;
    height: 10px
}

.gge-preview-name {
    min-width: 0;
    color: var(--text);
    text-overflow: ellipsis;
    white-space: nowrap;
    flex: 1;
    font-size: 13px;
    font-weight: 650;
    overflow: hidden
}

.gge-preview-count {
    color: var(--text2);
    background: #ffffffb3;
    border-radius: 999px;
    padding: 2px 8px;
    font-size: 11px;
    font-weight: 650
}

.gge-hero-hint {
    color: var(--text3);
    text-align: center;
    margin-top: 8px;
    font-size: 11px
}

.gge-label {
    color: var(--text2);
    margin-bottom: 6px;
    font-size: 12px;
    font-weight: 600;
    display: block
}

.gge-input {
    box-sizing: border-box;
    border: 1px solid var(--border);
    background: var(--bg3);
    width: 100%;
    color: var(--text);
    border-radius: 10px;
    outline: none;
    padding: 10px 12px;
    font-size: 13px;
    transition: border-color .15s,background .15s,box-shadow .15s
}

.gge-input:focus {
    border-color: var(--accent);
    box-shadow: 0 0 0 3px var(--accent-light);
    background: #fff
}

.gge-err {
    color: var(--red);
    margin-top: 6px;
    font-size: 11px
}

.gge-colors {
    flex-wrap: wrap;
    gap: 8px;
    display: flex
}

.gge-swatch {
    cursor: pointer;
    border: 2px solid #0000;
    border-radius: 50%;
    width: 28px;
    height: 28px;
    transition: transform .12s,box-shadow .12s;
    box-shadow: inset 0 0 0 2px #ffffff59
}

.gge-swatch:hover {
    transform: scale(1.08)
}

.gge-swatch.is-on {
    box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--text);
    transform: scale(1.1)
}

.gge-actions {
    justify-content: flex-end;
    gap: 8px;
    margin-top: 18px;
    display: flex
}

.gge-btn {
    cursor: pointer;
    border: none;
    border-radius: 10px;
    padding: 9px 16px;
    font-size: 12px;
    font-weight: 700;
    transition: all .15s
}

.gge-btn:disabled {
    opacity: .6;
    cursor: default
}

.gge-btn-ghost {
    background: var(--bg3);
    color: var(--text);
    border: 1px solid var(--border)
}

.gge-btn-ghost:hover {
    background: var(--bg4)
}

.gge-btn-primary {
    color: #fff
}

.gge-btn-primary:hover {
    filter: brightness(1.05)
}

.dev-ctx-menu {
    z-index: 80;
    background: var(--bg2);
    border: 1px solid var(--border);
    min-width: 196px;
    max-width: 240px;
    box-shadow: var(--shadow-lg);
    border-radius: 12px;
    padding: 6px;
    position: fixed
}

.dev-ctx-head {
    color: var(--text3);
    border-bottom: 1px solid var(--border);
    margin-bottom: 4px;
    padding: 6px 10px 8px;
    font-size: 11px
}

.dev-ctx-head b {
    color: var(--text);
    font-weight: 700
}

.dev-ctx-menu button {
    text-align: left;
    width: 100%;
    color: var(--text);
    cursor: pointer;
    background: 0 0;
    border: none;
    border-radius: 8px;
    align-items: center;
    gap: 8px;
    padding: 7px 10px;
    font-size: 12px;
    display: flex
}

.dev-ctx-menu button:hover {
    background: var(--bg3)
}

.dev-ctx-menu button.danger {
    color: var(--red)
}

.dev-ctx-menu button.danger:hover {
    background: var(--red-light)
}

.dev-ctx-sep {
    background: var(--border);
    height: 1px;
    margin: 4px 6px
}

.dev-ctx-label {
    color: var(--text3);
    padding: 6px 10px 2px;
    font-size: 10px;
    font-weight: 700
}

.dev-ctx-dot {
    border-radius: 50%;
    flex-shrink: 0;
    width: 8px;
    height: 8px
}

tr.dev-mark-重要 {
    background: #fef2f2!important
}

tr.dev-mark-待跟进 {
    background: #fff7ed!important
}

tr.dev-mark-已处理 {
    background: #f0fdf4!important
}

tr.dev-mark-重要.selected,tr.dev-mark-待跟进.selected,tr.dev-mark-已处理.selected {
    filter: brightness(.97)
}

.dev-id-cell {
    text-align: center;
    vertical-align: middle
}

.dev-id-cell .dev-id-stack {
    flex-direction: column;
    justify-content: center;
    align-items: center;
    gap: 3px;
    min-width: 52px;
    display: flex
}

.dev-id-num {
    color: var(--text2);
    font-family: SF Mono,Consolas,monospace;
    font-size: 12px;
    font-weight: 700;
    line-height: 1.2
}

.dev-id-group {
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 64px;
    font-size: 10px;
    font-weight: 700;
    line-height: 1.2;
    display: block;
    overflow: hidden
}

.dev-mark-badge {
    color: #fff;
    white-space: nowrap;
    border-radius: 4px;
    padding: 0 5px;
    font-size: 10px;
    font-weight: 800;
    line-height: 16px;
    display: block
}

.dev-mark-badge-重要 {
    background: #ef4444
}

.dev-mark-badge-待跟进 {
    background: #f59e0b
}

.dev-mark-badge-已处理 {
    background: #22c55e
}

html[data-theme=dark] body,html[data-theme=dark] .app,html[data-theme=dark] .main {
    background: var(--bg)
}

html[data-theme=dark] .header,html[data-theme=dark] .sidebar,html[data-theme=dark] .table-toolbar {
    background: var(--bg2);
    border-color: var(--border)
}

html[data-theme=dark] .header .moying-wordmark strong,html[data-theme=dark] .moying-brand {
    color: var(--text)
}

html[data-theme=dark] .header .moying-wordmark em {
    color: #a8b2ff;
    background: #171d3b;
    border-color: #343c73
}

html[data-theme=dark] .search-box,html[data-theme=dark] .stats-bar,html[data-theme=dark] .account-card,html[data-theme=dark] .header-action,html[data-theme=dark] .device-count-card,html[data-theme=dark] .table-toolbar .filter-chip,html[data-theme=dark] .table-toolbar .date-filter-control {
    color: var(--text2);
    background: var(--bg3);
    border-color: var(--border)
}

html[data-theme=dark] .search-box:focus,html[data-theme=dark] .header-action:hover,html[data-theme=dark] .table-toolbar .filter-chip:hover {
    color: var(--text);
    background: var(--bg4)
}

html[data-theme=dark] .overview-card+.overview-card,html[data-theme=dark] .stats-group-yesterday,html[data-theme=dark] .stat-card {
    border-color: var(--border)
}

html[data-theme=dark] .stat-card:hover {
    background: var(--bg4)
}

html[data-theme=dark] .overview-online .overview-icon {
    background: #0d2a22
}

html[data-theme=dark] .overview-total .overview-icon {
    background: #1b212b
}

html[data-theme=dark] .account-expiry.is-valid {
    color: #56dfad;
    background: #0c2a21
}

html[data-theme=dark] .account-expiry.is-warning {
    color: #f8c465;
    background: #2c2210
}

html[data-theme=dark] .account-expiry.is-expired {
    color: #ff7c89;
    background: #30131a
}

html[data-theme=dark] .header-speed.is-good {
    color: #4cdaa5;
    background: #0e211b;
    border-color: #21483b
}

html[data-theme=dark] .header-speed.is-warning {
    color: #efbc5c;
    background: #211b0f;
    border-color: #514124
}

html[data-theme=dark] .header-speed.is-poor,html[data-theme=dark] .header-logout:hover {
    color: #ff7180;
    background: #271116;
    border-color: #5b2931
}

html[data-theme=dark] .toolbar-clean-offline {
    color: #ff9b8f;
    background: #271513;
    border-color: #5b302b
}

html[data-theme=dark] .toolbar-clean-offline:hover:not(:disabled) {
    color: #ffc0b8;
    background: #351b18;
    border-color: #784039
}

html[data-theme=dark] .nav-btn:hover {
    color: var(--text);
    background: var(--bg3)
}

html[data-theme=dark] .nav-btn.active {
    color: #aab4ff;
    background: #151a33
}

html[data-theme=dark] .nav-btn.active:before {
    background: #8997ff
}

html[data-theme=dark] .device-count-card strong {
    color: var(--text)
}

html[data-theme=dark] .ctrl-dev-meta,html[data-theme=dark] .ctrl-info-label,html[data-theme=dark] .ctrl-side-group-title,html[data-theme=dark] .ctrl-cmd-section h3,html[data-theme=dark] .ctrl-pay-header-sub,html[data-theme=dark] .ctrl-float-footer,html[data-theme=dark] .c2-pwd-meta,html[data-theme=dark] .c2-float-count {
    color: var(--text2)
}

html[data-theme=dark] .ctrl-nav-item,html[data-theme=dark] .ctrl-side-btn,html[data-theme=dark] .ctrl-qb,html[data-theme=dark] .c2-pwd-display,html[data-theme=dark] .c2-float-title-text {
    color: var(--text)
}

html[data-theme=dark] .snapshot-hint i,html[data-theme=dark] .filter-indicator {
    background: #56606f
}

html[data-theme=dark] .table-toolbar .filter-chip.is-active,html[data-theme=dark] .table-toolbar .date-filter-control.has-value {
    color: #aab4ff;
    background: #151a33;
    border-color: #38447e
}

html[data-theme=dark] .table-toolbar .filter-online.is-active {
    color: #56dfad;
    background: #0d251e;
    border-color: #22503f
}

html[data-theme=dark] .table-toolbar .filter-acc.is-active {
    color: #c1aaff;
    background: #211834;
    border-color: #4a376c
}

html[data-theme=dark] .table-toolbar .filter-important.is-active {
    color: #ff7c89;
    background: #291218;
    border-color: #5b2c34
}

html[data-theme=dark] .table-toolbar .filter-follow.is-active {
    color: #f6c163;
    background: #281f0e;
    border-color: #5a4725
}

html[data-theme=dark] tr.dev-mark-重要 {
    background: #261015!important
}

html[data-theme=dark] tr.dev-mark-待跟进 {
    background: #271d0d!important
}

html[data-theme=dark] tr.dev-mark-已处理 {
    background: #0b2118!important
}

html[data-theme=dark] .auth-page {
    color: var(--text);
    background-color: #07090d;
    background-image: linear-gradient(#ffffff06 1px,#0000 1px),linear-gradient(90deg,#ffffff06 1px,#0000 1px),none;
    background-position: 0 0,0 0,0 0;
    background-repeat: repeat,repeat,repeat;
    background-size: 40px 40px;
    background-attachment: scroll,scroll,scroll;
    background-origin: padding-box,padding-box,padding-box;
    background-clip: border-box,border-box,border-box
}

html[data-theme=dark] .auth-page-interactive:before {
    background: radial-gradient(circle 380px at var(--auth-x) var(--auth-y), #6375f521, transparent 70%)
}

html[data-theme=dark] .auth-page-interactive:after {
    border-color: #8b99ff1a
}

html[data-theme=dark] .auth-shell {
    background: #0b0e13;
    border-color: #252b35;
    box-shadow: 0 28px 90px #00000094
}

html[data-theme=dark] .auth-brand-panel {
    background: #05070a
}

html[data-theme=dark] .auth-form-panel {
    background: #0d1016
}

html[data-theme=dark] .auth-form-heading h2 {
    color: var(--text)
}

html[data-theme=dark] .auth-form-heading p {
    color: var(--text2)
}

html[data-theme=dark] .auth-step-track {
    color: #707a8b
}

html[data-theme=dark] .auth-step-track i {
    color: #8d97a8;
    background: #141820;
    border-color: #303743
}

html[data-theme=dark] .auth-step-track em {
    background: #2b313b
}

html[data-theme=dark] .auth-step-track span.is-active {
    color: #aab4ff
}

html[data-theme=dark] .auth-step-track span.is-active i {
    color: #c0c8ff;
    border-color: #5867c8;
    box-shadow: 0 0 0 4px #6f81ff1a
}

html[data-theme=dark] .auth-step-track span.is-done {
    color: #65d6ae
}

html[data-theme=dark] .auth-step-track span.is-done i {
    color: #07140f;
    background: #58c49d;
    border-color: #58c49d
}

html[data-theme=dark] .auth-field>span:first-child {
    color: #c2cad6
}

html[data-theme=dark] .auth-field.is-active>span:first-child {
    color: #aab4ff
}

html[data-theme=dark] .auth-field .ant-input-affix-wrapper {
    border-color: var(--border);
    background: var(--bg3)
}

html[data-theme=dark] .auth-field .ant-input-affix-wrapper:hover,html[data-theme=dark] .auth-field .ant-input-affix-wrapper-focused {
    background: var(--bg4)
}

html[data-theme=dark] .auth-field .ant-input {
    color: var(--text)
}

html[data-theme=dark] .auth-security-note {
    color: var(--text2);
    border-color: var(--border);
    background: #10141b
}

html[data-theme=dark] .auth-security-note strong {
    color: var(--text)
}

html[data-theme=dark] .auth-form-footer {
    color: var(--text3)
}

html[data-theme=dark] .auth-mobile-logo .moying-wordmark strong {
    color: var(--text)
}

html[data-theme=dark] .modal,html[data-theme=dark] .fgp-panel,html[data-theme=dark] .c2-float-panel {
    border-color: var(--border);
    color: var(--text);
    background: #0d1016f5
}

html[data-theme=dark] .fgp-head,html[data-theme=dark] .fgp-foot {
    background: var(--bg2)
}

html[data-theme=dark] .fgp-item.is-active {
    background: color-mix(in srgb, var(--fgp-active,var(--accent)) 18%, var(--bg2));
    border-color: color-mix(in srgb, var(--fgp-active,var(--accent)) 45%, var(--border))
}

html[data-theme=dark] .fgp-item.is-active .fgp-count,html[data-theme=dark] .fgp-chip {
    background: color-mix(in srgb, var(--chip,var(--accent)) 18%, var(--bg2))
}

html[data-theme=dark] .fgp-dot {
    box-shadow: 0 0 0 2px var(--bg2)
}

html[data-theme=dark] .gge-preview,html[data-theme=dark] .gge-input:focus {
    background: var(--bg2)
}

html[data-theme=dark] .gge-preview-count {
    background: var(--bg3)
}

html[data-theme=dark] .gge-swatch.is-on {
    box-shadow: 0 0 0 2px var(--bg2), 0 0 0 4px var(--text)
}

@media (width<=520px) {
    html[data-theme=dark] .auth-page {
        background: var(--bg2)
    }

    .auth-theme-switch {
        top: 14px;
        right: 14px
    }
}
