From 958d07fcdd8543d1ec532d3f810675f90d1cfae0 Mon Sep 17 00:00:00 2001 From: Mikhail Yenuchenko Date: Thu, 13 Aug 2026 00:26:17 +0300 Subject: [PATCH] panel: polish rate-limit form copy and field alignment Drop the app L1 backstop line, move trusted-IP help under the IP field, shorten the domain rate-limit title, and align field-pair labels with DMARC. Co-authored-by: Cursor --- CHANGELOG.md | 12 ++++++------ internal/web/view/static/panel.css | 10 +++++++++- internal/web/view/templates/domain_detail.html | 11 +++++------ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d73254a..c8efb33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,12 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version ### Changed -- panel: level-1 backstop is shown as muted copy (`N messages / Ws — Settings`) - and in message-limit labels; Settings uses a code-row for the L1 value. Domain - and application rate-limit status uses the shared `st` badge (`active` / - `inactive — level 1 only`). Trusted-IP override copy is a single paragraph; - domain rate-limit help sits above Save; Address mode drops the duplicate - field label. +- panel: level-1 backstop is shown as muted copy on the domain form + (`N messages / Ws — Settings`) and in message-limit labels; Settings uses a + code-row for the L1 value. Domain and application rate-limit status uses the + shared `st` badge. Trusted-IP help sits under the IP field; domain rate-limit + help sits above Save; Address mode drops the duplicate field label; field-pair + top spacing aligns with paired DMARC labels. ## [1.2.4] - 2026-08-12 diff --git a/internal/web/view/static/panel.css b/internal/web/view/static/panel.css index 858bcaa..7beae64 100644 --- a/internal/web/view/static/panel.css +++ b/internal/web/view/static/panel.css @@ -565,10 +565,18 @@ meter { width: 5rem; height: 0.7rem; vertical-align: middle; margin-right: 0.4re one column when the parent is too narrow for both. */ .field-pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); - gap: 0 1rem; margin-top: 0.45rem; + gap: 0 1rem; } +/* First control row in a check-col form: match a bare label's top margin so + paired columns (DMARC ‖ rate limit) line up their first field labels. */ +form > .field-pair { margin-top: 0; } +form > .field-pair > div > label { margin-top: 0.9rem; } .field-pair > div { min-width: 0; } .field-pair label { margin-top: 0.45rem; } +/* Hint under a field-pair sits tight above the form's submit button (the + global button margin-top would leave a blank line). */ +.field-pair + p.muted { margin: 0.45rem 0 0; } +.field-pair + p.muted + button { margin-top: 0.45rem; } /* Host / name beside a DNS Type that is always TXT — size the type column to that token rather than giving it half the row. Vertical padding matches .code-row .code so TXT is the same height as Host when Copy sits beside it. */ diff --git a/internal/web/view/templates/domain_detail.html b/internal/web/view/templates/domain_detail.html index dabfeac..b138171 100644 --- a/internal/web/view/templates/domain_detail.html +++ b/internal/web/view/templates/domain_detail.html @@ -345,13 +345,12 @@

Optional trusted-IP override {{if .HasLimit}}active{{else}}inactive{{end}}

-

These IPs get a higher ceiling than the domain - (≤ level 1) and skip the domain check; everyone else uses - {{if $.DomainHasRL}}the domain ceiling ({{$.DomainRLMaxNum}}){{else}}level 1 only{{end}}.

-

Level 1 backstop: {{$.L1Messages}} messages / {{$.L1Window}}s — Settings.

+

These IPs get a higher ceiling than the domain + (≤ level 1) and skip the domain check; everyone else uses + {{if $.DomainHasRL}}the domain ceiling ({{$.DomainRLMaxNum}}){{else}}level 1 only{{end}}.

@@ -416,8 +415,8 @@
-

Optional level-2 sending rate limit - {{if .DomainHasRL}}active{{else}}inactive — level 1 only{{end}}

+

Level-2 rate limit + {{if .DomainHasRL}}active{{else}}inactive{{end}}

Level 1 backstop: {{.L1Messages}} messages / {{.L1Window}}s — Settings.