-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathdefault.html
More file actions
232 lines (206 loc) · 9.89 KB
/
Copy pathdefault.html
File metadata and controls
232 lines (206 loc) · 9.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<!-- Theme: apply session or system preference immediately to avoid flash of wrong theme -->
<script>
try {
var sessionTheme = sessionStorage.getItem('theme-session-preference');
var initialTheme = (sessionTheme === 'dark' || sessionTheme === 'light')
? sessionTheme
: ((window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light');
document.documentElement.setAttribute('data-theme', initialTheme);
} catch(e) {}
</script>
<title>{% if page.title %}{{ page.title }} – {% endif %}{{ site.name }} – {{ site.description }}</title>
{% seo title=false %}
{% include meta.html %}
<link rel="stylesheet" type="text/css" href="{{ site.baseurl }}/assets/style.css" />
<link rel="alternate" type="application/rss+xml" title="{{ site.name }} - {{ site.description }}" href="{{ site.baseurl }}/feed.xml" />
<link rel="canonical" href="{{ site.url }}{{ page.url }}" />
<!-- Modern font loading -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<meta name="theme-color" content="#667eea">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" sizes="32x32" href="{{ site.baseurl }}/images/favicon-32x32.png">
{% include analytics_head.html %}
</head>
<body>
<!-- Modern gradient bar -->
<div class="gradient-bar"></div>
<div class="layout-container">
<!-- Modern navigation header -->
<header class="site-header">
<div class="container">
<div class="header-content">
<a href="{{ site.baseurl }}/" class="site-logo">
<img src="{{ site.baseurl }}{{ site.avatar }}" alt="{{ site.title }}" />
<div class="site-info">
<h1 class="site-name">{{ site.name }}</h1>
<p class="site-description">{{ site.description }}</p>
</div>
</a>
<!-- Mobile menu button -->
<button class="mobile-menu-btn" aria-label="Toggle navigation menu" aria-expanded="false">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</button>
<!-- Navigation -->
<nav class="site-nav" aria-label="Main navigation">
<a href="{{ site.baseurl }}/" class="nav-link">
<span class="nav-icon">🏠</span>
<span class="nav-text">Home</span>
</a>
<a href="{{ site.baseurl }}/team" class="nav-link">
<span class="nav-icon">👩💻</span>
<span class="nav-text">Team</span>
</a>
<a href="{{ site.baseurl }}/events" class="nav-link">
<span class="nav-icon">📅</span>
<span class="nav-text">Events</span>
</a>
<a href="{{ site.baseurl }}/speaker-info" class="nav-link">
<span class="nav-icon">🎤</span>
<span class="nav-text">Speaker Info</span>
</a>
<a href="{{ site.baseurl }}/statistics" class="nav-link">
<span class="nav-icon">📊</span>
<span class="nav-text">Statistics</span>
</a>
<a href="{{ site.baseurl }}/join" class="nav-link nav-cta">
<span class="nav-icon">🤝</span>
<span class="nav-text">Join us!</span>
</a>
<button class="theme-toggle-btn" id="theme-toggle" aria-label="Switch color theme" title="Switch color theme"></button>
</nav>
</div>
</div>
</header>
<!-- Main content -->
<main class="site-main">
<div class="container">
{{ content }}
</div>
</main>
<!-- Modern footer -->
<footer class="site-footer">
<div class="container">
<div class="footer-content">
<div class="footer-social">
{% include svg-icons.html %}
</div>
<p class="footer-text">
Cloud Native Computing Linz - Building the future of cloud native technology together.
</p>
</div>
</div>
</footer>
</div>
{% include analytics.html %}
<!-- Mobile navigation script -->
<script>
document.addEventListener('DOMContentLoaded', function() {
const mobileMenuBtn = document.querySelector('.mobile-menu-btn');
const siteNav = document.querySelector('.site-nav');
const body = document.body;
if (mobileMenuBtn && siteNav) {
mobileMenuBtn.addEventListener('click', function() {
const isExpanded = mobileMenuBtn.getAttribute('aria-expanded') === 'true';
mobileMenuBtn.setAttribute('aria-expanded', !isExpanded);
mobileMenuBtn.classList.toggle('active');
siteNav.classList.toggle('active');
body.classList.toggle('nav-open');
});
// Close menu when clicking on a link
siteNav.addEventListener('click', function(e) {
if (e.target.classList.contains('nav-link')) {
mobileMenuBtn.classList.remove('active');
siteNav.classList.remove('active');
body.classList.remove('nav-open');
mobileMenuBtn.setAttribute('aria-expanded', 'false');
}
});
// Close menu when clicking outside
document.addEventListener('click', function(e) {
if (!siteNav.contains(e.target) && !mobileMenuBtn.contains(e.target)) {
mobileMenuBtn.classList.remove('active');
siteNav.classList.remove('active');
body.classList.remove('nav-open');
mobileMenuBtn.setAttribute('aria-expanded', 'false');
}
});
}
});
</script>
<!-- Theme toggle script -->
<script>
(function() {
var LEGACY_STORAGE_KEY = 'theme-preference';
var SESSION_KEY = 'theme-session-preference';
var prefersDarkQuery = window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;
var ICONS = {
light: '<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>',
dark: '<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>'
};
function getSessionTheme() {
try { return sessionStorage.getItem(SESSION_KEY); } catch(e) { return null; }
}
function getSystemTheme() {
return (prefersDarkQuery && prefersDarkQuery.matches) ? 'dark' : 'light';
}
function getEffectiveTheme() {
var sessionTheme = getSessionTheme();
if (sessionTheme === 'dark' || sessionTheme === 'light') return sessionTheme;
return getSystemTheme();
}
function getCurrentTheme() {
var attrTheme = document.documentElement.getAttribute('data-theme');
if (attrTheme === 'dark' || attrTheme === 'light') return attrTheme;
return getEffectiveTheme();
}
function applyTheme(theme, persistInSession) {
if (persistInSession) {
try { sessionStorage.setItem(SESSION_KEY, theme); } catch(e) {}
}
document.documentElement.setAttribute('data-theme', theme);
updateButton(theme);
document.dispatchEvent(new CustomEvent('themechange'));
}
function updateButton(theme) {
var btn = document.getElementById('theme-toggle');
if (btn) {
btn.innerHTML = ICONS[theme];
btn.setAttribute('aria-label', theme === 'dark' ? 'Switch to light mode' : 'Switch to dark mode');
btn.setAttribute('title', theme === 'dark' ? 'Switch to light mode' : 'Switch to dark mode');
}
}
document.addEventListener('DOMContentLoaded', function() {
// Drop legacy persistent preference; keep only session-based override.
try { localStorage.removeItem(LEGACY_STORAGE_KEY); } catch(e) {}
applyTheme(getEffectiveTheme(), false);
var btn = document.getElementById('theme-toggle');
if (btn) {
btn.addEventListener('click', function() {
applyTheme(getCurrentTheme() === 'dark' ? 'light' : 'dark', true);
});
}
if (prefersDarkQuery) {
var handleSystemThemeChange = function() {
if (!getSessionTheme()) {
applyTheme(getSystemTheme(), false);
}
};
if (typeof prefersDarkQuery.addEventListener === 'function') {
prefersDarkQuery.addEventListener('change', handleSystemThemeChange);
} else if (typeof prefersDarkQuery.addListener === 'function') {
prefersDarkQuery.addListener(handleSystemThemeChange);
}
}
});
})();
</script>
</body>
</html>