/* Filename: script.js */
// ====== VERSION: 2.0 ======
// --- THEME TOGGLE LOGIC ---
const htmlEl = document.documentElement;
const themeIcon = document.getElementById('theme-icon');
const savedTheme = localStorage.getItem('theme') || 'dark';
htmlEl.setAttribute('data-theme', savedTheme);
document.addEventListener('DOMContentLoaded', function() {
updateIcon(savedTheme);
});
function toggleTheme() {
const currentTheme = htmlEl.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
htmlEl.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
updateIcon(newTheme);
}
function updateIcon(theme) {
const icon = document.getElementById('theme-icon');
if (!icon) return;
if (theme === 'light') {
icon.classList.remove('fa-sun');
icon.classList.add('fa-moon');
} else {
icon.classList.remove('fa-moon');
icon.classList.add('fa-sun');
}
}
// --- SIDEBAR TOGGLE ---
function toggleSidebar() {
const sidebar = document.getElementById('sidebar');
const overlay = document.querySelector('.overlay');
if (sidebar && overlay) {
sidebar.classList.toggle('active');
overlay.classList.toggle('active');
}
}
// Close sidebar with Escape key
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const sidebar = document.getElementById('sidebar');
const overlay = document.querySelector('.overlay');
if (sidebar && sidebar.classList.contains('active')) {
sidebar.classList.remove('active');
overlay.classList.remove('active');
}
}
});
// --- LOAD BLOG FEED ---
const RSS_URL = 'https://blog.6ickzone.site/feed';
const API_ENDPOINT = `https://api.rss2json.com/v1/api.json?rss_url=${encodeURIComponent(RSS_URL)}`;
async function loadBlogFeed() {
const container = document.getElementById('blog-feed-container');
if (!container) return;
try {
const response = await fetch(API_ENDPOINT);
const data = await response.json();
if (data.status === 'ok' && data.items && data.items.length > 0) {
container.innerHTML = '';
data.items.slice(0, 6).forEach(item => {
let cleanDesc = item.description.replace(/<[^>]*>?/gm, '');
let excerpt = cleanDesc.substring(0, 90) + '...';
let pubDate = item.pubDate ? item.pubDate.split(' ')[0] : 'Recent';
const card = `
<div class="feed-card">
<div class="card-body">
<div class="card-meta mono">${pubDate}</div>
<h3 class="card-title">${item.title}</h3>
<p class="card-excerpt">${excerpt}</p>
<a href="${item.link}" target="_blank" class="read-more-btn">Read Investigation <i class="fa-solid fa-arrow-right-long"></i></a>
</div>
</div>
`;
container.innerHTML += card;
});
} else {
container.innerHTML = '<p style="color:var(--text-muted); text-align:center; padding:20px;">No intelligence data available.</p>';
}
} catch (error) {
console.error('Feed Error:', error);
container.innerHTML = `
<div class="feed-card" style="padding:20px; border-color:rgba(248, 81, 73, 0.4)">
<h3 class="card-title" style="color:#ff7b72">Connection Failed</h3>
<p class="card-excerpt">Could not retrieve secure feed.</p>
<a href="https://blog.6ickzone.site" class="read-more-btn">Manual Access</a>
</div>
`;
}
}
// --- ROCKET LOADER (External Links) ---
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (link && link.href) {
const targetUrl = link.href;
if (targetUrl.startsWith('#') ||
targetUrl.startsWith('javascript:') ||
targetUrl.startsWith('mailto:')) {
return;
}
const isExternal = targetUrl.startsWith('http') &&
!targetUrl.includes(window.location.host);
if (e.ctrlKey || e.metaKey) return;
if (isExternal) {
e.preventDefault();
startLaunchSequence(targetUrl);
}
}
});
function startLaunchSequence(url) {
const overlay = document.getElementById('loader-overlay');
const countdownEl = document.getElementById('countdown');
const urlDisplay = document.getElementById('dest-url');
const rocketWrapper = document.querySelector('.rocket-wrapper');
try {
const parsedUrl = new URL(url);
urlDisplay.innerText = parsedUrl.hostname;
} catch(err) {
urlDisplay.innerText = "External Link";
}
overlay.classList.add('active');
rocketWrapper.classList.remove('rocket-launching');
let timeLeft = 3;
countdownEl.innerText = timeLeft;
const timer = setInterval(() => {
timeLeft--;
if (timeLeft > 0) {
countdownEl.innerText = timeLeft;
} else if (timeLeft === 0) {
countdownEl.innerText = "LAUNCH!";
rocketWrapper.classList.add('rocket-launching');
} else {
clearInterval(timer);
window.open(url, '_blank');
setTimeout(() => {
overlay.classList.remove('active');
setTimeout(() => {
rocketWrapper.classList.remove('rocket-launching');
countdownEl.innerText = "3";
}, 300);
}, 1000);
}
}, 800);
}
// --- INIT ---
document.addEventListener('DOMContentLoaded', function() {
loadBlogFeed();
document.querySelector('.overlay')?.addEventListener('click', toggleSidebar);
});