jekyll-theme-zer0 0.10.3 → 0.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +54 -0
- data/README.md +495 -720
- data/_includes/components/cookie-consent.html +2 -2
- data/_includes/components/post-card.html +2 -2
- data/_includes/content/sitemap.html +4 -9
- data/_includes/stats/stats-categories.html +5 -5
- data/_includes/stats/stats-header.html +7 -7
- data/_includes/stats/stats-metrics.html +8 -8
- data/_includes/stats/stats-no-data.html +9 -9
- data/_includes/stats/stats-overview.html +4 -4
- data/_includes/stats/stats-tags.html +6 -6
- data/_layouts/blog.html +1 -1
- data/_layouts/landing.html +1 -1
- data/_layouts/sitemap-collection.html +3 -26
- metadata +1 -1
|
@@ -151,8 +151,8 @@ Configuration: Uses site.posthog settings from _config.yml
|
|
|
151
151
|
</p>
|
|
152
152
|
</div>
|
|
153
153
|
|
|
154
|
-
<div class="bg-
|
|
155
|
-
<h6 class="text-
|
|
154
|
+
<div class="bg-body p-3 rounded">
|
|
155
|
+
<h6 class="text-body mb-2">
|
|
156
156
|
<i class="bi bi-info-circle me-2"></i>
|
|
157
157
|
Your Privacy Rights
|
|
158
158
|
</h6>
|
|
@@ -163,10 +163,10 @@
|
|
|
163
163
|
{% if include.post.tags.size > 0 %}
|
|
164
164
|
<div class="mt-2">
|
|
165
165
|
{% for tag in include.post.tags limit: 3 %}
|
|
166
|
-
<span class="badge bg-
|
|
166
|
+
<span class="badge bg-secondary text-body border me-1">{{ tag }}</span>
|
|
167
167
|
{% endfor %}
|
|
168
168
|
{% if include.post.tags.size > 3 %}
|
|
169
|
-
<span class="badge bg-
|
|
169
|
+
<span class="badge bg-secondary text-muted border">+{{ include.post.tags.size | minus: 3 }}</span>
|
|
170
170
|
{% endif %}
|
|
171
171
|
</div>
|
|
172
172
|
{% endif %}
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
<span class="badge bg-secondary me-1">{{ category }}</span>
|
|
252
252
|
{% endfor %}
|
|
253
253
|
{% if page.categories.size > 2 %}
|
|
254
|
-
<span class="badge
|
|
254
|
+
<span class="badge">+{{ page.categories.size | minus: 2 }}</span>
|
|
255
255
|
{% endif %}
|
|
256
256
|
{% endif %}
|
|
257
257
|
</td>
|
|
@@ -261,7 +261,7 @@
|
|
|
261
261
|
<span class="badge bg-outline-primary me-1">#{{ tag }}</span>
|
|
262
262
|
{% endfor %}
|
|
263
263
|
{% if page.tags.size > 3 %}
|
|
264
|
-
<span class="badge
|
|
264
|
+
<span class="badge">+{{ page.tags.size | minus: 3 }}</span>
|
|
265
265
|
{% endif %}
|
|
266
266
|
{% endif %}
|
|
267
267
|
</td>
|
|
@@ -324,7 +324,7 @@
|
|
|
324
324
|
<span class="badge bg-secondary me-1">{{ category }}</span>
|
|
325
325
|
{% endfor %}
|
|
326
326
|
{% if item.categories.size > 2 %}
|
|
327
|
-
<span class="badge
|
|
327
|
+
<span class="badge">+{{ item.categories.size | minus: 2 }}</span>
|
|
328
328
|
{% endif %}
|
|
329
329
|
{% endif %}
|
|
330
330
|
</td>
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
<span class="badge bg-outline-primary me-1">#{{ tag }}</span>
|
|
335
335
|
{% endfor %}
|
|
336
336
|
{% if item.tags.size > 3 %}
|
|
337
|
-
<span class="badge
|
|
337
|
+
<span class="badge">+{{ item.tags.size | minus: 3 }}</span>
|
|
338
338
|
{% endif %}
|
|
339
339
|
{% endif %}
|
|
340
340
|
</td>
|
|
@@ -458,11 +458,6 @@ th:hover .sort-icon {
|
|
|
458
458
|
.sitemap-card .card {
|
|
459
459
|
border-color: var(--bs-border-color-translucent);
|
|
460
460
|
}
|
|
461
|
-
|
|
462
|
-
.badge.bg-light {
|
|
463
|
-
background-color: var(--bs-gray-600) !important;
|
|
464
|
-
color: var(--bs-gray-100) !important;
|
|
465
|
-
}
|
|
466
461
|
}
|
|
467
462
|
</style>
|
|
468
463
|
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
<!-- Top categories with post counts -->
|
|
26
26
|
<!-- ================================================ -->
|
|
27
27
|
<div id="categories" class="card shadow-sm h-100">
|
|
28
|
-
<div class="card-header bg-primary
|
|
28
|
+
<div class="card-header bg-primary-subtle">
|
|
29
29
|
<div class="d-flex align-items-center justify-content-between">
|
|
30
|
-
<h3 class="mb-0 fw-bold">
|
|
30
|
+
<h3 class="mb-0 fw-bold text-primary-emphasis">
|
|
31
31
|
<i class="bi bi-folder2-open me-2"></i> Top Categories
|
|
32
32
|
</h3>
|
|
33
|
-
<span class="badge bg-
|
|
33
|
+
<span class="badge bg-primary">
|
|
34
34
|
{{ site.data.content_statistics.overview.total_categories | default: 0 }}
|
|
35
35
|
</span>
|
|
36
36
|
</div>
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
|
|
73
73
|
<!-- Show More Button if there are more categories -->
|
|
74
74
|
{% if site.data.content_statistics.categories.size > 15 %}
|
|
75
|
-
<div class="card-footer
|
|
75
|
+
<div class="card-footer text-center">
|
|
76
76
|
<button class="btn btn-outline-primary btn-sm"
|
|
77
77
|
onclick="toggleAllCategories(this)">
|
|
78
78
|
<i class="bi bi-chevron-down"></i>
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
|
|
96
96
|
<!-- Categories Summary Footer -->
|
|
97
97
|
{% if site.data.content_statistics.categories and site.data.content_statistics.categories.size > 0 %}
|
|
98
|
-
<div class="card-footer
|
|
98
|
+
<div class="card-footer">
|
|
99
99
|
<div class="row text-center">
|
|
100
100
|
<div class="col-4">
|
|
101
101
|
<strong class="text-primary">{{ site.data.content_statistics.overview.total_categories | default: 0 }}</strong>
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
<div class="col-12">
|
|
29
29
|
<div class="text-center mb-4">
|
|
30
30
|
<!-- Header Icon with Bootstrap classes -->
|
|
31
|
-
<div class="d-inline-flex align-items-center justify-content-center bg-primary
|
|
32
|
-
<i class="bi bi-graph-up fs-1 text-
|
|
31
|
+
<div class="d-inline-flex align-items-center justify-content-center bg-primary-subtle rounded-circle p-4 mb-4 shadow-lg stats-header-icon">
|
|
32
|
+
<i class="bi bi-graph-up fs-1 text-primary stats-icon-rotate"></i>
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
35
|
<!-- Title with Bootstrap typography -->
|
|
@@ -38,14 +38,14 @@
|
|
|
38
38
|
</h1>
|
|
39
39
|
|
|
40
40
|
<!-- Description with Bootstrap lead class -->
|
|
41
|
-
<p class="lead
|
|
41
|
+
<p class="lead mb-4 fs-4">
|
|
42
42
|
{{ page.description | default: "Comprehensive analytics and insights from the knowledge base" }}
|
|
43
43
|
</p>
|
|
44
44
|
</div>
|
|
45
45
|
|
|
46
46
|
<!-- Last Updated Information using Bootstrap alerts -->
|
|
47
47
|
{% if site.data.content_statistics and site.data.content_statistics.generated_at %}
|
|
48
|
-
<div class="alert alert-info
|
|
48
|
+
<div class="alert alert-info shadow-sm d-flex align-items-center justify-content-between" role="alert">
|
|
49
49
|
<div class="d-flex align-items-center">
|
|
50
50
|
<i class="bi bi-clock me-3 fs-4"></i>
|
|
51
51
|
<span class="fw-medium">
|
|
@@ -59,12 +59,12 @@
|
|
|
59
59
|
</button>
|
|
60
60
|
</div>
|
|
61
61
|
{% else %}
|
|
62
|
-
<div class="alert alert-warning
|
|
62
|
+
<div class="alert alert-warning shadow-sm d-flex align-items-center justify-content-between" role="alert">
|
|
63
63
|
<div class="d-flex align-items-center">
|
|
64
64
|
<i class="bi bi-exclamation-triangle me-3 fs-4"></i>
|
|
65
65
|
<span class="fw-medium">
|
|
66
66
|
<strong>Statistics not yet generated.</strong>
|
|
67
|
-
Run <code class="bg-
|
|
67
|
+
Run <code class="bg-body-secondary px-2 py-1 rounded">ruby _data/generate_statistics.rb</code> to create statistics.
|
|
68
68
|
</span>
|
|
69
69
|
</div>
|
|
70
70
|
<button class="btn btn-outline-warning btn-sm" onclick="window.location.reload()">
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
<div class="col-12">
|
|
85
85
|
<!-- Bootstrap breadcrumb -->
|
|
86
86
|
<nav aria-label="Statistics navigation">
|
|
87
|
-
<ol class="breadcrumb
|
|
87
|
+
<ol class="breadcrumb p-3 rounded shadow-sm">
|
|
88
88
|
<li class="breadcrumb-item">
|
|
89
89
|
<a href="{{ '/' | relative_url }}" class="text-decoration-none">
|
|
90
90
|
<i class="bi bi-house me-1"></i> Home
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
<div id="metrics" class="row mb-5">
|
|
28
28
|
<div class="col-12">
|
|
29
29
|
<div class="card shadow-sm">
|
|
30
|
-
<div class="card-header bg-info
|
|
31
|
-
<h3 class="mb-0 fw-bold">
|
|
30
|
+
<div class="card-header bg-info-subtle">
|
|
31
|
+
<h3 class="mb-0 fw-bold text-info-emphasis">
|
|
32
32
|
<i class="bi bi-info-circle me-2"></i> Quick Facts & Insights
|
|
33
33
|
</h3>
|
|
34
34
|
</div>
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
<!-- Content Overview Column -->
|
|
40
40
|
<div class="col-md-4">
|
|
41
|
-
<div class="h-100 p-3 bg-
|
|
41
|
+
<div class="h-100 p-3 bg-body-secondary rounded">
|
|
42
42
|
<h5 class="text-primary mb-3">
|
|
43
43
|
<i class="bi bi-file-text me-2"></i> Content Overview
|
|
44
44
|
</h5>
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
<!-- Top Performers Column -->
|
|
71
71
|
<div class="col-md-4">
|
|
72
|
-
<div class="h-100 p-3 bg-
|
|
72
|
+
<div class="h-100 p-3 bg-body-secondary rounded">
|
|
73
73
|
<h5 class="text-success mb-3">
|
|
74
74
|
<i class="bi bi-trophy me-2"></i> Top Performers
|
|
75
75
|
</h5>
|
|
@@ -119,8 +119,8 @@
|
|
|
119
119
|
|
|
120
120
|
<!-- Data Health Column -->
|
|
121
121
|
<div class="col-md-4">
|
|
122
|
-
<div class="h-100 p-3 bg-
|
|
123
|
-
<h5 class="text-warning mb-3">
|
|
122
|
+
<div class="h-100 p-3 bg-body-secondary rounded">
|
|
123
|
+
<h5 class="text-warning-emphasis mb-3">
|
|
124
124
|
<i class="bi bi-heart-pulse me-2"></i> Data Health
|
|
125
125
|
</h5>
|
|
126
126
|
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
</div>
|
|
188
188
|
|
|
189
189
|
<!-- Action Buttons Footer -->
|
|
190
|
-
<div class="card-footer
|
|
190
|
+
<div class="card-footer text-center">
|
|
191
191
|
<div class="btn-group" role="group">
|
|
192
192
|
<button type="button" class="btn btn-outline-primary" onclick="window.print()">
|
|
193
193
|
<i class="bi bi-printer"></i> Print Report
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
<div class="modal fade" id="helpModal" tabindex="-1" aria-labelledby="helpModalLabel" aria-hidden="true">
|
|
212
212
|
<div class="modal-dialog">
|
|
213
213
|
<div class="modal-content">
|
|
214
|
-
<div class="modal-header">
|
|
214
|
+
<div class="modal-header bg-body border-bottom">
|
|
215
215
|
<h5 class="modal-title" id="helpModalLabel">
|
|
216
216
|
<i class="bi bi-question-circle"></i> Statistics Help
|
|
217
217
|
</h5>
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
<div class="col-lg-8">
|
|
28
28
|
|
|
29
29
|
<!-- Main Alert -->
|
|
30
|
-
<div class="alert alert-warning
|
|
30
|
+
<div class="alert alert-warning shadow-sm" role="alert">
|
|
31
31
|
<div class="text-center py-4">
|
|
32
|
-
<i class="bi bi-exclamation-triangle display-1 text-warning mb-4"></i>
|
|
32
|
+
<i class="bi bi-exclamation-triangle display-1 text-warning-emphasis mb-4"></i>
|
|
33
33
|
<h2 class="alert-heading mb-3">No Statistics Available</h2>
|
|
34
34
|
<p class="lead mb-4">
|
|
35
35
|
Statistics haven't been generated yet. Follow the steps below to create comprehensive analytics for your site.
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
|
|
40
40
|
<!-- Instructions Card -->
|
|
41
41
|
<div class="card shadow-sm mb-4">
|
|
42
|
-
<div class="card-header bg-primary
|
|
43
|
-
<h4 class="mb-0">
|
|
42
|
+
<div class="card-header bg-primary-subtle">
|
|
43
|
+
<h4 class="mb-0 text-primary-emphasis">
|
|
44
44
|
<i class="bi bi-gear me-2"></i> How to Generate Statistics
|
|
45
45
|
</h4>
|
|
46
46
|
</div>
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
<i class="bi bi-1-circle me-2"></i> Run Generator Script
|
|
52
52
|
</h5>
|
|
53
53
|
<p class="mb-3">Execute the statistics generation script from your site's root directory:</p>
|
|
54
|
-
<div class="bg-
|
|
54
|
+
<div class="bg-body-secondary border p-3 rounded mb-3">
|
|
55
55
|
<code>ruby _data/generate_statistics.rb</code>
|
|
56
56
|
</div>
|
|
57
57
|
<p class="text-muted small">
|
|
@@ -79,8 +79,8 @@
|
|
|
79
79
|
|
|
80
80
|
<!-- Alternative Setup Information -->
|
|
81
81
|
<div class="card shadow-sm mb-4">
|
|
82
|
-
<div class="card-header bg-info
|
|
83
|
-
<h4 class="mb-0">
|
|
82
|
+
<div class="card-header bg-info-subtle">
|
|
83
|
+
<h4 class="mb-0 text-info-emphasis">
|
|
84
84
|
<i class="bi bi-info-circle me-2"></i> What You'll See
|
|
85
85
|
</h4>
|
|
86
86
|
</div>
|
|
@@ -113,8 +113,8 @@
|
|
|
113
113
|
|
|
114
114
|
<!-- Troubleshooting -->
|
|
115
115
|
<div class="card shadow-sm">
|
|
116
|
-
<div class="card-header bg-secondary
|
|
117
|
-
<h4 class="mb-0">
|
|
116
|
+
<div class="card-header bg-secondary-subtle">
|
|
117
|
+
<h4 class="mb-0 text-secondary-emphasis">
|
|
118
118
|
<i class="bi bi-tools me-2"></i> Troubleshooting
|
|
119
119
|
</h4>
|
|
120
120
|
</div>
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
|
|
42
42
|
<!-- Total Posts Card -->
|
|
43
43
|
<div class="col-lg-3 col-md-6">
|
|
44
|
-
<div class="card h-100
|
|
44
|
+
<div class="card h-100 shadow-sm stats-card">
|
|
45
45
|
<div class="card-body text-center p-4">
|
|
46
46
|
<div class="mb-3">
|
|
47
47
|
<i class="bi bi-file-text display-3 text-primary"></i>
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
|
|
61
61
|
<!-- Total Categories Card -->
|
|
62
62
|
<div class="col-lg-3 col-md-6">
|
|
63
|
-
<div class="card h-100
|
|
63
|
+
<div class="card h-100 shadow-sm stats-card">
|
|
64
64
|
<div class="card-body text-center p-4">
|
|
65
65
|
<div class="mb-3">
|
|
66
66
|
<i class="bi bi-folder display-3 text-success"></i>
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
|
|
80
80
|
<!-- Total Tags Card -->
|
|
81
81
|
<div class="col-lg-3 col-md-6">
|
|
82
|
-
<div class="card h-100
|
|
82
|
+
<div class="card h-100 shadow-sm stats-card">
|
|
83
83
|
<div class="card-body text-center p-4">
|
|
84
84
|
<div class="mb-3">
|
|
85
85
|
<i class="bi bi-tags display-3 text-info"></i>
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
|
|
99
99
|
<!-- Total Words Card -->
|
|
100
100
|
<div class="col-lg-3 col-md-6">
|
|
101
|
-
<div class="card h-100
|
|
101
|
+
<div class="card h-100 shadow-sm stats-card">
|
|
102
102
|
<div class="card-body text-center p-4">
|
|
103
103
|
<div class="mb-3">
|
|
104
104
|
<i class="bi bi-chat-text display-3 text-info"></i>
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
<!-- Top tags with usage counts -->
|
|
26
26
|
<!-- ================================================ -->
|
|
27
27
|
<div id="tags" class="card shadow-sm h-100">
|
|
28
|
-
<div class="card-header bg-success
|
|
28
|
+
<div class="card-header bg-success-subtle">
|
|
29
29
|
<div class="d-flex align-items-center justify-content-between">
|
|
30
|
-
<h3 class="mb-0 fw-bold">
|
|
30
|
+
<h3 class="mb-0 fw-bold text-success-emphasis">
|
|
31
31
|
<i class="bi bi-tags me-2"></i> Top Tags
|
|
32
32
|
</h3>
|
|
33
|
-
<span class="badge bg-
|
|
33
|
+
<span class="badge bg-success">
|
|
34
34
|
{{ site.data.content_statistics.overview.total_tags | default: 0 }}
|
|
35
35
|
</span>
|
|
36
36
|
</div>
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
</div>
|
|
72
72
|
|
|
73
73
|
<!-- Tag Cloud Section -->
|
|
74
|
-
<div class="card-footer
|
|
74
|
+
<div class="card-footer">
|
|
75
75
|
<h6 class="mb-3 fw-bold">
|
|
76
76
|
<i class="bi bi-cloud"></i> Tag Cloud
|
|
77
77
|
</h6>
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
{% assign tag_class = "fs-sm" %}
|
|
94
94
|
{% endif %}
|
|
95
95
|
|
|
96
|
-
<span class="badge bg-
|
|
96
|
+
<span class="badge bg-success-subtle text-success-emphasis {{ tag_class }}"
|
|
97
97
|
data-bs-toggle="tooltip"
|
|
98
98
|
title="{{ tag[1] }} posts">
|
|
99
99
|
{{ tag[0] }}
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
|
|
117
117
|
<!-- Tags Summary Footer -->
|
|
118
118
|
{% if site.data.content_statistics.tags and site.data.content_statistics.tags.size > 0 %}
|
|
119
|
-
<div class="card-footer
|
|
119
|
+
<div class="card-footer">
|
|
120
120
|
<div class="row text-center">
|
|
121
121
|
<div class="col-4">
|
|
122
122
|
<strong class="text-success">{{ site.data.content_statistics.overview.total_tags | default: 0 }}</strong>
|
data/_layouts/blog.html
CHANGED
|
@@ -407,7 +407,7 @@ source: "https://getbootstrap.com/docs/5.3/examples/blog/#"
|
|
|
407
407
|
<a href="{{ '/archives/' | relative_url }}#{{ month.name | slugify }}-{{ year.name }}"
|
|
408
408
|
class="text-decoration-none">
|
|
409
409
|
{{ month.name }}
|
|
410
|
-
<span class="badge bg-
|
|
410
|
+
<span class="badge bg-secondary text-body">{{ month.items.size }}</span>
|
|
411
411
|
</a>
|
|
412
412
|
</li>
|
|
413
413
|
{% endfor %}
|
data/_layouts/landing.html
CHANGED
|
@@ -69,7 +69,7 @@ layout: root
|
|
|
69
69
|
{% if page.hero_image %}
|
|
70
70
|
<img src="{{ page.hero_image }}" alt="{{ page.title }}" class="img-fluid rounded shadow-lg">
|
|
71
71
|
{% else %}
|
|
72
|
-
<div class="bg-
|
|
72
|
+
<div class="bg-secondary rounded p-5 text-body">
|
|
73
73
|
<i class="bi bi-code-square display-1"></i>
|
|
74
74
|
<p class="mt-3 mb-0">Jekyll Theme</p>
|
|
75
75
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
layout:
|
|
2
|
+
layout: root
|
|
3
3
|
---
|
|
4
4
|
<!--
|
|
5
5
|
===================================================================
|
|
@@ -8,9 +8,9 @@ layout: default
|
|
|
8
8
|
|
|
9
9
|
File: sitemap-collection.html
|
|
10
10
|
Path: _layouts/sitemap-collection.html
|
|
11
|
-
Inherits:
|
|
11
|
+
Inherits: root.html
|
|
12
12
|
Purpose: Unified layout combining collection display with site statistics
|
|
13
|
-
and comprehensive site structure overview
|
|
13
|
+
and comprehensive site structure overview (full-width, no sidebars)
|
|
14
14
|
|
|
15
15
|
Features:
|
|
16
16
|
- Complete site overview with statistics
|
|
@@ -419,29 +419,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
|
|
419
419
|
});
|
|
420
420
|
});
|
|
421
421
|
|
|
422
|
-
// Add fade-in animation to cards
|
|
423
|
-
const observerOptions = {
|
|
424
|
-
threshold: 0.1,
|
|
425
|
-
rootMargin: '0px 0px -50px 0px'
|
|
426
|
-
};
|
|
427
|
-
|
|
428
|
-
const observer = new IntersectionObserver(function(entries) {
|
|
429
|
-
entries.forEach(entry => {
|
|
430
|
-
if (entry.isIntersecting) {
|
|
431
|
-
entry.target.style.opacity = '1';
|
|
432
|
-
entry.target.style.transform = 'translateY(0)';
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
}, observerOptions);
|
|
436
|
-
|
|
437
|
-
// Observe all cards for animation
|
|
438
|
-
document.querySelectorAll('.card').forEach(card => {
|
|
439
|
-
card.style.opacity = '0';
|
|
440
|
-
card.style.transform = 'translateY(20px)';
|
|
441
|
-
card.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
|
|
442
|
-
observer.observe(card);
|
|
443
|
-
});
|
|
444
|
-
|
|
445
422
|
// Add click tracking for analytics (optional)
|
|
446
423
|
document.querySelectorAll('a[href]').forEach(link => {
|
|
447
424
|
link.addEventListener('click', function() {
|