Files
KoalaSync/website/style.css
T
Timo 79025f4d18 feat: new TwoPointZero branding - icons, favicon, mockup i18n
- Replace extension icons with new TwoPointZero design (16/32/48/96/128)
- Update manifest.base.json with 32+96 icon sizes
- Increase popup logo to 48px, website nav logo to 64px
- Generate website webp sizes (64/128/200) + AVIF variants from 600px source
- Add favicon PNGs (16x16, 32x32) + apple-touch-icon + 192x192
- Fix logo vertical centering via display:contents on picture wrappers
- Convert mockup section from inline <span lang> pairs to {{MOCK_*}} template vars
- Add MOCK translations for FR, ES, PT-BR, RU locale files
- Bump AVIF quality 70->80, speed 6->4, remove min 3KB threshold
- Regenerate www/ with build.js
2026-06-01 15:29:33 +02:00

2735 lines
58 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* KoalaSync Design System - Privacy-Focused (No External Assets) */
:root {
--bg: #0f172a;
--card: #1e293b;
--accent: #6366f1;
--accent-glow: rgba(99, 102, 241, 0.3);
--text: #f8fafc;
--text-muted: #cbd5e1; /* Increased contrast for WCAG AA (6.28:1 contrast ratio) */
--success: #22c55e;
--glass: rgba(30, 41, 59, 0.4);
--glass-border: rgba(255, 255, 255, 0.05);
}
.invite-banner {
background: var(--accent);
color: white;
padding: 0.75rem 0;
text-align: center;
font-weight: 600;
font-size: 0.9rem;
position: relative;
z-index: 2000;
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
}
.btn-banner {
background: white;
color: var(--accent);
padding: 4px 12px;
border-radius: 6px;
text-decoration: none;
font-size: 0.8rem;
font-weight: 700;
margin-left: 12px;
cursor: pointer;
border: none;
transition: transform 0.2s;
}
.btn-banner:hover {
transform: scale(1.05);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
border-radius: 6px;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
background-color: var(--bg);
color: var(--text);
line-height: 1.6;
overflow-x: hidden;
position: relative;
}
/* --- Animated Background --- */
.bg-blobs {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
overflow: hidden;
background: radial-gradient(circle at 50% 50%, #1e1b4b 0%, #0f172a 100%);
}
.blob {
position: absolute;
width: 600px;
height: 600px;
background: radial-gradient(circle, var(--accent-glow) 0%, transparent 70%);
filter: blur(80px);
border-radius: 50%;
opacity: 0.5;
animation: move 25s infinite alternate ease-in-out;
}
.blob-1 { top: -100px; left: -100px; animation-delay: 0s; }
.blob-2 { bottom: -100px; right: -100px; animation-delay: -5s; background: radial-gradient(circle, rgba(139, 92, 246, 0.2) 0%, transparent 70%); }
.blob-3 { top: 40%; left: 30%; animation-duration: 35s; animation-delay: -10s; }
@keyframes move {
0% { transform: translate(0, 0) scale(1); }
33% { transform: translate(100px, 100px) scale(1.2); }
66% { transform: translate(-50px, 200px) scale(0.8); }
100% { transform: translate(0, 0) scale(1); }
}
/* --- Layout --- */
.container {
max-width: 1100px;
margin: 0 auto;
padding: 0 2rem;
}
section {
padding: 6rem 0;
}
/* Content-visibility for offscreen sections to improve INP */
.use-cases-section,
#features,
#self-hosting,
.comparison-section {
content-visibility: auto;
contain-intrinsic-size: auto 1400px;
}
/* --- Navigation --- */
nav {
position: fixed;
top: 0;
width: 100%;
z-index: 1000;
background: var(--glass);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--glass-border);
padding: 1rem 0;
}
.nav-content {
display: flex;
justify-content: space-between;
align-items: center;
}
.logo-area {
display: flex;
align-items: center;
gap: 0.75rem;
font-weight: 800;
font-size: 1.5rem;
letter-spacing: -0.5px;
}
.logo-area picture {
display: contents;
}
.logo-area img {
height: 64px;
width: 64px;
object-fit: contain;
border-radius: 8px;
margin: -4px 0;
}
.nav-ext-status {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 3px 8px;
background: rgba(16, 185, 129, 0.15);
border: 1px solid rgba(16, 185, 129, 0.3);
color: #10b981;
border-radius: 12px;
font-size: 0.55rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.05em;
box-shadow: 0 0 10px rgba(16, 185, 129, 0.1);
animation: fade-in 0.4s ease-out;
margin-left: 0.2rem;
}
@keyframes fade-in {
from { opacity: 0; transform: translateY(-5px); }
to { opacity: 1; transform: translateY(0); }
}
.nav-links {
display: flex;
gap: 2rem;
}
.nav-links a {
color: var(--text-muted);
text-decoration: none;
font-weight: 500;
transition: color 0.3s;
}
.nav-links a:hover {
color: var(--accent);
}
/* --- Hero Section --- */
.hero {
min-height: 100vh;
display: flex;
align-items: center;
padding-top: 8rem;
padding-bottom: 4rem;
}
.hero-grid {
display: grid;
grid-template-columns: 1.2fr 1fr;
align-items: center;
gap: 4rem;
text-align: left;
width: 100%;
}
.hero-text h1 {
font-size: 4.5rem;
font-weight: 800;
line-height: 1.1;
margin-bottom: 1.5rem;
background: linear-gradient(to bottom, #fff 40%, #6366f1);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.hero-text p, .hero-subtitle {
font-size: 1.25rem;
color: var(--text-muted);
margin-bottom: 2.5rem;
max-width: 600px;
font-weight: 400;
line-height: 1.6;
}
.hero-mascot-container {
display: block;
margin-bottom: -0.5rem;
margin-left: 2.2rem;
}
.hero-lookdown-mascot {
display: block;
width: 90px;
height: auto;
}
@media (max-width: 768px) {
.hero-mascot-container {
margin-left: 0;
display: flex;
justify-content: center;
}
}
.cta-group {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.btn {
padding: 0.85rem 1.75rem;
border-radius: 12px;
font-weight: 600;
text-decoration: none;
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: #5b5de8;
color: white;
box-shadow: 0 10px 15px -3px var(--accent-glow);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 20px 25px -5px var(--accent-glow);
}
.btn-firefox {
background: #e66000;
color: white;
box-shadow: 0 10px 15px -3px rgba(230, 96, 0, 0.3);
}
.btn-firefox:hover {
background: #ff7300;
transform: translateY(-2px);
box-shadow: 0 20px 25px -5px rgba(230, 96, 0, 0.4);
}
.btn-secondary {
background: var(--card);
color: var(--text);
border: 1px solid var(--glass-border);
}
.btn-secondary:hover {
background: #2d3748;
transform: translateY(-2px);
}
.version-badge {
display: inline-block;
background: rgba(99, 102, 241, 0.1);
color: var(--accent);
padding: 0.4rem 1rem;
border-radius: 99px;
font-size: 0.8rem;
font-weight: 700;
margin-bottom: 1.5rem;
border: 1px solid rgba(99, 102, 241, 0.3);
letter-spacing: 0.05em;
text-transform: uppercase;
}
/* --- Interactive CSS Extension Mockup --- */
.hero-mockup-wrapper {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
}
.extension-mockup {
width: 320px;
height: 520px;
background: #0f172a;
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.08);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4), 0 0 20px rgba(99, 102, 241, 0.15);
display: flex;
flex-direction: column;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
overflow: hidden;
position: relative;
user-select: none;
padding: 16px;
padding-bottom: 0;
box-sizing: border-box;
}
.mock-header-row {
display: flex;
align-items: center;
margin-bottom: 16px;
flex-shrink: 0;
}
.mock-header-title {
font-size: 18px;
margin: 0;
color: var(--accent);
letter-spacing: 1px;
text-transform: uppercase;
display: inline-flex;
align-items: center;
gap: 8px;
font-weight: 800;
}
.mock-header-title picture {
display: contents;
}
.mock-header-title img {
width: 28px;
height: 28px;
object-fit: contain;
border-radius: 6px;
}
.mock-version-link {
margin-left: auto;
display: flex;
align-items: center;
gap: 4px;
font-size: 10px;
color: var(--text-muted);
text-decoration: none;
opacity: 0.5;
transition: opacity 0.2s, color 0.2s;
cursor: pointer;
}
.mock-version-link:hover {
opacity: 1;
color: var(--accent);
}
.mock-tabs {
display: flex;
gap: 4px;
background: #1e293b;
padding: 4px;
border-radius: 12px;
margin-bottom: 20px;
flex-shrink: 0;
}
.mock-tab {
flex: 1;
background: none;
border: none;
color: var(--text-muted);
font-size: 0.75rem;
font-weight: 600;
padding: 8px 4px;
cursor: pointer;
border-radius: 8px;
transition: color 0.2s, background-color 0.2s;
text-align: center;
}
.mock-tab:hover {
color: var(--text);
}
.mock-tab.active {
background: var(--accent);
color: white;
}
.mock-body {
flex: 1;
overflow-y: auto;
padding: 0;
padding-bottom: 16px;
display: flex;
flex-direction: column;
font-size: 0.8rem;
scrollbar-width: none; /* Firefox */
}
.mock-body::-webkit-scrollbar {
display: none; /* Chrome, Safari, Opera */
}
.mock-screen {
display: none;
flex-direction: column;
gap: 12px;
}
.mock-screen.active {
display: flex;
}
/* Common Mockup Components */
.mock-card {
background: #1e293b;
border: 1px solid #334155;
border-radius: 8px;
padding: 12px;
}
.mock-label {
font-size: 0.65rem;
font-weight: 700;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
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;
border-radius: 8px;
color: white;
padding: 8px 10px;
font-size: 0.75rem;
width: 100%;
outline: none;
}
.mock-btn {
background: var(--accent);
color: white;
border: none;
border-radius: 6px;
padding: 0.5rem;
font-weight: 600;
font-size: 0.75rem;
cursor: pointer;
transition: background 0.2s;
text-align: center;
}
.mock-btn:hover {
background: #4f46e5;
}
/* Room Tab Details */
.mock-joined-room {
display: flex;
justify-content: space-between;
align-items: center;
background: rgba(99, 102, 241, 0.1);
border: 1px solid rgba(99, 102, 241, 0.2);
border-radius: 8px;
padding: 0.6rem 0.75rem;
}
.mock-room-name {
font-weight: 700;
color: var(--accent);
font-size: 0.85rem;
}
.mock-server-badge {
background: rgba(99, 102, 241, 0.2);
color: var(--accent);
font-size: 0.6rem;
font-weight: 700;
padding: 2px 6px;
border-radius: 4px;
}
.mock-invite-box {
display: flex;
gap: 0.4rem;
}
.mock-invite-box input {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.mock-peer-list {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.mock-peer-item {
display: flex;
flex-direction: column;
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.03);
border-radius: 8px;
padding: 0.5rem 0.6rem;
}
.mock-peer-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.25rem;
}
.mock-peer-name {
font-weight: 700;
color: var(--text);
}
.mock-peer-meta {
font-size: 0.65rem;
color: var(--text-muted);
}
.mock-peer-tab {
font-size: 0.7rem;
color: var(--accent);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.mock-peer-status {
font-size: 0.65rem;
color: var(--text-muted);
display: flex;
align-items: center;
gap: 0.25rem;
}
/* Sync Tab Details */
.mock-target-box {
display: flex;
align-items: center;
gap: 0.4rem;
background: rgba(234, 179, 8, 0.1);
border: 1px solid rgba(234, 179, 8, 0.2);
color: #facc15;
padding: 0.5rem 0.6rem;
border-radius: 8px;
font-weight: 600;
font-size: 0.7rem;
}
.mock-ctrl-buttons {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.5rem;
}
.mock-btn-play { background: #22c55e; }
.mock-btn-play:hover { background: #16a34a; }
.mock-btn-pause { background: #ef4444; }
.mock-btn-pause:hover { background: #dc2626; }
.mock-btn-force { background: var(--accent); grid-column: span 2; }
.mock-status-display {
display: flex;
align-items: center;
justify-content: space-between;
}
.mock-status-pill {
display: inline-flex;
align-items: center;
gap: 0.3rem;
background: rgba(34, 197, 94, 0.1);
border: 1px solid rgba(34, 197, 94, 0.2);
color: #22c55e;
padding: 2px 8px;
border-radius: 99px;
font-size: 0.65rem;
font-weight: 700;
}
.mock-log-item {
font-size: 0.7rem;
color: var(--text-muted);
border-left: 2px solid var(--accent);
padding-left: 0.4rem;
margin-top: 0.4rem;
}
/* Settings Tab Details */
.mock-settings-row {
display: flex;
align-items: flex-start;
gap: 0.5rem;
margin-bottom: 0.6rem;
}
.mock-settings-row input[type="checkbox"] {
margin-top: 0.2rem;
cursor: pointer;
}
.mock-settings-row label {
cursor: pointer;
font-weight: 600;
}
.mock-settings-row p {
font-size: 0.65rem;
color: var(--text-muted);
margin-top: 0.1rem;
}
/* Mock Toggle Switch Details */
.mock-toggle-switch {
position: relative;
display: inline-block;
width: 36px;
height: 20px;
flex-shrink: 0;
}
.mock-toggle-switch input {
opacity: 0;
width: 0;
height: 0;
}
.mock-slider {
position: absolute;
cursor: default;
top: 0; left: 0; right: 0; bottom: 0;
background-color: #334155;
transition: .3s;
border-radius: 20px;
}
.mock-slider:before {
position: absolute;
content: "";
height: 14px;
width: 14px;
left: 3px;
bottom: 3px;
background-color: #94a3b8;
transition: .3s;
border-radius: 50%;
}
input:checked + .mock-slider {
background-color: var(--accent);
}
input:checked + .mock-slider:before {
transform: translateX(16px);
background-color: white;
}
/* Dev Tab Details */
.mock-diagnostic-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.4rem;
}
.mock-diag-box {
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.04);
border-radius: 6px;
padding: 0.4rem;
}
.mock-diag-box .diag-val {
font-family: monospace;
font-weight: 700;
color: var(--accent);
font-size: 0.75rem;
}
/* --- Features --- */
/* Bento Grid Layout Configuration */
.features-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
margin-top: 4rem;
}
.feature-card {
background: rgba(30, 41, 59, 0.45);
backdrop-filter: blur(16px) saturate(120%);
-webkit-backdrop-filter: blur(16px) saturate(120%);
padding: 2.5rem;
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: 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;
}
.feature-card::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
border-radius: 24px;
padding: 1px;
background: linear-gradient(to bottom right, rgba(255, 255, 255, 0.12), transparent);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 30px rgba(99, 102, 241, 0.2);
border-color: rgba(99, 102, 241, 0.3);
}
.feature-card:hover::before {
background: linear-gradient(to bottom right, rgba(99, 102, 241, 0.3), transparent);
}
/* Feature Icon with Inline SVG Wrapper */
.feature-icon-svg {
display: flex;
flex-shrink: 0;
align-items: center;
justify-content: center;
width: 44px;
height: 44px;
background: rgba(99, 102, 241, 0.12);
color: var(--accent);
border-radius: 12px;
margin-right: 14px;
transition: background 0.3s ease, color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
}
.feature-card:hover .feature-icon-svg {
background: var(--accent);
color: white;
box-shadow: 0 0 15px var(--accent-glow);
transform: scale(1.05);
}
.bento-icon {
width: 22px;
height: 22px;
display: block;
flex-shrink: 0;
}
.feature-card h3 {
margin-bottom: 1rem;
font-size: 1.25rem;
font-weight: 700;
display: flex;
align-items: center;
}
.feature-card p {
color: var(--text-muted);
font-size: 0.95rem;
line-height: 1.6;
}
/* Bento Asymmetric Spanning */
.feature-card.bento-large {
grid-column: span 2;
background: linear-gradient(135deg, rgba(30, 41, 59, 0.45) 0%, rgba(99, 102, 241, 0.08) 100%);
padding: 3rem 3.5rem;
display: grid;
grid-template-columns: 1fr 2fr;
gap: 3rem;
align-items: center;
}
.feature-card.bento-large h3 {
flex-direction: column;
align-items: center;
text-align: center;
gap: 1rem;
margin-bottom: 0;
font-size: 1.25rem;
}
.feature-card.bento-large .feature-icon,
.feature-card.bento-large .feature-icon-svg {
width: 52px;
height: 52px;
border-radius: 14px;
margin-right: 0;
flex-shrink: 0;
}
.feature-card.bento-large .bento-icon {
width: 24px;
height: 24px;
}
.feature-card.bento-large p {
font-size: 1rem;
line-height: 1.7;
margin: 0;
}
.feature-card.bento-large::after {
content: '';
position: absolute;
top: 0;
left: 2.5rem;
right: 2.5rem;
height: 2px;
background: linear-gradient(90deg, transparent, rgba(99, 102, 241, 0.4), transparent);
opacity: 0;
transition: opacity 0.3s ease;
}
.feature-card.bento-large:hover::after {
opacity: 1;
}
@media (max-width: 900px) {
.features-grid {
grid-template-columns: repeat(2, 1fr);
gap: 1.25rem;
}
.feature-card.bento-large {
grid-column: span 2;
padding: 2.5rem;
gap: 2rem;
}
.feature-card.bento-large h3 {
font-size: 1.15rem;
}
}
@media (max-width: 600px) {
.features-grid {
grid-template-columns: 1fr;
gap: 1rem;
}
.feature-card.bento-large {
grid-column: span 1;
display: flex;
flex-direction: column;
padding: 1.75rem;
gap: 1rem;
}
.feature-card.bento-large h3 {
flex-direction: row;
align-items: center;
text-align: left;
gap: 0.75rem;
margin-bottom: 0;
font-size: 1.15rem;
}
.feature-card.bento-large .feature-icon,
.feature-card.bento-large .feature-icon-svg {
width: 40px;
height: 40px;
border-radius: 10px;
margin-right: 0;
}
.feature-card.bento-large .bento-icon {
width: 18px;
height: 18px;
}
.feature-card.bento-large p {
font-size: 0.9rem;
line-height: 1.6;
}
.feature-card.bento-large::after {
display: none;
}
.feature-card {
padding: 1.75rem;
}
.feature-card h3 {
font-size: 1.1rem;
}
.feature-icon-svg {
width: 40px;
height: 40px;
border-radius: 10px;
margin-right: 12px;
}
.bento-icon {
width: 18px;
height: 18px;
}
}
/* --- How it works --- */
.steps {
display: flex;
flex-direction: column;
gap: 6rem;
}
.step {
display: grid;
grid-template-columns: 1fr 1.1fr;
gap: 6rem;
align-items: center;
}
.step:nth-child(even) .step-text {
order: 2;
}
.step-num {
font-size: 4rem;
font-weight: 800;
color: rgba(99, 102, 241, 0.15);
line-height: 1;
margin-bottom: 0.5rem;
}
.step-text h3 {
font-size: 1.85rem;
margin-bottom: 1rem;
font-weight: 800;
}
.step-text p {
color: var(--text-muted);
font-size: 1.05rem;
line-height: 1.6;
}
/* Custom CSS Mockups for step illustrations */
.step-illustration-1, .step-illustration-2, .step-illustration-3 {
background: radial-gradient(circle at top left, #1e293b, #0f172a);
height: 280px; /* Slightly taller for more detail and breathing room */
border-radius: 24px;
border: 1px solid var(--glass-border);
position: relative;
overflow: hidden;
display: flex;
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: 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 {
transform: translateY(-6px) scale(1.02);
border-color: rgba(99, 102, 241, 0.25);
box-shadow: 0 25px 50px rgba(99, 102, 241, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* ==========================================================================
Step 1 Illustration: Browser & Installed Success Popup
========================================================================== */
.illus-browser-container {
width: 90%;
height: 80%;
background: #090d16;
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 12px;
overflow: hidden;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
}
.illus-browser-header {
background: #131924;
padding: 0.6rem 0.8rem;
display: flex;
align-items: center;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.illus-browser-dots {
display: flex;
gap: 6px;
margin-right: 1.5rem;
}
.illus-browser-dot {
width: 8px;
height: 8px;
border-radius: 50%;
opacity: 0.6;
}
.illus-browser-dot:nth-child(1) { background: #ef4444; }
.illus-browser-dot:nth-child(2) { background: #fbbf24; }
.illus-browser-dot:nth-child(3) { background: #22c55e; }
.illus-browser-address-bar {
background: #090d16;
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 6px;
color: var(--text-muted);
font-size: 0.68rem;
padding: 3px 12px;
flex-grow: 1;
max-width: 60%;
text-align: center;
font-family: monospace;
letter-spacing: 0.2px;
}
.illus-browser-address-bar .url-protocol {
color: #22c55e;
font-weight: 600;
}
.illus-browser-toolbar {
display: flex;
margin-left: auto;
}
.illus-extension-btn {
width: 22px;
height: 22px;
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
transition: opacity 0.3s, box-shadow 0.3s;
}
.illus-extension-btn.active {
background: rgba(99, 102, 241, 0.2);
border: 1px solid var(--accent);
box-shadow: 0 0 10px rgba(99, 102, 241, 0.4);
animation: active-pulse 2s infinite alternate;
}
@keyframes active-pulse {
0% { transform: scale(1); box-shadow: 0 0 5px rgba(99, 102, 241, 0.4); }
100% { transform: scale(1.08); box-shadow: 0 0 12px rgba(99, 102, 241, 0.7); }
}
.illus-browser-content {
flex-grow: 1;
padding: 1rem;
position: relative;
display: flex;
align-items: flex-start;
}
.illus-store-card {
background: rgba(255, 255, 255, 0.02);
border: 1px solid rgba(255, 255, 255, 0.04);
border-radius: 12px;
padding: 0.8rem;
width: 65%;
display: flex;
flex-direction: column;
gap: 10px;
}
.illus-store-card-header {
display: flex;
align-items: center;
gap: 8px;
}
.illus-large-logo {
width: 30px;
height: 30px;
object-fit: contain;
border-radius: 6px;
box-shadow: 0 0 10px rgba(99, 102, 241, 0.2);
}
.illus-store-info {
display: flex;
flex-direction: column;
}
.illus-store-title {
font-size: 0.88rem;
font-weight: 800;
color: var(--text);
line-height: 1.1;
}
.illus-store-desc {
font-size: 0.58rem;
color: var(--text-muted);
line-height: 1.2;
margin-top: 2px;
}
.illus-store-buttons {
display: flex;
flex-direction: column;
gap: 6px;
}
.illus-store-btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 8px;
border-radius: 8px;
font-size: 0.58rem;
font-weight: 700;
color: white;
border: 1px solid rgba(255, 255, 255, 0.05);
background: rgba(255, 255, 255, 0.03);
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
cursor: default;
transition: opacity 0.2s, transform 0.2s;
}
.illus-store-btn img {
width: 11px;
height: 11px;
display: block;
}
.illus-store-btn.chrome {
border-color: rgba(99, 102, 241, 0.25);
background: rgba(99, 102, 241, 0.08);
box-shadow: 0 0 10px rgba(99, 102, 241, 0.05);
}
.illus-store-btn.firefox {
border-color: rgba(249, 115, 22, 0.25);
background: rgba(249, 115, 22, 0.08);
box-shadow: 0 0 10px rgba(249, 115, 22, 0.05);
}
.install-breathe {
animation: install-breathe 2.5s ease-in-out infinite;
z-index: 2;
position: relative;
}
@keyframes install-breathe {
0%, 100% {
transform: scale(1);
box-shadow: 0 0 15px rgba(99, 102, 241, 0.2);
}
50% {
transform: scale(1.05);
box-shadow: 0 0 25px rgba(99, 102, 241, 0.5);
}
}
.install-breathe.firefox,
.btn-firefox.install-breathe {
animation-name: install-breathe-ff;
}
@keyframes install-breathe-ff {
0%, 100% {
transform: scale(1);
box-shadow: 0 0 15px rgba(249, 115, 22, 0.2);
}
50% {
transform: scale(1.05);
box-shadow: 0 0 25px rgba(249, 115, 22, 0.5);
}
}
/* Glassmorphic Dropping Success Card */
.illus-extension-popup {
position: absolute;
top: 0.6rem;
right: 0.6rem;
width: 145px;
background: rgba(30, 41, 59, 0.75);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.12);
border-radius: 12px;
padding: 0.6rem 0.8rem;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.1);
animation: popup-float 4s ease-in-out infinite;
z-index: 5;
}
@keyframes popup-float {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-4px); }
}
.illus-extension-popup .popup-title {
display: flex;
align-items: center;
gap: 5px;
font-size: 0.72rem;
font-weight: 700;
color: var(--text);
margin-bottom: 6px;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
padding-bottom: 4px;
}
.illus-extension-popup .popup-title img {
width: 12px;
height: 12px;
}
.illus-extension-popup .popup-status {
margin-bottom: 4px;
}
.status-badge-success {
background: rgba(34, 197, 94, 0.12);
color: #22c55e;
font-size: 0.6rem;
font-weight: 700;
padding: 2px 6px;
border-radius: 4px;
border: 1px solid rgba(34, 197, 94, 0.2);
display: inline-flex;
align-items: center;
gap: 3px;
animation: status-glow 2s infinite alternate;
}
@keyframes status-glow {
0% { box-shadow: 0 0 0 rgba(34, 197, 94, 0); }
100% { box-shadow: 0 0 6px rgba(34, 197, 94, 0.3); }
}
.illus-extension-popup .popup-quick-start {
font-size: 0.55rem;
color: var(--text-muted);
font-weight: 500;
line-height: 1.2;
}
/* ==========================================================================
Step 2 Illustration: Highly Realistic Extension Popup (Create Room View)
========================================================================== */
.illus-popup-card {
width: 220px; /* Scaled up 16% for a bigger, much more detailed view */
background: rgba(30, 41, 59, 0.75);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 16px;
padding: 0.95rem; /* Slightly larger padding */
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.1);
display: flex;
flex-direction: column;
gap: 0.75rem; /* Tighter vertical layout rhythm */
animation: popup-float 4s ease-in-out infinite;
animation-delay: -1s;
}
.illus-popup-header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
padding-bottom: 8px;
}
.illus-popup-brand {
display: flex;
align-items: center;
gap: 6px;
font-size: 0.82rem; /* Scaled up font */
font-weight: 800;
letter-spacing: -0.2px;
}
.illus-popup-version {
font-size: 0.58rem;
color: var(--text-muted);
}
.illus-popup-tabs {
display: flex;
gap: 4px;
background: rgba(9, 13, 22, 0.4);
padding: 3px;
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.03);
}
.illus-popup-tab {
flex: 1;
text-align: center;
font-size: 0.62rem; /* Scaled up font */
padding: 4px 0;
border-radius: 6px;
color: var(--text-muted);
font-weight: 600;
}
.illus-popup-tab.active {
background: var(--card);
color: var(--accent);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}
.illus-popup-body {
display: flex;
flex-direction: column;
gap: 0.75rem;
position: relative;
}
.illus-popup-btn {
background: linear-gradient(135deg, var(--accent), #8b5cf6);
border-radius: 8px;
padding: 9px; /* Scaled up padding */
color: white;
font-weight: 700;
font-size: 0.7rem; /* Scaled up font */
text-align: center;
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
position: relative;
overflow: hidden;
cursor: default;
animation: create-btn-pulse 2s infinite alternate;
}
@keyframes create-btn-pulse {
0% { transform: scale(1); box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); }
100% { transform: scale(1.03); box-shadow: 0 6px 16px rgba(99, 102, 241, 0.5); }
}
.illus-btn-shine {
position: absolute;
top: 0;
left: -100%;
width: 50%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.25), transparent);
transform: skewX(-20deg);
animation: shimmer-sweep 3s infinite ease-in-out;
}
@keyframes shimmer-sweep {
0% { left: -100%; }
50%, 100% { left: 150%; }
}
.illus-collapsed-details {
background: rgba(9, 13, 22, 0.4);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 8px;
padding: 7px 12px; /* Scaled up padding */
font-size: 0.56rem; /* Scaled up font */
color: var(--text-muted);
font-weight: 700;
text-transform: uppercase;
display: flex;
align-items: center;
gap: 6px;
letter-spacing: 0.2px;
}
.details-arrow {
font-size: 0.48rem;
color: var(--text-muted);
opacity: 0.7;
}
/* Floating Success Badge */
.illus-floating-success {
position: absolute;
bottom: -1.2rem;
left: 50%;
transform: translateX(-50%);
background: rgba(9, 13, 22, 0.9);
border: 1px solid rgba(34, 197, 94, 0.3);
border-radius: 20px;
padding: 3px 10px;
display: flex;
align-items: center;
gap: 4px;
box-shadow: 0 4px 10px rgba(0,0,0,0.4);
animation: floating-success-fade 5s infinite;
white-space: nowrap;
z-index: 10;
}
@keyframes floating-success-fade {
0%, 100%, 75% { opacity: 0; transform: translate(-50%, 5px) scale(0.9); }
15%, 60% { opacity: 1; transform: translate(-50%, 0) scale(1); }
}
.illus-floating-success .success-icon {
font-size: 0.65rem;
}
.illus-floating-success span[lang] {
font-size: 0.58rem;
color: #22c55e;
font-weight: 700;
}
/* ==========================================================================
Step 3 Illustration: Dual Screen Theater Sync Setup
========================================================================= */
.illus-sync-theater {
width: 95%;
display: flex;
align-items: center;
justify-content: center;
position: relative;
gap: 0.6rem;
}
.illus-player-card {
width: 145px;
background: rgba(15, 23, 42, 0.7);
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 12px;
padding: 6px;
box-shadow: 0 10px 25px rgba(0,0,0,0.4);
display: flex;
flex-direction: column;
gap: 4px;
position: relative;
z-index: 2;
}
.illus-player-card.player-a {
animation: popup-float 4s ease-in-out infinite;
animation-delay: -2s;
}
.illus-player-card.player-b {
animation: popup-float 4s ease-in-out infinite;
animation-delay: -3s;
}
.player-header {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.55rem;
}
.player-user {
font-weight: 700;
color: var(--text);
}
.player-badge {
font-size: 0.42rem;
font-weight: 800;
padding: 1px 3px;
border-radius: 3px;
}
.player-badge.active {
background: rgba(34, 197, 94, 0.15);
color: #22c55e;
border: 1px solid rgba(34, 197, 94, 0.25);
}
.player-video-canvas {
height: 70px;
border-radius: 8px;
background: linear-gradient(135deg, #1e1b4b, #311042);
position: relative;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid rgba(255, 255, 255, 0.02);
}
.player-video-overlay {
position: absolute;
top: 0; left: 0; width: 100%; height: 100%;
background: radial-gradient(circle at center, rgba(139, 92, 246, 0.1) 0%, transparent 80%);
}
.player-play-pulse {
width: 24px;
height: 24px;
border-radius: 50%;
background: rgba(99, 102, 241, 0.85);
color: white;
font-size: 0.65rem;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 10px rgba(99, 102, 241, 0.5);
z-index: 3;
animation: play-pulse 2s infinite alternate;
}
@keyframes play-pulse {
0% { transform: scale(1); box-shadow: 0 0 6px rgba(99, 102, 241, 0.4); }
100% { transform: scale(1.15); box-shadow: 0 0 15px rgba(99, 102, 241, 0.8); }
}
.player-controls {
display: flex;
align-items: center;
gap: 4px;
padding: 2px 2px 0 2px;
}
.control-btn {
font-size: 0.58rem;
color: var(--accent);
}
.player-timeline {
flex-grow: 1;
height: 3px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
position: relative;
}
.timeline-fill {
position: absolute;
top: 0; left: 0;
height: 100%;
background: var(--accent);
border-radius: 2px;
width: 60%;
animation: theater-grow 6s infinite linear;
}
.timeline-knob {
position: absolute;
top: -2px;
left: 60%;
width: 7px;
height: 7px;
border-radius: 50%;
background: white;
box-shadow: 0 0 4px rgba(0,0,0,0.5);
transform: translateX(-50%);
animation: theater-knob-grow 6s infinite linear;
}
@keyframes theater-grow {
0% { width: 0%; }
100% { width: 100%; }
}
@keyframes theater-knob-grow {
0% { left: 0%; }
100% { left: 100%; }
}
.control-time {
font-size: 0.5rem;
color: var(--text-muted);
font-family: monospace;
}
/* Glowing Connection Sync Bridge */
.illus-sync-bridge {
flex-grow: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 6px;
position: relative;
z-index: 1;
}
.illus-sync-bridge .sync-line {
width: 100%;
height: 2px;
background: rgba(255,255,255,0.06);
position: relative;
overflow: hidden;
}
.illus-sync-bridge .sync-beam {
position: absolute;
top: 0;
left: -100%;
width: 50px;
height: 100%;
background: linear-gradient(90deg, transparent, var(--accent), var(--success), transparent);
animation: sync-flow 2.5s infinite linear;
}
@keyframes sync-flow {
0% { left: -100%; }
100% { left: 100%; }
}
.sync-status-badge {
background: rgba(34, 197, 94, 0.12);
border: 1px solid rgba(34, 197, 94, 0.25);
color: #22c55e;
font-size: 0.5rem;
font-weight: 800;
letter-spacing: 0.5px;
padding: 2px 6px;
border-radius: 6px;
white-space: nowrap;
animation: active-pulse-green 2s infinite alternate;
}
@keyframes active-pulse-green {
0% { box-shadow: 0 0 3px rgba(34, 197, 94, 0.1); }
100% { box-shadow: 0 0 8px rgba(34, 197, 94, 0.4); }
}
/* --- Self Hosters Terminal --- */
.terminal-container {
max-width: 850px;
margin: 3rem auto 0 auto;
background: #0f172a;
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 16px;
overflow: hidden;
box-shadow: 0 20px 45px rgba(0,0,0,0.5);
text-align: left;
}
.terminal-header {
background: #1e293b;
padding: 0.85rem 1.25rem;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid rgba(255,255,255,0.06);
}
.terminal-dots {
display: flex;
gap: 6px;
}
.terminal-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
.terminal-dot.red { background: #ef4444; }
.terminal-dot.yellow { background: #f59e0b; }
.terminal-dot.green { background: #10b981; }
.terminal-tabs {
display: flex;
gap: 0.5rem;
}
.terminal-tab-btn {
background: none;
border: none;
color: var(--text-muted);
font-weight: 600;
font-size: 0.8rem;
padding: 0.35rem 0.75rem;
border-radius: 6px;
cursor: pointer;
transition: color 0.2s, background-color 0.2s;
}
.terminal-tab-btn:hover {
color: var(--text);
background: rgba(255, 255, 255, 0.03);
}
.terminal-tab-btn.active {
color: var(--accent);
background: rgba(99, 102, 241, 0.1);
border: 1px solid rgba(99, 102, 241, 0.2);
}
.terminal-body {
position: relative;
padding: 1.5rem;
}
.terminal-pane {
display: none;
margin: 0;
}
.terminal-pane.active {
display: block;
}
.terminal-pane pre {
margin: 0;
overflow-x: auto;
}
.terminal-pane code {
font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
font-size: 0.85rem;
line-height: 1.6;
color: #e2e8f0;
}
/* Syntax Highlighting */
.t-comment { color: #64748b; font-style: italic; }
.t-key { color: #f472b6; }
.t-val { color: #38bdf8; }
.t-str { color: #34d399; }
.t-num { color: #fbbf24; }
.terminal-copy-btn {
position: absolute;
top: 1rem;
right: 1.5rem;
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
color: var(--text-muted);
padding: 0.35rem 0.75rem;
font-size: 0.75rem;
font-weight: 600;
border-radius: 6px;
cursor: pointer;
transition: background-color 0.2s, color 0.2s, opacity 0.2s;
display: flex;
align-items: center;
gap: 0.3rem;
}
.terminal-copy-btn:hover {
background: rgba(255, 255, 255, 0.08);
color: var(--text);
border-color: rgba(255, 255, 255, 0.15);
}
.terminal-copy-btn:active {
transform: scale(0.97);
}
/* --- Footer --- */
footer {
padding: 4rem 0;
border-top: 1px solid var(--glass-border);
text-align: center;
color: var(--text-muted);
}
/* --- Animations --- */
[data-reveal] {
opacity: 0;
transform: translateY(30px);
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 {
opacity: 1;
transform: translateY(0);
}
/* --- Legal Pages --- */
.legal-content {
max-width: 800px;
margin: 8rem auto 4rem auto;
padding: 0 2rem;
}
.legal-card {
background: var(--card);
padding: 3rem;
border-radius: 24px;
border: 1px solid var(--glass-border);
}
.legal-card h1 {
font-size: 2.5rem;
margin-bottom: 2rem;
text-align: center;
}
.legal-card h2 {
font-size: 1.25rem;
margin-top: 1rem;
margin-bottom: 0.5rem;
color: var(--accent);
}
.legal-card p {
color: var(--text-muted);
margin-bottom: 0.5rem;
font-size: 0.95rem;
}
/* Reset global section padding for legal sections specifically */
.legal-card section {
padding: 0 !important;
margin-bottom: 0.75rem;
}
/* --- Join Page Specifics --- */
.join-card {
max-width: 450px;
margin: 6rem auto;
text-align: center;
}
.room-badge {
display: inline-block;
background: rgba(99, 102, 241, 0.1);
color: var(--accent);
padding: 0.5rem 1rem;
border-radius: 99px;
font-size: 0.8rem;
font-weight: 700;
margin-bottom: 1rem;
border: 1px solid rgba(99, 102, 241, 0.2);
}
@media (max-width: 768px) {
.hero-grid, .step {
grid-template-columns: 1fr;
text-align: center;
}
.hero-text h1 {
font-size: 2.5rem;
}
.cta-group {
justify-content: center;
flex-wrap: wrap;
}
.nav-links {
display: none;
position: absolute;
top: 100%;
left: 0;
right: 0;
flex-direction: column;
background: rgba(15, 23, 42, 0.95);
backdrop-filter: blur(12px);
padding: 1rem 2rem;
gap: 1rem;
border-bottom: 1px solid var(--glass-border);
}
.nav-links.open {
display: flex;
}
.hamburger {
display: flex;
}
.legal-card {
padding: 1.5rem;
}
}
/* --- Language Toggle --- */
html.lang-de [lang="en"] {
display: none !important;
}
html:not(.lang-de) [lang="de"] {
display: none !important;
}
/* --- Modern Glassmorphic Language Selector --- */
.lang-select-container {
position: relative;
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(30, 41, 59, 0.4);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 9999px;
padding: 6px 14px 6px 12px;
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);
}
.lang-select-container:hover {
background: rgba(30, 41, 59, 0.6);
border-color: rgba(99, 102, 241, 0.3);
color: var(--text);
box-shadow: 0 0 15px rgba(99, 102, 241, 0.1);
}
.lang-select-container .globe-icon {
width: 16px;
height: 16px;
flex-shrink: 0;
opacity: 0.8;
transition: transform 0.5s ease;
}
.lang-select-container:hover .globe-icon {
transform: rotate(15deg);
opacity: 1;
}
.lang-select-container .chevron-icon {
width: 12px;
height: 12px;
flex-shrink: 0;
pointer-events: none;
opacity: 0.6;
margin-left: -2px;
}
.lang-select-container:hover .chevron-icon {
opacity: 1;
}
.lang-dropdown {
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
background: transparent;
border: none;
outline: none;
font-family: inherit;
font-size: 0.8rem;
font-weight: 600;
color: currentColor;
cursor: pointer;
padding: 0 12px 0 0;
margin: 0;
width: auto;
}
.lang-dropdown option {
background: #0f172a;
color: white;
font-family: inherit;
font-size: 0.9rem;
}
/* --- Hamburger Menu --- */
.hamburger {
display: none;
align-items: center;
justify-content: center;
background: none;
border: none;
color: var(--text);
font-size: 1.5rem;
cursor: pointer;
padding: 0.25rem;
line-height: 1;
}
/* --- Feature Cards: subtle differentiation --- */
.feature-card:nth-child(1) { --card-accent: rgba(99, 102, 241, 0.06); }
.feature-card:nth-child(2) { --card-accent: rgba(139, 92, 246, 0.06); }
.feature-card:nth-child(3) { --card-accent: rgba(34, 197, 94, 0.06); }
.feature-card:nth-child(4) { --card-accent: rgba(56, 189, 248, 0.06); }
.feature-card:nth-child(5) { --card-accent: rgba(245, 158, 11, 0.06); }
.feature-card:nth-child(6) { --card-accent: rgba(236, 72, 153, 0.06); }
.feature-card {
background: linear-gradient(135deg, var(--card-accent, transparent), var(--card));
}
/* --- Compatibility Section --- */
.compat-section {
padding: 1rem 0 3.5rem 0;
text-align: center;
background: rgba(255,255,255,0.01);
border-bottom: 1px solid var(--glass-border);
}
.compat-mascot {
display: block;
margin: 0 auto 0.5rem auto;
max-width: 368px;
width: 100%;
height: auto;
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.compat-mascot:hover {
transform: scale(1.05) translateY(-5px) rotate(1deg);
}
.compat-heading {
font-size: 1rem;
font-weight: 600;
color: var(--text-muted);
letter-spacing: 0.08em;
text-transform: uppercase;
margin-bottom: 2rem;
}
.compat-row {
display: flex;
justify-content: center;
align-items: center;
gap: 3rem;
flex-wrap: wrap;
}
.compat-logo {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
font-size: 0.75rem;
font-weight: 700;
color: var(--text-muted);
transition: opacity 0.3s;
opacity: 0.55;
}
.compat-logo:hover {
opacity: 0.85;
}
.compat-logo img {
width: 28px;
height: 28px;
display: block;
}
.compat-more {
opacity: 0.4;
cursor: help;
flex-direction: row;
gap: 0.35rem;
position: relative;
}
.compat-more:hover {
opacity: 0.6;
}
.compat-more-icon {
font-size: 1.1rem;
font-weight: 700;
color: var(--accent);
line-height: 1;
}
.compat-tooltip {
display: none;
position: absolute;
bottom: calc(100% + 10px);
left: 50%;
transform: translateX(-50%);
background: var(--card);
color: var(--text-muted);
padding: 0.6rem 0.9rem;
border-radius: 8px;
font-size: 0.72rem;
font-weight: 500;
white-space: nowrap;
border: 1px solid var(--glass-border);
box-shadow: 0 8px 20px rgba(0,0,0,0.4);
z-index: 10;
line-height: 1.4;
}
.compat-tooltip::after {
content: '';
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
border: 6px solid transparent;
border-top-color: var(--glass-border);
}
.compat-more:hover .compat-tooltip {
display: block;
}
/* --- Join Page Loading Spinner --- */
.join-spinner {
width: 36px;
height: 36px;
border: 3px solid rgba(99, 102, 241, 0.2);
border-top-color: var(--accent);
border-radius: 50%;
animation: spin 0.8s linear infinite;
margin: 0 auto 0.75rem;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
/* --- Reduced Motion --- */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
[data-reveal] {
opacity: 1;
transform: none;
}
.blob {
animation: none;
}
.illus-typing-text::after {
animation: none;
}
.illus-timeline-progress {
animation: none;
width: 60%;
}
.illus-sync-pulse {
animation: none;
}
.illus-extension-icon {
animation: none;
}
}
/* --- Use Cases / Anwendungsszenarien Section --- */
.use-cases-section {
padding: 6rem 0;
position: relative;
border-bottom: 1px solid var(--glass-border);
}
.use-cases-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 2rem;
margin-top: 1rem;
}
.use-case-card {
background: rgba(30, 41, 59, 0.4);
border: 1px solid var(--glass-border);
border-radius: 16px;
padding: 1.2rem 1.6rem 1.7rem 1.6rem;
text-align: left;
transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.3s ease;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
display: flex;
flex-direction: column;
gap: 0.8rem;
position: relative;
overflow: hidden;
}
.use-case-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, transparent, var(--card-accent-border, var(--accent)), transparent);
opacity: 0;
transition: opacity 0.3s ease;
}
.use-case-card:nth-child(1) { --card-accent-border: #f59e0b; }
.use-case-card:nth-child(2) { --card-accent-border: #38bdf8; }
.use-case-card:nth-child(3) { --card-accent-border: #ec4899; }
.use-case-card:hover {
transform: translateY(-5px);
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.35);
border-color: rgba(255, 255, 255, 0.15);
}
.use-case-card:hover::before {
opacity: 1;
}
.use-case-image {
display: block;
width: 100%;
max-width: 272px;
height: 150px;
object-fit: contain;
border-radius: 8px;
margin: 0 auto 0 auto;
}
.cta-github-mascot {
display: block;
width: 100%;
max-width: 250px;
height: auto;
margin: 1.5rem auto;
}
.features-questions-mascot {
display: block;
width: 100%;
max-width: 250px;
height: auto;
margin: -1.5rem auto 0.2rem auto;
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.features-questions-mascot:hover {
transform: scale(1.05) translateY(-4px) rotate(-1.5deg);
}
.comparison-mascot {
display: block;
width: 100%;
max-width: 260px;
height: auto;
margin: -2.2rem auto 0.2rem auto;
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.comparison-mascot:hover {
transform: scale(1.05) translateY(-4px) rotate(1deg);
}
.use-case-icon {
font-size: 1.6rem;
margin-right: 0.6rem;
display: inline-block;
vertical-align: middle;
filter: drop-shadow(0 2px 8px rgba(0,0,0,0.2));
}
.use-case-card h3 {
font-size: 1.25rem;
font-weight: 700;
margin: 0;
color: white;
}
.use-case-card p {
font-size: 0.9rem;
line-height: 1.6;
color: var(--text-muted);
margin: 0;
}
/* --- Comparison Section --- */
.comparison-section {
padding: 6rem 0;
background: rgba(255, 255, 255, 0.01);
border-bottom: 1px solid var(--glass-border);
}
.comparison-table-wrapper {
overflow-x: auto;
background: rgba(30, 41, 59, 0.35);
border: 1px solid var(--glass-border);
border-radius: 16px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
margin-top: 1rem;
}
.comparison-table {
width: 100%;
border-collapse: collapse;
text-align: left;
font-size: 0.95rem;
}
.comparison-table th,
.comparison-table td {
padding: 1.25rem 1.5rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}
.comparison-table th {
background: rgba(15, 23, 42, 0.6);
font-weight: 700;
color: white;
text-transform: uppercase;
font-size: 0.8rem;
letter-spacing: 0.08em;
}
.comparison-table th.highlight,
.comparison-table td.highlight {
background: rgba(99, 102, 241, 0.08);
}
.comparison-table tbody tr:hover {
background: rgba(255, 255, 255, 0.02);
}
.comparison-table tbody tr:last-child td {
border-bottom: none;
}
.feat-name {
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.feat-name strong {
color: white;
font-weight: 600;
}
.feat-desc {
font-size: 0.8rem;
color: var(--text-muted);
}
.check {
color: #22c55e;
font-weight: 700;
}
.cross {
color: #ef4444;
font-weight: 500;
opacity: 0.8;
}
@media (max-width: 768px) {
.comparison-table th,
.comparison-table td {
padding: 1rem;
font-size: 0.85rem;
}
.feat-desc {
display: none;
}
}
/* --- Footnotes & Source Links --- */
.source-link {
color: var(--accent);
text-decoration: none;
font-size: 0.72rem;
font-weight: 700;
margin-left: 0.25rem;
display: inline-flex;
align-items: center;
vertical-align: super;
opacity: 0.6;
transition: opacity 0.2s ease, color 0.2s ease, transform 0.2s ease;
}
.source-link:hover {
opacity: 1;
color: #38bdf8;
transform: translateY(-1px);
}
.table-footnotes {
padding: 0.8rem 1.25rem;
background: rgba(15, 23, 42, 0.45);
border-top: 1px solid rgba(255, 255, 255, 0.05);
font-size: 0.72rem;
color: var(--text-muted);
line-height: 1.5;
opacity: 0.65;
transition: opacity 0.2s ease;
}
.table-footnotes:hover {
opacity: 0.95;
}
.table-footnotes p {
margin: 0;
display: flex;
align-items: baseline;
gap: 0.4rem;
}
.table-footnotes p:not(:last-child) {
margin-bottom: 0.4rem;
}
.table-footnotes a {
color: var(--accent);
text-decoration: none;
font-weight: 500;
transition: color 0.2s ease, text-decoration 0.2s ease;
}
.table-footnotes a:hover {
color: #38bdf8;
text-decoration: underline;
}
.table-footnotes sup {
font-weight: 700;
color: var(--accent);
}
@media (max-width: 768px) {
.table-footnotes {
padding: 0.75rem 1rem;
font-size: 0.68rem;
}
}
/* --- Join & Invitation Page Visuals --- */
.join-status-visual {
margin-bottom: 2rem;
position: relative;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
}
.join-status-mascot {
display: block;
width: 140px;
height: auto;
z-index: 2;
filter: drop-shadow(0 4px 12px rgba(0,0,0,0.15));
}
.join-status-mascot.searching-mascot {
width: 175px; /* Slightly wider due to antenna to keep main body scale identical */
}
.join-status-pulse {
animation: mascot-gentle-pulse 2s ease-in-out infinite;
}
@keyframes mascot-gentle-pulse {
0% {
transform: scale(0.96);
filter: drop-shadow(0 4px 10px rgba(99, 102, 241, 0.15));
}
50% {
transform: scale(1.04);
filter: drop-shadow(0 8px 20px rgba(99, 102, 241, 0.35));
}
100% {
transform: scale(0.96);
filter: drop-shadow(0 4px 10px rgba(99, 102, 241, 0.15));
}
}
.legal-mascot {
display: block;
width: 180px;
height: auto;
margin: -0.75rem auto 0.4rem auto;
filter: drop-shadow(0 4px 12px rgba(0,0,0,0.15));
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.legal-mascot:hover {
transform: scale(1.06) translateY(-4px) rotate(1.5deg);
}
.selfhost-mascot {
display: block;
width: 300px;
height: auto;
margin: 0 auto;
filter: drop-shadow(0 4px 12px rgba(0,0,0,0.15));
transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.selfhost-mascot:hover {
transform: scale(1.05) translateY(-4px) rotate(-1deg);
}
.status-ring {
position: absolute;
width: 90px;
height: 90px;
border-radius: 50%;
background: rgba(99, 102, 241, 0.05);
border: 2px dashed rgba(99, 102, 241, 0.25);
z-index: 1;
}
.status-ring.active-pulse {
animation: radar-pulse 3s cubic-bezier(0.25, 0.8, 0.25, 1) infinite;
}
@keyframes radar-pulse {
0% {
transform: scale(0.85);
opacity: 0.9;
border-color: rgba(99, 102, 241, 0.3);
box-shadow: 0 0 0 0px rgba(99, 102, 241, 0.15);
}
50% {
transform: scale(1.18);
opacity: 0.35;
border-color: rgba(56, 189, 248, 0.2);
box-shadow: 0 0 0 15px rgba(56, 189, 248, 0);
}
100% {
transform: scale(0.85);
opacity: 0.9;
border-color: rgba(99, 102, 241, 0.3);
box-shadow: 0 0 0 0px rgba(99, 102, 241, 0.15);
}
}
.join-card-actions {
display: flex;
flex-direction: column;
gap: 0.75rem;
width: 100%;
}
.join-card-actions .btn {
width: 100%;
justify-content: center;
padding: 1.1rem;
font-size: 0.88rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.join-card-actions .btn svg {
margin-right: 0.3rem;
flex-shrink: 0;
}
.join-card-actions .btn img {
margin-right: 0.3rem;
flex-shrink: 0;
}
.btn-success {
background: #22c55e;
color: white !important;
box-shadow: 0 10px 15px -3px rgba(34, 197, 94, 0.3);
}
.btn-success:hover {
background: #16a34a;
transform: translateY(-2px);
box-shadow: 0 20px 25px -5px rgba(34, 197, 94, 0.4);
}
/* --- FAQ Section --- */
.faq-grid {
display: flex;
flex-direction: column;
gap: 1rem;
max-width: 800px;
margin: 0 auto;
}
.faq-item {
background: rgba(30, 41, 59, 0.45);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 16px;
padding: 1.5rem 2rem;
cursor: pointer;
transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}
.faq-item:hover {
border-color: rgba(99, 102, 241, 0.3);
box-shadow: 0 8px 20px rgba(99, 102, 241, 0.1);
}
.faq-item[open] {
border-color: rgba(99, 102, 241, 0.4);
background: rgba(30, 41, 59, 0.65);
}
.faq-item summary {
font-weight: 700;
font-size: 1.05rem;
color: var(--text);
list-style: none;
display: flex;
justify-content: space-between;
align-items: center;
gap: 1rem;
}
.faq-item summary::-webkit-details-marker {
display: none;
}
.faq-item summary::after {
content: '+';
font-size: 1.4rem;
color: var(--accent);
font-weight: 300;
transition: transform 0.3s ease;
flex-shrink: 0;
}
.faq-item[open] summary::after {
content: '';
transform: rotate(180deg);
}
.faq-item p {
color: var(--text-muted);
font-size: 0.95rem;
line-height: 1.6;
margin-top: 1rem;
padding-top: 1rem;
border-top: 1px solid rgba(255, 255, 255, 0.06);
}
/* --- 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;
}
/* --- Screen-reader-only (also crawlable by search engines) --- */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* --- 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;
}
}