| | |
| | | /* Global Styles */ |
| | | :root { |
| | | font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; |
| | | --bg-page: #edf2f7; |
| | | --bg-panel: #ffffff; |
| | | --bg-soft: #f8fafc; |
| | | --text-main: #0f172a; |
| | | --text-sub: #64748b; |
| | | --border-main: #dbe2ea; |
| | | --brand-main: #0b5cab; |
| | | --brand-soft: #e8f2ff; |
| | | --ok: #16a34a; |
| | | --warn: #d97706; |
| | | --danger: #dc2626; |
| | | font-family: 'Noto Sans SC', 'Microsoft YaHei', 'PingFang SC', 'Helvetica Neue', sans-serif; |
| | | } |
| | | |
| | | * { |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | body { |
| | | margin: 0; |
| | | min-height: 100vh; |
| | | color: var(--text-main); |
| | | background: |
| | | radial-gradient(circle at 0% 0%, #f6faff 0%, transparent 35%), |
| | | radial-gradient(circle at 100% 0%, #eef6ff 0%, transparent 38%), |
| | | var(--bg-page); |
| | | } |
| | | |
| | | /* Status Colors */ |
| | | #app { |
| | | min-height: 100vh; |
| | | } |
| | | |
| | | .admin-page { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 14px; |
| | | } |
| | | |
| | | .page-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: flex-start; |
| | | flex-wrap: wrap; |
| | | gap: 12px; |
| | | padding: 16px 18px; |
| | | border: 1px solid var(--border-main); |
| | | border-radius: 12px; |
| | | background: linear-gradient(180deg, #ffffff 0%, #f8fbff 100%); |
| | | } |
| | | |
| | | .page-header h2 { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 8px; |
| | | margin: 0; |
| | | font-size: 20px; |
| | | } |
| | | |
| | | .text-muted { |
| | | margin: 4px 0 0 0; |
| | | color: var(--text-sub); |
| | | font-size: 13px; |
| | | } |
| | | |
| | | .panel-card { |
| | | border-radius: 12px; |
| | | border: 1px solid var(--border-main); |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .section-block { |
| | | border: 1px solid var(--border-main); |
| | | border-radius: 12px; |
| | | background: var(--bg-panel); |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .section-head { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | gap: 10px; |
| | | padding: 12px 16px; |
| | | border-bottom: 1px solid #e6edf4; |
| | | background: linear-gradient(180deg, #ffffff 0%, #f9fbfe 100%); |
| | | } |
| | | |
| | | .section-title { |
| | | margin: 0; |
| | | font-size: 15px; |
| | | font-weight: 600; |
| | | color: #0f172a; |
| | | } |
| | | |
| | | .section-desc { |
| | | margin: 2px 0 0; |
| | | font-size: 12px; |
| | | color: var(--text-sub); |
| | | } |
| | | |
| | | .section-body { |
| | | padding: 12px 14px; |
| | | } |
| | | |
| | | .status-stopped { |
| | | border-left: 4px solid #6c757d; |
| | | border-left: 4px solid #94a3b8; |
| | | } |
| | | |
| | | .status-starting { |
| | | border-left: 4px solid #0dcaf0; |
| | | border-left: 4px solid var(--brand-main); |
| | | } |
| | | |
| | | .status-running { |
| | | border-left: 4px solid #198754; |
| | | border-left: 4px solid var(--ok); |
| | | } |
| | | |
| | | .status-stopping { |
| | | border-left: 4px solid #ffc107; |
| | | border-left: 4px solid var(--warn); |
| | | } |
| | | |
| | | .status-error { |
| | | border-left: 4px solid #dc3545; |
| | | border-left: 4px solid var(--danger); |
| | | } |
| | | |
| | | /* Loading Spinner Overlay */ |
| | | .spinner-overlay { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | background-color: rgba(0, 0, 0, 0.5); |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | z-index: 9999; |
| | | .loading-container { |
| | | text-align: center; |
| | | padding: 60px 0; |
| | | color: var(--text-sub); |
| | | } |
| | | |
| | | /* Spin icon animation */ |
| | | .loading-icon, |
| | | .spin-icon { |
| | | animation: spin 1s linear infinite; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /* Card hover effect */ |
| | | .card { |
| | | transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; |
| | | .el-card { |
| | | transition: all 0.2s ease; |
| | | } |
| | | |
| | | .card:hover { |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); |
| | | .el-card:hover { |
| | | transform: translateY(-1px); |
| | | } |
| | | |
| | | /* Custom scrollbar */ |
| | | .el-table { |
| | | --el-table-header-bg-color: #f3f7fb; |
| | | } |
| | | |
| | | ::-webkit-scrollbar { |
| | | width: 8px; |
| | | height: 8px; |
| | | } |
| | | |
| | | ::-webkit-scrollbar-track { |
| | | background: #f1f1f1; |
| | | background: #eef2f6; |
| | | } |
| | | |
| | | ::-webkit-scrollbar-thumb { |
| | | background: #888; |
| | | background: #b4beca; |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | ::-webkit-scrollbar-thumb:hover { |
| | | background: #555; |
| | | background: #8f9cab; |
| | | } |