:root{--bg:#f5f6f8;--surface:#fff;--surface-muted:#f8fafc;--surface-hover:#f1f5f9;--border:#e2e8f0;--border-strong:#cbd5e1;--text:#0f172a;--text-soft:#334155;--muted:#64748b;--muted-soft:#94a3b8;--primary:#0b74c8;--primary-hover:#075faa;--primary-soft:#eaf4ff;--success:#16a34a;--warning:#d97706;--danger:#dc2626;--danger-soft:#fff1f2;--shadow-panel:0 1px 2px #0f172a0a;font-family:Inter,Microsoft YaHei,PingFang SC,system-ui,sans-serif}*{box-sizing:border-box}body{color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;font-size:14px}button,input,select{font:inherit}button{white-space:nowrap}.admin-shell{min-height:100vh;display:flex}.sidebar{border-right:1px solid var(--border);background:linear-gradient(#fff 0%,#f8fafc 100%);flex:0 0 208px;width:208px;padding:14px 12px}.brand{align-items:center;gap:9px;height:40px;margin-bottom:16px;padding:0 2px;display:flex}.brand-mark,.login-mark{border-radius:7px;flex-shrink:0;width:28px;height:28px;display:block}.brand strong{font-size:15px;line-height:20px;display:block}.brand span{color:var(--muted);font-size:12px;line-height:18px}.nav-list{gap:4px;display:grid}.nav-item{height:34px;color:var(--text-soft);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:0 11px;transition:background .14s,color .14s;display:flex}.nav-item:hover{background:var(--surface-hover);color:var(--text)}.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:700}.main{flex:1;min-width:0}.topbar{border-bottom:1px solid var(--border);height:52px;color:var(--muted);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffffff0;justify-content:space-between;align-items:center;padding:0 20px;font-size:13px;display:flex}.admin-user{color:var(--text);align-items:center;gap:8px;display:flex}.header-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.content{padding:20px}.page-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px;display:flex}.page-header h1{letter-spacing:0;margin:0;font-size:24px;line-height:32px}.page-header p{color:var(--muted);max-width:620px;margin:3px 0 0;font-size:14px;line-height:20px}.primary-btn,.outline-btn,.danger-btn,.text-btn{cursor:pointer;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;gap:8px;min-width:72px;height:36px;padding:0 12px;font-size:13px;font-weight:600;transition:background .14s,border-color .14s,color .14s,box-shadow .14s;display:inline-flex}.primary-btn{border-color:var(--primary);background:var(--primary);color:#fff;min-width:104px}.primary-btn:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.outline-btn{border:1px solid var(--border);background:var(--surface);color:var(--text-soft)}.outline-btn:hover{background:var(--surface-hover);color:var(--text)}.danger-btn{color:var(--danger);background:#fff;border:1px solid #fecaca}.danger-btn:hover{background:var(--danger-soft)}.text-btn{min-width:0;height:32px;color:var(--primary);background:0 0;border:0}button:disabled{cursor:not-allowed;opacity:.6}.upload-panel,.table-panel,.login-panel,.settings-panel{border:1px solid var(--border);background:var(--surface);box-shadow:var(--shadow-panel);border-radius:8px}.table-panel{overflow-x:auto}.upload-panel{grid-template-columns:160px 200px minmax(220px,1fr);align-items:end;gap:14px;margin-bottom:12px;padding:14px;display:grid}.field{gap:6px;display:grid}.field span{color:var(--text-soft);font-size:13px;font-weight:600;line-height:18px}.field input,.field select,.field textarea{border:1px solid var(--border-strong);width:100%;color:var(--text);background:#fff;border-radius:6px;outline:none;transition:border-color .14s,box-shadow .14s}.field input,.field select{height:36px;padding:0 12px}.field textarea{resize:vertical;min-height:96px;padding:8px 12px;line-height:20px}.field input:hover,.field select:hover,.field textarea:hover{border-color:#94a3b8}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #0e7ad41f}.field input[type=number]{appearance:textfield}.file-field input{padding-top:7px}.message{min-height:30px;color:var(--success);background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;align-items:center;margin:0 0 12px;padding:0 10px;font-size:13px;display:inline-flex}.message.error,.error{color:var(--danger);background:#fff1f2;border-color:#fecaca}.table-toolbar{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;height:60px;padding:0 16px;display:flex}.table-toolbar strong{font-size:16px;line-height:24px;display:block}.table-toolbar span{color:var(--muted);font-size:12px}.table-head,.table-row{grid-template-columns:72px 76px 58px minmax(110px,1fr) 64px 118px 58px;align-items:center;column-gap:8px;min-width:0;padding:0 14px;display:grid}.table-head{background:var(--surface-muted);height:44px;color:var(--muted);font-size:12px;font-weight:700}.table-row{border-top:1px solid var(--border);min-height:48px;color:var(--text-soft);font-size:14px;transition:background .14s}.table-row:hover{background:#fbfdff}.table-row .danger-btn{gap:4px;width:58px;min-width:58px;padding:0 8px}.filename{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mono{color:var(--text);font-family:Consolas,Geist Mono,monospace;font-size:13px}.badge{background:var(--primary-soft);width:fit-content;height:24px;color:var(--primary);border-radius:6px;align-items:center;padding:0 8px;font-size:12px;font-weight:700;display:inline-flex}.badge.success{color:var(--success);background:#dcfce7}.badge.warning{color:var(--warning);background:#fffbeb}.badge.muted{color:var(--muted);background:#f1f5f9}.empty-row{color:var(--muted);text-align:center;padding:28px 20px;font-size:14px}.settings-panel{max-width:920px;padding:0;overflow:hidden}.settings-tabs{border-bottom:1px solid var(--border);background:#f9fafb;gap:4px;padding:8px 10px;display:flex}.settings-tabs button{height:32px;color:var(--text-soft);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;padding:0 12px;font-size:13px;font-weight:700}.settings-tabs button:hover{border-color:var(--border);background:#fff}.settings-tabs button.active{border-color:var(--primary);color:var(--primary);background:#fff;box-shadow:0 1px 2px #0f172a0d}.section-title{border-bottom:1px solid var(--border);background:var(--surface-muted);justify-content:space-between;align-items:center;gap:16px;min-height:68px;margin-bottom:0;padding:14px 16px;display:flex}.section-title strong{font-size:16px;line-height:24px;display:block}.section-title span{color:var(--muted);font-size:13px;line-height:20px}.form-grid{grid-template-columns:repeat(2,minmax(240px,1fr));gap:16px;padding:16px;display:grid}.full-field{grid-column:1/-1}.inline-options{border-top:1px solid var(--border);padding:12px 16px}.switch,.check-row{color:var(--muted);align-items:center;gap:8px;font-size:13px;font-style:normal;display:inline-flex}.switch input{opacity:0;position:absolute}.switch span{background:#cbd5e1;border-radius:999px;width:38px;height:22px;transition:background .15s;position:relative}.switch span:after{content:"";background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .15s;position:absolute;top:3px;left:3px}.switch input:checked+span{background:var(--primary)}.switch input:checked+span:after{transform:translate(16px)}.switch em{color:var(--text);font-style:normal}.check-row input{width:16px;height:16px;accent-color:var(--primary)}.login-page{background:radial-gradient(circle at top left, #eaf4ff 0, transparent 30%), var(--bg);place-items:center;min-height:100vh;padding:20px;display:grid}.login-panel{width:min(360px,100%);padding:22px;box-shadow:0 16px 40px #0f172a14}.login-head{gap:12px;margin-bottom:20px;display:flex}.login-head h1{margin:0;font-size:22px;line-height:30px}.login-head p{color:var(--muted);margin:2px 0 0;font-size:13px;line-height:20px}.login-panel .primary-btn{width:100%;margin-top:16px}.relay-strategy-panel{border:1px solid var(--border);background:var(--surface);max-width:920px;box-shadow:var(--shadow-panel);border-radius:8px;margin-bottom:14px;overflow:hidden}.compact-title{min-height:60px}.relay-strategy-panel .primary-btn span{color:#fff}.relay-strategy-grid{grid-template-columns:minmax(240px,320px) minmax(160px,220px)}.relay-table-head,.relay-table-row{grid-template-columns:74px minmax(130px,.9fr) minmax(190px,1.3fr) 104px 128px 128px 132px 142px;align-items:center;column-gap:10px;min-width:1120px;padding:0 14px;display:grid}.relay-table-head{background:var(--surface-muted);height:44px;color:var(--muted);font-size:12px;font-weight:700}.relay-table-row{border-top:1px solid var(--border);min-height:52px;color:var(--text-soft)}.relay-name{color:var(--text);font-size:14px;font-weight:600;line-height:20px;display:block}.relay-id{color:var(--muted);font-style:normal;display:block}.row-actions{gap:6px;display:flex}.icon-text-btn{gap:5px;min-width:64px;height:32px;padding:0 8px}.modal-mask{z-index:50;background:#0f172a61;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal-panel{border:1px solid var(--border);background:#fff;border-radius:8px;width:min(720px,100%);max-height:calc(100vh - 40px);overflow:auto;box-shadow:0 18px 48px #0f172a2e}.modal-head,.modal-foot{justify-content:space-between;align-items:center;gap:12px;padding:16px 20px;display:flex}.modal-head{border-bottom:1px solid var(--border)}.modal-head strong{font-size:16px;line-height:24px;display:block}.modal-head span{color:var(--muted);font-size:13px;line-height:20px}.modal-foot{border-top:1px solid var(--border);justify-content:flex-end}.relay-options{border-top:0}.relay-check{align-self:end;min-height:36px}.secret-box{background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px;margin:0 16px 16px;padding:12px}.secret-box strong{color:var(--primary);margin-bottom:8px;font-size:13px;line-height:18px;display:block}.secret-box pre{color:var(--text);margin:0;font-family:Consolas,Geist Mono,monospace;font-size:13px;line-height:20px;overflow-x:auto}@media (width<=900px){.admin-shell{display:block}.sidebar{border-right:0;border-bottom:1px solid var(--border);flex:none;width:auto}.page-header{flex-direction:column;align-items:flex-start}.header-actions{width:100%}.header-actions .primary-btn,.header-actions .outline-btn{flex:1}.settings-tabs{flex-wrap:wrap}.settings-tabs button{flex:120px}.upload-panel,.form-grid,.table-head,.table-row{grid-template-columns:1fr;gap:8px;height:auto;padding:14px}}
