:root { --bg: #f6f7f9; --panel: #ffffff; --text: #1c2128; --muted: #6b7280; --border: #dfe3e8; --accent: #2f6fde; --accent-text: #ffffff; --ok: #1f8a4c; --ok-bg: #e3f4ea; --warn: #9a6400; --warn-bg: #fdf1d8; --fail: #c0362c; --fail-bg: #fbe5e3; --code-bg: #eef1f5; } @media (prefers-color-scheme: dark) { :root { --bg: #14171c; --panel: #1c2027; --text: #e4e7eb; --muted: #9aa3ae; --border: #2e343d; --accent: #5b8ff0; --ok: #4cc27f; --ok-bg: #18342a; --warn: #e0ad4a; --warn-bg: #3a2f17; --fail: #f07167; --fail-bg: #3d1f1d; --code-bg: #232831; } } * { box-sizing: border-box; } body { margin: 0; background: var(--bg); color: var(--text); font: 15px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; } a { color: var(--accent); text-decoration: none; } a:hover { text-decoration: underline; } code, pre { font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-size: 13px; } code { background: var(--code-bg); padding: 1px 5px; border-radius: 4px; } .top { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 10px 24px; background: var(--panel); border-bottom: 1px solid var(--border); } .brand { font-weight: 600; color: var(--text); } .top nav { display: flex; align-items: center; gap: 18px; } .top nav a { color: var(--muted); } .top nav a.active { color: var(--text); font-weight: 500; } main { max-width: 1200px; margin: 0 auto; padding: 24px; } h1 { font-size: 24px; margin: 0 0 8px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } h2 { font-size: 18px; margin: 32px 0 12px; } .head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; flex-wrap: wrap; margin-bottom: 16px; } .actions { display: flex; gap: 8px; flex-wrap: wrap; } .muted { color: var(--muted); } .small { font-size: 13px; } .right { text-align: right; } .empty { color: var(--muted); padding: 24px 0; } .hint { color: var(--muted); font-size: 13px; margin: 4px 0 12px; } .table-wrap { overflow-x: auto; background: var(--panel); border: 1px solid var(--border); border-radius: 8px; } table { width: 100%; border-collapse: collapse; } th, td { padding: 9px 12px; text-align: left; border-bottom: 1px solid var(--border); vertical-align: top; } th { font-size: 13px; font-weight: 500; color: var(--muted); } tr:last-child td { border-bottom: none; } td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; } .badge { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12px; font-weight: 500; white-space: nowrap; } .badge.ok { background: var(--ok-bg); color: var(--ok); } .badge.stale, .badge.never { background: var(--warn-bg); color: var(--warn); } .badge.fail { background: var(--fail-bg); color: var(--fail); } .badge.off { background: var(--code-bg); color: var(--muted); } .ok-text { color: var(--ok); } .fail-text { color: var(--fail); } ul.results { list-style: none; padding: 0; margin: 0 0 16px; } .facts { display: flex; flex-wrap: wrap; gap: 12px 32px; margin: 16px 0; } .facts dt { font-size: 12px; color: var(--muted); } .facts dd { margin: 0; } .card { background: var(--panel); border: 1px solid var(--border); border-radius: 8px; padding: 20px; } .card.narrow, .login { max-width: 520px; } .card h2:first-of-type { margin-top: 0; } label { display: block; margin-bottom: 12px; font-size: 14px; } label.check { display: flex; align-items: center; gap: 8px; } input, textarea { display: block; width: 100%; margin-top: 4px; padding: 7px 10px; background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 6px; font: inherit; } input[type=checkbox] { display: inline; width: auto; margin: 0; } textarea { font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-size: 13px; } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 0 16px; } button, .button { display: inline-block; padding: 7px 14px; border-radius: 6px; border: 1px solid var(--border); background: var(--panel); color: var(--text); font: inherit; cursor: pointer; } button:hover, .button:hover { text-decoration: none; filter: brightness(0.97); } button.primary, .button.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-text); } button:disabled { opacity: 0.5; cursor: not-allowed; } button.link { background: none; border: none; padding: 0; color: var(--muted); } button.danger { background: var(--fail-bg); border-color: var(--fail-bg); color: var(--fail); } button.link.danger { background: none; } form.inline { display: inline; } .error { background: var(--fail-bg); color: var(--fail); padding: 10px 14px; border-radius: 6px; } .warnings { background: var(--warn-bg); color: var(--warn); padding: 10px 14px; border-radius: 6px; margin: 12px 0; } .warnings ul { margin: 8px 0 0; padding-left: 20px; font-size: 13px; } .danger-zone { margin-top: 32px; color: var(--muted); } .danger-zone form { margin-top: 12px; max-width: 420px; } .danger-zone input { margin-bottom: 8px; } .cmd { display: flex; gap: 8px; align-items: flex-start; margin: 16px 0; } .cmd pre { flex: 1; margin: 0; padding: 12px; background: var(--code-bg); border-radius: 6px; white-space: pre-wrap; word-break: break-all; } pre.json { background: var(--panel); border: 1px solid var(--border); border-radius: 8px; padding: 16px; overflow-x: auto; } .login { margin: 10vh auto; } .login form { background: var(--panel); border: 1px solid var(--border); border-radius: 8px; padding: 20px; } @media (max-width: 640px) { main { padding: 16px; } .top { padding: 10px 16px; } .cmd { flex-direction: column; } }