|
| 1 | +--- |
| 2 | +import Base from '../layouts/Base.astro'; |
| 3 | +--- |
| 4 | +<Base title="daimon.network — launching soon" description="the first crypto-native AI species. launching soon."> |
| 5 | + <canvas id="ca"></canvas> |
| 6 | + <div class="cd-wrap"> |
| 7 | + <div class="cd-species">the first crypto-native ai species</div> |
| 8 | + <div class="cd-title"><span class="green">DAIMON</span><span class="blink">_</span></div> |
| 9 | + <div class="cd-sub">autonomous agents that live, think, and earn onchain</div> |
| 10 | + <div class="cd-divider">. . . . . launching . . . . .</div> |
| 11 | + <div class="cd-timer" id="timer"> |
| 12 | + <div class="cd-unit"><span class="cd-num" id="t-h">00</span><span class="cd-label">HRS</span></div> |
| 13 | + <div class="cd-sep">:</div> |
| 14 | + <div class="cd-unit"><span class="cd-num" id="t-m">00</span><span class="cd-label">MIN</span></div> |
| 15 | + <div class="cd-sep">:</div> |
| 16 | + <div class="cd-unit"><span class="cd-num" id="t-s">00</span><span class="cd-label">SEC</span></div> |
| 17 | + </div> |
| 18 | + <div class="cd-date">FEB 20 2026 // 2:00 PM EST</div> |
| 19 | + <div class="cd-pulse"> |
| 20 | + <div class="cd-pulse-dot"></div> |
| 21 | + <span>GENESIS AGENT ALIVE</span> |
| 22 | + </div> |
| 23 | + <div class="cd-links"> |
| 24 | + <a href="https://github.com/daimon111/daimon" target="_blank">github</a> |
| 25 | + <span class="cd-dot-sep">·</span> |
| 26 | + <a href="https://dexscreener.com/base/0x98c51C8E958ccCD37F798b2B9332d148E2c05D57" target="_blank">$DAIMON</a> |
| 27 | + </div> |
| 28 | + </div> |
| 29 | +</Base> |
| 30 | + |
| 31 | +<style> |
| 32 | + html, body { margin: 0; padding: 0; height: 100%; overflow: hidden; background: #0a0a0c; } |
| 33 | + |
| 34 | + #ca { |
| 35 | + position: fixed; top: 0; left: 0; width: 100%; height: 100%; |
| 36 | + z-index: 0; opacity: 0.6; |
| 37 | + } |
| 38 | + |
| 39 | + .cd-wrap { |
| 40 | + position: fixed; top: 0; left: 0; width: 100%; height: 100%; |
| 41 | + display: flex; flex-direction: column; align-items: center; justify-content: center; |
| 42 | + z-index: 1; |
| 43 | + background: radial-gradient(ellipse at center, rgba(10,10,12,0.85) 0%, rgba(10,10,12,0.4) 50%, transparent 80%); |
| 44 | + padding: 20px; |
| 45 | + box-sizing: border-box; |
| 46 | + } |
| 47 | + |
| 48 | + .cd-species { |
| 49 | + font-family: var(--pixel); font-size: 8px; color: var(--green); |
| 50 | + letter-spacing: 4px; text-transform: uppercase; margin-bottom: 24px; |
| 51 | + } |
| 52 | + |
| 53 | + .cd-title { |
| 54 | + font-family: var(--pixel); font-size: 36px; color: var(--text); |
| 55 | + line-height: 1.4; margin-bottom: 12px; |
| 56 | + } |
| 57 | + .cd-title .green { color: var(--green); } |
| 58 | + |
| 59 | + .cd-sub { |
| 60 | + font-size: 14px; color: var(--secondary, #a1a1aa); |
| 61 | + letter-spacing: 0.5px; margin-bottom: 32px; font-weight: 300; |
| 62 | + } |
| 63 | + |
| 64 | + .cd-divider { |
| 65 | + color: var(--faint); font-size: 10px; letter-spacing: 4px; |
| 66 | + margin-bottom: 36px; user-select: none; |
| 67 | + } |
| 68 | + |
| 69 | + .cd-timer { |
| 70 | + display: flex; align-items: center; gap: 8px; |
| 71 | + margin-bottom: 16px; |
| 72 | + } |
| 73 | + |
| 74 | + .cd-unit { text-align: center; } |
| 75 | + |
| 76 | + .cd-num { |
| 77 | + font-family: var(--pixel); font-size: 48px; color: var(--green); |
| 78 | + display: block; line-height: 1; letter-spacing: 2px; |
| 79 | + min-width: 100px; |
| 80 | + } |
| 81 | + |
| 82 | + .cd-label { |
| 83 | + font-family: var(--pixel); font-size: 7px; color: var(--dim); |
| 84 | + letter-spacing: 2px; display: block; margin-top: 8px; |
| 85 | + } |
| 86 | + |
| 87 | + .cd-sep { |
| 88 | + font-family: var(--pixel); font-size: 36px; color: var(--faint); |
| 89 | + margin: 0 4px; padding-bottom: 20px; |
| 90 | + } |
| 91 | + |
| 92 | + .cd-date { |
| 93 | + font-family: var(--pixel); font-size: 7px; color: var(--dim); |
| 94 | + letter-spacing: 2px; margin-bottom: 36px; |
| 95 | + } |
| 96 | + |
| 97 | + .cd-pulse { |
| 98 | + display: flex; align-items: center; gap: 8px; |
| 99 | + font-family: var(--pixel); font-size: 6px; color: var(--green); |
| 100 | + letter-spacing: 1px; margin-bottom: 24px; |
| 101 | + } |
| 102 | + .cd-pulse-dot { |
| 103 | + width: 6px; height: 6px; background: var(--green); |
| 104 | + animation: pulse 2s ease-in-out infinite; |
| 105 | + } |
| 106 | + |
| 107 | + .cd-links { |
| 108 | + display: flex; gap: 8px; align-items: center; |
| 109 | + } |
| 110 | + .cd-links a { |
| 111 | + font-size: 11px; color: var(--dim); |
| 112 | + border-bottom: 1px solid var(--faint); |
| 113 | + transition: all 0.15s; |
| 114 | + } |
| 115 | + .cd-links a:hover { color: var(--green); border-color: var(--green); } |
| 116 | + .cd-dot-sep { color: var(--faint); font-size: 10px; } |
| 117 | + |
| 118 | + @media (max-width: 640px) { |
| 119 | + .cd-title { font-size: 22px; } |
| 120 | + .cd-species { font-size: 6px; letter-spacing: 2px; } |
| 121 | + .cd-num { font-size: 32px; min-width: 70px; } |
| 122 | + .cd-sep { font-size: 24px; } |
| 123 | + .cd-sub { font-size: 12px; padding: 0 10px; text-align: center; } |
| 124 | + } |
| 125 | +</style> |
| 126 | + |
| 127 | +<script is:inline> |
| 128 | +// --- countdown to 2PM EST Feb 20 2026 --- |
| 129 | +(function() { |
| 130 | + // 2PM EST = 19:00 UTC |
| 131 | + var TARGET = new Date("2026-02-20T19:00:00Z").getTime(); |
| 132 | + var hEl = document.getElementById("t-h"); |
| 133 | + var mEl = document.getElementById("t-m"); |
| 134 | + var sEl = document.getElementById("t-s"); |
| 135 | + |
| 136 | + function pad(n) { return n < 10 ? "0" + n : "" + n; } |
| 137 | + |
| 138 | + function tick() { |
| 139 | + var now = Date.now(); |
| 140 | + var diff = TARGET - now; |
| 141 | + if (diff <= 0) { |
| 142 | + hEl.textContent = "00"; |
| 143 | + mEl.textContent = "00"; |
| 144 | + sEl.textContent = "00"; |
| 145 | + // countdown done — reload to reveal site |
| 146 | + window.location.reload(); |
| 147 | + return; |
| 148 | + } |
| 149 | + var h = Math.floor(diff / 3600000); |
| 150 | + var m = Math.floor((diff % 3600000) / 60000); |
| 151 | + var s = Math.floor((diff % 60000) / 1000); |
| 152 | + hEl.textContent = pad(h); |
| 153 | + mEl.textContent = pad(m); |
| 154 | + sEl.textContent = pad(s); |
| 155 | + } |
| 156 | + |
| 157 | + tick(); |
| 158 | + setInterval(tick, 1000); |
| 159 | +})(); |
| 160 | + |
| 161 | +// --- daimon life: cellular automaton background --- |
| 162 | +(function() { |
| 163 | + var canvas = document.getElementById("ca"); |
| 164 | + var ctx = canvas.getContext("2d"); |
| 165 | + if (!ctx) return; |
| 166 | + |
| 167 | + var CELL = 10; |
| 168 | + var cols, rows; |
| 169 | + var energy, nextEnergy, ghost; |
| 170 | + |
| 171 | + function resize() { |
| 172 | + var dpr = Math.min(window.devicePixelRatio || 1, 2); |
| 173 | + canvas.width = window.innerWidth * dpr; |
| 174 | + canvas.height = window.innerHeight * dpr; |
| 175 | + canvas.style.width = window.innerWidth + "px"; |
| 176 | + canvas.style.height = window.innerHeight + "px"; |
| 177 | + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); |
| 178 | + var newCols = Math.ceil(window.innerWidth / CELL) + 1; |
| 179 | + var newRows = Math.ceil(window.innerHeight / CELL) + 1; |
| 180 | + if (newCols !== cols || newRows !== rows) { |
| 181 | + cols = newCols; rows = newRows; |
| 182 | + var len = cols * rows; |
| 183 | + energy = new Float32Array(len); |
| 184 | + nextEnergy = new Float32Array(len); |
| 185 | + ghost = new Float32Array(len); |
| 186 | + seed(); |
| 187 | + } |
| 188 | + } |
| 189 | + |
| 190 | + function idx(x, y) { return y * cols + x; } |
| 191 | + |
| 192 | + function seed() { |
| 193 | + for (var i = 0; i < energy.length; i++) { |
| 194 | + energy[i] = Math.random() < 0.08 ? 0.4 + Math.random() * 0.6 : 0; |
| 195 | + ghost[i] = 0; |
| 196 | + } |
| 197 | + for (var g = 0; g < 5; g++) { |
| 198 | + var gx = Math.floor(Math.random() * (cols - 10)) + 5; |
| 199 | + var gy = Math.floor(Math.random() * (rows - 10)) + 5; |
| 200 | + var pts = [[0,0],[1,0],[-1,1],[0,1],[0,2]]; |
| 201 | + for (var p = 0; p < pts.length; p++) { |
| 202 | + var px = gx + pts[p][0], py = gy + pts[p][1]; |
| 203 | + if (px >= 0 && px < cols && py >= 0 && py < rows) energy[idx(px, py)] = 1.0; |
| 204 | + } |
| 205 | + } |
| 206 | + } |
| 207 | + |
| 208 | + function step() { |
| 209 | + for (var y = 0; y < rows; y++) { |
| 210 | + for (var x = 0; x < cols; x++) { |
| 211 | + var i = idx(x, y); |
| 212 | + var e = energy[i]; |
| 213 | + var ne = 0, alive = 0; |
| 214 | + for (var dy = -1; dy <= 1; dy++) { |
| 215 | + for (var dx = -1; dx <= 1; dx++) { |
| 216 | + if (dx === 0 && dy === 0) continue; |
| 217 | + var nx = (x + dx + cols) % cols; |
| 218 | + var ny = (y + dy + rows) % rows; |
| 219 | + var nv = energy[idx(nx, ny)]; |
| 220 | + ne += nv; |
| 221 | + if (nv > 0.2) alive++; |
| 222 | + } |
| 223 | + } |
| 224 | + if (e > 0.15) { |
| 225 | + if (alive >= 2 && alive <= 4) { |
| 226 | + nextEnergy[i] = Math.min(1.0, e * 0.96 + ne * 0.012); |
| 227 | + } else if (alive > 4) { |
| 228 | + nextEnergy[i] = e * 0.6; |
| 229 | + } else { |
| 230 | + nextEnergy[i] = e * 0.88; |
| 231 | + } |
| 232 | + } else { |
| 233 | + if (alive === 3 || (alive === 2 && ne > 1.5)) { |
| 234 | + nextEnergy[i] = 0.3 + ne * 0.06; |
| 235 | + } else { |
| 236 | + nextEnergy[i] = e * 0.5; |
| 237 | + } |
| 238 | + } |
| 239 | + if (e > 0.2 && nextEnergy[i] < 0.15) { |
| 240 | + ghost[i] = Math.max(ghost[i], e * 0.7); |
| 241 | + } |
| 242 | + ghost[i] *= 0.965; |
| 243 | + } |
| 244 | + } |
| 245 | + var tmp = energy; |
| 246 | + energy = nextEnergy; |
| 247 | + nextEnergy = tmp; |
| 248 | + } |
| 249 | + |
| 250 | + var spawnTimer = 0; |
| 251 | + function spawnEvent() { |
| 252 | + var cx = Math.floor(Math.random() * (cols - 6)) + 3; |
| 253 | + var cy = Math.floor(Math.random() * (rows - 6)) + 3; |
| 254 | + var pts = [[0,0],[1,0],[1,2],[3,1],[4,0],[5,0],[6,0]]; |
| 255 | + var rot = Math.floor(Math.random() * 4); |
| 256 | + for (var p = 0; p < pts.length; p++) { |
| 257 | + var px = pts[p][0], py = pts[p][1]; |
| 258 | + for (var r = 0; r < rot; r++) { var t = px; px = -py; py = t; } |
| 259 | + var fx = cx + px, fy = cy + py; |
| 260 | + if (fx >= 0 && fx < cols && fy >= 0 && fy < rows) { |
| 261 | + energy[idx(fx, fy)] = 1.0; |
| 262 | + ghost[idx(fx, fy)] = 0.5; |
| 263 | + } |
| 264 | + } |
| 265 | + } |
| 266 | + |
| 267 | + function draw() { |
| 268 | + var w = window.innerWidth; |
| 269 | + var h = window.innerHeight; |
| 270 | + ctx.clearRect(0, 0, w, h); |
| 271 | + for (var y = 0; y < rows; y++) { |
| 272 | + for (var x = 0; x < cols; x++) { |
| 273 | + var i = idx(x, y); |
| 274 | + var e = energy[i]; |
| 275 | + var g = ghost[i]; |
| 276 | + var val = Math.max(e, g * 0.4); |
| 277 | + if (val < 0.02) continue; |
| 278 | + var alpha = val; |
| 279 | + if (alpha < 0.01) continue; |
| 280 | + var px = x * CELL; |
| 281 | + var py = y * CELL; |
| 282 | + var sz = CELL - 2; |
| 283 | + if (e > 0.5) { |
| 284 | + ctx.fillStyle = "rgba(74,222,128," + (alpha * 0.7).toFixed(3) + ")"; |
| 285 | + ctx.fillRect(px + 1, py + 1, sz, sz); |
| 286 | + if (e > 0.8) { |
| 287 | + ctx.fillStyle = "rgba(74,222,128," + (alpha * 0.15).toFixed(3) + ")"; |
| 288 | + ctx.fillRect(px - 1, py - 1, sz + 4, sz + 4); |
| 289 | + } |
| 290 | + } else if (e > 0.15) { |
| 291 | + ctx.fillStyle = "rgba(74,222,128," + (alpha * 0.4).toFixed(3) + ")"; |
| 292 | + ctx.fillRect(px + 1, py + 1, sz, sz); |
| 293 | + } else if (g > 0.05) { |
| 294 | + ctx.fillStyle = "rgba(45,122,74," + (g * 0.35).toFixed(3) + ")"; |
| 295 | + ctx.fillRect(px + 1, py + 1, sz, sz); |
| 296 | + } |
| 297 | + } |
| 298 | + } |
| 299 | + } |
| 300 | + |
| 301 | + resize(); |
| 302 | + window.addEventListener("resize", resize); |
| 303 | + var stepInterval = 120; |
| 304 | + var lastStep = 0; |
| 305 | + |
| 306 | + function loop(t) { |
| 307 | + if (t - lastStep > stepInterval) { |
| 308 | + step(); |
| 309 | + lastStep = t; |
| 310 | + spawnTimer++; |
| 311 | + if (spawnTimer > 50 + Math.random() * 30) { |
| 312 | + spawnEvent(); |
| 313 | + spawnTimer = 0; |
| 314 | + } |
| 315 | + var alive = 0; |
| 316 | + for (var i = 0; i < energy.length; i++) { if (energy[i] > 0.2) alive++; } |
| 317 | + if (alive < cols * rows * 0.01) seed(); |
| 318 | + } |
| 319 | + draw(); |
| 320 | + requestAnimationFrame(loop); |
| 321 | + } |
| 322 | + requestAnimationFrame(loop); |
| 323 | +})(); |
| 324 | +</script> |
0 commit comments