Files
dodep-simulator/templates/achievements.html
T

111 lines
6.1 KiB
HTML

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Достижения — CS2 Simulator</title>
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<nav class="navbar">
<div class="container">
<a href="/" class="logo">CS2 <span>Simulator</span></a>
<button class="mobile-toggle" id="mobileToggle"></button>
<div class="nav-links" id="navLinks">
<a href="/cases" class="nav-link">Кейсы</a>
<a href="/contracts" class="nav-link">Контракты</a>
<a href="/upgrade" class="nav-link">Апгрейд</a>
<a href="/crash" class="nav-link">Crash</a>
<a href="/inventory" class="nav-link">Инвентарь</a>
<a href="/achievements" class="nav-link active">Достижения</a>
<a href="/activity" class="nav-link">Лента</a>
<a href="/profile" class="nav-link">Профиль</a>
<span class="user-balance">{{ "%.0f"|format(user.balance) }} ₽</span>
<button onclick="toggleSafeMode()" class="btn btn-ghost" id="safeModeToggle" title="Режим записи">🎙️</button>
<button onclick="logout()" class="btn btn-ghost">Выйти</button>
</div>
</div>
</nav>
<main class="section">
<div class="container">
<div class="section-header">
<div>
<h1 class="section-title">🏆 Достижения</h1>
<p class="section-subtitle">Выполняй задания и получай награды</p>
</div>
<div class="flex gap-3">
<div class="stat-card" style="padding:0.5rem 1rem;">
<div class="stat-value" style="font-size:1.1rem;">{{ unlocked }}/{{ total }}</div>
<div class="stat-label text-xs">Открыто</div>
</div>
<div class="stat-card" style="padding:0.5rem 1rem;">
<div class="stat-value" style="font-size:1.1rem;">{{ "%.0f"|format(unlocked/total*100 if total > 0 else 0) }}%</div>
<div class="stat-label text-xs">Прогресс</div>
</div>
</div>
</div>
<div class="section-tabs" id="categoryFilter">
<button class="section-tab active" data-cat="all">Все</button>
<button class="section-tab" data-cat="cases">📦 Кейсы</button>
<button class="section-tab" data-cat="contracts">🔄 Контракты</button>
<button class="section-tab" data-cat="upgrade">🆙 Апгрейд</button>
<button class="section-tab" data-cat="crash">💥 Crash</button>
<button class="section-tab" data-cat="general">🎯 Общие</button>
</div>
<div class="grid grid-auto" id="achievementsGrid">
{% for ach in achievements %}
<div class="card {{ 'card-glow' if ach.unlocked else '' }}"
data-category="{{ ach.category }}" style="display:flex;gap:0.75rem;align-items:flex-start;">
<div style="font-size:1.8rem;flex-shrink:0;width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:var(--bg-dark);border-radius:var(--radius-sm);{{ 'background:rgba(34,197,94,0.12);' if ach.unlocked }}">
{{ ach.icon }}
</div>
<div style="flex:1;min-width:0;">
<div class="display-font" style="font-size:0.85rem;margin-bottom:0.15rem;">{{ ach.title }}</div>
<div class="text-dim text-sm" style="margin-bottom:0.35rem;">{{ ach.description }}</div>
{% if ach.reward_amount > 0 %}
<div class="badge badge-green" style="margin-bottom:0.5rem;">+{{ "%.0f"|format(ach.reward_amount) }} ₽</div>
{% endif %}
<div>
<div style="height:5px;background:var(--bg-dark);border-radius:3px;overflow:hidden;">
<div style="height:100%;width:{{ (ach.progress / ach.requirement_value * 100)|round }}%;background:{{ 'var(--success)' if ach.unlocked else 'var(--primary)' }};border-radius:3px;transition:width 0.5s ease;"></div>
</div>
<div class="text-xs text-dim" style="margin-top:0.15rem;">
{% if ach.unlocked %}✅ Получено{% else %}{{ ach.progress }} / {{ ach.requirement_value }}{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</main>
<script src="/static/js/sounds.js"></script>
<script src="/static/js/websocket.js"></script>
<script src="/static/js/safemode.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('#categoryFilter .section-tab').forEach(btn => {
btn.addEventListener('click', () => {
document.querySelectorAll('#categoryFilter .section-tab').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
const cat = btn.dataset.cat;
document.querySelectorAll('.achievement-card, .card[data-category]').forEach(card => {
card.style.display = (cat === 'all' || card.dataset.category === cat) ? 'flex' : 'none';
});
});
});
});
function toggleSound() {
const enabled = SoundManager.toggle();
document.getElementById('soundToggle').textContent = enabled ? '🔊' : '🔇';
}
</script>
{% include '_activity_sidebar.html' %}
</body>
</html>