diff --git a/CHANGELOG.md b/CHANGELOG.md index 49b3f74..6d1e415 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ ## [Unreleased] +### Added +- Added square modern PWA and apple-touch-icon (`img/psugh-icon.webp`) in WebP format to resolve PWA verification warnings and fix icon squashing on iOS. +- Added preloading for hero background image `img/hintergrund.webp` and minified styles on `index.html`, `events.html`, and `impressum.html` to improve Largest Contentful Paint (LCP) performance. +- Added preloading for JSON data files on `events.html` to load event data as early as possible. + +### Changed +- Refactored `events.html` JavaScript to consolidate network fetches, loading all three JSON data files in parallel only once at the page level. +- Combined next meeting details with upcoming events on `events.html` to display the next meeting within the "Kommende Treffen" list. +- Improved color contrast of the terminal window (body background, header background, title text, command text, and prompt prefix) to fully comply with WCAG 2.1 AAA accessibility contrast requirements. +- Added default underlines to all links nested inside paragraph text (`p a`) to satisfy WCAG 2.1 link recognition accessibility guidelines. +- Separated the access code and copy button from the 'Online teilnehmen' anchor link in the hero section to fix illegal nesting of interactive content and resolve overlapping touch target issues. +- Increased the size of all copy buttons (`.copy-btn`) to `44x44px` to fulfill WCAG mobile touch target size requirements. +- Fixed structured data warning false-positives for `noindex` pages (such as `impressum.html`) in the SEO validator. +- Refactored `validate-seo.js` to dynamically scan the `ressourcen/` directory for article pages, ensuring `erroractionpreference.html` and any future resources are automatically validated without manual list updates. +- Updated article generator `New-ResourceArticel.ps1` to remove instructions for manual updates to the SEO validator. + ## [3.1.0] - 2026-06-16 ### Added - Added June 19th social event ("Bier, Kicker & PowerShell-Talks") with a custom WebP Lego foosball graphic (`img/psugh_social.webp`). diff --git a/README.md b/README.md index 278a56a..a397c59 100644 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ Wir bieten Tutorials und Skripte in der Ressourcen-Sektion an. Der Workflow für 1. Führe `./scripts/New-ResourceArticel.ps1` aus. Das Skript fragt Titel, Slug und Meta-Description ab und erstellt eine fertige Vorlage in `/ressourcen`. 2. Trage den neuen Artikel auf der Übersichtsseite in `ressourcen/index.html` ein. Diese Datei dient als die zentrale *Single Source of Truth* für die Artikelreihenfolge. 3. Führe `./scripts/Update-ArticleNavigation.ps1` aus. Dies durchsucht die `index.html` und generiert völlig automatisiert dynamische **"Zurück/Weiter"** Hyperlinks in jedem Artikel. -4. Trage den Artikel im SEO-Prüfer (`scripts/validate-seo.js`) und in der Sitemap (`sitemap.xml`) ein. +4. Trage den Artikel in der Sitemap (`sitemap.xml`) ein (der SEO-Prüfer `scripts/validate-seo.js` scannt neue Artikel automatisch). ## 🎨 Design System diff --git a/css/styles.css b/css/styles.css index b11841d..3ed22ec 100644 --- a/css/styles.css +++ b/css/styles.css @@ -25,6 +25,20 @@ button:focus-visible { outline: 3px solid var(--primary-color); outline-offset: 3px; } +/* High contrast focus outline for elements on dark backgrounds */ +.hero-header :focus-visible, +.mobile-menu :focus-visible, +.terminal-window :focus-visible, +.site-footer :focus-visible, +.hero-room-code-container .copy-btn:focus-visible { + outline: 3px solid rgb(255 255 255); + outline-offset: 3px; +} +/* Focus visible outline for calendar cells with events */ +.calendar-day.has-event:focus-visible { + outline: 3px solid var(--accent-color); + outline-offset: -3px; +} :root { --primary-color: #0073ae; --primary-light: #4a9bc9; @@ -155,6 +169,10 @@ a:focus { outline: 2px solid var(--primary-color); outline-offset: 2px; } +p a { + text-decoration: underline; + text-underline-offset: 2px; +} .skip-link { position: absolute; top: -40px; @@ -493,7 +511,7 @@ a:focus { font-size: var(--font-size-lg); } .terminal-window { - background: var(--bg-dark); + background: #0f172a; border-radius: var(--border-radius-lg); overflow: hidden; box-shadow: var(--shadow-xl); @@ -503,7 +521,7 @@ a:focus { margin-right: auto; } .terminal-header { - background: #1a1f2e; + background: #1e293b; padding: var(--spacing-md); display: flex; align-items: center; @@ -529,7 +547,7 @@ a:focus { background: var(--success-color); } .terminal-title { - color: var(--text-secondary); + color: #cbd5e1; font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); } @@ -537,7 +555,7 @@ a:focus { padding: var(--spacing-xl); } .terminal-command { - color: var(--success-color); + color: #4ade80; font-family: var(--font-family-mono); font-size: var(--font-size-base); line-height: var(--line-height-relaxed); @@ -548,7 +566,7 @@ a:focus { } .command-line::before { content: 'PS C: \\> '; - color: #09f; + color: #38bdf8; } .command-line:not(:first-child)::before { content: '>> '; @@ -798,7 +816,7 @@ a:focus { color: var(--social-linkedin); background: rgb(0 119 181 / 1%); } -.location-map iframe { +.meeting-location iframe { display: block; width: 100%; max-width: 100%; @@ -873,6 +891,14 @@ a:focus { max-width: 300px; text-align: center; } + .online-join-group { + width: 100%; + max-width: 300px; + } + .online-join-group .btn { + width: 100%; + max-width: 100%; + } .meeting-links { flex-direction: column; align-items: center; @@ -1037,6 +1063,11 @@ button:focus { padding: 0.5rem; border-radius: 50%; transition: background-color 0.3s; + min-width: 44px; + min-height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; } .calendar-nav:hover { background-color: var(--bg-secondary); @@ -1115,6 +1146,23 @@ button:focus { transform: translateY(-4px); box-shadow: 0 8px 15px rgb(0 0 0 / 15%); } +.event-card.highlight-flash { + animation: flash-animation 2s ease; +} +@keyframes flash-animation { + 0% { + background-color: var(--bg-primary); + box-shadow: 0 4px 6px rgb(0 0 0 / 1%); + } + 15% { + background-color: rgb(0 115 174 / 15%); + box-shadow: 0 0 15px rgb(0 115 174 / 40%); + } + 100% { + background-color: var(--bg-primary); + box-shadow: 0 4px 6px rgb(0 0 0 / 1%); + } +} .resource-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -1252,15 +1300,17 @@ button:focus { background: 0 0; border: none; cursor: pointer; - padding: 4px; + padding: 8px; margin-left: 4px; - border-radius: 4px; + border-radius: 6px; display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; transition: background-color var(--transition-fast); color: var(--text-secondary); + min-width: 44px; + min-height: 44px; } .copy-btn:hover { background-color: var(--bg-tertiary); @@ -1276,22 +1326,43 @@ button:focus { .copy-btn.success { color: var(--success-color); } -.btn-secondary small { +.online-join-group { display: flex; + flex-direction: column; align-items: center; - justify-content: center; - gap: 4px; - margin-top: 4px; + gap: var(--spacing-sm); +} +.hero-room-code-container { + display: inline-flex; + align-items: center; + gap: var(--spacing-sm); + font-size: var(--font-size-sm); + color: rgb(255 255 255 / 90%); + background: rgb(255 255 255 / 10%); + backdrop-filter: blur(5px); + -webkit-backdrop-filter: blur(5px); + padding: 2px 2px 2px 12px; + border-radius: 22px; + border: 1px solid rgb(255 255 255 / 15%); + height: 44px; +} +.hero-room-code-container code { + font-family: var(--font-family-mono); + color: #fff; + font-weight: var(--font-weight-semibold); + background: var(--primary-color); + padding: 2px 6px; + border-radius: 4px; } -.btn-secondary .copy-btn { - color: rgb(255 255 255 / 8%); - padding: 2px; +.hero-room-code-container .copy-btn { + color: rgb(255 255 255 / 70%); + margin-left: 0; } -.btn-secondary .copy-btn:hover { - background-color: rgb(255 255 255 / 1%); +.hero-room-code-container .copy-btn:hover { color: #fff; + background-color: rgb(255 255 255 / 10%); } -.btn-secondary .copy-btn.success { +.hero-room-code-container .copy-btn.success { color: var(--success-color); } .article-card { diff --git a/css/styles.min.css b/css/styles.min.css index 308ffb4..1410c66 100644 --- a/css/styles.min.css +++ b/css/styles.min.css @@ -1,4 +1,4 @@ -.topic-picture{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;margin-top:.75rem;border-radius:8px}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.btn:focus-visible,.social-link:focus-visible,:focus-visible,button:focus-visible{outline:3px solid var(--primary-color);outline-offset:3px}:root{--primary-color:#0073ae;--primary-light:#4a9bc9;--primary-dark:#005a87;--secondary-color:#3d3f45;--accent-color:#ff4500;--accent-light:#ff6b35;--success-color:#28a745;--warning-color:#ffc107;--error-color:#dc3545;--text-primary:#2c3e50;--text-secondary:#5a6c7d;--text-muted:#8b949e;--text-inverse:#fff;--bg-primary:#fff;--bg-secondary:#f8f9fa;--bg-tertiary:#e9ecef;--bg-dark:#2c3e50;--bg-overlay:rgb(44 62 80 / 90%);--primary-faint:rgb(0 115 174 / 12%);--social-twitter:#1da1f2;--social-mastodon:#563acc;--social-github:#24292e;--social-discord:#5865f2;--social-linkedin:#0077b5;--spacing-xs:0.25rem;--spacing-sm:0.5rem;--spacing-md:1rem;--spacing-lg:1.5rem;--spacing-xl:2rem;--spacing-2xl:3rem;--spacing-3xl:4rem;--container-max-width:1200px;--border-radius:8px;--border-radius-lg:12px;--border-width:1px;--shadow-sm:0 1px 2px rgb(0 0 0 / 5%);--shadow-md:0 4px 6px rgb(0 0 0 / 10%);--shadow-lg:0 10px 15px rgb(0 0 0 / 10%);--shadow-xl:0 20px 25px rgb(0 0 0 / 15%);--transition-fast:0.15s ease;--transition-base:0.3s ease;--transition-slow:0.5s ease;--font-family-sans:Inter,Roboto,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--font-family-mono:'JetBrains Mono',Consolas,Monaco,monospace;--font-size-xs:0.75rem;--font-size-sm:0.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-size-5xl:3rem;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.25;--line-height-base:1.5;--line-height-relaxed:1.75}*,::after,::before{box-sizing:border-box}html{scroll-behavior:smooth;font-size:16px}body{margin:0;padding:0;font-family:var(--font-family-sans);font-size:var(--font-size-base);line-height:var(--line-height-base);color:var(--text-primary);background-color:var(--bg-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{margin:0 0 var(--spacing-lg) 0;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);color:var(--text-primary)}h1{font-size:var(--font-size-4xl)}h2{font-size:var(--font-size-3xl)}h3{font-size:var(--font-size-2xl)}h4{font-size:var(--font-size-xl)}h5{font-size:var(--font-size-lg)}h6{font-size:var(--font-size-base)}p{margin:0 0 var(--spacing-md) 0;color:var(--text-secondary)}a{color:var(--primary-color);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--primary-dark);text-decoration:underline}a:focus{outline:2px solid var(--primary-color);outline-offset:2px}.skip-link{position:absolute;top:-40px;left:6px;background:var(--bg-dark);color:var(--text-inverse);padding:8px;border-radius:var(--border-radius);text-decoration:none;z-index:1000}.skip-link:focus{top:6px}.container{max-width:var(--container-max-width);margin:0 auto;padding:0 var(--spacing-lg)}@media (max-width:768px){.container{padding:0 var(--spacing-md)}}.btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--spacing-sm) var(--spacing-lg);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);text-decoration:none;border:var(--border-width) solid transparent;border-radius:var(--border-radius);cursor:pointer;transition:all var(--transition-base);white-space:nowrap}.btn-primary{background-color:var(--primary-color);color:var(--text-inverse);border-color:var(--primary-color)}.btn-primary:hover{background-color:var(--primary-dark);border-color:var(--primary-dark);color:var(--text-inverse);text-decoration:none}.btn-secondary{background-color:transparent;color:var(--text-inverse);border-color:var(--text-inverse)}.btn-secondary:hover{background-color:var(--text-inverse);color:var(--primary-color);text-decoration:none}.btn-outline{background-color:transparent;color:var(--primary-color);border-color:var(--primary-color)}.btn-outline:hover{background-color:var(--primary-color);color:var(--text-inverse);text-decoration:none}.hero-header{background:linear-gradient(var(--bg-overlay),var(--bg-overlay)),image-set( +.topic-picture{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;margin-top:.75rem;border-radius:8px}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.btn:focus-visible,.social-link:focus-visible,:focus-visible,button:focus-visible{outline:3px solid var(--primary-color);outline-offset:3px}.hero-header :focus-visible,.hero-room-code-container .copy-btn:focus-visible,.mobile-menu :focus-visible,.site-footer :focus-visible,.terminal-window :focus-visible{outline:3px solid rgb(255 255 255);outline-offset:3px}.calendar-day.has-event:focus-visible{outline:3px solid var(--accent-color);outline-offset:-3px}:root{--primary-color:#0073ae;--primary-light:#4a9bc9;--primary-dark:#005a87;--secondary-color:#3d3f45;--accent-color:#ff4500;--accent-light:#ff6b35;--success-color:#28a745;--warning-color:#ffc107;--error-color:#dc3545;--text-primary:#2c3e50;--text-secondary:#5a6c7d;--text-muted:#8b949e;--text-inverse:#fff;--bg-primary:#fff;--bg-secondary:#f8f9fa;--bg-tertiary:#e9ecef;--bg-dark:#2c3e50;--bg-overlay:rgb(44 62 80 / 90%);--primary-faint:rgb(0 115 174 / 12%);--social-twitter:#1da1f2;--social-mastodon:#563acc;--social-github:#24292e;--social-discord:#5865f2;--social-linkedin:#0077b5;--spacing-xs:0.25rem;--spacing-sm:0.5rem;--spacing-md:1rem;--spacing-lg:1.5rem;--spacing-xl:2rem;--spacing-2xl:3rem;--spacing-3xl:4rem;--container-max-width:1200px;--border-radius:8px;--border-radius-lg:12px;--border-width:1px;--shadow-sm:0 1px 2px rgb(0 0 0 / 5%);--shadow-md:0 4px 6px rgb(0 0 0 / 10%);--shadow-lg:0 10px 15px rgb(0 0 0 / 10%);--shadow-xl:0 20px 25px rgb(0 0 0 / 15%);--transition-fast:0.15s ease;--transition-base:0.3s ease;--transition-slow:0.5s ease;--font-family-sans:Inter,Roboto,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--font-family-mono:'JetBrains Mono',Consolas,Monaco,monospace;--font-size-xs:0.75rem;--font-size-sm:0.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-size-5xl:3rem;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.25;--line-height-base:1.5;--line-height-relaxed:1.75}*,::after,::before{box-sizing:border-box}html{scroll-behavior:smooth;font-size:16px}body{margin:0;padding:0;font-family:var(--font-family-sans);font-size:var(--font-size-base);line-height:var(--line-height-base);color:var(--text-primary);background-color:var(--bg-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{margin:0 0 var(--spacing-lg) 0;font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);color:var(--text-primary)}h1{font-size:var(--font-size-4xl)}h2{font-size:var(--font-size-3xl)}h3{font-size:var(--font-size-2xl)}h4{font-size:var(--font-size-xl)}h5{font-size:var(--font-size-lg)}h6{font-size:var(--font-size-base)}p{margin:0 0 var(--spacing-md) 0;color:var(--text-secondary)}a{color:var(--primary-color);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--primary-dark);text-decoration:underline}a:focus{outline:2px solid var(--primary-color);outline-offset:2px}p a{text-decoration:underline;text-underline-offset:2px}.skip-link{position:absolute;top:-40px;left:6px;background:var(--bg-dark);color:var(--text-inverse);padding:8px;border-radius:var(--border-radius);text-decoration:none;z-index:1000}.skip-link:focus{top:6px}.container{max-width:var(--container-max-width);margin:0 auto;padding:0 var(--spacing-lg)}@media (max-width:768px){.container{padding:0 var(--spacing-md)}}.btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--spacing-sm) var(--spacing-lg);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);text-decoration:none;border:var(--border-width) solid transparent;border-radius:var(--border-radius);cursor:pointer;transition:all var(--transition-base);white-space:nowrap}.btn-primary{background-color:var(--primary-color);color:var(--text-inverse);border-color:var(--primary-color)}.btn-primary:hover{background-color:var(--primary-dark);border-color:var(--primary-dark);color:var(--text-inverse);text-decoration:none}.btn-secondary{background-color:transparent;color:var(--text-inverse);border-color:var(--text-inverse)}.btn-secondary:hover{background-color:var(--text-inverse);color:var(--primary-color);text-decoration:none}.btn-outline{background-color:transparent;color:var(--primary-color);border-color:var(--primary-color)}.btn-outline:hover{background-color:var(--primary-color);color:var(--text-inverse);text-decoration:none}.hero-header{background:linear-gradient(var(--bg-overlay),var(--bg-overlay)),image-set( url('../img/hintergrund.webp') type('image/webp'), url('../img/hintergrund.jpg') type('image/jpeg') - ) center/cover no-repeat;min-height:100vh;display:flex;flex-direction:column;position:relative;color:var(--text-inverse)}.main-nav{position:relative;z-index:100;padding:var(--spacing-lg) 0}.nav-container{max-width:var(--container-max-width);margin:0 auto;padding:0 var(--spacing-lg);display:flex;justify-content:space-between;align-items:center}.logo-link img{height:60px;width:auto}.nav-links{display:flex;list-style:none;margin:0;padding:0;gap:var(--spacing-xl)}.nav-link{color:var(--text-inverse);font-weight:var(--font-weight-medium);padding:var(--spacing-sm) 0;position:relative}.nav-link.active,.nav-link:hover{color:var(--text-inverse);text-decoration:none}.nav-link::after{content:'';position:absolute;bottom:-2px;left:0;width:0;height:2px;background-color:var(--accent-color);transition:width var(--transition-base)}.nav-link.active::after,.nav-link:hover::after{width:100%}.mobile-menu-toggle{display:none;flex-direction:column;background:0 0;border:none;cursor:pointer;padding:var(--spacing-sm);gap:4px}.hamburger-line{width:24px;height:2px;background-color:var(--text-inverse);transition:all var(--transition-base)}.mobile-menu-toggle.active .hamburger-line:first-child{transform:rotate(45deg) translate(6px,6px)}.mobile-menu-toggle.active .hamburger-line:nth-child(2){opacity:0}.mobile-menu-toggle.active .hamburger-line:nth-child(3){transform:rotate(-45deg) translate(6px,-6px)}.mobile-menu{position:absolute;top:100%;left:0;right:0;background-color:var(--bg-overlay);backdrop-filter:blur(10px);padding:var(--spacing-lg);border-top:1px solid rgb(255 255 255 / 1%);box-shadow:0 4px 20px rgb(0 0 0 / 3%);z-index:100;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all var(--transition-base);pointer-events:none}.mobile-menu.active{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.mobile-nav-links{list-style:none;margin:0;padding:0}.mobile-nav-links li{margin-bottom:var(--spacing-md)}.mobile-nav-link{color:var(--text-inverse);font-weight:var(--font-weight-medium);font-size:var(--font-size-lg);display:block;padding:var(--spacing-md) var(--spacing-sm);border-radius:var(--border-radius);transition:all var(--transition-base)}.mobile-nav-link.active,.mobile-nav-link:hover{background-color:rgb(255 255 255 / 1%);color:var(--text-inverse);text-decoration:none;transform:translateX(4px)}.hero-content{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:var(--spacing-3xl) var(--spacing-lg)}.hero-text{max-width:800px}.hero-title{font-size:clamp(var(--font-size-3xl), 5vw, var(--font-size-5xl));font-weight:var(--font-weight-bold);margin-bottom:var(--spacing-lg);color:var(--text-inverse)}.hero-subtitle{font-size:clamp(var(--font-size-lg), 2.5vw, var(--font-size-xl));margin-bottom:var(--spacing-2xl);color:rgb(255 255 255 / 90%);line-height:var(--line-height-relaxed)}.hero-actions{display:flex;gap:var(--spacing-lg);justify-content:center;flex-wrap:wrap;align-items:center;width:100%}.hero-actions .btn-secondary{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;white-space:normal;text-align:center;padding-top:calc(var(--spacing-sm) + .1rem);padding-bottom:calc(var(--spacing-sm) + .1rem)}.next-meeting{padding:var(--spacing-3xl) 0;background-color:var(--bg-secondary)}.meeting-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-3xl);align-items:start}.meeting-info h2{color:var(--primary-color);margin-bottom:var(--spacing-xl)}.meeting-details{display:grid;gap:var(--spacing-xl)}.meeting-date,.meeting-location{background:var(--bg-primary);padding:var(--spacing-lg);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);border:1px solid var(--bg-tertiary)}.meeting-date h3,.meeting-location h3{color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--font-size-lg)}.meeting-location address{font-style:normal;line-height:var(--line-height-relaxed)}.meeting-topics h3{color:var(--primary-color);margin-bottom:var(--spacing-lg)}.topic-card{background:var(--bg-primary);padding:var(--spacing-lg);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);margin-bottom:var(--spacing-lg)}.topic-card h4{margin-bottom:var(--spacing-sm);color:var(--primary-color)}.topic-card h5{color:var(--primary-color);margin-bottom:var(--spacing-lg)}.meeting-links{display:flex;gap:var(--spacing-md);margin:var(--spacing-lg) 0;flex-wrap:wrap;justify-content:center;align-items:center;width:100%}.room-code{background:var(--bg-tertiary);padding:var(--spacing-md);border-radius:var(--border-radius);font-size:var(--font-size-sm)}.room-code code{background:var(--primary-color);color:var(--text-inverse);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--border-radius);font-family:var(--font-family-mono)}.terminal-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-primary)}.terminal-section h2{color:var(--primary-color);text-align:center;margin-bottom:var(--spacing-lg)}.terminal-section>.container>p{text-align:center;margin-bottom:var(--spacing-2xl);font-size:var(--font-size-lg)}.terminal-window{background:var(--bg-dark);border-radius:var(--border-radius-lg);overflow:hidden;box-shadow:var(--shadow-xl);margin-bottom:var(--spacing-xl);max-width:800px;margin-left:auto;margin-right:auto}.terminal-header{background:#1a1f2e;padding:var(--spacing-md);display:flex;align-items:center;gap:var(--spacing-md);border-bottom:1px solid rgb(255 255 255 / 7%)}.terminal-buttons{display:flex;gap:var(--spacing-xs)}.terminal-button{width:12px;height:12px;border-radius:50%}.terminal-button.red{background:var(--error-color)}.terminal-button.yellow{background:var(--warning-color)}.terminal-button.green{background:var(--success-color)}.terminal-title{color:var(--text-secondary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.terminal-content{padding:var(--spacing-xl)}.terminal-command{color:var(--success-color);font-family:var(--font-family-mono);font-size:var(--font-size-base);line-height:var(--line-height-relaxed)}.command-line{display:block;margin-bottom:var(--spacing-xs)}.command-line::before{content:'PS C: \\> ';color:#09f}.command-line:not(:first-child)::before{content:'>> '}.command-explanations{display:grid;gap:var(--spacing-md);max-width:800px;margin:0 auto var(--spacing-xl)}.explanation{background:var(--bg-secondary);padding:var(--spacing-md);border-radius:var(--border-radius);border-left:4px solid var(--primary-color)}.github-link{text-align:center;font-size:var(--font-size-lg)}.about-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-secondary)}.about-section h2{color:var(--primary-color);margin-bottom:var(--spacing-xl)}.about-section h3{color:var(--primary-color);margin-top:var(--spacing-2xl);margin-bottom:var(--spacing-lg)}.about-content{max-width:800px}.resources{background:var(--bg-primary);padding:var(--spacing-xl);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);margin-top:var(--spacing-xl)}.resources h4{color:var(--primary-color);margin-bottom:var(--spacing-md)}.resources ul{list-style:none;padding:0}.resources li{padding:var(--spacing-sm) 0;border-bottom:1px solid var(--bg-tertiary)}.resources li:last-child{border-bottom:none}.resources a{display:block;padding:var(--spacing-sm);border-radius:var(--border-radius);transition:background-color var(--transition-base)}.resources a:hover{background-color:var(--bg-secondary);text-decoration:none}.impressum-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-secondary)}.impressum-content{max-width:800px;margin:0 auto}.impressum-section h2{color:var(--primary-color);margin-bottom:var(--spacing-2xl);text-align:center}.legal-box{background:var(--bg-primary);padding:var(--spacing-xl);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);margin-bottom:var(--spacing-xl);border:1px solid var(--bg-tertiary)}.legal-box h3{color:var(--primary-color);margin-bottom:var(--spacing-lg);font-size:var(--font-size-xl)}.legal-box address{font-style:normal;line-height:var(--line-height-relaxed);margin:var(--spacing-md) 0}.legal-box p{margin-bottom:var(--spacing-md);line-height:var(--line-height-relaxed)}.legal-box p:last-child{margin-bottom:0}.legal-box a{color:var(--primary-color);text-decoration:underline}.legal-box a:hover{color:var(--primary-dark)}.contact-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-primary);text-align:center}.contact-section h2{color:var(--primary-color);margin-bottom:var(--spacing-lg)}.contact-section>.container>p{margin-bottom:var(--spacing-2xl);font-size:var(--font-size-lg)}.social-links{display:flex;justify-content:center;gap:var(--spacing-xl);flex-wrap:wrap}.social-link{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-lg);background:var(--bg-secondary);border-radius:var(--border-radius-lg);transition:all var(--transition-base);min-width:120px;text-decoration:none;color:var(--text-primary)}.social-link:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg);color:var(--primary-color);text-decoration:none}.social-icon{width:32px;height:32px;fill:currentcolor}.social-link span{font-weight:var(--font-weight-medium);font-size:var(--font-size-sm)}.social-link.twitter:hover{color:var(--social-twitter)}.social-link.mastodon:hover{color:var(--social-mastodon)}.social-link.github:hover{color:var(--social-github)}.social-link.discord:hover{color:var(--social-discord)}.social-link.linkedin:hover{color:var(--social-linkedin)}.newsletter-cta{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-lg);margin-top:var(--spacing-2xl);padding:var(--spacing-lg) var(--spacing-xl);background:var(--bg-secondary);border:var(--border-width) solid var(--bg-tertiary);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-sm);flex-wrap:wrap;text-align:left}.newsletter-cta-content{display:flex;align-items:center;gap:var(--spacing-lg);flex:1;min-width:220px}.newsletter-icon{fill:var(--primary-color);flex-shrink:0}.newsletter-cta h3{margin:0 0 var(--spacing-xs) 0;font-size:var(--font-size-lg);color:var(--text-primary)}.newsletter-cta p{margin:0;font-size:var(--font-size-sm);color:var(--text-secondary)}@media (max-width:600px){.newsletter-cta{flex-direction:column;align-items:flex-start}}.partner-links{margin-top:var(--spacing-md);display:flex;gap:var(--spacing-sm)}.partner-link{display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-secondary);border-radius:var(--border-radius);transition:all var(--transition-base);text-decoration:none;color:var(--text-primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.partner-link:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);text-decoration:none}.partner-icon{width:18px;height:18px;fill:currentcolor}.partner-link.linkedin:hover{color:var(--social-linkedin);background:rgb(0 119 181 / 1%)}.location-map iframe{display:block;width:100%;max-width:100%}.site-footer{background-color:var(--bg-dark);color:var(--text-inverse);padding:var(--spacing-xl) 0;text-align:center}.site-footer p{color:var(--text-inverse);margin:0}.site-footer a{color:var(--text-inverse);text-decoration:underline}.site-footer a:hover{color:rgb(255 255 255 / 80%)}@media (max-width:1024px){.meeting-grid{grid-template-columns:1fr;gap:var(--spacing-2xl)}.social-links{gap:var(--spacing-md)}}@media (max-width:768px){.nav-links{display:none}.mobile-menu-toggle{display:flex;position:absolute;right:0;top:50%;transform:translateY(-50%);z-index:101;flex-direction:column;background:rgb(0 0 0 / 10%);border-radius:var(--border-radius);padding:var(--spacing-md);backdrop-filter:blur(5px);border:1px solid rgb(255 255 255 / 20%)}.nav-container{justify-content:center;position:relative}.mobile-menu-toggle:hover{background:rgb(0 0 0 / 2%);border-color:rgb(255 255 255 / 3%)}.hamburger-line{width:26px;height:3px;border-radius:2px;box-shadow:0 1px 2px rgb(0 0 0 / 2%)}.hero-actions{flex-direction:column;align-items:center;width:100%;gap:var(--spacing-md)}.btn{width:100%;max-width:300px;text-align:center}.meeting-links{flex-direction:column;align-items:center;width:100%;gap:var(--spacing-md)}.meeting-links .btn{width:100%;max-width:300px;text-align:center}.social-links{grid-template-columns:repeat(2,1fr);display:grid;gap:var(--spacing-md)}.command-explanations{gap:var(--spacing-sm)}.terminal-content{padding:var(--spacing-md)}}@media (max-width:480px){:root{--spacing-lg:1rem;--spacing-xl:1.25rem;--spacing-2xl:2rem;--spacing-3xl:2.5rem}.hero-content{padding:var(--spacing-2xl) var(--spacing-md)}.meeting-links .btn{width:100%}.social-links{grid-template-columns:1fr}.hero-actions,.meeting-links{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;margin-left:auto;margin-right:auto}.hero-actions .btn,.meeting-links .btn{width:100%;max-width:280px;text-align:center;margin:0 auto}.logo-link img{height:50px}.mobile-menu-toggle{padding:var(--spacing-sm)}.hamburger-line{width:22px;height:2px}.container{padding:0 var(--spacing-sm)}.nav-container{padding:0 var(--spacing-md)}}@keyframes fade-in-up{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.animate-on-scroll{opacity:0;transform:translateY(30px);transition:all var(--transition-slow)}.animate-on-scroll.visible{opacity:1;transform:translateY(0)}.btn:focus,.social-link:focus,button:focus{outline:2px solid var(--primary-color);outline-offset:2px}.mobile-menu-toggle:focus{outline:2px solid var(--accent-color);outline-offset:2px;background:rgb(0 0 0 / 3%)}.mobile-nav-link:focus{outline:2px solid var(--accent-color);outline-offset:2px;background-color:rgb(255 255 255 / 15%)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,::after,::before{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important}}@media (max-width:768px){.calendar-grid{font-size:.9rem}.calendar-day{min-height:35px;padding:.25rem}.events-grid{grid-template-columns:1fr}.event-links{flex-direction:column}.event-link{justify-content:center}}.calendar-container{background:var(--bg-primary);border-radius:12px;box-shadow:0 4px 6px rgb(0 0 0 / 1%);padding:1.5rem;margin:2rem 0}.calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.calendar-nav{background:0 0;border:none;font-size:1.5rem;cursor:pointer;padding:.5rem;border-radius:50%;transition:background-color .3s}.calendar-nav:hover{background-color:var(--bg-secondary)}.calendar-title{font-size:1.2rem;font-weight:700;color:var(--primary-color)}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background-color:var(--bg-tertiary);border-radius:8px;overflow:hidden}.calendar-day-header{background-color:var(--primary-color);color:var(--text-inverse);padding:.75rem;text-align:center;font-weight:700;font-size:.9rem}.calendar-day{background-color:var(--bg-primary);padding:.5rem;min-height:40px;display:flex;align-items:center;justify-content:center;position:relative;cursor:pointer;transition:background-color .3s}.calendar-day:hover{background-color:var(--bg-secondary)}.calendar-day.other-month{background-color:var(--bg-secondary);color:var(--text-muted)}.calendar-day.has-event{background-color:var(--primary-faint);color:var(--primary-color);font-weight:700}.calendar-day.has-event::after{content:'';position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:6px;height:6px;background-color:var(--primary-color);border-radius:50%}.events-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:2rem;margin:2rem 0}.event-card{background:var(--bg-primary);border-radius:12px;box-shadow:0 4px 6px rgb(0 0 0 / 1%);padding:1.5rem;transition:transform .3s,box-shadow .3s}.event-card:hover{transform:translateY(-4px);box-shadow:0 8px 15px rgb(0 0 0 / 15%)}.resource-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem;margin:2rem 0}@media (max-width:768px){.resource-grid{grid-template-columns:1fr}}.resource-card{background:var(--bg-primary);border-radius:12px;box-shadow:0 4px 6px rgb(0 0 0 / 1%);padding:1.5rem;transition:transform .3s,box-shadow .3s}.resource-card:hover{transform:translateY(-4px);box-shadow:0 8px 15px rgb(0 0 0 / 15%)}.resource-card h3 a{color:var(--text-primary);text-decoration:none}.resource-card h3 a:hover{color:var(--primary-color)}.event-date{background:linear-gradient(135deg,var(--primary-color),var(--primary-dark));color:var(--text-inverse);padding:.5rem 1rem;border-radius:8px;font-weight:700;margin-bottom:1rem;display:inline-block}.event-title{font-size:1.3rem;font-weight:700;color:var(--text-primary);margin-bottom:1rem}.event-topics{margin:1rem 0}.topic-item{background-color:var(--bg-secondary);border-left:4px solid var(--primary-color);padding:1rem;margin-bottom:.5rem;border-radius:0 8px 8px 0}.topic-title{font-weight:700;color:var(--primary-color);margin-bottom:.5rem}.topic-speaker{font-style:italic;color:var(--text-secondary);font-size:.9rem;margin-bottom:.5rem}.topic-description{color:var(--text-secondary);line-height:1.5}.event-links{display:flex;gap:1rem;margin-top:1rem;flex-wrap:wrap;align-items:center}.event-link{display:inline-flex;align-items:center;padding:.5rem 1rem;background-color:var(--primary-color);color:var(--text-inverse);text-decoration:none;border-radius:6px;font-size:.9rem;transition:background-color .3s}.event-link:hover{background-color:var(--primary-dark);color:var(--text-inverse)}.event-link.secondary{background-color:var(--secondary-color);color:var(--text-inverse)}.event-link.secondary:hover{background-color:var(--text-primary);color:var(--text-inverse)}.section{padding:3rem 0}.section-title{font-size:2.5rem;font-weight:700;color:var(--text-primary);margin-bottom:1rem;text-align:center}.section-heading{font-size:2rem;font-weight:700;color:var(--text-primary);margin-bottom:1rem;margin-top:2.5rem;text-align:center}.section-subtitle{font-size:1.1rem;color:var(--text-secondary);text-align:center;margin-bottom:2rem;max-width:600px;margin-left:auto;margin-right:auto}.copy-btn{background:0 0;border:none;cursor:pointer;padding:4px;margin-left:4px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;transition:background-color var(--transition-fast);color:var(--text-secondary)}.copy-btn:hover{background-color:var(--bg-tertiary);color:var(--primary-color)}.copy-btn:active{background-color:var(--bg-tertiary);transform:scale(.95)}.copy-icon{fill:currentColor}.copy-btn.success{color:var(--success-color)}.btn-secondary small{display:flex;align-items:center;justify-content:center;gap:4px;margin-top:4px}.btn-secondary .copy-btn{color:rgb(255 255 255 / 8%);padding:2px}.btn-secondary .copy-btn:hover{background-color:rgb(255 255 255 / 1%);color:#fff}.btn-secondary .copy-btn.success{color:var(--success-color)}.article-card{background:var(--bg-primary);border:var(--border-width) solid var(--bg-tertiary);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);padding:var(--spacing-2xl) var(--spacing-2xl);margin:var(--spacing-2xl) 0}@media (max-width:768px){.article-card{padding:var(--spacing-lg);margin:var(--spacing-lg) 0}}.article-card .section-heading,.article-card .section-subtitle,.article-card .section-title{text-align:left;max-width:none;margin-left:0;margin-right:0}.article-card .section-title{font-size:var(--font-size-2xl);color:var(--primary-color);margin-bottom:var(--spacing-md);padding-bottom:var(--spacing-sm);border-bottom:2px solid var(--bg-tertiary)}.article-card .section-heading{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--text-primary);margin-top:var(--spacing-2xl);margin-bottom:var(--spacing-sm)}.article-card .section-title+.section-heading,.article-card .section-title+.section-subtitle+.section-heading,.article-card .section-title+p+.section-heading{margin-top:var(--spacing-xl)}.article-card .section-subtitle{font-size:var(--font-size-base);color:var(--text-secondary);margin-bottom:var(--spacing-lg)}.article-card .terminal-window{max-width:100%;margin-bottom:var(--spacing-lg)}.article-card p a{color:var(--primary-color);text-decoration:underline;text-underline-offset:3px}.article-card p a:hover{color:var(--primary-dark)}.article-nav{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-md);margin-top:var(--spacing-2xl);padding-top:var(--spacing-lg);border-top:var(--border-width) solid var(--bg-tertiary);flex-wrap:wrap}.article-nav a{color:var(--primary-color);font-weight:var(--font-weight-medium);text-decoration:none;display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);border:var(--border-width) solid var(--bg-tertiary);border-radius:var(--border-radius);transition:all var(--transition-fast);background:var(--bg-secondary)}.article-nav a:hover{border-color:var(--primary-color);background:var(--bg-primary);text-decoration:none;box-shadow:var(--shadow-sm)}.event-card,.resource-card{box-shadow:var(--shadow-md);border:var(--border-width) solid var(--bg-tertiary)}.event-card:hover,.resource-card:hover{box-shadow:var(--shadow-lg)}.breadcrumb{padding:var(--spacing-md) 0 0;font-size:var(--font-size-sm);color:var(--text-muted)}.breadcrumb a{color:var(--text-muted);text-decoration:none}.breadcrumb a:hover{color:var(--primary-color);text-decoration:underline}.breadcrumb-sep{margin:0 var(--spacing-xs);color:var(--bg-tertiary)}@media (max-width:768px){.hero-header{background:linear-gradient(var(--bg-overlay),var(--bg-overlay)),var(--bg-dark)}}.comparison-table-wrapper{overflow-x:auto;margin:var(--spacing-xl) 0}.comparison-table{width:100%;border-collapse:collapse;background:var(--bg-primary);border-radius:var(--border-radius-lg);overflow:hidden;box-shadow:var(--shadow-md)}.comparison-table td,.comparison-table th{padding:var(--spacing-md);text-align:left;border-bottom:1px solid var(--bg-tertiary)}.comparison-table th{background:var(--primary-color);color:var(--text-inverse);font-weight:var(--font-weight-bold)}.comparison-table tr:last-child td{border-bottom:none}.comparison-table tr:hover{background:var(--bg-secondary)} \ No newline at end of file + ) center/cover no-repeat;min-height:100vh;display:flex;flex-direction:column;position:relative;color:var(--text-inverse)}.main-nav{position:relative;z-index:100;padding:var(--spacing-lg) 0}.nav-container{max-width:var(--container-max-width);margin:0 auto;padding:0 var(--spacing-lg);display:flex;justify-content:space-between;align-items:center}.logo-link img{height:60px;width:auto}.nav-links{display:flex;list-style:none;margin:0;padding:0;gap:var(--spacing-xl)}.nav-link{color:var(--text-inverse);font-weight:var(--font-weight-medium);padding:var(--spacing-sm) 0;position:relative}.nav-link.active,.nav-link:hover{color:var(--text-inverse);text-decoration:none}.nav-link::after{content:'';position:absolute;bottom:-2px;left:0;width:0;height:2px;background-color:var(--accent-color);transition:width var(--transition-base)}.nav-link.active::after,.nav-link:hover::after{width:100%}.mobile-menu-toggle{display:none;flex-direction:column;background:0 0;border:none;cursor:pointer;padding:var(--spacing-sm);gap:4px}.hamburger-line{width:24px;height:2px;background-color:var(--text-inverse);transition:all var(--transition-base)}.mobile-menu-toggle.active .hamburger-line:first-child{transform:rotate(45deg) translate(6px,6px)}.mobile-menu-toggle.active .hamburger-line:nth-child(2){opacity:0}.mobile-menu-toggle.active .hamburger-line:nth-child(3){transform:rotate(-45deg) translate(6px,-6px)}.mobile-menu{position:absolute;top:100%;left:0;right:0;background-color:var(--bg-overlay);backdrop-filter:blur(10px);padding:var(--spacing-lg);border-top:1px solid rgb(255 255 255 / 1%);box-shadow:0 4px 20px rgb(0 0 0 / 3%);z-index:100;opacity:0;visibility:hidden;transform:translateY(-10px);transition:all var(--transition-base);pointer-events:none}.mobile-menu.active{opacity:1;visibility:visible;transform:translateY(0);pointer-events:auto}.mobile-nav-links{list-style:none;margin:0;padding:0}.mobile-nav-links li{margin-bottom:var(--spacing-md)}.mobile-nav-link{color:var(--text-inverse);font-weight:var(--font-weight-medium);font-size:var(--font-size-lg);display:block;padding:var(--spacing-md) var(--spacing-sm);border-radius:var(--border-radius);transition:all var(--transition-base)}.mobile-nav-link.active,.mobile-nav-link:hover{background-color:rgb(255 255 255 / 1%);color:var(--text-inverse);text-decoration:none;transform:translateX(4px)}.hero-content{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:var(--spacing-3xl) var(--spacing-lg)}.hero-text{max-width:800px}.hero-title{font-size:clamp(var(--font-size-3xl), 5vw, var(--font-size-5xl));font-weight:var(--font-weight-bold);margin-bottom:var(--spacing-lg);color:var(--text-inverse)}.hero-subtitle{font-size:clamp(var(--font-size-lg), 2.5vw, var(--font-size-xl));margin-bottom:var(--spacing-2xl);color:rgb(255 255 255 / 90%);line-height:var(--line-height-relaxed)}.hero-actions{display:flex;gap:var(--spacing-lg);justify-content:center;flex-wrap:wrap;align-items:center;width:100%}.hero-actions .btn-secondary{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;white-space:normal;text-align:center;padding-top:calc(var(--spacing-sm) + .1rem);padding-bottom:calc(var(--spacing-sm) + .1rem)}.next-meeting{padding:var(--spacing-3xl) 0;background-color:var(--bg-secondary)}.meeting-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--spacing-3xl);align-items:start}.meeting-info h2{color:var(--primary-color);margin-bottom:var(--spacing-xl)}.meeting-details{display:grid;gap:var(--spacing-xl)}.meeting-date,.meeting-location{background:var(--bg-primary);padding:var(--spacing-lg);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);border:1px solid var(--bg-tertiary)}.meeting-date h3,.meeting-location h3{color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:var(--font-size-lg)}.meeting-location address{font-style:normal;line-height:var(--line-height-relaxed)}.meeting-topics h3{color:var(--primary-color);margin-bottom:var(--spacing-lg)}.topic-card{background:var(--bg-primary);padding:var(--spacing-lg);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);margin-bottom:var(--spacing-lg)}.topic-card h4{margin-bottom:var(--spacing-sm);color:var(--primary-color)}.topic-card h5{color:var(--primary-color);margin-bottom:var(--spacing-lg)}.meeting-links{display:flex;gap:var(--spacing-md);margin:var(--spacing-lg) 0;flex-wrap:wrap;justify-content:center;align-items:center;width:100%}.room-code{background:var(--bg-tertiary);padding:var(--spacing-md);border-radius:var(--border-radius);font-size:var(--font-size-sm)}.room-code code{background:var(--primary-color);color:var(--text-inverse);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--border-radius);font-family:var(--font-family-mono)}.terminal-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-primary)}.terminal-section h2{color:var(--primary-color);text-align:center;margin-bottom:var(--spacing-lg)}.terminal-section>.container>p{text-align:center;margin-bottom:var(--spacing-2xl);font-size:var(--font-size-lg)}.terminal-window{background:#0f172a;border-radius:var(--border-radius-lg);overflow:hidden;box-shadow:var(--shadow-xl);margin-bottom:var(--spacing-xl);max-width:800px;margin-left:auto;margin-right:auto}.terminal-header{background:#1e293b;padding:var(--spacing-md);display:flex;align-items:center;gap:var(--spacing-md);border-bottom:1px solid rgb(255 255 255 / 7%)}.terminal-buttons{display:flex;gap:var(--spacing-xs)}.terminal-button{width:12px;height:12px;border-radius:50%}.terminal-button.red{background:var(--error-color)}.terminal-button.yellow{background:var(--warning-color)}.terminal-button.green{background:var(--success-color)}.terminal-title{color:#cbd5e1;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.terminal-content{padding:var(--spacing-xl)}.terminal-command{color:#4ade80;font-family:var(--font-family-mono);font-size:var(--font-size-base);line-height:var(--line-height-relaxed)}.command-line{display:block;margin-bottom:var(--spacing-xs)}.command-line::before{content:'PS C: \\> ';color:#38bdf8}.command-line:not(:first-child)::before{content:'>> '}.command-explanations{display:grid;gap:var(--spacing-md);max-width:800px;margin:0 auto var(--spacing-xl)}.explanation{background:var(--bg-secondary);padding:var(--spacing-md);border-radius:var(--border-radius);border-left:4px solid var(--primary-color)}.github-link{text-align:center;font-size:var(--font-size-lg)}.about-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-secondary)}.about-section h2{color:var(--primary-color);margin-bottom:var(--spacing-xl)}.about-section h3{color:var(--primary-color);margin-top:var(--spacing-2xl);margin-bottom:var(--spacing-lg)}.about-content{max-width:800px}.resources{background:var(--bg-primary);padding:var(--spacing-xl);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);margin-top:var(--spacing-xl)}.resources h4{color:var(--primary-color);margin-bottom:var(--spacing-md)}.resources ul{list-style:none;padding:0}.resources li{padding:var(--spacing-sm) 0;border-bottom:1px solid var(--bg-tertiary)}.resources li:last-child{border-bottom:none}.resources a{display:block;padding:var(--spacing-sm);border-radius:var(--border-radius);transition:background-color var(--transition-base)}.resources a:hover{background-color:var(--bg-secondary);text-decoration:none}.impressum-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-secondary)}.impressum-content{max-width:800px;margin:0 auto}.impressum-section h2{color:var(--primary-color);margin-bottom:var(--spacing-2xl);text-align:center}.legal-box{background:var(--bg-primary);padding:var(--spacing-xl);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);margin-bottom:var(--spacing-xl);border:1px solid var(--bg-tertiary)}.legal-box h3{color:var(--primary-color);margin-bottom:var(--spacing-lg);font-size:var(--font-size-xl)}.legal-box address{font-style:normal;line-height:var(--line-height-relaxed);margin:var(--spacing-md) 0}.legal-box p{margin-bottom:var(--spacing-md);line-height:var(--line-height-relaxed)}.legal-box p:last-child{margin-bottom:0}.legal-box a{color:var(--primary-color);text-decoration:underline}.legal-box a:hover{color:var(--primary-dark)}.contact-section{padding:var(--spacing-3xl) 0;background-color:var(--bg-primary);text-align:center}.contact-section h2{color:var(--primary-color);margin-bottom:var(--spacing-lg)}.contact-section>.container>p{margin-bottom:var(--spacing-2xl);font-size:var(--font-size-lg)}.social-links{display:flex;justify-content:center;gap:var(--spacing-xl);flex-wrap:wrap}.social-link{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-lg);background:var(--bg-secondary);border-radius:var(--border-radius-lg);transition:all var(--transition-base);min-width:120px;text-decoration:none;color:var(--text-primary)}.social-link:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg);color:var(--primary-color);text-decoration:none}.social-icon{width:32px;height:32px;fill:currentcolor}.social-link span{font-weight:var(--font-weight-medium);font-size:var(--font-size-sm)}.social-link.twitter:hover{color:var(--social-twitter)}.social-link.mastodon:hover{color:var(--social-mastodon)}.social-link.github:hover{color:var(--social-github)}.social-link.discord:hover{color:var(--social-discord)}.social-link.linkedin:hover{color:var(--social-linkedin)}.newsletter-cta{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-lg);margin-top:var(--spacing-2xl);padding:var(--spacing-lg) var(--spacing-xl);background:var(--bg-secondary);border:var(--border-width) solid var(--bg-tertiary);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-sm);flex-wrap:wrap;text-align:left}.newsletter-cta-content{display:flex;align-items:center;gap:var(--spacing-lg);flex:1;min-width:220px}.newsletter-icon{fill:var(--primary-color);flex-shrink:0}.newsletter-cta h3{margin:0 0 var(--spacing-xs) 0;font-size:var(--font-size-lg);color:var(--text-primary)}.newsletter-cta p{margin:0;font-size:var(--font-size-sm);color:var(--text-secondary)}@media (max-width:600px){.newsletter-cta{flex-direction:column;align-items:flex-start}}.partner-links{margin-top:var(--spacing-md);display:flex;gap:var(--spacing-sm)}.partner-link{display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-secondary);border-radius:var(--border-radius);transition:all var(--transition-base);text-decoration:none;color:var(--text-primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.partner-link:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);text-decoration:none}.partner-icon{width:18px;height:18px;fill:currentcolor}.partner-link.linkedin:hover{color:var(--social-linkedin);background:rgb(0 119 181 / 1%)}.meeting-location iframe{display:block;width:100%;max-width:100%}.site-footer{background-color:var(--bg-dark);color:var(--text-inverse);padding:var(--spacing-xl) 0;text-align:center}.site-footer p{color:var(--text-inverse);margin:0}.site-footer a{color:var(--text-inverse);text-decoration:underline}.site-footer a:hover{color:rgb(255 255 255 / 80%)}@media (max-width:1024px){.meeting-grid{grid-template-columns:1fr;gap:var(--spacing-2xl)}.social-links{gap:var(--spacing-md)}}@media (max-width:768px){.nav-links{display:none}.mobile-menu-toggle{display:flex;position:absolute;right:0;top:50%;transform:translateY(-50%);z-index:101;flex-direction:column;background:rgb(0 0 0 / 10%);border-radius:var(--border-radius);padding:var(--spacing-md);backdrop-filter:blur(5px);border:1px solid rgb(255 255 255 / 20%)}.nav-container{justify-content:center;position:relative}.mobile-menu-toggle:hover{background:rgb(0 0 0 / 2%);border-color:rgb(255 255 255 / 3%)}.hamburger-line{width:26px;height:3px;border-radius:2px;box-shadow:0 1px 2px rgb(0 0 0 / 2%)}.hero-actions{flex-direction:column;align-items:center;width:100%;gap:var(--spacing-md)}.btn{width:100%;max-width:300px;text-align:center}.online-join-group{width:100%;max-width:300px}.online-join-group .btn{width:100%;max-width:100%}.meeting-links{flex-direction:column;align-items:center;width:100%;gap:var(--spacing-md)}.meeting-links .btn{width:100%;max-width:300px;text-align:center}.social-links{grid-template-columns:repeat(2,1fr);display:grid;gap:var(--spacing-md)}.command-explanations{gap:var(--spacing-sm)}.terminal-content{padding:var(--spacing-md)}}@media (max-width:480px){:root{--spacing-lg:1rem;--spacing-xl:1.25rem;--spacing-2xl:2rem;--spacing-3xl:2.5rem}.hero-content{padding:var(--spacing-2xl) var(--spacing-md)}.meeting-links .btn{width:100%}.social-links{grid-template-columns:1fr}.hero-actions,.meeting-links{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;margin-left:auto;margin-right:auto}.hero-actions .btn,.meeting-links .btn{width:100%;max-width:280px;text-align:center;margin:0 auto}.logo-link img{height:50px}.mobile-menu-toggle{padding:var(--spacing-sm)}.hamburger-line{width:22px;height:2px}.container{padding:0 var(--spacing-sm)}.nav-container{padding:0 var(--spacing-md)}}@keyframes fade-in-up{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.animate-on-scroll{opacity:0;transform:translateY(30px);transition:all var(--transition-slow)}.animate-on-scroll.visible{opacity:1;transform:translateY(0)}.btn:focus,.social-link:focus,button:focus{outline:2px solid var(--primary-color);outline-offset:2px}.mobile-menu-toggle:focus{outline:2px solid var(--accent-color);outline-offset:2px;background:rgb(0 0 0 / 3%)}.mobile-nav-link:focus{outline:2px solid var(--accent-color);outline-offset:2px;background-color:rgb(255 255 255 / 15%)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,::after,::before{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important}}@media (max-width:768px){.calendar-grid{font-size:.9rem}.calendar-day{min-height:35px;padding:.25rem}.events-grid{grid-template-columns:1fr}.event-links{flex-direction:column}.event-link{justify-content:center}}.calendar-container{background:var(--bg-primary);border-radius:12px;box-shadow:0 4px 6px rgb(0 0 0 / 1%);padding:1.5rem;margin:2rem 0}.calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.calendar-nav{background:0 0;border:none;font-size:1.5rem;cursor:pointer;padding:.5rem;border-radius:50%;transition:background-color .3s;min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}.calendar-nav:hover{background-color:var(--bg-secondary)}.calendar-title{font-size:1.2rem;font-weight:700;color:var(--primary-color)}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background-color:var(--bg-tertiary);border-radius:8px;overflow:hidden}.calendar-day-header{background-color:var(--primary-color);color:var(--text-inverse);padding:.75rem;text-align:center;font-weight:700;font-size:.9rem}.calendar-day{background-color:var(--bg-primary);padding:.5rem;min-height:40px;display:flex;align-items:center;justify-content:center;position:relative;cursor:pointer;transition:background-color .3s}.calendar-day:hover{background-color:var(--bg-secondary)}.calendar-day.other-month{background-color:var(--bg-secondary);color:var(--text-muted)}.calendar-day.has-event{background-color:var(--primary-faint);color:var(--primary-color);font-weight:700}.calendar-day.has-event::after{content:'';position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:6px;height:6px;background-color:var(--primary-color);border-radius:50%}.events-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:2rem;margin:2rem 0}.event-card{background:var(--bg-primary);border-radius:12px;box-shadow:0 4px 6px rgb(0 0 0 / 1%);padding:1.5rem;transition:transform .3s,box-shadow .3s}.event-card:hover{transform:translateY(-4px);box-shadow:0 8px 15px rgb(0 0 0 / 15%)}.event-card.highlight-flash{animation:flash-animation 2s ease}@keyframes flash-animation{0%{background-color:var(--bg-primary);box-shadow:0 4px 6px rgb(0 0 0 / 1%)}15%{background-color:rgb(0 115 174 / 15%);box-shadow:0 0 15px rgb(0 115 174 / 40%)}100%{background-color:var(--bg-primary);box-shadow:0 4px 6px rgb(0 0 0 / 1%)}}.resource-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2rem;margin:2rem 0}@media (max-width:768px){.resource-grid{grid-template-columns:1fr}}.resource-card{background:var(--bg-primary);border-radius:12px;box-shadow:0 4px 6px rgb(0 0 0 / 1%);padding:1.5rem;transition:transform .3s,box-shadow .3s}.resource-card:hover{transform:translateY(-4px);box-shadow:0 8px 15px rgb(0 0 0 / 15%)}.resource-card h3 a{color:var(--text-primary);text-decoration:none}.resource-card h3 a:hover{color:var(--primary-color)}.event-date{background:linear-gradient(135deg,var(--primary-color),var(--primary-dark));color:var(--text-inverse);padding:.5rem 1rem;border-radius:8px;font-weight:700;margin-bottom:1rem;display:inline-block}.event-title{font-size:1.3rem;font-weight:700;color:var(--text-primary);margin-bottom:1rem}.event-topics{margin:1rem 0}.topic-item{background-color:var(--bg-secondary);border-left:4px solid var(--primary-color);padding:1rem;margin-bottom:.5rem;border-radius:0 8px 8px 0}.topic-title{font-weight:700;color:var(--primary-color);margin-bottom:.5rem}.topic-speaker{font-style:italic;color:var(--text-secondary);font-size:.9rem;margin-bottom:.5rem}.topic-description{color:var(--text-secondary);line-height:1.5}.event-links{display:flex;gap:1rem;margin-top:1rem;flex-wrap:wrap;align-items:center}.event-link{display:inline-flex;align-items:center;padding:.5rem 1rem;background-color:var(--primary-color);color:var(--text-inverse);text-decoration:none;border-radius:6px;font-size:.9rem;transition:background-color .3s}.event-link:hover{background-color:var(--primary-dark);color:var(--text-inverse)}.event-link.secondary{background-color:var(--secondary-color);color:var(--text-inverse)}.event-link.secondary:hover{background-color:var(--text-primary);color:var(--text-inverse)}.section{padding:3rem 0}.section-title{font-size:2.5rem;font-weight:700;color:var(--text-primary);margin-bottom:1rem;text-align:center}.section-heading{font-size:2rem;font-weight:700;color:var(--text-primary);margin-bottom:1rem;margin-top:2.5rem;text-align:center}.section-subtitle{font-size:1.1rem;color:var(--text-secondary);text-align:center;margin-bottom:2rem;max-width:600px;margin-left:auto;margin-right:auto}.copy-btn{background:0 0;border:none;cursor:pointer;padding:8px;margin-left:4px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;transition:background-color var(--transition-fast);color:var(--text-secondary);min-width:44px;min-height:44px}.copy-btn:hover{background-color:var(--bg-tertiary);color:var(--primary-color)}.copy-btn:active{background-color:var(--bg-tertiary);transform:scale(.95)}.copy-icon{fill:currentColor}.copy-btn.success{color:var(--success-color)}.online-join-group{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-sm)}.hero-room-code-container{display:inline-flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-sm);color:rgb(255 255 255 / 90%);background:rgb(255 255 255 / 10%);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);padding:2px 2px 2px 12px;border-radius:22px;border:1px solid rgb(255 255 255 / 15%);height:44px}.hero-room-code-container code{font-family:var(--font-family-mono);color:#fff;font-weight:var(--font-weight-semibold);background:var(--primary-color);padding:2px 6px;border-radius:4px}.hero-room-code-container .copy-btn{color:rgb(255 255 255 / 70%);margin-left:0}.hero-room-code-container .copy-btn:hover{color:#fff;background-color:rgb(255 255 255 / 10%)}.hero-room-code-container .copy-btn.success{color:var(--success-color)}.article-card{background:var(--bg-primary);border:var(--border-width) solid var(--bg-tertiary);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-md);padding:var(--spacing-2xl) var(--spacing-2xl);margin:var(--spacing-2xl) 0}@media (max-width:768px){.article-card{padding:var(--spacing-lg);margin:var(--spacing-lg) 0}}.article-card .section-heading,.article-card .section-subtitle,.article-card .section-title{text-align:left;max-width:none;margin-left:0;margin-right:0}.article-card .section-title{font-size:var(--font-size-2xl);color:var(--primary-color);margin-bottom:var(--spacing-md);padding-bottom:var(--spacing-sm);border-bottom:2px solid var(--bg-tertiary)}.article-card .section-heading{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--text-primary);margin-top:var(--spacing-2xl);margin-bottom:var(--spacing-sm)}.article-card .section-title+.section-heading,.article-card .section-title+.section-subtitle+.section-heading,.article-card .section-title+p+.section-heading{margin-top:var(--spacing-xl)}.article-card .section-subtitle{font-size:var(--font-size-base);color:var(--text-secondary);margin-bottom:var(--spacing-lg)}.article-card .terminal-window{max-width:100%;margin-bottom:var(--spacing-lg)}.article-card p a{color:var(--primary-color);text-decoration:underline;text-underline-offset:3px}.article-card p a:hover{color:var(--primary-dark)}.article-nav{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-md);margin-top:var(--spacing-2xl);padding-top:var(--spacing-lg);border-top:var(--border-width) solid var(--bg-tertiary);flex-wrap:wrap}.article-nav a{color:var(--primary-color);font-weight:var(--font-weight-medium);text-decoration:none;display:inline-flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);border:var(--border-width) solid var(--bg-tertiary);border-radius:var(--border-radius);transition:all var(--transition-fast);background:var(--bg-secondary)}.article-nav a:hover{border-color:var(--primary-color);background:var(--bg-primary);text-decoration:none;box-shadow:var(--shadow-sm)}.event-card,.resource-card{box-shadow:var(--shadow-md);border:var(--border-width) solid var(--bg-tertiary)}.event-card:hover,.resource-card:hover{box-shadow:var(--shadow-lg)}.breadcrumb{padding:var(--spacing-md) 0 0;font-size:var(--font-size-sm);color:var(--text-muted)}.breadcrumb a{color:var(--text-muted);text-decoration:none}.breadcrumb a:hover{color:var(--primary-color);text-decoration:underline}.breadcrumb-sep{margin:0 var(--spacing-xs);color:var(--bg-tertiary)}@media (max-width:768px){.hero-header{background:linear-gradient(var(--bg-overlay),var(--bg-overlay)),var(--bg-dark)}}.comparison-table-wrapper{overflow-x:auto;margin:var(--spacing-xl) 0}.comparison-table{width:100%;border-collapse:collapse;background:var(--bg-primary);border-radius:var(--border-radius-lg);overflow:hidden;box-shadow:var(--shadow-md)}.comparison-table td,.comparison-table th{padding:var(--spacing-md);text-align:left;border-bottom:1px solid var(--bg-tertiary)}.comparison-table th{background:var(--primary-color);color:var(--text-inverse);font-weight:var(--font-weight-bold)}.comparison-table tr:last-child td{border-bottom:none}.comparison-table tr:hover{background:var(--bg-secondary)} \ No newline at end of file diff --git a/events.html b/events.html index 44f98ac..beb7b40 100644 --- a/events.html +++ b/events.html @@ -24,10 +24,19 @@ - + - - + + + + + + + + + + + @@ -118,7 +127,7 @@ Event-Kalender ‹ - + › @@ -162,23 +171,11 @@ Vergangene Treffen - - - +