blob: d4b690d10f8510975d6ec0546536ee8435d8246a (
plain) (
tree)
|
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Pixel Pixel Pixel Pixel Pixel Pixel</title>
<meta name="description" content="Draw me a goblin, please.">
<style>
body, html {
margin: 0;
padding: 0;
overflow: hidden;
background-color: teal;
}
button {
padding: 0.5rem 0.75rem;
font-size: 1rem;
cursor: pointer;
min-height: 2.75rem;
}
#canvas {
display: block;
}
#palette {
position: fixed;
top: 0.625rem;
right: 0.625rem;
background-color: beige;
padding: 0.625rem;
border: 1px solid #ccc;
border-radius: 0.3125rem;
width: 10.625rem;
transition: transform 0.3s ease-out;
max-height: 90vh;
overflow-y: auto;
scrollbar-width: none;
-ms-overflow-style: none;
box-sizing: border-box;
}
#palette.hidden {
transform: translateX(calc(100% + 1.25rem));
}
#palette-toggle {
position: fixed;
top: 0.625rem;
right: 0.625rem;
background-color: beige;
border: 1px solid #ccc;
border-radius: 0.3125rem 0 0 0.3125rem;
padding: 0.75rem;
cursor: pointer;
z-index: 1000;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.3s ease-out;
min-width: 2.75rem;
min-height: 2.75rem;
font-size: 1.125rem;
}
#palette-toggle:not(.hidden) {
transform: translateX(-11.25rem);
}
#palette label,
#palette input,
#palette button {
display: block;
margin-bottom: 0.75rem;
width: 100%;
}
.color-history {
display: flex;
flex-wrap: wrap;
margin-top: 0.625rem;
}
.color-history div {
width: 1.25rem;
height: 1.25rem;
border: 1px solid #000;
cursor: pointer;
margin-right: 0.3125rem;
margin-bottom: 0.3125rem;
}
.zoom-controls {
display: flex;
gap: 0.3125rem;
margin-top: 0.625rem;
}
.zoom-controls button {
flex: 1;
padding: 0.5rem;
min-height: 2.75rem;
font-size: 1.125rem;
}
.pan-controls {
display: flex;
flex-direction: column;
gap: 0.3125rem;
margin-top: 0.625rem;
align-items: center;
}
.pan-middle {
display: flex;
gap: 0.3125rem;
width: 100%;
}
.pan-controls button {
padding: 0.5rem;
width: 2.75rem;
height: 2.75rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.125rem;
}
#centerViewBtn {
margin-top: 0.625rem;
}
@media (max-width: 48rem) { /* 768px */
#palette {
width: 12.5rem;
top: auto;
bottom: 0.625rem;
}
#palette-toggle {
top: auto;
bottom: 0.625rem;
}
#palette-toggle:not(.hidden) {
transform: translateX(-12.5rem);
}
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<button id="palette-toggle">☰</button>
<div id="palette">
<div style="display: flex; gap: 5px; margin-bottom: 10px;">
<div style="flex: 1;">
<label for="gridWidth">W:</label>
<input type="number" id="gridWidth" value="16" min="1" style="width: 90%;">
</div>
<div style="flex: 1;">
<label for="gridHeight">H:</label>
<input type="number" id="gridHeight" value="16" min="1" style="width: 90%;">
</div>
</div>
<br>
<label for="colorPicker">Select Color:</label>
<input type="color" id="colorPicker" value="#000000">
<div id="colorHistory" class="color-history"></div>
<div class="zoom-controls">
<button id="zoomInBtn">🔍+</button>
<button id="zoomOutBtn">🔍-</button>
</div>
<div class="pan-controls">
<button id="panUpBtn">⬆️</button>
<div class="pan-middle">
<button id="panLeftBtn">⬅️</button>
<button id="panRightBtn">➡️</button>
</div>
<button id="panDownBtn">⬇️</button>
</div>
<button id="centerViewBtn">🎯 Center View</button>
<hr>
<button id="exportBtn">Export as PNG</button>
<button id="resetBtn">Reset</button>
</div>
<script src="app.js"></script>
</body>
</html>
|