0xac29…f451

All memos sent from and to 0xac29…f451.

<!doctype html><html><head><meta charset="utf-8"><title>smear</title><style> * { margin: 0; padding: 0; box-sizing: border-box; } body, html { width: 100%; height: 100%; overflow: hidden; background: #000; } smear-partition { display: block; width: 100%; height: 100%; position: relative; } smear-canvas { display: block; position: absolute; } smear-canvas canvas { display: block; width: 100%; height: 100%; image-rendering: pixelated; image-rendering: -moz-crisp-edges; image-rendering: crisp-edges; -ms-interpolation-mode: nearest-neighbor; } .smear-container { position: absolute; overflow: hidden; } .smear-container canvas { display: block; width: 100%; height: 100%; image-rendering: pixelated; image-rendering: crisp-edges; } </style></head><body style="margin:0;background-color:black;width:100vw;height:100vh;overflow:hidden;"><div id="puzzle-container"><div class="smear-container" data-x="0" data-y="0" data-width="0.19847389750000002" data-height="0.16191587" data-start-edge="bottom" data-speed="83" data-source-interval="1468" data-pixel-size="2" data-color-fg="#800080" data-color-bg="#000000" data-source-type="noise" style="left: 0px; top: 0px; width: 79.389559px; height: 64.766348px;"><canvas></canvas></div><div class="smear-container" data-x="0" data-y="0.16191587" data-width="0.19847389750000002" data-height="0.0417727225" data-start-edge="bottom" data-speed="62" data-source-interval="1409" data-pixel-size="2" data-color-fg="#FF0000" data-color-bg="#000000" data-source-type="noise" style="left: 0px; top: 64.766348px; width: 79.389559px; height: 16.709089px;"><canvas></canvas></div><div class="smear-container" data-x="0" data-y="0.2036885925" data-width="0.19847389750000002" data-height="0.1259691825" data-start-edge="top" data-speed="65" data-source-interval="1500" data-pixel-size="4" data-color-fg="#FFFFFF" data-color-bg="#000000" data-source-type="noise" style="left: 0px; top: 81.475437px; width: 79.389559px; height: 50.387673px;"><canvas></canvas></div><div class="smear-container" data-x="0" data-y="0.32965777500000004" data-width="0.19847389750000002" data-height="0.043748604999999996" data-start-edge="right" data-speed="61" data-source-interval="1485" data-pixel-size="2" data-color-fg="#FF0000" data-color-bg="#FFFFFF" data-source-type="noise" style="left: 0px; top: 131.86311px; width: 79.389559px; height: 17.499442px;"><canvas></canvas></div><div class="smear-container" data-x="0" data-y="0.3734063775" data-width="0.19847389750000002" data-height="0.282739905" data-start-edge="right" data-speed="66" data-source-interval="1044" data-pixel-size="6" data-color-fg="#FFFFFF" data-color-bg="#000000" data-source-type="noise" style="left: 0px; top: 149.362551px; width: 79.389559px; height: 113.095962px;"><canvas></canvas></div><div class="smear-container" data-x="0" data-y="0.6561462825" data-width="0.19847389750000002" data-height="0.30476417" data-start-edge="bottom" data-speed="55" data-source-interval="1018" data-pixel-size="1" data-color-fg="#FF8000" data-color-bg="#FFFFFF" data-source-type="noise" style="left: 0px; top: 262.458513px; width: 79.389559px; height: 121.905668px;"><canvas></canvas></div><div class="smear-container" data-x="0" data-y="0.9609104525" data-width="0.19847389750000002" data-height="0.0390895475" data-start-edge="bottom" data-speed="98" data-source-interval="1830" data-pixel-size="1" data-color-fg="#87CEEB" data-color-bg="#808080" data-source-type="noise" style="left: 0px; top: 384.364181px; width: 79.389559px; height: 15.635819px;"><canvas></canvas></div><div class="smear-container" data-x="0.19847389750000002" data-y="0" data-width="0.1156565675" data-height="0.62802895" data-start-edge="left" data-speed="30" data-source-interval="1073" data-pixel-size="4" data-color-fg="#FF00CC" data-color-bg="#000000" data-source-type="noise" style="left: 79.389559px; top: 0px; width: 46.262627px; height: 251.21158px;"><canvas></canvas></div><div class="smear-container" data-x="0.19847389750000002" data-y="0.62802895" data-width="0.1156565675" data-height="0.37197105" data-start-edge="bottom" data-speed="64" data-source-interval="1893" data-pixel-size="6" data-color-fg="#FF0000" data-color-bg="#FFFFFF" data-source-type="noise" style="left: 79.389559px; top: 251.21158px; width: 46.262627px; height: 148.78842px;"><canvas></canvas></div><div class="smear-container" data-x="0.314130465" data-y="0" data-width="0.15383941" data-height="0.2022402575" data-start-edge="bottom" data-speed="94" data-source-interval="1745" data-pixel-size="1" data-color-fg="#FF8000" data-color-bg="#FFFFFF" data-source-type="noise" style="left: 125.652186px; top: 0px; width: 61.535764px; height: 80.896103px;"><canvas></canvas></div><div class="smear-container" data-x="0.314130465" data-y="0.2022402575" data-width="0.15383941" data-height="0.20353637500000002" data-start-edge="bottom" data-speed="34" data-source-interval="1138" data-pixel-size="4" data-color-fg="#87CEEB" data-color-bg="#000000" data-source-type="noise" style="left: 125.652186px; top: 80.896103px; width: 61.535764px; height: 81.41455px;"><canvas></canvas></div><div class="smear-container" data-x="0.314130465" data-y="0.4057766325" data-width="0.15383941" data-height="0.16253" data-start-edge="top" data-speed="81" data-source-interval="1385" data-pixel-size="2" data-color-fg="#0000FF" data-color-bg="#666666" data-source-type="noise" style="left: 125.652186px; top: 162.310653px; width: 61.535764px; height: 65.012px;"><canvas></canvas></div><div class="smear-container" data-x="0.314130465" data-y="0.5683066325" data-width="0.15383941" data-height="0.04719358" data-start-edge="bottom" data-speed="59" data-source-interval="1535" data-pixel-size="6" data-color-fg="#0000FF" data-color-bg="#666666" data-source-type="noise" style="left: 125.652186px; top: 227.322653px; width: 61.535764px; height: 18.877432px;"><canvas></canvas></div><div class="smear-container" data-x="0.314130465" data-y="0.6155002125" data-width="0.15383941" data-height="0.21595069" data-start-edge="bottom" data-speed="76" data-source-interval="1932" data-pixel-size="4" data-color-fg="#0000FF" data-color-bg="#666666" data-source-type="noise" style="left: 125.652186px; top: 246.200085px; width: 61.535764px; height: 86.380276px;"><canvas></canvas></div><div class="smear-container" data-x="0.314130465" data-y="0.8314509025" data-width="0.15383941" data-height="0.10505622" data-start-edge="bottom" data-speed="48" data-source-interval="1127" data-pixel-size="4" data-color-fg="#FF69B4" data-color-bg="#FF0000" data-source-type="noise" style="left: 125.652186px; top: 332.580361px; width: 61.535764px; height: 42.022488px;"><canvas></canvas></div><div class="smear-container" data-x="0.314130465" data-y="0.9365071225" data-width="0.15383941" data-height="0.0634928775" data-start-edge="left" data-speed="33" data-source-interval="1341" data-pixel-size="3" data-color-fg="#FFFFFF" data-color-bg="#000000" data-source-type="noise" style="left: 125.652186px; top: 374.602849px; width: 61.535764px; height: 25.397151px;"><canvas></canvas></div><div class="smear-container" data-x="0.467969875" data-y="0" data-width="0.21074902250000002" data-height="1" data-start-edge="left" data-speed="60" data-source-interval="555" data-pixel-size="1" data-color-fg="#FF8000" data-color-bg="#000000" data-source-type="noise" style="left: 187.18795px; top: 0px; width: 84.299609px; height: 400px;"><canvas></canvas></div><div class="smear-container" data-x="0.6787188974999999" data-y="0" data-width="0.135995925" data-height="0.047445890000000004" data-start-edge="right" data-speed="59" data-source-interval="580" data-pixel-size="4" data-color-fg="#FF69B4" data-color-bg="#FF0000" data-source-type="noise" style="left: 271.487559px; top: 0px; width: 54.39837px; height: 18.978356px;"><canvas></canvas></div><div class="smear-container" data-x="0.6787188974999999" data-y="0.047445890000000004" data-width="0.135995925" data-height="0.30038351750000003" data-start-edge="bottom" data-speed="84" data-source-interval="1047" data-pixel-size="3" data-color-fg="#FF0000" data-color-bg="#0000FF" data-source-type="noise" style="left: 271.487559px; top: 18.978356px; width: 54.39837px; height: 120.153407px;"><canvas></canvas></div><div class="smear-container" data-x="0.6787188974999999" data-y="0.3478294075" data-width="0.135995925" data-height="0.0685246125" data-start-edge="right" data-speed="78" data-source-interval="1662" data-pixel-size="1" data-color-fg="#87CEEB" data-color-bg="#000000" data-source-type="noise" style="left: 271.487559px; top: 139.131763px; width: 54.39837px; height: 27.409845px;"><canvas></canvas></div><div class="smear-container" data-x="0.6787188974999999" data-y="0.4163540225" data-width="0.135995925" data-height="0.340749955" data-start-edge="top" data-speed="27" data-source-interval="1482" data-pixel-size="3" data-color-fg="#FF0000" data-color-bg="#000000" data-source-type="noise" style="left: 271.487559px; top: 166.541609px; width: 54.39837px; height: 136.299982px;"><canvas></canvas></div><div class="smear-container" data-x="0.6787188974999999" data-y="0.7571039775" data-width="0.135995925" data-height="0.1023745925" data-start-edge="left" data-speed="30" data-source-interval="1882" data-pixel-size="6" data-color-fg="#FFFF00" data-color-bg="#000000" data-source-type="noise" style="left: 271.487559px; top: 302.841591px; width: 54.39837px; height: 40.949837px;"><canvas></canvas></div><div class="smear-container" data-x="0.6787188974999999" data-y="0.8594785675" data-width="0.135995925" data-height="0.14052143250000002" data-start-edge="right" data-speed="87" data-source-interval="935" data-pixel-size="5" data-color-fg="#0000FF" data-color-bg="#666666" data-source-type="noise" style="left: 271.487559px; top: 343.791427px; width: 54.39837px; height: 56.208573px;"><canvas></canvas></div><div class="smear-container" data-x="0.8147148249999999" data-y="0" data-width="0.185285175" data-height="0.10588475750000001" data-start-edge="right" data-speed="57" data-source-interval="1902" data-pixel-size="4" data-color-fg="#FFFFFF" data-color-bg="#FF00CC" data-source-type="noise" style="left: 325.88593px; top: 0px; width: 74.11407px; height: 42.353903px;"><canvas></canvas></div><div class="smear-container" data-x="0.8147148249999999" data-y="0.10588475750000001" data-width="0.185285175" data-height="0.43209110250000005" data-start-edge="bottom" data-speed="69" data-source-interval="1969" data-pixel-size="2" data-color-fg="#87CEEB" data-color-bg="#808080" data-source-type="noise" style="left: 325.88593px; top: 42.353903px; width: 74.11407px; height: 172.836441px;"><canvas></canvas></div><div class="smear-container" data-x="0.8147148249999999" data-y="0.5379758575" data-width="0.185285175" data-height="0.46202414249999996" data-start-edge="top" data-speed="86" data-source-interval="724" data-pixel-size="6" data-color-fg="#FF0000" data-color-bg="#0000FF" data-source-type="noise" style="left: 325.88593px; top: 215.190343px; width: 74.11407px; height: 184.809657px;"><canvas></canvas></div></div><script> class SmearCanvas { constructor(c) { this.container = c; this.canvas = c.querySelector("canvas") || document.createElement("canvas"); if (!c.querySelector("canvas")) c.appendChild(this.canvas); this.ctx = this.canvas.getContext("2d"); this.ctx.imageSmoothingEnabled = false; this.imageData = null; this.lastTime = 0; this.animationId = null; this.speed = parseInt(c.dataset.speed) || 50; this.pixelSize = parseInt(c.dataset.pixelSize) || 2; this.sourceInterval = parseInt(c.dataset.sourceInterval) || 1000; this.colorFg = c.dataset.colorFg || "#FFFFFF"; this.colorBg = c.dataset.colorBg || "#000000"; this.sourceType = c.dataset.sourceType || "noise"; this.startEdge = c.dataset.startEdge || "top"; this.fgRGB = this.hexToRGB(this.colorFg); this.bgRGB = this.hexToRGB(this.colorBg); this.moveSpeed = (1000 / 60) / this.speed; this.subPixelX = 0; this.subPixelY = 0; this.leadX = 0; this.leadY = 0; this.initDirection(); this.lastDirectionChange = 0; this.nextDirectionInterval = this.randomInterval(); this.sourceParams = this.generateSourceParams(); this.lastSourceTime = 0; this.resize(); this.initCanvas(); this.generateSourceEdge(); this.initLeadPosition(); this.startAnimation(); this.resizeObserver = new ResizeObserver(() => this.resize()); this.resizeObserver.observe(this.container); } generateSourceParams() { return { steps: 3 + Math.floor(Math.random() * 6), stripeWidth: 2 + Math.floor(Math.random() * 8), checkSize: 1 + Math.floor(Math.random() * 4), phase: 0, dashLength: 3 + Math.floor(Math.random() * 10), gapLength: 2 + Math.floor(Math.random() * 6), density: 0.05 + Math.random() * 0.25, frequency: 1 + Math.random() * 4, sinePhase: Math.random() * Math.PI * 2, seed1: Math.random() * 100, seed2: Math.random() * 100, seed3: Math.random() * 100, counter: Math.floor(Math.random() * 65536), caRule: Math.random() > 0.5 ? 30 : 110 }; } initDirection() { switch (this.startEdge) { case "top": this.dx = 0; this.dy = 1; break; case "bottom": this.dx = 0; this.dy = -1; break; case "left": this.dx = 1; this.dy = 0; break; case "right": this.dx = -1; this.dy = 0; break; default: this.dx = 0; this.dy = 1; } } initLeadPosition() { switch (this.startEdge) { case "top": this.leadX = Math.floor(this.internalWidth / 2); this.leadY = 1; break; case "bottom": this.leadX = Math.floor(this.internalWidth / 2); this.leadY = this.internalHeight - 2; break; case "left": this.leadX = 1; this.leadY = Math.floor(this.internalHeight / 2); break; case "right": this.leadX = this.internalWidth - 2; this.leadY = Math.floor(this.internalHeight / 2); break; } } resize() { var rect = this.container.getBoundingClientRect(); if (rect.width === 0 || rect.height === 0) return; this.internalWidth = Math.ceil(rect.width / this.pixelSize); this.internalHeight = Math.ceil(rect.height / this.pixelSize); var oldImageData = this.imageData; var oldWidth = this.canvas.width; var oldHeight = this.canvas.height; this.canvas.width = this.internalWidth; this.canvas.height = this.internalHeight; this.imageData = this.ctx.createImageData(this.internalWidth, this.internalHeight); if (oldImageData && oldWidth > 0 && oldHeight > 0) { var minW = Math.min(oldWidth, this.internalWidth); var minH = Math.min(oldHeight, this.internalHeight); for (var y = 0; y < minH; y++) { for (var x = 0; x < minW; x++) { var oi = (y * oldWidth + x) * 4; var ni = (y * this.internalWidth + x) * 4; this.imageData.data[ni] = oldImageData.data[oi]; this.imageData.data[ni + 1] = oldImageData.data[oi + 1]; this.imageData.data[ni + 2] = oldImageData.data[oi + 2]; this.imageData.data[ni + 3] = oldImageData.data[oi + 3]; } } } } hexToRGB(hex) { var r = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return r ? { r: parseInt(r[1], 16), g: parseInt(r[2], 16), b: parseInt(r[3], 16) } : { r: 255, g: 255, b: 255 }; } lerpColor(t) { return { r: Math.round(this.bgRGB.r + (this.fgRGB.r - this.bgRGB.r) * t), g: Math.round(this.bgRGB.g + (this.fgRGB.g - this.bgRGB.g) * t), b: Math.round(this.bgRGB.b + (this.fgRGB.b - this.bgRGB.b) * t) }; } getSourceValue(pos, length) { var t = pos / length; switch (this.sourceType) { case "noise": return Math.random() > 0.5 ? this.fgRGB : this.bgRGB; case "linear-gradient": return this.lerpColor(t); case "stepped-gradient": var steps = this.sourceParams.steps || 5; return this.lerpColor(Math.floor(t * steps) / (steps - 1)); case "random-gradient": if (!this.gradientCache || this.gradientCache.length !== length) this.generateRandomGradient(length); return this.lerpColor(this.gradientCache[pos]); case "stripes": return (Math.floor(pos / (this.sourceParams.stripeWidth || 4)) % 2 === 0) ? this.fgRGB : this.bgRGB; case "checkerboard": return ((Math.floor(pos / (this.sourceParams.checkSize || 2)) + (this.sourceParams.phase || 0)) % 2 === 0) ? this.fgRGB : this.bgRGB; case "dashes": var cycle = (this.sourceParams.dashLength || 6) + (this.sourceParams.gapLength || 3); return (pos % cycle < (this.sourceParams.dashLength || 6)) ? this.fgRGB : this.bgRGB; case "dots": return Math.random() < (this.sourceParams.density || 0.15) ? this.fgRGB : this.bgRGB; case "sine": var sv = (Math.sin((t * (this.sourceParams.frequency || 2) * Math.PI * 2) + (this.sourceParams.sinePhase || 0)) + 1) / 2; return this.lerpColor(sv); case "perlin": var p1 = Math.sin(t * 3.7 + this.sourceParams.seed1) * 0.5; var p2 = Math.sin(t * 7.3 + this.sourceParams.seed2) * 0.25; var p3 = Math.sin(t * 13.1 + this.sourceParams.seed3) * 0.125; return this.lerpColor(Math.max(0, Math.min(1, (p1 + p2 + p3 + 0.875) / 1.75))); case "binary-counter": return ((this.sourceParams.counter >> (pos % 16)) & 1) ? this.fgRGB : this.bgRGB; case "cellular-automata": if (!this.caState || this.caState.length !== length) this.initCellularAutomata(length); return this.caState[pos] ? this.fgRGB : this.bgRGB; default: return Math.random() > 0.5 ? this.fgRGB : this.bgRGB; } } generateRandomGradient(length) { var np = 3 + Math.floor(Math.random() * 4); var cp = [0]; for (var i = 1; i < np - 1; i++) cp.push(Math.random()); cp.push(1); cp.sort((a, b) => a - b); var cv = cp.map(() => Math.random()); this.gradientCache = []; for (var i = 0; i < length; i++) { var t = i / length; var si = 0; for (var j = 0; j < cp.length - 1; j++) { if (t >= cp[j] && t <= cp[j + 1]) { si = j; break; } } var st = (t - cp[si]) / (cp[si + 1] - cp[si]); this.gradientCache.push(cv[si] + (cv[si + 1] - cv[si]) * st); } } initCellularAutomata(length) { this.caState = []; for (var i = 0; i < length; i++) this.caState.push(Math.random() > 0.5); } evolveCellularAutomata() { if (!this.caState) return; var rule = this.sourceParams.caRule || 30; var os = [...this.caState]; var len = this.caState.length; for (var i = 0; i < len; i++) { var p = (os[(i - 1 + len) % len] ? 4 : 0) + (os[i] ? 2 : 0) + (os[(i + 1) % len] ? 1 : 0); this.caState[i] = ((rule >> p) & 1) === 1; } } updateSourceParams() { switch (this.sourceType) { case "checkerboard": this.sourceParams.phase = (this.sourceParams.phase + 1) % 2; break; case "sine": this.sourceParams.sinePhase += 0.5; break; case "binary-counter": this.sourceParams.counter++; break; case "cellular-automata": this.evolveCellularAutomata(); break; case "random-gradient": this.gradientCache = null; break; case "perlin": this.sourceParams.seed1 += 0.3; this.sourceParams.seed2 += 0.2; this.sourceParams.seed3 += 0.1; break; } } randomInterval() { return 100 + Math.random() * 900; } changeDirection() { var dirs = [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]]; var idx = dirs.findIndex(d => d[0] === this.dx && d[1] === this.dy); if (idx === -1) idx = 0; idx = Math.random() > 0.5 ? (idx + 1) % 8 : (idx + 7) % 8; this.dx = dirs[idx][0]; this.dy = dirs[idx][1]; } initCanvas() { if (!this.imageData) return; var data = this.imageData.data; var w = this.internalWidth, h = this.internalHeight; var isH = (this.startEdge === "top" || this.startEdge === "bottom"); for (var y = 0; y < h; y++) { for (var x = 0; x < w; x++) { var idx = (y * w + x) * 4; var col = this.getSourceValue(isH ? x : y, isH ? w : h); data[idx] = col.r; data[idx + 1] = col.g; data[idx + 2] = col.b; data[idx + 3] = 255; } } this.ctx.putImageData(this.imageData, 0, 0); } generateSourceEdge() { if (!this.imageData) return; this.updateSourceParams(); var data = this.imageData.data; var w = this.internalWidth, h = this.internalHeight; var gen = (getIdx, len) => { for (var i = 0; i < len; i++) { var idx = getIdx(i); var c = this.getSourceValue(i, len); data[idx] = c.r; data[idx + 1] = c.g; data[idx + 2] = c.b; data[idx + 3] = 255; } }; switch (this.startEdge) { case "top": gen(x => x * 4, w); break; case "bottom": gen(x => ((h - 1) * w + x) * 4, w); break; case "left": gen(y => (y * w) * 4, h); break; case "right": gen(y => (y * w + (w - 1)) * 4, h); break; } } getSourceEdgeCoord(x, y) { switch (this.startEdge) { case "top": return y === 0; case "bottom": return y === this.internalHeight - 1; case "left": return x === 0; case "right": return x === this.internalWidth - 1; } return false; } smear() { if (!this.imageData) return; var data = this.imageData.data; var w = this.internalWidth, h = this.internalHeight; this.subPixelX += this.dx * this.moveSpeed; this.subPixelY += this.dy * this.moveSpeed; var moveX = Math.trunc(this.subPixelX), moveY = Math.trunc(this.subPixelY); if (moveX === 0 && moveY === 0) return; this.subPixelX -= moveX; this.subPixelY -= moveY; this.leadX += moveX; this.leadY += moveY; if (this.leadX <= 0 || this.leadX >= w - 1) { this.dx = -this.dx; this.leadX = Math.max(0, Math.min(w - 1, this.leadX)); } if (this.leadY <= 0 || this.leadY >= h - 1) { this.dy = -this.dy; this.leadY = Math.max(0, Math.min(h - 1, this.leadY)); } var oldData = new Uint8ClampedArray(data); for (var y = 0; y < h; y++) { for (var x = 0; x < w; x++) { if (this.getSourceEdgeCoord(x, y)) continue; var srcX = Math.max(0, Math.min(w - 1, x - moveX)); var srcY = Math.max(0, Math.min(h - 1, y - moveY)); var dstIdx = (y * w + x) * 4, srcIdx = (srcY * w + srcX) * 4; data[dstIdx] = oldData[srcIdx]; data[dstIdx + 1] = oldData[srcIdx + 1]; data[dstIdx + 2] = oldData[srcIdx + 2]; data[dstIdx + 3] = oldData[srcIdx + 3]; } } } startAnimation() { var fi = 1000 / 60; var animate = (ts) => { if (!this.lastTime) this.lastTime = ts; if (!this.lastSourceTime) this.lastSourceTime = ts; if (!this.lastDirectionChange) this.lastDirectionChange = ts; if (ts - this.lastDirectionChange >= this.nextDirectionInterval) { this.changeDirection(); this.lastDirectionChange = ts; this.nextDirectionInterval = this.randomInterval(); } if (ts - this.lastSourceTime >= this.sourceInterval) { this.generateSourceEdge(); this.lastSourceTime = ts; } if (ts - this.lastTime >= fi) { this.smear(); if (this.imageData) this.ctx.putImageData(this.imageData, 0, 0); this.lastTime = ts; } this.animationId = requestAnimationFrame(animate); }; this.animationId = requestAnimationFrame(animate); } } function layoutSmears() { var vw = window.innerWidth, vh = window.innerHeight; document.querySelectorAll(".smear-container").forEach(function(div) { var x = parseFloat(div.dataset.x || 0); var y = parseFloat(div.dataset.y || 0); var w = parseFloat(div.dataset.width || 0); var h = parseFloat(div.dataset.height || 0); div.style.left = (x * vw) + "px"; div.style.top = (y * vh) + "px"; div.style.width = (w * vw) + "px"; div.style.height = (h * vh) + "px"; }); } function initSmears() { document.querySelectorAll(".smear-container").forEach(function(c) { if (!c._smearInstance) c._smearInstance = new SmearCanvas(c); }); } window.addEventListener("load", function() { layoutSmears(); initSmears(); }); window.addEventListener("resize", layoutSmears); layoutSmears(); initSmears(); </script></body></html>
<!doctype html><html><head><meta charset="utf-8"><title>shards</title><style> :root { /* Pattern 1: 7 bands */ --color1: #bb44dd; --color2: #000; --pos1: 0%; --pos2: 8.33%; --pos3: 25%; --pos4: 41.67%; --pos5: 58.33%; --pos6: 75%; --pos7: 91.67%; /* Pattern 2: 5 bands */ --color2-1: #6486f5; --color2-2: #000; --pos2-1: 0%; --pos2-2: 12.5%; --pos2-3: 37.5%; --pos2-4: 62.5%; --pos2-5: 87.5%; /* Pattern 3: 3 bands */ --color3-1: #ffffff; --color3-2: #000; --color4-1: #ff00cc; --color4-2: #000; --pos3-1: 0%; --pos3-2: 50%; --pos3-3: 100%; } body { background-color: black; margin: 0; padding: 0; width: 100vw; height: 100vh; overflow: hidden; } .gradient-container { position: absolute; overflow: hidden; transition: all 0.3s ease; clip-path: var(--clip-path); /* Emboss effect */ box-shadow: inset 2px 2px 5px rgba(255, 255, 255, 0.4), inset -2px -2px 5px rgba(0, 0, 0, 0.4); /* Add more depth with a subtle border */ } .gradient-up { background-image: repeating-linear-gradient( to bottom, var(--color1) var(--pos1), var(--color2) var(--pos2), var(--color1) var(--pos3), var(--color2) var(--pos4), var(--color1) var(--pos5), var(--color2) var(--pos6), var(--color1) var(--pos7) ); animation: moveUpwards 5s linear infinite; } .gradient-down { background-image: repeating-linear-gradient( to bottom, var(--color2-1) var(--pos2-1), var(--color2-2) var(--pos2-2), var(--color2-1) var(--pos2-3), var(--color2-2) var(--pos2-4), var(--color2-1) var(--pos2-5) ); animation: moveDownwards 5s linear infinite; } .gradient-left { background-image: repeating-linear-gradient( to right, var(--color3-1) var(--pos3-1), var(--color3-2) var(--pos3-2), var(--color3-1) var(--pos3-3) ); animation: moveLeft 5s linear infinite; } .gradient-right { background-image: repeating-linear-gradient( to right, var(--color4-1) var(--pos1), var(--color4-2) var(--pos2), var(--color4-1) var(--pos3), var(--color4-2) var(--pos4), var(--color4-1) var(--pos5), var(--color4-2) var(--pos6), var(--color4-1) var(--pos7) ); animation: moveRight 5s linear infinite; } .strobe { background-color: #000; } @keyframes strobeEffect { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes moveUpwards { 0% { background-position: 0 100%; } 100% { background-position: 0 -100%; } } @keyframes moveDownwards { 0% { background-position: 0 -100%; } 100% { background-position: 0 100%; } } @keyframes moveLeft { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } } @keyframes moveRight { 0% { background-position: -100% 0; } 100% { background-position: 100% 0; } } :root{--color1:#ff0000;--color2:#000;--pos1:0%;--pos2:8.33%;--pos3:25%;--pos4:41.67%;--pos5:58.33%;--pos6:75%;--pos7:91.67%;--color2-1:#00ff0c;--color2-2:#000;--pos2-1:0%;--pos2-2:12.5%;--pos2-3:37.5%;--pos2-4:62.5%;--pos2-5:87.5%;--color3-1:#494949;--color3-2:#000;--color4-1:#1d1d1d;--color4-2:#000;--pos3-1:0%;--pos3-2:50%;--pos3-3:100%;}:root{--color1: #ff0000; --color2-1: #00ff0c; --color3-1: #494949; --color4-1: #1d1d1d;}</style></head><body style="margin:0;background-color:black;width:100vw;height:100vh;overflow:hidden;"><div id="puzzle-container"><div class="gradient-container gradient-right" data-x="0" data-y="0" data-width="0.1" data-height="0.049" style="left: 0px; top: 0px; width: 40px; height: 19.6px; --clip-path: polygon(0% 0%, 59% 0%, 77% 155%, 0% 72%); background-size: 80px 19.6px; animation-duration: 36s;"></div><div class="gradient-container gradient-right" data-x="0" data-y="0.049" data-width="0.1" data-height="0.301" style="left: 0px; top: 19.6px; width: 40px; height: 120.4px; --clip-path: polygon(0% -5%, 77% 9%, 144% 125%, 0% 79%); background-size: 80px 120.4px; animation-duration: 48s;"></div><div class="gradient-container gradient-left" data-x="0.1" data-y="0" data-width="0.20358" data-height="0.006999999999999999" style="left: 40px; top: 0px; width: 81.432px; height: 2.8px; --clip-path: polygon(-20% 0%, 95% 0%, 111% 100%, 18% 100%); background-size: 162.864px 2.8px; animation-duration: 46s;"></div><div class="gradient-container gradient-right" data-x="0.30358" data-y="0" data-width="0.02098979999999999" data-height="0.006999999999999999" style="left: 121.432px; top: 0px; width: 8.39592px; height: 2.8px; --clip-path: polygon(-45% 0%, -173% 0%, 137% 100%, 102% 100%); background-size: 16.79184px 2.8px; animation-duration: 88s;"></div><div class="gradient-container gradient-right" data-x="0.3245698" data-y="0" data-width="0.009430199999999993" data-height="0.006999999999999999" style="left: 129.82792px; top: 0px; width: 3.77208px; height: 2.8px; --clip-path: polygon(-607% 0%, -743% 0%, 620% 100%, 82% 100%); background-size: 7.54416px 2.8px; animation-duration: 94s;"></div><div class="gradient-container gradient-left" data-x="0.1" data-y="0.006999999999999999" data-width="0.05148" data-height="0.11318999999999999" style="left: 40px; top: 2.8px; width: 20.592px; height: 45.276px; --clip-path: polygon(71% 0%, 127% 0%, 253% 165%, 103% 76%); background-size: 41.184px 45.276px; animation-duration: 55s;"></div><div class="gradient-container gradient-up" data-x="0.15148" data-y="0.006999999999999999" data-width="0.18252" data-height="0.11318999999999999" style="left: 60.592px; top: 2.8px; width: 73.008px; height: 45.276px; --clip-path: polygon(7% 0%, 127% 0%, 100% 161%, 43% 165%); background-size: 73.008px 90.552px; animation-duration: 65s;"></div><div class="gradient-container gradient-right" data-x="0.1" data-y="0.12018999999999998" data-width="0.23399999999999999" data-height="0.22981" style="left: 40px; top: 48.076px; width: 93.6px; height: 91.924px; --clip-path: polygon(23% -12%, 100% 30%, 117% 126%, 19% 133%); background-size: 187.2px 91.924px; animation-duration: 29s;"></div><div class="gradient-container gradient-right" data-x="0.33399999999999996" data-y="0" data-width="0.29104199999999997" data-height="0.196" style="left: 133.6px; top: 0px; width: 116.4168px; height: 78.4px; --clip-path: polygon(-27% 0%, 118% 0%, 107% 68%, 17% 118%); background-size: 232.8336px 78.4px; animation-duration: 71s;"></div><div class="gradient-container gradient-up" data-x="0.33399999999999996" data-y="0.196" data-width="0.29104199999999997" data-height="0.154" style="left: 133.6px; top: 78.4px; width: 116.4168px; height: 61.6px; --clip-path: polygon(17% 23%, 107% -40%, 102% 60%, 13% 139%); background-size: 116.4168px 123.2px; animation-duration: 1s;"></div><div class="gradient-container gradient-left" data-x="0.625042" data-y="0" data-width="0.3416579999999999" data-height="0.35" style="left: 250.0168px; top: 0px; width: 136.6632px; height: 140px; --clip-path: polygon(16% 0%, 116% 0%, 88% 117%, 2% 82%); background-size: 273.3264px 140px; animation-duration: 37s;"></div><div class="gradient-container gradient-down" data-x="0.9666999999999999" data-y="0" data-width="0.03330000000000005" data-height="0.0217" style="left: 386.68px; top: 0px; width: 13.32px; height: 8.68px; --clip-path: polygon(159% 0%, 100% 0%, 100% 100%, 169% 100%); background-size: 13.32px 17.36px; animation-duration: 66s;"></div><div class="gradient-container gradient-left" data-x="0.9666999999999999" data-y="0.0217" data-width="0.03330000000000005" data-height="0.1953" style="left: 386.68px; top: 8.68px; width: 13.32px; height: 78.12px; --clip-path: polygon(169% 0%, 100% 0%, 100% 83%, 110% 82%); background-size: 26.64px 78.12px; animation-duration: 74s;"></div><div class="gradient-container gradient-up" data-x="0.9666999999999999" data-y="0.217" data-width="0.03330000000000005" data-height="0.11704" style="left: 386.68px; top: 86.8px; width: 13.32px; height: 46.816px; --clip-path: polygon(110% -30%, 100% -29%, 100% 91%, 187% 92%); background-size: 13.32px 93.632px; animation-duration: 49s;"></div><div class="gradient-container gradient-up" data-x="0.9666999999999999" data-y="0.33403999999999995" data-width="0.03330000000000005" data-height="0.015960000000000002" style="left: 386.68px; top: 133.616px; width: 13.32px; height: 6.384px; --clip-path: polygon(187% -59%, 100% -64%, 100% 350%, -126% 473%); background-size: 13.32px 12.768px; animation-duration: 9s;"></div><div class="gradient-container gradient-down" data-x="0" data-y="0.35" data-width="0.75" data-height="0.65" style="left: 0px; top: 140px; width: 300px; height: 260px; --clip-path: polygon(0% -10%, 98% 3%, 89% 100%, 0% 100%); background-size: 300px 520px; animation-duration: 21s;"></div><div class="gradient-container gradient-up" data-x="0.75" data-y="0.35" data-width="0.22" data-height="0.2145" style="left: 300px; top: 140px; width: 88px; height: 85.8px; --clip-path: polygon(-8% 8%, 113% -19%, 124% 70%, -22% 134%); background-size: 88px 171.6px; animation-duration: 56s;"></div><div class="gradient-container gradient-left" data-x="0.97" data-y="0.35" data-width="0.03" data-height="0.2145" style="left: 388px; top: 140px; width: 12px; height: 85.8px; --clip-path: polygon(98% -19%, 100% 19%, 100% 110%, 175% 70%); background-size: 24px 85.8px; animation-duration: 31s;"></div><div class="gradient-container gradient-right" data-x="0.75" data-y="0.5645" data-width="0.25" data-height="0.00871" style="left: 300px; top: 225.8px; width: 100px; height: 3.484px; --clip-path: polygon(-19% 839%, 100% 238%, 100% -84%, 15% -460%); background-size: 200px 3.484px; animation-duration: 22s;"></div><div class="gradient-container gradient-left" data-x="0.75" data-y="0.57321" data-width="0.19" data-height="0.12376909999999999" style="left: 300px; top: 229.284px; width: 76px; height: 49.50764px; --clip-path: polygon(20% -39%, 84% -47%, 74% 161%, 6% 132%); background-size: 152px 49.50764px; animation-duration: 78s;"></div><div class="gradient-container gradient-right" data-x="0.94" data-y="0.57321" data-width="0.06" data-height="0.12376909999999999" style="left: 376px; top: 229.284px; width: 24px; height: 49.50764px; --clip-path: polygon(-49% -47%, 100% -13%, 100% 114%, -82% 161%); background-size: 48px 49.50764px; animation-duration: 25s;"></div><div class="gradient-container gradient-down" data-x="0.75" data-y="0.6969791000000001" data-width="0.25" data-height="0.14545003199999998" style="left: 300px; top: 278.79164px; width: 100px; height: 58.180013px; --clip-path: polygon(4% 28%, 100% 12%, 100% 60%, 11% 135%); background-size: 100px 116.360026px; animation-duration: 82s;"></div><div class="gradient-container gradient-up" data-x="0.75" data-y="0.842429132" data-width="0.25" data-height="0.15757086799999998" style="left: 300px; top: 336.971653px; width: 100px; height: 63.028347px; --clip-path: polygon(11% 32%, 100% -37%, 100% 100%, -32% 100%); background-size: 100px 126.056694px; animation-duration: 77s;"></div></div><script>function layoutShards(){var vw=window.innerWidth;var vh=window.innerHeight;document.querySelectorAll(".gradient-container").forEach(function(div){var x=parseFloat(div.dataset.x||0);var y=parseFloat(div.dataset.y||0);var w=parseFloat(div.dataset.width||0);var h=parseFloat(div.dataset.height||0);div.style.left=(x*vw)+"px";div.style.top=(y*vh)+"px";div.style.width=(w*vw)+"px";div.style.height=(h*vh)+"px";if(div.classList.contains("gradient-left")||div.classList.contains("gradient-right")){div.style.backgroundSize=(w*vw*2)+"px "+(h*vh)+"px";}else{div.style.backgroundSize=(w*vw)+"px "+(h*vh*2)+"px";}});}window.addEventListener("resize",layoutShards);window.addEventListener("load",layoutShards);layoutShards();</script></body></html>
<!doctype html><html><head><meta charset="utf-8"><title>shards</title><style> :root { /* Pattern 1: 7 bands */ --color1: #bb44dd; --color2: #000; --pos1: 0%; --pos2: 8.33%; --pos3: 25%; --pos4: 41.67%; --pos5: 58.33%; --pos6: 75%; --pos7: 91.67%; /* Pattern 2: 5 bands */ --color2-1: #6486f5; --color2-2: #000; --pos2-1: 0%; --pos2-2: 12.5%; --pos2-3: 37.5%; --pos2-4: 62.5%; --pos2-5: 87.5%; /* Pattern 3: 3 bands */ --color3-1: #ffffff; --color3-2: #000; --color4-1: #ff00cc; --color4-2: #000; --pos3-1: 0%; --pos3-2: 50%; --pos3-3: 100%; } body { background-color: black; margin: 0; padding: 0; width: 100vw; height: 100vh; overflow: hidden; } .gradient-container { position: absolute; overflow: hidden; transition: all 0.3s ease; clip-path: var(--clip-path); /* Emboss effect */ box-shadow: inset 2px 2px 5px rgba(255, 255, 255, 0.4), inset -2px -2px 5px rgba(0, 0, 0, 0.4); /* Add more depth with a subtle border */ } .gradient-up { background-image: repeating-linear-gradient( to bottom, var(--color1) var(--pos1), var(--color2) var(--pos2), var(--color1) var(--pos3), var(--color2) var(--pos4), var(--color1) var(--pos5), var(--color2) var(--pos6), var(--color1) var(--pos7) ); animation: moveUpwards 5s linear infinite; } .gradient-down { background-image: repeating-linear-gradient( to bottom, var(--color2-1) var(--pos2-1), var(--color2-2) var(--pos2-2), var(--color2-1) var(--pos2-3), var(--color2-2) var(--pos2-4), var(--color2-1) var(--pos2-5) ); animation: moveDownwards 5s linear infinite; } .gradient-left { background-image: repeating-linear-gradient( to right, var(--color3-1) var(--pos3-1), var(--color3-2) var(--pos3-2), var(--color3-1) var(--pos3-3) ); animation: moveLeft 5s linear infinite; } .gradient-right { background-image: repeating-linear-gradient( to right, var(--color4-1) var(--pos1), var(--color4-2) var(--pos2), var(--color4-1) var(--pos3), var(--color4-2) var(--pos4), var(--color4-1) var(--pos5), var(--color4-2) var(--pos6), var(--color4-1) var(--pos7) ); animation: moveRight 5s linear infinite; } .strobe { background-color: #000; } @keyframes strobeEffect { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes moveUpwards { 0% { background-position: 0 100%; } 100% { background-position: 0 -100%; } } @keyframes moveDownwards { 0% { background-position: 0 -100%; } 100% { background-position: 0 100%; } } @keyframes moveLeft { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } } @keyframes moveRight { 0% { background-position: -100% 0; } 100% { background-position: 100% 0; } } :root{--color1:#B4ff00;--color2:#000;--pos1:0%;--pos2:8.33%;--pos3:25%;--pos4:41.67%;--pos5:58.33%;--pos6:75%;--pos7:91.67%;--color2-1:#FF00CC;--color2-2:#000;--pos2-1:0%;--pos2-2:12.5%;--pos2-3:37.5%;--pos2-4:62.5%;--pos2-5:87.5%;--color3-1:#FFFFFF;--color3-2:#000;--color4-1:#783f7d;--color4-2:#000;--pos3-1:0%;--pos3-2:50%;--pos3-3:100%;}:root{--color1: #B4ff00; --color2-1: #FF00CC; --color3-1: #FFFFFF; --color4-1: #783f7d;}</style></head><body style="margin:0;background-color:black;width:100vw;height:100vh;overflow:hidden;"><div id="puzzle-container"><div class="gradient-container gradient-left" data-x="0" data-y="0" data-width="0.018799999999999997" data-height="0.18094670999999998" style="left: 0px; top: 0px; width: 7.52px; height: 72.378684px; --clip-path: polygon(0% 0%, 100% 0%, 100% 76%, 0% 112%); background-size: 15.04px 72.378684px; animation-duration: 48s;"></div><div class="gradient-container gradient-left" data-x="0" data-y="0.18094670999999998" data-width="0.018799999999999997" data-height="0.20404629" style="left: 0px; top: 72.378684px; width: 7.52px; height: 81.618516px; --clip-path: polygon(0% 11%, 100% -21%, 100% 130%, 0% 92%); background-size: 15.04px 81.618516px; animation-duration: 54s;"></div><div class="gradient-container gradient-left" data-x="0" data-y="0.384993" data-width="0.018799999999999997" data-height="0.011906999999999996" style="left: 0px; top: 153.9972px; width: 7.52px; height: 4.7628px; --clip-path: polygon(0% -133%, 100% 508%, 100% 204%, 0% -365%); background-size: 15.04px 4.7628px; animation-duration: 3s;"></div><div class="gradient-container gradient-up" data-x="0" data-y="0.3969" data-width="0.018799999999999997" data-height="0.03932544000000001" style="left: 0px; top: 158.76px; width: 7.52px; height: 15.730176px; --clip-path: polygon(0% -141%, 100% 32%, 100% -10%, 0% 156%); background-size: 7.52px 31.460352px; animation-duration: 33s;"></div><div class="gradient-container gradient-up" data-x="0" data-y="0.43622543999999996" data-width="0.018799999999999997" data-height="0.05005056000000001" style="left: 0px; top: 174.490176px; width: 7.52px; height: 20.020224px; --clip-path: polygon(0% 44%, 100% -86%, 100% 11%, 0% 197%); background-size: 7.52px 40.040448px; animation-duration: 94s;"></div><div class="gradient-container gradient-up" data-x="0" data-y="0.486276" data-width="0.009212" data-height="0.0037240000000000073" style="left: 0px; top: 194.5104px; width: 3.6848px; height: 1.4896px; --clip-path: polygon(0% 1310%, 100% -95%, 100% -1316%, 0% 2112%); background-size: 3.6848px 2.9792px; animation-duration: 100s;"></div><div class="gradient-container gradient-left" data-x="0.009212" data-y="0.486276" data-width="0.009588" data-height="0.0037240000000000073" style="left: 3.6848px; top: 194.5104px; width: 3.8352px; height: 1.4896px; --clip-path: polygon(0% -95%, 100% -1194%, 100% -1333%, 0% -1316%); background-size: 7.6704px 1.4896px; animation-duration: 8s;"></div><div class="gradient-container gradient-right" data-x="0.018799999999999997" data-y="0" data-width="0.9212" data-height="0.49" style="left: 7.52px; top: 0px; width: 368.48px; height: 196px; --clip-path: polygon(0% 0%, 101% 0%, 104% 85%, 0% 89%); background-size: 736.96px 196px; animation-duration: 89s;"></div><div class="gradient-container gradient-right" data-x="0" data-y="0.49" data-width="0.94" data-height="0.51" style="left: 0px; top: 196px; width: 376px; height: 204px; --clip-path: polygon(0% 15%, 104% -14%, 93% 100%, 0% 100%); background-size: 752px 204px; animation-duration: 1s;"></div><div class="gradient-container gradient-down" data-x="0.94" data-y="0" data-width="0.06" data-height="0.92" style="left: 376px; top: 0px; width: 24px; height: 368px; --clip-path: polygon(10% 0%, 100% 0%, 100% 106%, 102% 104%); background-size: 24px 736px; animation-duration: 92s;"></div><div class="gradient-container gradient-left" data-x="0.94" data-y="0.92" data-width="0.06" data-height="0.0416" style="left: 376px; top: 368px; width: 24px; height: 16.64px; --clip-path: polygon(102% 94%, 100% 142%, 100% 39%, -128% 287%); background-size: 48px 16.64px; animation-duration: 18s;"></div><div class="gradient-container gradient-left" data-x="0.94" data-y="0.9616" data-width="0.024" data-height="0.009216" style="left: 376px; top: 384.64px; width: 9.6px; height: 3.6864px; --clip-path: polygon(-321% 846%, 389% -714%, 167% -386%, -159% -748%); background-size: 19.2px 3.6864px; animation-duration: 78s;"></div><div class="gradient-container gradient-up" data-x="0.94" data-y="0.9708159999999999" data-width="0.024" data-height="0.029184" style="left: 376px; top: 388.3264px; width: 9.6px; height: 11.6736px; --clip-path: polygon(-159% -268%, 167% -153%, 9% 100%, -268% 100%); background-size: 9.6px 23.3472px; animation-duration: 17s;"></div><div class="gradient-container gradient-right" data-x="0.9640000000000001" data-y="0.9616" data-width="0.036000000000000004" data-height="0.0384" style="left: 385.6px; top: 384.64px; width: 14.4px; height: 15.36px; --clip-path: polygon(193% -171%, 100% -66%, 100% 100%, -60% 100%); background-size: 28.8px 15.36px; animation-duration: 47s;"></div></div><script>function layoutShards(){var vw=window.innerWidth;var vh=window.innerHeight;document.querySelectorAll(".gradient-container").forEach(function(div){var x=parseFloat(div.dataset.x||0);var y=parseFloat(div.dataset.y||0);var w=parseFloat(div.dataset.width||0);var h=parseFloat(div.dataset.height||0);div.style.left=(x*vw)+"px";div.style.top=(y*vh)+"px";div.style.width=(w*vw)+"px";div.style.height=(h*vh)+"px";if(div.classList.contains("gradient-left")||div.classList.contains("gradient-right")){div.style.backgroundSize=(w*vw*2)+"px "+(h*vh)+"px";}else{div.style.backgroundSize=(w*vw)+"px "+(h*vh*2)+"px";}});}window.addEventListener("resize",layoutShards);window.addEventListener("load",layoutShards);layoutShards();</script></body></html>