helldivers-theme 1.3.0 → 1.3.1
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/_sass/_components.scss +87 -12
- data/_sass/_layout.scss +40 -23
- data/assets/img/hubs/space-deck.jpg +0 -0
- data/assets/img/leaders/daggeractual.jpg +0 -0
- data/assets/img/logos/space-deck.jpg +0 -0
- data/assets/img/stratagems/space-deck.jpg +0 -0
- data/assets/js/profile-modal.js +70 -51
- data/index.html +110 -4
- metadata +5 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5b5bda554e152f29f47be7aea6d2a941964831975adf96c27639e6d4371872c6
|
|
4
|
+
data.tar.gz: f73c87d6373f08b18ba26dd66709b372374d01b09b6a4fb850d23b89768f7adf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7619f455b07e1df748a5e85eba6b49f9b64808f97bca9ce1de1e5c7de531a9c4dbb70ca8dc47ffe090dae9c600c82a04b76396946d10074b98f69f7b6996e41d
|
|
7
|
+
data.tar.gz: 0053a94320a1a7e50383dbcb7bf9f642cc705e5c4b856cef546ea9c117bb165fe2fec3e2e8776f16ac3583fd8d91daf5ca0465b5038ca4cd5c277214431b51d3
|
data/_sass/_components.scss
CHANGED
|
@@ -362,17 +362,36 @@
|
|
|
362
362
|
}
|
|
363
363
|
|
|
364
364
|
.medal-badge {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
365
|
+
display: inline-block;
|
|
366
|
+
|
|
367
|
+
// TEXT STYLING
|
|
368
|
+
color: #000; // Black text for readability on gold
|
|
369
|
+
font-family: var(--font-head); // Your sci-fi header font
|
|
370
|
+
font-size: 0.75rem;
|
|
371
|
+
font-weight: bold;
|
|
372
|
+
text-transform: uppercase;
|
|
373
|
+
letter-spacing: 0.5px;
|
|
374
|
+
text-align: center;
|
|
375
|
+
background: linear-gradient(135deg, $hd-gold, #b8860b); // Gold gradient
|
|
376
|
+
padding: 6px 10px;
|
|
377
|
+
margin: 4px;
|
|
378
|
+
border-radius: 2px;
|
|
379
|
+
|
|
380
|
+
// BORDER & GLOW
|
|
381
|
+
border: 1px solid #fff; // White border as requested
|
|
382
|
+
box-shadow: 0 0 8px rgba(255, 215, 0, 0.5); // Gold glow
|
|
383
|
+
|
|
384
|
+
// SCI-FI SHAPE (Optional angled corners)
|
|
385
|
+
clip-path: polygon(10% 0, 100% 0, 100% 70%, 90% 100%, 0 100%, 0 30%);
|
|
386
|
+
|
|
387
|
+
// HOVER EFFECT
|
|
388
|
+
transition: all 0.3s ease;
|
|
389
|
+
&:hover {
|
|
390
|
+
transform: translateY(-2px);
|
|
391
|
+
box-shadow: 0 0 15px rgba(255, 215, 0, 0.8);
|
|
392
|
+
filter: brightness(1.1);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
376
395
|
}
|
|
377
396
|
|
|
378
397
|
.modal-footer {
|
|
@@ -572,6 +591,62 @@
|
|
|
572
591
|
&:hover { transform: none; background: #2a2a2a; box-shadow: none; border-color: #444; }
|
|
573
592
|
}
|
|
574
593
|
|
|
594
|
+
// =========================================
|
|
595
|
+
// HUB PAGE & HONEYCOMB GRID
|
|
596
|
+
// =========================================
|
|
597
|
+
|
|
598
|
+
.hub-container {
|
|
599
|
+
width: 100%; max-width: 1000px; margin: 0 auto;
|
|
600
|
+
display: flex; flex-direction: column; align-items: center; padding: 20px;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
.honeycomb-grid {
|
|
604
|
+
display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;
|
|
605
|
+
justify-items: center; align-items: center; margin-top: 40px;
|
|
606
|
+
@media (max-width: 768px) { grid-template-columns: 1fr; gap: 40px; }
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
.hub-node {
|
|
610
|
+
cursor: pointer; transition: transform 0.3s ease;
|
|
611
|
+
&:hover { transform: scale(1.05); .hub-octagon { box-shadow: 0 0 25px var(--hd-cyan); border-color: var(--hd-cyan); } }
|
|
612
|
+
@media (min-width: 769px) {
|
|
613
|
+
&:nth-child(1) { transform: translateY(40px); }
|
|
614
|
+
&:nth-child(2) { transform: translateY(-20px); z-index: 2; }
|
|
615
|
+
&:nth-child(3) { transform: translateY(40px); }
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
.hub-octagon {
|
|
620
|
+
width: 180px; height: 180px; position: relative;
|
|
621
|
+
border: 3px solid var(--hd-gold); background: rgba(0,0,0,0.6);
|
|
622
|
+
clip-path: polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%);
|
|
623
|
+
overflow: hidden; transition: all 0.3s ease;
|
|
624
|
+
img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(40%); transition: 0.3s; }
|
|
625
|
+
&:hover img { filter: grayscale(0%); }
|
|
626
|
+
.hub-overlay {
|
|
627
|
+
position: absolute; bottom: 0; left: 0; width: 100%;
|
|
628
|
+
background: linear-gradient(to top, rgba(0,0,0,0.9), transparent);
|
|
629
|
+
padding: 10px; text-align: center;
|
|
630
|
+
.hub-label { font-family: var(--font-head); font-size: 0.8rem; color: var(--hd-cyan); text-transform: uppercase; }
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
.launch-pad-section {
|
|
635
|
+
margin-top: 25px; padding: 20px;
|
|
636
|
+
background: rgba(0, 240, 255, 0.03); border: 1px dashed rgba(0, 240, 255, 0.3);
|
|
637
|
+
text-align: center;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
.launch-btn {
|
|
641
|
+
display: flex; justify-content: center; align-items: center; gap: 10px;
|
|
642
|
+
width: 100%; padding: 15px; background: #000; color: #fff;
|
|
643
|
+
text-decoration: none; text-transform: uppercase; font-family: var(--font-head);
|
|
644
|
+
clip-path: polygon(5% 0, 100% 0, 100% 70%, 95% 100%, 0 100%, 0 30%);
|
|
645
|
+
border: 2px solid #333; transition: 0.3s;
|
|
646
|
+
&:hover { background: #111; transform: translateY(-3px); filter: brightness(1.2); }
|
|
647
|
+
.btn-icon { font-size: 1.4rem; }
|
|
648
|
+
}
|
|
649
|
+
|
|
575
650
|
// =========================================
|
|
576
651
|
// 3. INTEL PAGE STYLES (DASHBOARD LAYOUT)
|
|
577
652
|
// =========================================
|
|
@@ -1097,4 +1172,4 @@
|
|
|
1097
1172
|
resize: vertical;
|
|
1098
1173
|
min-height: 120px;
|
|
1099
1174
|
}
|
|
1100
|
-
}
|
|
1175
|
+
}
|
data/_sass/_layout.scss
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// _sass/_layout.scss
|
|
2
|
-
|
|
3
1
|
// =========================================
|
|
4
2
|
// 1. MAIN WRAPPER & HEADER
|
|
5
3
|
// =========================================
|
|
@@ -176,17 +174,19 @@
|
|
|
176
174
|
&:has(> .enlist-container),
|
|
177
175
|
&:has(> .intel-container),
|
|
178
176
|
&:has(> .comms-container),
|
|
179
|
-
&:has(> .watch-container)
|
|
177
|
+
&:has(> .watch-container),
|
|
178
|
+
&:has(> .hub-container) {
|
|
180
179
|
grid-template-columns: 1fr;
|
|
181
180
|
justify-items: center;
|
|
182
181
|
}
|
|
183
182
|
}
|
|
184
183
|
|
|
185
184
|
// Force specific containers to span full width
|
|
186
|
-
.enlist-container,
|
|
187
|
-
.intel-container,
|
|
188
|
-
.comms-container,
|
|
189
|
-
.watch-container
|
|
185
|
+
.enlist-container,
|
|
186
|
+
.intel-container,
|
|
187
|
+
.comms-container,
|
|
188
|
+
.watch-container,
|
|
189
|
+
.hub-container {
|
|
190
190
|
grid-column: 1 / -1;
|
|
191
191
|
width: 100%;
|
|
192
192
|
max-width: 1200px;
|
|
@@ -225,35 +225,52 @@
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
+
// =========================================
|
|
229
|
+
// MOBILE FIX: HOME PAGE SPECIFIC
|
|
230
|
+
// =========================================
|
|
231
|
+
|
|
228
232
|
@media (max-width: 768px) {
|
|
229
|
-
|
|
233
|
+
|
|
234
|
+
// 1. Force the Main Grid to Single Column
|
|
230
235
|
.terminal-card {
|
|
231
|
-
display:
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
padding: 15px;
|
|
236
|
+
display: flex !important; // Switch from Grid to Flex for better stacking
|
|
237
|
+
flex-direction: column !important;
|
|
238
|
+
width: 100% !important;
|
|
239
|
+
padding: 15px !important;
|
|
235
240
|
}
|
|
236
241
|
|
|
237
|
-
// 2.
|
|
242
|
+
// 2. CRITICAL: Force Sidebar to Full Width
|
|
238
243
|
.sidebar {
|
|
239
|
-
width: 100
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
244
|
+
width: 100% !important; // Override any fixed pixel widths
|
|
245
|
+
max-width: 100% !important; // Prevent stretching
|
|
246
|
+
float: none !important; // Remove floating
|
|
247
|
+
margin-bottom: 25px; // Add space before content area
|
|
248
|
+
border-bottom: 1px solid rgba(0, 240, 255, 0.2); // Optional visual separator
|
|
243
249
|
padding-bottom: 20px;
|
|
244
250
|
}
|
|
245
251
|
|
|
246
|
-
// 3.
|
|
252
|
+
// 3. CRITICAL: Force Content Area to Full Width
|
|
247
253
|
.content-area {
|
|
248
|
-
width: 100
|
|
254
|
+
width: 100% !important;
|
|
255
|
+
max-width: 100% !important;
|
|
256
|
+
float: none !important;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// 4. Fix Internal Panels (RSS, Alerts, Strategems)
|
|
260
|
+
// Ensure nothing inside sidebar/content exceeds screen width
|
|
261
|
+
.panel-box, .alert-marquee, .stratagem-list {
|
|
262
|
+
width: 100% !important;
|
|
263
|
+
max-width: 100% !important;
|
|
264
|
+
box-sizing: border-box; // Ensures padding doesn't break width
|
|
265
|
+
overflow-x: hidden; // Hide anything sticking out
|
|
249
266
|
}
|
|
250
267
|
|
|
251
|
-
//
|
|
268
|
+
// Fix Marquee specifically so it doesn't push width
|
|
252
269
|
.alert-marquee {
|
|
253
|
-
|
|
254
|
-
overflow: hidden;
|
|
270
|
+
height: 40px; // Fixed height prevents expansion
|
|
255
271
|
}
|
|
256
272
|
|
|
273
|
+
|
|
257
274
|
// 5. FIX LEADER CARDS
|
|
258
275
|
.command-grid {
|
|
259
276
|
display: flex;
|
|
@@ -286,7 +303,7 @@
|
|
|
286
303
|
.modal-stats-grid {
|
|
287
304
|
grid-template-columns: 1fr !important; // Stack stats
|
|
288
305
|
}
|
|
289
|
-
|
|
306
|
+
|
|
290
307
|
.modal-image-top {
|
|
291
308
|
width: 120px;
|
|
292
309
|
height: 120px;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/assets/js/profile-modal.js
CHANGED
|
@@ -11,18 +11,17 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
11
11
|
let squadData = [];
|
|
12
12
|
|
|
13
13
|
try {
|
|
14
|
-
// Parse the JSON from the hidden div
|
|
15
14
|
squadData = JSON.parse(dataElement.textContent.trim());
|
|
16
15
|
console.log("✅ Leader data loaded:", squadData);
|
|
17
16
|
} catch (error) {
|
|
18
17
|
console.error("❌ CRITICAL ERROR: Failed to parse leader data.");
|
|
19
18
|
console.error("Raw content causing error:", dataElement.textContent);
|
|
20
19
|
console.error("Error details:", error);
|
|
21
|
-
alert
|
|
20
|
+
// Do not alert here if it's annoying, just log it.
|
|
21
|
+
// If this triggers, the JSON in index.html is broken.
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
// Define Open Function
|
|
26
25
|
window.openLeaderProfile = function(name) {
|
|
27
26
|
console.log("🔍 Searching for:", name);
|
|
28
27
|
const data = squadData.find(l => l.name === name);
|
|
@@ -35,79 +34,99 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
35
34
|
console.log("✅ Found data:", data);
|
|
36
35
|
|
|
37
36
|
// --- 1. Populate Basic Fields ---
|
|
38
|
-
document.getElementById('modal-name')
|
|
39
|
-
document.getElementById('modal-role')
|
|
40
|
-
document.getElementById('modal-img')
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// --- 2. Populate Bio (NEW) ---
|
|
48
|
-
const bioElement = document.getElementById('modal-bio');
|
|
49
|
-
if (bioElement) {
|
|
50
|
-
bioElement.innerText = data.bio || "No service record available.";
|
|
37
|
+
const nameEl = document.getElementById('modal-name');
|
|
38
|
+
const roleEl = document.getElementById('modal-role');
|
|
39
|
+
const imgEl = document.getElementById('modal-img');
|
|
40
|
+
|
|
41
|
+
if(nameEl) nameEl.innerText = data.name;
|
|
42
|
+
if(roleEl) roleEl.innerText = data.role;
|
|
43
|
+
if(imgEl) {
|
|
44
|
+
imgEl.src = data.image;
|
|
45
|
+
imgEl.onerror = () => console.error("❌ Image load failed:", data.image);
|
|
51
46
|
}
|
|
52
|
-
|
|
53
|
-
// ---
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
47
|
+
|
|
48
|
+
// --- 2. Populate Stats ---
|
|
49
|
+
const fields = {
|
|
50
|
+
'modal-primary': data.primary,
|
|
51
|
+
'modal-stratagem': data.stratagem,
|
|
52
|
+
'modal-missions': data.missions,
|
|
53
|
+
'modal-kd': data.kd,
|
|
54
|
+
'modal-specialty': data.specialty,
|
|
55
|
+
'modal-specialty-planet': data.specialty_planet
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
for (const [id, value] of Object.entries(fields)) {
|
|
59
|
+
const el = document.getElementById(id);
|
|
60
|
+
if(el) el.innerText = value || "--";
|
|
65
61
|
}
|
|
66
62
|
|
|
67
|
-
// ---
|
|
68
|
-
const
|
|
69
|
-
|
|
63
|
+
// --- 3. Populate Bio (Single Definition) ---
|
|
64
|
+
const bioEl = document.getElementById('modal-bio');
|
|
65
|
+
if (bioEl) {
|
|
66
|
+
if (data.bio && data.bio.trim() !== "") {
|
|
67
|
+
bioEl.innerText = data.bio;
|
|
68
|
+
console.log("✅ Bio loaded");
|
|
69
|
+
} else {
|
|
70
|
+
bioEl.innerText = "No service record available.";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
70
73
|
|
|
71
|
-
//
|
|
72
|
-
|
|
74
|
+
// --- 4. Populate Quote ---
|
|
75
|
+
const quoteEl = document.getElementById('modal-quote');
|
|
76
|
+
if(quoteEl) {
|
|
77
|
+
quoteEl.innerText = data.quote ? `"${data.quote}"` : "No recorded statement.";
|
|
78
|
+
}
|
|
73
79
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if
|
|
80
|
+
// --- 5. Populate Medals ---
|
|
81
|
+
const medalsContainer = document.getElementById('modal-medals');
|
|
82
|
+
if(medalsContainer) {
|
|
83
|
+
medalsContainer.innerHTML = '';
|
|
84
|
+
if(data.medals && Array.isArray(data.medals) && data.medals.length > 0) {
|
|
85
|
+
data.medals.forEach(medal => {
|
|
86
|
+
const badge = document.createElement('span');
|
|
87
|
+
badge.className = 'medal-badge';
|
|
88
|
+
badge.innerText = medal;
|
|
89
|
+
medalsContainer.appendChild(badge);
|
|
90
|
+
});
|
|
91
|
+
} else {
|
|
92
|
+
medalsContainer.innerHTML = '<span style="color:#666; font-style:italic;">No decorations.</span>';
|
|
93
|
+
}
|
|
94
|
+
}
|
|
77
95
|
|
|
78
|
-
//
|
|
79
|
-
|
|
96
|
+
// --- 6. Show Modal ---
|
|
97
|
+
const modal = document.getElementById('leader-modal');
|
|
98
|
+
if(modal) {
|
|
99
|
+
modal.style.display = 'flex';
|
|
100
|
+
void modal.offsetWidth;
|
|
101
|
+
modal.style.opacity = '1';
|
|
102
|
+
modal.querySelector('.modal-terminal').style.transform = 'scale(1)';
|
|
103
|
+
if (typeof SFX !== 'undefined') SFX.playOpen();
|
|
104
|
+
document.body.style.overflow = 'hidden';
|
|
105
|
+
}
|
|
80
106
|
};
|
|
81
107
|
|
|
82
|
-
// Define Close Function
|
|
83
108
|
window.closeLeaderProfile = function(event) {
|
|
84
|
-
// Only close if clicking the overlay background or the X button
|
|
85
109
|
if (event.target.id === 'leader-modal' || event.target.classList.contains('modal-close')) {
|
|
86
110
|
const modal = document.getElementById('leader-modal');
|
|
111
|
+
if(!modal) return;
|
|
87
112
|
|
|
88
|
-
// Fade out
|
|
89
113
|
modal.style.opacity = '0';
|
|
90
114
|
modal.querySelector('.modal-terminal').style.transform = 'scale(0.9)';
|
|
91
115
|
if (typeof SFX !== 'undefined') SFX.playClose();
|
|
92
116
|
|
|
93
|
-
|
|
94
|
-
// Wait for transition to finish before hiding display
|
|
95
117
|
setTimeout(() => {
|
|
96
118
|
modal.style.display = 'none';
|
|
97
|
-
document.body.style.overflow = 'auto';
|
|
98
|
-
|
|
99
|
-
}, 300); // Must match CSS transition time
|
|
119
|
+
document.body.style.overflow = 'auto';
|
|
120
|
+
}, 300);
|
|
100
121
|
}
|
|
101
122
|
};
|
|
102
123
|
|
|
103
|
-
// Escape Key Listener
|
|
104
124
|
document.addEventListener('keydown', (e) => {
|
|
105
125
|
if (e.key === "Escape") {
|
|
106
126
|
const modal = document.getElementById('leader-modal');
|
|
107
|
-
if (modal.style.display === 'flex') {
|
|
108
|
-
// Simulate a click on the overlay to trigger close logic
|
|
127
|
+
if (modal && modal.style.display === 'flex') {
|
|
109
128
|
window.closeLeaderProfile({ target: { id: 'leader-modal' } });
|
|
110
129
|
}
|
|
111
130
|
}
|
|
112
131
|
});
|
|
113
|
-
});
|
|
132
|
+
});
|
data/index.html
CHANGED
|
@@ -4,7 +4,7 @@ title: Home
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<aside class="sidebar">
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
<!-- PANEL 1: BROADCAST -->
|
|
9
9
|
<div class="panel-box">
|
|
10
10
|
<h3>// EMERGENCY BROADCAST</h3>
|
|
@@ -49,7 +49,6 @@ title: Home
|
|
|
49
49
|
{% for leader in site.data.squad.leaders %}
|
|
50
50
|
<div class="leader-card">
|
|
51
51
|
<div class="octagon-mask">
|
|
52
|
-
<!-- Checks if image exists, otherwise uses a placeholder -->
|
|
53
52
|
{% if leader.image contains 'http' %}
|
|
54
53
|
<img src="{{ leader.image }}" alt="{{ leader.name }}">
|
|
55
54
|
{% else %}
|
|
@@ -57,10 +56,117 @@ title: Home
|
|
|
57
56
|
{% endif %}
|
|
58
57
|
</div>
|
|
59
58
|
<div class="leader-info">
|
|
60
|
-
|
|
59
|
+
<!-- Added onclick and style for cursor -->
|
|
60
|
+
<h4 onclick="openLeaderProfile('{{ leader.name | escape }}')"
|
|
61
|
+
style="cursor: pointer; transition: color 0.3s;"
|
|
62
|
+
onmouseover="this.style.color='var(--hd-gold)'"
|
|
63
|
+
onmouseout="this.style.color='var(--hd-white)'">
|
|
64
|
+
{{ leader.name }}
|
|
65
|
+
</h4>
|
|
61
66
|
<span>{{ leader.role }}</span>
|
|
62
67
|
</div>
|
|
63
68
|
</div>
|
|
64
69
|
{% endfor %}
|
|
65
70
|
</div>
|
|
66
|
-
|
|
71
|
+
|
|
72
|
+
<!-- HIDDEN DATA STORE FOR JAVASCRIPT -->
|
|
73
|
+
<div id="leader-data-json" style="display: none;">
|
|
74
|
+
[
|
|
75
|
+
{% for leader in site.data.squad.leaders %}
|
|
76
|
+
{
|
|
77
|
+
"name": "{{ leader.name | escape }}",
|
|
78
|
+
"role": "{{ leader.role | escape }}",
|
|
79
|
+
"image": "{% if leader.image contains 'http' %}{{ leader.image }}{% else %}{{ '/assets/img/leaders/' | append: leader.image | relative_url }}{% endif %}",
|
|
80
|
+
"primary": "{{ leader.profile.favorite_primary | escape }}",
|
|
81
|
+
"stratagem": "{{ leader.profile.favorite_stratagem | escape }}",
|
|
82
|
+
"missions": "{{ leader.profile.missions_led | escape }}",
|
|
83
|
+
"kd": "{{ leader.profile.k_d_ratio | escape }}",
|
|
84
|
+
"specialty": "{{ leader.profile.specialty | escape }}",
|
|
85
|
+
"specialty_planet": "{{ leader.profile.specialty_planet | escape }}",
|
|
86
|
+
"bio": "{{ leader.profile.bio | escape }}",
|
|
87
|
+
"quote": "{{ leader.profile.quote | escape }}",
|
|
88
|
+
"medals": {{ leader.profile.medals | jsonify }}
|
|
89
|
+
}{% unless forloop.last %},{% endunless %}
|
|
90
|
+
{% endfor %}
|
|
91
|
+
]
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<!-- LEADER PROFILE MODAL -->
|
|
95
|
+
<div id="leader-modal" class="modal-overlay" onclick="closeLeaderProfile(event)">
|
|
96
|
+
<div class="modal-terminal">
|
|
97
|
+
<button class="modal-close" onclick="closeLeaderProfile(event)">✕</button>
|
|
98
|
+
|
|
99
|
+
<!-- FIXED HEADER -->
|
|
100
|
+
<div class="modal-fixed-header">
|
|
101
|
+
<div class="modal-image-top">
|
|
102
|
+
<img id="modal-img" src="" alt="Leader Portrait">
|
|
103
|
+
<div class="image-glow"></div>
|
|
104
|
+
</div>
|
|
105
|
+
<div class="modal-header">
|
|
106
|
+
<h2 id="modal-name">COMMANDER NAME</h2>
|
|
107
|
+
<span id="modal-role" class="modal-role">ROLE</span>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<!-- SCROLLABLE BODY -->
|
|
112
|
+
<div class="modal-body">
|
|
113
|
+
<div class="modal-stats-grid">
|
|
114
|
+
<div class="stat-box">
|
|
115
|
+
<span class="stat-label">PRIMARY WEAPON</span>
|
|
116
|
+
<span class="stat-value" id="modal-primary">--</span>
|
|
117
|
+
</div>
|
|
118
|
+
<div class="stat-box">
|
|
119
|
+
<span class="stat-label">FAVORITE STRATAGEM</span>
|
|
120
|
+
<span class="stat-value" id="modal-stratagem">--</span>
|
|
121
|
+
</div>
|
|
122
|
+
<div class="stat-box">
|
|
123
|
+
<span class="stat-label">MISSIONS LED</span>
|
|
124
|
+
<span class="stat-value" id="modal-missions">--</span>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="stat-box">
|
|
127
|
+
<span class="stat-label">K/D RATIO</span>
|
|
128
|
+
<span class="stat-value" id="modal-kd">--</span>
|
|
129
|
+
</div>
|
|
130
|
+
<div class="stat-box">
|
|
131
|
+
<span class="stat-label">SPECIALTY</span>
|
|
132
|
+
<span class="stat-value" id="modal-specialty">--</span>
|
|
133
|
+
</div>
|
|
134
|
+
<!-- NEW: SPECIALTY PLANET -->
|
|
135
|
+
<div class="stat-box">
|
|
136
|
+
<span class="stat-label">OPERATIONS</span>
|
|
137
|
+
<span class="stat-value" id="modal-specialty-planet" style="color: var(--hd-cyan);">--</span>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<!-- BIO SECTION -->
|
|
142
|
+
<div class="modal-bio-section">
|
|
143
|
+
<span class="stat-label">// SERVICE NOTES</span>
|
|
144
|
+
<p id="modal-bio" class="bio-text">Loading...</p>
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
<!-- NEW: QUOTE SECTION -->
|
|
148
|
+
<div style="margin-top: 20px; padding: 15px; background: rgba(255, 215, 0, 0.05); border-left: 3px solid var(--hd-gold); text-align: center;">
|
|
149
|
+
<span class="stat-label" style="display:block; margin-bottom: 8px;">// COMMANDER'S QUOTE</span>
|
|
150
|
+
<p id="modal-quote" style="font-family: var(--font-head); font-size: 1.2rem; color: var(--hd-gold); font-style: italic; margin: 0; text-shadow: 0 0 5px rgba(255, 215, 0, 0.3);">
|
|
151
|
+
"..."
|
|
152
|
+
</p>
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<!-- MEDALS SECTION -->
|
|
156
|
+
<div class="modal-medals-section">
|
|
157
|
+
<span class="stat-label">// DECORATIONS</span>
|
|
158
|
+
<div id="modal-medals" class="medals-row">
|
|
159
|
+
<!-- Medals injected here -->
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<div class="modal-footer">
|
|
164
|
+
// END OF FILE // CLEARANCE LEVEL 5
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
<!-- END SCROLLABLE BODY -->
|
|
168
|
+
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
</section>
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: helldivers-theme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- DAR
|
|
@@ -86,6 +86,10 @@ files:
|
|
|
86
86
|
- about.md
|
|
87
87
|
- assets/css/style.scss
|
|
88
88
|
- assets/img/bg/space-deck.jpg
|
|
89
|
+
- assets/img/hubs/space-deck.jpg
|
|
90
|
+
- assets/img/leaders/daggeractual.jpg
|
|
91
|
+
- assets/img/logos/space-deck.jpg
|
|
92
|
+
- assets/img/stratagems/space-deck.jpg
|
|
89
93
|
- assets/js/main.js
|
|
90
94
|
- assets/js/particles.js
|
|
91
95
|
- assets/js/profile-modal.js
|