:root { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; color: #111827; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; --page-bg: #f3f4f6; --surface: #ffffff; --surface-muted: #f9fafb; --border: #e5e7eb; --border-strong: #d1d5db; --text: #111827; --muted: #6b7280; --accent: #2563eb; --accent-muted: #eff6ff; --success: #15803d; --warning: #a16207; --danger: #b91c1c; --shadow: 0 1px 2px rgba(17, 24, 39, 0.04); } :root[data-theme='dark'] { color-scheme: dark; --page-bg: #111827; --surface: #18212f; --surface-muted: #1f2937; --border: #334155; --border-strong: #475569; --text: #f8fafc; --muted: #94a3b8; --accent: #60a5fa; --accent-muted: rgba(96, 165, 250, 0.15); --success: #4ade80; --warning: #fbbf24; --danger: #f87171; --shadow: 0 1px 2px rgba(2, 6, 23, 0.35); } * { box-sizing: border-box; } html, body, #app { min-height: 100%; background: var(--page-bg); } body { margin: 0; min-width: 320px; min-height: 100vh; background: var(--page-bg); color: var(--text); font-size: 14px; line-height: 1.5; } button, input, select, textarea { font: inherit; } button { cursor: pointer; } button:disabled { cursor: not-allowed; opacity: 0.65; } .login-shell { min-height: 100vh; display: grid; place-items: center; padding: 24px; } .login-card, .panel-card, .shell-header, .tabbar { background: var(--surface); border: 1px solid var(--border); box-shadow: var(--shadow); } .login-card { width: min(100%, 360px); padding: 24px; border-radius: 12px; display: grid; gap: 20px; } .login-copy { display: grid; gap: 4px; } .login-copy h1, .shell-title h1, .card-header h2, .modal-header h2 { margin: 0; font-size: 20px; line-height: 1.2; font-weight: 600; color: var(--text); } .login-copy p, .toolbar-title p, .service-row p, .event-row p { margin: 0; color: var(--muted); } .login-form, .modal-form { display: grid; gap: 12px; } .login-form label, .modal-form label, .field-group { display: grid; gap: 6px; font-weight: 500; } .login-form input, .modal-form input, .modal-form select, .field-group input, .field-group select, .field-group textarea { width: 100%; height: 40px; padding: 0 12px; border: 1px solid var(--border-strong); border-radius: 8px; background: var(--surface); color: var(--text); } .login-form input:focus, .modal-form input:focus, .modal-form select:focus, .field-group input:focus, .field-group select:focus, .field-group textarea:focus { outline: 2px solid rgba(37, 99, 235, 0.12); border-color: var(--accent); } button, .button-secondary, .copy-button, .button-danger { height: 36px; padding: 0 12px; border-radius: 8px; border: 1px solid var(--accent); background: var(--accent); color: #ffffff; font-weight: 600; } .button-secondary, .copy-button { border-color: var(--border-strong); background: var(--surface); color: var(--text); } .button-danger { border-color: #ef4444; background: #ef4444; color: #ffffff; } .button-small { min-width: 72px; height: 32px; padding: 0 10px; font-size: 13px; } .copy-button { display: inline-flex; align-items: center; justify-content: center; min-width: 76px; } .copy-button.danger { color: var(--danger); } .form-error { margin: 0; color: var(--danger); } .shell { width: min(1280px, calc(100vw - 32px)); margin: 16px auto; display: grid; gap: 16px; } .shell-header { border-radius: 12px; padding: 18px 20px; display: flex; justify-content: space-between; align-items: center; gap: 16px; } .shell-title { display: grid; gap: 4px; } .shell-title p { margin: 0; color: var(--muted); } .header-meta { display: grid; grid-auto-flow: column; gap: 24px; align-items: center; } .header-meta div { display: grid; gap: 2px; } .header-meta span { color: var(--muted); font-size: 12px; } .header-meta strong { font-size: 14px; font-weight: 600; } .tabbar { display: inline-flex; width: fit-content; gap: 4px; padding: 4px; border-radius: 10px; } .tab-button { height: 34px; padding: 0 14px; border: 0; border-radius: 8px; background: transparent; color: var(--muted); font-weight: 600; } .tab-button.active { background: var(--accent-muted); color: var(--accent); } .page-grid { display: grid; gap: 16px; grid-template-columns: repeat(2, minmax(0, 1fr)); } .page-grid.single-column { grid-template-columns: 1fr; } .system-grid .wide-card { grid-column: 1 / -1; } .panel-card { border-radius: 12px; padding: 18px; display: grid; gap: 14px; min-width: 0; } .card-header, .table-toolbar, .toolbar-actions, .actions-row, .modal-header, .modal-actions, .service-row, .service-meta { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .card-header { align-items: baseline; } .stats-strip { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; } .stats-strip div { display: grid; gap: 4px; padding: 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-muted); } .stats-strip span, .kv-list dt { color: var(--muted); } .stats-strip strong { font-size: 18px; line-height: 1.2; } .kv-list { margin: 0; display: grid; gap: 10px; } .kv-list div { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 12px; } .kv-list dt, .kv-list dd { margin: 0; } .usage-list, .event-list, .service-list { display: grid; gap: 10px; } .usage-row { display: grid; grid-template-columns: 40px minmax(0, 1fr) 96px; gap: 12px; align-items: center; } .usage-row span { color: var(--muted); } .usage-row strong { font-size: 13px; text-align: right; } .usage-bar { height: 8px; border-radius: 999px; background: color-mix(in srgb, var(--border) 70%, transparent); overflow: hidden; } .usage-bar div { height: 100%; background: color-mix(in srgb, var(--accent) 55%, var(--muted)); } .event-row, .service-row { padding: 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-muted); } .event-row { display: grid; grid-template-columns: 10px minmax(0, 1fr); gap: 12px; align-items: start; } .event-marker { width: 8px; height: 8px; border-radius: 999px; margin-top: 6px; } .event-marker.live { background: var(--success); } .event-marker.warn { background: var(--warning); } .event-marker.fail { background: var(--danger); } .toolbar-title { display: grid; gap: 4px; } .toolbar-title h2 { margin: 0; font-size: 18px; line-height: 1.2; } .table-note, .service-editor-header p { margin: 0; color: var(--muted); } .settings-toolbar { display: flex; align-items: end; gap: 12px; flex-wrap: wrap; } .panel-settings-grid { display: grid; gap: 12px; grid-template-columns: minmax(0, 2fr) minmax(220px, 1fr) minmax(220px, 1fr); align-items: end; } .panel-settings-wide { min-width: 0; } .compact-field { min-width: 220px; flex: 0 1 240px; } .panel-settings-grid .compact-field { min-width: 0; flex: initial; } .compact-field span { color: var(--muted); font-size: 12px; } .toolbar-actions { flex-wrap: wrap; } .summary-pills { display: flex; gap: 8px; flex-wrap: wrap; } .summary-pills span { display: inline-flex; align-items: center; height: 30px; padding: 0 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-muted); color: var(--muted); } .table-wrap { overflow: auto; border: 1px solid var(--border); border-radius: 10px; } table { width: 100%; min-width: 760px; border-collapse: collapse; background: var(--surface); } th, td { padding: 12px 14px; border-bottom: 1px solid var(--border); text-align: left; white-space: nowrap; } th { background: var(--surface-muted); color: var(--muted); font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; } tbody tr:last-child td { border-bottom: 0; } .user-cell strong { font-size: 14px; } .endpoint-cell { display: grid; gap: 2px; } .endpoint-cell span { color: var(--muted); } .status-pill { display: inline-flex; align-items: center; justify-content: center; min-width: 72px; height: 28px; padding: 0 10px; border: 1px solid currentColor; border-radius: 999px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; background: var(--surface); } .status-pill.live { color: var(--success); } .status-pill.warn { color: var(--warning); } .status-pill.fail { color: var(--danger); } .status-pill.idle { color: var(--muted); } .status-pill.paused { color: #475569; } .row-actions { display: inline-flex; gap: 8px; } .system-editor { display: block; } .system-fields, .service-editor-grid { display: grid; gap: 12px; grid-template-columns: repeat(2, minmax(0, 1fr)); } .service-editor-list { display: grid; gap: 12px; } .service-editor-row { display: grid; gap: 12px; padding: 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-muted); } .service-editor-header, .system-actions, .toggle-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .toggle-row { justify-content: flex-start; flex-wrap: wrap; } .toggle-check { display: inline-flex; align-items: center; gap: 8px; font-weight: 500; } .toggle-check input { width: 16px; height: 16px; margin: 0; } .field-span-2 { grid-column: 1 / -1; } pre { margin: 0; padding: 14px; overflow: auto; border: 1px solid var(--border); border-radius: 10px; background: color-mix(in srgb, var(--surface-muted) 80%, var(--surface)); color: var(--text); font: 13px/1.55 Consolas, "Courier New", monospace; } .modal-backdrop { position: fixed; inset: 0; display: grid; place-items: center; padding: 24px; background: rgba(17, 24, 39, 0.2); } .modal-card { width: min(100%, 440px); background: var(--surface); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 12px 32px rgba(17, 24, 39, 0.12); padding: 18px; display: grid; gap: 16px; } .confirm-card { width: min(100%, 400px); } .modal-form { grid-template-columns: repeat(2, minmax(0, 1fr)); } .confirm-copy { margin: 0; color: var(--text); } .modal-preview { display: grid; gap: 4px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface-muted); } .modal-preview span { color: var(--muted); font-size: 12px; } .modal-preview strong { font-size: 14px; } .modal-actions { grid-column: 1 / -1; justify-content: flex-end; } @media (max-width: 960px) { .shell { width: calc(100vw - 24px); margin: 12px auto; gap: 12px; } .shell-header, .table-toolbar, .settings-toolbar { flex-direction: column; align-items: flex-start; } .header-meta { grid-auto-flow: row; grid-template-columns: repeat(3, minmax(0, 1fr)); width: 100%; gap: 12px; } .page-grid, .stats-strip, .modal-form, .panel-settings-grid, .system-fields, .service-editor-grid { grid-template-columns: 1fr; } .modal-actions { justify-content: stretch; } .system-actions { justify-content: stretch; } } @media (max-width: 640px) { .login-shell { padding: 16px; } .shell { width: calc(100vw - 16px); margin: 8px auto; } .shell-header, .panel-card, .login-card, .modal-card { padding: 16px; } .tabbar { width: 100%; } .tab-button { flex: 1 1 0; } .header-meta { grid-template-columns: 1fr; } .usage-row { grid-template-columns: 40px minmax(0, 1fr); } .usage-row strong { grid-column: 2; text-align: left; } }