| @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&family=Noto+Sans+SC:wght@400;500;700&family=Space+Grotesk:wght@300;400;500;600;700&display=swap'); |
| @import "tailwindcss"; |
|
|
| |
| :root { |
| --bg-color: #ffffff; |
| --text-color: #000000; |
| --border-color: #000000; |
| --surface-color: #f5f5f5; |
| --hover-bg: #f0f0f0; |
| --muted-color: #666666; |
| --success-color: #16a34a; |
| --error-color: #dc2626; |
| --warning-color: #d97706; |
|
|
| --font-sans: 'Inter', 'Noto Sans SC', sans-serif; |
| --font-display: 'Space Grotesk', 'Inter', sans-serif; |
| --font-mono: 'JetBrains Mono', monospace; |
|
|
| --transition-speed: 0.18s; |
| --nav-height: 60px; |
| } |
|
|
| |
| *, *::before, *::after { |
| box-sizing: border-box; |
| margin: 0; |
| padding: 0; |
| } |
|
|
| body { |
| font-family: var(--font-sans); |
| background-color: var(--bg-color); |
| color: var(--text-color); |
| line-height: 1.6; |
| -webkit-font-smoothing: antialiased; |
| -moz-osx-font-smoothing: grayscale; |
| min-height: 100vh; |
| } |
|
|
| h1, h2, h3, h4, h5, h6 { |
| font-family: var(--font-display); |
| font-weight: 600; |
| margin-bottom: 0.75rem; |
| line-height: 1.2; |
| } |
|
|
| code, pre, .technical { font-family: var(--font-mono); } |
|
|
| |
| a { |
| color: var(--text-color); |
| text-decoration: underline; |
| text-underline-offset: 3px; |
| transition: background var(--transition-speed), color var(--transition-speed); |
| } |
| a:hover { |
| background-color: var(--text-color); |
| color: var(--bg-color); |
| } |
|
|
| |
| button, .app-btn { |
| font-family: var(--font-display); |
| background-color: var(--bg-color); |
| color: var(--text-color); |
| border: 2px solid var(--border-color); |
| padding: 0.5rem 1rem; |
| font-weight: 600; |
| cursor: pointer; |
| transition: background var(--transition-speed) ease, color var(--transition-speed) ease; |
| font-size: 0.9rem; |
| text-transform: uppercase; |
| letter-spacing: 0.8px; |
| display: inline-flex; |
| align-items: center; |
| gap: 0.4rem; |
| } |
| button:hover, .app-btn:hover { |
| background-color: var(--text-color); |
| color: var(--bg-color); |
| } |
| button:disabled, .app-btn:disabled { |
| opacity: 0.45; |
| cursor: not-allowed; |
| pointer-events: none; |
| } |
|
|
| |
| .text-btn { |
| background: none !important; |
| border: none !important; |
| color: var(--text-color); |
| text-decoration: underline; |
| text-underline-offset: 3px; |
| cursor: pointer; |
| font-family: var(--font-mono); |
| font-size: 0.8rem; |
| font-weight: 600; |
| transition: background var(--transition-speed), color var(--transition-speed); |
| padding: 0.2rem 0.4rem; |
| } |
| .text-btn:hover { |
| background: var(--text-color) !important; |
| color: var(--bg-color) !important; |
| } |
|
|
| |
| |
| .toast-dismiss-btn { |
| background: transparent !important; |
| border: none !important; |
| color: inherit !important; |
| cursor: pointer !important; |
| margin-left: auto !important; |
| padding: 0 0.3rem !important; |
| font-size: 1.2rem !important; |
| line-height: 1 !important; |
| opacity: 0.7; |
| flex-shrink: 0; |
| transition: opacity 0.12s ease !important; |
| } |
| .toast-dismiss-btn:hover { |
| background: transparent !important; |
| color: inherit !important; |
| opacity: 1 !important; |
| } |
|
|
| |
| .status-toast { |
| position: fixed; |
| bottom: 2rem; |
| right: 2rem; |
| background: var(--text-color); |
| color: var(--bg-color); |
| padding: 0.9rem 1.2rem; |
| border-left: 5px solid #000; |
| box-shadow: 4px 4px 0 rgba(0,0,0,0.3); |
| display: flex; |
| align-items: center; |
| gap: 0.75rem; |
| z-index: 9999; |
| font-family: var(--font-mono); |
| font-weight: 700; |
| font-size: 0.85rem; |
| max-width: 420px; |
| animation: slideUpToast 0.28s ease-out both; |
| will-change: transform; |
| } |
| .status-toast.error { border-left-color: var(--error-color); } |
| .status-toast.success { border-left-color: var(--success-color); } |
|
|
| |
| input, textarea, select { |
| font-family: var(--font-sans); |
| background-color: var(--bg-color); |
| color: var(--text-color); |
| border: 2px solid var(--border-color); |
| padding: 0.5rem 0.75rem; |
| font-size: 0.95rem; |
| transition: box-shadow var(--transition-speed) ease; |
| } |
| input:focus, textarea:focus, select:focus { |
| outline: none; |
| box-shadow: 3px 3px 0 var(--border-color); |
| } |
|
|
| |
| ::-webkit-scrollbar { width: 8px; height: 8px; } |
| ::-webkit-scrollbar-track { background: #f9f9f9; border-left: 1px solid #e5e5e5; } |
| ::-webkit-scrollbar-thumb { background: #ccc; } |
| ::-webkit-scrollbar-thumb:hover { background: #999; } |
|
|
| |
| .container { |
| max-width: 1280px; |
| margin: 0 auto; |
| padding: 2rem; |
| } |
|
|
| .card { |
| border: 2px solid var(--border-color); |
| padding: 1.5rem; |
| background-color: var(--bg-color); |
| transition: transform var(--transition-speed) ease, box-shadow var(--transition-speed) ease; |
| } |
| .card:hover { |
| transform: translateY(-2px); |
| box-shadow: 5px 5px 0 var(--border-color); |
| } |
|
|
| .mono-text { font-family: var(--font-mono); font-size: 0.88em; } |
|
|
| .flex-center { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| } |
|
|
| .flex-between { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| flex-wrap: wrap; |
| gap: 1rem; |
| } |
|
|
| .full-width { width: 100%; } |
|
|
| .page-header { |
| border-bottom: 3px solid var(--border-color); |
| padding-bottom: 1rem; |
| margin-bottom: 2rem; |
| } |
|
|
| |
| @keyframes fadeIn { |
| from { opacity: 0; transform: translateY(8px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
|
|
| @keyframes slideUpToast { |
| from { transform: translateY(80px); opacity: 0; } |
| to { transform: translateY(0); opacity: 1; } |
| } |
|
|
| @keyframes slideUp { |
| from { transform: translateY(20px); opacity: 0; } |
| to { transform: translateY(0); opacity: 1; } |
| } |
|
|
| @keyframes spin { |
| 100% { transform: rotate(360deg); } |
| } |
|
|
| .fade-in { animation: fadeIn 0.4s ease both; } |
|
|
| |
| .status-dot { |
| display: inline-block; |
| width: 8px; |
| height: 8px; |
| border-radius: 50%; |
| flex-shrink: 0; |
| } |
| .status-dot.online { background: var(--success-color); } |
| .status-dot.offline { background: var(--error-color); } |
|
|
| |
| @media (max-width: 768px) { |
| .container { padding: 1rem; } |
| .card { padding: 1rem; } |
| } |
|
|
| |
| |
| |
|
|
| |
| .btn { |
| font-family: var(--font-display); |
| background-color: var(--bg-color); |
| color: var(--text-color); |
| border: 2px solid var(--border-color); |
| padding: 0.5rem 1rem; |
| font-weight: 600; |
| cursor: pointer; |
| font-size: 0.85rem; |
| letter-spacing: 0.5px; |
| display: inline-flex; |
| align-items: center; |
| gap: 0.4rem; |
| transition: background var(--transition-speed) ease, color var(--transition-speed) ease; |
| } |
| .btn:hover:not(:disabled) { |
| background-color: var(--text-color); |
| color: var(--bg-color); |
| } |
| .btn:disabled { |
| opacity: 0.45; |
| cursor: not-allowed; |
| pointer-events: none; |
| } |
|
|
| |
| .btn-primary { |
| background-color: var(--text-color); |
| color: var(--bg-color); |
| border: 2px solid var(--text-color); |
| } |
| .btn-primary:hover:not(:disabled) { |
| background-color: #333; |
| border-color: #333; |
| } |
|
|
| |
| .btn-outline { |
| background: transparent; |
| color: var(--text-color); |
| border: 2px solid var(--border-color); |
| } |
| .btn-outline:hover:not(:disabled) { |
| background: var(--text-color); |
| color: var(--bg-color); |
| } |
|
|
| |
| .btn-danger { |
| color: var(--error-color); |
| border-color: var(--error-color); |
| } |
| .btn-danger:hover:not(:disabled) { |
| background: var(--error-color); |
| color: #fff; |
| } |
|
|
| |
| .search-input { |
| font-family: var(--font-sans); |
| background-color: var(--bg-color); |
| color: var(--text-color); |
| border: 2px solid var(--border-color); |
| padding: 0.5rem 0.75rem; |
| font-size: 0.9rem; |
| transition: box-shadow var(--transition-speed) ease; |
| width: 100%; |
| } |
| .search-input:focus { |
| outline: none; |
| box-shadow: 3px 3px 0 var(--border-color); |
| } |
|
|
| |
| .status-card { |
| border: 2px solid var(--border-color); |
| padding: 1.25rem 1.5rem; |
| background: var(--bg-color); |
| } |
|
|
| .metric-value { |
| font-family: var(--font-mono); |
| font-size: 2rem; |
| font-weight: 900; |
| line-height: 1; |
| margin-top: 0.25rem; |
| } |
|
|
| .status-label { |
| font-family: var(--font-mono); |
| font-size: 0.68rem; |
| font-weight: 700; |
| color: var(--muted-color); |
| letter-spacing: 1px; |
| text-transform: uppercase; |
| } |
|
|
| |
| .indicator { |
| width: 10px; |
| height: 10px; |
| border-radius: 50%; |
| flex-shrink: 0; |
| } |
| .indicator.online { background: var(--success-color); } |
| .indicator.offline { background: var(--error-color); } |
| .indicator.pending { background: var(--warning-color); } |
|
|
| |
| .title-lg { |
| font-family: var(--font-display); |
| font-size: 1.8rem; |
| font-weight: 700; |
| line-height: 1.1; |
| } |
| .title-md { |
| font-family: var(--font-display); |
| font-size: 1.15rem; |
| font-weight: 700; |
| } |
| .title-sm { |
| font-family: var(--font-mono); |
| font-size: 0.72rem; |
| font-weight: 700; |
| letter-spacing: 1px; |
| text-transform: uppercase; |
| color: var(--muted-color); |
| } |
|
|
| |
| .data-table { |
| width: 100%; |
| border-collapse: collapse; |
| font-size: 0.9rem; |
| } |
| .data-table thead tr { |
| background: var(--surface-color); |
| border-bottom: 2px solid var(--border-color); |
| } |
| .data-table th, |
| .data-table td { |
| padding: 0.75rem 1rem; |
| text-align: left; |
| border-bottom: 1px solid #eaeaea; |
| } |
| .data-table th { |
| font-family: var(--font-mono); |
| font-size: 0.72rem; |
| font-weight: 700; |
| letter-spacing: 0.8px; |
| text-transform: uppercase; |
| color: var(--muted-color); |
| } |
| .data-table tbody tr:hover { |
| background: var(--surface-color); |
| } |
| .data-table tbody tr:last-child td { |
| border-bottom: none; |
| } |
|
|
| |
| .chip { |
| display: inline-flex; |
| align-items: center; |
| gap: 4px; |
| border: 1.5px solid var(--border-color); |
| padding: 2px 8px; |
| font-family: var(--font-mono); |
| font-size: 0.72rem; |
| font-weight: 700; |
| } |
| .chip.success { border-color: var(--success-color); color: var(--success-color); } |
| .chip.error { border-color: var(--error-color); color: var(--error-color); } |
| .chip.warning { border-color: var(--warning-color); color: var(--warning-color); } |
| .chip.filled { background: var(--text-color); color: var(--bg-color); } |
|
|
| |
| .empty-state { |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| justify-content: center; |
| padding: 4rem 2rem; |
| color: var(--muted-color); |
| gap: 0.75rem; |
| border: 2px dashed var(--border-color); |
| font-family: var(--font-mono); |
| font-size: 0.85rem; |
| letter-spacing: 0.5px; |
| text-align: center; |
| } |
|
|
| |
| .help-tooltip { |
| position: relative; |
| display: inline-flex; |
| align-items: center; |
| } |
| .help-tooltip [data-tip] { |
| cursor: help; |
| color: var(--muted-color); |
| } |
| .help-tooltip [data-tip]:hover::after { |
| content: attr(data-tip); |
| position: absolute; |
| bottom: 125%; |
| left: 50%; |
| transform: translateX(-50%); |
| background: var(--text-color); |
| color: var(--bg-color); |
| padding: 0.4rem 0.75rem; |
| font-family: var(--font-mono); |
| font-size: 0.75rem; |
| white-space: nowrap; |
| z-index: 9999; |
| pointer-events: none; |
| max-width: 260px; |
| white-space: normal; |
| text-align: center; |
| } |
|
|
| |
| .page-info-bar { |
| background: var(--surface-color); |
| border-left: 4px solid var(--border-color); |
| padding: 0.75rem 1rem; |
| font-size: 0.82rem; |
| line-height: 1.6; |
| margin-bottom: 1.5rem; |
| display: flex; |
| align-items: flex-start; |
| gap: 0.75rem; |
| color: var(--muted-color); |
| } |
| .page-info-bar strong { color: var(--text-color); font-family: var(--font-mono); } |
|
|