← back to Model Arena

data/artifacts/1c80df76af60/qwen25-7b.html

98 lines

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Midnight Woodland Jam</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
            background: #12002b;
            color: #f3e9ff;
            font-family: 'Didot', 'Bodoni MT', 'Playfair Display', Georgia, serif;
        }
        .scene {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 80vw;
            height: 80vh;
            overflow: hidden;
        }
        .group {
            display: grid;
            gap: 24px;
            padding: 96px;
        }
        .character, .animal, .light-source {
            animation-duration: 1.5s;
            animation-fill-mode: both;
            will-change: transform, opacity;
        }
        @keyframes fadeUp {
            from { opacity: 0; transform: translateY(28px); }
            to { opacity: 1; transform: none; }
        }
        .gathering {
            background-size: 350% auto;
            animation-name: gatherAnimation, ambientGradientDrift;
            animation-duration: 60s, 18s;
            animation-iteration-count: infinite, linear;
        }
        @keyframes gatherAnimation {
            0% { transform: scale(1); opacity: 1; }
            50% { transform: scale(.95); opacity: .75; }
            100% { transform: scale(1); opacity: 1; }
        }
    </style>
</head>
<body>
    <div class="scene">
        <div id="controls" style="position: absolute; top: 24px; left: 24px;">
            <button onclick="setMovement('gathering')">Gathering</button>
            <button onclick="setMovement('deepJam')">Deep Jam</button>
            <button onclick="setMovement('dawnReturn')">Dawn Return</button>
            <label for="tempo">Tempo:</label><input type="range" id="tempo" min="50" max="150" value="100">
            <label for="motionType">Motion Type:</label><select id="motionType">
                <option value="normal">Normal</option>
                <option value="reduced">Reduced</option>
            </select>
        </div>
        <svg viewBox="-50 -50 100 100" class="light-source">
            <circle cx="0" cy="0" r="20" fill="#ff2e88"/>
        </svg>
        <div id="gathering" class="group gathering">
            <!-- Characters and Animals -->
            <div class="character"></div><div class="character"></div><div class="character"></div>
            <div class="animal deer"></div><div class="animal bear"></div><div class="animal wolf"></div>
            <div class="light-source"></div>
        </div>
    </div>
    <script>
        function setMovement(movement) {
            document.getElementById('gathering').classList.remove('deepJam', 'dawnReturn');
            document.getElementById('gathering').classList.add(movement);
            updateControls();
        }
        function updateControls() {
            const tempo = document.getElementById('tempo');
            const motionType = document.getElementById('motionType');
            if (['deepJam', 'dawnReturn'].includes(document.getElementById('gathering').className)) {
                tempo.disabled = true;
                motionType.value = 'reduced';
                motionType.disabled = true;
            } else {
                tempo.disabled = false;
                motionType.value = 'normal';
                motionType.disabled = false;
            }
        }
        window.onload = function() {
            setMovement('gathering');
            updateControls();
        };
    </script>
</body>
</html>