From 24b23d8be051a0382384153ea0effc377fd5e2bf Mon Sep 17 00:00:00 2001
From: githubflyideas <36397539+githubflyideas@users.noreply.github.com>
Date: Thu, 12 Nov 2026 23:46:59 +0900
Subject: [PATCH] Fix WCAG 2.1 AA issues
---
static/index.html | 106 ++++++++++++++++++++++++++++++++++++----------
static/login.html | 29 +++++++------
2 files changed, 99 insertions(+), 36 deletions(-)
diff --git a/static/index.html b/static/index.html
index af40e42..e297829 100644
--- a/static/index.html
+++ b/static/index.html
@@ -18,8 +18,8 @@
/* Signal — cyan trace over a cloud that burns from white-gold to cold ember. */
:root {
- --bg:#14161a; --panel:#1c2027; --screen:#0d0f13; --line:#2b323c;
- --phos:#22d3ee; --amber:#fbbf24; --alert:#fb3b53; --ink:#c0c6ce; --dim:#78848f;
+ --bg:#14161a; --panel:#1c2027; --screen:#0d0f13; --line:#2b323c; --ctl:#676d76;
+ --phos:#22d3ee; --amber:#fbbf24; --alert:#fb3b53; --ink:#c0c6ce; --dim:#7e8a94;
--grid-axis:#333b47; --grid-split:#1c222a;
/* Compare (dashed) line. Dark themes reuse --dim (>=4.5:1 on --screen); the
light themes' --dim is only ~3.5:1, so each gets a darker grey of its own. */
@@ -39,8 +39,8 @@
/* Daylight — ink on lab paper. Core burns terracotta, edges cool to slate. */
html[data-theme="daylight"] {
- --bg:#f2efe6; --panel:#fbf9f3; --screen:#fffdf7; --line:#ddd6c4;
- --phos:#1d4ed8; --amber:#b45309; --alert:#be123c; --ink:#3e4346; --dim:#8a8677;
+ --bg:#f2efe6; --panel:#fbf9f3; --screen:#fffdf7; --line:#ddd6c4; --ctl:#878780;
+ --phos:#1d4ed8; --amber:#954407; --alert:#be123c; --ink:#3e4346; --dim:#6f6b5f;
--grid-axis:#cdc6b2; --grid-split:#e9e3d3; --cmp:#6b6656;
--smoke:rgba(180,83,9,.22); --lossbar:rgba(190,18,60,.6); --glow:0;
--smoke-hot:#e07a3a; --smoke-mid:#e8a878; --smoke-cool:#cfc8b8;
@@ -49,8 +49,8 @@
/* Arctic — near-black trace. Cloud runs from deep sea to pale frost. */
html[data-theme="arctic"] {
- --bg:#eaeff4; --panel:#f7fafc; --screen:#fdfeff; --line:#d3dce5;
- --phos:#0f172a; --amber:#0369a1; --alert:#dc2626; --ink:#3a4353; --dim:#7d8b99;
+ --bg:#eaeff4; --panel:#f7fafc; --screen:#fdfeff; --line:#d3dce5; --ctl:#7d8693;
+ --phos:#0f172a; --amber:#036093; --alert:#d02222; --ink:#3a4353; --dim:#5f6c79;
--grid-axis:#c2cdd8; --grid-split:#e2e9f0; --cmp:#5b6878;
--smoke:rgba(56,132,199,.22); --lossbar:rgba(220,38,38,.55); --glow:0;
--smoke-hot:#4a9fd4; --smoke-mid:#8dc0e0; --smoke-cool:#cfe0ec;
@@ -59,8 +59,8 @@
/* Budapest — Anderson's plum and rose. Core is deep raspberry, edges go powder. */
html[data-theme="budapest"] {
- --bg:#f7ebe8; --panel:#fdf5f2; --screen:#fffaf8; --line:#e6cfc8;
- --phos:#5b2a4f; --amber:#c9754f; --alert:#c1362f; --ink:#4c3d41; --dim:#9c8087;
+ --bg:#f7ebe8; --panel:#fdf5f2; --screen:#fffaf8; --line:#e6cfc8; --ctl:#948280;
+ --phos:#5b2a4f; --amber:#8d492c; --alert:#c1362f; --ink:#4c3d41; --dim:#7f636a;
--grid-axis:#dcc0b8; --grid-split:#f0e0da; --cmp:#7d5f66;
--smoke:rgba(216,133,140,.26); --lossbar:rgba(193,54,47,.55); --glow:0;
--smoke-hot:#e0748c; --smoke-mid:#eaa8ae; --smoke-cool:#f0dbd2;
@@ -71,8 +71,8 @@
white-hot core, amber body, dying green at the fringe, exactly how a long
persistence tube fades. The trace stays a cooler gold so it sits above it. */
html[data-theme="amber"] {
- --bg:#12100a; --panel:#1c1810; --screen:#0a0806; --line:#38301c;
- --phos:#ffd75e; --amber:#ffd98a; --alert:#ff5f2e; --ink:#cebd95; --dim:#8f7b4e;
+ --bg:#12100a; --panel:#1c1810; --screen:#0a0806; --line:#38301c; --ctl:#71664a;
+ --phos:#ffd75e; --amber:#ffd98a; --alert:#ff5f2e; --ink:#cebd95; --dim:#958051;
--grid-axis:#443a20; --grid-split:#1e1a10; --cmp:#8f7b4e;
--smoke:rgba(255,176,0,.20); --lossbar:rgba(255,95,46,.65); --glow:7;
--smoke-hot:#a86a10; --smoke-mid:#7d4508; --smoke-cool:#2f4429;
@@ -171,7 +171,7 @@
.tgt .lnk.del { color:var(--alert); }
.tgt form { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-top:12px; }
.tgt input, .tgt select { font-family:var(--mono); font-size:var(--fs-small); color:var(--ink);
- background:var(--screen); border:1px solid var(--line); border-radius:4px; padding:6px 8px; }
+ background:var(--screen); border:1px solid var(--ctl); border-radius:4px; padding:6px 8px; }
.tgt input:focus, .tgt select:focus { outline:none; border-color:var(--phos); }
#tgtErr { color:var(--alert); font-size:var(--fs-small); }
/* Export / import of the target list (netping-targets file). */
@@ -194,11 +194,28 @@
.ie-prev td.why { color:var(--dim); font-size:var(--fs-small); }
.ie-prev .btns { display:flex; gap:8px; }
.ie-prev button:disabled { opacity:.5; cursor:default; }
+ /* Accessibility. --ctl is the border of a form control: --line is a hairline
+ between panels (decoration), but a text field is only recognisable by its edge,
+ which WCAG 1.4.11 wants at 3:1. Focus rings use the accent for the same reason. */
+ :focus-visible { outline:2px solid var(--phos); outline-offset:2px; }
+ .skip { position:absolute; left:12px; top:-60px; z-index:20; background:var(--panel); color:var(--phos);
+ border:2px solid var(--phos); border-radius:6px; padding:8px 14px; font-weight:600; text-decoration:none; }
+ .skip:focus { top:12px; }
+ .sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden;
+ clip:rect(0 0 0 0); white-space:nowrap; border:0; }
+ h1.mark { margin:0; }
+ #main:focus { outline:none; }
+ .rng { flex-wrap:wrap; max-width:100%; }
+ .rng.cmp, .rng.custom { border-color:var(--ctl); }
+ .rng.custom input { min-width:0; max-width:100%; }
+ .promo-b a, .share a, .tgt .lnk { display:inline-flex; align-items:center; min-height:24px; }
+ .promo-b > span { flex-wrap:wrap; max-width:100%; }
+Skip to chart
- fogping
+ fogping
One binary. One graph. One metric: Latency.
@@ -207,6 +224,7 @@
+
@@ -216,21 +234,28 @@
-
+
+ Targets
| Name | Type | Address | Pace | Interval | |
-
-
-
-
+
+