Dua Casing — Emas dan Perak
Tema disebarkan ke seluruh tampilan melalui Environment dan beralih seketika. Bahkan gaya dial, jarum, dan angka dirancang berbeda untuk tiap casing.
Emas — Jam Pemburu
Enamel lazuardi tua × angka Romawi bersepuh emas (notasi IIII) · lambang tengah bulan sabit dan bintang berujung delapan
Casing berukir dari emas tua (kuningan yang diusangkan). Jendela kecil untuk alarm berikutnya di posisi angka 6.
#8F7028
Lazuardi #101838
Sepuhan Emas #D9B45C
Emas Rembulan #F2DC96
tint #A67C2E
Perak — Jam Kereta Api
Dial putih · angka Arab tebal · jarum baton
Jarum detik disisipkan berwarna merah, sesuai kelaziman jam kereta api
#9CA3AE
Porselen Putih #FAFAF7
Hitam Besi #1A1C22
Merah #B02E2E
tint #44546A
Menyetel Waktu dengan Jarum
DatePicker tidak digunakan. Alih-alih gerakan memutar kenop, waktu berdentang ditentukan dengan menyeret langsung jarum pada dial. Dial di bawah ini benar-benar dapat diseret.
AM7:30
- Konversi Sudut→Waktu — koordinat seretan diubah menjadi sudut dengan atan2, lalu dikuantisasi dalam kelipatan 6° untuk jarum menit dan 30° untuk jarum jam (dijadikan fungsi murni sebagai
ClockAngleMathdan dicakup pengujian). - Keterkaitan — memutar jarum menit membuat jarum jam mengikuti pada laju 0,5°/menit. Melintasi angka 0 menit akan memajukan/memundurkan jam (ditentukan oleh lintasan 45→15 menit).
- Haptik — .sensoryFeedback(.selection) pada tiap kelipatan 1 menit. Mengembalikan sensasi klik roda gigi ke jarimu.
- Jarum Terpilih — sebuah cincin berwarna kuningan (knob) ditampilkan di ujung jarum, menandakan jarum mana yang sedang dioperasikan.
- Konfirmasi — disimpan melalui pelat “Setel ke Waktu Ini”. Diubah menjadi Alarm.Schedule.relative milik AlarmKit.
Kekeruhan Sang Saat — Senja Kelam dan Fajar
Semakin larut malam, dial akan semakin keruh menjadi ungu nila, laksana sebuah wadah jiwa. Pada saat fajar, kekeruhan itu tersucikan bersama cahaya. Pada saat matahari terbenam, rasi bintang musim itu akan muncul bersinar di permukaan dial. Cobalah gerakkan penggeser di bawah ini untuk menjelajahi satu hari penuh.
21:00Senja
- Kekeruhan — mulai pukul 16 menjelang senja, endapan ungu nila memenuhi dari tepian dial, mencapai puncaknya antara pukul 23 dan 4. Melalui gradasi berlapis dengan blend multiply, warna dasar gading akan tenggelam laksana “dasar sebuah wadah”.
- Penyucian Fajar — antara pukul 4 dan 6, cahaya dari atas (blend screen) melarutkan endapan tersebut. Arloji utama pada laman ini senantiasa menjalani siklus ini, terhubung langsung dengan waktu sesungguhnya.
- Rasi Bintang Musiman — saat matahari terbenam (±2 jam), rasi bintang musim itu muncul keemasan. Musim semi = Leo / Musim panas = Scorpius / Musim gugur = Cassiopeia / Musim dingin = Orion. Pada malam hari, ia tetap tersisa dengan cahaya samar.
- Implementasi SwiftUI — koefisien waktu dihitung dengan
TimelineView(.everyMinute), lalu diterapkan pada penggambaran multiply/screen di Canvas serta opasitas jalur rasi bintang.
Tutup Dua Belas Wangsa — Lambang Rasi Bintang yang Berganti Tiap Bulan
Di bagian tengah tutup terpasang enamel lazuardi tua, dan tiap kali bulan berganti, wangsa (rasi bintang) bulan itu akan terukir ulang dengan emas, disertai bulan sabit dan nama bulan tradisional Jepang. Tutup arloji utama pada laman ini mengenakan corak bulan yang sedang berlangsung.
Rasi Bintang yang Berputar — · Bintang-bintang memiliki kedalaman ruang dan terus berputar di angkasa. Usap untuk memutarnya, dan inersia akan turut bekerja
Corak desainnya mengikuti gaya arloji saku antik “enamel lazuardi × emas tua” (rujukan: design-refs/ref-watch.jpg). Garis rasi bintang merupakan bentuk sederhana yang telah distilisasi. Dalam SwiftUI, corak yang berganti tiap bulan dipilih melalui Calendar.current.component(.month) dan digambar ke Canvas dengan sepuhan emas.
Arkana — Misteri Dua Belas Wangsa
Usap dial membentuk lingkaran, putar dua belas kali, maka seni pun akan menjelma. Malam hari Arkana (12 jenis dari Dua Belas Wangsa), siang hari Seni Surya (6 jenis), dan bila tutup terkunci, Segel (6 jenis) — pada perangkat sesungguhnya terdapat 24 jenis dari tiga sistem tersebut. Demonstrasi pada laman ini memungkinkanmu mencoba tujuh contoh perwakilannya.
Sihir tatkala tutup terbuka
Sihir tatkala tutup terkunci (Segel, pada perangkat sesungguhnya)
Saat Berdentang (ketika Lonceng Alarm teraktivasi)
Bila sang saat telah tiba, seluruh layar akan berkelip keemasan, dan lingkaran sihir pun terbentang bersama ukiran “Sang Saat Telah Tiba”.
- Deteksi Pemutaran — melacak sudut rotasi kumulatif di sekitar pusat dial; tiap 2π dihitung satu putaran. Belah ketupat pada lingkaran sihir akan menyala. Biarkan selama 4 detik, maka putaran akan buyar seperti kabut.
- Penyucian Cahaya Fajar — Menyucikan kekeruhan dengan cahaya. Dial beralih paksa menuju keadaan fajar, dan sebuah ledakan keemasan pun menjalar.
- Badai Rasi Bintang — Rasi bintang musim itu berkobar menyala, dan bintang-bintangnya berhamburan dari arloji.
- Pembalikan Waktu — Jarum-jarum berputar mundur dengan kecepatan tinggi, dan lingkaran sihir pun berputar berlawanan arah.
- Sawar Kilat Ungu — Kilatan cahaya ungu nila dan sebuah hentakan. Lingkaran sihir berubah warna menjadi ungu.
- Kobaran Merah Delima — Percikan bara membumbung dalam ruang 3D di sekeliling arloji (partikel proyeksi perspektif, disertai goyangan halus).
- Pusaran Ombak Biru — Riak air menyebar dari bawah kaki, dan percikannya melukis busur ditarik oleh gravitasi.
- Cincin Angin Kencang — Aliran angin melingkupi arloji dari depan ke belakang sembari berputar, dan tekanan anginnya membuat arloji berayun.
- Implementasi SwiftUI — deteksi rotasi mengakumulasi
atan2(ditambahkan ke ClockAngleMath); sihir disatukan dalam protocolSpellEffect, dengan pengaturan slot disimpan ke UserDefaults. Saat berdentang, status alerting dari AlarmKit terdeteksi, memicu manifestasi agung melalui fullScreenCover.
Susunan Layar
Beranda senantiasa menampilkan arloji. Daftar, penyuntingan, dan Timer disusun sebagai permukaan kerja di balik tutup, berupa pelat berukir di atas kain felt yang sama.
Engkau, Bebaskanlah Sang Saat
Alarm Berikutnya — Besok 7:30 AM
Tekan lama untuk beralih tema
Beranda (RootView)
Lonceng Alarm
AM7:30
Hari kerja · Snooze 9 menit
AM9:00
Akhir pekan
PM10:15
Hanya sekali
Daftar (AlarmListView)
Atur Waktu
AM7:30
Label — “Teh Pagi” · Snooze 9 menit
Setel ke Waktu IniSunting (AlarmEditorView)
Timer
Timer (TimerView)
Live Activity / Dynamic Island
Timer dan Stopwatch hidup di Layar Kunci dan Dynamic Island. Dengan sentuhan tunggal warna kuningan di atas latar hitam, kehadiran arloji saku ini tetap terjaga bahkan di dalam antarmuka sistem.
POCKETCHIME
Timer Teh
4:23
Layar Kunci — digerakkan dengan Text(timerInterval:)
Dynamic Island (compact) — dial di kiri, waktu tersisa di kanan
Tipografi dan Warna
Jenis huruf menggunakan serif sistem (New York / Hiragino Mincho). Angka diukir dengan angka berlebar sama (tabular), sementara label berhuruf Latin diberi jarak antarhuruf yang lebar, menyerupai prasasti pahatan logam.
10:09
Atur Waktu
Membuka tutup, maka satu hari pun dimulai. Putarlah jarumnya, dan nantikan sang saat.
RAILROAD GRADE · EST. 2026
| Kain felt (latar belakang) | #24331F → #0B110A | |
| Huruf tinta (isi teks) | #EFE6CD | |
| Kuningan (aksen) | #C9A24B | |
| Merah delima (jarum detik, peringatan) | #A03A2A | |
| Baja (tema Perak) | #AEB6C2 |
| Desain | Implementasi (sesuai DESIGN.md) |
|---|---|
| Buka/Tutup Penutup Arloji | rotation3DEffect(axis:(0,1,0), anchor:.leading) + spring 1.3s |
| Pergerakan Jarum | Digerakkan berkelanjutan dengan TimelineView(.animation) |
| Menyeret Jarum | ClockAngleMath (fungsi murni atan2, dicakup pengujian unit) |
| Snooze | secondaryButtonBehavior: .countdown + postAlert 9 menit |
| Tampilan Waktu Tersisa | Live Activity dari AlarmAttributes<PocketWatchMetadata> |
| Penyebaran Tema | Konsisten hingga ke Widget melalui tintColor dan metadata.themeName |