:root{color-scheme:light;--accent:#ee4d2d;--accent-dark:#cf381d;--ink:#1f2937;--muted:#6b7280;--line:#e5e7eb;--surface:#fff;--soft:#f7f8fa;--green:#079455;--red:#d92d20;--amber:#b54708;font-family:"Microsoft YaHei UI","PingFang SC",system-ui,sans-serif}
*{box-sizing:border-box}body{margin:0;background:#f3f5f8;color:var(--ink)}button,input,select,textarea{font:inherit}.hidden{display:none!important}.shell{min-height:100vh}.login-card{width:min(430px,calc(100vw - 32px));margin:10vh auto 0;padding:38px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 20px 60px rgba(17,24,39,.09);text-align:center}.brand-mark{display:inline-grid;place-items:center;width:52px;height:52px;border-radius:14px;background:linear-gradient(145deg,#ff765a,var(--accent));color:#fff;font-size:26px;font-weight:800}.brand-mark.small{width:32px;height:32px;border-radius:9px;font-size:17px;margin-right:10px;vertical-align:middle}.login-card h1{margin:18px 0 7px;font-size:24px}.login-card p,.panel-heading p{margin:0;color:var(--muted);font-size:13px}.login-card form{display:grid;gap:16px;margin-top:30px;text-align:left}label{display:grid;gap:7px;color:#344054;font-size:13px;font-weight:600}input,select,textarea{width:100%;border:1px solid #d0d5dd;border-radius:9px;background:#fff;padding:10px 12px;outline:none;transition:.18s}input:focus,select:focus,textarea:focus{border-color:#ff8c76;box-shadow:0 0 0 3px rgba(238,77,45,.12)}textarea{resize:vertical}.primary,.ghost,.tab,.icon-button{border:0;border-radius:8px;padding:9px 15px;cursor:pointer}.primary{background:var(--accent);color:#fff;font-weight:700}.primary:hover{background:var(--accent-dark)}.primary:disabled{opacity:.55;cursor:not-allowed}.ghost{background:#fff;border:1px solid var(--line);color:#344054}.wide{width:100%;padding:11px}.form-error{min-height:20px;color:var(--red);font-size:13px;margin-top:10px}.form-message{min-height:20px;color:var(--green);font-size:13px}.form-message.error{color:var(--red)}.app-view{min-height:100vh}.topbar{height:64px;padding:0 32px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.topbar-actions{display:flex;align-items:center;gap:14px;font-size:13px}.stats{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:14px;max-width:1500px;margin:24px auto;padding:0 24px}.stat-card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:17px}.stat-card span{display:block;color:var(--muted);font-size:12px}.stat-card strong{display:block;font-size:27px;margin-top:5px}.tabs{max-width:1500px;margin:0 auto;padding:0 24px;display:flex;gap:6px}.tab{background:transparent;color:var(--muted);border-bottom:2px solid transparent;border-radius:8px 8px 0 0}.tab.active{background:#fff;color:var(--accent);border-bottom-color:var(--accent);font-weight:700}.panel{max-width:1500px;margin:0 auto 40px;padding:22px 24px 30px;background:#fff;border:1px solid var(--line);border-radius:0 12px 12px 12px}.panel-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.panel-heading h2{margin:0 0 6px;font-size:19px}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:11px}table{border-collapse:collapse;width:100%;min-width:950px}th,td{padding:13px 15px;text-align:left;border-bottom:1px solid #edf0f3;font-size:13px}th{background:#f8fafc;color:#667085;font-size:12px}tr:last-child td{border-bottom:0}.device-code{font-family:Consolas,monospace;font-size:12px;color:#475467}.subtext{color:var(--muted);font-size:12px;margin-top:4px}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:700}.badge.active{background:#ecfdf3;color:var(--green)}.badge.disabled{background:#fef3f2;color:var(--red)}.badge.expired{background:#fffaeb;color:var(--amber)}.row-actions{display:flex;gap:7px}.row-actions button{border:1px solid var(--line);background:#fff;border-radius:7px;padding:6px 9px;cursor:pointer;font-size:12px}.row-actions .danger{color:var(--red);border-color:#fecdca}.empty{padding:45px;text-align:center;color:var(--muted)}.version-grid{display:grid;grid-template-columns:minmax(360px,540px) 1fr;gap:24px}.form-card,.version-list-card{border:1px solid var(--line);border-radius:12px;padding:20px}.form-card{display:grid;gap:16px}.inline-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.version-list-card h3{margin-top:0}.version-item{display:flex;justify-content:space-between;padding:13px 0;border-bottom:1px solid var(--line);font-size:13px}.version-item:last-child{border-bottom:0}.upload-progress{height:8px;border-radius:999px;background:#f1f3f5;overflow:hidden}.upload-progress span{display:block;width:0;height:100%;background:var(--accent);transition:width .2s}.modal-backdrop{position:fixed;inset:0;background:rgba(16,24,40,.48);z-index:50;display:grid;place-items:center;padding:20px}.modal{width:min(620px,100%);background:#fff;border-radius:16px;box-shadow:0 24px 80px rgba(16,24,40,.24);overflow:hidden}.modal>header{display:flex;justify-content:space-between;padding:21px 24px;border-bottom:1px solid var(--line)}.modal h2{margin:0 0 5px;font-size:19px}.modal header p{margin:0;color:var(--muted);font-size:12px}.icon-button{font-size:22px;background:transparent;padding:3px 9px}.modal form{display:grid;gap:15px;padding:22px 24px}.modal footer{display:flex;justify-content:flex-end;gap:10px;padding-top:4px}.toast{position:fixed;right:24px;bottom:24px;z-index:80;background:#101828;color:#fff;border-radius:10px;padding:12px 16px;box-shadow:0 12px 35px rgba(0,0,0,.2);font-size:13px}@media(max-width:850px){.stats{grid-template-columns:repeat(2,1fr)}.version-grid{grid-template-columns:1fr}.inline-fields{grid-template-columns:1fr}.topbar{padding:0 16px}.panel,.tabs,.stats{padding-left:14px;padding-right:14px}}
.primary:disabled,.ghost:disabled{opacity:.55;cursor:not-allowed}.field-hint{margin:0;color:var(--muted);font-size:12px}.modal.compact{width:min(470px,100%)}.audit-table{min-width:1100px}.audit-details{max-width:360px;white-space:normal;overflow-wrap:anywhere;color:var(--muted)}.pager{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:14px;color:var(--muted);font-size:12px}@media(max-width:850px){.topbar-actions{gap:6px}.topbar-actions #adminName{display:none}}
.announcement-table{min-width:1120px}.announcement-table th:first-child{width:38%}.announcement-title-line{display:flex;align-items:center;gap:8px}.announcement-preview{max-width:560px;margin-top:6px;color:var(--muted);font-size:12px;line-height:1.55;white-space:pre-line;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.pin-mark{display:inline-flex;padding:2px 6px;border-radius:5px;background:#fff0ec;color:var(--accent);font-size:11px;font-weight:700}.announcement-type{display:inline-flex;padding:4px 8px;border-radius:7px;background:#f2f4f7;color:#475467;font-size:12px;font-weight:700}.announcement-type.incident{background:#fef3f2;color:var(--red)}.announcement-type.maintenance{background:#fff6ed;color:var(--amber)}.announcement-type.bugfix{background:#eef4ff;color:#3538cd}.announcement-type.update{background:#ecfdf3;color:var(--green)}.severity-text{margin-top:7px;font-size:12px}.severity-text.critical{color:var(--red);font-weight:700}.severity-text.warning{color:var(--amber);font-weight:700}.announcement-status.draft,.announcement-status.withdrawn,.announcement-status.ended{background:#f2f4f7;color:#667085}.announcement-status.published{background:#ecfdf3;color:var(--green)}.announcement-status.scheduled{background:#eef4ff;color:#3538cd}.announcement-actions{flex-wrap:wrap}.announcement-actions .publish-action{color:var(--green);border-color:#abefc6}.announcement-actions .warning-action{color:var(--amber);border-color:#fedf89}.announcement-modal{width:min(760px,100%)}.announcement-modal form{max-height:calc(100vh - 150px);overflow:auto}.announcement-time-fields{grid-template-columns:1fr 1fr .65fr}.checkbox-field{display:flex;grid-template-columns:auto 1fr;align-items:center;align-self:end;min-height:40px;padding:9px 12px;border:1px solid #d0d5dd;border-radius:9px}.checkbox-field input{width:16px;height:16px;margin:0}.row-actions button:disabled{opacity:.55;cursor:wait}@media(max-width:850px){.announcement-fields,.announcement-time-fields{grid-template-columns:1fr}.checkbox-field{align-self:auto}}
.release-whitelist-field{display:grid;gap:10px;padding:14px;border:1px solid #fed7aa;border-radius:10px;background:#fffaf5}.release-whitelist-heading{display:flex;align-items:center;justify-content:space-between;font-size:13px}.release-whitelist-heading span{color:var(--accent);font-size:12px;font-weight:700}.release-whitelist-options{display:grid;gap:7px;max-height:210px;overflow:auto;padding-right:3px}.release-whitelist-option{display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center;padding:9px 10px;border:1px solid #f2f4f7;border-radius:8px;background:#fff;cursor:pointer}.release-whitelist-option input{width:16px;height:16px;margin:0}.release-whitelist-option strong{display:block;font-size:12px}.release-whitelist-option small{display:block;margin-top:3px;color:var(--muted);font-family:Consolas,monospace}.release-whitelist-option.disabled{opacity:.55;cursor:not-allowed}.release-status-badge{display:inline-flex;margin-left:7px;border-radius:999px;padding:3px 8px;font-size:11px;font-weight:700}.release-status-badge.whitelist{background:#fff6ed;color:var(--amber)}.release-status-badge.production{background:#ecfdf3;color:var(--green)}.version-item-main{min-width:0}.version-item-side{display:flex;align-items:flex-end;gap:8px;flex-direction:column}.version-item .promote-version{border:1px solid #abefc6;background:#fff;color:var(--green);border-radius:7px;padding:6px 9px;cursor:pointer;font-size:12px}.version-item .promote-version:disabled{opacity:.55;cursor:wait}
.access-log-filters{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:12px;margin-bottom:18px;padding:16px;border:1px solid var(--line);border-radius:11px;background:var(--soft)}.access-log-filter-actions{display:flex;align-items:flex-end;gap:8px}.access-log-table{min-width:1450px}.access-log-request-id,.access-log-route{margin-top:5px;color:var(--muted);font-family:Consolas,monospace;font-size:11px;overflow-wrap:anywhere}.access-log-user-agent{max-width:300px;white-space:normal;overflow-wrap:anywhere;color:var(--muted)}.http-method{font-family:Consolas,monospace}.http-status.success{background:#ecfdf3;color:var(--green)}.http-status.redirect{background:#eef4ff;color:#3538cd}.http-status.client-error{background:#fff6ed;color:var(--amber)}.http-status.server-error{background:#fef3f2;color:var(--red)}.signature-result{display:inline-flex;margin-top:6px;border-radius:999px;padding:3px 7px;font-size:11px;font-weight:700}.signature-result.passed{background:#ecfdf3;color:var(--green)}.signature-result.failed{background:#fef3f2;color:var(--red)}.signature-result.not-checked{background:#f2f4f7;color:#667085}@media(max-width:850px){.access-log-filters{grid-template-columns:1fr}.access-log-filter-actions{align-items:center}}
