mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-08-27 19:17:11 +00:00
feat(website): SEO, a11y, and build pipeline overhaul
- SEO: per-locale og:locale, Organization+WebSite schema, FAQPage replacing ItemList - SEO: BreadcrumbList on legal pages, site.webmanifest, expanded sitemap - a11y: hamburger ARIA+ESC, skip-to-content, aria-hidden on step-num - a11y: focus-visible states, prefers-reduced-motion, emoji→SVG icons - CSS: extract .mock-section-label, replace transition:all, will-change hints - Build: esbuild JS minifier (-46%), sharp AVIF conversion (26 files, quality 70) - Build: content hashing (style.XXXX.min.css), SVG minification, picture injection - Cleanup: remove lightningcss (caused CSS merging bugs)
This commit is contained in:
+82
-12
@@ -255,13 +255,12 @@ nav {
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1), color 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background: var(--accent);
|
||||
color: white;
|
||||
@@ -400,7 +399,7 @@ nav {
|
||||
padding: 8px 4px;
|
||||
cursor: pointer;
|
||||
border-radius: 8px;
|
||||
transition: all 0.2s;
|
||||
transition: color 0.2s, background-color 0.2s;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -455,6 +454,15 @@ nav {
|
||||
margin-bottom: 0.4rem;
|
||||
}
|
||||
|
||||
.mock-section-label {
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
text-transform: uppercase;
|
||||
color: var(--text-muted);
|
||||
margin-bottom: 4px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.mock-input {
|
||||
background: #1e293b;
|
||||
border: 1px solid #334155;
|
||||
@@ -729,7 +737,7 @@ input:checked + .mock-slider:before {
|
||||
border-radius: 24px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3);
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
@@ -769,7 +777,7 @@ input:checked + .mock-slider:before {
|
||||
color: var(--accent);
|
||||
border-radius: 12px;
|
||||
margin-right: 14px;
|
||||
transition: all 0.3s ease;
|
||||
transition: background 0.3s ease, color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
|
||||
}
|
||||
|
||||
.feature-card:hover .feature-icon-svg {
|
||||
@@ -977,7 +985,7 @@ input:checked + .mock-slider:before {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.05);
|
||||
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.4s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
}
|
||||
|
||||
.step-illustration-1:hover, .step-illustration-2:hover, .step-illustration-3:hover {
|
||||
@@ -1056,7 +1064,7 @@ input:checked + .mock-slider:before {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.3s;
|
||||
transition: opacity 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.illus-extension-btn.active {
|
||||
@@ -1142,7 +1150,7 @@ input:checked + .mock-slider:before {
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
|
||||
cursor: default;
|
||||
transition: all 0.2s;
|
||||
transition: opacity 0.2s, transform 0.2s;
|
||||
}
|
||||
|
||||
.illus-store-btn img {
|
||||
@@ -1692,7 +1700,7 @@ input:checked + .mock-slider:before {
|
||||
padding: 0.35rem 0.75rem;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
transition: color 0.2s, background-color 0.2s;
|
||||
}
|
||||
|
||||
.terminal-tab-btn:hover {
|
||||
@@ -1751,7 +1759,7 @@ input:checked + .mock-slider:before {
|
||||
font-weight: 600;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
transition: background-color 0.2s, color 0.2s, opacity 0.2s;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
@@ -1779,7 +1787,7 @@ footer {
|
||||
[data-reveal] {
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition: opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1), transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
[data-reveal].revealed {
|
||||
@@ -1902,7 +1910,7 @@ html:not(.lang-de) [lang="de"] {
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-radius: 9999px;
|
||||
padding: 6px 14px 6px 12px;
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
transition: background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1), color 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
@@ -2570,3 +2578,65 @@ html:not(.lang-de) [lang="de"] {
|
||||
box-shadow: 0 20px 25px -5px rgba(34, 197, 94, 0.4);
|
||||
}
|
||||
|
||||
/* --- Focus states for interactive cards --- */
|
||||
.feature-card:focus-visible,
|
||||
.use-case-card:focus-visible,
|
||||
.compat-logo:focus-visible {
|
||||
outline: 2px solid var(--accent);
|
||||
outline-offset: 4px;
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
.feature-card,
|
||||
.use-case-card,
|
||||
.compat-logo {
|
||||
scroll-margin-top: 100px;
|
||||
}
|
||||
|
||||
/* --- Skip-to-content accessibility link --- */
|
||||
.skip-link {
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
top: 0;
|
||||
background: var(--accent);
|
||||
color: white;
|
||||
padding: 0.75rem 1.25rem;
|
||||
border-radius: 0 0 8px 0;
|
||||
font-weight: 700;
|
||||
z-index: 9999;
|
||||
text-decoration: none;
|
||||
}
|
||||
.skip-link:focus {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
/* --- Reduced motion support --- */
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*, *::before, *::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
animation-iteration-count: 1 !important;
|
||||
transition-duration: 0.01ms !important;
|
||||
scroll-behavior: auto !important;
|
||||
}
|
||||
.blob { animation: none; }
|
||||
.join-status-pulse { animation: none; }
|
||||
.status-ring.active-pulse { animation: none; }
|
||||
}
|
||||
|
||||
/* --- will-change hints for animated elements --- */
|
||||
.blob,
|
||||
.join-status-pulse,
|
||||
.status-ring.active-pulse,
|
||||
.hero-mockup-wrapper,
|
||||
.cta-group .btn {
|
||||
will-change: transform, opacity;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.blob,
|
||||
.join-status-pulse,
|
||||
.status-ring.active-pulse,
|
||||
.hero-mockup-wrapper,
|
||||
.cta-group .btn {
|
||||
will-change: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user