@@ -80,6 +148,10 @@ export function ActivityFeed() {
);
}
+// ─── ActivityFeed ─────────────────────────────────────────────────────────────
+// Connected component — wires up the data hook and delegates rendering to the
+// pure ActivityFeedView above.
+
export function ActivityFeed() {
return
;
}
diff --git a/src/lib/i18n/messages/en.ts b/src/lib/i18n/messages/en.ts
index 0b3a108..536568c 100644
--- a/src/lib/i18n/messages/en.ts
+++ b/src/lib/i18n/messages/en.ts
@@ -37,6 +37,7 @@ export const en = {
"swap.quote.rate": "Rate",
"swap.quote.unavailable": "Live quote unavailable — showing an estimated rate.",
"swap.quote.staleWarning": "Quote is stale. Please wait for a refresh before submitting.",
+ "swap.quote.highPriceImpactWarning": "High price impact above {threshold}% — review before swapping.",
"swap.submit.connecting": "Connecting wallet…",
"swap.submit.building": "Preparing swap…",
@@ -83,6 +84,12 @@ export const en = {
"home.chains.title": "Supported chains",
"home.chains.stellarDestination": "Stellar (dest.)",
+ "activityFeed.status.live": "Live",
+ "activityFeed.status.polling": "Polling",
+ "activityFeed.error.unavailable": "Live feed unavailable right now.",
+ "activityFeed.empty": "No fills yet.",
+ "activityFeed.item.route": "{chain} · via {solver}",
+
"notFound.breadcrumb": "Not Found",
"notFound.eyebrow": "404",
"notFound.title": "Page not found",
diff --git a/src/lib/i18n/messages/es.ts b/src/lib/i18n/messages/es.ts
index cbcdbe7..c518013 100644
--- a/src/lib/i18n/messages/es.ts
+++ b/src/lib/i18n/messages/es.ts
@@ -37,6 +37,7 @@ export const es = {
"swap.quote.rate": "Tasa",
"swap.quote.unavailable": "Cotización en tiempo real no disponible — mostrando tasa estimada.",
"swap.quote.highPriceImpactWarning": "Impacto de precio alto por encima de {threshold}% — revisa antes de intercambiar.",
+ "swap.quote.staleWarning": "La cotización está desactualizada. Por favor espera una actualización antes de enviar.",
"swap.submit.connecting": "Conectando billetera…",
"swap.submit.building": "Preparando swap…",
@@ -50,6 +51,10 @@ export const es = {
"swap.disclaimer": "El swap se liquida directamente en Stellar · Sin tokens envueltos · Protegido por bonos de solver",
+ "swap.destination.label": "Dirección de destino",
+ "swap.destination.placeholder": "G...",
+ "swap.destination.invalidAddress": "Ingresa una dirección Stellar válida (comienza con G).",
+
"home.hero.eyebrow": "Stellar Agentic Hackathon 2025",
"home.hero.titleLine1": "Intercambia desde cualquier cadena",
"home.hero.titleLine2": "directamente a Stellar.",
@@ -77,6 +82,12 @@ export const es = {
"home.chains.title": "Cadenas soportadas",
"home.chains.stellarDestination": "Stellar (dest.)",
+ "activityFeed.status.live": "En vivo",
+ "activityFeed.status.polling": "Actualizando",
+ "activityFeed.error.unavailable": "Feed en vivo no disponible ahora mismo.",
+ "activityFeed.empty": "Aún no hay llenados.",
+ "activityFeed.item.route": "{chain} · vía {solver}",
+
"notFound.breadcrumb": "No Encontrado",
"notFound.eyebrow": "404",
"notFound.title": "Página no encontrada",
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 4f813f3..6670838 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -9,39 +9,41 @@ const config: Config = {
theme: {
extend: {
colors: {
- // Vortex palette: deep navy, sage accents
- "vx-ink": "#080C14",
- "vx-base": "#0C1120",
- "vx-surface":"#111827",
- "vx-card": "#161E2E",
- "vx-border": "rgba(255,255,255,0.07)",
- "vx-line": "rgba(255,255,255,0.04)",
+ // ── Vortex semantic palette ──────────────────────────────────────────
+ // All values are CSS-variable references so that globals.css can switch
+ // the entire palette by redefining the variables in a light-theme block.
+ "vx-ink": "var(--vx-ink)",
+ "vx-base": "var(--vx-base)",
+ "vx-surface": "var(--vx-surface)",
+ "vx-card": "var(--vx-card)",
+ "vx-border": "var(--vx-border)",
+ "vx-line": "var(--vx-line)",
// Primary: sage green (Stellar brand adjacent)
- "vx-sage": "#4CEBA8",
- "vx-sage-dim": "#2A8A62",
- "vx-sage-bg": "rgba(76,235,168,0.08)",
+ "vx-sage": "var(--vx-sage)",
+ "vx-sage-dim": "var(--vx-sage-dim)",
+ "vx-sage-bg": "var(--vx-sage-bg)",
// Accent: soft lavender for source chain
- "vx-lav": "#A78BFA",
- "vx-lav-dim": "#5B3F8C",
- "vx-lav-bg": "rgba(167,139,250,0.08)",
+ "vx-lav": "var(--vx-lav)",
+ "vx-lav-dim": "var(--vx-lav-dim)",
+ "vx-lav-bg": "var(--vx-lav-bg)",
// State colors
- "vx-amber": "#F5A623",
- "vx-rose": "#F87171",
+ "vx-amber": "var(--vx-amber)",
+ "vx-rose": "var(--vx-rose)",
// Text
- "vx-text": "#E8EDF5",
- "vx-muted": "#6B7A8E",
- "vx-dim": "#374151",
+ "vx-text": "var(--vx-text)",
+ "vx-muted": "var(--vx-muted)",
+ "vx-dim": "var(--vx-dim)",
},
fontFamily: {
sans: ["var(--font-geist-sans)", "system-ui", "sans-serif"],
mono: ["var(--font-geist-mono)", "JetBrains Mono", "monospace"],
},
backgroundImage: {
- "vx-gradient": "linear-gradient(135deg, rgba(76,235,168,0.06) 0%, rgba(167,139,250,0.06) 100%)",
+ "vx-gradient": "linear-gradient(135deg, rgba(76,235,168,0.06) 0%, rgba(167,139,250,0.06) 100%)",
"vx-card-gradient": "linear-gradient(160deg, rgba(76,235,168,0.03) 0%, transparent 60%)",
},
keyframes: {