From f5abaaf7e5675026bcb05f412f04eddb574272b8 Mon Sep 17 00:00:00 2001 From: zwitschi Date: Wed, 5 Aug 2026 20:52:35 +0200 Subject: [PATCH] fix: minimize spacing on blocklist display page --- app/static/style.css | 302 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 238 insertions(+), 64 deletions(-) diff --git a/app/static/style.css b/app/static/style.css index 02f82fe..a2ddfac 100644 --- a/app/static/style.css +++ b/app/static/style.css @@ -12,11 +12,18 @@ --mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; } -* { box-sizing: border-box; } +* { + box-sizing: border-box; +} body { margin: 0; - font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; + font-family: + system-ui, + -apple-system, + "Segoe UI", + Roboto, + sans-serif; background: var(--bg); color: var(--text); line-height: 1.5; @@ -26,7 +33,7 @@ body { display: flex; align-items: center; gap: 1.5rem; - padding: .75rem 1.5rem; + padding: 0.75rem 1.5rem; background: var(--surface); border-bottom: 1px solid var(--border); position: sticky; @@ -34,27 +41,56 @@ body { z-index: 10; } -.brand { font-weight: 700; letter-spacing: .02em; white-space: nowrap; } +.brand { + font-weight: 700; + letter-spacing: 0.02em; + white-space: nowrap; +} -.topbar nav { display: flex; gap: .25rem; flex-wrap: wrap; } +.topbar nav { + display: flex; + gap: 0.25rem; + flex-wrap: wrap; +} .topbar nav a { color: var(--muted); text-decoration: none; - padding: .4rem .75rem; + padding: 0.4rem 0.75rem; border-radius: 8px; - font-size: .9rem; + font-size: 0.9rem; } -.topbar nav a:hover { color: var(--text); background: var(--surface-2); } -.topbar nav a.active { color: var(--accent); background: var(--surface-2); } +.topbar nav a:hover { + color: var(--text); + background: var(--surface-2); +} +.topbar nav a.active { + color: var(--accent); + background: var(--surface-2); +} -.container { max-width: 1100px; margin: 0 auto; padding: 1.5rem; } +.container { + max-width: 1100px; + margin: 0 auto; + padding: 1.5rem; +} -h1 { font-size: 1.4rem; margin: 0 0 .25rem; } -h2 { font-size: 1.05rem; margin: 0; } -.muted { color: var(--muted); } -.mono { font-family: var(--mono); font-size: .85rem; } +h1 { + font-size: 1.4rem; + margin: 0 0 0.25rem; +} +h2 { + font-size: 1.05rem; + margin: 0; +} +.muted { + color: var(--muted); +} +.mono { + font-family: var(--mono); + font-size: 0.85rem; +} .panel { background: var(--surface); @@ -68,10 +104,15 @@ h2 { font-size: 1.05rem; margin: 0; } display: flex; justify-content: space-between; align-items: center; - margin-bottom: .75rem; + margin-bottom: 0.75rem; } -.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1rem; margin: 1rem 0; } +.cards { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1rem; + margin: 1rem 0; +} .card { background: var(--surface); @@ -80,69 +121,136 @@ h2 { font-size: 1.05rem; margin: 0; } padding: 1rem 1.25rem; } -.card-label { font-size: .78rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); } -.card-value { font-size: 1.5rem; font-weight: 700; margin-top: .25rem; } -.card-value.ok { color: var(--ok); } -.card-value.warn { color: var(--warn); } -.card-value.danger { color: var(--danger); } -.card-value.muted { color: var(--muted); } +.card-label { + font-size: 0.78rem; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--muted); +} +.card-value { + font-size: 1.5rem; + font-weight: 700; + margin-top: 0.25rem; +} +.card-value.ok { + color: var(--ok); +} +.card-value.warn { + color: var(--warn); +} +.card-value.danger { + color: var(--danger); +} +.card-value.muted { + color: var(--muted); +} -.table { width: 100%; border-collapse: collapse; font-size: .88rem; } +.table { + width: 100%; + border-collapse: collapse; + font-size: 0.88rem; +} .table th { text-align: left; color: var(--muted); font-weight: 600; border-bottom: 1px solid var(--border); - padding: .5rem .6rem; - font-size: .78rem; + padding: 0.5rem 0.6rem; + font-size: 0.78rem; text-transform: uppercase; - letter-spacing: .04em; + letter-spacing: 0.04em; } -.table td { padding: .5rem .6rem; border-bottom: 1px solid var(--border); } -.table tr:last-child td { border-bottom: none; } -.table .num { text-align: right; font-variant-numeric: tabular-nums; } +.table td { + padding: 0.5rem 0.6rem; + border-bottom: 1px solid var(--border); +} +.table tr:last-child td { + border-bottom: none; +} +.table .num { + text-align: right; + font-variant-numeric: tabular-nums; +} .badge { display: inline-block; - padding: .1rem .5rem; + padding: 0.1rem 0.5rem; border-radius: 999px; - font-size: .72rem; + font-size: 0.72rem; font-weight: 600; text-transform: uppercase; - letter-spacing: .03em; + letter-spacing: 0.03em; background: var(--surface-2); color: var(--muted); } -.badge.ok, .badge.done { background: rgba(52, 211, 153, .15); color: var(--ok); } -.badge.warn, .badge.running, .badge.queued { background: rgba(251, 191, 36, .15); color: var(--warn); } -.badge.danger, .badge.error { background: rgba(248, 113, 113, .15); color: var(--danger); } +.badge.ok, +.badge.done { + background: rgba(52, 211, 153, 0.15); + color: var(--ok); +} +.badge.warn, +.badge.running, +.badge.queued { + background: rgba(251, 191, 36, 0.15); + color: var(--warn); +} +.badge.danger, +.badge.error { + background: rgba(248, 113, 113, 0.15); + color: var(--danger); +} .btn { display: inline-flex; align-items: center; - gap: .4rem; + gap: 0.4rem; border: 1px solid var(--border); background: var(--surface-2); color: var(--text); - padding: .45rem .9rem; + padding: 0.45rem 0.9rem; border-radius: 8px; - font-size: .88rem; + font-size: 0.88rem; cursor: pointer; text-decoration: none; } -.btn:hover { border-color: var(--accent); } -.btn.primary { background: var(--accent); border-color: var(--accent); color: #062a35; font-weight: 600; } -.btn.primary:hover { filter: brightness(1.08); } -.btn.danger { border-color: rgba(248, 113, 113, .5); color: var(--danger); } -.btn.danger:hover { background: rgba(248, 113, 113, .12); } -.btn.ghost { background: transparent; } -.btn:disabled { opacity: .5; cursor: not-allowed; } +.btn:hover { + border-color: var(--accent); +} +.btn.primary { + background: var(--accent); + border-color: var(--accent); + color: #062a35; + font-weight: 600; +} +.btn.primary:hover { + filter: brightness(1.08); +} +.btn.danger { + border-color: rgba(248, 113, 113, 0.5); + color: var(--danger); +} +.btn.danger:hover { + background: rgba(248, 113, 113, 0.12); +} +.btn.ghost { + background: transparent; +} +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} -.panel-actions { display: flex; align-items: center; gap: 1rem; margin-top: 1rem; flex-wrap: wrap; } +.panel-actions { + display: flex; + align-items: center; + gap: 1rem; + margin-top: 1rem; + flex-wrap: wrap; +} .form-grid { display: grid; @@ -150,37 +258,76 @@ h2 { font-size: 1.05rem; margin: 0; } gap: 1rem; } -label { display: flex; flex-direction: column; gap: .3rem; font-size: .82rem; color: var(--muted); } -label.check { flex-direction: row; align-items: center; gap: .5rem; font-size: .88rem; color: var(--text); margin-top: 1.4rem; } +label { + display: flex; + flex-direction: column; + gap: 0.3rem; + font-size: 0.82rem; + color: var(--muted); +} +label.check { + flex-direction: row; + align-items: center; + gap: 0.5rem; + font-size: 0.88rem; + color: var(--text); + margin-top: 1.4rem; +} -input, select { +input, +select { background: var(--bg); border: 1px solid var(--border); color: var(--text); border-radius: 8px; - padding: .45rem .6rem; - font-size: .88rem; + padding: 0.45rem 0.6rem; + font-size: 0.88rem; } -input:focus, select:focus { outline: none; border-color: var(--accent); } +input:focus, +select:focus { + outline: none; + border-color: var(--accent); +} -.job-status { margin-top: 1rem; font-family: var(--mono); font-size: .85rem; } +.job-status { + margin-top: 1rem; + font-family: var(--mono); + font-size: 0.85rem; +} -#toasts { position: fixed; bottom: 1rem; right: 1rem; display: flex; flex-direction: column; gap: .5rem; z-index: 100; } +#toasts { + position: fixed; + bottom: 1rem; + right: 1rem; + display: flex; + flex-direction: column; + gap: 0.5rem; + z-index: 100; +} .toast { - padding: .6rem 1rem; + padding: 0.6rem 1rem; border-radius: 8px; border: 1px solid var(--border); background: var(--surface); - box-shadow: 0 6px 20px rgba(0, 0, 0, .4); - font-size: .88rem; + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.4); + font-size: 0.88rem; max-width: 360px; } -.toast-error { border-color: var(--danger); color: var(--danger); } -.toast-ok { border-color: var(--ok); color: var(--ok); } -.toast-warn { border-color: var(--warn); color: var(--warn); } +.toast-error { + border-color: var(--danger); + color: var(--danger); +} +.toast-ok { + border-color: var(--ok); + color: var(--ok); +} +.toast-warn { + border-color: var(--warn); + color: var(--warn); +} pre.content { background: var(--bg); @@ -190,10 +337,37 @@ pre.content { overflow: auto; max-height: 480px; font-family: var(--mono); - font-size: .8rem; + font-size: 0.8rem; white-space: pre-wrap; } -.list { display: flex; flex-direction: column; gap: .25rem; max-height: 300px; overflow: auto; padding: .25rem; } -.list a { color: var(--accent); text-decoration: none; font-family: var(--mono); font-size: .85rem; padding: .2rem .4rem; border-radius: 6px; } -.list a:hover { background: var(--surface-2); } +.list { + display: flex; + flex-direction: column; + gap: 0.25rem; + max-height: 300px; + overflow: auto; + padding: 0.25rem; +} +.list a { + color: var(--accent); + text-decoration: none; + font-family: var(--mono); + font-size: 0.85rem; + padding: 0.2rem 0.4rem; + border-radius: 6px; +} +.list a:hover { + background: var(--surface-2); +} + +/* Blocklist display */ + +.table tbody[id="v4"] td { + padding: 0; +} +.table tbody[id="v4"] td .btn { + border-radius: 0; + border: none; + padding: 0.25rem 0.5rem; +}