@charset "UTF-8";.tab-bar{background:#ffffff;border-bottom:1px solid #e5e7eb;padding:0 16px;box-shadow:0 1px 2px #0000000d}.tab-bar .ant-tabs,.tab-bar .ant-tabs .ant-tabs-nav{margin:0}.tab-bar .ant-tabs .ant-tabs-nav:before{display:none}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab{background:transparent;border:none;border-radius:6px 6px 0 0;margin:0 2px;padding:8px 12px;transition:background-color .2s ease,color .2s ease;position:relative}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab:hover{background:#f3f4f6;color:#1f2937}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab.ant-tabs-tab-active{background:#eff6ff;color:#1e40af;border-bottom:2px solid #3b82f6}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab.ant-tabs-tab-active .tab-label .tab-title{color:#1e40af;font-weight:600}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .ant-tabs-tab-remove{display:none}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label{display:flex;align-items:center;gap:8px;font-size:13px}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label .tab-title{color:#6b7280;font-weight:500;white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label .tab-close{color:#9ca3af;font-size:10px;padding:2px;border-radius:2px;transition:background-color .2s ease,color .2s ease;opacity:0}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label .tab-close:hover{background:#f87171;color:#fff}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab:hover .tab-label .tab-close{opacity:1}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-operations .tab-more{padding:8px;border-radius:4px;color:#6b7280;cursor:pointer;transition:all .2s ease}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-operations .tab-more:hover{background:#f3f4f6;color:#1f2937}.tab-bar .ant-tabs .ant-tabs-content-holder{display:none}@media (max-width: 768px){.tab-bar{padding:0 8px}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab{padding:6px 8px}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label .tab-title{max-width:80px;font-size:12px}}@media (prefers-color-scheme: dark){.tab-bar{background:#ffffff;border-bottom-color:#e5e7eb}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab:hover{background:#f3f4f6;color:#1f2937}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab.ant-tabs-tab-active{background:#eff6ff;color:#1e40af}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab.ant-tabs-tab-active .tab-label .tab-title{color:#1e40af}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label .tab-title{color:#6b7280}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label .tab-close{color:#9ca3af}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-wrap .ant-tabs-nav-list .ant-tabs-tab .tab-label .tab-close:hover{background:#f87171;color:#fff}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-operations .tab-more{color:#6b7280}.tab-bar .ant-tabs .ant-tabs-nav .ant-tabs-nav-operations .tab-more:hover{background:#f3f4f6;color:#1f2937}}.layout{min-height:100vh;background:#f5f6fa}.layout .layout-sider{background:rgb(51,65,84)!important;box-shadow:2px 0 8px #0000001a;border-right:1px solid rgba(255,255,255,.1);position:relative;z-index:100}.layout .layout-sider .logo{height:64px;display:flex;align-items:center;justify-content:center;background:rgb(51,65,84)}.layout .layout-sider .logo h2{color:#fff;margin:0;font-weight:600;font-size:18px;letter-spacing:.5px}.layout .layout-sider .ant-menu{background:transparent!important;border:none!important;padding:8px 0}.layout .layout-sider .ant-menu .ant-menu-item{margin:4px 0;border-radius:0;height:50px;line-height:50px;border:none;width:100%;padding:0 24px}.layout .layout-sider .ant-menu .ant-menu-item:hover{background:rgba(24,144,255,.1)!important}.layout .layout-sider .ant-menu .ant-menu-item.ant-menu-item-selected{background:transparent!important;color:#fff!important}.layout .layout-sider .ant-menu .ant-menu-item.ant-menu-item-selected:after{display:none}.layout .layout-sider .ant-menu .ant-menu-item.ant-menu-item-selected .ant-menu-title-content{color:#1890ff!important;font-weight:400}.layout .layout-sider .ant-menu .ant-menu-item.ant-menu-item-selected .anticon{color:#1890ff!important}.layout .layout-sider .ant-menu .ant-menu-item .ant-menu-title-content{color:#ffffffbf;font-weight:400;font-size:14px}.layout .layout-sider .ant-menu .ant-menu-item .anticon{color:#ffffffa6;font-size:16px}.layout .layout-sider .ant-menu .ant-menu-submenu{margin:4px 0;border-radius:0;width:100%}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title{height:50px;line-height:50px;border-radius:0;margin:0;padding:0 24px}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover{background:rgba(24,144,255,.1)!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover .ant-menu-title-content{color:#fff!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover .anticon{color:#ffffffa6!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover .ant-menu-submenu-arrow{color:#ffffff73!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before,.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after{background:rgba(255,255,255,.45)!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title .ant-menu-title-content{color:#ffffffbf;font-weight:400;font-size:14px}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title .anticon{color:#ffffffa6;font-size:16px}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title .ant-menu-submenu-arrow{color:#ffffff73}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title .ant-menu-submenu-arrow:after{background:rgba(255,255,255,.45)}.layout .layout-sider .ant-menu .ant-menu-submenu.ant-menu-submenu-open .ant-menu-submenu-title{background:transparent!important;color:#fff!important}.layout .layout-sider .ant-menu .ant-menu-submenu.ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-title-content{color:#ffffffbf!important;font-weight:400}.layout .layout-sider .ant-menu .ant-menu-submenu.ant-menu-submenu-open .ant-menu-submenu-title .anticon{color:#ffffffa6!important}.layout .layout-sider .ant-menu .ant-menu-submenu.ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-submenu-arrow{color:#ffffff73}.layout .layout-sider .ant-menu .ant-menu-submenu.ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.layout .layout-sider .ant-menu .ant-menu-submenu.ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-submenu-arrow:after{background:rgba(255,255,255,.45)}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-sub{background:#222d3c!important;box-shadow:none!important;border-radius:0;margin:0;padding:0!important;overflow:hidden}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-sub.ant-menu-inline{border:none!important;padding:0!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-sub .ant-menu-item{margin:0!important;width:100%;height:50px;line-height:50px;padding:0 48px;border-radius:0;display:flex;align-items:center}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-sub .ant-menu-item:hover{background:rgba(24,144,255,.15)!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-sub .ant-menu-item.ant-menu-item-selected{background:transparent!important;color:#fff!important}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-sub .ant-menu-item.ant-menu-item-selected .ant-menu-title-content{color:#1890ff!important;font-weight:400}.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-sub .ant-menu-item .ant-menu-title-content{color:#ffffffa6;font-size:13px;font-weight:400;margin-left:10px;line-height:1}.layout .layout-header{padding:0 24px;background:#ffffff!important;border-bottom:1px solid #e5e7eb;box-shadow:0 1px 3px #0000001a;display:flex;align-items:center;justify-content:space-between;position:relative;z-index:99}.layout .layout-header .header-left .trigger{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:all .2s ease;border:none;background:transparent;color:#6b7280}.layout .layout-header .header-left .trigger:hover{background:#f3f4f6;color:#1f2937}.layout .layout-header .header-left .trigger .anticon{font-size:16px}.layout .layout-header .header-right .user-info{display:flex;align-items:center;gap:12px;padding:8px 16px;border-radius:8px;transition:all .2s ease;cursor:pointer;border:none;background:transparent}.layout .layout-header .header-right .user-info:hover{background:#f9fafb}.layout .layout-header .header-right .user-info .ant-avatar{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);border:2px solid #ffffff;box-shadow:0 2px 8px #3b82f633}.layout .layout-header .header-right .user-info .username{font-weight:500;color:#1f2937;font-size:14px}.layout .layout-content{margin:16px;padding:24px;background:#ffffff;border-radius:8px;box-shadow:0 1px 3px #0000001a;border:1px solid #e5e7eb;min-height:calc(100vh - 152px)}@media (max-width: 768px){.layout .layout-header{padding:0 16px}.layout .layout-header .header-right .user-info .username{display:none}.layout .layout-content{margin:12px;padding:16px;min-height:calc(100vh - 140px)}}@media (prefers-color-scheme: dark){.layout{background:#f5f6fa}.layout .layout-sider{background:rgb(51,65,84)!important;border-right-color:#ffffff1a}.layout .layout-sider .logo{background:rgb(51,65,84)}.layout .layout-sider .logo h2{color:#fff}.layout .layout-sider .ant-menu .ant-menu-item:hover,.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover{background:rgba(24,144,255,.1)!important}.layout .layout-sider .ant-menu .ant-menu-item .ant-menu-title-content,.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title .ant-menu-title-content{color:#ffffffbf}.layout .layout-sider .ant-menu .ant-menu-item .anticon,.layout .layout-sider .ant-menu .ant-menu-submenu .ant-menu-submenu-title .anticon{color:#ffffffa6}.layout .layout-sider .ant-menu .ant-menu-item-selected{background:transparent!important;color:#fff!important}.layout .layout-sider .ant-menu .ant-menu-item-selected .ant-menu-title-content,.layout .layout-sider .ant-menu .ant-menu-item-selected .anticon{color:#1890ff!important}.layout .layout-sider .ant-menu .ant-menu-submenu-open .ant-menu-submenu-title{background:transparent!important;color:#fff!important}.layout .layout-sider .ant-menu .ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-title-content{color:#ffffffbf!important;font-weight:400}.layout .layout-sider .ant-menu .ant-menu-submenu-open .ant-menu-submenu-title .anticon{color:#ffffffa6!important}.layout .layout-sider .ant-menu .ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-submenu-arrow{color:#ffffff73}.layout .layout-sider .ant-menu .ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.layout .layout-sider .ant-menu .ant-menu-submenu-open .ant-menu-submenu-title .ant-menu-submenu-arrow:after{background:rgba(255,255,255,.45)}.layout .layout-sider .ant-menu .ant-menu-sub{background:rgba(41,55,74,.8)!important}.layout .layout-sider .ant-menu .ant-menu-sub .ant-menu-item:hover{background:rgba(24,144,255,.15)!important}.layout .layout-sider .ant-menu .ant-menu-sub .ant-menu-item.ant-menu-item-selected{background:transparent!important;color:#fff!important}.layout .layout-sider .ant-menu .ant-menu-sub .ant-menu-item.ant-menu-item-selected .ant-menu-title-content{color:#1890ff!important}.layout .layout-sider .ant-menu .ant-menu-sub .ant-menu-item .ant-menu-title-content{color:#ffffffa6}.layout .layout-header{background:#ffffff!important;border-bottom-color:#e5e7eb}.layout .layout-header .header-left .trigger{color:#6b7280}.layout .layout-header .header-left .trigger:hover{background:#f3f4f6;color:#1f2937}.layout .layout-header .header-right .user-info:hover{background:#f9fafb}.layout .layout-header .header-right .user-info .username{color:#1f2937}.layout .layout-content{background:#ffffff;border-color:#e5e7eb}}.campaign-list{background:#ffffff;min-height:calc(100vh - 64px)}.campaign-list .campaign-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding:0}.campaign-list .campaign-list-header .ant-typography{margin:0}.campaign-list .campaign-list-header .ant-typography h4{margin:0;color:#1f2937;font-weight:600;font-size:18px;line-height:1.2}.campaign-list .campaign-list-header .ant-btn{border-radius:8px;font-weight:500;box-shadow:0 2px 4px #3b82f633;transition:all .3s cubic-bezier(.4,0,.2,1)}.campaign-list .campaign-list-header .ant-btn:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.campaign-list .campaign-list-header h4{margin:0;color:#1f2937}.campaign-list .campaign-list-card{border-radius:12px;border:1px solid #e1e8ed;box-shadow:0 2px 8px #0000000f;overflow:hidden}.campaign-list .campaign-list-card .ant-card-body{padding:24px}.campaign-list .campaign-list-card .search-filter-area{margin-bottom:24px;padding:16px;background:#fafafa;border-radius:6px;border:1px solid #e5e7eb}.campaign-list .campaign-list-card .search-filter-area .ant-form-item{margin-bottom:12px}.campaign-list .campaign-list-card .ant-table .ant-table-thead>tr>th{background:#f8fafc;font-weight:600;color:#374151}.campaign-list .campaign-list-card .ant-table .ant-table-thead>tr>th.ant-table-cell-fix-right{background:#f8fafc;padding:12px 20px!important}.campaign-list .campaign-list-card .ant-table .ant-table-tbody>tr>td.ant-table-cell-fix-right{background:#ffffff;padding:12px 20px!important}.campaign-list .campaign-list-card .ant-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-right{background:#f8fafc}.campaign-list .campaign-list-card .ant-table .ant-table-tbody>tr:hover>td{background:#f0f9ff}.campaign-list .campaign-list-card .ant-table .status-tag{font-size:12px;padding:2px 8px;border-radius:4px}.campaign-list .campaign-list-card .ant-table .firmware-count{color:#6b7280;font-size:12px}.campaign-list .selected-firmware-list{margin-top:16px}.campaign-list .selected-firmware-list .selected-item{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#f0f9ff;border:1px solid #bae6fd;border-radius:4px;margin-bottom:8px;gap:20px}.campaign-list .selected-firmware-list .selected-item .firmware-display-name{font-weight:500;color:#0369a1;font-size:14px;flex:1}.campaign-list .selected-firmware-list .selected-item .remove-btn{color:#dc2626;cursor:pointer;padding:8px;flex-shrink:0;border-radius:4px}.campaign-list .selected-firmware-list .selected-item .remove-btn:hover{background:#fef2f2}.campaign-list .firmware-selection{max-height:300px;overflow-y:auto;border:1px solid #d1d5db;border-radius:6px;padding:12px}.campaign-list .firmware-selection .firmware-item{display:flex;align-items:center;padding:8px;border-bottom:1px solid #f3f4f6;cursor:pointer;transition:background-color .2s}.campaign-list .firmware-selection .firmware-item:hover{background:#f9fafb}.campaign-list .firmware-selection .firmware-item:last-child{border-bottom:none}.campaign-list .firmware-selection .firmware-item .firmware-name{font-weight:500;color:#1f2937;font-size:14px}@media (max-width: 768px){.campaign-list{padding:16px}.campaign-list .campaign-list-header{flex-direction:column;gap:16px;align-items:flex-start}.campaign-list .campaign-list-header h4{font-size:16px}.campaign-list .campaign-list-card .ant-card-body{padding:16px}.campaign-list .campaign-list-card .ant-card-body .ant-table .ant-table-thead>tr>th,.campaign-list .campaign-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:12px 8px}.campaign-list .selected-firmware-list .selected-item{flex-direction:column;align-items:flex-start;gap:8px}}@media (prefers-color-scheme: dark){.campaign-list{background:#ffffff}.campaign-list .campaign-list-header h4{color:#1f2937}.campaign-list .campaign-list-card{background:#ffffff;border-color:#e1e8ed}.campaign-list .campaign-list-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;color:#374151;border-bottom-color:#e1e8ed}.campaign-list .campaign-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff}.campaign-list .campaign-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{border-bottom-color:#f1f5f9}}.campaign-management-wrapper{background:#ffffff;min-height:100vh}.campaign-management-wrapper .campaign-list .campaign-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.campaign-management-wrapper .campaign-list .campaign-list-header h4{margin:0;color:#1f2937}.campaign-management-wrapper .campaign-list .search-filter-area{margin-bottom:24px;padding:16px;background:#fafafa;border-radius:6px;border:1px solid #e5e7eb}.campaign-management-wrapper .campaign-list .search-filter-area .ant-form-item{margin-bottom:12px}.campaign-management-wrapper .campaign-list .campaign-table .ant-table-thead>tr>th{background:#f8fafc;font-weight:600;color:#374151}.campaign-management-wrapper .campaign-list .campaign-table .ant-table-tbody>tr:hover>td{background:#f0f9ff}.campaign-management-wrapper .campaign-list .campaign-table .status-tag{font-size:12px;padding:2px 8px;border-radius:4px}.campaign-management-wrapper .campaign-list .campaign-table .firmware-count{color:#6b7280;font-size:12px}.campaign-management-wrapper .campaign-modal .firmware-selection{max-height:300px;overflow-y:auto;border:1px solid #d1d5db;border-radius:6px;padding:12px}.campaign-management-wrapper .campaign-modal .firmware-selection .firmware-item{display:flex;align-items:center;padding:8px;border-bottom:1px solid #f3f4f6;cursor:pointer;transition:background-color .2s}.campaign-management-wrapper .campaign-modal .firmware-selection .firmware-item:hover{background:#f9fafb}.campaign-management-wrapper .campaign-modal .firmware-selection .firmware-item:last-child{border-bottom:none}.campaign-management-wrapper .campaign-modal .firmware-selection .firmware-item .firmware-info{flex:1;margin-left:8px}.campaign-management-wrapper .campaign-modal .firmware-selection .firmware-item .firmware-info .firmware-name{font-weight:500;color:#1f2937}.campaign-management-wrapper .campaign-modal .firmware-selection .firmware-item .firmware-info .firmware-details{font-size:12px;color:#6b7280;margin-top:2px}.campaign-management-wrapper .campaign-modal .selected-firmware-list{margin-top:16px}.campaign-management-wrapper .campaign-modal .selected-firmware-list .selected-item{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;background:#f0f9ff;border:1px solid #bae6fd;border-radius:4px;margin-bottom:8px}.campaign-management-wrapper .campaign-modal .selected-firmware-list .selected-item .item-info{flex:1}.campaign-management-wrapper .campaign-modal .selected-firmware-list .selected-item .item-info .item-name{font-weight:500;color:#0369a1}.campaign-management-wrapper .campaign-modal .selected-firmware-list .selected-item .item-info .item-details{font-size:12px;color:#0c4a6e;margin-top:2px}.campaign-management-wrapper .campaign-modal .selected-firmware-list .selected-item .remove-btn{color:#dc2626;cursor:pointer;padding:4px}.campaign-management-wrapper .campaign-modal .selected-firmware-list .selected-item .remove-btn:hover{background:#fef2f2;border-radius:4px}.dashboard .dashboard-header{margin-bottom:32px;border-bottom:2px solid transparent;background:#f0f9ff;border-radius:16px;padding:24px;position:relative;overflow:hidden}.dashboard .dashboard-header .ant-typography h2{display:flex;align-items:center;gap:16px;margin-bottom:12px;color:#2d3748;font-weight:700;font-size:28px}.dashboard .dashboard-header .ant-typography h2 .header-icon{color:#3b82f6;font-size:32px;background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.dashboard .dashboard-header .ant-typography h2:after{display:none}.dashboard .dashboard-header .ant-typography-caption{color:#5a6c7d;font-size:16px;margin:0;font-weight:500}.dashboard .stats-row .stat-card{border-radius:20px;border:1px solid #e1e8ed;overflow:hidden;transition:all .4s cubic-bezier(.4,0,.2,1);position:relative;background:#ffffff;box-shadow:0 4px 20px #00000014}.dashboard .stats-row .stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,#3b82f6 0%,#1d4ed8 100%);opacity:0;transition:opacity .3s}.dashboard .stats-row .stat-card:hover{box-shadow:0 12px 40px #3b82f633;border-color:#c3cfe2;transform:translateY(-8px)}.dashboard .stats-row .stat-card:hover:before{opacity:1}.dashboard .stats-row .stat-card .ant-card-body{padding:28px}.dashboard .stats-row .stat-card .stat-content{display:flex;align-items:flex-start;gap:20px}.dashboard .stats-row .stat-card .stat-content .stat-icon{width:64px;height:64px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:28px;color:#fff;flex-shrink:0;box-shadow:0 8px 24px #00000026}.dashboard .stats-row .stat-card .stat-content .stat-icon.primary{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%)}.dashboard .stats-row .stat-card .stat-content .stat-icon.success{background:linear-gradient(135deg,#10b981 0%,#059669 100%)}.dashboard .stats-row .stat-card .stat-content .stat-icon.info{background:linear-gradient(135deg,#06b6d4 0%,#0891b2 100%)}.dashboard .stats-row .stat-card .stat-content .stat-icon.warning{background:linear-gradient(135deg,#f59e0b 0%,#d97706 100%)}.dashboard .stats-row .stat-card .stat-content .stat-info{flex:1}.dashboard .stats-row .stat-card .stat-content .stat-info .ant-statistic .ant-statistic-title{color:#5a6c7d;font-weight:600;margin-bottom:8px;font-size:15px}.dashboard .stats-row .stat-card .stat-content .stat-info .ant-statistic .ant-statistic-content .ant-statistic-content-value{font-size:36px;line-height:1.2;color:#2d3748;font-weight:800}.dashboard .stats-row .stat-card .stat-content .stat-info .ant-statistic .ant-statistic-content .ant-statistic-content-suffix{font-size:16px;color:#5a6c7d;margin-left:6px;font-weight:500}.dashboard .stats-row .stat-card .stat-content .stat-info .stat-desc{font-size:13px;margin-top:8px;display:block;color:#5a6c7d;font-weight:500}.dashboard .stats-row .stat-card .stat-content .stat-info .stat-progress{margin-top:12px}.dashboard .stats-row .stat-card .stat-content .stat-info .stat-progress .ant-progress{margin-bottom:6px}.dashboard .stats-row .stat-card .stat-content .stat-info .stat-progress .ant-progress .ant-progress-bg{border-radius:6px}.dashboard .card-title{display:flex;align-items:center;gap:12px;font-weight:700;color:#2d3748;font-size:18px}.dashboard .card-title .anticon{color:#3b82f6;font-size:20px;background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.dashboard .chart-card .chart-placeholder{height:320px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f0f9ff;border-radius:16px;border:2px dashed #c3cfe2;transition:all .4s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.dashboard .chart-card .chart-placeholder:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(59,130,246,.05);opacity:0;transition:opacity .3s}.dashboard .chart-card .chart-placeholder:hover{border-color:#3b82f6;background:#ffffff;transform:scale(1.02)}.dashboard .chart-card .chart-placeholder:hover:before{opacity:1}.dashboard .chart-card .chart-placeholder .chart-icon{font-size:56px;color:#3b82f6;margin-bottom:20px;background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.dashboard .chart-card .chart-placeholder .chart-text{text-align:center}.dashboard .chart-card .chart-placeholder .chart-text .ant-typography h4{color:#2d3748;margin-bottom:12px;font-size:20px;font-weight:700}.dashboard .chart-card .chart-placeholder .chart-text .ant-typography h4:after{display:none}.dashboard .chart-card .chart-placeholder .chart-text .ant-typography{color:#5a6c7d;font-size:16px;font-weight:500}.dashboard .status-card .status-item{display:flex;align-items:center;justify-content:space-between;padding:16px 0;transition:all .3s;border-radius:8px}.dashboard .status-card .status-item:hover{background:#f0f9ff;margin:0 -16px;padding:16px}.dashboard .status-card .status-item .status-label{display:flex;align-items:center;gap:12px;font-weight:600;color:#2d3748;font-size:15px}.dashboard .status-card .status-item .ant-typography{color:#2d3748;font-weight:700;font-size:16px}.dashboard .status-card .ant-divider{margin:12px 0;border-color:#e1e8ed}.dashboard .activity-card .activity-list .activity-item{display:flex;align-items:flex-start;gap:16px;padding:16px 0;border-bottom:1px solid #e1e8ed;transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:8px}.dashboard .activity-card .activity-list .activity-item:last-child{border-bottom:none}.dashboard .activity-card .activity-list .activity-item:hover{background:#f0f9ff;margin:0 -20px;padding:16px 20px;border-radius:12px;transform:translate(4px)}.dashboard .activity-card .activity-list .activity-item .activity-badge{margin-top:4px}.dashboard .activity-card .activity-list .activity-item .activity-content{flex:1}.dashboard .activity-card .activity-list .activity-item .activity-content .ant-typography{color:#2d3748;font-size:15px;margin:0;font-weight:500}.dashboard .activity-card .activity-list .activity-item .activity-content .activity-time{display:block;margin-top:6px;font-size:13px;color:#5a6c7d;font-weight:500}@media (max-width: 768px){.dashboard .dashboard-header{padding:20px;margin-bottom:24px}.dashboard .dashboard-header .ant-typography h2{font-size:24px}.dashboard .dashboard-header .ant-typography h2 .header-icon{font-size:28px}.dashboard .dashboard-header .ant-typography-caption{font-size:14px}.dashboard .stats-row .stat-card .stat-content .stat-icon{width:56px;height:56px;font-size:24px}.dashboard .stats-row .stat-card .stat-content .stat-info .ant-statistic .ant-statistic-content .ant-statistic-content-value{font-size:28px}.dashboard .chart-card .chart-placeholder{height:240px}.dashboard .chart-card .chart-placeholder .chart-icon{font-size:40px}.dashboard .chart-card .chart-placeholder .chart-text .ant-typography h4{font-size:18px}.dashboard .chart-card .chart-placeholder .chart-text .ant-typography{font-size:14px}}@media (max-width: 576px){.dashboard .stats-row .stat-card .stat-content{flex-direction:column;align-items:center;text-align:center;gap:16px}}@media (prefers-color-scheme: dark){.dashboard .dashboard-header{background:#f0f9ff}.dashboard .dashboard-header .ant-typography h2{color:#2d3748}.dashboard .dashboard-header .ant-typography-caption{color:#5a6c7d}.dashboard .stats-row .stat-card{background:#ffffff;border-color:#e1e8ed}.dashboard .stats-row .stat-card:hover{border-color:#3b82f6;box-shadow:0 12px 40px #3b82f64d}.dashboard .stats-row .stat-card .stat-content .stat-info .ant-statistic .ant-statistic-title{color:#5a6c7d}.dashboard .stats-row .stat-card .stat-content .stat-info .ant-statistic .ant-statistic-content .ant-statistic-content-value{color:#2d3748}.dashboard .stats-row .stat-card .stat-content .stat-info .ant-statistic .ant-statistic-content .ant-statistic-content-suffix,.dashboard .stats-row .stat-card .stat-content .stat-info .stat-desc{color:#5a6c7d}.dashboard .card-title{color:#2d3748}.dashboard .chart-card .chart-placeholder{background:#f0f9ff;border-color:#3b82f6}.dashboard .chart-card .chart-placeholder:hover{background:#ffffff}.dashboard .chart-card .chart-placeholder .chart-text .ant-typography h4{color:#2d3748}.dashboard .chart-card .chart-placeholder .chart-text .ant-typography{color:#5a6c7d}.dashboard .status-card .status-item:hover{background:#f0f9ff}.dashboard .status-card .status-item .status-label,.dashboard .status-card .status-item .ant-typography{color:#2d3748}.dashboard .status-card .ant-divider{border-color:#e1e8ed}.dashboard .activity-card .activity-list .activity-item{border-bottom-color:#e1e8ed}.dashboard .activity-card .activity-list .activity-item:hover{background:#f0f9ff}.dashboard .activity-card .activity-list .activity-item .activity-content .ant-typography{color:#2d3748}.dashboard .activity-card .activity-list .activity-item .activity-content .activity-time{color:#5a6c7d}}.device-list{background:#ffffff;min-height:calc(100vh - 64px);padding:24px}.device-list .device-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding:0}.device-list .device-list-header .ant-typography{margin:0}.device-list .device-list-header .ant-typography h4{margin:0;color:#1f2937;font-weight:600;font-size:18px;line-height:1.2}.device-list .device-list-header .ant-btn{border-radius:8px;font-weight:500;box-shadow:0 2px 4px #3b82f633;transition:all .3s cubic-bezier(.4,0,.2,1)}.device-list .device-list-header .ant-btn:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.device-list .device-list-card{border-radius:12px;border:1px solid #e1e8ed;box-shadow:0 2px 8px #0000000f;overflow:hidden}.device-list .device-list-card .ant-card-body{padding:24px}.device-list .device-list-card .ant-card-body .ant-table .ant-table-thead>tr>th{background-color:#fafafa;font-weight:600}.device-list .device-list-card .ant-card-body .ant-table .ant-table-thead>tr>th.ant-table-cell-fix-right{background:#fafafa;padding:12px 20px!important}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td.ant-table-cell-fix-right{background:#ffffff;padding:12px 20px!important}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-right{background:#f0f9ff}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr{transition:all .3s}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:16px;border-bottom:1px solid #f1f5f9}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .status-tag{padding:2px 8px;border-radius:5px;font-size:12px;font-weight:500}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .status-tag.active{background-color:#f6ffed;color:#52c41a;border:1px solid #b7eb8f}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .status-tag.inactive{background-color:#fff2e8;color:#fa8c16;border:1px solid #ffd591}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn{border-radius:6px;font-size:12px;height:28px;padding:0 8px;transition:all .3s}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-link:hover{transform:translateY(-1px)}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-dangerous:hover{background:#fef2f2;border-color:#fecaca}.device-list .device-list-card .ant-card-body .ant-pagination{margin-top:24px;text-align:right}.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-item{border-radius:6px;border-color:#e1e8ed;background:transparent}.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-item.ant-pagination-item-active{background:transparent;border-color:#3b82f6}.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-item.ant-pagination-item-active a{color:#3b82f6}.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-item a{color:#6b7280}.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-prev,.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-next{border-radius:6px;border-color:#e1e8ed}.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-prev:hover,.device-list .device-list-card .ant-card-body .ant-pagination .ant-pagination-next:hover{border-color:#3b82f6;color:#3b82f6}.device-list .ant-modal .ant-modal-header{border-bottom:1px solid #e1e8ed;padding:20px 24px}.device-list .ant-modal .ant-modal-header .ant-modal-title{font-size:18px;font-weight:600;color:#1f2937}.device-list .ant-modal .ant-modal-body{padding:24px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item{margin-bottom:20px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label{padding-bottom:8px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label label{font-weight:600;color:#374151;font-size:14px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker{border-radius:8px;border:2px solid #e1e8ed;transition:all .3s cubic-bezier(.4,0,.2,1)}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:hover,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:hover,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:hover,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker:hover{border-color:#c3cfe2}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:focus,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-input-focused,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-select-focused,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:focus,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-input-focused,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-select-focused,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:focus,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-input-focused,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-select-focused,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker:focus,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker.ant-input-focused,.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker.ant-select-focused{border-color:#3b82f6;box-shadow:0 0 0 4px #3b82f61a}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input{height:44px;padding:0 16px;font-size:14px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input::placeholder{color:#9ca3af}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector{height:44px;padding:0 16px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-item{line-height:40px;font-size:14px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-placeholder{line-height:40px;color:#9ca3af}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number{width:100%;height:44px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number .ant-input-number-input{height:40px;padding:0 16px;font-size:14px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker{width:100%;height:44px;padding:0 16px}.device-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker .ant-picker-input>input{font-size:14px}.device-list .ant-modal .ant-modal-footer{border-top:1px solid #e1e8ed;padding:16px 24px}.device-list .ant-modal .ant-modal-footer .ant-btn{border-radius:8px;height:40px;padding:0 24px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.device-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);border:none;box-shadow:0 2px 4px #3b82f633}.device-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.device-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-default{border-color:#e1e8ed;color:#6b7280}.device-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-default:hover{border-color:#3b82f6;color:#3b82f6}.device-list .version-column{display:flex;flex-direction:row;align-items:center;gap:8px}.device-list .version-summary .version-tags{display:flex;flex-wrap:wrap;gap:4px}.device-list .version-summary .version-tag{margin:0;font-size:12px;background-color:#f0f0f0;color:#333;border:none;padding:2px 6px;border-radius:4px}.device-list .version-summary .more-tag{margin:0;font-size:12px;background-color:#e6f7ff;color:#1890ff;border:1px solid #91d5ff;padding:2px 6px;border-radius:4px}@media (max-width: 768px){.device-list{padding:16px}.device-list .device-list-header{flex-direction:column;gap:16px;align-items:flex-start}.device-list .device-list-header .ant-typography h4{font-size:16px}.device-list .device-list-card .ant-card-body{padding:16px}.device-list .device-list-card .ant-card-body .ant-table .ant-table-thead>tr>th,.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:12px 8px}}@media (prefers-color-scheme: dark){.device-list{background:#ffffff}.device-list .device-list-header .ant-typography h4{color:#1f2937}.device-list .device-list-card{background:#ffffff;border-color:#e1e8ed}.device-list .device-list-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;color:#374151;border-bottom-color:#e1e8ed}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff}.device-list .device-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{border-bottom-color:#f1f5f9}}.firmware-list{background:#ffffff;min-height:calc(100vh - 64px)}.firmware-list .firmware-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding:0}.firmware-list .firmware-list-header .ant-typography{margin:0}.firmware-list .firmware-list-header .ant-typography h4{margin:0;color:#1f2937;font-weight:600;font-size:18px;line-height:1.2}.firmware-list .firmware-list-header .ant-btn{border-radius:8px;font-weight:500;box-shadow:0 2px 4px #3b82f633;transition:all .3s cubic-bezier(.4,0,.2,1)}.firmware-list .firmware-list-header .ant-btn:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.firmware-list .firmware-list-card{border-radius:12px;border:1px solid #e1e8ed;box-shadow:0 2px 8px #0000000f;overflow:hidden}.firmware-list .firmware-list-card .ant-card-body{padding:24px}.firmware-list .firmware-list-card .ant-card-body .search-filter-area{margin-bottom:30px}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;border-bottom:2px solid #e1e8ed;font-weight:600;color:#374151;padding:16px}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-thead>tr>th.ant-table-cell-fix-right{background:#f8fafc;padding:12px 20px!important}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td.ant-table-cell-fix-right{background:#ffffff;padding:12px 20px!important}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-right{background:#f8fafc}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr{transition:all .3s}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff!important}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr.ant-table-row-dragging{background:#ffffff!important;box-shadow:none!important;transform:none!important}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr.ant-table-row-drag-over{background:#f0f9ff!important;box-shadow:none!important}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:16px;border-bottom:1px solid #f1f5f9}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-tag{padding:4px 12px;border-radius:5px;font-size:12px;font-weight:500}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-tag.ant-tag-success{background:#dcfce7;color:#166534;border:1px solid #bbf7d0}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-tag.ant-tag-warning{background:#fef3c7;color:#92400e;border:1px solid #fde68a}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-tag.ant-tag-error{background:#fef2f2;color:#dc2626;border:1px solid #fecaca}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn{border-radius:6px;font-size:12px;height:28px;padding:0 8px;transition:all .3s}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-link:hover{transform:translateY(-1px)}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-dangerous:hover{background:#fef2f2;border-color:#fecaca}.firmware-list .firmware-list-card .ant-card-body .ant-pagination{margin-top:24px;text-align:right}.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-item{border-radius:6px;border-color:#e1e8ed;background:transparent}.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-item.ant-pagination-item-active{background:transparent;border-color:#3b82f6}.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-item.ant-pagination-item-active a{color:#3b82f6}.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-item a{color:#6b7280}.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-prev,.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-next{border-radius:6px;border-color:#e1e8ed}.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-prev:hover,.firmware-list .firmware-list-card .ant-card-body .ant-pagination .ant-pagination-next:hover{border-color:#3b82f6;color:#3b82f6}.firmware-list .ant-modal .ant-modal-header{border-bottom:1px solid #e1e8ed;padding:20px 24px}.firmware-list .ant-modal .ant-modal-header .ant-modal-title{font-size:18px;font-weight:600;color:#1f2937}.firmware-list .ant-modal .ant-modal-body{padding:24px}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item{margin-bottom:20px}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label{padding-bottom:8px}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label label{font-weight:600;color:#374151;font-size:14px}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker{border-radius:8px;border:2px solid #e1e8ed;transition:all .3s cubic-bezier(.4,0,.2,1)}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:hover,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:hover,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:hover,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker:hover{border-color:#c3cfe2}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:focus,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-input-focused,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-select-focused,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:focus,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-input-focused,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-select-focused,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:focus,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-input-focused,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-select-focused,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker:focus,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker.ant-input-focused,.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker.ant-select-focused{border-color:#3b82f6;box-shadow:0 0 0 4px #3b82f61a}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input{height:44px;padding:0 16px;font-size:14px}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input::placeholder{color:#9ca3af}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector{height:44px;padding:0 16px}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-item{line-height:40px;font-size:14px}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-placeholder{line-height:40px;color:#9ca3af}.firmware-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-input-textarea{height:auto;padding:12px 16px;line-height:1.5;resize:vertical}.firmware-list .ant-modal .ant-modal-footer{border-top:1px solid #e1e8ed;padding:16px 24px}.firmware-list .ant-modal .ant-modal-footer .ant-btn{border-radius:8px;height:40px;padding:0 24px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.firmware-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);border:none;box-shadow:0 2px 4px #3b82f633}.firmware-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.firmware-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-default{border-color:#e1e8ed;color:#6b7280}.firmware-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-default:hover{border-color:#3b82f6;color:#3b82f6}@media (max-width: 768px){.firmware-list{padding:16px}.firmware-list .firmware-list-header{flex-direction:column;gap:16px;align-items:flex-start}.firmware-list .firmware-list-header .ant-typography h4{font-size:16px}.firmware-list .firmware-list-card .ant-card-body{padding:16px}.firmware-list .firmware-list-card .ant-card-body .search-filter-area .ant-form{flex-direction:column;gap:12px}.firmware-list .firmware-list-card .ant-card-body .search-filter-area .ant-form .ant-form-item{margin-bottom:8px}.firmware-list .firmware-list-card .ant-card-body .search-filter-area .ant-form .ant-form-item .ant-input,.firmware-list .firmware-list-card .ant-card-body .search-filter-area .ant-form .ant-form-item .ant-select{width:100%!important}.firmware-list .firmware-list-card .ant-card-body .drag-tip{flex-direction:column;gap:8px;align-items:flex-start}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-thead>tr>th,.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:12px 8px}}@media (prefers-color-scheme: dark){.firmware-list{background:#ffffff}.firmware-list .firmware-list-header .ant-typography h4{color:#1f2937}.firmware-list .firmware-list-card{background:#ffffff;border-color:#e1e8ed}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;color:#374151;border-bottom-color:#e1e8ed}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff!important}.firmware-list .firmware-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{border-bottom-color:#f1f5f9}}.ant-table-row-dragging{background:#ffffff!important;box-shadow:none!important;transform:none!important;opacity:.8}.ant-table-row-drag-over{background:#f0f9ff!important;box-shadow:none!important}.ant-table-tbody>tr.ant-table-row-dragging,.ant-table-tbody>tr.ant-table-row-drag-over{background:#ffffff!important;box-shadow:none!important;transform:none!important}.ant-table-tbody>tr.ant-table-row-dragging>td,.ant-table-tbody>tr.ant-table-row-drag-over>td{background:#ffffff!important}*[class*=dragging],*[class*=drag-over],*[class*=drop-target]{background:#ffffff!important;box-shadow:none!important;transform:none!important;border:none!important}.ant-table-row-dragging{position:fixed!important;z-index:1000!important;pointer-events:none!important;max-width:100vw!important;max-height:100vh!important;overflow:hidden!important;left:50%!important;top:50%!important;transform:translate(-50%,-50%)!important;width:auto!important;height:auto!important;clip:rect(0,100vw,100vh,0)!important;clip-path:inset(0)!important}body.dragging{overflow:hidden!important;position:fixed!important;width:100%!important;height:100%!important}.ant-table-wrapper{overflow:hidden!important;position:relative!important;max-width:100%!important}body{overflow-x:hidden!important;overflow-y:auto!important}.drag-handle{cursor:grab;color:#9ca3af;font-size:16px;transition:color .3s}.drag-handle:hover{color:#3b82f6}.drag-handle:active{cursor:grabbing}.drag-placeholder td{padding:8px 16px!important;border:none!important}.drop-target-row{background:#f0f9ff!important;box-shadow:none!important;transform:none!important}.drag-tip{margin-bottom:16px;padding:12px 16px;background:#f0f9ff;border:1px solid #e0f2fe;border-radius:8px;color:#0369a1;font-size:14px}.ota-upgrade{background:#ffffff;min-height:calc(100vh - 64px)}.ota-upgrade .ota-upgrade-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding:0}.ota-upgrade .ota-upgrade-header .ant-typography{margin:0}.ota-upgrade .ota-upgrade-header .ant-typography h4{margin:0;color:#1f2937;font-weight:600;font-size:18px;line-height:1.2}.ota-upgrade .ota-upgrade-header .ant-btn{border-radius:8px;font-weight:500;box-shadow:0 2px 4px #3b82f633;transition:all .3s cubic-bezier(.4,0,.2,1)}.ota-upgrade .ota-upgrade-header .ant-btn:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.ota-upgrade .ota-upgrade-card{border-radius:12px;border:1px solid #e1e8ed;box-shadow:0 2px 8px #0000000f;overflow:hidden}.ota-upgrade .ota-upgrade-card .ant-card-body{padding:24px}.ota-upgrade .ota-upgrade-card .ant-card-body .drag-tip{margin-bottom:16px;padding:12px 16px;background:#f0f9ff;border:1px solid #e0f2fe;border-radius:8px;color:#0369a1;font-size:14px}.ota-upgrade .ota-upgrade-card .ant-card-body .drag-tip .ant-typography{margin:0;color:#0369a1}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;border-bottom:2px solid #e1e8ed;font-weight:600;color:#374151;padding:16px}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr{transition:all .3s ease;cursor:grab;background:#ffffff!important}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr:active{cursor:grabbing}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#ffffff!important;transform:translateY(-1px);box-shadow:0 4px 12px #00000014}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:16px;border-bottom:1px solid #f1f5f9;background:#ffffff!important}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-progress{width:100%}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-progress .ant-progress-outer{width:100%!important}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-progress .ant-progress-inner{background-color:#f5f5f5}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-progress .ant-progress-bg{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%)}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn{border-radius:6px;font-size:12px;height:28px;padding:0 8px;transition:all .3s}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-link:hover{transform:translateY(-1px)}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-dangerous:hover{background:#fef2f2;border-color:#fecaca}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .drag-handle{cursor:grab;color:#9ca3af;font-size:16px;transition:color .3s}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .drag-handle:hover{color:#3b82f6}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td .drag-handle:active{cursor:grabbing}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-row-dragging{opacity:.5!important}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-row-drop-target{background:#f0f9ff!important;transform:scale(1.02)!important;box-shadow:0 2px 8px #3b82f633!important;transition:all .2s ease!important}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .drag-placeholder td{padding:8px 16px!important;border:none!important}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .drop-target-row td{border-top:3px solid #3b82f6!important}@keyframes pulse{0%{opacity:1}50%{opacity:.7}to{opacity:1}}.ota-upgrade .ant-modal .ant-modal-header{border-bottom:1px solid #e1e8ed;padding:20px 24px}.ota-upgrade .ant-modal .ant-modal-header .ant-modal-title{font-size:18px;font-weight:600;color:#1f2937}.ota-upgrade .ant-modal .ant-modal-body{padding:24px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item{margin-bottom:20px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label{padding-bottom:8px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label label{font-weight:600;color:#374151;font-size:14px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number{border-radius:8px;border:2px solid #e1e8ed;transition:all .3s cubic-bezier(.4,0,.2,1)}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:hover,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:hover,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:hover{border-color:#c3cfe2}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:focus,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-input-focused,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-select-focused,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:focus,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-input-focused,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-select-focused,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:focus,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-input-focused,.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-select-focused{border-color:#3b82f6;box-shadow:0 0 0 4px #3b82f61a}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input{height:44px;padding:0 16px;font-size:14px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input::placeholder{color:#9ca3af}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector{height:44px;padding:0 16px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-item{line-height:40px;font-size:14px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-placeholder{line-height:40px;color:#9ca3af}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number{width:100%;height:44px}.ota-upgrade .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number .ant-input-number-input{height:40px;padding:0 16px;font-size:14px}.ota-upgrade .ant-modal .ant-modal-footer{border-top:1px solid #e1e8ed;padding:16px 24px}.ota-upgrade .ant-modal .ant-modal-footer .ant-btn{border-radius:8px;height:40px;padding:0 24px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.ota-upgrade .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);border:none;box-shadow:0 2px 4px #3b82f633}.ota-upgrade .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.ota-upgrade .ant-modal .ant-modal-footer .ant-btn.ant-btn-default{border-color:#e1e8ed;color:#6b7280}.ota-upgrade .ant-modal .ant-modal-footer .ant-btn.ant-btn-default:hover{border-color:#3b82f6;color:#3b82f6}.ota-upgrade .upgrade-actions{display:flex;gap:12px;margin-bottom:16px}.ota-upgrade .upgrade-actions .ant-btn{border-radius:8px;font-weight:500;height:40px;padding:0 24px;transition:all .3s cubic-bezier(.4,0,.2,1)}.ota-upgrade .upgrade-actions .ant-btn.ant-btn-primary{background:linear-gradient(135deg,#10b981 0%,#059669 100%);border:none;box-shadow:0 2px 4px #10b98133}.ota-upgrade .upgrade-actions .ant-btn.ant-btn-primary:hover{transform:translateY(-2px);box-shadow:0 4px 12px #10b9814d}.ota-upgrade .upgrade-actions .ant-btn.ant-btn-default{border-color:#e1e8ed;color:#6b7280}.ota-upgrade .upgrade-actions .ant-btn.ant-btn-default:hover{border-color:#3b82f6;color:#3b82f6}@media (max-width: 768px){.ota-upgrade{padding:16px}.ota-upgrade .ota-upgrade-header{flex-direction:column;gap:16px;align-items:flex-start}.ota-upgrade .ota-upgrade-header .ant-typography h4{font-size:16px}.ota-upgrade .ota-upgrade-card .ant-card-body{padding:16px}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-thead>tr>th,.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:12px 8px}.ota-upgrade .upgrade-actions{flex-direction:column}.ota-upgrade .upgrade-actions .ant-btn{width:100%}}@media (prefers-color-scheme: dark){.ota-upgrade{background:#ffffff}.ota-upgrade .ota-upgrade-header .ant-typography h4{color:#1f2937}.ota-upgrade .ota-upgrade-card{background:#ffffff;border-color:#e1e8ed}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;color:#374151;border-bottom-color:#e1e8ed}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff}.ota-upgrade .ota-upgrade-card .ant-card-body .ant-table .ant-table-tbody>tr>td{border-bottom-color:#f1f5f9}}.vehicle-upgrade-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.vehicle-upgrade-header .ant-typography{margin:0;color:#1f2937;font-weight:600}.vehicle-upgrade-card{border-radius:12px;box-shadow:0 2px 8px #0000000f;border:1px solid #e5e7eb}.vehicle-upgrade-card .ant-card-body{padding:24px}.vehicle-upgrade-card .ant-table .ant-table-thead>tr>th{background:#f8fafc;border-bottom:1px solid #e5e7eb;font-weight:600;color:#374151;padding:16px}.vehicle-upgrade-card .ant-table .ant-table-tbody>tr>td{padding:16px;border-bottom:1px solid #f3f4f6}.vehicle-upgrade-card .ant-table .ant-table-tbody>tr:hover>td{background:#f8fafc}.status-pending{color:#8c8c8c;font-weight:500}.status-upgrading{color:#1890ff;font-weight:500}.status-success{color:#52c41a;font-weight:500}.status-failed{color:#ff4d4f;font-weight:500}.module-progress-container .module-progress-item{margin-bottom:8px}.module-progress-container .module-progress-item:last-child{margin-bottom:0}.module-progress-container .module-progress-item .module-progress-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.module-progress-container .module-progress-item .module-progress-header .module-name{font-size:12px;color:#666;font-weight:500}.module-progress-container .module-progress-item .module-progress-header .module-status{font-size:12px;font-weight:500}.module-progress-container .module-progress-item .ant-progress .ant-progress-outer .ant-progress-inner{background-color:#f5f5f5;border-radius:4px}.module-progress-container .module-progress-item .ant-progress .ant-progress-outer .ant-progress-bg{border-radius:4px}.firmware-management-wrapper{background:#ffffff;min-height:calc(100vh - 64px)}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#ffffff;position:relative;overflow:hidden}.login-container:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="%23f0f0f0" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>');opacity:.3;z-index:0}.login-container .login-card{width:450px;max-width:90vw;background:rgba(255,255,255,.95);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:24px;box-shadow:0 20px 60px #0000001a;border:1px solid rgba(255,255,255,.2);position:relative;z-index:1;animation:slideUp .8s cubic-bezier(.4,0,.2,1);overflow:hidden}.login-container .login-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:linear-gradient(90deg,#3b82f6 0%,#1d4ed8 100%)}.login-container .login-card .ant-card-body{padding:48px 40px}.login-container .login-card .login-header{text-align:center;margin-bottom:40px}.login-container .login-card .login-header .login-logo{width:80px;height:80px;margin:0 auto 24px;background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);border-radius:20px;display:flex;align-items:center;justify-content:center;font-size:36px;color:#fff;box-shadow:0 12px 32px #3b82f64d;position:relative}.login-container .login-card .login-header .login-logo:after{content:"";position:absolute;top:-2px;right:-2px;bottom:-2px;left:-2px;background:linear-gradient(135deg,#3b82f6,#1d4ed8);border-radius:22px;z-index:-1;opacity:0;transition:opacity .3s}.login-container .login-card .login-header .login-logo:hover:after{opacity:.2}.login-container .login-card .login-header .ant-typography h2{color:#2d3748;font-weight:800;font-size:32px;margin-bottom:12px;background:linear-gradient(135deg,#2d3748 0%,#4a5568 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.login-container .login-card .login-header .ant-typography h2:after{display:none}.login-container .login-card .login-header .ant-typography{color:#5a6c7d;font-size:16px;font-weight:500;margin:0}.login-container .login-card .login-form .ant-form-item{margin-bottom:24px}.login-container .login-card .login-form .ant-form-item .ant-form-item-label{padding-bottom:8px}.login-container .login-card .login-form .ant-form-item .ant-form-item-label label{color:#2d3748;font-weight:600;font-size:15px}.login-container .login-card .login-form .ant-form-item .ant-input,.login-container .login-card .login-form .ant-form-item .ant-input-password{height:52px;border-radius:12px;border:2px solid #e1e8ed;font-size:16px;padding:0 20px;transition:all .3s cubic-bezier(.4,0,.2,1);background:rgba(255,255,255,.8)}.login-container .login-card .login-form .ant-form-item .ant-input:hover,.login-container .login-card .login-form .ant-form-item .ant-input-password:hover{border-color:#c3cfe2;background:rgba(255,255,255,.95)}.login-container .login-card .login-form .ant-form-item .ant-input:focus,.login-container .login-card .login-form .ant-form-item .ant-input.ant-input-focused,.login-container .login-card .login-form .ant-form-item .ant-input-password:focus,.login-container .login-card .login-form .ant-form-item .ant-input-password.ant-input-focused{border-color:#3b82f6;box-shadow:0 0 0 4px #3b82f61a;background:rgb(255,255,255)}.login-container .login-card .login-form .ant-form-item .ant-input::placeholder,.login-container .login-card .login-form .ant-form-item .ant-input-password::placeholder{color:#9ca3af;font-weight:500}.login-container .login-card .login-form .ant-form-item .ant-input-password .ant-input{border:none;box-shadow:none;padding:0;background:transparent}.login-container .login-card .login-form .ant-form-item .ant-input-password .ant-input:focus{box-shadow:none}.login-container .login-card .login-form .ant-form-item .ant-input-password .ant-input-suffix .anticon{color:#9ca3af;font-size:18px;transition:color .3s}.login-container .login-card .login-form .ant-form-item .ant-input-password .ant-input-suffix .anticon:hover{color:#3b82f6}.login-container .login-card .login-form .login-options{display:flex;justify-content:space-between;align-items:center;margin-bottom:32px}.login-container .login-card .login-form .login-options .ant-checkbox-wrapper{color:#5a6c7d;font-weight:500}.login-container .login-card .login-form .login-options .ant-checkbox-wrapper .ant-checkbox .ant-checkbox-inner{border-radius:6px;border-color:#c3cfe2;transition:all .3s}.login-container .login-card .login-form .login-options .ant-checkbox-wrapper .ant-checkbox .ant-checkbox-inner:hover{border-color:#3b82f6}.login-container .login-card .login-form .login-options .ant-checkbox-wrapper .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);border-color:#3b82f6}.login-container .login-card .login-form .login-options .forgot-password{color:#3b82f6;text-decoration:none;font-weight:600;transition:all .3s}.login-container .login-card .login-form .login-options .forgot-password:hover{color:#1d4ed8;text-decoration:underline}.login-container .login-card .login-form .ant-btn{width:100%;height:52px;border-radius:12px;font-size:16px;font-weight:700;border:none;background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);color:#fff;transition:all .4s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.login-container .login-card .login-form .ant-btn:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .6s}.login-container .login-card .login-form .ant-btn:hover{transform:translateY(-2px);box-shadow:0 12px 32px #3b82f666}.login-container .login-card .login-form .ant-btn:hover:before{left:100%}.login-container .login-card .login-form .ant-btn:active{transform:translateY(0)}.login-container .login-card .login-form .ant-btn:focus{box-shadow:0 0 0 4px #3b82f633}.login-container .login-card .login-footer{text-align:center;margin-top:32px;padding-top:24px;border-top:1px solid #e1e8ed}.login-container .login-card .login-footer .ant-typography{color:#5a6c7d;font-size:14px;margin:0;font-weight:500}.login-container .login-card .login-footer .register-link{color:#3b82f6;text-decoration:none;font-weight:600;margin-left:8px;transition:all .3s}.login-container .login-card .login-footer .register-link:hover{color:#1d4ed8;text-decoration:underline}@keyframes slideUp{0%{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.login-container{padding:20px}.login-container .login-card{width:100%;max-width:400px}.login-container .login-card .ant-card-body{padding:32px 24px}.login-container .login-card .login-header{margin-bottom:32px}.login-container .login-card .login-header .login-logo{width:64px;height:64px;font-size:28px;margin-bottom:20px}.login-container .login-card .login-header .ant-typography h2{font-size:28px}.login-container .login-card .login-header .ant-typography{font-size:14px}.login-container .login-card .login-form .ant-form-item{margin-bottom:20px}.login-container .login-card .login-form .ant-form-item .ant-input,.login-container .login-card .login-form .ant-form-item .ant-input-password,.login-container .login-card .login-form .ant-btn{height:48px;font-size:15px}}@media (max-width: 480px){.login-container .login-card .ant-card-body{padding:24px 20px}.login-container .login-card .login-header .ant-typography h2{font-size:24px}.login-container .login-card .login-form .login-options{flex-direction:column;gap:16px;align-items:flex-start}}@media (prefers-color-scheme: dark){.login-container{background:#ffffff}.login-container:before{background:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse"><path d="M 10 0 L 0 0 0 10" fill="none" stroke="%23f0f0f0" stroke-width="0.5"/></pattern></defs><rect width="100" height="100" fill="url(%23grid)"/></svg>')}.login-container .login-card{background:rgba(255,255,255,.95);border-color:#fff3}.login-container .login-card .login-header .ant-typography h2{color:#2d3748}.login-container .login-card .login-header .ant-typography{color:#5a6c7d}.login-container .login-card .login-form .ant-form-item .ant-form-item-label label{color:#2d3748}.login-container .login-card .login-form .ant-form-item .ant-input,.login-container .login-card .login-form .ant-form-item .ant-input-password{background:rgba(255,255,255,.8);border-color:#e1e8ed;color:#2d3748}.login-container .login-card .login-form .ant-form-item .ant-input:hover,.login-container .login-card .login-form .ant-form-item .ant-input-password:hover{background:rgba(255,255,255,.95);border-color:#c3cfe2}.login-container .login-card .login-form .ant-form-item .ant-input:focus,.login-container .login-card .login-form .ant-form-item .ant-input.ant-input-focused,.login-container .login-card .login-form .ant-form-item .ant-input-password:focus,.login-container .login-card .login-form .ant-form-item .ant-input-password.ant-input-focused{background:rgb(255,255,255)}.login-container .login-card .login-form .ant-form-item .ant-input::placeholder,.login-container .login-card .login-form .ant-form-item .ant-input-password::placeholder{color:#9ca3af}.login-container .login-card .login-form .login-options .ant-checkbox-wrapper{color:#5a6c7d}.login-container .login-card .login-footer{border-top-color:#e1e8ed}.login-container .login-card .login-footer .ant-typography{color:#5a6c7d}}.module-list{background:#ffffff;min-height:calc(100vh - 64px)}.module-list .module-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding:0}.module-list .module-list-header .ant-typography{margin:0}.module-list .module-list-header .ant-typography h4{margin:0;color:#1f2937;font-weight:600;font-size:18px;line-height:1.2}.module-list .module-list-header .ant-btn{border-radius:8px;font-weight:500;box-shadow:0 2px 4px #3b82f633;transition:all .3s cubic-bezier(.4,0,.2,1)}.module-list .module-list-header .ant-btn:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.module-list .module-list-card{border-radius:12px;border:1px solid #e1e8ed;box-shadow:0 2px 8px #0000000f;overflow:hidden}.module-list .module-list-card .ant-card-body{padding:24px}.module-list .module-list-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;border-bottom:2px solid #e1e8ed;font-weight:600;color:#374151;padding:16px}.module-list .module-list-card .ant-card-body .ant-table .ant-table-thead>tr>th.ant-table-cell-fix-right{background:#f8fafc;padding:12px 20px!important}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td.ant-table-cell-fix-right{background:#ffffff;padding:12px 20px!important}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover>td.ant-table-cell-fix-right{background:#f8fafc}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr{transition:all .3s}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr.ant-table-row-selected{background:#e6f7ff!important}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr.ant-table-row-selected>td{background:#e6f7ff!important}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:16px;border-bottom:1px solid #f1f5f9}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .status-tag{padding:4px 12px;border-radius:5px;font-size:12px;font-weight:500}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .status-tag.active{background:#dcfce7;color:#166534;border:1px solid #bbf7d0}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .status-tag.inactive{background:#fef2f2;color:#dc2626;border:1px solid #fecaca}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn{border-radius:6px;font-size:12px;height:28px;padding:0 8px;transition:all .3s}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-link:hover{transform:translateY(-1px)}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td .ant-btn.ant-btn-dangerous:hover{background:#fef2f2;border-color:#fecaca}.module-list .module-list-card .ant-card-body .ant-pagination{margin-top:24px;text-align:right}.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-item{border-radius:6px;border-color:#e1e8ed;background:transparent}.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-item.ant-pagination-item-active{background:transparent;border-color:#3b82f6}.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-item.ant-pagination-item-active a{color:#3b82f6}.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-item a{color:#6b7280}.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-prev,.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-next{border-radius:6px;border-color:#e1e8ed}.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-prev:hover,.module-list .module-list-card .ant-card-body .ant-pagination .ant-pagination-next:hover{border-color:#3b82f6;color:#3b82f6}.module-list .ant-modal .ant-modal-header{border-bottom:1px solid #e1e8ed;padding:20px 24px}.module-list .ant-modal .ant-modal-header .ant-modal-title{font-size:18px;font-weight:600;color:#1f2937}.module-list .ant-modal .ant-modal-body{padding:24px}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item{margin-bottom:20px}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label{padding-bottom:8px}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-form-item-label label{font-weight:600;color:#374151;font-size:14px}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker{border-radius:8px;border:2px solid #e1e8ed;transition:all .3s cubic-bezier(.4,0,.2,1)}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:hover,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:hover,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:hover,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker:hover{border-color:#c3cfe2}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input:focus,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-input-focused,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-select-focused,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector:focus,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-input-focused,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select-selector.ant-select-focused,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number:focus,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-input-focused,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input-number.ant-select-focused,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker:focus,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker.ant-input-focused,.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-picker.ant-select-focused{border-color:#3b82f6;box-shadow:0 0 0 4px #3b82f61a}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input{height:44px;padding:0 16px;font-size:14px}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input::placeholder{color:#9ca3af}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector{height:44px;padding:0 16px}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-item{line-height:40px;font-size:14px}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-select .ant-select-selector .ant-select-selection-placeholder{line-height:40px;color:#9ca3af}.module-list .ant-modal .ant-modal-body .ant-form .ant-form-item .ant-input.ant-input-textarea{height:auto;padding:12px 16px;line-height:1.5;resize:vertical}.module-list .ant-modal .ant-modal-footer{border-top:1px solid #e1e8ed;padding:16px 24px}.module-list .ant-modal .ant-modal-footer .ant-btn{border-radius:8px;height:40px;padding:0 24px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.module-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary{background:linear-gradient(135deg,#3b82f6 0%,#1d4ed8 100%);border:none;box-shadow:0 2px 4px #3b82f633}.module-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-primary:hover{transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.module-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-default{border-color:#e1e8ed;color:#6b7280}.module-list .ant-modal .ant-modal-footer .ant-btn.ant-btn-default:hover{border-color:#3b82f6;color:#3b82f6}@media (max-width: 768px){.module-list{padding:16px}.module-list .module-list-header{flex-direction:column;gap:16px;align-items:flex-start}.module-list .module-list-header .ant-typography h4{font-size:20px}.module-list .module-list-card .ant-card-body{padding:16px}.module-list .module-list-card .ant-card-body .ant-table .ant-table-thead>tr>th,.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{padding:12px 8px}}@media (prefers-color-scheme: dark){.module-list{background:#ffffff}.module-list .module-list-header .ant-typography h4{color:#1f2937}.module-list .module-list-card{background:#ffffff;border-color:#e1e8ed}.module-list .module-list-card .ant-card-body .ant-table .ant-table-thead>tr>th{background:#f8fafc;color:#374151;border-bottom-color:#e1e8ed}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr:hover{background:#f0f9ff}.module-list .module-list-card .ant-card-body .ant-table .ant-table-tbody>tr>td{border-bottom-color:#f1f5f9}}.project-phase{padding:24px}.project-phase .project-phase-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.project-phase .project-phase-card .ant-table-wrapper .ant-table-thead>tr>th{background-color:#fafafa;font-weight:600}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion: no-preference){.App-logo{animation:App-logo-spin infinite 20s linear}}.App-header{background-color:#282c34;padding:20px;color:#fff}.App-link{color:#61dafb}@keyframes App-logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*{box-sizing:border-box}#root{height:100vh}.ant-layout{min-height:100vh}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#a8a8a8}
