From 5b4a057a005d6fd2b99375e252277305b0a85c74 Mon Sep 17 00:00:00 2001 From: Anto01 Date: Tue, 13 Jan 2026 22:18:45 -0500 Subject: [PATCH] =?UTF-8?q?Add=20contact=20form,=20accessibility=20feature?= =?UTF-8?q?s,=20I=E2=86=92we=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htaccess | 30 +++++++ fr.html | 225 ++++++++++++++++++++++++++++++++++++++++++++------- index.html | 234 ++++++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 422 insertions(+), 67 deletions(-) create mode 100644 .htaccess diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..b9b9dbbb --- /dev/null +++ b/.htaccess @@ -0,0 +1,30 @@ +# Atomaste Static Site +Options -Indexes + +# Redirect old broken URLs to homepage +RedirectMatch 301 ^/custom-telescope-mirror-support.*$ / +RedirectMatch 301 ^/product.*$ / +RedirectMatch 301 ^/shop.*$ / + +# Redirect to index.html as default +DirectoryIndex index.html + +# Enable GZIP compression + + AddOutputFilterByType DEFLATE text/html text/css application/javascript image/svg+xml + + +# Cache static assets + + ExpiresActive On + ExpiresByType image/png "access plus 1 month" + ExpiresByType image/svg+xml "access plus 1 month" + ExpiresByType text/css "access plus 1 week" + + +# Security Headers + + Header set X-Content-Type-Options "nosniff" + Header set X-Frame-Options "SAMEORIGIN" + Header set Referrer-Policy "strict-origin-when-cross-origin" + diff --git a/fr.html b/fr.html index 49b50f03..c17565c1 100644 --- a/fr.html +++ b/fr.html @@ -258,9 +258,119 @@ body { @media (max-width: 768px) { .hero-title { font-size: 2.5rem; } } + +/* Accessibility: Reduced Motion */ +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } + .grid-bg { animation: none; } + .glow-orb { animation: none; } + .float, .float-delay, .float-reverse { animation: none; } + .pulse-glow { animation: none; } + .neural-dot { animation: none; } + .scan-line::after { animation: none; } + html { scroll-behavior: auto; } +} + +/* Accessibility: Focus States */ +*:focus-visible { + outline: 2px solid var(--cyan-primary); + outline-offset: 2px; +} +a:focus-visible, button:focus-visible { + outline: 2px solid var(--cyan-primary); + outline-offset: 2px; + border-radius: 4px; +} + +/* Skip to Content Link */ +.skip-link { + position: absolute; + top: -40px; + left: 0; + background: var(--cyan-primary); + color: #000; + padding: 8px 16px; + z-index: 100; + font-weight: 600; + transition: top 0.3s; +} +.skip-link:focus { + top: 0; +} + +/* Back to Top Button */ +.back-to-top { + position: fixed; + bottom: 2rem; + right: 2rem; + width: 48px; + height: 48px; + border-radius: 50%; + background: rgba(0, 212, 230, 0.9); + color: #000; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + transform: translateY(20px); + transition: all 0.3s ease; + z-index: 50; + border: none; + cursor: pointer; +} +.back-to-top.visible { + opacity: 1; + visibility: visible; + transform: translateY(0); +} +.back-to-top:hover { + background: var(--cyan-primary); + box-shadow: 0 0 20px rgba(0, 212, 230, 0.5); +} + +/* Contact Form Styles */ +.contact-form input, +.contact-form textarea, +.contact-form select { + width: 100%; + padding: 1rem; + background: rgba(10, 20, 35, 0.6); + border: 1px solid rgba(0, 212, 230, 0.2); + border-radius: 0.75rem; + color: #fff; + font-family: inherit; + transition: all 0.3s ease; +} +.contact-form input:focus, +.contact-form textarea:focus, +.contact-form select:focus { + outline: none; + border-color: var(--cyan-primary); + box-shadow: 0 0 0 3px rgba(0, 212, 230, 0.1); +} +.contact-form input::placeholder, +.contact-form textarea::placeholder { + color: #6b7280; +} +.contact-form label { + display: block; + margin-bottom: 0.5rem; + color: #9ca3af; + font-size: 0.875rem; +} +.contact-form select option { + background: #0a1428; + color: #fff; +} + @@ -277,7 +387,7 @@ body { -
+
@@ -730,7 +840,7 @@ body {
-
Consultation
+
Consultation & GP

Accompagnement technique

@@ -825,7 +935,7 @@ body {

- Ma démarche d'optimisation allie analyse rigoureuse et algorithmes de recherche performants. + Notre démarche d'optimisation allie analyse rigoureuse et algorithmes de recherche performants. Stabilité thermique, déformation de surface, réponse dynamique, coût de fabrication, objectifs multiples : l'approche s'adapte à vos exigences.

@@ -1087,46 +1197,79 @@ body {
- +
-
@@ -1277,6 +1420,26 @@ body { document.querySelectorAll('.glass, .glass-strong').forEach(el => { observer.observe(el); }); + + // Back to Top Button + const backToTopBtn = document.getElementById('back-to-top'); + if (backToTopBtn) { + window.addEventListener('scroll', () => { + if (window.scrollY > 500) { + backToTopBtn.classList.add('visible'); + } else { + backToTopBtn.classList.remove('visible'); + } + }); + backToTopBtn.addEventListener('click', () => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }); + } + + + diff --git a/index.html b/index.html index 96919c40..94a8e718 100644 --- a/index.html +++ b/index.html @@ -258,9 +258,118 @@ body { @media (max-width: 768px) { .hero-title { font-size: 2.5rem; } } +/* Accessibility: Reduced Motion */ +@media (prefers-reduced-motion: reduce) { + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } + .grid-bg { animation: none; } + .glow-orb { animation: none; } + .float, .float-delay, .float-reverse { animation: none; } + .pulse-glow { animation: none; } + .neural-dot { animation: none; } + .scan-line::after { animation: none; } + html { scroll-behavior: auto; } +} + +/* Accessibility: Focus States */ +*:focus-visible { + outline: 2px solid var(--cyan-primary); + outline-offset: 2px; +} +a:focus-visible, button:focus-visible { + outline: 2px solid var(--cyan-primary); + outline-offset: 2px; + border-radius: 4px; +} + +/* Skip to Content Link */ +.skip-link { + position: absolute; + top: -40px; + left: 0; + background: var(--cyan-primary); + color: #000; + padding: 8px 16px; + z-index: 100; + font-weight: 600; + transition: top 0.3s; +} +.skip-link:focus { + top: 0; +} + +/* Back to Top Button */ +.back-to-top { + position: fixed; + bottom: 2rem; + right: 2rem; + width: 48px; + height: 48px; + border-radius: 50%; + background: rgba(0, 212, 230, 0.9); + color: #000; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + transform: translateY(20px); + transition: all 0.3s ease; + z-index: 50; + border: none; + cursor: pointer; +} +.back-to-top.visible { + opacity: 1; + visibility: visible; + transform: translateY(0); +} +.back-to-top:hover { + background: var(--cyan-primary); + box-shadow: 0 0 20px rgba(0, 212, 230, 0.5); +} + +/* Contact Form Styles */ +.contact-form input, +.contact-form textarea, +.contact-form select { + width: 100%; + padding: 1rem; + background: rgba(10, 20, 35, 0.6); + border: 1px solid rgba(0, 212, 230, 0.2); + border-radius: 0.75rem; + color: #fff; + font-family: inherit; + transition: all 0.3s ease; +} +.contact-form input:focus, +.contact-form textarea:focus, +.contact-form select:focus { + outline: none; + border-color: var(--cyan-primary); + box-shadow: 0 0 0 3px rgba(0, 212, 230, 0.1); +} +.contact-form input::placeholder, +.contact-form textarea::placeholder { + color: #6b7280; +} +.contact-form label { + display: block; + margin-bottom: 0.5rem; + color: #9ca3af; + font-size: 0.875rem; +} +.contact-form select option { + background: #0a1428; + color: #fff; +} + @@ -277,7 +386,7 @@ body { -
+
@@ -353,7 +462,7 @@ body {

Validate.
- Optimize.
+ Optimize.
Deliver.

@@ -730,8 +839,8 @@ body {
-
Consulting
-

Technical guidance

+
Consulting & PM
+

Guidance & project coordination

@@ -825,7 +934,7 @@ body {

- My optimization workflow combines rigorous engineering analysis with efficient search algorithms. + Our optimization workflow combines rigorous engineering analysis with efficient search algorithms. Whether targeting thermal stability, minimizing surface deformation, improving dynamic response, reducing manufacturing cost, or balancing multiple competing objectives simultaneously, the approach adapts to your specific engineering requirements. @@ -1196,7 +1305,7 @@ body {

Fully Integrated Workflow
-

CAD → FEA → Optimization → Results

+

CAD → FEA → Optimization → Results

@@ -1211,46 +1320,79 @@ body {
- +
-
@@ -1261,10 +1403,10 @@ body {
Atomaste - © 2025 Atomaste + © 2025 Atomaste
- Rouyn-Noranda, Québec + Rouyn-Noranda, Québec
@@ -1401,6 +1543,26 @@ body { document.querySelectorAll('.glass, .glass-strong').forEach(el => { observer.observe(el); }); + + // Back to Top Button + const backToTopBtn = document.getElementById('back-to-top'); + if (backToTopBtn) { + window.addEventListener('scroll', () => { + if (window.scrollY > 500) { + backToTopBtn.classList.add('visible'); + } else { + backToTopBtn.classList.remove('visible'); + } + }); + backToTopBtn.addEventListener('click', () => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }); + } + + +