xiaoyukkkk's picture
Upload admin.css
f7f20ac verified
:root {
--bg-body: #f5f5f7;
--text-main: #1d1d1f;
--text-sec: #86868b;
--border: #d2d2d7;
--border-light: #e5e5ea;
--blue: #0071e3;
--red: #ff3b30;
--green: #34c759;
--orange: #ff9500;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Helvetica, Arial, sans-serif;
background-color: var(--bg-body);
color: var(--text-main);
font-size: 13px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
padding: 30px 20px;
cursor: default;
}
.container { max-width: 1100px; margin: 0 auto; }
/* Header */
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
flex-wrap: wrap;
gap: 16px;
}
.header-info h1 {
font-size: 24px;
font-weight: 600;
letter-spacing: -0.5px;
color: var(--text-main);
margin-bottom: 4px;
}
.header-info .subtitle { font-size: 14px; color: var(--text-sec); }
.header-actions { display: flex; gap: 10px; }
/* Buttons */
.btn {
display: inline-flex;
align-items: center;
padding: 8px 16px;
background: #ffffff;
border: 1px solid var(--border-light);
border-radius: 8px;
color: var(--text-main);
font-weight: 500;
text-decoration: none;
transition: all 0.2s;
font-size: 13px;
cursor: pointer;
box-shadow: 0 1px 2px rgba(0,0,0,0.03);
}
.btn:hover { background: #fafafa; border-color: var(--border); text-decoration: none; }
.btn-primary { background: var(--blue); color: white; border: none; }
.btn-primary:hover { background: #0077ed; border: none; text-decoration: none; }
/* Alerts */
.alert {
padding: 12px 16px;
border-radius: 10px;
display: flex;
align-items: flex-start;
gap: 12px;
font-size: 13px;
border: 1px solid transparent;
margin-bottom: 12px;
position: relative;
}
.alert-icon { font-size: 16px; margin-top: 1px; flex-shrink: 0; }
.alert-content { flex: 1; }
.alert-desc { color: inherit; opacity: 0.75; margin-top: 4px; font-size: 11px; line-height: 1.4; }
.alert-link {
color: inherit;
text-decoration: none;
margin-left: 8px;
font-weight: 600;
cursor: pointer;
padding: 0;
border-radius: 4px;
display: inline;
transition: opacity 0.2s;
font-size: 13px;
}
.alert-link:hover {
opacity: 0.8;
text-decoration: none;
}
.alert-close {
background: none;
border: none;
color: inherit;
font-size: 20px;
line-height: 1;
cursor: pointer;
padding: 0;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
opacity: 0.6;
transition: opacity 0.2s;
flex-shrink: 0;
}
.alert-close:hover { opacity: 1; }
.alert-info { background: #eef7fe; border-color: #dcebfb; color: #1c5b96; }
.alert-success { background: #eafbf0; border-color: #d3f3dd; color: #15682e; }
.alert-warning { background: #fff8e6; border-color: #fcebc2; color: #9c6e03; }
.alert-error { background: #ffebeb; border-color: #fddddd; color: #c41e1e; }
.alert-primary { background: #f9fafb; border-color: #e5e7eb; color: #374151; }
/* API Endpoint Items */
.api-endpoint-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 12px;
background: rgba(0,0,0,0.02);
border-radius: 6px;
margin-bottom: 8px;
gap: 12px;
}
.api-endpoint-label {
font-size: 11px;
color: #86868b;
margin-bottom: 4px;
font-weight: 500;
}
.api-endpoint-value {
font-size: 11px;
background: rgba(0,0,0,0.05);
padding: 4px 8px;
border-radius: 4px;
display: inline-block;
word-break: break-all;
font-family: 'SF Mono', SFMono-Regular, Consolas, monospace;
}
.btn-copy {
background: none;
border: 1px solid #d2d2d7;
padding: 6px 10px;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
transition: all 0.2s;
flex-shrink: 0;
line-height: 1;
}
.btn-copy:hover {
background: #f0f0f2;
border-color: #b8b8bb;
}
.btn-copy.copied {
background: #34c759;
border-color: #34c759;
color: white;
}
/* Sections & Grids */
.section { margin-bottom: 30px; }
.section-title {
font-size: 15px;
font-weight: 600;
color: var(--text-main);
margin-bottom: 12px;
padding-left: 4px;
}
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; align-items: start; }
.grid-env { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: start; }
.stack-col { display: flex; flex-direction: column; gap: 16px; }
/* Cards */
.card {
background: #fafaf9;
padding: 20px;
border: 1px solid #e5e5e5;
border-radius: 12px;
transition: all 0.15s ease;
}
.card:hover { border-color: #d4d4d4; box-shadow: 0 0 8px rgba(0,0,0,0.08); }
.card h3 {
font-size: 13px;
font-weight: 600;
color: var(--text-sec);
margin-bottom: 12px;
padding-bottom: 8px;
border-bottom: 1px solid #f5f5f5;
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Account Table */
.account-table {
width: 100%;
border-collapse: collapse;
background: #fff;
border: 1px solid #e5e5e5;
border-radius: 12px;
overflow: hidden;
}
.account-table thead {
background: #fafaf9;
border-bottom: 2px solid #e5e5e5;
}
.account-table th {
padding: 12px 16px;
text-align: left;
font-size: 12px;
font-weight: 600;
color: #6b6b6b;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.account-table tbody tr {
border-bottom: 1px solid #f5f5f5;
transition: background 0.15s ease;
}
.account-table tbody tr:last-child {
border-bottom: none;
}
.account-table tbody tr:hover {
background: #fafaf9;
}
.account-table td {
padding: 14px 16px;
font-size: 13px;
color: var(--text-main);
vertical-align: middle;
}
.status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex-shrink: 0;
}
/* Tabs Navigation */
.tabs-nav {
display: flex;
gap: 4px;
border-bottom: 1px solid #e5e5e5;
margin-bottom: 24px;
padding: 0 4px;
}
.tab-button {
padding: 12px 20px;
background: none;
border: none;
font-size: 14px;
font-weight: 500;
color: #6b6b6b;
cursor: pointer;
transition: all 0.2s;
border-bottom: 2px solid transparent;
position: relative;
top: 1px;
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Helvetica, Arial, sans-serif;
line-height: 1.5;
display: flex;
align-items: center;
gap: 6px;
}
.tab-button:hover {
color: #1d1d1f;
background: #f5f5f5;
}
.tab-button.active {
color: #0071e3;
border-bottom-color: #0071e3;
font-weight: 600;
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
/* Small Buttons for Table */
.btn-sm {
padding: 4px 10px;
border-radius: 6px;
font-size: 11px;
cursor: pointer;
font-weight: 500;
transition: all 0.2s;
border: 1px solid;
}
.btn-delete {
background: #fff;
color: #dc2626;
border-color: #fecaca;
}
.btn-delete:hover {
background: #dc2626;
color: white;
border-color: #dc2626;
}
.btn-disable {
background: #fff;
color: #f59e0b;
border-color: #fed7aa;
}
.btn-disable:hover {
background: #f59e0b;
color: white;
border-color: #f59e0b;
}
.btn-enable {
background: #fff;
color: #10b981;
border-color: #a7f3d0;
}
.btn-enable:hover {
background: #10b981;
color: white;
border-color: #10b981;
}
/* Modal */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
z-index: 1000;
align-items: center;
justify-content: center;
}
.modal.show { display: flex; }
.modal-content {
background: white;
border-radius: 12px;
width: 90%;
max-width: 800px;
max-height: 90vh;
display: flex;
flex-direction: column;
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
}
.modal-header {
padding: 20px 24px;
border-bottom: 1px solid #e5e5e5;
display: flex;
justify-content: space-between;
align-items: center;
}
.modal-title { font-size: 18px; font-weight: 600; color: #1a1a1a; }
.modal-close {
background: none;
border: none;
font-size: 24px;
color: #6b6b6b;
cursor: pointer;
padding: 0;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 6px;
transition: all 0.2s;
}
.modal-close:hover { background: #f5f5f5; color: #1a1a1a; }
.modal-body {
padding: 24px;
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
.modal-footer {
padding: 16px 24px;
border-top: 1px solid #e5e5e5;
display: flex;
justify-content: flex-end;
gap: 12px;
}
/* JSON Editor */
.json-editor {
width: 100%;
flex: 1;
min-height: 300px;
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, "Courier New", monospace;
font-size: 13px;
padding: 16px;
border: 1px solid #e5e5e5;
border-radius: 8px;
background: #fafaf9;
color: #1a1a1a;
line-height: 1.6;
letter-spacing: 0.3px;
overflow-y: auto;
resize: none;
scrollbar-width: thin;
scrollbar-color: rgba(0,0,0,0.15) transparent;
}
.json-editor::-webkit-scrollbar {
width: 4px;
}
.json-editor::-webkit-scrollbar-track {
background: transparent;
}
.json-editor::-webkit-scrollbar-thumb {
background: rgba(0,0,0,0.15);
border-radius: 2px;
}
.json-editor::-webkit-scrollbar-thumb:hover {
background: rgba(0,0,0,0.3);
}
.json-editor:focus {
outline: none;
border-color: #0071e3;
box-shadow: 0 0 0 3px rgba(0,113,227,0.1);
}
.json-error {
color: #dc2626;
font-size: 12px;
margin-top: 8px;
padding: 8px 12px;
background: #fef2f2;
border: 1px solid #fecaca;
border-radius: 6px;
display: none;
}
.json-error.show { display: block; }
.btn-secondary {
background: #f5f5f5;
color: #1a1a1a;
border: 1px solid #e5e5e5;
}
.btn-secondary:hover { background: #e5e5e5; }
.env-var {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 0;
border-bottom: 1px solid #f5f5f5;
}
.env-var:last-child { border-bottom: none; }
.env-name {
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, "Courier New", monospace;
font-size: 12px;
color: var(--text-main);
font-weight: 600;
letter-spacing: 0.3px;
line-height: 1.5;
}
.env-desc {
font-size: 11px;
color: var(--text-sec);
margin-top: 3px;
line-height: 1.4;
}
.env-value {
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, "Courier New", monospace;
font-size: 12px;
color: var(--text-sec);
text-align: right;
max-width: 50%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
letter-spacing: 0.3px;
line-height: 1.5;
}
.badge { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 10px; font-weight: 600; vertical-align: middle; margin-left: 6px; }
.badge-required { background: #ffebeb; color: #c62828; }
.badge-optional { background: #e8f5e9; color: #2e7d32; }
code {
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, "Courier New", monospace;
background: #f5f5f7;
padding: 2px 6px;
border-radius: 4px;
font-size: 12px;
color: var(--blue);
letter-spacing: 0.3px;
line-height: 1.5;
}
a { color: var(--blue); text-decoration: none; }
a:hover { text-decoration: underline; }
.font-mono {
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, "Courier New", monospace;
letter-spacing: 0.3px;
line-height: 1.5;
}
/* --- Service Info Styles --- */
.model-grid { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.model-tag {
background: #f0f0f2;
color: #1d1d1f;
padding: 4px 10px;
border-radius: 6px;
font-size: 12px;
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, "Courier New", monospace;
border: 1px solid transparent;
letter-spacing: 0.3px;
line-height: 1.5;
}
.model-tag.highlight { background: #eef7ff; color: #0071e3; border-color: #dcebfb; font-weight: 500; }
.info-box { background: #f9f9f9; border: 1px solid #e5e5ea; border-radius: 8px; padding: 14px; }
.info-box-title { font-weight: 600; font-size: 12px; color: #1d1d1f; margin-bottom: 6px; }
.info-box-text { font-size: 12px; color: #86868b; line-height: 1.5; }
/* Settings Form Styles */
.setting-item {
margin-bottom: 14px;
}
.setting-item label {
display: block;
font-size: 12px;
font-weight: 600;
color: #1d1d1f;
margin-bottom: 6px;
}
.setting-item input[type="text"],
.setting-item input[type="password"],
.setting-item input[type="number"] {
width: 100%;
padding: 8px 12px;
border: 1px solid #d4d4d4;
border-radius: 6px;
font-size: 13px;
color: #1d1d1f;
background: #fff;
transition: border-color 0.15s;
}
.setting-item input:focus {
outline: none;
border-color: #0071e3;
}
.setting-item input::placeholder {
color: #c7c7cc;
}
.ep-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
background: #fff;
border: 1px solid #e5e5e5;
border-radius: 12px;
overflow: hidden;
}
.ep-table tr { border-bottom: 1px solid #f5f5f5; }
.ep-table tr:last-child { border-bottom: none; }
.ep-table td { padding: 12px 16px; vertical-align: middle; }
.method {
display: inline-block;
padding: 2px 6px;
border-radius: 4px;
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
min-width: 48px;
text-align: center;
margin-right: 8px;
}
.m-post { background: #eafbf0; color: #166534; border: 1px solid #dcfce7; }
.m-get { background: #eff6ff; color: #1e40af; border: 1px solid #dbeafe; }
.m-del { background: #fef2f2; color: #991b1b; border: 1px solid #fee2e2; }
.ep-path {
font-family: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, "Courier New", monospace;
color: #1d1d1f;
margin-right: 8px;
font-size: 12px;
letter-spacing: 0.3px;
line-height: 1.5;
}
.ep-desc { color: #86868b; font-size: 12px; margin-left: auto; }
.current-url-row {
display: flex;
align-items: center;
padding: 10px 12px;
background: #f2f7ff;
border-radius: 8px;
margin-bottom: 16px;
border: 1px solid #e1effe;
}
.api-item {
display: flex;
align-items: center;
gap: 10px;
}
.api-item-label {
font-size: 11px;
color: #6b6b6b;
min-width: 60px;
flex-shrink: 0;
}
.api-item-code {
flex: 1;
font-size: 11px;
background: rgba(0,0,0,0.04);
padding: 4px 8px;
border-radius: 4px;
font-family: 'SF Mono', SFMono-Regular, Consolas, monospace;
word-break: break-all;
}
@media (max-width: 800px) {
.grid-3, .grid-env { grid-template-columns: 1fr; }
.header { flex-direction: column; align-items: flex-start; gap: 16px; }
.header-actions { width: 100%; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.header-actions .btn { justify-content: center; text-align: center; }
/* API 接口移动端上下布局 */
.api-item {
flex-direction: column;
align-items: stretch;
gap: 4px;
}
.api-item-label {
margin-bottom: 0;
}
.api-item-content {
display: flex;
gap: 8px;
}
.ep-table td { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.ep-desc { margin-left: 0; }
/* Tabs Mobile */
.tabs-nav {
overflow-x: auto;
padding: 0;
gap: 0;
-webkit-overflow-scrolling: touch;
}
.tab-button {
flex: 1;
min-width: 100px;
padding: 10px 16px;
font-size: 13px;
justify-content: center;
}
/* Account Table Mobile - Card Layout */
.account-table {
display: block;
border: none;
}
.account-table thead {
display: none;
}
.account-table tbody {
display: block;
}
.account-table tr {
display: block;
margin-bottom: 12px;
border: 1px solid #e5e5e5;
border-radius: 10px;
background: #fff;
padding: 12px;
position: relative;
}
.account-table td {
display: block;
padding: 0;
border: none;
}
/* 账号ID - 卡片头部 */
.account-table td:nth-child(1) {
margin-bottom: 10px;
padding-bottom: 10px;
padding-right: 80px;
border-bottom: 1px solid #f5f5f5;
}
.account-table td:nth-child(1) > div {
width: 100%;
}
.account-table td:nth-child(1) span:last-child {
word-break: break-all;
}
/* 状态 - 右上角显示 */
.account-table td:nth-child(2) {
position: absolute;
top: 12px;
right: 12px;
padding: 0;
}
.account-table td:nth-child(2)::before {
display: none;
}
.account-table td:nth-child(2) > span {
display: inline-block;
padding: 4px 10px;
border-radius: 6px;
font-size: 11px;
white-space: nowrap;
font-weight: 600;
background: rgba(255,255,255,0.95);
border: 1px solid currentColor;
opacity: 0.9;
}
/* 信息行 - 紧凑布局 */
.account-table td:nth-child(3),
.account-table td:nth-child(4),
.account-table td:nth-child(5) {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 0;
font-size: 12px;
}
.account-table td:nth-child(3)::before,
.account-table td:nth-child(4)::before,
.account-table td:nth-child(5)::before {
content: attr(data-label);
font-weight: 600;
color: #86868b;
font-size: 11px;
margin-right: 8px;
}
/* 操作按钮 - 底部 */
.account-table td:nth-child(6) {
margin-top: 10px;
padding-top: 10px;
border-top: 1px solid #f5f5f5;
}
.account-table td:nth-child(6)::before {
display: none;
}
.account-table td:nth-child(6) > div {
width: 100%;
justify-content: flex-end;
}
}