Merge branch 'dev'

Merge branch 'dev' - v1.2.0

- CATEGORIES rozšířeny: fediverse, cestovani, priroda, jidlo
- Limit featured_tags zvýšen na 6, zobrazení na 4
- Klikací hashtagy u kartiček – filtrování na stránce
- Odkaz na about.mamutovo.cz v hero sekci start.html
- Přidáni noví účty: mirek@rodina-sucha.cz, michal@vltava.cloud,
  sesivany@social.vivaldi.net, jimmac@mastodon.social,
  Oskar456@mastodon.social, jmlich@fosstodon.org,
  ronny@metalhead.club, vancura@mastodon.design
This commit is contained in:
2026-04-13 19:16:20 +02:00
2 changed files with 44 additions and 2 deletions

View File

@@ -384,6 +384,15 @@ select:focus { border-color: var(--accent); }
border: 1px solid rgba(0,200,150,0.15);
border-radius: 999px;
padding: 0.15rem 0.5rem;
cursor: pointer;
position: relative;
z-index: 1;
transition: background 0.15s, border-color 0.15s;
}
.card-tag:hover {
background: rgba(0,200,150,0.22);
border-color: var(--accent);
}
.card-stats {
@@ -731,6 +740,28 @@ let viewMode = 'grid'; // 'grid' | 'list'
// ────────────────────────────────
// FILTER + SORT
// ────────────────────────────────
function filterByTag(tag) {
const wrap = document.getElementById('filterTags');
const existing = wrap.querySelector(`.ftag[data-tag="${CSS.escape(tag)}"]`);
if (existing) {
wrap.querySelectorAll('.ftag').forEach(b => b.classList.remove('active'));
existing.classList.add('active');
} else {
const btn = document.createElement('button');
btn.className = 'ftag active';
btn.dataset.tag = tag;
btn.textContent = '#' + tag;
btn.addEventListener('click', () => {
wrap.querySelectorAll('.ftag').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
applyFilters();
});
wrap.querySelectorAll('.ftag').forEach(b => b.classList.remove('active'));
wrap.appendChild(btn);
}
applyFilters();
}
function applyFilters() {
const q = document.getElementById('searchInput').value.toLowerCase().trim();
const cat = document.getElementById('categoryFilter').value;
@@ -793,7 +824,7 @@ function avatarFallback(name) {
function cardHTML(a, idx) {
const av = a.avatar || avatarFallback(a.name);
const tags = (a.tags || []).slice(0, 4).map(t =>
`<span class="card-tag">#${t}</span>`).join('');
`<span class="card-tag" onclick="event.stopPropagation();filterByTag('${t.replace(/'/g, "\\'")}')">#${t}</span>`).join('');
if (viewMode === 'list') {
return `

View File

@@ -76,6 +76,16 @@
.tagline strong { color: var(--text); }
.about-link {
color: var(--accent);
text-decoration: none;
font-size: 0.92rem;
opacity: 0.75;
transition: opacity 0.15s;
}
.about-link:hover { opacity: 1; text-decoration: underline; }
/* --- CARDS GRID --- */
.cards {
display: grid;
@@ -378,7 +388,8 @@
<h1>🦣 Mamutovo za 3 minuty.</h1>
<p class="tagline">
Žádné algoritmy. Žádné reklamy. <strong>Patří komunitě.</strong><br>
Tyhle 4 kroky ti zaplní feed a pomůžou udělat první post.
Tyhle 4 kroky ti zaplní feed a pomůžou udělat první post.<br>
<a href="https://about.mamutovo.cz" target="_blank" class="about-link">Co je Mamutovo.cz?</a>
</p>
</div>