← back to Model Arena

data/artifacts/15fb25164101/qwen25-7b.html

157 lines

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Shop by Color</title>
<style>
:root {
  --bg: #f7efe6;
  --ink: #3a2c22;
  --accent: #c65f38;
  --line: 1px solid rgba(0,0,0,.12);
  --shadow: 0 8px 24px rgba(0,0,0,.12), hover 0 16px 48px rgba(0,0,0,.18), glow = 0 0 24px var(--accent)@35%;
  --ease: cubic-bezier(.22,1,.36,1);
}

body {
  font-family: 'Didot', serif;
  background-color: var(--bg);
  color: var(--ink);
  margin: 0;
  padding: 0;
}

header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: var(--bg);
  color: var(--ink);
  padding: 24px;
}

header .wordmark {
  font-family: 'Didot', serif;
  text-transform: uppercase;
  letter-spacing: .18em;
  max-width: 220px;
}

header nav {
  display: flex;
  gap: 16px;
}

section {
  padding-top: 96px;
  display: grid;
  place-items: center;
  gap: 32px;
}

.color-wheel {
  width: 500px;
  height: 500px;
  border-radius: 50%;
  overflow: hidden;
  background-color: var(--bg);
  position: relative;
}

.patterns {
  display: none;
  grid-template-columns: repeat(4, 1fr);
  gap: 32px;
  margin-top: 16px;
}

.patterns img {
  width: 100%;
  border-radius: 14px;
}

.share-bar {
  background-color: var(--bg);
  padding: 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
</style>
</head>
<body>
<header>
  <div class="wordmark">DESIGNER WALLCOVERINGS</div>
  <nav>
    <button>SHARE</button>
  </nav>
</header>

<section>
  <div class="color-wheel">
    <canvas id="colorWheel"></canvas>
    <div class="patterns" id="patterns">
      <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAoASsrFzs+rQMAAAAAElFTkSuQmCC" alt="Pattern 1">
      <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAoASsrFzs+rQMAAAAAElFTkSuQmCC" alt="Pattern 2">
      <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAoASsrFzs+rQMAAAAAElFTkSuQmCC" alt="Pattern 3">
      <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAoASsrFzs+rQMAAAAAElFTkSuQmCC" alt="Pattern 4">
    </div>
  </div>
</section>

<script>
const colorWheel = document.getElementById('colorWheel');
const patterns = document.getElementById('patterns');

let hue = 0;
const colors = ['#c65f38', '#e0a458'];

function drawColorWheel() {
  const ctx = colorWheel.getContext('2d');
  ctx.clearRect(0, 0, colorWheel.width, colorWheel.height);
  ctx.beginPath();
  ctx.arc(colorWheel.width / 2, colorWheel.height / 2, Math.min(colorWheel.width / 2 - 16, colorWheel.height / 2 - 16), 0, 2 * Math.PI, false);
  ctx.closePath();
  ctx.strokeStyle = 'var(--line)';
  ctx.stroke();
  ctx.fillStyle = `hsl(${hue}, 85%, 40%)`;
  ctx.fill();
}

function updatePatterns() {
  const patternsHTML = colors.map(color => `
    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAoASsrFzs+rQMAAAAAElFTkSuQmCC" alt="Pattern">
  `).join('');
  patterns.innerHTML = patternsHTML;
}

function handleWheelDrag(event) {
  const rect = colorWheel.getBoundingClientRect();
  const x = event.clientX - rect.left;
  const y = event.clientY - rect.top;

  if (x >= rect.width / 2 && y >= rect.height / 2) {
    hue = Math.round((360 * ((x - rect.width / 4) / (rect.width / 2))) % 360);
  }

  drawColorWheel();
}

colorWheel.addEventListener('mousedown', handleWheelDrag);
colorWheel.addEventListener('touchstart', handleWheelDrag);

drawColorWheel();
updatePatterns();

setInterval(() => {
  hue = (hue + 1) % 360;
  drawColorWheel();
}, 500);
</script>
</body>
</html>