Satu kanvas 40×40 piksel yang bernapas — langit bergradasi, matahari berdenyut pelan, awan melayang, dan burung kecil yang tak pernah diam di titik yang sama.
Tiga keputusan desain yang bikin animasi ini terasa lebih halus daripada bobotnya.
Resolusi logisnya sengaja rendah, lalu dibesarkan dengan image-rendering: pixelated. Hasilnya terasa seperti sprite era konsol lama, bukan foto yang dipaksa jadi piksel.
Tidak ada sprite sheet atau video. Napas matahari, ayunan awan, dan kepakan burung masing-masing punya periode sinus sendiri — jadi tidak pernah terasa berulang secara mekanik.
Cuma HTML dan Canvas 2D API bawaan browser. Tidak ada library, tidak ada build step — salin, tempel, jalan di mana saja.
Tidak ada layer Photoshop di baliknya — ini urutan gambar sungguhan yang dijalankan ulang di setiap frame lewat requestAnimationFrame.
Gradasi linear dua warna jadi kanvas suasana — pagi jingga, siang biru, atau malam ungu tua, tergantung channel yang aktif.
Radiusnya berosilasi lewat Math.sin(t/400), ditambah cincin glow transparan di luarnya supaya terasa berdenyut, bukan sekadar membesar-mengecil kaku.
Tiga lingkaran bertumpuk digeser horizontal oleh Math.sin(t/900) — jauh lebih lambat dari matahari, biar tidak terasa searah gerak yang sama.
Dua kurva quadraticCurveTo bertumpuk memberi ilusi kedalaman — bukit depan lebih gelap, bukit belakang lebih terang, seperti kabut jarak jauh.
Guratan tiga titik naik-turun dengan sinus ketiga, periodenya sengaja berbeda dari matahari dan awan supaya tidak pernah sinkron sempurna.
Fungsi gambar tidak pernah berubah — hanya warnanya yang diganti. Empat channel ini berjalan otomatis, bukan hover.
Tidak perlu npm install. Tidak perlu bundler. Buka file HTML-nya di browser, sudah jalan.