


*{margin:0;padding:0;box-sizing:border-box}


:root{


  --bg:#f0f2f5;--card:#fff;--primary:#1677ff;--danger:#e24b4a;--success:#52c41a;--warning:#fa8c16;


  --text:#1d2129;--text2:#666;--text3:#999;--border:#e8e8e8;


  --radius:8px;--shadow:0 1px 4px rgba(0,0,0,0.06);


  /* 司空二深色主题 */


  --bg-deep:#050b14;--bg-card-deep:rgba(13,25,48,.7);--bg-card-deep-solid:#0c1729;


  --border-deep:rgba(56,189,248,.18);--text-deep:#e2e8f0;--text2-deep:#94a3b8;--text3-deep:#64748b;


  --accent-deep:#38bdf8;--accent-bright-deep:#7dd3fc;


  --shadow-deep:0 4px 16px rgba(0,0,0,.4),inset 0 1px 0 rgba(56,189,248,.06);


}


/* 暗色主题（司空二风格）：body 加 dark-mode 类触发 */


body.dark-mode{


  --bg:var(--bg-deep);--card:var(--bg-card-deep-solid);--primary:var(--accent-deep);


  --danger:#f87171;--success:#34d399;--warning:#fbbf24;


  --text:var(--text-deep);--text2:var(--text2-deep);--text3:var(--text3-deep);


  --border:var(--border-deep);--shadow:var(--shadow-deep);


  background:var(--bg-deep);


  color:var(--text-deep);


}


body{font:13px/1.6 -apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text);display:flex;min-height:100vh}


/* 暗色主题下的细节调整 */


body.dark-mode .sidebar{background:#020817;border-right:1px solid rgba(56,189,248,.15)}


body.dark-mode .topbar{background:rgba(13,25,48,.85);border-bottom:1px solid rgba(56,189,248,.15);backdrop-filter:blur(10px)}


body.dark-mode .topbar select{background:rgba(13,25,48,.6);border-color:rgba(56,189,248,.2);color:var(--text-deep)}


body.dark-mode .card{background:rgba(13,25,48,.7);border:1px solid rgba(56,189,248,.15);box-shadow:0 4px 16px rgba(0,0,0,.4),inset 0 1px 0 rgba(56,189,248,.06)}


body.dark-mode .stat-card{background:rgba(13,25,48,.7);border:1px solid rgba(56,189,248,.15)}


body.dark-mode table{color:var(--text-deep)}


body.dark-mode table th{background:rgba(56,189,248,.08);color:var(--accent-bright-deep)}


body.dark-mode table tr:hover td{background:rgba(56,189,248,.06)}


body.dark-mode table td{border-bottom-color:rgba(56,189,248,.08);color:var(--text-deep)}


body.dark-mode table{background:transparent}


body.dark-mode .login-card{background:rgba(13,25,48,.85);border:1px solid rgba(56,189,248,.2);box-shadow:0 8px 32px rgba(0,0,0,.5)}


body.dark-mode .login-card input{background:rgba(13,25,48,.6);border-color:rgba(56,189,248,.2);color:var(--text-deep)}


body.dark-mode .login-card label{color:var(--text-deep)}


body.dark-mode .party-item.party{background:linear-gradient(135deg,rgba(194,53,49,.18),rgba(13,25,48,.7))}


body.dark-mode .party-item.hr{background:linear-gradient(135deg,rgba(22,119,255,.18),rgba(13,25,48,.7))}


body.dark-mode .party-tab.active.party-tab-party{background:linear-gradient(135deg,#c23531,#e85d4e);box-shadow:0 4px 16px rgba(194,53,49,.4)}


body.dark-mode .party-tab.active.party-tab-hr{background:linear-gradient(135deg,#1677ff,#4096ff);box-shadow:0 4px 16px rgba(22,119,255,.4)}


body.dark-mode .party-modal{background:#0c1729;border:1px solid rgba(56,189,248,.2)}


body.dark-mode .party-modal-header{border-bottom-color:rgba(56,189,248,.15)}


body.dark-mode .party-modal-body th{background:rgba(56,189,248,.08);color:var(--accent-bright-deep)}


body.dark-mode .party-modal-body tr:hover td{background:rgba(56,189,248,.06)}


body.dark-mode .smart-modules-grid .smart-module-card{background:rgba(13,25,48,.7);border:1px solid rgba(56,189,248,.15)}


body.dark-mode .smart-module-card:hover{border-color:rgba(56,189,248,.5)}


body.dark-mode .smart-module-card .module-name{color:var(--text-deep)}


body.dark-mode .smart-module-card .module-desc{color:var(--text3-deep)}


body.dark-mode .smart-project-card{background:rgba(13,25,48,.7);border:1px solid rgba(56,189,248,.15)}


body.dark-mode .smart-project-card:hover{border-color:rgba(56,189,248,.5)}


body.dark-mode .smart-project-card .name{color:var(--text-deep)}


body.dark-mode .empty{color:var(--text3-deep)}


/* 暗色主题切换按钮 */


.theme-toggle{position:fixed;bottom:20px;right:20px;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#38bdf8,#7dd3fc);border:none;color:#fff;font-size:20px;cursor:pointer;box-shadow:0 4px 16px rgba(56,189,248,.4);z-index:9999;transition:all .3s;display:flex;align-items:center;justify-content:center}


.theme-toggle:hover{transform:scale(1.1) rotate(15deg)}


.theme-toggle::after{content:attr(data-label);position:absolute;right:56px;top:50%;transform:translateY(-50%);background:rgba(0,0,0,.75);color:#fff;padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s}


.theme-toggle:hover::after{opacity:1}


/* Sidebar */


.sidebar{width:200px;background:#001529;color:#ffffffb3;flex-shrink:0;display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:100}


.sidebar-logo{padding:18px 20px;font-size:15px;font-weight:600;color:#fff;border-bottom:1px solid #ffffff15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}


.sidebar-nav{flex:1;overflow-y:auto;padding:8px 0}


.sidebar-nav a{display:flex;align-items:center;gap:10px;padding:10px 20px;color:#ffffffb3;text-decoration:none;font-size:13px;transition:all .2s;border-left:3px solid transparent}


.sidebar-nav a:hover,.sidebar-nav a.active{color:#fff;background:#1677ff;border-left-color:#69b1ff}


.sidebar-nav a .icon{font-size:16px;width:20px;text-align:center}


.sidebar-footer{padding:12px 20px;border-top:1px solid #ffffff15;font-size:11px;color:#ffffff55}


/* Main */


.main{margin-left:200px;flex:1;display:flex;flex-direction:column;min-width:0}


.topbar{background:#fff;padding:0 24px;height:48px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50;gap:16px}

.topbar .project-select{display:none}


.topbar h1{font-size:16px;font-weight:600;white-space:nowrap}


.topbar .project-select{display:flex;align-items:center;gap:8px}


.topbar select{padding:5px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff;outline:none}


.topbar select:focus{border-color:var(--primary)}


.topbar .top-right{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--text3)}


.content{flex:1;padding:20px 24px;overflow-y:auto}


/* Panels */


.panel{display:none}


.panel.active{display:block}


/* Cards */


.card{background:var(--card);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);margin-bottom:16px}


.card-title{font-size:15px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:8px}


.card-title::before{content:'';display:inline-block;width:3px;height:16px;background:var(--primary);border-radius:2px}


.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-bottom:20px}


.stat-card{background:var(--card);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);text-align:center}


.stat-card .num{font-size:32px;font-weight:700;color:var(--text)}


.stat-card .num.danger{color:var(--danger)}


.stat-card .num.success{color:var(--success)}


.stat-card .num.warning{color:var(--warning)}


.stat-card .num.primary{color:var(--primary)}


.stat-card .label{font-size:12px;color:var(--text3);margin-top:4px}


/* Grid layout */


.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}


.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}


@media(max-width:900px){.grid-2,.grid-3{grid-template-columns:1fr}}


/* Chart container */


.chart-wrap{width:100%;height:300px}


.chart-wrap.tall{height:380px}


/* Tables */


table{width:100%;border-collapse:collapse;font-size:12px}


th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border)}


th{background:#fafafa;font-weight:600;color:var(--text2);position:sticky;top:0;white-space:nowrap}


tr:hover td{background:#fafafa}


/* Tags */


.tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500}


.tag-blue{background:#e6f4ff;color:#1677ff}


.tag-green{background:#f6ffed;color:#52c41a}


.tag-red{background:#fff1f0;color:#e24b4a}


.tag-orange{background:#fff7e6;color:#fa8c16}


/* Progress bar */


.pbar{width:100%;height:6px;background:#f0f0f0;border-radius:3px;margin-top:4px;overflow:hidden}


.pbar-fill{height:100%;border-radius:3px;transition:width .4s}


.pbar-fill.green{background:var(--success)}


.pbar-fill.red{background:var(--danger)}


.pbar-fill.blue{background:var(--primary)}


/* Buttons */


.btn{padding:7px 16px;border-radius:6px;font-size:12px;border:none;cursor:pointer;transition:all .2s;font-weight:500}


.btn-primary{background:var(--primary);color:#fff}


.btn-primary:hover{background:#4096ff}


.btn-danger{background:var(--danger);color:#fff}


.btn-ghost{background:transparent;color:var(--primary);border:1px solid var(--primary)}


.btn-ghost:hover{background:#e6f4ff}


.btn-sm{padding:4px 10px;font-size:11px}


/* Forms */


.form-group{margin-bottom:12px}


.form-group label{display:block;font-size:12px;color:var(--text2);margin-bottom:4px;font-weight:500}


input[type="text"],input[type="number"],input[type="date"],textarea,select{padding:7px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;width:100%;outline:none;font-family:inherit}


input:focus,textarea:focus,select:focus{border-color:var(--primary)}


/* Tabs */


.tabs{display:flex;gap:0;margin-bottom:16px;border-bottom:2px solid var(--border)}


.tab{padding:8px 20px;font-size:13px;cursor:pointer;color:var(--text2);border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s;white-space:nowrap}


.tab:hover{color:var(--primary)}


.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}


.date-bar .arrow{width:28px;height:28px;border:1px solid var(--border);border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:16px;color:var(--text2);user-select:none}


.date-bar .arrow:hover{border-color:var(--primary);color:var(--primary)}


/* Section tabs (horizontal scroll) */


.section-tabs{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;margin-bottom:16px}


.section-tab{padding:6px 16px;border-radius:20px;font-size:12px;cursor:pointer;background:#f0f0f0;color:var(--text2);white-space:nowrap;border:none;transition:all .2s}


.section-tab:hover{background:#e6f4ff;color:var(--primary)}


.section-tab.active{background:var(--primary);color:#fff}


/* Accordion */


.acc-header{padding:10px 14px;background:#fafafa;cursor:pointer;display:flex;align-items:center;gap:8px;border-radius:6px;margin-top:8px;font-weight:500;font-size:13px}


.acc-header:hover{background:#f0f0f0}


.acc-arrow{transition:transform .3s;font-size:10px}


.acc-arrow.open{transform:rotate(90deg)}


.acc-body{padding:4px 0 8px 20px;display:none}


.acc-body.open{display:block}


/* Entry table */


.entry-table{width:100%;font-size:12px}


.entry-table td,.entry-table th{padding:6px 8px}


.entry-table input{width:70px;padding:4px 6px;font-size:12px}


/* Modal */


.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.4);z-index:200;display:flex;align-items:center;justify-content:center}


.modal{background:#fff;border-radius:12px;padding:24px;max-width:600px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 8px 40px rgba(0,0,0,0.15)}


.modal h3{font-size:16px;margin-bottom:16px}


.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}


/* Login modal */


.login-overlay{position:fixed;inset:0;background:#001529d9;backdrop-filter:blur(4px);z-index:1000;display:flex;align-items:center;justify-content:center}


.login-box{background:#fff;border-radius:12px;padding:32px;width:360px;box-shadow:0 12px 48px rgba(0,0,0,0.25)}


.login-box h2{margin:0 0 8px;font-size:18px;color:var(--text)}


.login-box p{margin:0 0 20px;font-size:12px;color:var(--text3)}


.login-box .form-group{margin-bottom:16px}


.login-box input{padding:10px 12px;font-size:13px}


.login-box .btn{width:100%;padding:10px 0;font-size:14px}


.login-error{color:var(--danger);font-size:12px;margin-top:8px;min-height:18px}


.user-info{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text)}


.user-info .logout{color:var(--primary);cursor:pointer}


.user-info .logout:hover{text-decoration:underline}


/* Video module — 深色监控大屏风格 */


#panel-video{padding:0;background:#050b14;min-height:100%}


#panel-video .video-header-card{background:rgba(13,25,48,.72);border:1px solid rgba(56,189,248,.18);border-radius:12px;padding:18px 22px;color:#e2e8f0;display:flex;justify-content:space-between;align-items:center;margin:16px 16px 14px;box-shadow:0 4px 16px rgba(0,0,0,.4),inset 0 1px 0 rgba(56,189,248,.06);backdrop-filter:blur(6px)}


#panel-video .video-header-left{display:flex;align-items:center;gap:14px}


#panel-video .video-header-icon{width:46px;height:46px;border-radius:10px;background:rgba(56,189,248,.12);border:1px solid rgba(56,189,248,.22);display:flex;align-items:center;justify-content:center;color:#38bdf8}


#panel-video .video-header-date{font-size:11px;color:#94a3b8;margin-bottom:3px}


#panel-video .video-header-project{display:flex;align-items:center;gap:6px;font-size:17px;font-weight:600;color:#e2e8f0}


#panel-video .video-header-project select{background:transparent;border:none;color:#e2e8f0;font-size:17px;font-weight:600;outline:none;cursor:pointer;appearance:none;padding-right:4px;max-width:220px}


#panel-video .video-header-project option{background:#0c1729;color:#e2e8f0}


#panel-video .video-header-arrow{font-size:10px;color:#64748b}


#panel-video .video-header-stats{display:flex;align-items:center;gap:22px}


#panel-video .video-header-stat{text-align:center;min-width:52px}


#panel-video .video-header-num{font-size:30px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}


#panel-video .video-header-label{font-size:12px;color:#94a3b8;margin-top:4px}


#panel-video .video-header-online{color:#34d399}


#panel-video .video-header-offline{color:#f87171}


#panel-video .video-header-playing{color:#38bdf8}


#panel-video .video-header-stat-playing{position:relative}


#panel-video .video-header-stat-playing::before{content:'';position:absolute;left:-11px;top:50%;transform:translateY(-50%);width:1px;height:24px;background:rgba(56,189,248,.18)}


#panel-video .video-header-refresh{width:32px;height:32px;border-radius:50%;background:rgba(56,189,248,.1);border:1px solid rgba(56,189,248,.2);display:flex;align-items:center;justify-content:center;cursor:pointer;color:#38bdf8;transition:all .2s;margin-left:4px}


#panel-video .video-header-refresh:hover{background:rgba(56,189,248,.2);transform:rotate(180deg)}


#panel-video .video-tabs-row{display:flex;gap:8px;overflow-x:auto;padding:0 16px 10px;margin-bottom:0;scrollbar-width:thin;scrollbar-color:rgba(56,189,248,.3) transparent}


#panel-video .video-tabs-row::-webkit-scrollbar{height:4px}


#panel-video .video-tabs-row::-webkit-scrollbar-thumb{background:rgba(56,189,248,.3);border-radius:2px}


#panel-video .video-tab{flex:0 0 auto;padding:7px 16px;border-radius:20px;background:rgba(13,25,48,.55);border:1px solid rgba(56,189,248,.12);color:#94a3b8;font-size:13px;cursor:pointer;transition:all .2s;border:none}


#panel-video .video-tab:hover{background:rgba(56,189,248,.12);color:#7dd3fc;border-color:rgba(56,189,248,.25)}


#panel-video .video-tab.active{background:rgba(56,189,248,.18);color:#38bdf8;border-color:rgba(56,189,248,.45);font-weight:500;box-shadow:0 0 12px rgba(56,189,248,.12)}


#panel-video .video-filter-row{display:flex;gap:8px;padding:0 16px 12px;margin-bottom:0}


#panel-video .video-filter{flex:0 0 auto;padding:5px 14px;border-radius:20px;background:rgba(13,25,48,.55);border:1px solid rgba(56,189,248,.12);color:#94a3b8;font-size:12px;cursor:pointer;transition:all .2s}


#panel-video .video-filter:hover{background:rgba(56,189,248,.12);color:#7dd3fc;border-color:rgba(56,189,248,.25)}


#panel-video .video-filter.active{background:rgba(56,189,248,.18);color:#38bdf8;border-color:rgba(56,189,248,.45);font-weight:500}


#panel-video .video-player-stage{display:none;margin:0 16px 16px;background:rgba(13,25,48,.72);border:1px solid rgba(56,189,248,.22);border-radius:12px;overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,.5),inset 0 1px 0 rgba(56,189,248,.06)}


#panel-video .video-player-stage-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:rgba(6,14,30,.55);border-bottom:1px solid rgba(56,189,248,.12)}


#panel-video .video-player-stage-title{display:flex;align-items:center;gap:10px;font-size:15px;font-weight:600;color:#e2e8f0}


#panel-video .video-player-stage-dot{width:8px;height:8px;border-radius:50%;background:#64748b}


#panel-video .video-player-stage-dot.online{background:#34d399;box-shadow:0 0 8px #34d399}


#panel-video .video-player-stage-dot.offline{background:#f87171;box-shadow:0 0 8px #f87171}


#panel-video .video-player-stage-serial{font-size:12px;color:#64748b;font-weight:400}


#panel-video .video-player-stage-actions{display:flex;align-items:center;gap:8px}


#panel-video .video-player-stage-btn{width:30px;height:30px;border-radius:8px;background:rgba(56,189,248,.08);border:1px solid rgba(56,189,248,.18);color:#94a3b8;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s}


#panel-video .video-player-stage-btn:hover{background:rgba(56,189,248,.18);color:#e2e8f0;border-color:rgba(56,189,248,.35)}


#panel-video .video-player-stage-body{position:relative;background:#000;aspect-ratio:16/9;display:flex;align-items:center;justify-content:center}


#panel-video .video-player-stage-body video{width:100%;height:100%;object-fit:contain;display:none}


#panel-video .video-player-stage-empty{color:#64748b;font-size:14px}


#panel-video .video-player-stage-footer{padding:10px 16px;font-size:12px;color:#64748b;border-top:1px solid rgba(56,189,248,.12)}


#panel-video .video-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;padding:0 16px 16px}


#panel-video .video-card{background:rgba(13,25,48,.62);border:1px solid rgba(56,189,248,.12);border-radius:10px;overflow:hidden;cursor:pointer;transition:all .2s}


#panel-video .video-card:hover{transform:translateY(-2px);border-color:rgba(56,189,248,.4);box-shadow:0 6px 20px rgba(0,0,0,.35),0 0 12px rgba(56,189,248,.08)}


#panel-video .video-card.active{border-color:#38bdf8;box-shadow:0 0 0 1px #38bdf8,0 0 20px rgba(56,189,248,.2)}


#panel-video .video-card.active .video-card-screen::after{content:'正在播放';position:absolute;top:10px;right:10px;background:rgba(56,189,248,.85);color:#050b14;font-size:11px;font-weight:600;padding:3px 8px;border-radius:10px}


#panel-video .video-card-screen{position:relative;background:#0a0f1a;aspect-ratio:16/9;display:flex;align-items:center;justify-content:center}


#panel-video .video-card-screen img{width:100%;height:100%;object-fit:cover}


#panel-video .video-card-play{width:46px;height:46px;border-radius:50%;background:rgba(56,189,248,.12);border:1px solid rgba(56,189,248,.25);display:flex;align-items:center;justify-content:center;color:#38bdf8;transition:all .2s}


#panel-video .video-card:hover .video-card-play{background:rgba(56,189,248,.85);color:#050b14;transform:scale(1.05)}


#panel-video .video-card-status{position:absolute;top:10px;left:10px;display:flex;align-items:center;gap:5px;padding:3px 9px;border-radius:10px;font-size:11px;font-weight:500;color:#fff;background:rgba(0,0,0,.5);border:1px solid rgba(255,255,255,.08)}


#panel-video .video-card-status::before{content:'';width:6px;height:6px;border-radius:50%;background:#fff}


#panel-video .video-card-status.online{background:rgba(16,185,129,.18);border-color:rgba(52,211,153,.35);color:#34d399}


#panel-video .video-card-status.online::before{background:#34d399}


#panel-video .video-card-status.offline{background:rgba(239,68,68,.18);border-color:rgba(248,113,113,.35);color:#f87171}


#panel-video .video-card-status.offline::before{background:#f87171}


#panel-video .video-card-info{padding:11px 13px}


#panel-video .video-card-name{font-size:13px;font-weight:500;color:#e2e8f0;margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}


#panel-video .video-card-meta{font-size:11px;color:#64748b;display:flex;gap:10px;flex-wrap:wrap}


#panel-video .video-card-meta span{display:flex;align-items:center;gap:4px}


#panel-video .empty{color:#64748b;background:transparent;padding:40px 16px}


/* 旧弹窗兼容深色 */


#videoPlayerModal .modal{background:#0c1729;border:1px solid rgba(56,189,248,.2);color:#e2e8f0}


#videoPlayerTitle{color:#e2e8f0}


/* ===== 监控墙（v41，白色风格）===== */

#panel-monitor-wall{padding:0;background:var(--bg);height:100vh;overflow:hidden;display:none;flex-direction:column}

#panel-monitor-wall.active{display:flex !important;flex-direction:column}

#panel-monitor-wall .mw-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;background:#fff;border-bottom:1px solid var(--border);flex-wrap:wrap;flex-shrink:0}

#panel-monitor-wall .mw-toolbar-left,#panel-monitor-wall .mw-toolbar-right{display:flex;align-items:center;gap:8px;row-gap:8px;flex-wrap:wrap;align-content:flex-start}

#panel-monitor-wall .mw-label{font-size:13px;color:var(--text2);font-weight:500}

#panel-monitor-wall .mw-select{padding:6px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff;outline:none;min-width:140px;max-width:280px;width:auto;flex:0 1 auto}

#panel-monitor-wall .mw-btn{padding:6px 14px;border-radius:6px;border:1px solid var(--border);background:#fff;font-size:13px;cursor:pointer;color:var(--text);transition:all .2s}

#panel-monitor-wall .mw-btn:hover{border-color:var(--primary);color:var(--primary)}

#panel-monitor-wall .mw-btn-primary{background:var(--primary);border-color:var(--primary);color:#fff}

#panel-monitor-wall .mw-btn-primary:hover{opacity:.9;color:#fff}

#panel-monitor-wall .mw-btn-danger{color:var(--danger)}

#panel-monitor-wall .mw-btn-danger:hover{border-color:var(--danger);color:var(--danger)}

#panel-monitor-wall .mw-split-btns{display:flex;gap:4px}

#panel-monitor-wall .mw-split{width:36px;height:32px;border-radius:6px;border:1px solid var(--border);background:#fff;font-size:13px;cursor:pointer;color:var(--text);transition:all .2s}

#panel-monitor-wall .mw-split:hover{border-color:var(--primary);color:var(--primary)}

#panel-monitor-wall .mw-split.active{background:var(--primary);border-color:var(--primary);color:#fff}

#panel-monitor-wall .mw-body{display:flex;gap:16px;padding:16px;flex:1;min-height:0;overflow:hidden}

#panel-monitor-wall .mw-side{width:260px;flex-shrink:0;background:#fff;border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;overflow:hidden}

#panel-monitor-wall .mw-side-header{display:flex;flex-direction:column;gap:8px;padding:12px;border-bottom:1px solid var(--border);flex-shrink:0}

#panel-monitor-wall .mw-search{padding:7px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;outline:none;width:100%}

#panel-monitor-wall .mw-search:focus{border-color:var(--primary)}

#panel-monitor-wall .mw-cam-list{flex:1;overflow-y:auto;padding:8px}

#panel-monitor-wall .mw-cam-item{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:8px;font-size:13px;cursor:grab;transition:background .15s;border:1px solid transparent}

#panel-monitor-wall .mw-cam-item:hover{background:var(--primary-soft, #f0f5ff);border-color:#d6e4ff}

#panel-monitor-wall .mw-cam-item .mw-cam-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}

#panel-monitor-wall .mw-cam-item .mw-cam-dot.on{background:#52c41a}

#panel-monitor-wall .mw-cam-item .mw-cam-dot.off{background:#ff4d4f}

#panel-monitor-wall .mw-cam-item .mw-cam-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}

#panel-monitor-wall .mw-cam-item .mw-cam-serial{font-size:11px;color:var(--text3)}

#panel-monitor-wall .mw-grid{flex:1;display:grid;gap:2px;background:#eef1f6;border:1px solid var(--border);border-radius:10px;padding:2px;min-height:0;min-width:0;align-content:stretch;position:relative}

#panel-monitor-wall .mw-cell{position:relative;background:#0a0f1a;border:1px solid #d9d9d9;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center;min-height:0;min-width:0;transition:border-color .2s, box-shadow .2s}

#panel-monitor-wall .mw-cell.drag-over{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary)}

#panel-monitor-wall .mw-cell .mw-cell-empty{color:#7c8698;font-size:13px;pointer-events:none;padding:12px 24px;border:1.5px dashed #39435a;border-radius:10px;background:rgba(255,255,255,.03);letter-spacing:1px}

#panel-monitor-wall .mw-cell .mw-cell-label{position:absolute;left:6px;top:6px;z-index:2;background:rgba(0,0,0,.55);color:#fff;font-size:11px;padding:2px 8px;border-radius:8px;max-width:calc(100% - 40px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

#panel-monitor-wall .mw-cell .mw-cell-remove{position:absolute;right:6px;top:6px;z-index:3;width:22px;height:22px;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;border:none;font-size:14px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}

#panel-monitor-wall .mw-cell .mw-cell-remove:hover{background:#ff4d4f}

#panel-monitor-wall .mw-cell iframe{position:absolute;inset:0;width:100%;height:100%;border:none;background:#000}

#panel-monitor-wall .mw-cell.drag-over{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary)}

#panel-monitor-wall .mw-empty-tip{grid-column:1/-1;text-align:center;color:var(--text3);padding:40px;font-size:14px}

#panel-monitor-wall .topbar h1{display:none}

/* 真全屏（v55）：浏览器原生 Fullscreen API，全屏时只显示监控网格 */
/* v_aug31b: 全屏黑底满铺 —— 原先是白底 + 16px 内边距 + 浅色边框圆角，四周会出现白边 */
#panel-monitor-wall:fullscreen{background:#000}

#panel-monitor-wall:fullscreen .mw-toolbar{display:none}

#panel-monitor-wall:fullscreen .mw-side{display:none}

#panel-monitor-wall:fullscreen .mw-body{padding:0}

#panel-monitor-wall:fullscreen .mw-grid{height:100vh;width:100%;background:#000;border:none;border-radius:0;padding:0}

#panel-monitor-wall:fullscreen .mw-cell{border-color:#000;border-radius:0}

/* 侧栏折叠 + 树形分组 + 画面操作按钮（v44） */

#panel-monitor-wall .mw-side{width:260px;flex-shrink:0;background:#fff;border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;overflow:hidden;transition:width .25s;position:relative}

#panel-monitor-wall .mw-side.collapsed{width:40px}

#panel-monitor-wall .mw-side.collapsed .mw-side-header,#panel-monitor-wall .mw-side.collapsed .mw-cam-list{display:none}

#panel-monitor-wall .mw-side-toggle{position:absolute;right:0;top:8px;z-index:5;width:26px;height:26px;border-radius:6px 0 0 6px;border:1px solid var(--border);border-right:none;background:#fff;color:var(--text2);cursor:pointer;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:transform .25s}

#panel-monitor-wall .mw-side.collapsed .mw-side-toggle{right:0;border-radius:6px;border-right:1px solid var(--border);transform:rotate(180deg)}

#panel-monitor-wall .mw-side-header{display:flex;flex-direction:column;gap:8px;padding:12px 34px 12px 12px;border-bottom:1px solid var(--border);flex-shrink:0}

#panel-monitor-wall .mw-tree-group-label{display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:6px;font-size:13px;cursor:pointer;color:var(--text);font-weight:500;user-select:none}

#panel-monitor-wall .mw-tree-group-label:hover{background:#f0f5ff}

#panel-monitor-wall .mw-tree-group-label .mw-tree-arrow{width:14px;font-size:11px;color:var(--text3);transition:transform .2s}

#panel-monitor-wall .mw-tree-group-label.open .mw-tree-arrow{transform:rotate(90deg)}

#panel-monitor-wall .mw-tree-children{padding-left:14px}

#panel-monitor-wall .mw-cell-actions{position:absolute;right:6px;bottom:6px;z-index:4;display:flex;gap:4px}

#panel-monitor-wall .mw-cell-btn{width:26px;height:26px;border-radius:5px;background:rgba(0,0,0,.55);color:#fff;border:none;font-size:13px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}

#panel-monitor-wall .mw-cell-btn:hover{background:#1677ff}

#panel-monitor-wall .mw-cell.expanded{position:absolute;inset:0;z-index:20;background:#000}

#panel-monitor-wall .mw-cell.expanded .mw-cell-label{font-size:13px}

#panel-monitor-wall .mw-cell.expanded .mw-cell-btn-full{background:#1677ff}


/* ===== 视频监控浅色化（v41，大哥要求背景改白）===== */

#panel-video{background:#f5f6f8}

#panel-video .video-header-card{background:#fff;border:1px solid #e5e7eb;color:#1d2129;box-shadow:0 1px 4px rgba(0,0,0,.06)}

#panel-video .video-header-icon{background:#f0f5ff;border:1px solid #d6e4ff;color:#1677ff}

#panel-video .video-header-date{color:#8c8c8c}

#panel-video .video-header-project{color:#1d2129}

#panel-video .video-header-project select{color:#1d2129}

#panel-video .video-header-project option{background:#fff;color:#1d2129}

#panel-video .video-header-arrow{color:#8c8c8c}

#panel-video .video-header-label{color:#8c8c8c}

#panel-video .video-header-refresh{background:#f0f5ff;border:1px solid #d6e4ff;color:#1677ff}

#panel-video .video-header-refresh:hover{background:#e6f4ff}

#panel-video .video-filter{background:#fff;border:1px solid #e5e7eb;color:#595959}

#panel-video .video-filter:hover{background:#f0f5ff;color:#1677ff;border-color:#91caff}

#panel-video .video-filter.active{background:#e6f4ff;color:#1677ff;border-color:#1677ff}

#panel-video .video-player-stage{background:#fff;border:1px solid #e5e7eb;box-shadow:0 2px 8px rgba(0,0,0,.08)}

#panel-video .video-player-stage-header{background:#fafafa;border-bottom:1px solid #f0f0f0}

#panel-video .video-player-stage-title{color:#1d2129}

#panel-video .video-player-stage-serial{color:#8c8c8c}

#panel-video .video-player-stage-btn{background:#f5f5f5;border:1px solid #d9d9d9;color:#595959}

#panel-video .video-player-stage-btn:hover{background:#e6f4ff;color:#1677ff;border-color:#91caff}

#panel-video .video-player-stage-footer{color:#8c8c8c;border-top:1px solid #f0f0f0}

#panel-video .video-card{background:#fff;border:1px solid #e5e7eb}

#panel-video .video-card:hover{transform:translateY(-2px);border-color:#91caff;box-shadow:0 4px 12px rgba(0,0,0,.08)}

#panel-video .video-card.active{border-color:#1677ff;box-shadow:0 0 0 1px #1677ff}

#panel-video .video-card-name{color:#1d2129}

#panel-video .video-card-meta{color:#8c8c8c}

#panel-video .empty{color:#8c8c8c}


/* 视频管理 */


.video-manage-header{background:linear-gradient(135deg,#722ed1,#9254de);border-radius:var(--radius);padding:20px 24px;color:#fff;display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;box-shadow:var(--shadow)}


.video-manage-header-left{display:flex;align-items:center;gap:16px}


.video-manage-icon{width:48px;height:48px;border-radius:12px;background:rgba(255,255,255,0.2);display:flex;align-items:center;justify-content:center;font-size:24px}


.video-manage-subtitle{font-size:12px;opacity:0.9;margin-bottom:4px}


.video-manage-project-row{display:flex;align-items:center;gap:8px}


.video-manage-project-row{display:flex;align-items:center;gap:10px}


.video-manage-project-row select{background:#fff;border:1px solid #d9d9d9;color:#1d2129;font-size:13px;font-weight:500;outline:none;cursor:pointer;padding:6px 12px;border-radius:6px;min-width:140px;transition:border-color .15s}


.video-manage-project-row select:hover{border-color:#40a9ff}


.video-manage-project-row select:focus{border-color:#1677ff;box-shadow:0 0 0 2px rgba(22,119,255,.12)}


.video-manage-project-row select option{background:#fff;color:#1d2129}


.video-manage-project-row .vm-select-label{font-size:12px;color:rgba(255,255,255,.85);font-weight:500}


.video-manage-project-row span{font-size:12px;opacity:0.8}


.video-manage-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:16px}


.video-manage-stat{background:var(--card);border-radius:var(--radius);padding:16px;text-align:center;box-shadow:var(--shadow)}


.video-manage-stat .num{font-size:24px;font-weight:700;color:var(--text)}


.video-manage-stat .lb{font-size:12px;color:var(--text3);margin-top:4px}


.video-manage-tabs{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;margin-bottom:12px}


.video-manage-tab{flex:0 0 auto;padding:8px 16px;border-radius:20px;background:#f0f0f0;color:var(--text2);font-size:13px;cursor:pointer;border:none;transition:all .2s}


.video-manage-tab:hover{background:#e6f4ff;color:var(--primary)}


.video-manage-tab.active{background:#722ed1;color:#fff;font-weight:500}


.video-manage-tab b{margin-left:4px;font-weight:600}


.video-manage-toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;color:var(--text2);font-size:12px}


.chip:hover,.chip.active{background:#e6f4ff;color:var(--primary)}


@media(max-width:768px){


  #panel-video .video-header-card{flex-direction:column;align-items:flex-start;gap:14px;margin:12px 12px 12px}


  #panel-video .video-header-stats{gap:16px;flex-wrap:wrap}


  #panel-video .video-header-num{font-size:24px}


  #panel-video .video-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;padding:0 12px 12px}


  #panel-video .video-tabs-row,#panel-video .video-filter-row{padding-left:12px;padding-right:12px}


  #panel-video .video-player-stage{margin:0 12px 12px}


  #panel-video .video-player-stage-title{font-size:14px;flex-wrap:wrap;gap:6px}


  .video-manage-header{flex-direction:column;align-items:flex-start;gap:16px}


  .video-manage-stats{grid-template-columns:repeat(2,1fr)}


  .video-manage-project-row{flex-wrap:wrap}


}/* Loading */


.spinner{display:inline-block;width:20px;height:20px;border:2px solid #e8e8e8;border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite}


@keyframes spin{to{transform:rotate(360deg)}}


/* ===== 系统设置 ===== */


.sys-header-card {


  background: linear-gradient(135deg, #1677ff, #1890ff);


  border-radius: var(--radius);


  padding: 28px 24px 24px;


  display: flex; align-items: center; gap: 16px;


  margin-bottom: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.1);


}


.sys-avatar { width:64px;height:64px;border-radius:50%;background:rgba(255,255,255,0.2);display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:700;color:#fff;border:3px solid rgba(255,255,255,0.3); }


.sys-user-info { display:flex;flex-direction:column;gap:4px; }


.sys-greet { font-size:13px;color:rgba(255,255,255,0.8); }


.sys-user-name { font-size:22px;font-weight:700;color:#fff; }


.sys-menu-list { background:var(--card);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);border:1px solid rgba(0,0,0,0.05); }


.sys-menu-item { display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f5;cursor:pointer;transition:background .15s; }


.sys-menu-item:last-child { border-bottom:none; }


.sys-menu-item:hover,.sys-menu-item:active { background:#f5f5f7; }


.sys-menu-left { display:flex;align-items:center;gap:12px; }


.sys-menu-icon { font-size:20px; }


.sys-menu-label { font-size:14px;color:#1d2129;font-weight:500; }


.sys-menu-arrow { font-size:18px;color:#c7c7cc; }


/* 子面板通用 */


.sys-sub-panel-full { margin-top:-16px; }


.sys-sub-topbar { display:flex;align-items:center;justify-content:space-between;padding:12px 0 16px;gap:12px;flex-wrap:wrap; }


.sys-sub-title { font-size:20px;font-weight:700;color:#1d2129;flex:1; }


.sys-search-bar { margin-bottom:16px; }


.sys-search-bar input { width:100%;height:40px;padding:0 14px;background:#f5f5f5;border:none;border-radius:10px;font-size:14px;box-sizing:border-box; }


.sys-search-bar input:focus { background:#eee;outline:none; }


/* 筛选标签 */


.sys-filter-tabs { display:flex;padding:12px 0;gap:10px;flex-wrap:wrap; }


.sys-filter-tab { padding:6px 16px;background:#f5f5f7;border-radius:10px;font-size:13px;color:#4e5969;cursor:pointer;font-weight:500;user-select:none; }


.sys-filter-tab.active,.sys-filter-tab:hover { background:#1677ff;color:#fff; }


/* 用户列表 */


.sys-user-list { display:flex;flex-direction:column;gap:8px; }


.sys-user-item { display:flex;align-items:flex-start;padding:14px 16px;background:#fff;border-radius:10px;box-shadow:0 1px 4px rgba(0,0,0,0.04);cursor:pointer;transition:background .15s; }


.sys-user-item:hover { background:#f7f8fa; }


.sys-user-av { width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1677ff,#0958d9);border-radius:50%;color:#fff;font-size:15px;font-weight:600;flex-shrink:0;margin-right:14px;margin-top:2px; }


.sys-user-body { flex:1;min-width:0; }


.sys-user-line1 { display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px; }


.sys-user-name { font-size:15px;font-weight:600;color:#1d2129; }


.sys-user-username { font-size:12px;color:#86909c; }


.sys-user-job { font-size:12px;color:#4e5969;background:#f5f5f7;padding:1px 8px;border-radius:4px; }


.sys-user-line2 { display:flex;flex-wrap:wrap;gap:4px; }


.sys-user-line2 .sys-tag { display:block;margin-bottom:2px; }


.sys-user-status-badge { margin-left:10px;flex-shrink:0;align-self:center; }


.sys-tag { padding:2px 8px;border-radius:5px;font-size:11px;font-weight:500;display:inline-block; }


.sys-tag-blue { background:#e6f4ff;color:#1677ff; }


.sys-tag-green { background:#f6ffed;color:#52c41a; }


.sys-tag-gray { background:#f5f5f5;color:#86909c; }


/* 角色颜色 */


.role-SUPER_ADMIN { background:#fff1f0;color:#f5222d;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500; }


.role-SYS_ADMIN { background:#f9f0ff;color:#722ed1;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500; }


.role-OPERATOR { background:#e6f4ff;color:#1677ff;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500; }


.status-active { color:#52c41a;font-size:13px;font-weight:500; }


.status-disabled { color:#86909c;font-size:13px; }


/* 树形列表 */


.sys-tree-list { display:flex;flex-direction:column;gap:2px; }


.sys-tree-item { }


.sys-tree-row { display:flex;align-items:center;padding:12px 12px;background:#fff;border-bottom:1px solid #f5f5f5;cursor:pointer;transition:background .15s; }


.sys-tree-row:hover,.sys-tree-row.active { background:#f0f7ff; }


.sys-tree-toggle { width:28px;height:28px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-right:4px;cursor:pointer; }


.sys-tree-toggle .toggle-icon { font-size:12px;color:#1677ff;transition:transform .2s;display:inline-block; }


.sys-tree-toggle .toggle-icon.expanded { transform:rotate(90deg); }


.sys-tree-placeholder { width:28px;margin-right:4px;flex-shrink:0; }


.sys-tree-main { flex:1;min-width:0; }


.sys-tree-name { font-size:15px;font-weight:500;color:#1d2129;margin-bottom:4px;display:flex;align-items:center;gap:8px; }


.sys-tree-badge { padding:1px 6px;background:#e6f4ff;color:#1677ff;font-size:10px;border-radius:5px;font-weight:500; }


.sys-tree-child-count { font-size:12px;color:#1677ff;font-weight:500; }


.sys-tree-meta { display:flex;gap:8px;align-items:center; }


.sys-tree-meta-tag { padding:3px 10px;border-radius:20px;font-size:12px;font-weight:500; }


.sys-tree-meta-tag.active { background:#f6ffed;color:#52c41a; }


.sys-tree-meta-tag.inactive { background:#f5f5f5;color:#86909c; }


.sys-tree-system-tag { padding:3px 8px;border-radius:20px;font-size:11px;font-weight:500;background:#e6f4ff;color:#1677ff; }


.sys-tree-arrow { font-size:20px;color:#c9cdd4;flex-shrink:0;margin-left:8px; }


.sys-tree-arrow.on { color:#1677ff; }


/* 角色卡片 */


.sys-roles-header { padding:10px 0 16px; }


.sys-roles-header-title { font-size:20px;font-weight:700;color:#1d2129; }


.sys-roles-header-sub { font-size:13px;color:#86909c;margin-top:4px; }


.sys-roles-cards { display:flex;flex-direction:column;gap:12px; }


.sys-role-card { display:flex;align-items:flex-start;background:#fff;border-radius:12px;padding:20px;box-shadow:0 2px 8px rgba(0,0,0,0.04); }


.sys-role-icon-wrap { width:48px;height:48px;border-radius:14px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-right:16px;font-size:22px; }


.sys-role-icon-wrap.super-admin { background:linear-gradient(135deg,#fff3e0,#ffe0b2); }


.sys-role-icon-wrap.admin { background:linear-gradient(135deg,#e8f3ff,#bdd7ff); }


.sys-role-icon-wrap.operator { background:linear-gradient(135deg,#f3e8ff,#d4b8f0); }


.sys-role-body { flex:1;min-width:0; }


.sys-role-name { font-size:17px;font-weight:700;color:#1d2129;margin-bottom:4px; }


.sys-role-code { font-size:12px;color:#1677ff;background:#e6f4ff;display:inline-block;padding:1px 10px;border-radius:5px;margin-bottom:8px; }


.sys-role-desc { font-size:13px;color:#4e5969;line-height:1.6; }


/* ===== 弹窗 ===== */


.sys-dialog-mask {


  position:fixed;top:0;left:0;right:0;bottom:0;


  background:rgba(0,0,0,0.5);z-index:2000;


  display:flex;align-items:center;justify-content:center;


}


.sys-modal-content {


  width:560px;max-width:92vw;max-height:85vh;


  background:#fff;border-radius:16px;overflow:hidden;


  display:flex;flex-direction:column;


}


.sys-modal-sm { max-height:50vh; }


.sys-modal-lg { max-height:90vh;width:700px; }


.sys-modal-header { display:flex;justify-content:space-between;align-items:center;padding:18px 20px 14px;border-bottom:1px solid #f0f0f0; }


.sys-modal-title { font-size:17px;font-weight:600;color:#1d2129; }


.sys-modal-close { width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:22px;color:#86909c;cursor:pointer;border-radius:50%; }


.sys-modal-close:hover { background:#f5f5f5; }


.sys-modal-body { padding:20px;overflow-y:auto;flex:1; }


.sys-modal-footer { display:flex;gap:12px;padding:16px 20px 20px;border-top:1px solid #f0f0f0;background:#fff; }


.sys-detail-footer { flex-wrap:wrap; }


.sys-dialog-content { width:420px;max-width:90vw;background:#fff;border-radius:16px;overflow:hidden; }


.sys-dialog-header { display:flex;justify-content:space-between;align-items:center;padding:20px 24px 16px;border-bottom:1px solid #f0f0f5; }


.sys-dialog-title { font-size:16px;font-weight:600;color:#1d2129; }


.sys-dialog-close { font-size:20px;color:#c7c7cc;cursor:pointer;padding:4px; }


.sys-dialog-close:hover { color:#666; }


.sys-dialog-body { padding:24px; }


/* 表单行 */


.sys-form-row { display:flex;gap:16px;margin-bottom:18px; }


.sys-form-half { flex:1; }


.sys-form-full { margin-bottom:18px; }


.sys-form-label { display:block;font-size:13px;color:#4e5969;margin-bottom:6px;font-weight:500; }


.sys-req { color:#f5222d; }


.sys-form-input {


  width:100%;height:40px;padding:0 14px;


  border:1px solid #e5e6eb;border-radius:8px;


  font-size:14px;box-sizing:border-box;background:#fafafa;


  transition:border-color .2s;


}


.sys-form-input:focus { border-color:#1677ff;outline:none;background:#fff; }


.sys-click-select {


  display:flex;align-items:center;justify-content:space-between;


  width:100%;height:40px;padding:0 14px;


  background:#fafafa;border:1px solid #e5e6eb;border-radius:8px;


  box-sizing:border-box;font-size:14px;cursor:pointer;


}


.sys-click-select span:first-child { color:#86909c;flex:1; }


.sys-click-select span:first-child.has-value { color:#1d2129; }


.sys-picker-arrow { font-size:12px;color:#86909c; }


.sys-form-item { margin-bottom:20px; }


.sys-form-item:last-child { margin-bottom:0; }


.sys-form-input { width:100%;height:40px;padding:0 14px;border:1px solid #e5e6eb;border-radius:8px;font-size:14px;box-sizing:border-box;background:#fafafa;transition:border-color .2s; }


.sys-form-input:focus { border-color:#1677ff;outline:none;background:#fff; }


.btn-cancel,.btn-confirm { flex:1;height:40px;line-height:40px;text-align:center;border-radius:8px;font-size:14px;border:none;cursor:pointer; }


.btn-cancel { background:#f0f0f5;color:#3d3d3f; }


.btn-confirm { background:#1677ff;color:#fff; }


/* 开关 */


.sys-switch-row { display:flex;align-items:center;gap:10px;height:40px; }


.sys-switch { position:relative;display:inline-block;width:44px;height:24px; }


.sys-switch input { opacity:0;width:0;height:0; }


.sys-switch-slider { position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:#ccc;border-radius:24px;transition:.2s; }


.sys-switch-slider:before { content:"";position:absolute;height:18px;width:18px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:.2s; }


.sys-switch input:checked+.sys-switch-slider { background:#1677ff; }


.sys-switch input:checked+.sys-switch-slider:before { transform:translateX(20px); }


.sys-switch-text { font-size:14px;color:#1d2129;font-weight:500; }


/* 角色选择列表 */


.sys-select-list { max-height:45vh;overflow-y:auto;padding:8px 0; }


.sys-select-item { display:flex;align-items:center;padding:16px 20px;border-bottom:1px solid #f5f5f5;cursor:pointer; }


.sys-select-item:hover { background:#f7f8fa; }


.sys-select-item:last-child { border-bottom:none; }


.sys-select-check { width:28px;height:28px;border:2px solid #d9d9d9;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-right:14px;flex-shrink:0;color:#1677ff;font-size:16px;font-weight:bold; }


.sys-select-item.selected .sys-select-check { background:#1677ff;border-color:#1677ff;color:#fff; }


.sys-select-text { flex:1; }


.sys-select-name { display:block;font-size:15px;color:#1d2129;font-weight:500; }


.sys-select-desc { display:block;font-size:12px;color:#86909c;margin-top:4px; }


/* 穿梭框 */


.sys-transfer-tabs { display:flex;gap:6px;padding:12px 20px;flex-wrap:wrap;border-bottom:1px solid #f0f0f0; }


.sys-transfer-tab { padding:4px 14px;font-size:12px;color:#4e5969;background:#f7f8fa;border-radius:8px;cursor:pointer;font-weight:500;border:none; }


.sys-transfer-tab.active { background:#1677ff;color:#fff; }


.sys-transfer-container { display:flex;flex:1;min-height:0;padding:12px 16px;gap:12px;max-height:380px; }


.sys-transfer-panel { flex:1;display:flex;flex-direction:column;background:#f7f8fa;border-radius:12px;overflow:hidden; }


.sys-transfer-panel-title { padding:12px 14px;font-size:12px;color:#4e5969;background:#eee;font-weight:500;text-align:center;flex-shrink:0; }


.sys-transfer-list { flex:1;overflow-y:auto; }


.sys-transfer-item { display:flex;align-items:center;justify-content:space-between;padding:14px 14px;border-bottom:1px solid #f0f0f0;background:#fff;cursor:pointer; }


.sys-transfer-item:hover { background:#f0f7ff; }


.sys-transfer-item:last-child { border-bottom:none; }


.sys-transfer-item.selected { background:#f0f7ff; }


.sys-transfer-item-text { flex:1;min-width:0; }


.sys-transfer-item-name { font-size:13px;color:#1d2129;font-weight:500;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }


.sys-transfer-item-sub { font-size:11px;color:#86909c;display:block;margin-top:3px; }


.sys-transfer-arrow { font-size:16px;color:#1677ff;font-weight:bold;margin-left:10px;flex-shrink:0; }


.sys-transfer-remove { width:26px;height:26px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#fff;background:#f5222d;border-radius:50%;margin-left:10px;flex-shrink:0;cursor:pointer; }


.sys-transfer-empty { padding:40px 14px;text-align:center;color:#86909c;font-size:13px; }


.sys-transfer-toggle { width:24px;height:24px;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-right:4px; }


.sys-transfer-toggle .toggle-icon { font-size:10px;color:#86909c;transition:transform .2s;display:inline-block; }


.sys-transfer-toggle .toggle-icon.expanded { transform:rotate(90deg); }


.sys-transfer-placeholder { width:28px;flex-shrink:0; }


/* 用户详情 */


.sys-detail-row { display:flex;align-items:flex-start;margin-bottom:16px; }


.sys-detail-label { width:90px;font-size:14px;color:#86909c;flex-shrink:0; }


.sys-detail-value { flex:1;font-size:14px;color:#1d2129; }


.sys-detail-tags { display:flex;flex-wrap:wrap;gap:4px;flex:1; }


.sys-detail-projects { display:flex;flex-wrap:wrap;gap:6px;flex:1; }


.sys-project-tag { padding:4px 12px;background:#e6f4ff;color:#1677ff;border-radius:20px;font-size:12px;font-weight:500; }


/* 通用按钮 */


.btn-primary { background:#1677ff;color:#fff;border:none; }


.sys-btn-edit { background:#1677ff;color:#fff;border:none;flex:1;height:38px;line-height:38px;border-radius:20px;font-size:13px; }


.sys-btn-toggle { background:#fff;color:#f5222d;border:1px solid #f5222d;flex:1;height:38px;line-height:38px;border-radius:20px;font-size:13px; }


.sys-btn-toggle.active { background:#52c41a;color:#fff;border-color:#52c41a; }


.sys-btn-pwd { background:#fa8c16;color:#fff;border:none;flex:1;height:38px;line-height:38px;border-radius:20px;font-size:13px; }


.sys-btn-delete { background:#fff;color:#f5222d;border:1px solid #ffccc7;flex:1;height:38px;line-height:38px;border-radius:20px;font-size:13px; }


.sys-btn-add-sub { flex:1;height:38px;line-height:38px;border-radius:20px;font-size:13px; }


.sys-btn-member { padding:6px 16px;background:#1677ff;color:#fff;border-radius:20px;font-size:12px;border:none;cursor:pointer; }


.sys-btn-member.active { background:#52c41a; }


/* 详情子项目 */


.sys-subproject-list { margin-top:12px; }


.sys-subproject-item { display:flex;justify-content:space-between;align-items:center;padding:14px 14px;margin-bottom:8px;background:#f7f8fa;border-radius:8px;border-left:4px solid #1677ff;cursor:pointer; }


.sys-subproject-item:hover { background:#eef2f7; }


.sys-subproject-name { font-size:14px;color:#4e5969;flex:1;font-weight:500; }


.sys-subproject-meta { display:flex;align-items:center;gap:12px;font-size:12px;color:#86909c; }


.sys-detail-section { margin-top:18px;border-top:1px solid #f0f0f0;padding-top:16px; }


.sys-section-header { display:flex;justify-content:space-between;align-items:center;margin-bottom:12px; }


.sys-section-title { font-size:15px;font-weight:600;color:#1d2129; }


/* 成员列表 */


.sys-member-list { max-height:200px;overflow-y:auto; }


.sys-member-item { display:flex;align-items:center;padding:14px 12px;background:#f7f8fa;border-radius:8px;margin-bottom:8px; }


.sys-member-info { flex:1; }


.sys-member-name { font-size:14px;color:#1d2129;font-weight:500; }


.sys-member-role { font-size:12px;color:#1677ff; }


.sys-member-empty { text-align:center;color:#86909c;font-size:14px;padding:30px 0; }


/* 成员穿梭框 */


.sys-member-transfer { display:flex;gap:10px;margin-top:10px; }


.sys-member-transfer .sys-transfer-panel { max-height:220px; }


.sys-transfer-row { display:flex;align-items:center;justify-content:space-between;padding:14px 14px;border-bottom:1px solid #f0f0f0;background:#fff;cursor:pointer; }


.sys-transfer-row:last-child { border-bottom:none; }


.sys-transfer-row:hover { background:#f0f7ff; }


.sys-transfer-row-selected { background:#f0f7ff; }


.sys-transfer-info { flex:1;min-width:0; }


.sys-transfer-name { font-size:14px;color:#1d2129;font-weight:500;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }


.sys-transfer-role { font-size:12px;color:#86909c;display:block;margin-top:3px; }


.sys-transfer-add-icon { width:26px;height:26px;display:flex;align-items:center;justify-content:center;background:#1677ff;color:#fff;border-radius:50%;font-size:16px;font-weight:bold;flex-shrink:0;margin-left:10px; }


.sys-transfer-list { flex:1;overflow-y:auto; }


/* Empty */


.empty{padding:60px 0;text-align:center;color:var(--text3);font-size:14px}


/* Scrollbar */


::-webkit-scrollbar{width:5px;height:5px}


::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}


/* Color bars in overview */


.ov-rate{display:flex;align-items:center;gap:6px;min-width:100px}


/* ===== 智慧工地 ===== */


.smart-site-header{padding:20px 24px}


.smart-site-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}


.smart-site-subtitle{font-size:13px;color:var(--text3);margin-top:4px}


.smart-modules-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}


@media(max-width:1100px){.smart-modules-grid{grid-template-columns:repeat(2,1fr)}}


@media(max-width:700px){.smart-modules-grid{grid-template-columns:1fr}}


/* ===== 党建人事 Tab + 卡片 ===== */


.party-tabs{display:flex;gap:12px;margin-bottom:20px;background:var(--card);padding:8px;border-radius:var(--radius);box-shadow:var(--shadow)}


.party-tab{flex:1;padding:14px 20px;text-align:center;cursor:pointer;border-radius:8px;font-size:14px;font-weight:500;color:var(--text2);transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px}


.party-tab:hover{background:rgba(22,119,255,0.04)}


.party-tab.active.party-tab-party{background:linear-gradient(135deg,#c23531,#e85d4e);color:#fff;box-shadow:0 2px 8px rgba(194,53,49,0.3)}


.party-tab.active.party-tab-hr{background:linear-gradient(135deg,#1677ff,#4096ff);color:#fff;box-shadow:0 2px 8px rgba(22,119,255,0.3)}


.party-tab-icon{font-size:18px}


.party-tab-content{display:none}


.party-tab-content.active{display:block}


@media(max-width:1100px){}


@media(max-width:700px){}


/* 党建/人事子卡片（基于 smart-module-card 风格） */


.party-item{background:var(--card);border-radius:var(--radius);padding:18px 16px;box-shadow:var(--shadow);cursor:pointer;transition:all .2s;border:1px solid transparent;position:relative;display:flex;align-items:center;gap:14px}


.party-item:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.1);border-color:#1677ff30}


.party-item.party{background:linear-gradient(135deg,#fff5f5,#fff);border-color:rgba(194,53,49,0.12)}


.party-item.party:hover{border-color:rgba(194,53,49,0.35)}


.party-item.hr{background:linear-gradient(135deg,#f0f7ff,#fff);border-color:rgba(22,119,255,0.12)}


.party-item.hr:hover{border-color:rgba(22,119,255,0.35)}


.party-item-icon{width:46px;height:46px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0}


.party-item.party .party-item-icon{background:rgba(194,53,49,0.1)}


.party-item.hr .party-item-icon{background:rgba(22,119,255,0.1)}


.party-item-info{flex:1;min-width:0}


.party-item-name{font-size:14px;font-weight:600;color:var(--text);margin-bottom:4px}


.party-item-desc{font-size:11px;color:var(--text3);line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}


.party-item-count{position:absolute;top:8px;right:10px;font-size:11px;padding:2px 8px;border-radius:10px;background:#fff;color:var(--text3)}


.party-item.party .party-item-count{color:#c23531;background:rgba(194,53,49,0.08)}


.party-item.hr .party-item-count{color:#1677ff;background:rgba(22,119,255,0.08)}


/* 数据列表弹层 */


.party-modal-mask{position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:998}


.party-modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:900px;max-width:95vw;max-height:85vh;background:var(--card);border-radius:var(--radius);box-shadow:0 8px 32px rgba(0,0,0,0.2);z-index:999;display:flex;flex-direction:column}


.party-modal-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}


.party-modal-title{font-size:16px;font-weight:600}


.party-modal-close{background:none;border:none;font-size:24px;color:var(--text3);cursor:pointer;line-height:1;padding:0 6px}


.party-modal-close:hover{color:var(--text)}


.party-modal-body{padding:16px 20px;overflow:auto;flex:1}


.party-modal-body table{width:100%;border-collapse:collapse}


.party-modal-body th{background:#f5f5f7;padding:10px;text-align:left;font-size:12px;color:var(--text2);font-weight:600;border-bottom:1px solid var(--border);position:sticky;top:0}


.party-modal-body td{padding:10px;font-size:13px;border-bottom:1px solid var(--border);color:var(--text)}


.party-modal-body tr:hover td{background:#fafbfc}


/* 党建人事分组标题 */


.section-title{font-size:14px;font-weight:600;color:var(--text);margin:16px 0 12px;padding-left:10px;border-left:3px solid #c23531}


.party-tab-content .section-title:first-child{margin-top:0}


/* v23: 党建人事项目筛选条 */


.party-filter-bar{display:flex;gap:10px;align-items:center;background:#f5f7fa;border-radius:8px;padding:10px 14px;margin:0 0 16px;flex-wrap:wrap}


.party-filter-bar label{font-size:13px;color:var(--text2);font-weight:500}


.party-filter-bar select,.party-filter-bar input{height:32px;padding:4px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff;color:var(--text);outline:none;min-width:140px}


.party-filter-bar select:focus,.party-filter-bar input:focus{border-color:#1677ff}


.party-filter-bar .filter-tip{font-size:12px;color:var(--text3);margin-left:auto}


.party-filter-bar .filter-tip b{color:#1677ff;font-weight:600}


/* v23: 列表工具栏 */


.party-list-toolbar{display:flex;gap:10px;align-items:center;padding:0 0 12px;border-bottom:1px solid var(--border);margin-bottom:12px;flex-wrap:wrap}


.party-list-toolbar .toolbar-info{font-size:13px;color:var(--text2)}


.party-list-toolbar .toolbar-info b{color:#1677ff;font-weight:600}


.party-list-toolbar .toolbar-actions{margin-left:auto;display:flex;gap:8px}


.pe-btn{display:inline-flex;align-items:center;gap:4px;height:30px;padding:0 14px;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--text);font-size:13px;cursor:pointer;transition:all .15s}


.pe-btn:hover{border-color:#1677ff;color:#1677ff}


.pe-btn.primary{background:#1677ff;color:#fff;border-color:#1677ff}


.pe-btn.primary:hover{background:#4096ff;border-color:#4096ff}


.pe-btn.danger:hover{border-color:#ff4d4f;color:#ff4d4f}


.pe-list-empty{padding:60px 20px;text-align:center;color:var(--text3);font-size:13px}


/* v23: 录入表单 */


.pe-form{display:grid;grid-template-columns:1fr 1fr;gap:12px 18px}


.pe-form .pe-field{display:flex;flex-direction:column;gap:4px}


.pe-form .pe-field.full{grid-column:1 / -1}


.pe-form label{font-size:12px;color:var(--text2);font-weight:500}


.pe-form label .req{color:#ff4d4f;margin-left:2px}


.pe-form input,.pe-form select,.pe-form textarea{height:32px;padding:4px 10px;border:1px solid var(--border);border-radius:6px;font-size:13px;background:#fff;color:var(--text);outline:none;font-family:inherit}


.pe-form textarea{height:70px;padding:8px 10px;resize:vertical;line-height:1.5}


.pe-form input:focus,.pe-form select:focus,.pe-form textarea:focus{border-color:#1677ff}


.pe-form .pe-actions{grid-column:1 / -1;display:flex;gap:10px;justify-content:flex-end;margin-top:6px;padding-top:12px;border-top:1px solid var(--border)}


@media(max-width:700px){.pe-form{grid-template-columns:1fr}}


/* v23: 操作列 */


.pe-row-actions{display:flex;gap:6px;justify-content:center}


.pe-row-actions a{color:#1677ff;font-size:12px;cursor:pointer;text-decoration:none}


.pe-row-actions a.del{color:#ff4d4f}


.pe-row-actions a:hover{text-decoration:underline}


.smart-module-card{background:var(--card);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow);cursor:pointer;transition:all .2s;border:1px solid transparent;position:relative}


.smart-module-card:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.1);border-color:#1677ff30}


.smart-module-card .module-icon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}


.smart-module-card .module-icon.blue{background:#e6f4ff}


.smart-module-card .module-icon.green{background:#f6ffed}


.smart-module-card .module-icon.orange{background:#fff7e6}


.smart-module-card .module-icon.red{background:#fff1f0}


.smart-module-card .module-icon.purple{background:#f0f0ff}


.smart-module-card .module-name{font-size:15px;font-weight:600;color:var(--text);margin-bottom:8px}


.smart-module-card .module-desc{font-size:12px;color:var(--text3);margin-bottom:14px;line-height:1.5}


.smart-module-card .module-stats{display:flex;gap:16px}


.smart-module-card .module-stat{flex:1}


.smart-module-card .module-stat-num{font-size:22px;font-weight:700;color:var(--text)}


.smart-module-card .module-stat-num.primary{color:var(--primary)}


.smart-module-card .module-stat-num.success{color:var(--success)}


.smart-module-card .module-stat-num.warning{color:var(--warning)}


.smart-module-card .module-stat-num.danger{color:var(--danger)}


.smart-module-card .module-stat-label{font-size:11px;color:var(--text3);margin-top:2px}


.smart-module-card + .module-arrow{position:absolute;right:18px;bottom:18px;color:var(--text3);font-size:20px;pointer-events:none}


.smart-module-detail{display:block}


.smart-detail-header{display:flex;align-items:center;gap:12px;margin-bottom:16px;background:var(--card);padding:16px 20px;border-radius:var(--radius);box-shadow:var(--shadow)}


.smart-project-tabs{display:flex;gap:0;border-bottom:1px solid var(--border);background:var(--card);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scroll-behavior:smooth;scrollbar-width:thin;cursor:grab;user-select:none}
.smart-project-tabs.is-dragging{cursor:grabbing;scroll-behavior:auto}
.smart-project-tabs::-webkit-scrollbar{height:4px}
.smart-project-tabs::-webkit-scrollbar-thumb{background:rgba(0,0,0,.15);border-radius:2px}


.smart-project-tab{flex:0 0 auto;min-width:120px;padding:14px 16px;text-align:center;cursor:pointer;font-size:14px;font-weight:500;color:var(--text2);border-bottom:2px solid transparent;transition:all .15s;background:none;border-left:none;border-right:none;border-top:none;white-space:nowrap}


.smart-project-tab:hover{color:var(--primary);background:#f5f7ff}


.smart-project-tab.active{color:var(--primary);border-bottom-color:var(--primary);background:#f0f5ff;font-weight:600}


.smart-detail-empty{padding:60px 20px;text-align:center;color:var(--text3)}


.smart-detail-empty .empty-icon{font-size:56px;margin-bottom:16px}


.smart-detail-empty .empty-title{font-size:16px;font-weight:600;color:var(--text);margin-bottom:8px}


.smart-detail-empty .empty-desc{font-size:13px;color:var(--text3)}


/* 智慧工地项目卡片 */


.smart-project-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px;margin-bottom:24px}


@media(max-width:1100px){.smart-project-grid{grid-template-columns:repeat(2,1fr)}}


@media(max-width:700px){.smart-project-grid{grid-template-columns:1fr}}


.smart-project-card{background:var(--card);border-radius:var(--radius);padding:22px 24px;box-shadow:var(--shadow);cursor:pointer;transition:all .2s;border:1px solid transparent;position:relative;display:flex;align-items:flex-start;gap:18px;min-height:140px}


.smart-project-card:hover{transform:translateY(-3px);box-shadow:0 6px 18px rgba(0,0,0,0.12);border-color:#1677ff40}


.smart-project-card .project-icon{width:56px;height:56px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:28px;background:linear-gradient(135deg,#00d4ff,#0080ff);color:#fff;flex-shrink:0;box-shadow:0 4px 10px rgba(0,132,255,0.3)}


.smart-project-card .project-info{flex:1;min-width:0}


.smart-project-card .project-name{font-size:18px;font-weight:700;color:var(--text);margin-bottom:6px;display:flex;align-items:center;gap:10px}


.smart-project-card .project-status{display:inline-block;padding:2px 8px;border-radius:4px;background:#fff7e6;color:#fa8c16;font-size:11px;font-weight:600;border:1px solid #ffd591}


.smart-project-card .project-desc{font-size:13px;color:var(--text2);margin-bottom:8px;font-weight:500}


.smart-project-card .project-intro{font-size:12px;color:var(--text3);line-height:1.6;margin-bottom:10px}


.smart-project-card .project-meta{display:flex;flex-wrap:wrap;gap:8px 14px}


.smart-project-card .project-meta-item{font-size:11px;color:var(--text3);display:inline-flex;align-items:center;gap:3px;background:#f5f7fa;padding:3px 8px;border-radius:4px}


.smart-project-card .project-arrow{position:absolute;right:20px;top:24px;color:var(--text3);font-size:20px}


