fix(ui): Cyrillic/Greek weights, html lang, weight normalisation (#1780)

Load Roboto 600/700 and DM Sans 700 so Cyrillic and Greek headings render
real semibold and bold faces instead of a synthetic bold, keep
<html lang> in step with the UI language, and move every font weight onto
the 400/500/600/700 scale (JetBrains Mono at 500 or lighter; the dashboard
LIVE badge now uses the interface font at 700).

Add the `styles:font-weights:validate` ratchet guard and its CI step. It
reads stylesheets much as Sass and the browser do (cascade, layers,
mixins, content blocks, `@extend`, `@at-root`, `:is()`/`:where()`,
keyframes) and lists what it deliberately does not trace in its header.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Opus 5.5 authored and GitHub committed 2026-10-04 08:55:23 +02:00
1 parent ab8460338a
commit e8b181fcea
52 files changed
+11216 -97

No files matched your search

@@ -65,7 +65,7 @@
.empty-title {
font-size: 1.05rem;
font-weight: 520;
font-weight: 500;
letter-spacing: -0.01em;
margin: 0 0 8px;
}
@@ -44,7 +44,7 @@
color: var(--mat-sys-on-surface);
font: inherit;
font-size: 0.94rem;
font-weight: 450;
font-weight: 500;
width: 100%;
min-width: 0;
@@ -188,7 +188,7 @@
.palette-command__label {
font-size: 0.84rem;
font-weight: 530;
font-weight: 500;
letter-spacing: -0.006em;
white-space: nowrap;
overflow: hidden;
@@ -104,7 +104,7 @@ mat-card-content {
--error-empty-illustration-size: clamp(132px, 15vw, 180px);
--error-empty-max-width: min(270px, 100%);
--error-empty-title-size: clamp(1.15rem, 1.35vw, 1.4rem);
--error-empty-title-weight: 610;
--error-empty-title-weight: 600;
--error-empty-title-spacing: -0.006em;
--error-empty-copy-gap: 4px;
--error-empty-description-opacity: 0.82;
@@ -12,7 +12,7 @@
--error-view-copy-width: var(--error-empty-max-width, 420px);
--error-view-copy-gap: var(--error-empty-copy-gap, 8px);
--error-view-title-size: var(--error-empty-title-size, 1.55rem);
--error-view-title-weight: var(--error-empty-title-weight, 640);
--error-view-title-weight: var(--error-empty-title-weight, 600);
--error-view-title-spacing: var(--error-empty-title-spacing, -0.012em);
--error-view-description-size: var(--error-empty-description-size, 0.98rem);
--error-view-description-line-height: var(
@@ -117,7 +117,7 @@
border: 1px solid var(--shortcut-border);
border-radius: 8px;
font-size: 0.76rem;
font-weight: 650;
font-weight: 600;
line-height: 1;
white-space: nowrap;
@@ -186,7 +186,7 @@
margin: 0;
color: var(--shortcut-text);
font-size: 0.74rem;
font-weight: 750;
font-weight: 700;
line-height: 1.2;
text-transform: uppercase;
}
@@ -273,7 +273,7 @@
0 1px 0 color-mix(in srgb, white 28%, transparent);
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 0.72rem;
font-weight: 750;
font-weight: 700;
line-height: 1;
white-space: nowrap;
}
@@ -52,7 +52,7 @@
h3 {
margin: 0;
font-size: 1.55rem;
font-weight: 650;
font-weight: 600;
letter-spacing: -0.03em;
color: var(--app-heading-color);
}