← back to Model Arena
data/artifacts/0219528ac7d7/qwen3-14b.html
284 lines
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Which Design Era?</title>
<style>
:root {
--bg: #faf8f4;
--surface: #ffffff;
--text: #1c1a17;
--muted: #9b948a;
--accent: #b0472e;
--line: #e0e0e0;
--shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
--ease: cubic-bezier(0.22, 1, 0.36, 1);
--font-display: "Playfair Display", Georgia, serif;
--font-body: -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html, body {
height: 100%;
font-family: var(--font-body);
background-color: var(--bg);
color: var(--text);
overflow: hidden;
}
header {
position: fixed;
top: 0;
left: 0;
width: 100%;
padding: 24px;
background-color: var(--surface);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
z-index: 1000;
}
header h1 {
font-family: var(--font-display);
font-size: 48px;
letter-spacing: 0.18em;
color: var(--text);
}
main {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
padding: 96px 24px;
position: relative;
overflow: hidden;
}
.vignette {
width: 100%;
height: 100%;
max-width: 600px;
max-height: 600px;
background: linear-gradient(135deg, var(--accent) 25%, var(--muted) 50%, var(--surface) 75%);
background-size: 400% 400%;
border-radius: 14px;
box-shadow: var(--shadow);
animation: drift 18s linear infinite;
position: relative;
}
.era {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 16px;
opacity: 0;
pointer-events: none;
font-family: var(--font-body);
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--text);
}
.scoreboard {
position: absolute;
top: 24px;
left: 24px;
font-size: 16px;
color: var(--muted);
font-family: var(--font-body);
text-transform: uppercase;
letter-spacing: 0.15em;
}
.buttons {
position: absolute;
bottom: 24px;
width: 100%;
display: flex;
justify-content: center;
gap: 24px;
flex-wrap: wrap;
}
.button {
background-color: var(--surface);
border: 1px solid var(--line);
border-radius: 14px;
padding: 12px 24px;
font-size: 14px;
color: var(--text);
text-transform: uppercase;
letter-spacing: 0.15em;
cursor: pointer;
transition: all 150ms var(--ease);
}
.button:hover {
background-color: var(--muted);
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
display: flex;
align-items: center;
justify-content: center;
color: var(--text);
font-family: var(--font-display);
font-size: 32px;
letter-spacing: 0.18em;
z-index: 999;
opacity: 0;
visibility: hidden;
transition: opacity 300ms var(--ease);
}
.overlay.show {
opacity: 1;
visibility: visible;
}
@keyframes drift {
0% { background-position: 0% 50%; }
100% { background-position: 100% 50%; }
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(28px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
</style>
</head>
<body>
<header>
<h1>DESIGNER WALLCOVERINGS</h1>
</header>
<main>
<div class="vignette" id="vignette">
<div class="era" id="era">Loading...</div>
<div class="scoreboard" id="scoreboard">Score: 0 | Rounds: 0</div>
<div class="buttons" id="buttons"></div>
</div>
<div class="overlay" id="overlay">
<div id="overlayContent"></div>
</div>
</main>
<script>
const eras = [
{ name: "Victorian", pattern: "linear-gradient(135deg, #a67c52 20%, #b59f8a 50%, #c9a961 80%)" },
{ name: "Art Deco", pattern: "linear-gradient(135deg, #2f4c39 20%, #605a51 50%, #8a8578 80%)" },
{ name: "Mid-Century Modern", pattern: "linear-gradient(135deg, #c65f38 20%, #e0a458 50%, #f7efe6 80%)" },
{ name: "Grandmillennial", pattern: "linear-gradient(135deg, #ff2e88 20%, #00e5ff 50%, #b0472e 80%)" }
];
const vignette = document.getElementById("vignette");
const eraText = document.getElementById("era");
const buttons = document.getElementById("buttons");
const overlay = document.getElementById("overlay");
const overlayContent = document.getElementById("overlayContent");
const scoreboard = document.getElementById("scoreboard");
let currentEra = null;
let score = 0;
let round = 0;
let bestScore = parseInt(localStorage.getItem("bestScore")) || 0;
function getRandomEra() {
return eras[Math.floor(Math.random() * eras.length)];
}
function createButtons() {
buttons.innerHTML = "";
eras.forEach(era => {
const btn = document.createElement("button");
btn.textContent = era.name;
btn.classList.add("button");
btn.addEventListener("click", () => checkGuess(era.name));
buttons.appendChild(btn);
});
}
function checkGuess(guess) {
if (guess === currentEra.name) {
score++;
showOverlay("Correct! 🎉", "green");
} else {
showOverlay("Wrong! 😕", "red");
}
round++;
if (round >= 8) {
endGame();
} else {
currentEra = getRandomEra();
updateVignette();
updateScoreboard();
}
}
function updateVignette() {
const current = currentEra;
const bg = current.pattern;
vignette.style.backgroundImage = bg;
eraText.textContent = current.name;
eraText.style.animation = "fadeUp 0.7s var(--ease) both";
}
function updateScoreboard() {
scoreboard.textContent = `Score: ${score} | Rounds: ${round}`;
}
function showOverlay(message, color) {
overlayContent.textContent = message;
overlay.style.color = color;
overlay.classList.add("show");
setTimeout(() => {
overlay.classList.remove("show");
}, 1500);
}
function endGame() {
const result = score > bestScore ? "New Best!" : "Game Over";
showOverlay(`${result} Your Score: ${score} | Best: ${bestScore}`, score > bestScore ? "gold" : "red");
if (score > bestScore) {
localStorage.setItem("bestScore", score);
}
}
function startGame() {
score = 0;
round = 0;
currentEra = getRandomEra();
updateVignette();
updateScoreboard();
createButtons();
}
// Initialize game
startGame();
</script>
</body>
</html>