diff --git a/script.js b/script.js
index ea88e77..9756612 100644
--- a/script.js
+++ b/script.js
@@ -268,11 +268,11 @@ function renderCards() {
// FILTER & SEARCH
// ===========================
let currentFilter = 'all';
-let currentSubFilter = 'all';
+let activeSubFilters = new Set();
function setFilter(category, btn) {
- currentFilter = category;
- currentSubFilter = 'all';
+ currentFilter = category;
+ activeSubFilters.clear();
visibleCount = POSTS_PER_PAGE;
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
@@ -281,10 +281,20 @@ function setFilter(category, btn) {
}
function setSubFilter(sub, btn) {
- currentSubFilter = sub;
visibleCount = POSTS_PER_PAGE;
- document.querySelectorAll('.sub-filter-btn').forEach(b => b.classList.remove('active'));
- btn.classList.add('active');
+ if (sub === 'all') {
+ activeSubFilters.clear();
+ } else {
+ if (activeSubFilters.has(sub)) {
+ activeSubFilters.delete(sub);
+ } else {
+ activeSubFilters.add(sub);
+ }
+ }
+ document.querySelectorAll('.sub-filter-btn').forEach(b => {
+ const id = b.dataset.sub;
+ b.classList.toggle('active', id === 'all' ? activeSubFilters.size === 0 : activeSubFilters.has(id));
+ });
filterPosts();
}
@@ -296,8 +306,8 @@ function renderSubFilters() {
const subs = sortSubcategories((cat?.subcategories || []).filter(s => countPostsInSubcategory(currentFilter, s.id) > 0));
if (!subs.length) { container.innerHTML = ''; return; }
container.innerHTML =
- `` +
- subs.map(s => ``).join('');
+ `` +
+ subs.map(s => ``).join('');
}
function filterPosts() {
@@ -308,7 +318,7 @@ function filterPosts() {
cards.forEach(card => {
const matchesCat = currentFilter === 'all' || card.dataset.category === currentFilter;
const postSubs = (card.dataset.subcategory || '').split(',').filter(Boolean);
- const matchesSub = currentSubFilter === 'all' || postSubs.includes(currentSubFilter);
+ const matchesSub = activeSubFilters.size === 0 || postSubs.some(s => activeSubFilters.has(s));
const title = (card.querySelector('h3')?.textContent || '').toLowerCase();
const desc = (card.querySelector('p:not(.card-author)')?.textContent || '').toLowerCase();
const subLbl = (card.dataset.subcategory || '').toLowerCase();