*{
    box-sizing:border-box
}
body{
    margin:0;
    background:#f4f7fb;
    color:#172033;
    font-family:"Microsoft YaHei","PingFang SC",Arial,sans-serif
}
.top{
    background:#fff;
    border-bottom:1px solid #e5eaf1;
    padding:18px 28px;
    display:flex;
    align-items:center;
    justify-content:space-between
}
.brand{
    font-size:22px;
    font-weight:700
}
.version{
    color:#667085;
    font-size:13px
}
.container{
    max-width:1280px;
    margin:28px auto;
    padding:0 24px
}
.panel{
    background:#fff;
    border:1px solid #e7ebf1;
    border-radius:12px;
    padding:22px;
    margin-bottom:20px;
    box-shadow:0 3px 14px rgba(15,23,42,.04)
}
h1,h2,h3{
    margin-top:0
}
.row{
    display:flex;
    gap:12px;
    flex-wrap:wrap;
    align-items:center
}
input{
    height:42px;
    border:1px solid #cfd6df;
    border-radius:7px;
    padding:0 12px;
    min-width:230px;
    font-size:15px
}
button{
    border:0;
    border-radius:7px;
    padding:11px 18px;
    cursor:pointer;
    font-size:15px;
    background:#1769e0;
    color:#fff
}
button.secondary{
    background:#667085
}
button.danger{
    background:#c73535
}
button:disabled{
    opacity:.45;
    cursor:not-allowed
}
.status{
    display:inline-flex;
    align-items:center;
    gap:7px;
    padding:6px 10px;
    border-radius:20px;
    background:#f2f4f7;
    font-size:13px
}
.dot{
    width:8px;
    height:8px;
    border-radius:50%;
    background:#98a2b3
}
.dot.ok{
    background:#12b76a
}
.dot.warn{
    background:#f79009
}
.dot.bad{
    background:#f04438
}
.warning{
    border:1px solid #f7c66b;
    background:#fff8e6;
    color:#7a4a00;
    padding:13px 15px;
    border-radius:8px;
    margin-bottom:18px
}
.video{
    min-height:280px;
    background:#0b1220;
    border-radius:10px;
    overflow:hidden;
    position:relative
}
.video:empty:after{
    content:"等待视频";
    color:#94a3b8;
    position:absolute;
    inset:0;
    display:flex;
    align-items:center;
    justify-content:center
}
.video-grid{
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:18px
}
.video-card h3{
    font-size:15px;
    margin:0 0 8px
}
.log{
    height:180px;
    overflow:auto;
    background:#101828;
    color:#d0d5dd;
    border-radius:8px;
    padding:12px;
    font:13px Consolas,monospace;
    white-space:pre-wrap
}
a{
    color:#1769e0;
    text-decoration:none
}
@media(max-width:800px){
    .video-grid{
        grid-template-columns:1fr
    }
    .container{
        padding:0 14px
    }
}

.summary-grid{
    display:grid;
    grid-template-columns:repeat(4,1fr);
    gap:15px;
    margin-bottom:20px
}
.summary-card{
    background:#fff;
    border:1px solid #e7ebf1;
    border-radius:10px;
    padding:18px
}
.summary-card .num{
    font-size:30px;
    font-weight:700
}
.summary-card .label{
    color:#667085;
    margin-top:5px
}
.candidate-grid{
    display:grid;
    grid-template-columns:repeat(3,1fr);
    gap:16px
}
.candidate-card{
    background:#fff;
    border:1px solid #e7ebf1;
    border-radius:10px;
    padding:18px
}
.state-line{
    display:flex;
    justify-content:space-between;
    padding:7px 0;
    border-bottom:1px solid #f0f2f5
}
.state-line:last-child{
    border:0
}
.good{
    color:#079455;
    font-weight:600
}
.badtext{
    color:#d92d20;
    font-weight:600
}
.muted{
    color:#667085
}
table{
    width:100%;
    border-collapse:collapse
}
th,td{
    text-align:left;
    padding:12px 10px;
    border-bottom:1px solid #e8ecf2;
    vertical-align:middle
}
th{
    font-size:13px;
    color:#667085
}
.small-button{
    padding:7px 11px;
    font-size:13px
}
.qr{
    width:150px;
    height:150px;
    border:1px solid #e5e7eb;
    padding:5px;
    background:#fff
}
.hidden{
    display:none!important
}

@media(max-width:900px){
    .summary-grid{
        grid-template-columns:repeat(2,1fr)
    }
    .candidate-grid{
        grid-template-columns:1fr
    }
}

/* V031_DEVICE_STYLE */

.device-grid{
    display:grid;
    grid-template-columns:repeat(3,1fr);
    gap:14px
}

.device-item{
    border:1px solid #e4e7ec;
    border-radius:10px;
    padding:16px;
    background:#fff
}

.device-title{
    font-weight:600;
    margin-bottom:8px
}

.device-result{
    font-size:14px;
    color:#667085
}

.device-pass{
    color:#079455;
    font-weight:600
}

.device-fail{
    color:#d92d20;
    font-weight:600
}

.device-wait{
    color:#b54708;
    font-weight:600
}

textarea{
    width:100%;
    min-height:160px;
    border:1px solid #d0d5dd;
    border-radius:8px;
    padding:12px;
    resize:vertical;
    font:14px "Microsoft YaHei",Arial,sans-serif
}

select{
    border:1px solid #d0d5dd;
    border-radius:7px;
    background:#fff
}

.status-badge{
    display:inline-block;
    padding:5px 9px;
    border-radius:14px;
    background:#f2f4f7;
    color:#475467;
    font-size:12px
}

@media(max-width:900px){
    .device-grid{
        grid-template-columns:1fr
    }
}
