Загрузка данных


<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DotaSkins — магазин скинов Dota 2</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
<header class="header">
    <div class="container header-inner">
        <a class="logo" href="#">DotaSkins</a>
        <nav class="nav">
            <a href="#catalog">Каталог</a>
            <a href="#about">О магазине</a>
            <a href="#contacts">Контакты</a>
        </nav>
        <div>Корзина: 0</div>
    </div>
</header>

<main>
    <section class="hero">
        <div class="container">
            <h1>Скины для Dota 2</h1>
            <p>Простой каталог популярных предметов для героев.</p>
            <a class="button" href="#catalog">Смотреть каталог</a>
        </div>
    </section>

    <section class="catalog container" id="catalog">
        <aside class="filters">
            <h2>Фильтр</h2>
            <form>
                <fieldset>
                    <legend>Редкость</legend>
                    <label><input type="checkbox" name="rarity"> Rare</label>
                    <label><input type="checkbox" name="rarity"> Immortal</label>
                </fieldset>
                <fieldset>
                    <legend>Цена</legend>
                    <label for="price">До:</label>
                    <input id="price" type="number" min="1" max="500" step="1" value="100">
                </fieldset>
                <button class="button" type="submit">Применить</button>
            </form>
        </aside>

        <div class="products">
            <div class="products-top">
                <h2>Популярные скины</h2>
                <form class="search">
                    <label for="skin-search">Поиск:</label>
                    <input id="skin-search" type="text" list="skins" placeholder="Название скина" required>
                    <datalist id="skins">
                        <option value="Demon Eater">
                        <option value="Manifold Paradox">
                        <option value="Frost Avalanche">
                        <option value="Bladeform Legacy">
                    </datalist>
                </form>
            </div>

            <div class="product-grid">
                <article class="card"
                         data-title="Demon Eater"
                         data-hero="Shadow Fiend"
                         data-price="24.99 $"
                         data-desc="Легендарный предмет для Shadow Fiend. Полностью меняет модель героя, добавляет уникальные эффекты при использовании способностей и особую анимацию атаки. Редкость: Immortal."
                         data-img="https://images.unsplash.com/photo-1542751371-adc38448a05e?auto=format&fit=crop&w=600&q=80">
                    <img src="https://images.unsplash.com/photo-1542751371-adc38448a05e?auto=format&fit=crop&w=600&q=80" alt="Игровой предмет" title="Demon Eater">
                    <div class="card-content">
                        <h3>Demon Eater</h3>
                        <p>Предмет для Shadow Fiend.</p>
                        <div class="card-bottom">
                            <strong>24.99 $</strong>
                            <button type="button">Купить</button>
                        </div>
                    </div>
                </article>

                <article class="card"
                         data-title="Manifold Paradox"
                         data-hero="Phantom Assassin"
                         data-price="18.50 $"
                         data-desc="Мифический предмет для Phantom Assassin. Меняет внешний вид оружия, добавляет новые эффекты критических ударов и уникальную иконку способности."
                         data-img="https://images.unsplash.com/photo-1511512578047-dfb367046420?auto=format&fit=crop&w=600&q=80">
                    <img src="https://images.unsplash.com/photo-1511512578047-dfb367046420?auto=format&fit=crop&w=600&q=80" alt="Игровой предмет" title="Manifold Paradox">
                    <div class="card-content">
                        <h3>Manifold Paradox</h3>
                        <p>Предмет для Phantom Assassin.</p>
                        <div class="card-bottom">
                            <strong>18.50 $</strong>
                            <button type="button">Купить</button>
                        </div>
                    </div>
                </article>

                <article class="card"
                         data-title="Frost Avalanche"
                         data-hero="Crystal Maiden"
                         data-price="12.90 $"
                         data-desc="Редкий предмет для Crystal Maiden. Изменяет модель героя и эффекты способностей на ледяные, добавляет новую анимацию ходьбы."
                         data-img="https://images.unsplash.com/photo-1550745165-9bc0b252726f?auto=format&fit=crop&w=600&q=80">
                    <img src="https://images.unsplash.com/photo-1550745165-9bc0b252726f?auto=format&fit=crop&w=600&q=80" alt="Игровой предмет" title="Frost Avalanche">
                    <div class="card-content">
                        <h3>Frost Avalanche</h3>
                        <p>Предмет для Crystal Maiden.</p>
                        <div class="card-bottom">
                            <strong>12.90 $</strong>
                            <button type="button">Купить</button>
                        </div>
                    </div>
                </article>

                <article class="card"
                         data-title="Bladeform Legacy"
                         data-hero="Juggernaut"
                         data-price="21.00 $"
                         data-desc="Immortal-предмет для Juggernaut. Полностью заменяет маску героя, добавляет уникальные эффекты при использовании Omnislash и Blade Fury."
                         data-img="https://images.unsplash.com/photo-1493711662062-fa541adb3fc8?auto=format&fit=crop&w=600&q=80">
                    <img src="https://images.unsplash.com/photo-1493711662062-fa541adb3fc8?auto=format&fit=crop&w=600&q=80" alt="Игровой предмет" title="Bladeform Legacy">
                    <div class="card-content">
                        <h3>Bladeform Legacy</h3>
                        <p>Предмет для Juggernaut.</p>
                        <div class="card-bottom">
                            <strong>21.00 $</strong>
                            <button type="button">Купить</button>
                        </div>
                    </div>
                </article>

                <article class="card"
                         data-title="The Magus Cypher"
                         data-hero="Rubick"
                         data-price="15.75 $"
                         data-desc="Мифический предмет для Rubick. Меняет внешний вид посоха, добавляет эффекты при краже способностей и уникальную анимацию."
                         data-img="https://images.unsplash.com/photo-1560253023-3ec5d502959f?auto=format&fit=crop&w=600&q=80">
                    <img src="https://images.unsplash.com/photo-1560253023-3ec5d502959f?auto=format&fit=crop&w=600&q=80" alt="Игровой предмет" title="The Magus Cypher">
                    <div class="card-content">
                        <h3>The Magus Cypher</h3>
                        <p>Предмет для Rubick.</p>
                        <div class="card-bottom">
                            <strong>15.75 $</strong>
                            <button type="button">Купить</button>
                        </div>
                    </div>
                </article>

                <article class="card"
                         data-title="Dread Requisition"
                         data-hero="Drow Ranger"
                         data-price="9.99 $"
                         data-desc="Редкий предмет для Drow Ranger. Изменяет модель лука, добавляет ледяные эффекты стрел и новую анимацию прицеливания."
                         data-img="https://images.unsplash.com/photo-1605870445919-838d190e8e1b?auto=format&fit=crop&w=600&q=80">
                    <img src="https://images.unsplash.com/photo-1605870445919-838d190e8e1b?auto=format&fit=crop&w=600&q=80" alt="Игровой предмет" title="Dread Requisition">
                    <div class="card-content">
                        <h3>Dread Requisition</h3>
                        <p>Предмет для Drow Ranger.</p>
                        <div class="card-bottom">
                            <strong>9.99 $</strong>
                            <button type="button">Купить</button>
                        </div>
                    </div>
                </article>
            </div>
        </div>
    </section>

    <section class="about container" id="about">
        <h2>Почему DotaSkins?</h2>
        <div class="advantages">
            <div><h3>Большой выбор</h3><p>Популярные предметы для разных героев.</p></div>
            <div><h3>Простой каталог</h3><p>Можно быстро найти нужный скин.</p></div>
            <div><h3>Удобная покупка</h3><p>Цена и кнопка покупки находятся на карточке.</p></div>
        </div>
    </section>
</main>

<footer class="footer" id="contacts">
    <div class="container footer-inner">
        <div><h2>DotaSkins</h2><p>Учебный сайт магазина скинов Dota 2.</p></div>
        <form class="subscribe">
            <label for="email">Получить новости:</label>
            <input id="email" type="email" placeholder="Ваш email" required>
            <button type="submit">Подписаться</button>
        </form>
    </div>
</footer>

<!-- Модальное окно с описанием товара -->
<div class="modal" id="product-modal" aria-hidden="true">
    <div class="modal-overlay" data-close></div>
    <div class="modal-window" role="dialog" aria-modal="true" aria-labelledby="modal-title">
        <button class="modal-close" type="button" data-close aria-label="Закрыть">&times;</button>
        <img class="modal-img" id="modal-img" src="" alt="">
        <div class="modal-body">
            <h2 id="modal-title"></h2>
            <p class="modal-hero" id="modal-hero"></p>
            <p class="modal-desc" id="modal-desc"></p>
            <div class="modal-bottom">
                <strong id="modal-price"></strong>
                <button class="button" type="button">Купить</button>
            </div>
        </div>
    </div>
</div>

<script>
    const modal   = document.getElementById('product-modal');
    const mImg    = document.getElementById('modal-img');
    const mTitle  = document.getElementById('modal-title');
    const mHero   = document.getElementById('modal-hero');
    const mDesc   = document.getElementById('modal-desc');
    const mPrice  = document.getElementById('modal-price');

    function openModal(card) {
        mImg.src           = card.dataset.img;
        mImg.alt           = card.dataset.title;
        mTitle.textContent = card.dataset.title;
        mHero.textContent  = 'Герой: ' + card.dataset.hero;
        mDesc.textContent  = card.dataset.desc;
        mPrice.textContent = card.dataset.price;

        modal.classList.add('is-open');
        modal.setAttribute('aria-hidden', 'false');
        document.body.classList.add('modal-open');
    }

    function closeModal() {
        modal.classList.remove('is-open');
        modal.setAttribute('aria-hidden', 'true');
        document.body.classList.remove('modal-open');
    }

    document.querySelectorAll('.card').forEach(card => {
        card.addEventListener('click', () => openModal(card));
    });

    modal.querySelectorAll('[data-close]').forEach(el => {
        el.addEventListener('click', closeModal);
    });

    document.addEventListener('keydown', e => {
        if (e.key === 'Escape' && modal.classList.contains('is-open')) {
            closeModal();
        }
    });

    // Чтобы клик по кнопке "Купить" не открывал модалку
    document.querySelectorAll('.card button, .modal-bottom button').forEach(btn => {
        btn.addEventListener('click', e => e.stopPropagation());
    });
</script>
</body>
</html>