diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index a45774d..8e4ead4 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -1268,39 +1268,41 @@ function App() {
>
{loading === 'balance' ? 'Checking Balance…' : 'Check Balance'}
-
- {loading === 'balance' ? (
-
- ) : balance ? (
-
- {balance.balances.map((b, i) => (
-
-
- {b.asset}
- {b.asset === 'XLM' && }
-
-
- {formatBalanceWithAsset(b.balance, b.asset)}
-
-
- ))}
-
- ) : null}
-
+
+
+ {loading === 'balance' ? (
+
+ ) : balance ? (
+
+ {balance.balances.map((b, i) => (
+
+
+ {b.asset}
+ {b.asset === 'XLM' && }
+
+
+ {formatBalanceWithAsset(b.balance, b.asset)}
+
+
+ ))}
+
+ ) : null}
+
+
{/* Send Payment */}
diff --git a/frontend/src/components/StatusMessage.jsx b/frontend/src/components/StatusMessage.jsx
index 79ad421..4c64f8f 100644
--- a/frontend/src/components/StatusMessage.jsx
+++ b/frontend/src/components/StatusMessage.jsx
@@ -9,13 +9,14 @@ const VARIANTS = {
};
function Message({ msg, onRemove, onRetry }) {
+ const isUrgent = msg.type === 'error' || msg.type === 'warning';
return (
{msg.icon}
diff --git a/frontend/src/index.css b/frontend/src/index.css
index 4acec67..5d44d09 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -35,7 +35,7 @@
top: -100%;
left: 0;
background: var(--primary);
- color: #fff;
+ color: var(--on-primary);
padding: 8px 16px;
font-weight: 600;
z-index: 10000;
@@ -58,6 +58,11 @@
--info: #0369a1;
--link: #0b69d7;
--shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
+
+ /* ── Focus ring tokens (issue #741) ─────────────────────────────────────── */
+ --focus-ring-color: #2563eb;
+ --focus-ring-width: 2px;
+ --focus-ring-offset: 2px;
}
.theme-dark {
@@ -81,6 +86,8 @@
--ws-disconnected: #f87171;
--ws-reconnecting: #fbbf24;
--ws-failed: #a78bfa;
+ /* Focus ring: #93c5fd on dark bg (#020617) → 11.4:1, passes WCAG AA */
+ --focus-ring-color: #93c5fd;
}
* {
@@ -217,7 +224,8 @@ input {
}
input:focus-visible {
- outline: none;
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
+ outline-offset: 0;
border-color: var(--primary);
}
@@ -489,7 +497,7 @@ select {
.qr-pubkey {
font-size: 10px;
- color: #666;
+ color: var(--muted);
word-break: break-all;
text-align: center;
max-width: 220px;
@@ -677,7 +685,7 @@ select {
.sm-history-toggle {
background: none;
border: none;
- color: #666;
+ color: var(--muted);
font-size: 12px;
cursor: pointer;
padding: 4px 0;
@@ -1023,7 +1031,7 @@ select {
}
.balance-asset {
font-weight: 600;
- color: #555;
+ color: var(--muted);
}
.balance-amount {
font-variant-numeric: tabular-nums;
@@ -1526,7 +1534,10 @@ kbd {
transition:
border-color 0.2s,
background 0.2s;
- outline: none;
+}
+.fu-dropzone:focus-visible {
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
+ outline-offset: var(--focus-ring-offset);
}
.fu-dropzone:hover,
.fu-dropzone:focus-visible {