ui: типографика Inter без наложений, подпись бренда в одну строку, плотнее лента; smoke ловит наложения текста
Some checks failed
ci / test (3.10) (push) Has been cancelled
ci / test (3.11) (push) Has been cancelled
ci / test (3.12) (push) Has been cancelled

This commit is contained in:
Vlad Gothbreach
2026-10-27 03:35:24 +03:00
parent 8d4a4c14b4
commit 07dc5cc788
2 changed files with 8 additions and 4 deletions

View File

@@ -179,6 +179,8 @@ async def run(url, out):
step("help-clicked") step("help-clicked")
await page.wait_for_selector("#modal.show") await page.wait_for_selector("#modal.show")
step("help-shown") step("help-shown")
# Bootstrap ignores Escape while the modal is still fading in.
await page.wait_for_timeout(400)
await settled() await settled()
step("help-settled") step("help-settled")
await assert_dark_theme("help modal") await assert_dark_theme("help modal")
@@ -207,7 +209,9 @@ async def run(url, out):
step("sources") step("sources")
await navigate("abuse") await navigate("abuse")
await page.wait_for_selector("#ab-list .item", timeout=20000)
report["find_rows"] = await page.locator("#ab-list .item").count() report["find_rows"] = await page.locator("#ab-list .item").count()
assert report["find_rows"] > 0, "Findings tab rendered no rows"
await assert_no_text_collision("abuse 1440") await assert_no_text_collision("abuse 1440")
await assert_dark_theme("abuse") await assert_dark_theme("abuse")
await page.screenshot(path=str(out / "black_finds.png")) await page.screenshot(path=str(out / "black_finds.png"))

View File

@@ -159,7 +159,7 @@ a:hover { color: var(--omni-foreground); }
.skip-link { position: absolute; z-index: 1090; } .skip-link { position: absolute; z-index: 1090; }
.brand-mark { display: grid; place-items: center; flex: 0 0 var(--omni-space-8); width: var(--omni-space-8); height: var(--omni-space-8); border: 1px solid var(--omni-border); border-radius: var(--omni-radius); background: var(--omni-card); } .brand-mark { display: grid; place-items: center; flex: 0 0 var(--omni-space-8); width: var(--omni-space-8); height: var(--omni-space-8); border: 1px solid var(--omni-border); border-radius: var(--omni-radius); background: var(--omni-card); }
.brand-name { display: block; font-size: var(--omni-text-title); font-weight: 600; line-height: 1.3; letter-spacing: .04em; } .brand-name { display: block; font-size: var(--omni-text-title); font-weight: 600; line-height: 1.3; letter-spacing: .04em; }
.brand-caption { display: block; margin-top: var(--omni-space-1); color: var(--omni-muted-foreground); font-size: var(--omni-text-caption); font-weight: 500; line-height: 1.45; letter-spacing: .06em; } .brand-caption { display: block; margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--omni-muted-foreground); font-size: var(--omni-text-caption); font-weight: 500; line-height: 1.45; letter-spacing: .06em; }
#sidebar-menu { min-width: 0; width: 100%; } #sidebar-menu { min-width: 0; width: 100%; }
.navbar.navbar-vertical .navbar-nav { --tblr-sidebar-nav-padding-y: var(--omni-space-2); --tblr-sidebar-nav-padding-x: var(--omni-space-3); gap: var(--omni-space-1); padding-inline: var(--omni-space-2); } .navbar.navbar-vertical .navbar-nav { --tblr-sidebar-nav-padding-y: var(--omni-space-2); --tblr-sidebar-nav-padding-x: var(--omni-space-3); gap: var(--omni-space-1); padding-inline: var(--omni-space-2); }
.navbar.navbar-vertical .navbar-nav .nav-link { gap: var(--omni-space-3); min-height: var(--omni-control-height); padding: var(--omni-space-2) var(--omni-space-3); margin: 0; border-radius: var(--omni-radius); color: var(--omni-muted-foreground); font-size: var(--omni-text-base); line-height: 1.4; transition: background-color var(--omni-transition), color var(--omni-transition); } .navbar.navbar-vertical .navbar-nav .nav-link { gap: var(--omni-space-3); min-height: var(--omni-control-height); padding: var(--omni-space-2) var(--omni-space-3); margin: 0; border-radius: var(--omni-radius); color: var(--omni-muted-foreground); font-size: var(--omni-text-base); line-height: 1.4; transition: background-color var(--omni-transition), color var(--omni-transition); }
@@ -224,7 +224,7 @@ option, optgroup { color: var(--omni-foreground); background: var(--omni-backgro
.source-url { max-width: var(--omni-source-width); } .source-url { max-width: var(--omni-source-width); }
.list-group { --tblr-list-group-color: var(--omni-foreground); --tblr-list-group-bg: var(--omni-background); --tblr-list-group-border-color: var(--omni-border); --tblr-list-group-action-color: var(--omni-foreground); --tblr-list-group-action-hover-color: var(--omni-foreground); --tblr-list-group-action-hover-bg: var(--omni-muted); --tblr-list-group-action-active-bg: var(--omni-muted); } .list-group { --tblr-list-group-color: var(--omni-foreground); --tblr-list-group-bg: var(--omni-background); --tblr-list-group-border-color: var(--omni-border); --tblr-list-group-action-color: var(--omni-foreground); --tblr-list-group-action-hover-color: var(--omni-foreground); --tblr-list-group-action-hover-bg: var(--omni-muted); --tblr-list-group-action-active-bg: var(--omni-muted); }
.list-group-item { background-color: var(--omni-background); border-color: var(--omni-border); color: var(--omni-foreground); } .list-group-item { background-color: var(--omni-background); border-color: var(--omni-border); color: var(--omni-foreground); }
.item { padding: var(--omni-space-3) var(--omni-space-4); transition: background-color var(--omni-transition); } .item { padding: 10px var(--omni-space-4); transition: background-color var(--omni-transition); }
.item:hover, .item:focus-within { background: var(--omni-card); } .item:hover, .item:focus-within { background: var(--omni-card); }
.reader-open { display: block; width: 100%; border: 0; padding: 0; background: transparent; color: inherit; font: inherit; text-align: start; } .reader-open { display: block; width: 100%; border: 0; padding: 0; background: transparent; color: inherit; font: inherit; text-align: start; }
.reader-open:hover .feed-title, .reader-open:focus-visible .feed-title { color: var(--omni-foreground); text-decoration: underline; text-underline-offset: var(--omni-space-1); } .reader-open:hover .feed-title, .reader-open:focus-visible .feed-title { color: var(--omni-foreground); text-decoration: underline; text-underline-offset: var(--omni-space-1); }
@@ -232,7 +232,7 @@ option, optgroup { color: var(--omni-foreground); background: var(--omni-backgro
.line-clamp-2 { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; overflow-wrap: anywhere; } .line-clamp-2 { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; overflow-wrap: anywhere; }
.feed-content { flex: 1; min-width: 0; } .feed-content { flex: 1; min-width: 0; }
.feed-preview { font-size: var(--omni-text-base); line-height: 1.55; } .feed-preview { font-size: var(--omni-text-base); line-height: 1.55; }
#list .feed-preview { -webkit-line-clamp: 1; } #list .feed-preview { -webkit-line-clamp: 1; min-height: 1.55em; }
.feed-original { color: var(--omni-muted-foreground); } .feed-original { color: var(--omni-muted-foreground); }
#feed-form > .row { --tblr-gutter-x: var(--omni-space-3); --tblr-gutter-y: var(--omni-space-3); } #feed-form > .row { --tblr-gutter-x: var(--omni-space-3); --tblr-gutter-y: var(--omni-space-3); }
#feed-form summary { cursor: pointer; font-size: var(--omni-text-small); } #feed-form summary { cursor: pointer; font-size: var(--omni-text-small); }
@@ -313,7 +313,7 @@ pre { padding: var(--omni-space-4); }
<div class="container-fluid"> <div class="container-fluid">
<a class="navbar-brand text-start brand-lockup" href="#/feed" aria-label="OMNI — открыть ленту"> <a class="navbar-brand text-start brand-lockup" href="#/feed" aria-label="OMNI — открыть ленту">
<span class="brand-mark" aria-hidden="true"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h10l3 7-3 7H5l-3-7 3-7Z"/><path d="m5 3 5 7 5-7M5 17l5-7 5 7M2 10h16"/></svg></span> <span class="brand-mark" aria-hidden="true"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M5 3h10l3 7-3 7H5l-3-7 3-7Z"/><path d="m5 3 5 7 5-7M5 17l5-7 5 7M2 10h16"/></svg></span>
<span class="min-w-0"><span class="brand-name">OMNI</span><span class="brand-caption">SOURCE INTELLIGENCE</span></span> <span class="min-w-0"><span class="brand-name">OMNI</span><span class="brand-caption" title="Source intelligence">INTELLIGENCE</span></span>
</a> </a>
<button class="navbar-toggler" id="sidebar-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar-menu" aria-controls="sidebar-menu" aria-expanded="false" aria-label="Открыть меню навигации"><span class="navbar-toggler-icon" aria-hidden="true"></span><span class="ms-2">Меню</span></button> <button class="navbar-toggler" id="sidebar-toggle" type="button" data-bs-toggle="collapse" data-bs-target="#sidebar-menu" aria-controls="sidebar-menu" aria-expanded="false" aria-label="Открыть меню навигации"><span class="navbar-toggler-icon" aria-hidden="true"></span><span class="ms-2">Меню</span></button>
<div class="collapse navbar-collapse" id="sidebar-menu"> <div class="collapse navbar-collapse" id="sidebar-menu">