*, *::before, *::after { box-sizing: border-box; } body { margin: 0; background: var(--bg-base); color: var(--text-secondary); font-family: var(--font-sans); font-size: var(--text-sm); line-height: 1.5; -webkit-font-smoothing: antialiased; } a { color: var(--accent); } /* ── antet ─────────────────────────────────────────────────────────── */ .header { position: sticky; top: 0; z-index: 50; display: flex; align-items: center; gap: var(--space-4); padding: var(--space-4) var(--space-6); background: var(--header-bg); backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); } .logo { display: flex; align-items: center; gap: var(--space-2); font-weight: 700; font-size: var(--text-lg); color: var(--text-primary); text-decoration: none; } .logo .dot { width: 10px; height: 10px; border-radius: 50%; background: var(--text-muted); box-shadow: 0 0 0 4px var(--bg-surface); } .logo .dot.on { background: var(--success); } .logo .dot.off { background: var(--error); } .header .spacer { flex: 1; } .header .meta { color: var(--text-muted); font-size: var(--text-xs); } /* ── structura ─────────────────────────────────────────────────────── */ .wrap { max-width: 1100px; margin: 0 auto; padding: var(--space-6); display: grid; gap: var(--space-6); } .grid-2 { display: grid; gap: var(--space-6); grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); } .card { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--space-5); } .card > h2 { margin: 0 0 var(--space-4); font-size: var(--text-base); font-weight: 600; color: var(--text-primary); display: flex; align-items: center; gap: var(--space-2); } .card > h2 .count { font-weight: 400; font-size: var(--text-xs); color: var(--text-muted); } /* ── metrici ───────────────────────────────────────────────────────── */ .metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--space-3); } .metric { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius); padding: var(--space-3) var(--space-4); } .metric .label { font-size: var(--text-xs); color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; } .metric .value { font-size: var(--text-xl); font-weight: 600; color: var(--text-primary); font-variant-numeric: tabular-nums; } /* ── pastile de stare ──────────────────────────────────────────────── */ .pill { display: inline-flex; align-items: center; gap: var(--space-2); padding: 2px var(--space-3); border-radius: 999px; font-size: var(--text-xs); font-weight: 600; background: var(--bg-surface); border: 1px solid var(--border); color: var(--text-secondary); } .pill.ok { color: var(--success); border-color: rgba(34, 197, 94, 0.5); } .pill.bad { color: var(--error); border-color: rgba(239, 68, 68, 0.5); } .pill.warn { color: var(--warning); border-color: rgba(234, 179, 8, 0.5); } .pill.busy { color: var(--accent); border-color: var(--border-focus); } /* ── butoane ───────────────────────────────────────────────────────── */ .actions { display: flex; flex-wrap: wrap; gap: var(--space-2); } button { font: inherit; font-weight: 600; color: var(--text-primary); background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius); padding: var(--space-2) var(--space-4); cursor: pointer; transition: background 0.12s ease, border-color 0.12s ease; } button:hover:not(:disabled) { background: var(--bg-surface-hover); border-color: var(--border-focus); } button:active:not(:disabled) { background: var(--bg-surface-active); } button:disabled { opacity: 0.45; cursor: not-allowed; } button.primary { background: var(--accent); border-color: var(--accent); color: #fff; } button.primary:hover:not(:disabled) { background: var(--accent-hover); border-color: var(--accent-hover); } button.danger { color: var(--error); border-color: rgba(239, 68, 68, 0.5); } button.small { padding: var(--space-1) var(--space-3); font-size: var(--text-xs); } /* ── tabele ────────────────────────────────────────────────────────── */ .table-scroll { overflow-x: auto; } table { width: 100%; border-collapse: collapse; font-size: var(--text-sm); } th { text-align: left; font-size: var(--text-xs); text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); font-weight: 600; padding: 0 var(--space-3) var(--space-2); white-space: nowrap; } td { padding: var(--space-3); border-top: 1px solid var(--border); vertical-align: middle; } td.mono, .mono { font-family: var(--font-mono); font-size: var(--text-xs); } td.num { font-variant-numeric: tabular-nums; text-align: right; } .empty { color: var(--text-muted); font-style: italic; padding: var(--space-4) 0; } /* ── verificari ────────────────────────────────────────────────────── */ .check { display: flex; align-items: baseline; gap: var(--space-3); padding: var(--space-2) 0; border-top: 1px solid var(--border); } .check:first-child { border-top: 0; } .check .name { font-weight: 500; color: var(--text-primary); min-width: 200px; } .check .detail { color: var(--text-muted); font-size: var(--text-xs); } .check .mark { font-weight: 700; } .check.pass .mark { color: var(--success); } .check.fail .mark { color: var(--error); } /* ── jurnal ────────────────────────────────────────────────────────── */ pre.log { margin: 0; max-height: 420px; overflow: auto; background: rgba(0, 0, 0, 0.25); border: 1px solid var(--border); border-radius: var(--radius); padding: var(--space-4); font-family: var(--font-mono); font-size: var(--text-xs); line-height: 1.6; white-space: pre; color: var(--text-secondary); } :root[data-theme="light"] pre.log { background: rgba(0, 0, 0, 0.04); } /* ── notificari ────────────────────────────────────────────────────── */ #toast { position: fixed; right: var(--space-6); bottom: var(--space-6); z-index: 100; display: grid; gap: var(--space-2); max-width: 380px; } .toast { background: var(--bg-elevated); color: var(--text-primary); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: var(--radius); padding: var(--space-3) var(--space-4); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35); font-size: var(--text-sm); } .toast.ok { border-left-color: var(--success); } .toast.bad { border-left-color: var(--error); } /* ── autentificare ─────────────────────────────────────────────────── */ .login { min-height: 100vh; display: grid; place-items: center; padding: var(--space-6); } .login form { width: min(380px, 100%); display: grid; gap: var(--space-4); background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--space-8); } .login h1 { margin: 0; font-size: var(--text-xl); color: var(--text-primary); } .login p { margin: 0; color: var(--text-muted); font-size: var(--text-xs); } input[type="password"] { font: inherit; font-family: var(--font-mono); width: 100%; padding: var(--space-3); color: var(--text-primary); background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius); } input[type="password"]:focus { outline: none; border-color: var(--border-focus); } .error-msg { color: var(--error); font-size: var(--text-xs); min-height: 1em; }