*{box-sizing:border-box}body{margin:0;font-family:"Microsoft YaHei",system-ui,sans-serif;color:#142033;background:#f5f7fb}button,input,select,textarea{font:inherit}.hidden{display:none!important}.login-view{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 20% 10%,#315fbe 0,#142d54 40%,#0f203b 100%)}.login-card{width:390px;padding:40px;background:#fff;border-radius:22px;box-shadow:0 24px 70px #06152d80}.logo{width:58px;height:58px;display:grid;place-items:center;border-radius:16px;background:#2d6df6;color:white;font-size:26px;font-weight:800}.login-card h1{margin:22px 0 6px}.login-card p{color:#748197;margin:0 0 28px}.login-card label{display:block;margin:15px 0;color:#526077;font-size:13px}.login-card input,.form-panel input,.form-panel select,.panel-head input{width:100%;margin-top:8px;border:1px solid #d9e0ec;border-radius:10px;padding:11px 13px;outline:none}.login-card input:focus,.form-panel input:focus,.panel-head input:focus{border-color:#2d6df6;box-shadow:0 0 0 3px #2d6df61b}button{border:0;border-radius:10px;padding:11px 16px;background:#2d6df6;color:white;font-weight:700;cursor:pointer}.login-card button{width:100%;margin-top:12px}.error{min-height:20px;color:#dc3e4a;font-size:13px;margin-top:12px}.admin-view{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.admin-view aside{position:fixed;inset:0 auto 0 0;width:240px;background:#122a4a;padding:24px 18px;color:white}.brand{display:flex;gap:12px;align-items:center;padding:4px 8px 30px}.brand>span{width:42px;height:42px;display:grid;place-items:center;background:#3478ff;border-radius:12px;font-size:20px;font-weight:800}.brand strong,.brand small{display:block}.brand small{color:#8ea8cb;margin-top:3px}.nav,.logout{display:block;width:100%;margin:6px 0;text-align:left;background:transparent;color:#aec0d9;font-weight:600}.nav.active,.nav:hover{background:#214774;color:#fff}.logout{position:absolute;bottom:22px;width:calc(100% - 36px);color:#ffb8bd}.admin-view main{grid-column:2;padding:32px;min-width:0}.admin-view header{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.admin-view header h1{margin:0 0 5px}.admin-view header p{margin:0;color:#7b8798}.ghost{background:white;color:#2d6df6;border:1px solid #dce3ef}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.stats article,.panel{background:white;border:1px solid #e5eaf2;border-radius:16px;padding:22px;box-shadow:0 4px 16px #2338560d}.stats span{color:#6e7b8e}.stats strong{font-size:34px;display:block;margin-top:14px}.quick{margin-top:20px;display:flex;justify-content:space-between;align-items:center}.quick h2,.panel h2{margin:0 0 6px}.quick p,.panel p{margin:0;color:#7b8798}.form-panel{display:grid;grid-template-columns:1fr 120px 140px 220px 110px;align-items:end;gap:14px;margin-bottom:18px}.form-panel label{font-size:13px;color:#526077}.form-panel button{height:43px}.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.panel-head input{width:300px;margin:0}.panel-head>div{display:flex;gap:8px}.table-wrap{overflow:auto;max-height:calc(100vh - 240px)}table{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap}th,td{text-align:left;padding:12px;border-bottom:1px solid #edf0f5}th{position:sticky;top:0;background:#f8faff;color:#617087}.badge{padding:4px 8px;border-radius:99px;font-size:11px;font-weight:700}.badge.unused{background:#eaf2ff;color:#2d6df6}.badge.active{background:#e6f7ef;color:#18835b}.badge.disabled{background:#ffeaec;color:#cb3542}.actions{display:flex;gap:5px}.actions button{padding:6px 8px;font-size:11px}.actions .warn{background:#fff1f2;color:#d93b47}.actions .muted{background:#edf2fa;color:#3d5b82}dialog{width:620px;border:0;border-radius:18px;padding:28px;box-shadow:0 20px 80px #14233e5c}dialog::backdrop{background:#0e1a2d91}.dialog-close{position:absolute;right:16px;top:14px;background:transparent;color:#5d6b80;font-size:24px}.dialog textarea{width:100%;height:270px;margin:14px 0;border:1px solid #dce3ed;border-radius:10px;padding:12px;font-family:Consolas,monospace}.dialog-actions{display:flex;justify-content:flex-end;gap:10px}.toast{position:fixed;right:28px;bottom:28px;background:#142a49;color:white;padding:12px 18px;border-radius:10px;opacity:0;transform:translateY(10px);transition:.2s;pointer-events:none}.toast.show{opacity:1;transform:none}@media(max-width:1000px){.stats{grid-template-columns:repeat(2,1fr)}.form-panel{grid-template-columns:1fr 1fr}.form-panel>div{grid-column:1/-1}.admin-view{grid-template-columns:200px 1fr}.admin-view aside{width:200px}.admin-view main{padding:22px}.panel-head{align-items:flex-start;gap:10px;flex-direction:column}}
#libraryPage .library-stats strong{font-size:28px;overflow-wrap:anywhere}#libraryPage .library-stats .version-text{font-size:17px;line-height:1.5}#libraryPage .library-stats .date-text{font-size:16px;line-height:1.5}#libraryPage .library-upload-panel,#libraryPage .library-history-panel{margin-top:20px}#libraryPage .panel-head>div{display:block}#libraryPage .panel-head p{line-height:1.7}#libraryPage .library-file-label,#libraryPage .library-note-label{display:block;color:#526077;font-size:13px}#libraryPage input[type=file],#libraryPage textarea{display:block;width:100%;margin-top:8px;border:1px solid #d9e0ec;border-radius:10px;padding:12px;background:#fff;color:#142033;font:inherit}#libraryPage textarea{resize:vertical;min-height:90px;max-height:260px}#libraryPage input[type=file]:focus-visible,#libraryPage textarea:focus{outline:0;border-color:#2d6df6;box-shadow:0 0 0 3px #2d6df61b}#libraryPage .library-file-info{font-size:12px;line-height:1.7;margin-top:8px;overflow-wrap:anywhere}#libraryPage .library-help{margin:14px 0 20px;padding:12px 14px;background:#f5f8fd;border-radius:10px}#libraryPage .library-help p{font-size:12px;line-height:1.8;color:#617087}#libraryPage .library-progress{margin-top:20px}#libraryPage .library-progress-head{display:flex;justify-content:space-between;gap:16px;margin-bottom:8px;color:#526077;font-size:13px}#libraryPage progress{display:block;width:100%;height:12px;accent-color:#2d6df6}#libraryPage .library-upload-actions{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:20px}#libraryPage .library-upload-actions span{font-size:12px;line-height:1.7;color:#7b8798}#libraryPage .library-status{margin-top:14px;font-size:13px;line-height:1.8;overflow-wrap:anywhere}#libraryPage .library-status:empty{display:none}#libraryPage .library-status.is-error{color:#cb3542}#libraryPage .library-status.is-success{color:#18835b}#libraryPage button:disabled{opacity:.6;cursor:wait}#libraryPage input:disabled,#libraryPage textarea:disabled{background:#f6f8fb;color:#718096}#libraryPage .library-history-table .release-notes{white-space:pre-wrap;min-width:210px;max-width:460px;overflow-wrap:anywhere;line-height:1.7}#libraryPage .library-current-badge{margin-left:8px}#libraryPage .empty-cell{text-align:center;padding:28px;color:#7b8798}#libraryPage .table-wrap{max-height:400px}@media(max-width:700px){#libraryPage .library-stats{grid-template-columns:1fr}#libraryPage .library-upload-actions{align-items:flex-start;flex-direction:column}#libraryPage .library-upload-actions button{width:100%}}
#softwarePage .software-stats strong{font-size:28px;overflow-wrap:anywhere}
#softwarePage .software-stats .version-text{font-size:20px;line-height:1.5}
#softwarePage .software-stats .date-text{font-size:16px;line-height:1.5}
#softwarePage .software-upload-panel,#softwarePage .software-history-panel{margin-top:20px}
#softwarePage .panel-head>div{display:block}
#softwarePage .panel-head p{line-height:1.7}
#softwarePage .software-file-label,#softwarePage .software-note-label,#softwarePage .software-version-fields label{display:block;color:#526077;font-size:13px}
#softwarePage input,#softwarePage textarea{display:block;width:100%;margin-top:8px;border:1px solid #d9e0ec;border-radius:10px;padding:12px;background:#fff;color:#142033;font:inherit}
#softwarePage .software-version-fields{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:20px}
#softwarePage textarea{resize:vertical;min-height:90px;max-height:260px}
#softwarePage input:focus-visible,#softwarePage textarea:focus{outline:0;border-color:#2d6df6;box-shadow:0 0 0 3px #2d6df61b}
#softwarePage .software-file-info{font-size:12px;line-height:1.7;margin-top:8px;overflow-wrap:anywhere}
#softwarePage .software-help{margin:14px 0 20px;padding:12px 14px;background:#f5f8fd;border-radius:10px}
#softwarePage .software-help p{font-size:12px;line-height:1.8;color:#617087}
#softwarePage .software-progress{margin-top:20px}
#softwarePage .software-progress-head{display:flex;justify-content:space-between;gap:16px;margin-bottom:8px;color:#526077;font-size:13px}
#softwarePage progress{display:block;width:100%;height:12px;accent-color:#2d6df6}
#softwarePage .software-upload-actions{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:20px}
#softwarePage .software-upload-actions span{font-size:12px;line-height:1.7;color:#7b8798}
#softwarePage .software-status{margin-top:14px;font-size:13px;line-height:1.8;overflow-wrap:anywhere}
#softwarePage .software-status:empty{display:none}
#softwarePage .software-status.is-error{color:#cb3542}
#softwarePage .software-status.is-success{color:#18835b}
#softwarePage button:disabled{opacity:.6;cursor:wait}
#softwarePage input:disabled,#softwarePage textarea:disabled{background:#f6f8fb;color:#718096}
#softwarePage .software-history-table .release-notes{white-space:pre-wrap;min-width:210px;max-width:460px;overflow-wrap:anywhere;line-height:1.7}
#softwarePage .software-current-badge{margin-left:8px}
#softwarePage .empty-cell{text-align:center;padding:28px;color:#7b8798}
#softwarePage .table-wrap{max-height:400px}
@media(max-width:700px){#softwarePage .software-stats,#softwarePage .software-version-fields{grid-template-columns:1fr}#softwarePage .software-upload-actions{align-items:flex-start;flex-direction:column}#softwarePage .software-upload-actions button{width:100%}}
