← back to Model Arena
data/artifacts/193230252710/gemma3-12b.html
200 lines
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DW Mood Board Generator</title>
<style>
:root {
--bg: #faf8f4; /* ivory-gallery */
--surface: #ffffff;
--text: #1c1a17;
--muted: #9b948a;
--accent: #b0472e;
--line: rgba(0, 0, 0, 0.05);
--shadow: rgba(0, 0, 0, 0.12);
--ease: cubic-bezier(0.22, 1, 0.36, 1);
}
body {
margin: 0;
font-family: 'apple-system', 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;
background-color: var(--bg);
color: var(--text);
overflow-x: hidden; /* Prevent horizontal scroll */
}
header {
background-color: var(--surface);
padding: 24px;
display: flex;
align-items: center;
justify-content: left;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
position: sticky;
top: 0;
z-index: 100;
}
header h1 {
font-family: 'Playfair Display', Georgia, serif;
font-size: 67px; /* Maintain scale */
line-height: 1;
letter-spacing: .18em;
margin: 0;
text-transform: uppercase;
color: var(--text);
flex-shrink: 0; /* Prevent wrapping on small screens */
}
.mood-board {
padding: 96px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 24px;
animation: fadeUp .7s var(--ease) both;
}
.mood-board > div {
background-color: var(--surface);
border-radius: 14px;
padding: 24px;
box-shadow: 0 8px 24px var(--shadow);
transition: transform .3s var(--ease);
}
.mood-board > div:hover {
transform: translateY(-5px);
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.18);
}
.hero-pattern {
width: 100%;
height: auto; /* Adjust as needed */
background: linear-gradient(to right, var(--accent) 20%, var(--muted) 80%);
border-radius: 8px;
margin-bottom: 24px;
}
.color-chip {
width: 100%;
height: 60px; /* Consistent height */
background-color: var(--accent);
border-radius: 8px;
margin-bottom: 24px;
}
.type-sample {
font-size: 21px;
line-height: 1.5;
margin-bottom: 24px;
}
.texture-tile {
background-color: var(--accent);
width: 100%;
height: auto;
padding-bottom: 100%; /* Maintain aspect ratio */
border-radius: 8px;
position: relative;
}
.texture-tile::before {
content: "";
background: url("data:image/svg+xml,%3Csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3ClinearGradient id='gradient' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' stop-color='%23b0472e'/%3E%3Cstop offset='100%25' stop-color='%232f4c39'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='100%25' height='100%25' fill='url(%23gradient)'/%3E%3C/svg%3E") no-repeat center;
background-size: cover;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.regenerate-button {
padding: 12px 24px;
background-color: var(--accent);
color: var(--surface);
text-transform: uppercase;
letter-spacing: .15em;
border: none;
border-radius: 8px;
cursor: pointer;
transition: background-color .3s var(--ease);
}
.regenerate-button:hover {
background-color: var(--muted);
}
@keyframes fadeUp {
from { opacity: 0; transform: translateY(28px);}
to { opacity: 1; transform: none;}
}
</style>
</head>
<body>
<header>
<h1>DESIGNER WALLCOVERINGS</h1>
</header>
<div class="mood-board">
<div>
<div class="hero-pattern"></div>
</div>
<div>
<div class="color-chip" style="background-color: var(--accent)"></div>
<p style="font-size:12px; text-align: center; letter-spacing:.15em;">Warm Clay</p>
</div>
<div>
<div class="color-chip" style="background-color: #8a8578"></div>
<p style="font-size:12px; text-align: center; letter-spacing:.15em;">Stone Grey</p>
</div>
<div>
<div class="type-sample">
"A timeless elegance, crafted for discerning spaces."
</div>
</div>
<div>
<div class="texture-tile"></div>
</div>
</div>
<button class="regenerate-button" id="regenerateBtn">REGENERATE</button>
<script>
const moodBoardDivs = document.querySelectorAll('.mood-board > div');
const regenerateBtn = document.getElementById('regenerateBtn');
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
regenerateBtn.addEventListener('click', () => {
shuffle(Array.from(moodBoardDivs));
moodBoardDivs.forEach((div, index) => {
setTimeout(()=> {
div.style.animation = 'fadeUp .7s var(--ease) both';
div.style.transform = "translateY(28px)";
setTimeout(()=>{
div.style.opacity = 0;
div.style.transform = "translateY(28px)";
}, 10);
}, index * 5); //Stagger the animations
});
});
</script>
</body>
</html>