    /* ================= 主题变量 ================= */
    :root {
        --bg: #050a16;
        --bg2: #0a1122;
        --panel-top: rgba(16, 30, 58, .82);
        --panel-bot: rgba(10, 20, 40, .55);
        --sidebar-top: rgba(11, 22, 46, .92);
        --sidebar-bot: rgba(6, 13, 28, .72);
        --topbar-1: rgba(12, 24, 50, .95);
        --topbar-2: rgba(8, 16, 34, .82);
        --line: rgba(64, 158, 255, .16);
        --line-s: rgba(64, 158, 255, .30);
        --accent: #22d3ee;
        --accent2: #3b82f6;
        --txt: #c8d6ea;
        --txt-strong: #eaf4ff;
        --txt-s: #6d809f;
        --txt-x: #4d5f7d;
        --field-bg: rgba(8, 16, 34, .55);
        --field-bd: rgba(64, 158, 255, .16);
        --stat-bg: linear-gradient(150deg, rgba(59, 130, 246, .10), rgba(59, 130, 246, .02));
        --stat-bd: rgba(64, 158, 255, .18);
        --thead: rgba(59, 130, 246, .10);
        --log-bg: rgba(3, 8, 18, .6);
        --shadow: 0 8px 28px rgba(0, 0, 0, .34);
        --grid-mask: rgba(64, 158, 255, .05);
        --ok: #34d399;
        --warn: #fbbf24;
        --err: #f87171;
        --mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
        --card: #eef5fd;
    }

    html[data-theme="light"] {
        --bg: #eef2f8;
        --bg2: #e6ecf6;
        --panel-top: #ffffff;
        --panel-bot: #f7fafd;
        --sidebar-top: #ffffff;
        --sidebar-bot: #f4f7fc;
        --topbar-1: #ffffff;
        --topbar-2: #f3f7fc;
        --line: rgba(15, 60, 140, .14);
        --line-s: rgba(15, 60, 140, .24);
        --accent: #0891b2;
        --accent2: #2563eb;
        --txt: #334155;
        --txt-strong: #0f172a;
        --txt-s: #64748b;
        --txt-x: #94a3b8;
        --field-bg: #ffffff;
        --field-bd: rgba(15, 60, 140, .16);
        --stat-bg: linear-gradient(150deg, rgba(8, 145, 178, .07), rgba(8, 145, 178, .01));
        --stat-bd: rgba(15, 60, 140, .14);
        --thead: rgba(8, 145, 178, .08);
        --log-bg: #f8fafc;
        --shadow: 0 6px 22px rgba(15, 40, 90, .08);
        --grid-mask: rgba(15, 60, 140, .05);
        --ok: #34d399;
        --warn: #b45309;
        --err: #dc2626;
    }

    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box
    }

    html,
    body {
        height: 100%
    }

    body {
        background:
            radial-gradient(1200px 700px at 12% -10%, var(--grid-mask), transparent 60%),
            radial-gradient(1000px 600px at 100% 0%, var(--grid-mask), transparent 55%),
            var(--bg);
        color: var(--txt);
        -webkit-font-smoothing: antialiased;
        transition: background .3s, color .3s;
    }

    body::before {
        content: '';
        position: fixed;
        inset: 0;
        pointer-events: none;
        z-index: 0;
        background-image: linear-gradient(var(--grid-mask) 1px, transparent 1px),
            linear-gradient(90deg, var(--grid-mask) 1px, transparent 1px);
        background-size: 44px 44px;
        mask-image: radial-gradient(circle at 50% 30%, #000 30%, transparent 85%);
        -webkit-mask-image: radial-gradient(circle at 50% 30%, #000 30%, transparent 85%);
    }

    ::-webkit-scrollbar {
        width: 6px;
        height: 6px
    }

    ::-webkit-scrollbar-thumb {
        background: var(--line-s);
        border-radius: 3px
    }

    ::-webkit-scrollbar-track {
        background: transparent
    }

    .app {
        position: relative;
        z-index: 1;
        display: grid;
        grid-template-columns: 196px minmax(0, 1fr) 196px;
        height: 88vh;
        margin-top: 2vh;
    }

    /* ============ 顶栏 ============ */
    .topbar {
        grid-column: 1/-1;
    }

    html[data-theme="dark"] .topbar {
        box-shadow: 0 1px 24px rgba(0, 0, 0, .5), inset 0 -1px 0 rgba(34, 211, 238, .10)
    }



    .top-tags {
        display: flex;
        gap: 8px;
        flex: 1;
        flex-wrap: wrap
    }

    .tag {
        display: flex;
        align-items: center;
        gap: 6px;
        padding: 4px 10px;
        border-radius: 20px;
        background: var(--stat-bg);
        border: 1px solid var(--line);
        font-size: 12px;
        color: var(--txt-s);
        white-space: nowrap
    }

    .tag b {
        color: var(--txt-strong);
        font-weight: 600;
        font-family: var(--mono)
    }

    .dot {
        width: 6px;
        height: 6px;
        border-radius: 50%;
        background: var(--ok);
        box-shadow: 0 0 8px var(--ok);
        animation: pulse 1.6s ease-in-out infinite
    }

    .dot.amber {
        background: var(--warn);
        box-shadow: 0 0 8px var(--warn)
    }

    @keyframes pulse {

        0%,
        100% {
            opacity: 1
        }

        50% {
            opacity: .35
        }
    }

    .clock {
        font-family: var(--mono);
        font-size: 12px;
        color: var(--txt-strong);
        letter-spacing: .5px;
        white-space: nowrap
    }

    .clock span {
        color: var(--accent)
    }

    .theme-btn {
        display: flex;
        align-items: center;
        gap: 6px;
        padding: 6px 12px;
        border-radius: 20px;
        cursor: pointer;
        background: var(--stat-bg);
        border: 1px solid var(--line-s);
        color: var(--txt-strong);
        font-size: 12px;
        font-family: var(--mono);
        transition: .2s;
        white-space: nowrap
    }

    .theme-btn:hover {
        border-color: var(--accent);
        color: var(--accent)
    }

    .theme-btn i {
        font-style: normal;
        font-size: 14px
    }

    /* ============ 侧栏 ============ */
    .sidebar {
        background: linear-gradient(180deg, var(--sidebar-top), var(--sidebar-bot));
        border-right: 1px solid var(--line);
        padding: 37px 10px;
        overflow-y: auto;
        margin: -4vh 0;
    }

    /* .nav-title {
        font-size: 14px;
    } */

    .nav-item {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 9px 12px;
        border-radius: 8px;
        color: var(--txt-s);
        cursor: pointer;
        font-size: 14px;
        margin-bottom: 3px;
        border: 1px solid transparent;
        transition: .18s;
        position: relative;
        white-space: nowrap;
    }

    .nav-item .ic {
        width: 16px;
        text-align: center;
        font-size: 16px;
        /* opacity: .85 */
    }

    .nav-item:hover {
        color: var(--txt-strong);
        background: var(--stat-bg)
    }

    .nav-item.active {
        color: var(--txt-strong);
        background: var(--stat-bg);
        border-color: var(--line-s)
    }

    .nav-item.active::before {
        content: '';
        position: absolute;
        left: -10px;
        top: 50%;
        transform: translateY(-50%);
        width: 3px;
        height: 18px;
        border-radius: 0 3px 3px 0;
        background: var(--accent);
        box-shadow: 0 0 10px var(--accent)
    }

    .nav-item .ic svg {
        width: 100%;
        height: 100%;
        display: block;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.6;
        stroke-linecap: round;
        stroke-linejoin: round
    }

    .nav-badge {
        margin-left: auto;
        font-size: 12px;
        padding: 1px 6px;
        border-radius: 8px;
        background: rgba(248, 113, 113, .16);
        color: var(--err);
        font-family: var(--mono)
    }

    .nav-item .ic svg {
        width: 100%;
        height: 100%;
        display: block;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.6;
        stroke-linecap: round;
        stroke-linejoin: round
    }

    /* ============ 主区 ============ */
    .main {
        padding: 0 14px;
        overflow-y: auto;
        display: flex;
        flex-direction: column;
        gap: 12px;
        min-width: 0;
        margin: 0 0 -4vh 0;
    }

    .panel {
        position: relative;
        background: linear-gradient(160deg, var(--panel-top), var(--panel-bot));
        border: 1px solid var(--line);
        border-radius: 10px;
        padding: 12px 14px 14px;
        backdrop-filter: blur(6px);
        box-shadow: var(--shadow), inset 0 1px 0 rgba(255, 255, 255, .04)
    }
    .panel-bss{
        height: 277px;
    }
    /* .panel::before,
    .panel::after {
        content: '';
        position: absolute;
        width: 10px;
        height: 10px;
        pointer-events: none
    }

    .panel::before {
        left: -1px;
        top: -1px;
        border-left: 2px solid var(--accent);
        border-top: 2px solid var(--accent);
        border-radius: 10px 0 0 0
    }

    .panel::after {
        right: -1px;
        bottom: -1px;
        border-right: 2px solid var(--accent);
        border-bottom: 2px solid var(--accent);
        border-radius: 0 0 10px 0;
        opacity: .5
    } */

    .p-head {
        display: flex;
        align-items: center;
        gap: 8px;
        margin-bottom: 10px;
        padding-bottom: 9px;
        border-bottom: 1px dashed var(--line-s)
    }

    .p-head h3 {
        font-size: 14px;
        font-weight: 600;
        color: var(--txt-strong);
        letter-spacing: .5px;
        display: flex;
        align-items: center;
        gap: 8px
    }

    .p-head h3::before {
        content: '';
        width: 3px;
        height: 13px;
        border-radius: 2px;
        background: linear-gradient(180deg, var(--accent), var(--accent2))
    }

    .p-head .sub {
        font-size: 10.5px;
        color: var(--txt-x);
        font-family: var(--mono)
    }

    .p-head .tools {
        margin-left: auto;
        display: flex;
        gap: 6px
    }

    .chip {
        font-size: 12px;
        padding: 2px 8px;
        border-radius: 4px;
        background: var(--stat-bg);
        border: 1px solid var(--line-s);
        color: var(--accent);
        font-family: var(--mono);
        cursor: pointer
    }

    .chip:hover {
        border-color: var(--accent)
    }

    .grid-2 {
        display: grid;
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
        gap: 12px
    }

    .grid-2e {
        display: grid;
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
        gap: 12px
    }

    .chart {
        width: 100%;
        height: 286px;
    }

    /* 数值网格 */
    .stats {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 12px
    }
    .stats2 {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 12px;
    }
    .stats4 {
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 12px
    }

    .stat {
        /* background: var(--stat-bg); */
        /* border: 1px solid var(--stat-bd); */
        border-radius: 8px;
        /* padding: 0 10px */
    }

    .stat .s-lab {
        font-size: 12px;
        color: var(--txt-s);
        display: flex;
        align-items: center;
        gap: 5px;
        white-space: nowrap
    }

    .stat .s-lab i {
        width: 5px;
        height: 5px;
        border-radius: 50%;
        background: var(--accent);
        display: inline-block;
        flex: none
    }

    .stat .s-val {
        font-family: var(--mono);
        color: var(--txt-strong);
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        font-size: 12px;
    }

    .stat .s-val small {
        font-size: 12px;
        color: var(--txt-s);
        margin-left: 3px;
        font-weight: 400
    }

    .c-green .s-lab i {
        background: var(--ok)
    }

    .c-amber .s-lab i {
        background: var(--warn)
    }

    .c-violet .s-lab i {
        background: #a78bfa
    }

    .c-blue .s-lab i {
        background: var(--accent2)
    }

    /* 表格 */
    table {
        width: 100%;
        border-collapse: collapse;
        font-size: 14px
    }

    thead th {
        text-align: left;
        font-weight: 500;
        color: var(--txt-s);
        font-size: 12px;
        letter-spacing: .5px;
        padding: 7px 8px;
        background: var(--thead);
        border-bottom: 1px solid var(--line-s);
        position: sticky;
        top: 0;
        backdrop-filter: blur(4px)
    }

    tbody td {
        padding: 6px 8px;
        border-bottom: 1px solid var(--line);
        color: var(--txt)
    }

    tbody tr:hover {
        background: var(--stat-bg)
    }

    tbody td.v {
        font-family: var(--mono);
        color: var(--txt-strong);
        text-align: right
    }

    tbody td.u {
        color: var(--txt-x);
        width: 52px;
        font-size: 12px
    }

    tbody td.k {
        color: var(--txt-s)
    }

    .editable {
        outline: none;
        border-bottom: 1px dashed transparent;
        cursor: text;
        display: inline-block;
        min-width: 56px;
        text-align: right
    }

    .editable:hover {
        border-bottom-color: var(--line-s)
    }

    .editable:focus {
        border-bottom-color: var(--accent);
        background: var(--stat-bg)
    }

    .tbl-wrap {
        max-height: 270px;
        overflow-y: auto;
        border: 1px solid var(--line);
        border-radius: 6px
    }

    /* 状态输入 */
    .status-row {
        display: flex;
        gap: 8px;
        margin-top: 8px
    }

    .status-row input {
        flex: 1;
        min-width: 0;
        padding: 8px 10px;
        border-radius: 6px;
        font-size: 12px;
        background: var(--field-bg);
        border: 1px solid var(--field-bd);
        color: var(--txt-strong);
        font-family: var(--mono);
        outline: none;
        transition: .2s
    }

    .status-row input:focus {
        border-color: var(--accent);
        box-shadow: 0 0 0 3px var(--grid-mask)
    }

    .status-row input::placeholder {
        color: var(--txt-x)
    }

    .btn {
        padding: 8px 14px;
        border-radius: 6px;
        cursor: pointer;
        font-size: 14px;
        white-space: nowrap;
        background: linear-gradient(135deg, var(--accent), var(--accent2));
        color: #fff;
        border: none;
        transition: .2s
    }

    .btn:hover {
        filter: brightness(1.12)
    }

    .quick {
        display: flex;
        flex-wrap: wrap;
        gap: 6px;
        margin-top: 10px
    }

    .quick span {
        font-size: 10.5px;
        padding: 3px 9px;
        border-radius: 14px;
        cursor: pointer;
        background: var(--stat-bg);
        border: 1px solid var(--line);
        color: var(--txt-s);
        font-family: var(--mono)
    }

    .quick span:hover {
        border-color: var(--accent);
        color: var(--accent)
    }

    .hint {
        font-size: 12px;
        color: var(--txt-s);
        line-height: 1.8;
        margin-top: 10px;
        font-family: var(--mono)
    }

    .hint b {
        color: var(--accent)
    }

    /* ============ 右栏 ============ */
    .rightbar {
        border-left: 1px solid var(--line);
        /* padding: 12px; */
        overflow-y: auto;
        background: linear-gradient(180deg, var(--sidebar-top), var(--sidebar-bot));
        display: flex;
        flex-direction: column;
        gap: 12px;
        padding: 37px 12px;
        margin: -4vh 0;
    }

    .r-card {
        background: linear-gradient(160deg, var(--panel-top), var(--panel-bot));
        border: 1px solid var(--line);
        border-radius: 10px;
        padding: 11px 12px
    }

    .r-card h4 {
        font-size: 12px;
        color: var(--txt-strong);
        font-weight: 600;
        margin-bottom: 9px;
        display: flex;
        align-items: center;
        gap: 7px;
        letter-spacing: .5px
    }

    .r-card h4::before {
        content: '';
        width: 3px;
        height: 11px;
        border-radius: 2px;
        background: var(--accent)
    }

    .kv {
        display: flex;
        justify-content: space-between;
        align-items: center;
        gap: 4px;
        padding: 5px 0;
        font-size: 12px;
        border-bottom: 1px dashed var(--line)
    }

    .kv:last-child {
        border-bottom: none
    }

    .kv span {
        color: var(--txt-s);
        font-family: var(--mono);
        font-size: 12px
    }

    .kv b {
        color: var(--txt-strong);
        font-family: var(--mono);
        font-weight: 500;
        font-size: 14px
    }

    .kv b.ok {
        color: var(--ok)
    }

    .kv b.warn {
        color: var(--warn)
    }
    .kv .v{
        margin-left: auto;          /* 推到右边 */
    }
    @media(max-width:1360px) {
        .app {
            grid-template-columns: 170px minmax(0, 1fr) 246px
        }

        .grid-2 {
            grid-template-columns: minmax(0, 1fr)
        }
    }

    #drawer {
        height: 94vh;
        overflow: auto;
        position: absolute;
        right: 0;
        display: none;
        transition: right 0.3s;
        z-index: 9;
        box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.5);
    }

    #drawer-content {
        padding: 20px;
    }

    /* ---- 表格 ---- */
    .tbl-wrap {
        border: 1px solid var(--line);
        border-radius: 8px;
        overflow: hidden
    }

    table {
        width: 100%;
        border-collapse: collapse;
        font-size: 13.5px
    }

    thead th {
        text-align: center;
        font-weight: 500;
        color: var(--txt-s);
        font-size: 12px;
        letter-spacing: .5px;
        padding: 10px 12px;
        background: var(--thead);
        border-bottom: 1px solid var(--line-s);
        white-space: nowrap
    }

    tbody td {
        text-align: center;
        padding: 9px 12px;
        border-bottom: 1px solid var(--line);
        color: var(--txt);
        white-space: nowrap
    }

    tbody tr:last-child td {
        border-bottom: none
    }

    tbody tr {
        transition: .15s
    }

    tbody tr:hover {
        background: var(--stat-bg)
    }

    tbody tr.using {
        background: var(--ok-bg)
    }

    tbody tr.using td:first-child {
        box-shadow: inset 3px 0 0 var(--ok)
    }

    td.num {
        font-family: var(--mono);
        text-align: right;
        color: var(--txt-strong)
    }

    td.date {
        font-family: var(--mono);
        color: var(--txt-s)
    }

    td.pol {
        font-family: var(--mono);
        text-align: center;
        color: var(--txt-s)
    }

    th.num {
        text-align: right
    }

    th.pol {
        text-align: center
    }

    .tbl-wrap td:last-child,
    .tbl-wrap th:last-child {
        position: sticky;
        right: 0;
        background: var(--bg-card);
        z-index: 2;
    }

    .ops {
        display: flex;
        gap: 6px;
        justify-content: flex-end
    }

    .mini {
        padding: 4px 11px;
        border-radius: 5px;
        font-size: 12px;
        cursor: pointer;
        transition: .18s;
        background: transparent;
        border: 1px solid var(--line-s);
        color: var(--txt-s);
        font-family: var(--mono)
    }

    .mini:hover {
        border-color: var(--accent);
        color: var(--accent)
    }

    .mini.del:hover {
        border-color: var(--err);
        color: var(--err)
    }

    .mini.on {
        border-color: var(--ok);
        color: var(--ok);
        cursor: default
    }

    .badge-live {
        display: inline-block;
        margin-left: 6px;
        font-size: 10.5px;
        padding: 1px 6px;
        border-radius: 8px;
        background: var(--ok-bg);
        color: var(--ok);
        font-family: var(--mono)
    }

    .empty-tip {
        padding: 26px 0;
        text-align: center;
        color: var(--txt-x);
        font-size: 12.5px;
        font-family: var(--mono)
    }

    /* ---- 表单 ---- */
    .form-grid {
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
        gap: 13px 16px
    }

    .field {
        display: flex;
        flex-direction: column;
        gap: 12px
    }

    .field label {
        font-size: 12.5px;
        color: var(--txt-s);
        display: flex;
        align-items: center;
        gap: 6px
    }

    .field label .req {
        color: var(--err);
        font-size: 12px
    }

    .field label .u {
        margin-left: auto;
        font-family: var(--mono);
        font-size: 11px;
        color: var(--txt-x)
    }

    .inp {
        width: 100%;
        padding: 9px 11px;
        border-radius: 7px;
        font-size: 13.5px;
        font-family: var(--mono);
        background: var(--field-bg);
        border: 1px solid var(--field-bd);
        color: var(--txt-strong);
        outline: none;
        transition: .18s
    }

    .inp::placeholder {
        color: var(--txt-x);
        font-family: var(--mono);
        opacity: .75
    }

    .inp:hover {
        border-color: var(--line-s)
    }

    .inp:focus {
        border-color: var(--accent);
        box-shadow: 0 0 0 3px var(--grid-mask)
    }

    .inp.err {
        border-color: var(--err);
        box-shadow: 0 0 0 3px var(--err-bg)
    }

    select.inp {
        appearance: none;
        -webkit-appearance: none;
        cursor: pointer;
        padding-right: 30px;
        background-image: linear-gradient(45deg, transparent 50%, var(--txt-s) 50%),
            linear-gradient(135deg, var(--txt-s) 50%, transparent 50%);
        background-position: calc(100% - 15px) 52%, calc(100% - 10px) 52%;
        background-size: 5px 5px, 5px 5px;
        background-repeat: no-repeat
    }

    .field .tip {
        font-size: 11px;
        color: var(--txt-x);
        font-family: var(--mono);
        min-height: 14px
    }

    .field .tip.bad {
        color: var(--err)
    }

    .field .tip.good {
        color: var(--ok)
    }

    .form-foot {
        display: flex;
        align-items: center;
        gap: 10px;
        margin-top: 16px;
        padding-top: 14px;
        border-top: 1px dashed var(--line-s);
        flex-wrap: wrap
    }

    .btn {
        padding: 9px 22px;
        border-radius: 7px;
        cursor: pointer;
        font-size: 14px;
        white-space: nowrap;
        border: none;
        transition: .2s;
        font-weight: 500
    }

    .btn-save {
        background: linear-gradient(135deg, #10b981, #059669);
        color: #fff;
        box-shadow: 0 4px 14px rgba(16, 185, 129, .30)
    }

    html[data-theme="light"] .btn-save {
        box-shadow: 0 3px 10px rgba(5, 150, 105, .22)
    }

    .btn-save:hover {
        filter: brightness(1.1);
        transform: translateY(-1px)
    }

    .btn-ghost {
        background: transparent;
        border: 1px solid var(--line-s);
        color: var(--txt-s)
    }

    .btn-ghost:hover {
        border-color: var(--accent);
        color: var(--accent)
    }

    .foot-msg {
        font-size: 12.5px;
        color: var(--txt-s);
        font-family: var(--mono)
    }

    .foot-msg.ok {
        color: var(--ok)
    }

    .foot-msg.bad {
        color: var(--err)
    }

    .div1 {
        width: 44px;
        height: 22px;
        border-radius: 15px;
        overflow: hidden;
        position: relative;
        margin: 7px auto;
    }

    .div1 .left {
        position: absolute;
        left: 4px;
    }

    .div1 .right {
        position: absolute;
        right: 4px;
    }

    .div2 {
        width: 21px;
        height: 16px;
        border-radius: 9px;
        background: #fff;
        position: absolute;
    }

    .open1 {
        background: #ddd;
    }

    .open2 {
        top: 3px;
        left: 5px;
    }

    .close1 {
        width: 44px;
        height: 22px;
        border-radius: 15px;
        overflow: hidden;
        position: relative;
        background: #659dea;
    }

    .close2 {
        left: 13px;
        top: 3px;
    }

    /* 模式 */
    .m-lab {
        font-size: 12.5px;
        color: var(--txt-s);
        margin-bottom: 8px;
        display: flex;
        align-items: center;
        gap: 6px
    }

    .m-lab .req {
        color: var(--err)
    }

    .modes {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 10px;
        margin-bottom: 16px
    }

    .modes.modes-3 {
        grid-template-columns: repeat(3, 1fr)
    }

    .mode {
        position: relative;
        display: flex;
        align-items: center;
        gap: 9px;
        padding: 10px 13px;
        cursor: pointer;
        border: 1px solid var(--field-bd);
        border-radius: 9px;
        background: var(--field-bg);
        transition: .18s;
    }

    .mode:hover {
        border-color: var(--line-s)
    }

    .mode input {
        position: absolute;
        opacity: 0;
        pointer-events: none
    }

    .mode .radio {
        width: 16px;
        height: 16px;
        flex: none;
        border-radius: 50%;
        border: 1.5px solid var(--line-s);
        position: relative;
        transition: .18s
    }

    .mode .radio::after {
        content: '';
        position: absolute;
        inset: 3px;
        border-radius: 50%;
        background: var(--accent);
        transform: scale(0);
        transition: .18s
    }

    .mode .m-txt {
        font-size: 12px;
        color: var(--txt);
        line-height: 1.3;
        white-space: nowrap;
    }

    .mode.active {
        border-color: var(--accent);
        background: var(--stat-bg);
        box-shadow: 0 0 0 3px var(--grid-mask)
    }

    .mode.active .radio {
        border-color: var(--accent)
    }

    .mode.active .radio::after {
        transform: scale(1)
    }

    .mode.active .m-txt {
        color: var(--txt-strong);
        font-weight: 500
    }

    /* 三轴输入 */
    .att {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 11px
    }

    .att-off {
        opacity: .48;
        transition: opacity .2s
    }

    .att .field {
        display: flex;
        flex-direction: column;
        gap: 6px;
        transition: .2s
    }

    .att .field.off {
        opacity: .42
    }

    .att label {
        font-size: 12.5px;
        color: var(--txt-s);
        display: flex;
        align-items: center;
        gap: 5px
    }

    .att label .u {
        margin-left: auto;
        font-family: var(--mono);
        font-size: 11px;
        color: var(--txt-x)
    }

    #cmd_list {
        height: 128px;
        font-family: fangsong;
        list-style: none;
        border: 1px solid #ccc;
        padding: 14px;
        margin: 0;
        border-bottom: none;
    }
    #cmd_list li {
        padding: 2px 0;
    }
    .m-close {
        width: 30px;
        height: 30px;
        border-radius: 6px;
        display: flex;
        align-items: center;
        justify-content: center;
        cursor: pointer;
        color: var(--txt-s);
        border: 1px solid transparent;
        transition: .18s
    }

    .m-close svg {
        width: 26px;
        height: 26px;
        display: block;
        fill: none;
        stroke: currentColor;
        stroke-width: 1.9;
        stroke-linecap: round;
        transition: transform .22s ease
    }

    .m-close:hover {
        background: var(--err-bg);
        color: var(--err);
        border-color: var(--err)
    }

    .m-close:hover svg {
        transform: rotate(90deg)
    }

    /* 悬停转 90°，有反馈 */
    .m-close:active {
        transform: scale(.92)
    }
    /* 干干净净版：聚焦时完全无变化 */
    .inp-e:focus,
    .inp-e:focus-visible,
    .inp-e:focus-within{
    outline:none;              /* Chrome / Safari / Edge 的 focus ring */
    outline-offset:0;
    box-shadow:none;           /* 如果你之前加了柔光描边，一并去掉 */
    border-color:var(--field-bd);  /* 保持原来的边框色，别变 */
    }
    .inp-e::-moz-focus-inner{border:0;padding:0}      /* Firefox 的内边框 */
    .inp-e::-ms-clear,.inp::-ms-reveal{display:none}  /* 旧 Edge 的清除小叉 */

    .lastSnr{
        padding:12px;
        display:flex;
        flex-direction:column;
        gap:12px;
    }
    .metric{
        background:var(--bg-metric);
        border:1px solid var(--line);
        border-radius:9px;
        padding: 25px 25px;
        height: 141px;
    }
    .metric .m-lab{
        font-size:14px;
        color:var(--txt-s);
        display:flex;
        align-items:center;
        gap:6px
    }
    .metric .m-lab i{
        width:7px;
        height:7px;
        border-radius:50%;
        flex:none
    }
    .metric .m-val{
        font-family: var(--mono);
        font-size:26px;
        font-weight: 700;
        line-height: 2;
    }
    .metric .m-val small{font-size:12px;color:var(--txt-s);margin-left:3px;font-weight:400}
    .metric .m-sub{display:flex;justify-content:space-between;font-size:11px;
    font-family:var(--mono);margin-top:5px;color:var(--txt-s)}
    .metric .m-sub b{font-weight:600}
    .m-ok b{
        color:var(--ok);
    } 
    .m-warn b{
        color:#b45309
    } 
    .m-bad b{
        color:#b91c1c
    }
    .grid-1{
        display: grid;
        gap: 10px;
    }