diff --git a/src/components/sections/Contact.svelte b/src/components/sections/Contact.svelte index 1045853..49416f4 100644 --- a/src/components/sections/Contact.svelte +++ b/src/components/sections/Contact.svelte @@ -359,12 +359,13 @@ required autocomplete="name" aria-invalid={fieldErrors.name ? 'true' : 'false'} + aria-describedby={fieldErrors.name ? 'contact-name-error' : undefined} placeholder="Jane Smith" class="terminal-input" /> {#if fieldErrors.name} - + {/if} @@ -402,12 +403,13 @@ autocomplete="email" inputmode="email" aria-invalid={fieldErrors.email ? 'true' : 'false'} + aria-describedby={fieldErrors.email ? 'contact-email-error' : undefined} placeholder="jane@company.com" class="terminal-input" /> {#if fieldErrors.email} - + {/if} @@ -425,12 +427,13 @@ required rows={5} aria-invalid={fieldErrors.message ? 'true' : 'false'} + aria-describedby={fieldErrors.message ? 'contact-message-error' : undefined} placeholder="Tell me about your consulting or architecture design needs, timeline, and budget..." class="terminal-input terminal-input-textarea" > {#if fieldErrors.message} - + {/if} diff --git a/src/components/sections/Portfolio.svelte b/src/components/sections/Portfolio.svelte index eed3d6f..a36dbaf 100644 --- a/src/components/sections/Portfolio.svelte +++ b/src/components/sections/Portfolio.svelte @@ -242,6 +242,10 @@ animation: none; opacity: 0; } + + .clients-track { + animation: none; + } } /* Phosphor — clients marquee crawl */ diff --git a/src/components/sections/RssFeed.svelte b/src/components/sections/RssFeed.svelte index f224f7d..810fee7 100644 --- a/src/components/sections/RssFeed.svelte +++ b/src/components/sections/RssFeed.svelte @@ -111,7 +111,7 @@ {#if loading}
- {#each Array.from({ length: 3 }) as _, i} + {#each Array.from({ length: maxItems }) as _, i}
= ['technical', 'creative']; + const currentIdx = tabs.indexOf(activeTab); + let nextIdx: number | null = null; + + if (e.key === 'ArrowRight') { + nextIdx = (currentIdx + 1) % tabs.length; + } else if (e.key === 'ArrowLeft') { + nextIdx = (currentIdx - 1 + tabs.length) % tabs.length; + } else if (e.key === 'Home') { + nextIdx = 0; + } else if (e.key === 'End') { + nextIdx = tabs.length - 1; + } + + if (nextIdx !== null) { + e.preventDefault(); + activeTab = tabs[nextIdx]; + document.getElementById(`tab-${tabs[nextIdx]}`)?.focus(); + } + } + $effect(() => { activeTab; @@ -204,7 +226,7 @@
-
+