jekyll-theme-zer0 0.4.0 → 0.5.0
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 +16 -0
- data/README.md +6 -4
- data/_data/content_statistics.yml +401 -0
- data/_data/generate_statistics.rb +275 -0
- data/_data/navigation/home.yml +15 -0
- data/_data/navigation/main.yml +2 -5
- data/_includes/content/sitemap.html +935 -108
- data/_includes/navigation/navbar.html +6 -0
- data/_includes/stats/README.md +273 -0
- data/_includes/stats/stats-categories.html +146 -0
- data/_includes/stats/stats-header.html +123 -0
- data/_includes/stats/stats-metrics.html +243 -0
- data/_includes/stats/stats-no-data.html +180 -0
- data/_includes/stats/stats-overview.html +119 -0
- data/_includes/stats/stats-tags.html +142 -0
- data/_layouts/sitemap-collection.html +500 -0
- data/_layouts/stats.html +178 -0
- data/assets/css/stats.css +392 -0
- metadata +19 -6
data/_layouts/stats.html
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: root
|
|
3
|
+
---
|
|
4
|
+
<!--
|
|
5
|
+
===================================================================
|
|
6
|
+
STATS LAYOUT - Statistics dashboard layout
|
|
7
|
+
===================================================================
|
|
8
|
+
|
|
9
|
+
File: stats.html
|
|
10
|
+
Path: _layouts/stats.html
|
|
11
|
+
Inherits: root.html
|
|
12
|
+
Purpose: Dedicated layout for statistics and analytics dashboards
|
|
13
|
+
|
|
14
|
+
Template Logic:
|
|
15
|
+
- Creates a full-width responsive layout optimized for data visualization
|
|
16
|
+
- Includes specialized components for statistics display
|
|
17
|
+
- Uses card-based layout for metric organization
|
|
18
|
+
- Responsive design that adapts to different screen sizes
|
|
19
|
+
- Integrates with Jekyll data files for dynamic content
|
|
20
|
+
|
|
21
|
+
Layout Structure:
|
|
22
|
+
1. Container wrapper with Bootstrap responsive classes
|
|
23
|
+
2. Page header with title and metadata
|
|
24
|
+
3. Statistics overview cards section
|
|
25
|
+
4. Detailed analytics sections
|
|
26
|
+
5. Interactive components and charts
|
|
27
|
+
|
|
28
|
+
Dependencies:
|
|
29
|
+
- stats/stats-header.html: Page header and navigation
|
|
30
|
+
- stats/stats-overview.html: Overview metrics cards
|
|
31
|
+
- stats/stats-categories.html: Category analysis
|
|
32
|
+
- stats/stats-tags.html: Tag cloud and analysis
|
|
33
|
+
- stats/stats-metrics.html: Additional metrics and facts
|
|
34
|
+
|
|
35
|
+
Bootstrap Classes Used:
|
|
36
|
+
- container-fluid: Full-width container
|
|
37
|
+
- row/col: Grid system for responsive layout
|
|
38
|
+
- card: Card components for metric display
|
|
39
|
+
- badge: Badges for counts and labels
|
|
40
|
+
===================================================================
|
|
41
|
+
-->
|
|
42
|
+
|
|
43
|
+
<!-- ================================================ -->
|
|
44
|
+
<!-- STATS LAYOUT CONTAINER -->
|
|
45
|
+
<!-- Full-width responsive container for dashboard -->
|
|
46
|
+
<!-- ================================================ -->
|
|
47
|
+
<div class="container-fluid py-4">
|
|
48
|
+
|
|
49
|
+
<!-- ================================================ -->
|
|
50
|
+
<!-- STATS HEADER SECTION -->
|
|
51
|
+
<!-- Page title, description, and metadata -->
|
|
52
|
+
<!-- ================================================ -->
|
|
53
|
+
{% include stats/stats-header.html %}
|
|
54
|
+
|
|
55
|
+
<!-- ================================================ -->
|
|
56
|
+
<!-- STATS VALIDATION CHECK -->
|
|
57
|
+
<!-- Verify data availability before rendering -->
|
|
58
|
+
<!-- ================================================ -->
|
|
59
|
+
{% if site.data.content_statistics %}
|
|
60
|
+
|
|
61
|
+
<!-- ================================================ -->
|
|
62
|
+
<!-- OVERVIEW METRICS SECTION -->
|
|
63
|
+
<!-- High-level statistics cards -->
|
|
64
|
+
<!-- ================================================ -->
|
|
65
|
+
{% include stats/stats-overview.html %}
|
|
66
|
+
|
|
67
|
+
<!-- ================================================ -->
|
|
68
|
+
<!-- DETAILED ANALYTICS SECTIONS -->
|
|
69
|
+
<!-- Categories, tags, and metrics breakdown -->
|
|
70
|
+
<!-- ================================================ -->
|
|
71
|
+
<div class="row g-4 mb-5">
|
|
72
|
+
<!-- Categories Analysis -->
|
|
73
|
+
<div class="col-lg-6">
|
|
74
|
+
{% include stats/stats-categories.html %}
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<!-- Tags Analysis -->
|
|
78
|
+
<div class="col-lg-6">
|
|
79
|
+
{% include stats/stats-tags.html %}
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<!-- ================================================ -->
|
|
84
|
+
<!-- ADDITIONAL METRICS SECTION -->
|
|
85
|
+
<!-- Quick facts and summary information -->
|
|
86
|
+
<!-- ================================================ -->
|
|
87
|
+
{% include stats/stats-metrics.html %}
|
|
88
|
+
|
|
89
|
+
{% else %}
|
|
90
|
+
|
|
91
|
+
<!-- ================================================ -->
|
|
92
|
+
<!-- NO DATA AVAILABLE SECTION -->
|
|
93
|
+
<!-- Error state when statistics are not generated -->
|
|
94
|
+
<!-- ================================================ -->
|
|
95
|
+
{% include stats/stats-no-data.html %}
|
|
96
|
+
|
|
97
|
+
{% endif %}
|
|
98
|
+
|
|
99
|
+
<!-- ================================================ -->
|
|
100
|
+
<!-- MAIN CONTENT AREA -->
|
|
101
|
+
<!-- Additional page content below statistics -->
|
|
102
|
+
<!-- ================================================ -->
|
|
103
|
+
{% if content and content != empty %}
|
|
104
|
+
<div class="row mt-5">
|
|
105
|
+
<div class="col-12">
|
|
106
|
+
<div class="card">
|
|
107
|
+
<div class="card-body">
|
|
108
|
+
{{ content }}
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
{% endif %}
|
|
114
|
+
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<!-- ================================================ -->
|
|
118
|
+
<!-- STATS-SPECIFIC JAVASCRIPT -->
|
|
119
|
+
<!-- Initialize charts and interactive components -->
|
|
120
|
+
<!-- ================================================ -->
|
|
121
|
+
<script>
|
|
122
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
123
|
+
// Initialize tooltips for stats elements
|
|
124
|
+
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
|
125
|
+
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
|
126
|
+
return new bootstrap.Tooltip(tooltipTriggerEl);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Add smooth scroll behavior for stats navigation
|
|
130
|
+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
131
|
+
anchor.addEventListener('click', function (e) {
|
|
132
|
+
e.preventDefault();
|
|
133
|
+
const target = document.querySelector(this.getAttribute('href'));
|
|
134
|
+
if (target) {
|
|
135
|
+
target.scrollIntoView({
|
|
136
|
+
behavior: 'smooth'
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Animate progress bars
|
|
143
|
+
setTimeout(function() {
|
|
144
|
+
document.querySelectorAll('.progress-bar').forEach(function(bar) {
|
|
145
|
+
const width = bar.getAttribute('data-width');
|
|
146
|
+
if (width) {
|
|
147
|
+
bar.style.width = width;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}, 500);
|
|
151
|
+
|
|
152
|
+
// Add fade-in animation to cards
|
|
153
|
+
setTimeout(function() {
|
|
154
|
+
document.querySelectorAll('.stats-card').forEach(function(card, index) {
|
|
155
|
+
setTimeout(function() {
|
|
156
|
+
card.classList.add('fade-in');
|
|
157
|
+
}, index * 100);
|
|
158
|
+
});
|
|
159
|
+
}, 200);
|
|
160
|
+
|
|
161
|
+
// Add intersection observer for animations
|
|
162
|
+
if ('IntersectionObserver' in window) {
|
|
163
|
+
const observer = new IntersectionObserver(function(entries) {
|
|
164
|
+
entries.forEach(function(entry) {
|
|
165
|
+
if (entry.isIntersecting) {
|
|
166
|
+
entry.target.classList.add('slide-up');
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}, {
|
|
170
|
+
threshold: 0.1
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
document.querySelectorAll('.card:not(.stats-card)').forEach(function(card) {
|
|
174
|
+
observer.observe(card);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
</script>
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
/*
|
|
2
|
+
===================================================================
|
|
3
|
+
STATISTICS PAGE STYLES - BOOTSTRAP 5 OPTIMIZED
|
|
4
|
+
===================================================================
|
|
5
|
+
|
|
6
|
+
File: stats.css
|
|
7
|
+
Purpose: Custom styles for the statistics dashboard that cannot be
|
|
8
|
+
achieved with Bootstrap 5 utility classes alone.
|
|
9
|
+
|
|
10
|
+
Philosophy: Bootstrap 5 First Approach
|
|
11
|
+
- Use Bootstrap 5 utility classes for all standard styling
|
|
12
|
+
- Custom CSS only for:
|
|
13
|
+
* Animations and transitions
|
|
14
|
+
* Shimmer effects and loading states
|
|
15
|
+
* Complex visual effects not available in Bootstrap
|
|
16
|
+
* Print styles for accessibility
|
|
17
|
+
* Icon animations and custom dimensions
|
|
18
|
+
|
|
19
|
+
Dependencies:
|
|
20
|
+
- Bootstrap 5.3.3 (primary framework)
|
|
21
|
+
- Bootstrap Icons (for iconography)
|
|
22
|
+
|
|
23
|
+
Note: This file should remain minimal. Most styling is handled
|
|
24
|
+
through Bootstrap 5 utility classes in the HTML components.
|
|
25
|
+
===================================================================
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/* ========================================== */
|
|
29
|
+
/* PROGRESS BAR ENHANCEMENTS */
|
|
30
|
+
/* ========================================== */
|
|
31
|
+
|
|
32
|
+
/* Custom progress bar animations */
|
|
33
|
+
.stats-progress {
|
|
34
|
+
height: 1.25rem;
|
|
35
|
+
background-color: var(--bs-gray-200);
|
|
36
|
+
border-radius: 0.5rem;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.stats-progress .progress-bar {
|
|
41
|
+
transition: width 1.5s ease-in-out;
|
|
42
|
+
font-size: 0.875rem;
|
|
43
|
+
font-weight: 600;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Progress bar animation on load */
|
|
47
|
+
.stats-progress-animate .progress-bar {
|
|
48
|
+
animation: progress-fill 2s ease-in-out;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@keyframes progress-fill {
|
|
52
|
+
0% { width: 0% !important; }
|
|
53
|
+
100% { width: var(--progress-width, 0%); }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ========================================== */
|
|
57
|
+
/* TAG CLOUD STYLES */
|
|
58
|
+
/* ========================================== */
|
|
59
|
+
|
|
60
|
+
/* Tag cloud interactive effects */
|
|
61
|
+
.tag-cloud .badge {
|
|
62
|
+
transition: all 0.3s ease;
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
margin: 0.25rem;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.tag-cloud .badge:hover {
|
|
68
|
+
transform: scale(1.1);
|
|
69
|
+
background-color: var(--bs-success) !important;
|
|
70
|
+
color: white !important;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Outline badge style for tags */
|
|
74
|
+
.bg-outline-success {
|
|
75
|
+
background-color: transparent;
|
|
76
|
+
border: 1px solid var(--bs-success);
|
|
77
|
+
color: var(--bs-success);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Tag size variations */
|
|
81
|
+
.tag-cloud .fs-xl { font-size: 1.5rem; }
|
|
82
|
+
.tag-cloud .fs-lg { font-size: 1.25rem; }
|
|
83
|
+
.tag-cloud .fs-md { font-size: 1rem; }
|
|
84
|
+
.tag-cloud .fs-sm { font-size: 0.875rem; }
|
|
85
|
+
|
|
86
|
+
/* ========================================== */
|
|
87
|
+
/* CUSTOM ICON DIMENSIONS & ANIMATIONS */
|
|
88
|
+
/* ========================================== */
|
|
89
|
+
|
|
90
|
+
/* Header icon container - specific dimensions needed */
|
|
91
|
+
.stats-header-icon {
|
|
92
|
+
width: 100px !important;
|
|
93
|
+
height: 100px !important;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Icon rotation animation for visual appeal */
|
|
97
|
+
.stats-icon-rotate {
|
|
98
|
+
animation: gentle-rotate 3s ease-in-out infinite;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@keyframes gentle-rotate {
|
|
102
|
+
0%, 100% { transform: rotate(0deg); }
|
|
103
|
+
50% { transform: rotate(5deg); }
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* ========================================== */
|
|
107
|
+
/* SHIMMER LOADING ANIMATIONS */
|
|
108
|
+
/* ========================================== */
|
|
109
|
+
|
|
110
|
+
/* Shimmer effect for loading placeholders */
|
|
111
|
+
.stats-shimmer {
|
|
112
|
+
background: linear-gradient(90deg,
|
|
113
|
+
var(--bs-gray-200) 25%,
|
|
114
|
+
var(--bs-gray-100) 50%,
|
|
115
|
+
var(--bs-gray-200) 75%
|
|
116
|
+
);
|
|
117
|
+
background-size: 200% 100%;
|
|
118
|
+
animation: shimmer 2s infinite;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@keyframes shimmer {
|
|
122
|
+
0% { background-position: -200% 0; }
|
|
123
|
+
100% { background-position: 200% 0; }
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* ========================================== */
|
|
127
|
+
/* ENHANCED VISUAL EFFECTS */
|
|
128
|
+
/* ========================================== */
|
|
129
|
+
|
|
130
|
+
/* Subtle hover animations for interactive elements */
|
|
131
|
+
.stats-card-hover {
|
|
132
|
+
transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.stats-card-hover:hover {
|
|
136
|
+
transform: translateY(-2px);
|
|
137
|
+
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* Pulse animation for important metrics */
|
|
141
|
+
.stats-pulse {
|
|
142
|
+
animation: subtle-pulse 2s infinite;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@keyframes subtle-pulse {
|
|
146
|
+
0%, 100% { transform: scale(1); }
|
|
147
|
+
50% { transform: scale(1.02); }
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* ========================================== */
|
|
151
|
+
/* RESPONSIVE ENHANCEMENTS */
|
|
152
|
+
/* ========================================== */
|
|
153
|
+
|
|
154
|
+
/* Enhanced mobile spacing for better touch targets */
|
|
155
|
+
@media (max-width: 576px) {
|
|
156
|
+
.stats-mobile-spacing .btn-group {
|
|
157
|
+
gap: 0.5rem !important;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.stats-mobile-spacing .btn {
|
|
161
|
+
min-height: 44px; /* Accessibility touch target */
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* ========================================== */
|
|
166
|
+
/* ACCESSIBILITY ENHANCEMENTS */
|
|
167
|
+
/* ========================================== */
|
|
168
|
+
|
|
169
|
+
/* High contrast mode support */
|
|
170
|
+
@media (prefers-contrast: high) {
|
|
171
|
+
.stats-shimmer {
|
|
172
|
+
background: linear-gradient(90deg,
|
|
173
|
+
var(--bs-gray-600) 25%,
|
|
174
|
+
var(--bs-gray-400) 50%,
|
|
175
|
+
var(--bs-gray-600) 75%
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Reduced motion preference support */
|
|
181
|
+
@media (prefers-reduced-motion: reduce) {
|
|
182
|
+
.stats-icon-rotate,
|
|
183
|
+
.stats-shimmer,
|
|
184
|
+
.stats-pulse,
|
|
185
|
+
.stats-card-hover {
|
|
186
|
+
animation: none !important;
|
|
187
|
+
transition: none !important;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* Focus indicators for keyboard navigation */
|
|
192
|
+
.btn:focus-visible,
|
|
193
|
+
.breadcrumb-item a:focus-visible {
|
|
194
|
+
outline: 2px solid var(--bs-primary) !important;
|
|
195
|
+
outline-offset: 2px !important;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* ========================================== */
|
|
199
|
+
/* PRINT STYLES */
|
|
200
|
+
/* ========================================== */
|
|
201
|
+
|
|
202
|
+
@media print {
|
|
203
|
+
/* Hide interactive elements */
|
|
204
|
+
.btn, .alert .btn {
|
|
205
|
+
display: none !important;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/* Optimize spacing for print */
|
|
209
|
+
.container-fluid {
|
|
210
|
+
max-width: 100% !important;
|
|
211
|
+
padding: 0 !important;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* Ensure proper page breaks */
|
|
215
|
+
.stats-section {
|
|
216
|
+
page-break-inside: avoid;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* Print-friendly colors */
|
|
220
|
+
.bg-primary, .bg-success, .bg-info, .bg-warning {
|
|
221
|
+
-webkit-print-color-adjust: exact !important;
|
|
222
|
+
print-color-adjust: exact !important;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* Typography adjustments for print */
|
|
226
|
+
.display-1, .display-2, .display-3 {
|
|
227
|
+
font-size: 2rem !important;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* Remove shadows and gradients for print clarity */
|
|
231
|
+
.shadow, .shadow-sm, .shadow-lg,
|
|
232
|
+
.bg-gradient {
|
|
233
|
+
box-shadow: none !important;
|
|
234
|
+
background-image: none !important;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* ================================================ */
|
|
239
|
+
/* CUSTOM ANIMATIONS - NOT AVAILABLE IN BOOTSTRAP */
|
|
240
|
+
/* ================================================ */
|
|
241
|
+
|
|
242
|
+
/* Card hover animations */
|
|
243
|
+
@keyframes cardHover {
|
|
244
|
+
from {
|
|
245
|
+
transform: translateY(0) scale(1);
|
|
246
|
+
}
|
|
247
|
+
to {
|
|
248
|
+
transform: translateY(-8px) scale(1.02);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.stats-card-hover:hover {
|
|
253
|
+
animation: cardHover 0.3s ease-out forwards;
|
|
254
|
+
box-shadow: 0 20px 40px rgba(0,0,0,0.15) !important;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* Icon rotation on hover */
|
|
258
|
+
.stats-icon-rotate:hover {
|
|
259
|
+
transform: rotate(10deg) scale(1.1);
|
|
260
|
+
transition: transform 0.3s ease;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/* Progress bar shimmer effect */
|
|
264
|
+
@keyframes shimmer {
|
|
265
|
+
0% {
|
|
266
|
+
background-position: -200px 0;
|
|
267
|
+
}
|
|
268
|
+
100% {
|
|
269
|
+
background-position: calc(200px + 100%) 0;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.progress-shimmer::before {
|
|
274
|
+
content: '';
|
|
275
|
+
position: absolute;
|
|
276
|
+
top: 0;
|
|
277
|
+
left: 0;
|
|
278
|
+
width: 100%;
|
|
279
|
+
height: 100%;
|
|
280
|
+
background: linear-gradient(
|
|
281
|
+
90deg,
|
|
282
|
+
transparent,
|
|
283
|
+
rgba(255, 255, 255, 0.6),
|
|
284
|
+
transparent
|
|
285
|
+
);
|
|
286
|
+
background-size: 200px 100%;
|
|
287
|
+
animation: shimmer 2s infinite;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/* Tag cloud shimmer on hover */
|
|
291
|
+
@keyframes tagShimmer {
|
|
292
|
+
0% { left: -100%; }
|
|
293
|
+
100% { left: 100%; }
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.tag-shimmer {
|
|
297
|
+
position: relative;
|
|
298
|
+
overflow: hidden;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.tag-shimmer::before {
|
|
302
|
+
content: '';
|
|
303
|
+
position: absolute;
|
|
304
|
+
top: 0;
|
|
305
|
+
left: -100%;
|
|
306
|
+
width: 100%;
|
|
307
|
+
height: 100%;
|
|
308
|
+
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent);
|
|
309
|
+
transition: left 0.5s;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.tag-shimmer:hover::before {
|
|
313
|
+
animation: tagShimmer 0.6s ease-out;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* ================================================ */
|
|
317
|
+
/* INTERSECTION OBSERVER ANIMATIONS */
|
|
318
|
+
/* ================================================ */
|
|
319
|
+
|
|
320
|
+
.fade-in-up {
|
|
321
|
+
opacity: 0;
|
|
322
|
+
transform: translateY(30px);
|
|
323
|
+
transition: opacity 0.6s ease, transform 0.6s ease;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.fade-in-up.animate {
|
|
327
|
+
opacity: 1;
|
|
328
|
+
transform: translateY(0);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/* Staggered animation delays */
|
|
332
|
+
.fade-in-up:nth-child(1) { transition-delay: 0.1s; }
|
|
333
|
+
.fade-in-up:nth-child(2) { transition-delay: 0.2s; }
|
|
334
|
+
.fade-in-up:nth-child(3) { transition-delay: 0.3s; }
|
|
335
|
+
.fade-in-up:nth-child(4) { transition-delay: 0.4s; }
|
|
336
|
+
|
|
337
|
+
/* ================================================ */
|
|
338
|
+
/* RESPONSIVE ADJUSTMENTS FOR MOBILE */
|
|
339
|
+
/* Only needed where Bootstrap classes aren't enough */
|
|
340
|
+
/* ================================================ */
|
|
341
|
+
|
|
342
|
+
@media (max-width: 575.98px) {
|
|
343
|
+
/* Ensure cards don't have excessive padding on mobile */
|
|
344
|
+
.stats-mobile-compact {
|
|
345
|
+
padding: 1rem !important;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* Adjust tag cloud spacing for mobile */
|
|
349
|
+
.tag-cloud-mobile .badge {
|
|
350
|
+
margin: 0.2rem 0.3rem !important;
|
|
351
|
+
font-size: 0.75rem !important;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/* ================================================ */
|
|
356
|
+
/* PRINT STYLES */
|
|
357
|
+
/* Optimize for printing - Bootstrap doesn't handle this */
|
|
358
|
+
/* ================================================ */
|
|
359
|
+
@media print {
|
|
360
|
+
.stats-card-hover:hover {
|
|
361
|
+
animation: none !important;
|
|
362
|
+
transform: none !important;
|
|
363
|
+
box-shadow: none !important;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.btn,
|
|
367
|
+
.modal,
|
|
368
|
+
.progress-shimmer::before,
|
|
369
|
+
.tag-shimmer::before {
|
|
370
|
+
display: none !important;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.progress-bar {
|
|
374
|
+
print-color-adjust: exact;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/* ================================================ */
|
|
379
|
+
/* ACCESSIBILITY ENHANCEMENTS */
|
|
380
|
+
/* For users with reduced motion preferences */
|
|
381
|
+
/* ================================================ */
|
|
382
|
+
@media (prefers-reduced-motion: reduce) {
|
|
383
|
+
.stats-card-hover:hover,
|
|
384
|
+
.stats-icon-rotate:hover,
|
|
385
|
+
.fade-in-up,
|
|
386
|
+
.progress-shimmer::before,
|
|
387
|
+
.tag-shimmer::before {
|
|
388
|
+
animation: none !important;
|
|
389
|
+
transition: none !important;
|
|
390
|
+
transform: none !important;
|
|
391
|
+
}
|
|
392
|
+
}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-theme-zer0
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Amr Abdel
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-10-
|
|
11
|
+
date: 2025-10-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|
|
@@ -78,8 +78,11 @@ files:
|
|
|
78
78
|
- LICENSE
|
|
79
79
|
- README.md
|
|
80
80
|
- _data/README.md
|
|
81
|
+
- _data/content_statistics.yml
|
|
82
|
+
- _data/generate_statistics.rb
|
|
81
83
|
- _data/navigation/about.yml
|
|
82
84
|
- _data/navigation/docs.yml
|
|
85
|
+
- _data/navigation/home.yml
|
|
83
86
|
- _data/navigation/main.yml
|
|
84
87
|
- _data/navigation/posts.yml
|
|
85
88
|
- _data/navigation/quickstart.yml
|
|
@@ -116,6 +119,13 @@ files:
|
|
|
116
119
|
- _includes/navigation/sidebar-folders.html
|
|
117
120
|
- _includes/navigation/sidebar-left.html
|
|
118
121
|
- _includes/navigation/sidebar-right.html
|
|
122
|
+
- _includes/stats/README.md
|
|
123
|
+
- _includes/stats/stats-categories.html
|
|
124
|
+
- _includes/stats/stats-header.html
|
|
125
|
+
- _includes/stats/stats-metrics.html
|
|
126
|
+
- _includes/stats/stats-no-data.html
|
|
127
|
+
- _includes/stats/stats-overview.html
|
|
128
|
+
- _includes/stats/stats-tags.html
|
|
119
129
|
- _layouts/README.md
|
|
120
130
|
- _layouts/blog.html
|
|
121
131
|
- _layouts/collection.html
|
|
@@ -125,6 +135,8 @@ files:
|
|
|
125
135
|
- _layouts/journals.html
|
|
126
136
|
- _layouts/landing.html
|
|
127
137
|
- _layouts/root.html
|
|
138
|
+
- _layouts/sitemap-collection.html
|
|
139
|
+
- _layouts/stats.html
|
|
128
140
|
- _sass/custom.scss
|
|
129
141
|
- _sass/it-journey/_docs.scss
|
|
130
142
|
- _sass/it-journey/_syntax.scss
|
|
@@ -134,6 +146,7 @@ files:
|
|
|
134
146
|
- assets/.DS_Store
|
|
135
147
|
- assets/css/custom.css
|
|
136
148
|
- assets/css/main.scss
|
|
149
|
+
- assets/css/stats.css
|
|
137
150
|
- assets/images/favicon_gpt_computer_retro.png
|
|
138
151
|
- assets/images/gravatar-small.png
|
|
139
152
|
- assets/images/gravatar.png
|
|
@@ -165,7 +178,7 @@ metadata:
|
|
|
165
178
|
changelog_uri: https://github.com/bamr87/zer0-mistakes/blob/main/CHANGELOG.md
|
|
166
179
|
documentation_uri: https://github.com/bamr87/zer0-mistakes#readme
|
|
167
180
|
allowed_push_host: https://rubygems.org
|
|
168
|
-
post_install_message:
|
|
181
|
+
post_install_message:
|
|
169
182
|
rdoc_options: []
|
|
170
183
|
require_paths:
|
|
171
184
|
- lib
|
|
@@ -180,8 +193,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
180
193
|
- !ruby/object:Gem::Version
|
|
181
194
|
version: '0'
|
|
182
195
|
requirements: []
|
|
183
|
-
rubygems_version: 3.3.
|
|
184
|
-
signing_key:
|
|
196
|
+
rubygems_version: 3.0.3.1
|
|
197
|
+
signing_key:
|
|
185
198
|
specification_version: 4
|
|
186
199
|
summary: Jekyll theme based on bootstrap and compatible with github pages
|
|
187
200
|
test_files: []
|