администрация: JeffreyCYRUSJennieDuston nc-21 — мистика, Лондон — сентябрь 2024 год помочь форуму
активисты
дуэт
рандомный пост недели от Albert Drexel
Он аккуратно присмотрелся к тому, что происходило на лестнице. Она не вызывала никаких эмоций. Старая, на вид добротная, на ощупь деревянная. Что же, стоит рискнуть. На этот раз, он не стал комментировать ничего. Ни встречу, ни действия. Лишь двинулся наверх, осторожно ступая на каждую ступень.
постописцы
читаемый эпизод From a whisper
to a scream

re:start

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » re:start » Флудовой архив » тест


тест

Сообщений 1 страница 18 из 18

1

.

0

2

-

0

3

одной из самых красивых пар посвящаю
@finn sawyer и @september ross

[html]
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .card-container {
            width: 100%;
            max-width: 1200px;
            background: rgba(10, 30, 40, 0.85);
            border-radius: 25px;
            padding: 40px;
            box-shadow: 0 20px 50px rgba(0, 0, 0, 0.7);
            position: relative;
            border: 5px solid #000;
            overflow: hidden;
        }

        /* Декоративные еловые ветки */
        .decoration {
            position: absolute;
            z-index: 1;
            pointer-events: none;
        }

        .decoration-1 {
           top: -20px;
            left: -15px;
            width: 250px;
           
        }

        .decoration-2 {
            bottom: -20px;
            right: -20px;
            width: 200px;
        }

        .decoration-3 {
            top: 50%;
            left: -30px;

            width: 150px;
        }

        .decoration-4 {
            top: 50%;
            right: -30px;
            transform: translateY(-50%) rotate(-90deg);
            width: 150px;
        }

        /* Контент */
        .card-content {
            position: relative;
            z-index: 2;
        }

        .images-container {
            display: flex;
            flex-wrap: wrap;
            justify-content: center;
            gap: 25px;
            margin-bottom: 40px;
        }

        .image-frame {
            width: 300px;
            height: 300px;
            position: relative;
            border-radius: 15px;
            overflow: hidden;
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
            transition: transform 0.5s ease;
            background: #57785c1a;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .image-frame:hover {
            transform: scale(1.1);
            z-index: 10;
        }

        .image-frame img {
            width: 90%;
            height: 90%;
            object-fit: cover;
            border-radius: 10px;
            position: relative;
            z-index: 1;
        }

        /* Повороты */
        .frame-1 { transform: rotate(-5deg); }
        .frame-1:hover { transform: rotate(-5deg) scale(1.1); }
       
        .frame-2 { transform: rotate(2deg); }
        .frame-2:hover { transform: rotate(2deg) scale(1.1); }
       
        .frame-3 { transform: rotate(-3deg); }
        .frame-3:hover { transform: rotate(-3deg) scale(1.1); }
       
        .frame-4 { transform: rotate(4deg); }
        .frame-4:hover { transform: rotate(4deg) scale(1.1); }
       
        .frame-5 { transform: rotate(-2deg); }
        .frame-5:hover { transform: rotate(-2deg) scale(1.1); }

        /* Украшение рамок */
        .frame-decoration {
            position: absolute;
            width: 30px;
            height: 30px;
            z-index: 2;
            opacity: 0.8;
        }

        .top-left { top: 8px; left: 8px; }
        .top-right { top: 8px; right: 8px; }
        .bottom-left { bottom: 8px; left: 8px; }
        .bottom-right { bottom: 8px; right: 8px; }

        /* Текст */
        .greeting-text {
            background: #57785c1a;
            border-radius: 20px;
            padding: 30px;
            margin-top: 30px;
            border: 2px solid #00000075;
            backdrop-filter: blur(5px);
            color: #85cf99;
        }

        .signature {
            text-align: right;
            margin-top: 10px;
            font-style: italic;
font-family: Sunday;
            color: #ffaa2a;
           
        }

        /* Адаптивность */
        @media (max-width: 1100px) {
            .image-frame {
                width: 180px;
                height: 180px;
            }
        }

        @media (max-width: 900px) {
            .images-container {
                gap: 15px;
            }
           
            .image-frame {
                width: 130px;
                height: 130px;
            }
           

        }

        @media (max-width: 700px) {
            .card-container {
                padding: 25px;
            }
           
            .image-frame {
                width: 100px;
                height: 100px;
            }
           

           
            .greeting-text {
                padding: 20px;
            }
           

        }

        @media (max-width: 550px) {
            .images-container {
                gap: 10px;
            }
           
            .image-frame {
                width: 85px;
                height: 85px;
            }
           
            .decoration {
                display: none;
            }
        }
    </style>

<style>
    /* СТИЛИ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО В ВАШ CSS */
    .snow-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
        z-index: 5;
        overflow: hidden;
    }
   
    .snowflake {
        position: absolute;
        background: white;
        border-radius: 50%;
        top: -10px;
        opacity: 0.8;
        animation: snowFallIndividual linear infinite;
        box-shadow: 0 0 3px white;
    }
   
    @keyframes snowFallIndividual {
        0% {
            transform: translateY(-10px) translateX(0);
            opacity: 0.8;
        }
        100% {
            transform: translateY(100vh) translateX(50px);
            opacity: 0;
        }
    }
</style>

    <div class="card-container">
        <!-- Еловые ветки -->
        <img src="https://cdn-icons-png.flaticon.com/512/2508/2508203.png" alt="Еловая ветка" class="decoration decoration-1">
        <img src="https://cdn-icons-png.flaticon.com/512/3835/3835818.png" alt="Еловая ветка" class="decoration decoration-2">
        <img src="https://cdn-icons-png.flaticon.com/512/16775/16775136.png" alt="Еловая ветка" class="decoration decoration-3">
        <img src="https://cdn-icons-png.flaticon.com/512/6278/6278313.png" alt="Еловая ветка" class="decoration decoration-4">

        <!-- Снег БЕЗ JavaScript -->
        <div class="snow-container">
            <!-- 20 снежинок, созданных через HTML -->
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
        </div>

        <div class="card-content">
           
            <div class="images-container">
                <!-- 5 фото -->
                <div class="image-frame frame-1">
                    <div class="frame-decoration top-left">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/954684.jpg" alt="Новогоднее фото 1">
                </div>
               
                <div class="image-frame frame-2">
                    <div class="frame-decoration top-right">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/210178.png" alt="Новогоднее фото 2">
                </div>
               
                <div class="image-frame frame-3">
                    <div class="frame-decoration bottom-right">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/20349.jpg" alt="Новогоднее фото 3">
                </div>
               

           
            <div class="greeting-text">
            <table>
            <tr>
                <td>Септембер и Финн, в снежный вечер<br>
Пусть придёт к вам счастье без преград.<br>
В Эврике‑Спрингс, под звёздным небом,<br>
Пусть звучит ваш тихий «навсегда».<br></td>
                <td>С Новым годом! Светлых дней,<br>
Тёплых встреч и добрых вестей.<br>
Пусть любовь, как снежный шар,<br>
Станет крепче в этот дар. <br></td>
            </tr>
    </table>
                <div class="signature">С новым годом от Люцифера!</div>
            </div>
        </div>
    </div>

<!-- СКРИПТ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО ПОСЛЕ ОТКРЫТКИ -->
<script>
// Простой скрипт для создания снежинок
(function() {
    // Ждем немного чтобы все загрузилось
    setTimeout(function() {
        const snowContainer = document.querySelector('.snow-container');
        if (!snowContainer) {
            console.error('Не найден .snow-container');
            return;
        }
       
        // Очищаем если что-то есть
        snowContainer.innerHTML = '';
       
        // Создаем 60 снежинок (можно изменить количество)
        for (let i = 0; i < 60; i++) {
            const snowflake = document.createElement('div');
            snowflake.className = 'snowflake';
           
            // Случайные параметры
            const left = Math.random() * 100; // 0-100%
            const size = Math.random() * 6 + 3; // 3-9px
            const duration = Math.random() * 10 + 5; // 5-15 секунд
            const delay = Math.random() * 20; // 0-20 секунд
            const opacity = 0.5 + Math.random() * 0.5; // 0.5-1
           
            // Применяем стили
            snowflake.style.left = left + '%';
            snowflake.style.width = size + 'px';
            snowflake.style.height = size + 'px';
            snowflake.style.animationDuration = duration + 's';
            snowflake.style.animationDelay = delay + 's';
            snowflake.style.opacity = opacity;
           
            snowContainer.appendChild(snowflake);
        }
       
        console.log('Снег создан: ' + snowContainer.children.length + ' снежинок');
    }, 100);
})();
</script>
[/html]

оригиналы изображений

https://upforme.ru/uploads/001b/ee/60/4/954684.jpg

https://upforme.ru/uploads/001b/ee/60/4/20349.jpg

https://upforme.ru/uploads/001b/ee/60/4/105694.png

https://upforme.ru/uploads/001b/ee/60/4/641008.png

https://upforme.ru/uploads/001b/ee/60/4/210178.png

0

4

hide-autor

одной из самых красивых пар посвящаю
@finn sawyer и @september ross
скрещу пальчики, чтобы вы все-таки были вместе

[html]
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .card-container {
            width: 100%;
            max-width: 1200px;
            background: rgba(10, 30, 40, 0.85);
            border-radius: 25px;
            padding: 40px;
            box-shadow: 0 20px 50px rgba(0, 0, 0, 0.7);
            position: relative;
            border: 5px solid #000;
            overflow: hidden;
        }

        /* Декоративные еловые ветки */
        .decoration {
            position: absolute;
            z-index: 1;
            pointer-events: none;
        }

        .decoration-1 {
           top: -20px;
            left: -15px;
            width: 250px;
           
        }

        .decoration-2 {
            bottom: -20px;
            right: -20px;
            width: 200px;
        }

        .decoration-3 {
            top: 50%;
            left: -30px;

            width: 150px;
        }

        .decoration-4 {
            top: 50%;
            right: -30px;
            transform: translateY(-50%) rotate(-90deg);
            width: 150px;
        }

        /* Контент */
        .card-content {
            position: relative;
            z-index: 2;
        }

        .images-container {
            display: flex;
            flex-wrap: wrap;
            justify-content: center;
            gap: 25px;
            margin-bottom: 40px;
        }

        .image-frame {
            width: 200px;
            height: 200px;
            position: relative;
            border-radius: 15px;
            overflow: hidden;
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
            transition: transform 0.5s ease;
            background: #57785c1a;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .image-frame:hover {
            transform: scale(1.1);
            z-index: 10;
        }

        .image-frame img {
            width: 90%;
            height: 90%;
            object-fit: cover;
            border-radius: 10px;
            position: relative;
            z-index: 1;
        }

        /* Повороты */
        .frame-1 { transform: rotate(-5deg); }
        .frame-1:hover { transform: rotate(-5deg) scale(1.1); }
       
        .frame-2 { transform: rotate(2deg); }
        .frame-2:hover { transform: rotate(2deg) scale(1.1); }
       
        .frame-3 { transform: rotate(-3deg); }
        .frame-3:hover { transform: rotate(-3deg) scale(1.1); }
       
        .frame-4 { transform: rotate(4deg); }
        .frame-4:hover { transform: rotate(4deg) scale(1.1); }
       
        .frame-5 { transform: rotate(-2deg); }
        .frame-5:hover { transform: rotate(-2deg) scale(1.1); }

        /* Украшение рамок */
        .frame-decoration {
            position: absolute;
            width: 30px;
            height: 30px;
            z-index: 2;
            opacity: 0.8;
        }

        .top-left { top: 8px; left: 8px; }
        .top-right { top: 8px; right: 8px; }
        .bottom-left { bottom: 8px; left: 8px; }
        .bottom-right { bottom: 8px; right: 8px; }

        /* Текст */
        .greeting-text {
            background: #57785c1a;
            border-radius: 20px;
            padding: 30px;
            margin-top: 30px;
            border: 2px solid #00000075;
            backdrop-filter: blur(5px);
            color: #85cf99;
        }

        .signature {
            text-align: right;
            margin-top: 10px;
            font-style: italic;
font-family: Sunday;
            color: #ffaa2a;
           
        }

        /* Адаптивность */
        @media (max-width: 1100px) {
            .image-frame {
                width: 180px;
                height: 180px;
            }
        }

        @media (max-width: 900px) {
            .images-container {
                gap: 15px;
            }
           
            .image-frame {
                width: 130px;
                height: 130px;
            }
           

        }

        @media (max-width: 700px) {
            .card-container {
                padding: 25px;
            }
           
            .image-frame {
                width: 100px;
                height: 100px;
            }
           

           
            .greeting-text {
                padding: 20px;
            }
           

        }

        @media (max-width: 550px) {
            .images-container {
                gap: 10px;
            }
           
            .image-frame {
                width: 85px;
                height: 85px;
            }
           
            .decoration {
                display: none;
            }
        }
    </style>

<style>
    /* СТИЛИ ДЛЯ СНЕГА */
    .snow-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
        z-index: 5;
        overflow: hidden;
    }
   
    .snowflake {
        position: absolute;
        background: white;
        border-radius: 50%;
        top: -10px;
        opacity: 0.8;
        animation: snowFallIndividual linear infinite;
        box-shadow: 0 0 3px white;
    }
   
    @keyframes snowFallIndividual {
        0% { transform: translateY(-10px) translateX(0); opacity: 0.8; }
        100% { transform: translateY(100vh) translateX(50px); opacity: 0; }
    }
   
    /* 20 снежинок с разными параметрами */
    .snowflake:nth-child(1) { left: 5%; width: 6px; height: 6px; animation-duration: 9s; animation-delay: 0s; }
    .snowflake:nth-child(2) { left: 15%; width: 5px; height: 5px; animation-duration: 12s; animation-delay: 1s; }
    .snowflake:nth-child(3) { left: 25%; width: 7px; height: 7px; animation-duration: 8s; animation-delay: 2s; }
    .snowflake:nth-child(4) { left: 35%; width: 4px; height: 4px; animation-duration: 11s; animation-delay: 3s; }
    .snowflake:nth-child(5) { left: 45%; width: 6px; height: 6px; animation-duration: 5s; animation-delay: 4s; }
    .snowflake:nth-child(6) { left: 55%; width: 5px; height: 5px; animation-duration: 4s; animation-delay: 5s; }
    .snowflake:nth-child(7) { left: 65%; width: 8px; height: 8px; animation-duration: 7s; animation-delay: 6s; }
    .snowflake:nth-child(8) { left: 75%; width: 4px; height: 4px; animation-duration: 7s; animation-delay: 7s; }
    .snowflake:nth-child(9) { left: 85%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 8s; }
    .snowflake:nth-child(10) { left: 95%; width: 5px; height: 5px; animation-duration: 5s; animation-delay: 9s; }
    .snowflake:nth-child(11) { left: 10%; width: 7px; height: 7px; animation-duration: 12s; animation-delay: 10s; }
    .snowflake:nth-child(12) { left: 20%; width: 4px; height: 4px; animation-duration: 11s; animation-delay: 11s; }
    .snowflake:nth-child(13) { left: 30%; width: 6px; height: 6px; animation-duration: 9s; animation-delay: 12s; }
    .snowflake:nth-child(14) { left: 40%; width: 5px; height: 5px; animation-duration: 11s; animation-delay: 13s; }
    .snowflake:nth-child(15) { left: 50%; width: 8px; height: 8px; animation-duration: 7s; animation-delay: 14s; }
    .snowflake:nth-child(16) { left: 60%; width: 4px; height: 4px; animation-duration: 8s; animation-delay: 15s; }
    .snowflake:nth-child(17) { left: 70%; width: 6px; height: 6px; animation-duration: 6s; animation-delay: 16s; }
    .snowflake:nth-child(18) { left: 80%; width: 5px; height: 5px; animation-duration: 9s; animation-delay: 17s; }
    .snowflake:nth-child(19) { left: 90%; width: 7px; height: 7px; animation-duration: 5s; animation-delay: 18s; }
    .snowflake:nth-child(20) { left: 100%; width: 4px; height: 4px; animation-duration: 11s; animation-delay: 19s; }
</style>

    <div class="card-container">
        <!-- Еловые ветки -->
        <img src="https://cdn-icons-png.flaticon.com/512/2508/2508203.png" alt="Еловая ветка" class="decoration decoration-1">
        <img src="https://cdn-icons-png.flaticon.com/512/3835/3835818.png" alt="Еловая ветка" class="decoration decoration-2">
        <img src="https://cdn-icons-png.flaticon.com/512/16775/16775136.png" alt="Еловая ветка" class="decoration decoration-3">
        <img src="https://cdn-icons-png.flaticon.com/512/6278/6278313.png" alt="Еловая ветка" class="decoration decoration-4">

         <!-- ДОБАВЬТЕ ЭТОТ ДИВ ДЛЯ СНЕГА -->
    <div class="snow-container">
        <!-- 20 снежинок вручную -->
        <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div>
      <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div>
    </div>

        <div class="card-content">
           
            <div class="images-container">
                <!-- 5 фото -->
                <div class="image-frame frame-1">
                    <div class="frame-decoration top-left">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/954684.jpg" alt="Новогоднее фото 1">
                </div>
               
                <div class="image-frame frame-2">
                    <div class="frame-decoration top-right">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/210178.png" alt="Новогоднее фото 2">
                </div>
               
                <div class="image-frame frame-3">
                    <div class="frame-decoration bottom-right">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/20349.jpg" alt="Новогоднее фото 3">
                </div>
               

           
            <div class="greeting-text">
            <table>
            <tr>
                <td>Септембер и Финн, в снежный вечер<br>
Пусть придёт к вам счастье без преград.<br>
В Эврике‑Спрингс, под звёздным небом,<br>
Пусть звучит ваш тихий «навсегда».<br></td>
                <td>С Новым годом! Светлых дней,<br>
Тёплых встреч и добрых вестей.<br>
Пусть любовь, как снежный шар,<br>
Станет крепче в этот дар. <br></td>
            </tr>
    </table>
                <div class="signature">С новым годом от Люцифера!</div>
            </div>
        </div>
    </div>

<!-- СКРИПТ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО ПОСЛЕ ОТКРЫТКИ -->
<script>
// Простой скрипт для создания снежинок
(function() {
    // Ждем немного чтобы все загрузилось
    setTimeout(function() {
        const snowContainer = document.querySelector('.snow-container');
        if (!snowContainer) {
            console.error('Не найден .snow-container');
            return;
        }
       
        // Очищаем если что-то есть
        snowContainer.innerHTML = '';
       
        // Создаем 60 снежинок (можно изменить количество)
        for (let i = 0; i < 60; i++) {
            const snowflake = document.createElement('div');
            snowflake.className = 'snowflake';
           
            // Случайные параметры
            const left = Math.random() * 100; // 0-100%
            const size = Math.random() * 6 + 3; // 3-9px
            const duration = Math.random() * 10 + 5; // 5-15 секунд
            const delay = Math.random() * 20; // 0-20 секунд
            const opacity = 0.5 + Math.random() * 0.5; // 0.5-1
           
            // Применяем стили
            snowflake.style.left = left + '%';
            snowflake.style.width = size + 'px';
            snowflake.style.height = size + 'px';
            snowflake.style.animationDuration = duration + 's';
            snowflake.style.animationDelay = delay + 's';
            snowflake.style.opacity = opacity;
           
            snowContainer.appendChild(snowflake);
        }
       
        console.log('Снег создан: ' + snowContainer.children.length + ' снежинок');
    }, 100);
})();
</script>
[/html]

оригиналы изображений

https://upforme.ru/uploads/001b/ee/60/4/954684.jpg

https://upforme.ru/uploads/001b/ee/60/4/20349.jpg

https://upforme.ru/uploads/001b/ee/60/4/105694.png

https://upforme.ru/uploads/001b/ee/60/4/641008.png

https://upforme.ru/uploads/001b/ee/60/4/210178.png

0

5

тест

@Glenn Gordon с праздником тебя!
Пусть все идеи воплощаются и радуют сердечко)

от скромника Кая

[html]<div class="gothic-christmas-card">
  <div class="card-background"></div>
  <div class="decoration left"></div>
  <div class="decoration right"></div>
 
  <div class="image-card second">
    <img src="https://upforme.ru/uploads/001b/ee/60/4/795286.png" >
  </div>
<div class="image-card first">
    <img src="https://upforme.ru/uploads/001b/ee/60/4/721902.png" >
  </div>
</div>

<style>
  .gothic-christmas-card {
    position: relative;
    width: 600px;
    height: 400px;
    margin: 20px auto;
    overflow: hidden;
    font-family: 'Times New Roman', serif;
  }

  .card-background {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url('https://i.pinimg.com/originals/5a/08/b3/5a08b3b4baffe5e8dd04d1e90b6249fc.gif') center/cover no-repeat;
    filter: brightness(0.8);
  }

  .decoration {
    position: absolute;
    width: 80px;
    height: 100%;
    background-repeat: repeat-y;
    opacity: 0.7;
    z-index: 2;
  }

  .decoration.left {
    left: 0;
    background:  left top;
  }

  .decoration.right {
    right: 0;
    background:  right top;
  }

  .image-card {
    position: absolute;
    width: 280px;
    height: 220px;
    border-radius: 12px;
    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
    overflow: hidden;
    transform: rotate(-5deg);
    transition: transform 0.3s ease;
  }

  .image-card img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  .image-card.first {
    top: 100px;
    left: 80px;
  }

  .image-card.second {
    top: 120px;
    right: 80px;
    transform: rotate(7deg);
  }

  .image-card:hover {
    transform: scale(1.05) rotate(0deg);
    z-index: 3;
  }
</style>
<div class="christmas-card">
  <div class="card-background"></div>
  <div class="decoration left-decoration"></div>
  <div class="decoration right-decoration"></div>
  <div class="main-image-container">
    <img src="https://upforme.ru/uploads/001b/ee/60/4/146500.png"  class="main-image">
  </div>
</div>

<style>
  .christmas-card {
    position: relative;
    width: 600px;
    height: 400px;
    margin: 20px auto;
    overflow: hidden;
    border-radius: 15px;
    box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
  }

  .card-background {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url('https://i.pinimg.com/originals/9c/1a/59/9c1a595d7d7a2774150240668dc0cdce.gif') center/cover no-repeat;
    filter: brightness(0.7) saturate(1.2);
  }

  .decoration {
    position: absolute;
    width: 60px;
    height: 100%;
    z-index: 2;
  }

  .left-decoration {
    left: 0;
    background: url('https://example.com/left-fir-branch.png') left top / contain no-repeat;
  }

  .right-decoration {
    right: 0;
    background: url('https://example.com/right-fir-branch.png') right top / contain no-repeat;
  }

  .main-image-container {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) rotate(-5deg);
    width: 70%;
    height: 70%;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
    z-index: 3;
    transition: transform 0.4s ease, box-shadow 0.4s ease;

  }

  .main-image-container:hover {
    transform: translate(-50%, -50%) scale(1.05);
    box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
  }

  .main-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
  }

  /* Адаптивность для мобильных */
  @media (max-width: 768px) {
    .christmas-card {
      width: 95%;
      height: auto;
      padding-top: 66.67%; /* соотношение 3:2 */
    }
   
    .main-image-container {
      width: 80%;
      height: 80%;
    }
   
    .decoration {
      width: 40px;
    }
  }
</style>
[/html]

0

6

.

0

7

тест

[html]<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Рождественское Таро</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Georgia', serif;
            background: linear-gradient(135deg, #1a0f0f 0%, #2c1810 100%);
            min-height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 20px;
        }

        /* Подложка */
        .card-container {
            position: relative;
            width: 100%;
            max-width: 1400px;
            min-height: 800px;
            background:
                linear-gradient(to bottom, #8b4513, #654321),
                url('https://images.unsplash.com/photo-1513475382585-d06e58bcb0e0?ixlib=rb-4.0.3&auto=format&fit=crop&w=1350&q=80') center/cover;
            background-blend-mode: overlay;
            border-radius: 30px;
            box-shadow: 0 30px 60px rgba(0, 0, 0, 0.8);
            border: 15px solid #5d4037;
            padding: 40px;
            display: flex;
            flex-direction: column;
            align-items: center;
            overflow: hidden;
        }

        /* Заголовок */
        .title {
            text-align: center;
            margin-bottom: 40px;
            color: #ffd700;
            text-shadow: 3px 3px 5px rgba(0, 0, 0, 0.7);
            font-size: 3rem;
            font-family: 'Cinzel', serif;
            padding: 20px;
            border-bottom: 2px solid rgba(255, 215, 0, 0.3);
            width: 100%;
        }

        /* Контейнер для карт */
        .cards-spread {
            display: flex;
            flex-wrap: wrap;
            justify-content: center;
            gap: 20px;
            max-width: 1200px;
            margin: 0 auto;
            position: relative;
            z-index: 2;
        }

        /* Стиль карты */
        .tarot-card {
            width: 180px;
            height: 280px;
            cursor: pointer;
            transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
            transform-style: preserve-3d;
            border-radius: 12px;
            position: relative;
            transform-origin: center center;
        }

        /* Лицевая и обратная стороны */
        .card-front,
        .card-back {
            position: absolute;
            width: 100%;
            height: 100%;
            backface-visibility: hidden;
            border-radius: 12px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            padding: 15px;
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
        }

        /* Рубашка карты */
        .card-back {
            background: linear-gradient(135deg, #8b0000 0%, #4a0000 100%);
            border: 4px solid #ffd700;
            transform: rotateY(0deg);
        }

        .card-back::before {
            content: '❄';
            font-size: 60px;
            color: #ffd700;
            opacity: 0.7;
            margin-bottom: 10px;
        }

        .card-back::after {
            content: 'Нажмите';
            position: absolute;
            bottom: 20px;
            color: #ffd700;
            font-size: 14px;
            opacity: 0.8;
        }

        /* Лицевая сторона */
        .card-front {
            background: linear-gradient(135deg, #f5f5dc 0%, #e8e4c9 100%);
            transform: rotateY(180deg);
            border: 3px solid #8b4513;
            overflow: hidden;
        }

        .card-image {
            width: 100%;
            height: 65%;
            object-fit: cover;
            border-radius: 8px;
            margin-bottom: 10px;
            border: 2px solid #5d4037;
        }

        .card-name {
            font-size: 16px;
            color: #5d4037;
            text-align: center;
            font-weight: bold;
            margin-bottom: 8px;
            font-family: 'Cinzel', serif;
        }

        .card-message {
            font-size: 12px;
            color: #654321;
            text-align: center;
            line-height: 1.3;
        }

        /* Анимация при наведении */
        .tarot-card:hover {
            transform: translateY(-20px) scale(1.05);
            z-index: 10;
        }

        /* Анимация переворота */
        .tarot-card.flipped {
            transform: rotateY(180deg) translateY(-40px) scale(1.1);
            z-index: 20 !important;
        }

        /* Подпись */
        .footer {
            margin-top: 50px;
            text-align: center;
            color: #ffd700;
            font-size: 18px;
            font-family: 'Cinzel', serif;
            padding: 20px;
            border-top: 2px solid rgba(255, 215, 0, 0.3);
            width: 100%;
        }

        /* Декоративные снежинки */
        .snowflake {
            position: absolute;
            background: white;
            border-radius: 50%;
            opacity: 0.8;
            animation: fall linear infinite;
            pointer-events: none;
            z-index: 1;
        }

        @keyframes fall {
            0% { transform: translateY(-100px) translateX(0); }
            100% { transform: translateY(1000px) translateX(100px); opacity: 0; }
        }

        /* Адаптивность */
        @media (max-width: 1200px) {
            .cards-spread {
                max-width: 900px;
            }
           
            .tarot-card {
                width: 150px;
                height: 230px;
            }
        }

        @media (max-width: 768px) {
            .cards-spread {
                gap: 15px;
            }
           
            .tarot-card {
                width: 130px;
                height: 200px;
            }
           
            .title {
                font-size: 2rem;
            }
           
            .card-container {
                padding: 20px;
            }
        }

        @media (max-width: 480px) {
            .cards-spread {
                gap: 10px;
            }
           
            .tarot-card {
                width: 110px;
                height: 170px;
            }
           
            .card-back::before {
                font-size: 40px;
            }
           
            .card-name {
                font-size: 14px;
            }
        }
    </style>
    <link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&display=swap" rel="stylesheet">
</head>
<body>
    <div class="card-container">
        <!-- Снег -->
        <div id="snow"></div>
       
        <h1 class="title">🎄 Рождественские Предсказания 🎄</h1>
        <br>
        <div class="cards-spread">

           
            <!-- Карта 3 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/748620.png"
                         alt="Свечи" class="card-image">
                    <div class="card-name">НЕОЖИДАННОЕ СЧАСТЬЕ</div>
                    <div class="card-message">прямо в руки упадет желанный подарок</div>
                </div>
            </div>
           
            <!-- Карта 4 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/967020.png"
                         alt="Ужин" class="card-image">
                    <div class="card-name">СЕМЕЙНЫЙ ОЧАГ</div>
                    <div class="card-message">Тепло дома согреет весь год</div>
                </div>
            </div>
           
            <!-- Карта 5 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/152877.png"
                         alt="Звезда" class="card-image">
                    <div class="card-name">ВИФЛЕЕМСКАЯ ЗВЕЗДА</div>
                    <div class="card-message">Мечта станет реальностью</div>
                </div>
            </div>
           
            <!-- Карта 6 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/766331.png"
                         alt="Ангел" class="card-image">
                    <div class="card-name">АНГЕЛ-ХРАНИТЕЛЬ</div>
                    <div class="card-message">Защита всегда будет с вами</div>
                </div>
            </div>
        </div>
       
        <div class="footer">
            <p>Нажмите на карту, чтобы узнать предсказание</p>
            <p>Счастливого Рождества! 🎅</p>
        </div>
    </div>

    <script>
        // Функция переворота карты
        function flipCard(card) {
            // Если карта уже перевернута - возвращаем обратно
            if (card.classList.contains('flipped')) {
                card.classList.remove('flipped');
            } else {
                // Закрываем все другие карты
                document.querySelectorAll('.tarot-card.flipped').forEach(otherCard => {
                    if (otherCard !== card) {
                        otherCard.classList.remove('flipped');
                    }
                });
                // Открываем выбранную карту
                card.classList.add('flipped');
            }
        }

        // Создаем снег
        function createSnow() {
            const snowContainer = document.getElementById('snow');
            for (let i = 0; i < 40; i++) {
                const snowflake = document.createElement('div');
                snowflake.className = 'snowflake';
               
                const size = Math.random() * 5 + 2;
                const left = Math.random() * 100;
                const duration = Math.random() * 8 + 8;
                const delay = Math.random() * 15;
               
                snowflake.style.cssText = `
                    width: ${size}px;
                    height: ${size}px;
                    left: ${left}%;
                    top: -20px;
                    animation-duration: ${duration}s;
                    animation-delay: ${delay}s;
                    opacity: ${0.4 + Math.random() * 0.4};
                `;
               
                snowContainer.appendChild(snowflake);
            }
        }

        // Запускаем снег при загрузке
        document.addEventListener('DOMContentLoaded', createSnow);

        // Закрытие карты при клике вне карты
        document.addEventListener('click', function(event) {
            if (!event.target.closest('.tarot-card')) {
                document.querySelectorAll('.tarot-card.flipped').forEach(card => {
                    card.classList.remove('flipped');
                });
            }
        });
    </script>
</body>
</html>[/html]

0

8

тест

[html]<style>
    .holiday-card-2024 {
        position: relative;
        width: 800px;
        max-width: 100%;
        min-height: 500px;
        background: linear-gradient(135deg, #0a2e38 0%, #1a3a4a 100%);
        border-radius: 25px;
        padding: 30px;
        margin: 20px auto;
        box-shadow:
            0 20px 40px rgba(0, 0, 0, 0.6),
            inset 0 0 0 2px #d4af37;
        overflow: hidden;
        font-family: 'Segoe UI', Tahoma, Geneva, sans-serif;
    }

    /* Гирлянда сверху */
    .garland {
        position: absolute;
        top: -10px;
        left: 0;
        width: 100%;
        height: 50px;
        overflow: hidden;
        z-index: 10;
    }

    .light {
        position: absolute;
        width: 20px;
        height: 20px;
        border-radius: 50%;
        top: 10px;
        animation: blink 3s infinite;
        box-shadow:
            0 0 10px currentColor,
            0 0 20px currentColor;
    }

    /* Цвета лампочек */
    .light:nth-child(1) { left: 5%; background: #ff0000; animation-delay: 0s; }
    .light:nth-child(2) { left: 15%; background: #00ff00; animation-delay: 0.3s; }
    .light:nth-child(3) { left: 25%; background: #ffff00; animation-delay: 0.6s; }
    .light:nth-child(4) { left: 35%; background: #ff00ff; animation-delay: 0.9s; }
    .light:nth-child(5) { left: 45%; background: #00ffff; animation-delay: 1.2s; }
    .light:nth-child(6) { left: 55%; background: #ff8800; animation-delay: 1.5s; }
    .light:nth-child(7) { left: 65%; background: #ff0088; animation-delay: 1.8s; }
    .light:nth-child(8) { left: 75%; background: #88ff00; animation-delay: 2.1s; }
    .light:nth-child(9) { left: 85%; background: #0088ff; animation-delay: 2.4s; }
    .light:nth-child(10) { left: 95%; background: #ff4444; animation-delay: 2.7s; }

    @keyframes blink {
        0%, 100% { opacity: 0.3; transform: scale(0.8); }
        50% { opacity: 1; transform: scale(1.2); }
    }

    /* Провод гирлянды */
    .wire {
        position: absolute;
        top: 20px;
        left: 0;
        width: 100%;
        height: 2px;
        background: linear-gradient(90deg,
            transparent 0%,
            #d4af37 10%,
            #d4af37 90%,
            transparent 100%);
        box-shadow: 0 2px 5px rgba(0,0,0,0.5);
    }

    /* Заголовок */
    .holiday-title {
        text-align: center;
        color: #ffd700;
        font-size: 2.8rem;
        margin: 60px 0 40px;
        text-shadow:
            0 0 10px rgba(255, 215, 0, 0.5),
            2px 2px 4px rgba(0, 0, 0, 0.7);
        letter-spacing: 2px;
        position: relative;
    }

    .holiday-title::after {
        content: '🎄';
        position: absolute;
        right: 10%;
        top: 50%;
        transform: translateY(-50%);
        font-size: 2rem;
    }

    .holiday-title::before {
        content: '❄️';
        position: absolute;
        left: 10%;
        top: 50%;
        transform: translateY(-50%);
        font-size: 2rem;
    }

    /* Контейнер для фотографий */
    .photo-display {
        display: flex;
        justify-content: center;
        gap: 40px;
        margin: 40px 0;
        flex-wrap: wrap;
        perspective: 1000px;
    }

    /* Стиль для фото-рамок */
    .photo-frame {
        width: 300px;
        height: 350px;
        position: relative;
        cursor: pointer;
        transform-style: preserve-3d;
        transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
        border-radius: 15px;
        overflow: hidden;
    }

    .photo-frame:hover {
        transform: rotateY(10deg) translateY(-15px);
    }

    .photo-frame.active {
        transform: rotateY(180deg) scale(1.05);
        z-index: 5;
    }

    /* Передняя сторона (обложка) */
    .frame-front {
        position: absolute;
        width: 100%;
        height: 100%;
        backface-visibility: hidden;
        border-radius: 15px;
        background: linear-gradient(135deg, #8b0000, #4a0000);
        border: 6px solid #d4af37;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        box-shadow:
            inset 0 0 30px rgba(0, 0, 0, 0.7),
            0 15px 25px rgba(0, 0, 0, 0.5);
        overflow: hidden;
    }

    .frame-front::before {
        content: '✨';
        font-size: 60px;
        color: #ffd700;
        opacity: 0.8;
        margin-bottom: 20px;
        animation: sparkle 2s infinite;
    }

    @keyframes sparkle {
        0%, 100% { opacity: 0.5; transform: scale(1); }
        50% { opacity: 1; transform: scale(1.2); }
    }

    .frame-front::after {
        content: 'Нажми, чтобы открыть';
        color: #ffd700;
        font-size: 18px;
        text-align: center;
        padding: 0 20px;
        text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
    }

    /* Задняя сторона (фото) */
    .frame-back {
        position: absolute;
        width: 100%;
        height: 100%;
        backface-visibility: hidden;
        border-radius: 15px;
        background: #fff;
        transform: rotateY(180deg);
        overflow: hidden;
        border: 4px solid #d4af37;
    }

    .photo {
        width: 100%;
        height: 100%;
        object-fit: cover;
        transition: transform 0.5s;
    }

    .photo-frame:hover .photo {
        transform: scale(1.05);
    }

    /* Подпись под фото */
    .photo-caption {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        background: rgba(10, 30, 40, 0.9);
        color: #ffd700;
        padding: 15px;
        text-align: center;
        font-size: 16px;
        transform: translateY(100%);
        transition: transform 0.3s;
        border-top: 2px solid #d4af37;
    }

    .photo-frame:hover .photo-caption {
        transform: translateY(0);
    }

    /* Текст поздравления */
    .greeting-text {
        background: rgba(255, 255, 255, 0.1);
        border-radius: 20px;
        padding: 30px;
        margin-top: 40px;
        border: 2px solid rgba(212, 175, 55, 0.5);
        backdrop-filter: blur(5px);
        color: #e6f7ff;
        line-height: 1.6;
        font-size: 18px;
        text-align: center;
        position: relative;
        overflow: hidden;
    }

    .greeting-text::before {
        content: '🎅';
        position: absolute;
        top: 10px;
        left: 20px;
        font-size: 30px;
        opacity: 0.5;
    }

    .greeting-text::after {
        content: '🦌';
        position: absolute;
        bottom: 10px;
        right: 20px;
        font-size: 30px;
        opacity: 0.5;
    }

    .greeting-text p {
        margin-bottom: 15px;
    }

    .greeting-text .highlight {
        color: #ffd700;
        font-weight: bold;
        font-size: 20px;
    }

    /* Подпись */
    .signature {
        text-align: right;
        margin-top: 25px;
        color: #ffd700;
        font-style: italic;
        font-size: 20px;
        padding-right: 20px;
        position: relative;
    }

    .signature::before {
        content: '~';
        margin-right: 10px;
        font-size: 24px;
    }

    /* Снежинки */
    .snowflakes {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
        z-index: 1;
    }

    .snowflake {
        position: absolute;
        background: white;
        border-radius: 50%;
        animation: snowFall 15s linear infinite;
        opacity: 0.7;
        top: -10px;
    }

    @keyframes snowFall {
        0% {
            transform: translateY(0) translateX(0) rotate(0deg);
            opacity: 0.8;
        }
        100% {
            transform: translateY(500px) translateX(100px) rotate(360deg);
            opacity: 0;
        }
    }

    /* Создаем снежинки */
    .snowflake:nth-child(1) { left: 10%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 0s; }
    .snowflake:nth-child(2) { left: 20%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 1s; }
    .snowflake:nth-child(3) { left: 30%; width: 5px; height: 5px; animation-duration: 14s; animation-delay: 2s; }
    .snowflake:nth-child(4) { left: 40%; width: 7px; height: 7px; animation-duration: 9s; animation-delay: 3s; }
    .snowflake:nth-child(5) { left: 50%; width: 4px; height: 4px; animation-duration: 13s; animation-delay: 4s; }
    .snowflake:nth-child(6) { left: 60%; width: 6px; height: 6px; animation-duration: 11s; animation-delay: 5s; }
    .snowflake:nth-child(7) { left: 70%; width: 5px; height: 5px; animation-duration: 15s; animation-delay: 6s; }
    .snowflake:nth-child(8) { left: 80%; width: 8px; height: 8px; animation-duration: 8s; animation-delay: 7s; }
    .snowflake:nth-child(9) { left: 90%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 8s; }

    /* Адаптивность */
    @media (max-width: 850px) {
        .holiday-card-2024 {
            width: 95%;
            padding: 20px;
        }
       
        .photo-frame {
            width: 250px;
            height: 300px;
        }
       
        .holiday-title {
            font-size: 2.2rem;
            margin: 50px 0 30px;
        }
       
        .greeting-text {
            padding: 20px;
            font-size: 16px;
        }
    }

    @media (max-width: 600px) {
        .photo-display {
            gap: 20px;
        }
       
        .photo-frame {
            width: 200px;
            height: 250px;
        }
       
        .holiday-title {
            font-size: 1.8rem;
        }
       
        .frame-front::before {
            font-size: 40px;
        }
       
        .frame-front::after {
            font-size: 14px;
        }
    }

    @media (max-width: 480px) {
        .photo-frame {
            width: 150px;
            height: 200px;
        }
       
        .holiday-title {
            font-size: 1.5rem;
            margin: 40px 0 20px;
        }
       
        .greeting-text {
            font-size: 14px;
            padding: 15px;
        }
    }
</style>

<div class="holiday-card-2024">
    <!-- Гирлянда -->
    <div class="garland">
        <div class="wire"></div>
        <div class="light"></div>
        <div class="light"></div>
        <div class="light"></div>
        <div class="light"></div>
        <div class="light"></div>
        <div class="light"></div>
        <div class="light"></div>
        <div class="light"></div>
        <div class="light"></div>
    </div>

    <!-- Снежинки -->
    <div class="snowflakes">
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
    </div>

    <!-- Заголовок -->
    <h1 class="holiday-title">Счастливого Рождества!</h1>

    <!-- Фотографии -->
    <div class="photo-display">
        <!-- Фото 1 -->
        <div class="photo-frame" onclick="this.classList.toggle('active')">
            <div class="frame-front"></div>
            <div class="frame-back">
                <img src="https://upforme.ru/uploads/001b/ee/60/4/195143.png"
                     alt="Рождественский ужин" class="photo">
                <div class="photo-caption">Теплый семейный вечер</div>
            </div>
        </div>

        <!-- Фото 2 -->
        <div class="photo-frame" onclick="this.classList.toggle('active')">
            <div class="frame-front"></div>
            <div class="frame-back">
                <img src="https://upforme.ru/uploads/001b/ee/60/4/49762.png"
                     alt="Рождественские подарки" class="photo">
                <div class="photo-caption">Волшебные подарки</div>
            </div>
        </div>
    </div>

    <!-- Текст поздравления -->
    <div class="greeting-text">
        <p>В этот светлый праздник Рождества</p>
        <p class="highlight">Пусть ангелы хранят ваш дом от зла,</p>
        <p>Пусть в сердце будет радость и покой,</p>
        <p>А жизнь наполнится любовью и теплом!</p>
        <p>Пусть каждый день дарит улыбки и удачу,</p>
        <p>А рождественское чудо коснется плеча!</p>
       
        <div class="signature">С любовью и наилучшими пожеланиями!</div>
    </div>
</div>[/html]

0

9

тест

[html]<style>
    .holiday-card-2024 {
        position: relative;
        width: 800px;
        max-width: 100%;       
background: url('https://i.pinimg.com/1200x/09/0f/a6/090fa65c96f052d3cd9a8a5396f1bf60.jpg') center/cover no-repeat;   
        border-radius: 25px;
        padding: 40px;
        margin: 0px auto;
        overflow: hidden;
    }

    /* Гирлянда сверху */
    .garland {
        position: absolute;
        top: 5px;
        left: 0;
        width: 100%;
        height: 50px;
        overflow: hidden;
        z-index: 10;
    }

    .light {
        position: absolute;
        width: 20px;
        height: 20px;
        border-radius: 50%;
        top: 10px;
        animation: blink 3s infinite;
        box-shadow:
            0 0 10px currentColor,
            0 0 20px currentColor;
    }

    /* Цвета лампочек */
/* Теплая палитра */
.garland .light:nth-child(1) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(2) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(3) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(5) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(6) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(7) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }

.garland .light:nth-child(11) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(12) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(9) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(13) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(8) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(14) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(10) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }

.garland .light:nth-child(20) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(16) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(19) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(15) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(18) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(17) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }

/* Автоматическая расстановка 20 лампочек */
.garland .light:nth-child(1) { left: 2.5%; animation-delay: 0s; }
.garland .light:nth-child(2) { left: 7.5%; animation-delay: 0.15s; }
.garland .light:nth-child(3) { left: 12.5%; animation-delay: 0.3s; }
.garland .light:nth-child(4) { left: 17.5%; animation-delay: 0.45s; }
.garland .light:nth-child(5) { left: 22.5%; animation-delay: 0.6s; }
.garland .light:nth-child(6) { left: 27.5%; animation-delay: 0.75s; }
.garland .light:nth-child(7) { left: 32.5%; animation-delay: 0.9s; }
.garland .light:nth-child(8) { left: 37.5%; animation-delay: 1.05s; }
.garland .light:nth-child(9) { left: 42.5%; animation-delay: 1.2s; }
.garland .light:nth-child(10) { left: 47.5%; animation-delay: 1.35s; }
.garland .light:nth-child(11) { left: 52.5%; animation-delay: 1.5s; }
.garland .light:nth-child(12) { left: 57.5%; animation-delay: 1.65s; }
.garland .light:nth-child(13) { left: 62.5%; animation-delay: 1.8s; }
.garland .light:nth-child(14) { left: 67.5%; animation-delay: 1.95s; }
.garland .light:nth-child(15) { left: 72.5%; animation-delay: 2.1s; }
.garland .light:nth-child(16) { left: 77.5%; animation-delay: 2.25s; }
.garland .light:nth-child(17) { left: 82.5%; animation-delay: 2.4s; }
.garland .light:nth-child(18) { left: 87.5%; animation-delay: 2.55s; }
.garland .light:nth-child(19) { left: 92.5%; animation-delay: 2.7s; }
.garland .light:nth-child(20) { left: 97.5%; animation-delay: 2.85s; }

    @keyframes blink {
        0%, 100% { opacity: 0.3; transform: scale(0.8); }
        50% { opacity: 1; transform: scale(1.2); }
    }

    /* Провод гирлянды */
    .wire {
        position: absolute;
        top: 20px;
        left: 0;
        width: 100%;
        height: 2px;
        background: linear-gradient(90deg,
            transparent 0%,
            #d4af37 10%,
            #d4af37 90%,
            transparent 100%);
        box-shadow: 0 2px 5px rgba(0,0,0,0.5);
    }

    /* Контейнер для фотографий - УПРОЩЕННЫЙ ВАРИАНТ */
    .photo-display {
        display: flex;
        justify-content: center;
        gap: 40px;
        margin: 10px 0;
        flex-wrap: wrap;
    }

    /* Стиль для фото-рамок - БЕЗ ПЕРЕВОРОТА */
    .photo-frame {
        width: 300px;
        height: 350px;
        position: relative;
        cursor: pointer;
        border-radius: 15px;     
        transition: transform 0.5s ease, box-shadow 0.5s ease;       
    }

    .photo-frame:hover {
        transform: translateY(-10px) scale(1.02);
        box-shadow:
            0 15px 30px rgba(0, 0, 0, 0.5),
            0 0 30px rgba(212, 175, 55, 0.3);
    }

    /* Закрытое состояние - рубашка с эффектом свечения */
    .frame-cover {
        position: absolute;
        width: 100%;
        height: 100%;
        background: linear-gradient(135deg, #734c35e2, #2d3c3dcd);
        border-radius: 12px;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
        z-index: 2;
       
    }

    .frame-cover::before {
        content: '';
        position: absolute;
        width: 0;
        height: 0;
        background: radial-gradient(circle, #2b8ab3e2 0%, transparent 70%);
        border-radius: 50%;
        transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
        opacity: 0.8;
    }

    .frame-cover.active::before {
        width: 600px;
        height: 600px;
        animation: colorSpread 0.8s forwards;
    }

    @keyframes colorSpread {
        0% {
            transform: scale(0);
            opacity: 0.8;
        }
        100% {
            transform: scale(1);
            opacity: 0;
        }
    }

    .cover-icon {
        font-size: 50px;
        color: #ffd700;
        margin-bottom: 0px;
        opacity: 0.9;
        transition: transform 0.3s;
    }

    .photo-frame:hover .cover-icon {
        transform: scale(1.1);
    }

    .cover-text {
        color: #f2dfc9;
        font-size: 18px;
        text-align: center;
        padding: 0 20px;
        text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
    }

    /* Открытое состояние - фото */
    .photo-content {
        position: absolute;
        width: 100%;
        height: 100%;
        background: #fff;
        border-radius: 12px;
        overflow: hidden;
        opacity: 0;
        transform: scale(0.9);
        transition: opacity 0.5s 0.3s, transform 0.5s 0.3s;
        z-index: 1;
    }

    .frame-cover.active {
        opacity: 0;
        pointer-events: none;
    }

    .frame-cover.active + .photo-content {
        opacity: 1;
        transform: scale(1);
    }

    .photo {
        width: 100%;
        height: 100%;
        object-fit: cover;
        transition: transform 0.5s;
    }

    .photo-caption {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        background: #131712e2;
        color: #f5af5bc4;
        padding: 15px;
        text-align: center;
        font-size: 16px;
        transform: translateY(100%);
        transition: transform 0.3s;
        border-top: 2px solid #131712e2;
    }

    .photo-content:hover .photo-caption {
        transform: translateY(0);
    }

    /* Текст поздравления */
 

    /* Подпись */
    .signature {
        text-align: right;
        margin-top: 5px;
        color: #ffd700;
        font-style: italic;
        font-size: 20px;
        padding-right: 20px;
        position: relative;
    }

    .signature::before {
        content: '~';
        margin-right: 10px;
        font-size: 24px;
    }

    /* Снежинки */
    .snowflakes {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
        z-index: 1;
    }

    .snowflake {
        position: absolute;
        background: white;
        border-radius: 50%;
        animation: snowFall 15s linear infinite;
        opacity: 0.7;
        top: -10px;
    }

    @keyframes snowFall {
        0% {
            transform: translateY(0) translateX(0) rotate(0deg);
            opacity: 0.8;
        }
        100% {
            transform: translateY(500px) translateX(100px) rotate(360deg);
            opacity: 0;
        }
    }

    /* Создаем снежинки */
    .snowflake:nth-child(1) { left: 10%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 0s; }
    .snowflake:nth-child(2) { left: 20%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 1s; }
    .snowflake:nth-child(3) { left: 30%; width: 5px; height: 5px; animation-duration: 14s; animation-delay: 2s; }
    .snowflake:nth-child(4) { left: 40%; width: 7px; height: 7px; animation-duration: 9s; animation-delay: 3s; }
    .snowflake:nth-child(5) { left: 50%; width: 4px; height: 4px; animation-duration: 13s; animation-delay: 4s; }
    .snowflake:nth-child(6) { left: 60%; width: 6px; height: 6px; animation-duration: 11s; animation-delay: 5s; }
    .snowflake:nth-child(7) { left: 70%; width: 5px; height: 5px; animation-duration: 15s; animation-delay: 6s; }
    .snowflake:nth-child(8) { left: 80%; width: 8px; height: 8px; animation-duration: 8s; animation-delay: 7s; }
    .snowflake:nth-child(9) { left: 90%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 8s; }

    /* Адаптивность */
    @media (max-width: 850px) {
        .holiday-card-2024 {
            width: 95%;
            padding: 10px;
        }
       
        .photo-frame {
            width: 250px;
            height: 300px;
        }
       
        .holiday-title {
            font-size: 2.2rem;
            margin:10px 0 0px;
        }
       
        .greeting-text {
            padding: 20px;
            font-size: 16px;
        }
       
        .cover-icon {
            font-size: 40px;
        }
       
        .cover-text {
            font-size: 16px;
        }
    }

    @media (max-width: 600px) {
        .photo-display {
            gap: 20px;
        }
       
        .photo-frame {
            width: 200px;
            height: 250px;
        }
       
        .holiday-title {
            font-size: 1.8rem;
        }
       
        .cover-icon {
            font-size: 35px;
        }
       
        .cover-text {
            font-size: 14px;
        }
    }

    @media (max-width: 480px) {
        .photo-frame {
            width: 150px;
            height: 200px;
        }
       
        .holiday-title {
            font-size: 1.5rem;
            margin: 10px 0 10px;
        }
       
        .greeting-text {
            font-size: 14px;
            padding: 15px;
        }
       
        .cover-icon {
            font-size: 30px;
            margin-bottom: 10px;
        }
       
        .cover-text {
            font-size: 12px;
        }
    }
</style>

<div class="holiday-card-2024">
    <div class="garland">
    <div class="wire"></div>
    <!-- Добавьте столько лампочек, сколько нужно -->
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <!-- Еще 10 лампочек -->
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>

    </div>

    <!-- Снежинки -->
    <div class="snowflakes">
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
    </div>

    <!-- Заголовок -->
    <h1 class="holiday-title">Счастливого Рождества!</h1>

    <!-- Фотографии -->
    <div class="photo-display">
        <!-- Фото 1 -->
        <div class="photo-frame">
            <div class="frame-cover" onclick="this.classList.toggle('active')">
                <div class="cover-icon">✨</div>
                <div class="cover-text">Нажми, чтобы увидеть<br>рождественское чудо</div>
            </div>
            <div class="photo-content">
                <img src="https://upforme.ru/uploads/001b/ee/60/4/49762.png"
                     alt="Рождественский ужин" class="photo">
                <div class="photo-caption">Игристое шампанское</div>
            </div>
        </div>

        <!-- Фото 2 -->
        <div class="photo-frame">
            <div class="frame-cover" onclick="this.classList.toggle('active')">
                <div class="cover-icon">🎁</div>
                <div class="cover-text">Нажми, чтобы открыть<br>рождественский подарок</div>
            </div>
            <div class="photo-content">
                <img src="https://upforme.ru/uploads/001b/ee/60/4/195143.png"
                     alt="Рождественские подарки" class="photo">
                <div class="photo-caption">Волшебное рождество</div>
            </div>
        </div>
    </div>

   
</div>[/html]

0

10

теест

[hideprofile]

моему личному солнцу
@Neil Holt

[html]
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .card-container {
            width: 100%;
            max-width: 1200px;
            background: rgba(10, 30, 40, 0.85);
            border-radius: 25px;
            padding: 40px;
     
            position: relative;
            border: 5px solid #000;
            overflow: hidden;
        }

        /* Декоративные еловые ветки */
        .decoration {
            position: absolute;
            z-index: 1;
            pointer-events: none;
        }

        .decoration-1 {
           top: -20px;
            left: -15px;
            width: 250px;
           
        }

        .decoration-2 {
            bottom: -20px;
            right: -20px;
            width: 200px;
        }

        .decoration-3 {
            top: 50%;
            left: -30px;

            width: 150px;
        }

        .decoration-4 {
            top: 50%;
            right: -30px;
            transform: translateY(-50%) rotate(-90deg);
            width: 150px;
        }

        /* Контент */
        .card-content {
            position: relative;
            z-index: 2;
        }

        .images-container {
            display: flex;
            flex-wrap: wrap;
            justify-content: center;
            gap: 25px;
            margin-bottom: 40px;
        }

        .image-frame {
            width: 220px;
            height: 220px;
            position: relative;
            border-radius: 15px;
            overflow: hidden;
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
            transition: transform 0.5s ease;
            background: #152638ee;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .image-frame:hover {
            transform: scale(1.1);
            z-index: 10;
        }

        .image-frame img {
            width: 90%;
            height: 90%;
            object-fit: cover;
            border-radius: 10px;
            position: relative;
            z-index: 1;
        }

        /* Повороты */
        .frame-1 { transform: rotate(-5deg); }
        .frame-1:hover { transform: rotate(-5deg) scale(1.1); }
       
        .frame-2 { transform: rotate(2deg); }
        .frame-2:hover { transform: rotate(2deg) scale(1.1); }
       
        .frame-3 { transform: rotate(-3deg); }
        .frame-3:hover { transform: rotate(-3deg) scale(1.1); }
       
        .frame-4 { transform: rotate(4deg); }
        .frame-4:hover { transform: rotate(4deg) scale(1.1); }
       
        .frame-5 { transform: rotate(-2deg); }
        .frame-5:hover { transform: rotate(-2deg) scale(1.1); }

        /* Украшение рамок */
        .frame-decoration {
            position: absolute;
            width: 30px;
            height: 30px;
            z-index: 2;
            opacity: 0.8;
        }

        .top-left { top: 8px; left: 8px; }
        .top-right { top: 8px; right: 8px; }
        .bottom-left { bottom: 8px; left: 8px; }
        .bottom-right { bottom: 8px; right: 8px; }

        /* Текст */
        .greeting-text {
            background: #57785c1a;
            border-radius: 20px;
            padding: 30px;
            margin-top: 30px;
            border: 2px solid #00000075;
            backdrop-filter: blur(5px);
            color: #85cf99;
        }

        .signature {
            text-align: right;
            margin-top: 10px;
            font-style: italic;
font-family: Sunday;
            color: #ffaa2a;
           
        }

   
    </style>

<style>
    /* СТИЛИ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО В ВАШ CSS */
    .snow-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
        z-index: 5;
        overflow: hidden;
    }
   
    .snowflake {
        position: absolute;
        background: white;
        border-radius: 50%;
        top: -10px;
        opacity: 0.8;
        animation: snowFallIndividual linear infinite;
        box-shadow: 0 0 3px white;
    }
   
    @keyframes snowFallIndividual {
        0% {
            transform: translateY(-10px) translateX(0);
            opacity: 0.8;
        }
        100% {
            transform: translateY(100vh) translateX(50px);
            opacity: 0;
        }
    }
</style>

    <div class="card-container">
        <!-- Еловые ветки -->
        <img src="https://cdn-icons-png.flaticon.com/512/2508/2508203.png" alt="Еловая ветка" class="decoration decoration-1">
        <img src="https://cdn-icons-png.flaticon.com/512/3835/3835818.png" alt="Еловая ветка" class="decoration decoration-2">
        <img src="https://cdn-icons-png.flaticon.com/512/16775/16775136.png" alt="Еловая ветка" class="decoration decoration-3">
        <img src="https://cdn-icons-png.flaticon.com/512/6278/6278313.png" alt="Еловая ветка" class="decoration decoration-4">

        <!-- Снег БЕЗ JavaScript -->
        <div class="snow-container">
            <!-- 20 снежинок, созданных через HTML -->
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
            <div class="snowflake"></div>
        </div>

        <div class="card-content">
           
            <div class="images-container">
                <!-- 5 фото -->
                <div class="image-frame frame-1">
                    <div class="frame-decoration top-left">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/80567.png" alt="Новогоднее фото 1">
                </div>
               
                <div class="image-frame frame-2">
                    <div class="frame-decoration top-right">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/867155.png" alt="Новогоднее фото 2">
                </div>
               
                <div class="image-frame frame-3">
                    <div class="frame-decoration bottom-right">❄️</div>
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/122288.jpg" alt="Новогоднее фото 3">
                </div>
               

           
            <div class="greeting-text">
            <table>
            <tr>
                <td>Кай и Нил, пусть Новый год как тик-ток<br>
Лишь веселье, драйв и смех несёт,<br>
Чтоб в ленте жизни — только хайп и лайки,<br>
И чтоб хейтеры сторонкой обошли

</td>
                <td>Пусть любовь ваша — как топовый сериал,<br>
Где сюжет крут, а хэппи-енд — навек,<br>
И каждый день как новая серия,<br>
Что дарит радость, страсть и человек.
</td>
            </tr>
    </table>
                <div class="signature">С новым годом от целовательного Кая!</div>
            </div>
        </div>
    </div>

<!-- СКРИПТ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО ПОСЛЕ ОТКРЫТКИ -->
<script>
// Простой скрипт для создания снежинок
(function() {
    // Ждем немного чтобы все загрузилось
    setTimeout(function() {
        const snowContainer = document.querySelector('.snow-container');
        if (!snowContainer) {
            console.error('Не найден .snow-container');
            return;
        }
       
        // Очищаем если что-то есть
        snowContainer.innerHTML = '';
       
        // Создаем 60 снежинок (можно изменить количество)
        for (let i = 0; i < 60; i++) {
            const snowflake = document.createElement('div');
            snowflake.className = 'snowflake';
           
            // Случайные параметры
            const left = Math.random() * 100; // 0-100%
            const size = Math.random() * 6 + 3; // 3-9px
            const duration = Math.random() * 10 + 5; // 5-15 секунд
            const delay = Math.random() * 20; // 0-20 секунд
            const opacity = 0.5 + Math.random() * 0.5; // 0.5-1
           
            // Применяем стили
            snowflake.style.left = left + '%';
            snowflake.style.width = size + 'px';
            snowflake.style.height = size + 'px';
            snowflake.style.animationDuration = duration + 's';
            snowflake.style.animationDelay = delay + 's';
            snowflake.style.opacity = opacity;
           
            snowContainer.appendChild(snowflake);
        }
       
        console.log('Снег создан: ' + snowContainer.children.length + ' снежинок');
    }, 100);
})();
</script>
[/html]

оригиналы изображений

https://upforme.ru/uploads/001b/ee/60/4/80567.png

https://upforme.ru/uploads/001b/ee/60/4/867155.png

https://upforme.ru/uploads/001b/ee/60/4/122288.jpg

0

11

@Glenn Gordon с праздником тебя!
Пусть все идеи воплощаются и радуют сердечко)

от скромника Кая

[html]<div class="gothic-christmas-card">
  <div class="card-background"></div>
  <div class="decoration left"></div>
  <div class="decoration right"></div>
 
  <div class="image-card second">
    <img src="https://upforme.ru/uploads/001b/ee/60/4/795286.png" >
  </div>
<div class="image-card first">
    <img src="https://upforme.ru/uploads/001b/ee/60/4/721902.png" >
  </div>
</div>

<style>
  .gothic-christmas-card {
    position: relative;
    width: 600px;
    height: 400px;
    margin: 20px auto;
    overflow: hidden;
    font-family: 'Times New Roman', serif;
  }

  .card-background {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url('https://i.pinimg.com/originals/5a/08/b3/5a08b3b4baffe5e8dd04d1e90b6249fc.gif') center/cover no-repeat;
    filter: brightness(0.8);
  }

  .decoration {
    position: absolute;
    width: 80px;
    height: 100%;
    background-repeat: repeat-y;
    opacity: 0.7;
    z-index: 2;
  }

  .decoration.left {
    left: 0;
    background:  left top;
  }

  .decoration.right {
    right: 0;
    background:  right top;
  }

  .image-card {
    position: absolute;
    width: 280px;
    height: 220px;
    border-radius: 12px;
    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
    overflow: hidden;
    transform: rotate(-5deg);
    transition: transform 0.3s ease;
  }

  .image-card img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  .image-card.first {
    top: 100px;
    left: 80px;
  }

  .image-card.second {
    top: 120px;
    right: 80px;
    transform: rotate(7deg);
  }

  .image-card:hover {
    transform: scale(1.05) rotate(0deg);
    z-index: 3;
  }
</style>
<div class="christmas-card">
  <div class="card-background"></div>
  <div class="decoration left-decoration"></div>
  <div class="decoration right-decoration"></div>
  <div class="main-image-container">
    <img src="https://upforme.ru/uploads/001b/ee/60/4/146500.png"  class="main-image">
  </div>
</div>

<style>
  .christmas-card {
    position: relative;
    width: 600px;
    height: 400px;
    margin: 20px auto;
    overflow: hidden;
    border-radius: 15px;
    box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
  }

  .card-background {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url('https://i.pinimg.com/originals/9c/1a/59/9c1a595d7d7a2774150240668dc0cdce.gif') center/cover no-repeat;
    filter: brightness(0.7) saturate(1.2);
  }

  .decoration {
    position: absolute;
    width: 60px;
    height: 100%;
    z-index: 2;
  }

  .left-decoration {
    left: 0;
    background: url('https://example.com/left-fir-branch.png') left top / contain no-repeat;
  }

  .right-decoration {
    right: 0;
    background: url('https://example.com/right-fir-branch.png') right top / contain no-repeat;
  }

  .main-image-container {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) rotate(-5deg);
    width: 70%;
    height: 70%;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
    z-index: 3;
    transition: transform 0.4s ease, box-shadow 0.4s ease;

  }

  .main-image-container:hover {
    transform: translate(-50%, -50%) scale(1.05);
    box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
  }

  .main-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
  }

  /* Адаптивность для мобильных */
  @media (max-width: 768px) {
    .christmas-card {
      width: 95%;
      height: auto;
      padding-top: 66.67%; /* соотношение 3:2 */
    }
   
    .main-image-container {
      width: 80%;
      height: 80%;
    }
   
    .decoration {
      width: 40px;
    }
  }
</style>
[/html]

0

12

[html]

    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body1 {
            font-family: 'Georgia', serif;
            background: linear-gradient(135deg, #1a0f0f 0%, #2c1810 100%);
            min-height: 100vh;
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 20px;
        }

        /* Подложка */
        .card-container {
            position: relative;
            width: 100%;
            background:   url('https://upforme.ru/uploads/001b/ee/60/4/33609.png') #c9ffe0 ;
           background-repeat: repeat;
            border-radius: 30px;
            box-shadow: 0 30px 60px rgba(0, 0, 0, 0.8);
            border: 15px solid #282e2b;
            padding: 10px;
            display: flex;
            flex-direction: column;
            align-items: center;
            overflow: hidden;
        }

        /* Заголовок */
        .title2 {
            text-align: center;
            margin-bottom: 10px;
            color: #8affd4;
            text-shadow: 3px 3px 5px rgba(0, 0, 0, 0.7);
            font-size: 3rem;
            font-family: 'Cinzel', serif;
            padding: 10px;
            border-bottom: 2px solid #1a4a2f;
            width: 100%;
        }

        /* Контейнер для карт */
        .cards-spread {
            display: flex;
            flex-wrap: wrap;
            justify-content: center;
            gap: 20px;
            max-width: 1200px;
            margin: 0 auto;
            position: relative;
            z-index: 2;
        }

        /* Стиль карты */
        .tarot-card {
            width: 180px;
            height: 280px;
            cursor: pointer;
            transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
            transform-style: preserve-3d;
            border-radius: 12px;
            position: relative;
            transform-origin: center center;
        }

        /* Лицевая и обратная стороны */
        .card-front,
        .card-back {
            position: absolute;
            width: 100%;
            height: 100%;
            backface-visibility: hidden;
            border-radius: 12px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            padding: 15px;
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
        }

        /* Рубашка карты */
        .card-back {
            background: linear-gradient(135deg, #2a6945 0%, #193324 100%);
            border: 4px solid #282e2b;
            transform: rotateY(0deg);
        }

        .card-back::before {
            content: '❄';
            font-size: 60px;
            color: #8affd4;
            opacity: 0.7;
            margin-bottom: 10px;
        }

        .card-back::after {
            content: 'Нажмите';
            position: absolute;
            bottom: 20px;
            color: #8affd4;
            font-size: 14px;
            opacity: 0.8;
        }

        /* Лицевая сторона */
        .card-front {
            background: #588a6e;
            transform: rotateY(180deg);
            border: 3px solid #282e2b;
            overflow: hidden;
        }

        .card-image {
            width: 100%;
            height: 65%;
            object-fit: cover;
            border-radius: 8px;
            margin-bottom: 10px;
            border: 2px solid #5d4037;
        }

        .card-name {
            font-size: 16px;
            color: #282e2b;
            text-align: center;
            font-weight: bold;
            margin-bottom: 8px;
            font-family: Caveat;
        }

        .card-message {
            font-size: 9px;
            color: #282e2b;
            text-align: center;
            line-height: 1.3;
        }

        /* Анимация при наведении */
        .tarot-card:hover {
            transform: translateY(-20px) scale(1.05);
            z-index: 10;
        }

        /* Анимация переворота */
        .tarot-card.flipped {
            transform: rotateY(180deg) translateY(-40px) scale(1.1);
            z-index: 20 !important;
        }

        /* Подпись */
        .footer {
            margin-top: 10px;
            text-align: center;
            color: #8affd4;
            font-size: 18px;
            font-family: 'Cinzel', serif;
            padding: 10px;
            border-top: 2px solid #1a4a2f;
            width: 100%;
        }

        /* Декоративные снежинки */
        .snowflake {
            position: absolute;
            background: white;
            border-radius: 50%;
            opacity: 0.8;
            animation: fall linear infinite;
            pointer-events: none;
            z-index: 1;
        }

        @keyframes fall {
            0% { transform: translateY(-100px) translateX(0); }
            100% { transform: translateY(1000px) translateX(100px); opacity: 0; }
        }

        /* Адаптивность */
        @media (max-width: 1200px) {
            .cards-spread {
                max-width: 900px;
            }
           
            .tarot-card {
                width: 150px;
                height: 230px;
            }
        }

        @media (max-width: 768px) {
            .cards-spread {
                gap: 15px;
            }
           
            .tarot-card {
                width: 130px;
                height: 200px;
            }
           
            .title {
                font-size: 2rem;
            }
           
            .card-container {
                padding: 20px;
            }
        }

        @media (max-width: 480px) {
            .cards-spread {
                gap: 10px;
            }
           
            .tarot-card {
                width: 110px;
                height: 170px;
            }
           
            .card-back::before {
                font-size: 40px;
            }
           
            .card-name {
                font-size: 14px;
            }
        }
    </style>
    <link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&display=swap" rel="stylesheet">
</head>
<body>
    <div class="card-container">
        <!-- Снег -->
        <div id="snow"></div>
       
        <div class="title2">🎄 Предсказания 🎄</div>
        <br>
        <div class="cards-spread">

           
            <!-- Карта 3 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/748620.png"
                         alt="Свечи" class="card-image">
                    <div class="card-name">НЕОЖИДАННОЕ СЧАСТЬЕ</div>
                    <div class="card-message">прямо в руки упадет желанный подарок</div>
                </div>
            </div>
           
            <!-- Карта 4 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/967020.png"
                         alt="Ужин" class="card-image">
                    <div class="card-name">СЕМЕЙНЫЙ ОЧАГ</div>
                    <div class="card-message">Тепло дома согреет весь год</div>
                </div>
            </div>
           
            <!-- Карта 5 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/152877.png"
                         alt="Звезда" class="card-image">
                    <div class="card-name">ВИФЛЕЕМСКАЯ ЗВЕЗДА</div>
                    <div class="card-message">Мечта станет реальностью</div>
                </div>
            </div>
           
            <!-- Карта 6 -->
            <div class="tarot-card" onclick="flipCard(this)">
                <div class="card-back"></div>
                <div class="card-front">
                    <img src="https://upforme.ru/uploads/001b/ee/60/4/766331.png"
                         alt="Ангел" class="card-image">
                    <div class="card-name">АНГЕЛ-ХРАНИТЕЛЬ</div>
                    <div class="card-message">Все невзгоды закроет собой</div>
                </div>
            </div>
        </div>
       
        <div class="footer">
            <p>Нажмите на карту, чтобы узнать предсказание</p>
            <p>HAPPY NEW YEAR!!</p>
        </div>
    </div>

    <script>
        // Функция переворота карты
        function flipCard(card) {
            // Если карта уже перевернута - возвращаем обратно
            if (card.classList.contains('flipped')) {
                card.classList.remove('flipped');
            } else {
                // Закрываем все другие карты
                document.querySelectorAll('.tarot-card.flipped').forEach(otherCard => {
                    if (otherCard !== card) {
                        otherCard.classList.remove('flipped');
                    }
                });
                // Открываем выбранную карту
                card.classList.add('flipped');
            }
        }

        // Создаем снег
        function createSnow() {
            const snowContainer = document.getElementById('snow');
            for (let i = 0; i < 40; i++) {
                const snowflake = document.createElement('div');
                snowflake.className = 'snowflake';
               
                const size = Math.random() * 5 + 2;
                const left = Math.random() * 100;
                const duration = Math.random() * 8 + 8;
                const delay = Math.random() * 15;
               
                snowflake.style.cssText = `
                    width: ${size}px;
                    height: ${size}px;
                    left: ${left}%;
                    top: -20px;
                    animation-duration: ${duration}s;
                    animation-delay: ${delay}s;
                    opacity: ${0.4 + Math.random() * 0.4};
                `;
               
                snowContainer.appendChild(snowflake);
            }
        }

        // Запускаем снег при загрузке
        document.addEventListener('DOMContentLoaded', createSnow);

        // Закрытие карты при клике вне карты
        document.addEventListener('click', function(event) {
            if (!event.target.closest('.tarot-card')) {
                document.querySelectorAll('.tarot-card.flipped').forEach(card => {
                    card.classList.remove('flipped');
                });
            }
        });
    </script>
[/html]

0

13

[html]<style>
    .holiday-card-2024 {
        position: relative;
        width: 800px;
        max-width: 100%;       
background: url('https://i.pinimg.com/1200x/09/0f/a6/090fa65c96f052d3cd9a8a5396f1bf60.jpg') center/cover no-repeat;   
        border-radius: 25px;
        padding: 40px;
        margin: 0px auto;
        overflow: hidden;
    }

    /* Гирлянда сверху */
    .garland {
        position: absolute;
        top: 5px;
        left: 0;
        width: 100%;
        height: 50px;
        overflow: hidden;
        z-index: 10;
    }

    .light {
        position: absolute;
        width: 20px;
        height: 20px;
        border-radius: 50%;
        top: 10px;
        animation: blink 3s infinite;
        box-shadow:
            0 0 10px currentColor,
            0 0 20px currentColor;
    }

    /* Цвета лампочек */
/* Теплая палитра */
.garland .light:nth-child(1) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(2) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(3) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(5) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(6) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(7) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }

.garland .light:nth-child(11) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(12) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(9) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(13) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(8) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(14) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(10) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }

.garland .light:nth-child(20) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(16) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(19) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(15) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(18) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(17) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }

/* Автоматическая расстановка 20 лампочек */
.garland .light:nth-child(1) { left: 2.5%; animation-delay: 0s; }
.garland .light:nth-child(2) { left: 7.5%; animation-delay: 0.15s; }
.garland .light:nth-child(3) { left: 12.5%; animation-delay: 0.3s; }
.garland .light:nth-child(4) { left: 17.5%; animation-delay: 0.45s; }
.garland .light:nth-child(5) { left: 22.5%; animation-delay: 0.6s; }
.garland .light:nth-child(6) { left: 27.5%; animation-delay: 0.75s; }
.garland .light:nth-child(7) { left: 32.5%; animation-delay: 0.9s; }
.garland .light:nth-child(8) { left: 37.5%; animation-delay: 1.05s; }
.garland .light:nth-child(9) { left: 42.5%; animation-delay: 1.2s; }
.garland .light:nth-child(10) { left: 47.5%; animation-delay: 1.35s; }
.garland .light:nth-child(11) { left: 52.5%; animation-delay: 1.5s; }
.garland .light:nth-child(12) { left: 57.5%; animation-delay: 1.65s; }
.garland .light:nth-child(13) { left: 62.5%; animation-delay: 1.8s; }
.garland .light:nth-child(14) { left: 67.5%; animation-delay: 1.95s; }
.garland .light:nth-child(15) { left: 72.5%; animation-delay: 2.1s; }
.garland .light:nth-child(16) { left: 77.5%; animation-delay: 2.25s; }
.garland .light:nth-child(17) { left: 82.5%; animation-delay: 2.4s; }
.garland .light:nth-child(18) { left: 87.5%; animation-delay: 2.55s; }
.garland .light:nth-child(19) { left: 92.5%; animation-delay: 2.7s; }
.garland .light:nth-child(20) { left: 97.5%; animation-delay: 2.85s; }

    @keyframes blink {
        0%, 100% { opacity: 0.3; transform: scale(0.8); }
        50% { opacity: 1; transform: scale(1.2); }
    }

    /* Провод гирлянды */
    .wire {
        position: absolute;
        top: 20px;
        left: 0;
        width: 100%;
        height: 2px;
        background: linear-gradient(90deg,
            transparent 0%,
            #d4af37 10%,
            #d4af37 90%,
            transparent 100%);
        box-shadow: 0 2px 5px rgba(0,0,0,0.5);
    }

    /* Контейнер для фотографий - УПРОЩЕННЫЙ ВАРИАНТ */
    .photo-display {
        display: flex;
        justify-content: center;
        gap: 40px;
        margin: 10px 0;
        flex-wrap: wrap;
    }

    /* Стиль для фото-рамок - БЕЗ ПЕРЕВОРОТА */
    .photo-frame {
        width: 300px;
        height: 350px;
        position: relative;
        cursor: pointer;
        border-radius: 15px;     
        transition: transform 0.5s ease, box-shadow 0.5s ease;       
    }

    .photo-frame:hover {
        transform: translateY(-10px) scale(1.02);
        box-shadow:
            0 15px 30px rgba(0, 0, 0, 0.5),
            0 0 30px rgba(212, 175, 55, 0.3);
    }

    /* Закрытое состояние - рубашка с эффектом свечения */
    .frame-cover {
        position: absolute;
        width: 100%;
        height: 100%;
        background: linear-gradient(135deg, #734c35e2, #2d3c3dcd);
        border-radius: 12px;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
        z-index: 2;
       
    }

    .frame-cover::before {
        content: '';
        position: absolute;
        width: 0;
        height: 0;
        background: radial-gradient(circle, #2b8ab3e2 0%, transparent 70%);
        border-radius: 50%;
        transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
        opacity: 0.8;
    }

    .frame-cover.active::before {
        width: 600px;
        height: 600px;
        animation: colorSpread 0.8s forwards;
    }

    @keyframes colorSpread {
        0% {
            transform: scale(0);
            opacity: 0.8;
        }
        100% {
            transform: scale(1);
            opacity: 0;
        }
    }

    .cover-icon {
        font-size: 50px;
        color: #ffd700;
        margin-bottom: 0px;
        opacity: 0.9;
        transition: transform 0.3s;
    }

    .photo-frame:hover .cover-icon {
        transform: scale(1.1);
    }

    .cover-text {
        color: #f2dfc9;
        font-size: 18px;
        text-align: center;
        padding: 0 20px;
        text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
    }

    /* Открытое состояние - фото */
    .photo-content {
        position: absolute;
        width: 100%;
        height: 100%;
        background: #fff;
        border-radius: 12px;
        overflow: hidden;
        opacity: 0;
        transform: scale(0.9);
        transition: opacity 0.5s 0.3s, transform 0.5s 0.3s;
        z-index: 1;
    }

    .frame-cover.active {
        opacity: 0;
        pointer-events: none;
    }

    .frame-cover.active + .photo-content {
        opacity: 1;
        transform: scale(1);
    }

    .photo {
        width: 100%;
        height: 100%;
        object-fit: cover;
        transition: transform 0.5s;
    }

    .photo-caption {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        background: #131712e2;
        color: #f5af5bc4;
        padding: 15px;
        text-align: center;
        font-size: 16px;
        transform: translateY(100%);
        transition: transform 0.3s;
        border-top: 2px solid #131712e2;
    }

    .photo-content:hover .photo-caption {
        transform: translateY(0);
    }

    /* Текст поздравления */
 

    /* Подпись */
    .signature {
        text-align: right;
        margin-top: 5px;
        color: #ffd700;
        font-style: italic;
        font-size: 20px;
        padding-right: 20px;
        position: relative;
    }

    .signature::before {
        content: '~';
        margin-right: 10px;
        font-size: 24px;
    }

    /* Снежинки */
    .snowflakes {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
        z-index: 1;
    }

    .snowflake {
        position: absolute;
        background: white;
        border-radius: 50%;
        animation: snowFall 15s linear infinite;
        opacity: 0.7;
        top: -10px;
    }

    @keyframes snowFall {
        0% {
            transform: translateY(0) translateX(0) rotate(0deg);
            opacity: 0.8;
        }
        100% {
            transform: translateY(500px) translateX(100px) rotate(360deg);
            opacity: 0;
        }
    }

    /* Создаем снежинки */
    .snowflake:nth-child(1) { left: 10%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 0s; }
    .snowflake:nth-child(2) { left: 20%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 1s; }
    .snowflake:nth-child(3) { left: 30%; width: 5px; height: 5px; animation-duration: 14s; animation-delay: 2s; }
    .snowflake:nth-child(4) { left: 40%; width: 7px; height: 7px; animation-duration: 9s; animation-delay: 3s; }
    .snowflake:nth-child(5) { left: 50%; width: 4px; height: 4px; animation-duration: 13s; animation-delay: 4s; }
    .snowflake:nth-child(6) { left: 60%; width: 6px; height: 6px; animation-duration: 11s; animation-delay: 5s; }
    .snowflake:nth-child(7) { left: 70%; width: 5px; height: 5px; animation-duration: 15s; animation-delay: 6s; }
    .snowflake:nth-child(8) { left: 80%; width: 8px; height: 8px; animation-duration: 8s; animation-delay: 7s; }
    .snowflake:nth-child(9) { left: 90%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 8s; }

    /* Адаптивность */
    @media (max-width: 850px) {
        .holiday-card-2024 {
            width: 95%;
            padding: 10px;
        }
       
        .photo-frame {
            width: 250px;
            height: 300px;
        }
       
        .holiday-title {
            font-size: 2.2rem;
            margin:10px 0 0px;
        }
       
        .greeting-text {
            padding: 20px;
            font-size: 16px;
        }
       
        .cover-icon {
            font-size: 40px;
        }
       
        .cover-text {
            font-size: 16px;
        }
    }

    @media (max-width: 600px) {
        .photo-display {
            gap: 20px;
        }
       
        .photo-frame {
            width: 200px;
            height: 250px;
        }
       
        .holiday-title {
            font-size: 1.8rem;
        }
       
        .cover-icon {
            font-size: 35px;
        }
       
        .cover-text {
            font-size: 14px;
        }
    }

    @media (max-width: 480px) {
        .photo-frame {
            width: 150px;
            height: 200px;
        }
       
        .holiday-title {
            font-size: 1.5rem;
            margin: 10px 0 10px;
        }
       
        .greeting-text {
            font-size: 14px;
            padding: 15px;
        }
       
        .cover-icon {
            font-size: 30px;
            margin-bottom: 10px;
        }
       
        .cover-text {
            font-size: 12px;
        }
    }
</style>

<div class="holiday-card-2024">
    <div class="garland">
    <div class="wire"></div>
    <!-- Добавьте столько лампочек, сколько нужно -->
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <!-- Еще 10 лампочек -->
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>
    <div class="light"></div>

    </div>

    <!-- Снежинки -->
    <div class="snowflakes">
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
        <div class="snowflake"></div>
    </div>

    <!-- Заголовок -->
    <h1 class="holiday-title">Счастливого Рождества!</h1>

    <!-- Фотографии -->
    <div class="photo-display">
        <!-- Фото 1 -->
        <div class="photo-frame">
            <div class="frame-cover" onclick="this.classList.toggle('active')">
                <div class="cover-icon">✨</div>
                <div class="cover-text">Нажми, чтобы увидеть<br>рождественское чудо</div>
            </div>
            <div class="photo-content">
                <img src="https://upforme.ru/uploads/001b/ee/60/4/49762.png"
                     alt="Рождественский ужин" class="photo">
                <div class="photo-caption">Игристое шампанское</div>
            </div>
        </div>

        <!-- Фото 2 -->
        <div class="photo-frame">
            <div class="frame-cover" onclick="this.classList.toggle('active')">
                <div class="cover-icon">🎁</div>
                <div class="cover-text">Нажми, чтобы открыть<br>рождественский подарок</div>
            </div>
            <div class="photo-content">
                <img src="https://upforme.ru/uploads/001b/ee/60/4/195143.png"
                     alt="Рождественские подарки" class="photo">
                <div class="photo-caption">Волшебное рождество</div>
            </div>
        </div>
    </div>

   
</div>[/html]

0

14

та самая компания неудержимых
к приключениям готовы

[html]<style>
    /* Основной контейнер */
    .instagram-tag-photo {
        position: relative;
        display: inline-block;
        max-width: 800px;
        margin: 20px auto;
        font-family: 'Arial', sans-serif;
    }
   
    /* Рамка для фото */
    .photo-frame {
        position: relative;
        border: 15px solid #fff;
        border-radius: 10px;
        box-shadow:
            0 15px 35px rgba(0, 0, 0, 0.2),
            0 0 0 1px rgba(0, 0, 0, 0.1);
        overflow: hidden;
        background: #fff;
    }
   
    /* Основное фото */
    .main-photo {
        display: block;
        width: 100%;
        height: auto;
        cursor: crosshair;
        transition: transform 0.3s ease;
    }
   
    .main-photo:hover {
        transform: scale(1.01);
    }
   
    /* Декоративная скрепка PNG */
    .sticker-pin {
        position: absolute;
        top: -15px;
        right: 20px;
        width: 60px;
        height: 60px;
        z-index: 20;
        filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
        transform: rotate(-180deg);
        transition: transform 0.3s ease;
    }
   
    .sticker-pin:hover {
        transform: rotate(15deg) scale(1.1);
    }
   
    /* Точка-индикатор на фото */
    .tag-dot {
        position: absolute;
        width: 80px;
        height: 80px; 
        border: 1px solid #ffffff83;
        border-radius: 20%;
        cursor: pointer;
        z-index: 1;
        transition: all 0.3s ease;
       
        animation: pulse 2s infinite;
    }
   
    @keyframes pulse {
        0% { box-shadow: 0 0 0 0 #72f3fc5e; }
        70% { box-shadow: 0 0 0 10px transparent; }
        100% { box-shadow: 0 0 0 0 transparent; }
z-index: 1;
    }
   
    .tag-dot:hover {
        transform: scale(1.2);
        background: #ffffff63;
        animation: none;
border: 3px solid #ffffff83;
    }
   
    /* Плашка с именем */
    .tag-label {
        position: absolute;
        background: #000000cb;
        color: white;
        padding: 5px 15px;
        border-radius: 5px;
        font-size: 12px;
        font-weight: 500;
        white-space: nowrap;
        opacity: 0;
        visibility: hidden;
        transform: translateY(10px);
        transition: all 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55);
        z-index: 99;
       
       
       
    }
   
    /* Стрелочка у плашки */
    .tag-label::after {
        content: '';
        position: absolute;
        top: -74%;
        left: 50%;
        margin-left: -10px;
        border-width: 9px;
        border-style: solid;
        border-color:  transparent transparent  #000000cb transparent;
    }
   
    /* Показ плашки при наведении */
    .tag-dot:hover .tag-label {
        opacity: 1;
        visibility: visible;
        transform: translateY(0);
    }
   

    /* Подпись под фото */
    .photo-caption {
        margin-top: 15px;
        text-align: center;
        color: #666;
        font-size: 14px;
        font-style: italic;
        padding: 10px;
        border-top: 1px dashed #ddd;
    }
   

</style>

<div class="instagram-tag-photo">
    <!-- Декоративная скрепка -->
    <img src="https://cdn-icons-png.flaticon.com/512/2493/2493501.png"  class="sticker-pin">
   
    <!-- Рамка с фото -->
    <div class="photo-frame">
        <!-- Основное изображение -->
        <img src="https://upforme.ru/uploads/001b/ee/60/4/789356.png"
             alt="Групповое фото" class="main-photo">
       
        <!-- Точки и плашки для персонажей -->

<!-- Персонаж 3 -->
        <div class="tag-dot" style="top: 52%; left: 45%;">
            <div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
                Лили Веспера
            </div>
        </div>
<!-- Персонаж 2 -->
        <div class="tag-dot" style="top: 41%; left: 36%;">
            <div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
                Кейси Мур
            </div>
        </div>

        <!-- Персонаж 1 -->
        <div class="tag-dot" style="top: 20%; left: 32%;">
            <div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
                Нил Холт
            </div>
        </div>
       
       
       
       
       
        <!-- Персонаж 4 -->
        <div class="tag-dot" style="top: 38%; left: 53%;">
            <div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
                Кай Уиллсон
            </div>
        </div>
       
        <!-- Персонаж 5 -->
        <div class="tag-dot" style="top: 35%; left: 63%;">
            <div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
                Том Вуд
            </div>
        </div>
    </div>
   
</div>[/html]

0

15

рабочий код крафта персонажа, но только для подгрузки изображения с пк
Код:
[html]<style>
/* Основной контейнер */
.character-crafter {
    position: relative;
    width: 800px;
    max-width: 100%;
    height: 600px; /* Фиксированная высота */
    margin: 20px auto;
    font-family: 'Arial', sans-serif;
    background: transparent;
    overflow: hidden; /* Скрываем выходящее за границы */
}

/* Подложка - фон с сеткой */
.craft-background {
    position: relative; /* Меняем на relative */
    width: 100%;
    height: 100%;
    z-index: 1;
    pointer-events: none;
}

/* Основная область крафта */
.crafting-area {
    position: absolute; /* Теперь эта обертка absolute */
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 2;
    padding: 40px;
}

/* Все внутренние блоки остаются absolute */
.craft-grid-3x3,
.result-cell,
.inventory-row {
    position: absolute;
    /* остальные стили */
}
    
    /* Блок 1: Крафтовая сетка 3x3 */
    .craft-grid-3x3 {
        position: absolute;
        top: 120px; /* Настройте под свою подложку */
        left: 120px; /* Настройте под свою подложку */
        width: 270px; /* 3 ячейки по 90px */
        height: 270px;
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        grid-template-rows: repeat(3, 1fr);
        gap: 0;
        z-index: 3;
    }
    
    /* Блок 2: Итоговая ячейка */
    .result-cell {
        position: absolute;
        top: 170px; /* Настройте под свою подложку */
        left: 480px; /* Настройте под свою подложку */
        width: 90px;
        height: 90px;
        z-index: 3;
    }
    
    /* Блок 3: Инвентарь 1x9 */
    .inventory-row {
        position: absolute;
        bottom: 100px; /* Настройте под свою подложку */
        left: 120px; /* Настройте под свою подложку */
        width: 810px; /* 9 ячеек по 90px */
        height: 90px;
        display: grid;
        grid-template-columns: repeat(9, 1fr);
        grid-template-rows: 1fr;
        gap: 0;
        z-index: 3;
    }
    
    /* Общий стиль для всех ячеек */
    .craft-cell {
        position: relative;
        width: 100%;
        height: 100%;
        border: none;
        background: transparent;
        cursor: pointer;
        transition: all 0.2s ease;
        display: flex;
        align-items: center;
        justify-content: center;
        padding: 5px;
    }
    
    .craft-cell:hover {
        background: rgba(255, 255, 255, 0.1);
        transform: scale(1.05);
        z-index: 10;
    }
    
    /* Стиль для изображения внутри ячейки */
    .cell-image {
        max-width: 100%;
        max-height: 100%;
        object-fit: contain;
        display: block;
        opacity: 0;
        transition: opacity 0.3s ease;
    }
    
    .cell-image.loaded {
        opacity: 1;
    }
    
    /* Контейнер для загрузки изображений */
    .image-input-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        background: transparent;
    }
    
    /* Скрытый инпут для загрузки */
    .image-input {
        position: absolute;
        width: 100%;
        height: 100%;
        opacity: 0;
        cursor: pointer;
        z-index: 5;
    }
    
    /* Плюсик для пустой ячейки */
    .empty-cell-indicator {
        width: 30px;
        height: 30px;
        border: 2px dashed rgba(255, 255, 255, 0.3);
        border-radius: 4px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: rgba(255, 255, 255, 0.5);
        font-size: 20px;
        font-weight: bold;
        transition: all 0.3s ease;
    }
    
    .craft-cell:hover .empty-cell-indicator {
        border-color: rgba(255, 255, 255, 0.7);
        color: rgba(255, 255, 255, 0.9);
        transform: scale(1.2);
    }
    
    /* Кнопка очистки ячейки */
    .clear-cell-btn {
        position: absolute;
        top: -8px;
        right: -8px;
        width: 20px;
        height: 20px;
        background: rgba(255, 59, 48, 0.9);
        color: white;
        border: none;
        border-radius: 50%;
        font-size: 12px;
        font-weight: bold;
        cursor: pointer;
        opacity: 0;
        transform: scale(0.8);
        transition: all 0.2s ease;
        z-index: 6;
        display: flex;
        align-items: center;
        justify-content: center;
        line-height: 1;
    }
    
    .craft-cell:hover .clear-cell-btn,
    .clear-cell-btn:hover {
        opacity: 1;
        transform: scale(1);
    }
    
    .clear-cell-btn:hover {
        background: rgb(255, 59, 48);
        transform: scale(1.1);
    }
    
    /* Инструкция */
    .instructions {
        margin-top: 20px;
        padding: 15px;
        background: rgba(0, 0, 0, 0.7);
        border-radius: 8px;
        color: white;
        font-size: 14px;
        text-align: center;
        border: 1px solid rgba(255, 255, 255, 0.2);
    }
    
    .instructions h3 {
        margin: 0 0 10px 0;
        color: #4CAF50;
    }
    
    /* Адаптивность */
    @media (max-width: 950px) {
        .character-crafter {
            width: 95%;
        }
        
        .craft-grid-3x3,
        .result-cell,
        .inventory-row {
            transform: scale(0.9);
            transform-origin: top left;
        }
        
        .crafting-area {
            padding: 20px;
        }
    }
    
    @media (max-width: 700px) {
        .craft-grid-3x3,
        .result-cell,
        .inventory-row {
            transform: scale(0.7);
        }
    }
    
    @media (max-width: 500px) {
        .craft-grid-3x3,
        .result-cell,
        .inventory-row {
            transform: scale(0.6);
        }
    }
</style>

<div class="character-crafter">
    <!-- Подложка-фон -->
    <div class="craft-background">
        <!-- Вставьте ваше фоновое изображение с сеткой -->
        <img src="https://cdn.promodj.com/afs/6affb743b0bce0ba29ac568bd270b27a12%3Aresize%3A1400x1400xxjpegxffffffxnoupscale%3Asame%3A480b7b.jpg" alt="Фон для крафта">
    </div>
    
    <!-- Область крафта -->
    <div class="crafting-area">
        <!-- Блок 1: Крафтовая сетка 3x3 -->
        <div class="craft-grid-3x3" id="craftGrid">
            <!-- 9 ячеек будут созданы скриптом -->
        </div>
        
        <!-- Блок 2: Итоговая ячейка -->
        <div class="result-cell">
            <div class="craft-cell" data-cell-type="result" data-cell-id="result">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/png, image/jpeg" data-cell-id="result">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <img class="cell-image" data-cell-id="result" alt="Результат">
                <button class="clear-cell-btn" data-cell-id="result">×</button>
            </div>
        </div>
        
        <!-- Блок 3: Инвентарь 1x9 -->
        <div class="inventory-row" id="inventoryRow">
            <!-- 9 ячеек будут созданы скриптом -->
        </div>
    </div>
    
    <!-- Инструкция -->
    <div class="instructions">
        <h3>🎮 Как скрафтить персонажа:</h3>
        <p>1. Нажмите на любую ячейку и загрузите PNG изображение</p>
        <p>2. Расставьте части в сетке крафта 3×3 как хотите</p>
        <p>3. Результат появится в правой ячейке (загрузите готового персонажа)</p>
        <p>4. Используйте нижний ряд как инвентарь для запасных частей</p>
        <p>5. Нажмите × в углу ячейки, чтобы удалить изображение</p>
    </div>
</div>

<script>
    // Создаем ячейки для сетки 3x3
    const craftGrid = document.getElementById('craftGrid');
    for (let i = 0; i < 9; i++) {
        const cellId = `craft-${i}`;
        const cellHTML = `
            <div class="craft-cell" data-cell-type="craft" data-cell-id="${cellId}">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/png, image/jpeg" data-cell-id="${cellId}">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <img class="cell-image" data-cell-id="${cellId}" alt="Элемент крафта">
                <button class="clear-cell-btn" data-cell-id="${cellId}">×</button>
            </div>
        `;
        craftGrid.innerHTML += cellHTML;
    }
    
    // Создаем ячейки для инвентаря
    const inventoryRow = document.getElementById('inventoryRow');
    for (let i = 0; i < 9; i++) {
        const cellId = `inventory-${i}`;
        const cellHTML = `
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="${cellId}">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/png, image/jpeg" data-cell-id="${cellId}">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <img class="cell-image" data-cell-id="${cellId}" alt="Элемент инвентаря">
                <button class="clear-cell-btn" data-cell-id="${cellId}">×</button>
            </div>
        `;
        inventoryRow.innerHTML += cellHTML;
    }
    
    // Обработчик загрузки изображений
    document.addEventListener('change', function(e) {
        if (e.target.classList.contains('image-input')) {
            const file = e.target.files[0];
            const cellId = e.target.dataset.cellId;
            
            if (file && file.type.match('image.*')) {
                const reader = new FileReader();
                
                reader.onload = function(e) {
                    const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
                    img.src = e.target.result;
                    img.classList.add('loaded');
                    
                    // Скрываем плюсик
                    const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
                    indicator.style.opacity = '0';
                }
                
                reader.readAsDataURL(file);
            }
        }
    });
    
    // Обработчик очистки ячейки
    document.addEventListener('click', function(e) {
        if (e.target.classList.contains('clear-cell-btn')) {
            const cellId = e.target.dataset.cellId;
            const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
            const input = document.querySelector(`.image-input[data-cell-id="${cellId}"]`);
            const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
            
            // Очищаем изображение
            img.src = '';
            img.classList.remove('loaded');
            
            // Сбрасываем input
            input.value = '';
            
            // Показываем плюсик
            indicator.style.opacity = '1';
            
            e.stopPropagation();
        }
    });
    
    // Предотвращаем всплытие клика по кнопке очистки
    document.addEventListener('click', function(e) {
        if (e.target.classList.contains('clear-cell-btn')) {
            e.preventDefault();
        }
    });
</script>[/html]

0

16

[html]<style>
    /* Основной контейнер */
    .character-crafter {
        position: relative;
        width: 800px;
        max-width: 100%;
        margin: 20px auto;
        font-family: 'Arial', sans-serif;
        background: transparent;
        min-height: 600px;
        height: auto;
    }
   
    /* Подложка - фон с сеткой */
    .craft-background {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 600px;
        z-index: 1;
        pointer-events: none;
    }
   
    .craft-background img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        display: block;
    }
   
    /* Основная область крафта */
    .crafting-area {
        position: relative;
        z-index: 2;
        padding: 40px;
        height: 600px;
    }
   
    /* Блок 1: Крафтовая сетка 3x3 */
    .craft-grid-3x3 {
        position: absolute;
        top: 120px;
        left: 120px;
        width: 240px;
        height: 240px;
        display: grid;
        grid-template-columns: repeat(3, 80px);
        grid-template-rows: repeat(3, 80px);
        gap: 0;
        z-index: 3;
    }
   
    /* Блок 2: Итоговая ячейка */
    .result-cell {
        position: absolute;
        top: 170px;
        left: 480px;
        width: 80px;
        height: 80px;
        z-index: 3;
    }
   
    /* Блок 3: Инвентарь 1x9 */
    .inventory-row {
        position: absolute;
        bottom: 100px;
        left: 120px;
        width: 720px;
        height: 80px;
        display: grid;
        grid-template-columns: repeat(9, 80px);
        grid-template-rows: 80px;
        gap: 0;
        z-index: 3;
    }
   
    /* Общий стиль для всех ячеек */
    .craft-cell {
        position: relative;
        width: 80px;
        height: 80px;
        border: none;
        background: transparent;
        cursor: pointer;
        transition: all 0.2s ease;
        display: flex;
        align-items: center;
        justify-content: center;
        padding: 2px;
        overflow: hidden;
    }
   
    .craft-cell:hover {
        background: rgba(255, 255, 255, 0.1);
        transform: scale(1.05);
        z-index: 10;
    }
   
    /* Контейнер для изображения */
    .cell-image-container {
        width: 100%;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        overflow: hidden;
    }
   
    /* Изображение */
    .cell-image {
        max-width: 100%;
        max-height: 100%;
        object-fit: contain;
        display: block;
        opacity: 0;
        transition: opacity 0.3s ease;
    }
   
    .cell-image.loaded {
        opacity: 1;
    }
   
    /* Контейнер для загрузки */
    .image-input-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        background: transparent;
    }
   
    /* Скрытый инпут */
    .image-input {
        position: absolute;
        width: 100%;
        height: 100%;
        opacity: 0;
        cursor: pointer;
        z-index: 5;
    }
   
    /* Плюсик для пустой ячейки */
    .empty-cell-indicator {
        width: 30px;
        height: 30px;
        border: 2px dashed rgba(255, 255, 255, 0.3);
        border-radius: 4px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: rgba(255, 255, 255, 0.5);
        font-size: 20px;
        font-weight: bold;
        transition: all 0.3s ease;
    }
   
    .craft-cell:hover .empty-cell-indicator {
        border-color: rgba(255, 255, 255, 0.7);
        color: rgba(255, 255, 255, 0.9);
        transform: scale(1.2);
    }
   
    /* Кнопка очистки */
    .clear-cell-btn {
        position: absolute;
        top: -8px;
        right: -8px;
        width: 20px;
        height: 20px;
        background: rgba(255, 59, 48, 0.9);
        color: white;
        border: none;
        border-radius: 50%;
        font-size: 12px;
        font-weight: bold;
        cursor: pointer;
        opacity: 0;
        transform: scale(0.8);
        transition: all 0.2s ease;
        z-index: 6;
        display: flex;
        align-items: center;
        justify-content: center;
        line-height: 1;
    }
   
    .craft-cell:hover .clear-cell-btn,
    .clear-cell-btn:hover {
        opacity: 1;
        transform: scale(1);
    }
   
    .clear-cell-btn:hover {
        background: rgb(255, 59, 48);
        transform: scale(1.1);
    }
   
    /* Инструкция */
    .instructions {
        margin-top: 20px;
        padding: 15px;
        background: rgba(0, 0, 0, 0.7);
        border-radius: 8px;
        color: white;
        font-size: 14px;
        text-align: center;
        border: 1px solid rgba(255, 255, 255, 0.2);
    }
   
    .instructions h3 {
        margin: 0 0 10px 0;
        color: #4CAF50;
    }
   
    /* Загрузка по ссылке */
    .url-upload-section {
        margin-top: 20px;
        padding: 15px;
        background: rgba(0, 0, 0, 0.7);
        border-radius: 8px;
        color: white;
        border: 1px solid rgba(255, 255, 255, 0.2);
    }
   
    .url-upload-section h3 {
        margin: 0 0 10px 0;
        color: #2196F3;
        font-size: 16px;
    }
   
    .url-input-group {
        display: flex;
        gap: 10px;
        margin-bottom: 10px;
    }
   
    .url-input {
        flex: 1;
        padding: 10px;
        border: 1px solid #444;
        border-radius: 4px;
        background: rgba(255, 255, 255, 0.1);
        color: white;
        font-size: 14px;
    }
   
    .url-input::placeholder {
        color: rgba(255, 255, 255, 0.5);
    }
   
    .url-load-btn {
        padding: 10px 20px;
        background: #2196F3;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        font-weight: bold;
        transition: background 0.3s;
    }
   
    .url-load-btn:hover {
        background: #1976D2;
    }
   
    .url-hint {
        font-size: 12px;
        color: rgba(255, 255, 255, 0.6);
        margin: 0;
    }
   
    /* Активная ячейка */
    .craft-cell.active {
        box-shadow: 0 0 0 3px #4CAF50;
    }
   
    /* Уведомление */
    .craft-notification {
        position: fixed;
        top: 20px;
        right: 20px;
        padding: 12px 24px;
        border-radius: 4px;
        color: white;
        z-index: 10000;
        box-shadow: 0 4px 12px rgba(0,0,0,0.3);
        font-family: Arial, sans-serif;
        font-size: 14px;
        display: none;
    }
   
    .notification-success {
        background: #4CAF50;
        display: block;
    }
   
    .notification-error {
        background: #f44336;
        display: block;
    }
   
    /* Адаптивность */
    @media (max-width: 850px) {
        .character-crafter {
            width: 95%;
        }
       
        .craft-grid-3x3,
        .result-cell,
        .inventory-row {
            transform: scale(0.9);
            transform-origin: top left;
        }
       
        .crafting-area {
            padding: 20px;
        }
    }
</style>

<div class="character-crafter">
    <!-- Подложка-фон -->
    <div class="craft-background">
        <img src="https://i.imgur.com/placeholder-craft-bg.png" alt="Фон для крафта">
    </div>
   
    <!-- Область крафта -->
    <div class="crafting-area">
        <!-- Блок 1: Крафтовая сетка 3x3 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ -->
        <div class="craft-grid-3x3">
            <!-- Ряд 1 -->
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-0">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-0">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-0" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-0">×</button>
            </div>
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-1">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-1">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-1" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-1">×</button>
            </div>
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-2">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-2">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-2" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-2">×</button>
            </div>
           
            <!-- Ряд 2 -->
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-3">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-3">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-3" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-3">×</button>
            </div>
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-4">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-4">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-4" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-4">×</button>
            </div>
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-5">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-5">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-5" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-5">×</button>
            </div>
           
            <!-- Ряд 3 -->
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-6">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-6">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-6" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-6">×</button>
            </div>
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-7">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-7">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-7" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-7">×</button>
            </div>
            <div class="craft-cell" data-cell-type="craft" data-cell-id="craft-8">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-8">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-8" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-8">×</button>
            </div>
        </div>
       
        <!-- Блок 2: Итоговая ячейка -->
        <div class="result-cell">
            <div class="craft-cell" data-cell-type="result" data-cell-id="result">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="result">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="result" alt="Результат">
                </div>
                <button class="clear-cell-btn" data-cell-id="result">×</button>
            </div>
        </div>
       
        <!-- Блок 3: Инвентарь 1x9 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ -->
        <div class="inventory-row">
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-0">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-0">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-0" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-0">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-1">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-1">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-1" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-1">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-2">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-2">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-2" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-2">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-3">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-3">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-3" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-3">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-4">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-4">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-4" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-4">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-5">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-5">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-5" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-5">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-6">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-6">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-6" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-6">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-7">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-7">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-7" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-7">×</button>
            </div>
            <div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-8">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-8">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-8" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-8">×</button>
            </div>
        </div>
    </div>
   
    <!-- Инструкция -->
    <div class="instructions">
        <h3>🎮 Как скрафтить персонажа:</h3>
        <p>1. Кликните на любую ячейку (она станет активной)</p>
        <p>2. Загрузите PNG/JPEG изображение с компьютера или вставьте ссылку</p>
        <p>3. Используйте сетку 3×3 для сборки, правую ячейку для результата</p>
        <p>4. Нижний ряд - инвентарь для дополнительных деталей</p>
        <p>5. Нажмите × в углу ячейки, чтобы удалить изображение</p>
    </div>
   
    <!-- Загрузка по ссылке -->
    <div class="url-upload-section">
        <h3>🌐 Загрузка по ссылке</h3>
        <div class="url-input-group">
            <input type="text" class="url-input" placeholder="Вставьте ссылку на PNG/JPEG изображение">
            <button class="url-load-btn">Загрузить в активную ячейку</button>
        </div>
        <p class="url-hint">Сначала кликните на ячейку выше, затем вставьте ссылку</p>
    </div>
   
    <!-- Уведомление -->
    <div class="craft-notification" id="craftNotification"></div>
</div>

<script>
// Простой скрипт для управления
let activeCellId = null;

// Функция для показа уведомления
function showNotification(message, type) {
    const notification = document.getElementById('craftNotification');
    notification.textContent = message;
    notification.className = 'craft-notification';
    notification.classList.add(`notification-${type}`);
   
    setTimeout(() => {
        notification.style.display = 'block';
    }, 10);
   
    setTimeout(() => {
        notification.style.display = 'none';
    }, 3000);
}

// Делаем ячейку активной при клике
document.addEventListener('click', function(e) {
    // Клик по ячейке
    const cell = e.target.closest('.craft-cell');
    if (cell) {
        // Убираем активность со всех ячеек
        document.querySelectorAll('.craft-cell').forEach(c => {
            c.classList.remove('active');
        });
       
        // Делаем эту ячейку активной
        cell.classList.add('active');
        activeCellId = cell.dataset.cellId;
        console.log('Активная ячейка:', activeCellId);
    }
   
    // Клик по кнопке очистки
    if (e.target.classList.contains('clear-cell-btn')) {
        const cellId = e.target.dataset.cellId;
        const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
        const input = document.querySelector(`.image-input[data-cell-id="${cellId}"]`);
        const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
       
        if (img && input && indicator) {
            img.src = '';
            img.classList.remove('loaded');
            input.value = '';
            indicator.style.opacity = '1';
           
            showNotification('🗑️ Изображение удалено', 'success');
            e.stopPropagation();
        }
    }
   
    // Клик по кнопке загрузки по ссылке
    if (e.target.classList.contains('url-load-btn')) {
        if (!activeCellId) {
            showNotification('⚠️ Сначала выберите ячейку!', 'error');
            return;
        }
       
        const urlInput = document.querySelector('.url-input');
        const url = urlInput.value.trim();
       
        if (!url) {
            showNotification('⚠️ Введите ссылку!', 'error');
            return;
        }
       
        const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`);
        const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`);
       
        if (img && indicator) {
            // Проверяем, что это изображение
            const testImg = new Image();
            testImg.crossOrigin = 'anonymous';
           
            testImg.onload = function() {
                img.src = url;
                img.classList.add('loaded');
                indicator.style.opacity = '0';
                urlInput.value = '';
                showNotification('✅ Изображение загружено!', 'success');
            };
           
            testImg.onerror = function() {
                showNotification('❌ Не удалось загрузить изображение', 'error');
            };
           
            testImg.src = url;
        }
    }
});

// Загрузка изображений с компьютера
document.addEventListener('change', function(e) {
    if (e.target.classList.contains('image-input')) {
        const file = e.target.files[0];
        const cellId = e.target.dataset.cellId;
       
        if (file && file.type.match('image.*')) {
            const reader = new FileReader();
           
            reader.onload = function(e) {
                const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
                const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
               
                if (img && indicator) {
                    img.src = e.target.result;
                    img.classList.add('loaded');
                    indicator.style.opacity = '0';
                   
                    // Делаем эту ячейку активной
                    const cell = document.querySelector(`.craft-cell[data-cell-id="${cellId}"]`);
                    if (cell) {
                        document.querySelectorAll('.craft-cell').forEach(c => {
                            c.classList.remove('active');
                        });
                        cell.classList.add('active');
                        activeCellId = cellId;
                    }
                   
                    showNotification('✅ Изображение загружено!', 'success');
                }
            };
           
            reader.readAsDataURL(file);
        }
    }
});

// Вставка по Ctrl+V
document.addEventListener('paste', function(e) {
    if (!activeCellId) return;
   
    const pastedText = e.clipboardData.getData('text');
    if (pastedText && (pastedText.startsWith('http') || pastedText.startsWith('data:image'))) {
        e.preventDefault();
       
        const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`);
        const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`);
       
        if (img && indicator) {
            // Проверяем изображение
            const testImg = new Image();
            testImg.crossOrigin = 'anonymous';
           
            testImg.onload = function() {
                img.src = pastedText;
                img.classList.add('loaded');
                indicator.style.opacity = '0';
                showNotification('✅ Изображение вставлено!', 'success');
            };
           
            testImg.onerror = function() {
                showNotification('❌ Неверная ссылка на изображение', 'error');
            };
           
            testImg.src = pastedText;
        }
    }
});

console.log('Система крафта готова! Все ячейки созданы.');
</script>[/html]

0

17

рабочий код крафта персонажа
Код:
[html]<style>
    /* Основной контейнер */
    .character-crafter {
        position: relative;
        width: 800px;
        max-width: 100%;
        margin: 0px auto;
        font-family: 'Arial', sans-serif;
        background: transparent;
        min-height: 600px;
        height: auto;
    }
    
    /* Подложка - фон с сеткой */
    .craft-background {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 600px;
        z-index: 1;
        pointer-events: none;
    }
    
    .craft-background img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        display: block;
    }
    
    /* Основная область крафта */
    .crafting-area {
        position: relative;
        z-index: 2;
        padding: 1px;
        height: 600px;
    }
    
    /* Блок 1: Крафтовая сетка 3x3 */
    .craft-grid-3x3 {background: #1fd125;
        position: absolute;
        top: 120px;
        left: 80px;
        width: 300px;
        height: 300px;
        display: grid;
        grid-template-columns: repeat(3, 90px);
        grid-template-rows: repeat(3, 90px);
        gap: 10px; 
        z-index: 3;
    }
    
    /* Блок 2: Итоговая ячейка */
    .result-cell {
        position: absolute;
        top: 170px;
        left: 480px;
        width: 80px;
        height: 80px;
        z-index: 3;
    }
    
    /* Блок 3: Инвентарь 1x9 */
    .inventory-row {
        position: absolute;
        bottom: 100px;
        left: 60px;
        width: 720px;
        height: 80px;
        display: grid;
        grid-template-columns: repeat(9, 80px);
        grid-template-rows: 80px;
        gap: 0;
        z-index: 3;
    }
    
    /* Общий стиль для всех ячеек */
    .craft-cell {
        position: relative; background: #d18a1f;
        border: none;
     /*   background: transparent;*/
        cursor: pointer;
        transition: all 0.2s ease;
        display: flex;
        align-items: center;
        justify-content: center;
        padding: 1px;
        overflow: hidden;

    }

.block1 { width: 90px; height: 90px; background: #a21fd1; }
.block2 { width: 150px; height: 150px; background: #d11f55; }
.block3 { width: 60px; height: 60px; background: #1fa8d1; margin: 15px; }
    
    .craft-cell:hover {
        background: rgba(255, 255, 255, 0.1);
        transform: scale(1.05);
        z-index: 10;
    }
    
/* Контейнер для изображения */
.cell-image-container {
    width: 100%; /* Меняем на 100% */
    height: 100%; /* Меняем на 100% */
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    position: relative;
    border-radius: 4px; /* Опционально: скругленные углы */
}

/* Изображение - ОБРЕЗКА КВАДРАТОМ */
.cell-image {
    width: 100%; /* Занимает всю ширину */
    height: 100%; /* Занимает всю высоту */
    object-fit: cover; /* Ключевое изменение! Обрезает, сохраняя пропорции */
    display: block;
    opacity: 0;
    transition: opacity 0.3s ease;
    position: absolute;
    top: 0;
    left: 0;
}

.cell-image.loaded {
    opacity: 1;
}
    
    /* Контейнер для загрузки */
    .image-input-container {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        background: transparent;
    }
    
    /* Скрытый инпут */
    .image-input {
        position: absolute;
        width: 100%;
        height: 100%;
        opacity: 0;
        cursor: pointer;
        z-index: 5;
    }
    
    /* Плюсик для пустой ячейки */
    .empty-cell-indicator {
        width: 30px;
        height: 30px;
        border: 2px dashed rgba(255, 255, 255, 0.3);
        border-radius: 4px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: rgba(255, 255, 255, 0.5);
        font-size: 20px;
        font-weight: bold;
        transition: all 0.3s ease;
    }
    
    .craft-cell:hover .empty-cell-indicator {
        border-color: rgba(255, 255, 255, 0.7);
        color: rgba(255, 255, 255, 0.9);
        transform: scale(1.2);
    }
    
    /* Кнопка очистки */
    .clear-cell-btn {
        position: absolute;
        top: -8px;
        right: -8px;
        width: 20px;
        height: 20px;
        background: rgba(255, 59, 48, 0.9);
        color: white;
        border: none;
        border-radius: 50%;
        font-size: 12px;
        font-weight: bold;
        cursor: pointer;
        opacity: 0;
        transform: scale(0.8);
        transition: all 0.2s ease;
        z-index: 6;
        display: flex;
        align-items: center;
        justify-content: center;
        line-height: 1;
    }
    
    .craft-cell:hover .clear-cell-btn,
    .clear-cell-btn:hover {
        opacity: 1;
        transform: scale(1);
    }
    
    .clear-cell-btn:hover {
        background: rgb(255, 59, 48);
        transform: scale(1.1);
    }
    
 
    
    /* Загрузка по ссылке */
    .url-upload-section {
        margin-top: 0px;
        padding: 0px;
        background: rgba(0, 0, 0, 0.7);
        border-radius: 8px;
        color: white;
        border: 1px solid rgba(255, 255, 255, 0.2);
    }
    
    .url-upload-section h3 {
        margin: 0 0 0px 0;
        color: #2196F3;
        font-size: 16px;
    }
    
    .url-input-group {
        display: flex;
        gap: 10px;
        margin-bottom: 0px;
    }
    
    .url-input {
        flex: 1;
        padding: 0px;
        border: 1px solid #444;
        border-radius: 4px;
        background: rgba(255, 255, 255, 0.1);
        color: white;
        font-size: 14px;
    }
    
    .url-input::placeholder {
        color: rgba(255, 255, 255, 0.5);
    }
    
    .url-load-btn {
        padding: 1px 1px;
        background: #2196F3;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        font-weight: bold;
        transition: background 0.3s;
    }
    
    .url-load-btn:hover {
        background: #1976D2;
    }
    
    .url-hint {
        font-size: 12px;
        color: rgba(255, 255, 255, 0.6);
        margin: 0;
    }
    
    /* Активная ячейка */
    .craft-cell.active {
        box-shadow: 0 0 0 3px #4CAF50;
    }
    
    /* Уведомление */
    .craft-notification {
        position: fixed;
        top: 20px;
        right: 20px;
        padding: 1px 1px;
        border-radius: 4px;
        color: white;
        z-index: 10000;
        box-shadow: 0 4px 12px rgba(0,0,0,0.3);
        font-family: Arial, sans-serif;
        font-size: 14px;
        display: none;
    }
    
    .notification-success {
        background: #4CAF50;
        display: block;
    }
    
    .notification-error {
        background: #f44336;
        display: block;
    }
    
    
</style>

<div class="character-crafter">
    <!-- Подложка-фон -->
    <div class="craft-background">
        <img src="https://cdn.promodj.com/afs/6affb743b0bce0ba29ac568bd270b27a12%3Aresize%3A1400x1400xxjpegxffffffxnoupscale%3Asame%3A480b7b.jpg" alt="Фон для крафта">
    </div>
    
    <!-- Область крафта -->
    <div class="crafting-area">
        <!-- Блок 1: Крафтовая сетка 3x3 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ -->
        <div class="craft-grid-3x3">
            <!-- Ряд 1 -->
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-0">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-0">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-0" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-0">×</button>
            </div>
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-1">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-1">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-1" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-1">×</button>
            </div>
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-2">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-2">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-2" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-2">×</button>
            </div>
            
            <!-- Ряд 2 -->
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-3">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-3">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-3" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-3">×</button>
            </div>
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-4">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-4">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-4" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-4">×</button>
            </div>
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-5">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-5">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-5" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-5">×</button>
            </div>
            
            <!-- Ряд 3 -->
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-6">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-6">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-6" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-6">×</button>
            </div>
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-7">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-7">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-7" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-7">×</button>
            </div>
            <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-8">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="craft-8">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="craft-8" alt="Элемент крафта">
                </div>
                <button class="clear-cell-btn" data-cell-id="craft-8">×</button>
            </div>
        </div>
        
        <!-- Блок 2: Итоговая ячейка -->
        <div class="result-cell">
            <div class="craft-cell block2" data-cell-type="result" data-cell-id="result">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="result">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="result" alt="Результат">
                </div>
                <button class="clear-cell-btn" data-cell-id="result">×</button>
            </div>
        </div>
        
        <!-- Блок 3: Инвентарь 1x9 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ -->
        <div class="inventory-row">
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-0">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-0">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-0" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-0">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-1">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-1">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-1" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-1">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-2">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-2">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-2" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-2">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-3">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-3">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-3" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-3">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-4">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-4">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-4" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-4">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-5">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-5">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-5" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-5">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-6">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-6">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-6" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-6">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-7">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-7">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-7" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-7">×</button>
            </div>
            <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-8">
                <div class="image-input-container">
                    <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-8">
                    <div class="empty-cell-indicator">+</div>
                </div>
                <div class="cell-image-container">
                    <img class="cell-image" data-cell-id="inventory-8" alt="Инвентарь">
                </div>
                <button class="clear-cell-btn" data-cell-id="inventory-8">×</button>
            </div>
        </div>
    </div>
    
    
    


<script>
// Простой скрипт для управления
let activeCellId = null;

// Функция для показа уведомления
function showNotification(message, type) {
    const notification = document.getElementById('craftNotification');
    notification.textContent = message;
    notification.className = 'craft-notification';
    notification.classList.add(`notification-${type}`);
    
    setTimeout(() => {
        notification.style.display = 'block';
    }, 10);
    
    setTimeout(() => {
        notification.style.display = 'none';
    }, 3000);
}

// Делаем ячейку активной при клике
document.addEventListener('click', function(e) {
    // Клик по ячейке
    const cell = e.target.closest('.craft-cell');
    if (cell) {
        // Убираем активность со всех ячеек
        document.querySelectorAll('.craft-cell').forEach(c => {
            c.classList.remove('active');
        });
        
        // Делаем эту ячейку активной
        cell.classList.add('active');
        activeCellId = cell.dataset.cellId;
        console.log('Активная ячейка:', activeCellId);
    }
    
    // Клик по кнопке очистки
    if (e.target.classList.contains('clear-cell-btn')) {
        const cellId = e.target.dataset.cellId;
        const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
        const input = document.querySelector(`.image-input[data-cell-id="${cellId}"]`);
        const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
        
        if (img && input && indicator) {
            img.src = '';
            img.classList.remove('loaded');
            input.value = '';
            indicator.style.opacity = '1';
            
            showNotification('🗑️ Изображение удалено', 'success');
            e.stopPropagation();
        }
    }
    
    // Клик по кнопке загрузки по ссылке
    if (e.target.classList.contains('url-load-btn')) {
        if (!activeCellId) {
            showNotification('⚠️ Сначала выберите ячейку!', 'error');
            return;
        }
        
        const urlInput = document.querySelector('.url-input');
        const url = urlInput.value.trim();
        
        if (!url) {
            showNotification('⚠️ Введите ссылку!', 'error');
            return;
        }
        
        const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`);
        const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`);
        
        if (img && indicator) {
            // Проверяем, что это изображение
            const testImg = new Image();
            testImg.crossOrigin = 'anonymous';
            
            testImg.onload = function() {
                img.src = url;
                img.classList.add('loaded');
                indicator.style.opacity = '0';
                urlInput.value = '';
                showNotification('✅ Изображение загружено!', 'success');
            };
            
            testImg.onerror = function() {
                showNotification('❌ Не удалось загрузить изображение', 'error');
            };
            
            testImg.src = url;
        }
    }
});

// Загрузка изображений с компьютера
document.addEventListener('change', function(e) {
    if (e.target.classList.contains('image-input')) {
        const file = e.target.files[0];
        const cellId = e.target.dataset.cellId;
        
        if (file && file.type.match('image.*')) {
            const reader = new FileReader();
            
            reader.onload = function(e) {
                const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
                const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
                
                if (img && indicator) {
                    img.src = e.target.result;
                    img.classList.add('loaded');
                    indicator.style.opacity = '0';
                    
                    // Делаем эту ячейку активной
                    const cell = document.querySelector(`.craft-cell[data-cell-id="${cellId}"]`);
                    if (cell) {
                        document.querySelectorAll('.craft-cell').forEach(c => {
                            c.classList.remove('active');
                        });
                        cell.classList.add('active');
                        activeCellId = cellId;
                    }
                    
                    showNotification('✅ Изображение загружено!', 'success');
                }
            };
            
            reader.readAsDataURL(file);
        }
    }
});

// Вставка по Ctrl+V
document.addEventListener('paste', function(e) {
    if (!activeCellId) return;
    
    const pastedText = e.clipboardData.getData('text');
    if (pastedText && (pastedText.startsWith('http') || pastedText.startsWith('data:image'))) {
        e.preventDefault();
        
        const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`);
        const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`);
        
        if (img && indicator) {
            // Проверяем изображение
            const testImg = new Image();
            testImg.crossOrigin = 'anonymous';
            
            testImg.onload = function() {
                img.src = pastedText;
                img.classList.add('loaded');
                indicator.style.opacity = '0';
                showNotification('✅ Изображение вставлено!', 'success');
            };
            
            testImg.onerror = function() {
                showNotification('❌ Неверная ссылка на изображение', 'error');
            };
            
            testImg.src = pastedText;
        }
    }
});

console.log('Система крафта готова! Все ячейки созданы.');
</script>[/html]

0

18

рабочий код гирлянды с фотками

Код:
[html]<div style="position: relative; background: linear-gradient(180deg, #2c1320 0%, #4a1942 50%, #6b2d5c 100%); padding: 30px 20px 50px 20px; border-radius: 15px; min-height: 420px; overflow: hidden; font-family: Georgia, serif;">
  
  <!-- Звёздочки на фоне -->
  <div class="vlt2-star" style="top: 8%; left: 10%;">✦</div>
  <div class="vlt2-star" style="top: 15%; right: 15%;">✧</div>
  <div class="vlt2-star" style="top: 25%; left: 25%;">✦</div>
  <div class="vlt2-star" style="top: 12%; right: 35%;">✧</div>
  <div class="vlt2-star" style="top: 30%; right: 8%;">✦</div>
  
  <!-- Заголовок -->
  <div style="text-align: center; color: #ffb6c1; font-size: 26px; margin-bottom: 10px; text-shadow: 0 0 20px rgba(255,105,180,0.6);">
    💌 Be My Valentine 💌
  </div>
  
  <!-- Верёвка -->
  <div style="position: relative; width: 100%; height: 8px; margin: 20px 0;">
    <div style="position: absolute; top: 50%; left: 5%; right: 5%; height: 3px; background: linear-gradient(90deg, transparent, #8b6914, #d4a84b, #8b6914, transparent); border-radius: 2px; box-shadow: 0 2px 4px rgba(0,0,0,0.3);"></div>
    <!-- Узелки -->
    <div style="position: absolute; top: 50%; left: 5%; width: 8px; height: 8px; background: #8b6914; border-radius: 50%; transform: translate(-50%, -50%);"></div>
    <div style="position: absolute; top: 50%; right: 5%; width: 8px; height: 8px; background: #8b6914; border-radius: 50%; transform: translate(50%, -50%);"></div>
  </div>
  
  <!-- Контейнер для фоток на прищепках -->
  <div style="display: flex; justify-content: center; align-items: flex-start; gap: 15px; flex-wrap: wrap; margin-top: -5px;">
    
    <!-- Фото 1 -->
    <div class="vlt2-photo vlt2-photo1">
      <div class="vlt2-clip">
        <div style="width: 8px; height: 20px; background: linear-gradient(90deg, #ff6b9d, #ff8fab); border-radius: 2px 2px 0 0;"></div>
        <div style="width: 14px; height: 6px; background: linear-gradient(90deg, #ff6b9d, #ff8fab); border-radius: 0 0 3px 3px;"></div>
      </div>
      <div class="vlt2-frame">
        <img src="ФОТО_1" style="width: 130px; height: 160px; object-fit: cover; display: block;">
        <div class="vlt2-caption">Момент 1 💕</div>
      </div>
    </div>
    
    <!-- Фото 2 (центральное, побольше) -->
    <div class="vlt2-photo vlt2-photo2">
      <div class="vlt2-clip">
        <div style="width: 10px; height: 24px; background: linear-gradient(90deg, #ff4d79, #ff6b9d); border-radius: 2px 2px 0 0;"></div>
        <div style="width: 16px; height: 7px; background: linear-gradient(90deg, #ff4d79, #ff6b9d); border-radius: 0 0 3px 3px;"></div>
      </div>
      <div class="vlt2-frame vlt2-frame-big">
        <img src="ФОТО_2" style="width: 150px; height: 185px; object-fit: cover; display: block;">
        <div class="vlt2-caption">Любимое 💖</div>
      </div>
    </div>
    
    <!-- Фото 3 -->
    <div class="vlt2-photo vlt2-photo3">
      <div class="vlt2-clip">
        <div style="width: 8px; height: 20px; background: linear-gradient(90deg, #ff85a2, #ffadc6); border-radius: 2px 2px 0 0;"></div>
        <div style="width: 14px; height: 6px; background: linear-gradient(90deg, #ff85a2, #ffadc6); border-radius: 0 0 3px 3px;"></div>
      </div>
      <div class="vlt2-frame">
        <img src="ФОТО_3" style="width: 130px; height: 160px; object-fit: cover; display: block;">
        <div class="vlt2-caption">Момент 3 💗</div>
      </div>
    </div>
    
  </div>
  
  <!-- Подпись снизу -->
  <div style="text-align: center; margin-top: 25px; color: #ffccd5; font-size: 14px; font-style: italic; letter-spacing: 1px;">
    ✨ С любовью, для тебя ✨
  </div>
  
  <!-- Летающие сердечки (фоновая анимация) -->
  <div class="vlt2-floating-hearts">
    <span class="vlt2-fh" style="left: 5%; animation-delay: 0s;">💕</span>
    <span class="vlt2-fh" style="left: 20%; animation-delay: 2s;">💖</span>
    <span class="vlt2-fh" style="left: 40%; animation-delay: 4s;">💗</span>
    <span class="vlt2-fh" style="left: 60%; animation-delay: 1s;">💝</span>
    <span class="vlt2-fh" style="left: 80%; animation-delay: 3s;">💓</span>
    <span class="vlt2-fh" style="left: 92%; animation-delay: 5s;">💞</span>
  </div>
  
</div>

<style>
.vlt2-star {
  position: absolute;
  color: rgba(255, 255, 200, 0.6);
  font-size: 12px;
  animation: vlt2-twinkle 2s ease-in-out infinite;
}
.vlt2-star:nth-child(2) { animation-delay: 0.5s; }
.vlt2-star:nth-child(3) { animation-delay: 1s; }
.vlt2-star:nth-child(4) { animation-delay: 1.5s; }
.vlt2-star:nth-child(5) { animation-delay: 0.8s; }

@keyframes vlt2-twinkle {
  0%, 100% { opacity: 0.4; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.3); }
}

.vlt2-photo {
  display: flex;
  flex-direction: column;
  align-items: center;
  transform-origin: top center;
  cursor: pointer;
  transition: transform 0.3s ease;
}
.vlt2-photo1 { animation: vlt2-swing1 3s ease-in-out infinite; }
.vlt2-photo2 { animation: vlt2-swing2 3.5s ease-in-out infinite; }
.vlt2-photo3 { animation: vlt2-swing3 2.8s ease-in-out infinite; }

@keyframes vlt2-swing1 {
  0%, 100% { transform: rotate(-3deg); }
  50% { transform: rotate(3deg); }
}
@keyframes vlt2-swing2 {
  0%, 100% { transform: rotate(2deg); }
  50% { transform: rotate(-2deg); }
}
@keyframes vlt2-swing3 {
  0%, 100% { transform: rotate(4deg); }
  50% { transform: rotate(-4deg); }
}

.vlt2-photo:hover {
  animation-play-state: paused;
  transform: scale(1.1) rotate(0deg) !important;
  z-index: 10;
}

.vlt2-clip {
  display: flex;
  flex-direction: column;
  align-items: center;
  filter: drop-shadow(0 2px 3px rgba(0,0,0,0.3));
  z-index: 5;
}

.vlt2-frame {
  background: white;
  padding: 8px 8px 25px 8px;
  box-shadow: 0 8px 25px rgba(0,0,0,0.4);
  margin-top: -3px;
}
.vlt2-frame-big {
  padding: 10px 10px 28px 10px;
}

.vlt2-caption {
  text-align: center;
  margin-top: 6px;
  color: #666;
  font-size: 11px;
  font-style: italic;
}

.vlt2-floating-hearts {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  overflow: hidden;
}

.vlt2-fh {
  position: absolute;
  bottom: -30px;
  font-size: 18px;
  opacity: 0;
  animation: vlt2-rise 8s ease-in infinite;
}

@keyframes vlt2-rise {
  0% {
    opacity: 0;
    bottom: -30px;
    transform: translateX(0) rotate(0deg);
  }
  10% { opacity: 0.8; }
  90% { opacity: 0.8; }
  100% {
    opacity: 0;
    bottom: 110%;
    transform: translateX(20px) rotate(15deg);
  }
}
</style>[/html]

0


Вы здесь » re:start » Флудовой архив » тест


Рейтинг форумов | Создать форум бесплатно