*{box-sizing:border-box}
body{margin:0;background:#f3f6fa;color:#243247;font-family:"Microsoft YaHei",Arial,sans-serif;font-size:14px}
a{color:#2365a8;text-decoration:none}
a:hover{color:#12477f}
.topbar{min-height:68px;background:#183c5b;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:10px max(calc((100% - 1180px)/2),20px);gap:24px}
.brand{display:flex;align-items:center;gap:12px}
.brand-icon{width:40px;height:40px;border-radius:10px;background:#275b83;display:grid;place-items:center;font-size:23px}
.brand strong{display:block;font-size:16px}
.brand small{display:block;color:#c9d9e6;margin-top:4px}
.topbar nav{display:flex;gap:22px}
.topbar nav a{color:#e5edf5}
.user-box{display:flex;align-items:center;gap:15px;white-space:nowrap}
.user-box form{margin:0}
.logout-btn{border:1px solid #7691a8;background:transparent;color:#fff;border-radius:6px;padding:6px 12px;cursor:pointer}
.container{max-width:1180px;margin:30px auto;padding:0 20px;min-height:calc(100vh - 145px)}
footer{text-align:center;color:#8a98a8;padding:22px;font-size:12px}
.page-heading{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:22px}
h1{font-size:25px;margin:0 0 8px}
h2{font-size:17px;margin:0 0 18px}
.page-heading p,.muted{color:#7d8a99;margin:0}
.small{font-size:12px}
.primary{background:#1d639b;color:#fff;border:0;border-radius:7px;padding:10px 17px;cursor:pointer;font-size:14px}
.primary:hover{background:#174e7c;color:white}
.button-link{display:inline-flex;align-items:center;justify-content:center;border-radius:7px;padding:10px 15px}
.secondary{background:#edf1f5;color:#526174}
.panel,.stat-card,.login-card{background:#fff;border:1px solid #e5eaf0;border-radius:12px;box-shadow:0 3px 12px rgba(32,54,77,.035)}
.panel{padding:22px;margin-bottom:20px}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:22px}
.stat-card{padding:20px}
.stat-card span,.stat-card small{display:block;color:#748397}
.stat-card strong{display:block;font-size:30px;margin:10px 0;color:#1c527e}
.stat-card small{font-size:12px}
.panel-heading{display:flex;justify-content:space-between;align-items:center}
.table-wrap{width:100%;overflow-x:auto}
table{border-collapse:collapse;width:100%;white-space:nowrap}
th,td{text-align:left;padding:13px 12px;border-bottom:1px solid #edf0f4}
th{background:#f7f9fb;color:#617186;font-weight:600}
tbody tr:hover{background:#fafcff}
.status{display:inline-block;background:#e8f4ed;color:#287449;padding:4px 9px;border-radius:20px;font-size:12px}
.actions{display:flex;gap:12px}
.empty{text-align:center;padding:35px 12px;color:#8794a3}
.search-form{display:flex;gap:10px;margin-bottom:18px}
.search-form input{flex:1;max-width:520px}
input,select,textarea{width:100%;padding:10px 12px;border:1px solid #d8e0e8;border-radius:7px;background:#fff;font:inherit;color:#29394b}
input:focus,select:focus,textarea:focus{outline:2px solid #d1e5f8;border-color:#5592c5}
label{display:block;font-weight:600;color:#46576a}
label input,label select,label textarea{display:block;margin-top:8px;font-weight:400}
label small{display:block;color:#8491a0;font-size:11px;margin-top:5px}
.device-form h2{border-bottom:1px solid #edf0f4;padding-bottom:12px;margin-top:28px}
.device-form h2:first-of-type{margin-top:0}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 22px}
.form-grid .wide{grid-column:1/-1}
.form-actions{display:flex;gap:12px;margin-top:25px}
.flash{padding:12px 16px;border-radius:8px;margin-bottom:16px}
.flash.success{background:#e8f5ec;color:#25633e}
.flash.danger{background:#fff0ee;color:#a3392d}
.flash.warning{background:#fff7e5;color:#8a641c}
.detail-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:20px}
.detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 22px}
.detail-item{padding:13px 0;border-bottom:1px solid #edf0f4;min-width:0}
.detail-item span{display:block;color:#8996a5;font-size:12px;margin-bottom:6px}
.detail-item strong{font-weight:500;overflow-wrap:anywhere}
.qr-panel{text-align:center;align-self:start}
.qr-panel h2{text-align:left}
.qr-image{display:block;width:190px;height:190px;object-fit:contain;margin:10px auto 15px}
.qr-panel .button-link{margin-top:12px}
.warning-text{color:#986b16;background:#fff7e6;padding:10px;border-radius:7px;font-size:12px;line-height:1.6;text-align:left;margin-top:15px}
.metadata{margin:10px 0 25px}
.login-wrap{min-height:70vh;display:grid;place-items:center}
.login-card{width:min(420px,100%);padding:34px}
.login-symbol{font-size:34px;text-align:center}
.login-card h1{text-align:center;font-size:22px;margin-top:10px}
.login-card>p{text-align:center;margin:8px 0 24px}
.login-card label{margin:16px 0}
.login-card .full{width:100%;margin-top:12px}
.heading-actions{display:flex;gap:10px}
@media(max-width:800px){
 .topbar{flex-wrap:wrap;padding:12px 18px;gap:12px}
 .topbar nav{order:3;width:100%;gap:18px}
 .stats{grid-template-columns:repeat(2,1fr)}
 .detail-layout{grid-template-columns:1fr}
 .qr-panel{order:-1}
}
@media(max-width:540px){
 .container{padding:0 12px;margin:18px auto}
 .page-heading{align-items:flex-start;flex-direction:column}
 .stats{gap:9px}
 .stat-card{padding:14px}
 .form-grid,.detail-grid{grid-template-columns:1fr}
 .form-grid .wide{grid-column:auto}
 .search-form{flex-wrap:wrap}
 .search-form input{max-width:none;flex-basis:100%}
 .login-card{padding:24px}
 .heading-actions{flex-wrap:wrap}
}

/* 设备技术档案上传 */
.upload-box {
    background: #f7f9fc;
    border: 1px dashed #b9c9d9;
    border-radius: 10px;
    padding: 20px;
    margin: 20px 0;
}

.upload-box h3 {
    margin: 0 0 18px;
    font-size: 16px;
    color: #284966;
}

.upload-box .form-actions {
    margin-top: 18px;
}

.upload-box input[type=file] {
    background: #fff;
}

.upload-box small {
    line-height: 1.7;
}

.panel-heading p {
    margin-top: 5px;
}


/* 二维码批量打印管理页面 */
.print-summary {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin: 16px 0;
    gap: 12px;
}

.print-toolbar > .panel {
    margin-bottom: 22px;
}

.print-notice {
    margin-top: 12px;
}

.qr-sheet {
    width: 196mm;
    height: 283mm;
    margin: 16px auto;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(4, 1fr);
    gap: 2mm;
    background: white;
    box-sizing: border-box;
}

.qr-label {
    border: .35mm solid #8d9aaa;
    border-radius: 2mm;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    padding: 2mm;
    min-width: 0;
    overflow: hidden;
    background: white;
    color: #172b40;
    break-inside: avoid;
}

.label-company {
    font-size: 8pt;
    font-weight: 700;
    margin-bottom: 1mm;
}

.label-heading {
    font-size: 8pt;
    margin-bottom: 2mm;
}

.label-code {
    font-size: 12pt;
    font-weight: 800;
    letter-spacing: .3mm;
    margin-bottom: 1.5mm;
    overflow-wrap: anywhere;
}

.label-name {
    font-size: 9pt;
    font-weight: 600;
    line-height: 1.4;
    max-width: 100%;
    overflow-wrap: anywhere;
}

.label-area {
    font-size: 8pt;
    color: #536579;
    margin-top: 1mm;
    overflow-wrap: anywhere;
}

.qr-label img {
    display: block;
    width: 34mm;
    height: 34mm;
    object-fit: contain;
    margin: 2mm auto;
}

.label-hint {
    font-size: 7.5pt;
    margin-top: 1mm;
    font-weight: 600;
}

@media print {
    @page {
        size: A4 portrait;
        margin: 7mm;
    }

    html, body {
        margin: 0 !important;
        padding: 0 !important;
        background: white !important;
    }

    .topbar, footer, .print-toolbar {
        display: none !important;
    }

    .container {
        width: 196mm !important;
        max-width: none !important;
        margin: 0 !important;
        padding: 0 !important;
    }

    .qr-sheet {
        width: 196mm !important;
        height: 283mm !important;
        margin: 0 !important;
        padding: 0 !important;
        gap: 2mm !important;
        break-after: page;
        page-break-after: always;
    }

    .qr-sheet:last-of-type {
        break-after: auto;
        page-break-after: auto;
    }

    .qr-label {
        border-color: #9aa5b1 !important;
        -webkit-print-color-adjust: exact;
        print-color-adjust: exact;
    }

    a {
        color: inherit !important;
        text-decoration: none !important;
    }
}
