Mendesain tema yang bisa berganti mulus: strategi dark mode berbasis token semantik, pendekatan pure black vs dark grey, serta dynamic color untuk adaptasi per platform. Ditutup dengan praktik membangun tema light dan dark untuk Kantongin dalam satu design system

Setelah di episode 9 kita membangun design system dengan token berlapis, pada episode ini lapisan semantik itu berbuah: theming. Dark mode bukan lagi fitur bonus — ia fitur yang diharapkan hampir semua pengguna aplikasi modern, terutama untuk aplikasi yang dipakai malam hari seperti Kantongin.
Mengapa dark mode adalah ujian terbaik design system kalian? Karena tema tidak boleh didesain ulang dari nol — ia harus menukar nilai pada token semantik yang sama. Kalau fondasi token di episode 9 benar, dark mode hampir menjadi kerja mekanis; kalau salah, dark mode jadi proyek desain terpisah yang tidak pernah konsisten dengan tema utama.
Prinsip inti: warna di layar tidak boleh ditulis langsung, melainkan lewat token semantik. Untuk dark mode, kalian hanya mengganti nilai token semantik — struktur, komponen, dan layout tetap sama:
color.background = neutral.50 → neutral.950
color.surface = white → neutral.900
color.text.primary = ink.900 → neutral.50
color.text.muted = ink.500 → neutral.400
color.border = neutral.200 → neutral.800
color.primary = blue.500 → blue.400 (sedikit lebih terang)Perhatikan primary di dark mode dibuat lebih terang — karena warna brand yang gelap di atas latar gelap kehilangan kontras. Aturan ini berlaku untuk hampir semua warna "aksen".
Pertanyaan klasik: apakah latar dark mode memakai #000000 murni? Jawaban industri umumnya tidak:
#0F1115, #1A1B1F) memungkinkan lapisan elevasi terlihat: kartu sedikit lebih terang dari latar, shadow masih bisa dibaca.background (paling gelap) #0F1115
surface / kartu #171A21 (lebih terang dari bg)
raised / dropdown #1F242C (lebih terang lagi)Karena dalam mode gelap elevasi dibangun dari kecerahan (bukan bayangan), kalian perlu skala netral gelap dengan setidaknya 3-4 tingkat. Menyalin netral light lalu dibalik jarang berhasil — bangun ramp gelap terpisah.
Tip
Saat membangun dark mode, jangan coba "menebak" proporsi elevasi. Ambil referensi dari aplikasi yang dark mode-nya matang (misal aplikasi trading atau note-taking), lalu sesuaikan ramp gelap Kantongin hingga perbedaan antar lapisan terlihat jelas namun tetap tenang.
Beberapa hal yang paling sering salah:
Dynamic color adalah kemampuan tema menyesuaikan dengan pengaturan sistem (iOS/Android). Kedua platform punya sistemnya: Material You (Android) membangkitkan warna dari wallpaper pengguna; iOS memakai semantic colors yang otomatis menyesuaikan light/dark. Implikasi untuk desain: token semantik harus satu sumber yang di-bind ke sistem — desainer tidak lagi "memilih warna gelap", melainkan memastikan token bertukar nilai dengan benar.
Dark mode bukan berarti bebas dari aturan aksesibilitas — kontras AA tetap wajib. Dua kasus khusus:
neutral.50 di atas neutral.900 (dark) dan ink.900 di atas neutral.50 (light) adalah dua pengukuran yang berbeda, bukan "sekali jadi".Gunakan Stark di kedua tema — rasio AA dicek per tema, bukan sekali.
Warning
Jangan pernah menampilkan warna hardcoded yang sama di light dan dark tanpa token. Misalnya shadow yang "kelihatan bagus" di light tapi tak terlihat di dark — keduanya harus dari token elevation.* yang didefinisikan per tema. Jika tidak, dark mode selalu terasa "setengah jadi".
Kantongin-System; pastikan semua warna di layar memakai token semantik (cek: tidak ada hex langsung di komponen).Dark, set nilai tiap token semantik).Pada episode 10 ini, kalian telah membangun theming yang hidup: dark mode sebagai penukaran token, bukan redesign.
Inti yang harus dibawa pulang:
Di episode 11 selanjutnya kita akan membahas mobile & responsive UI — mobile-first, breakpoints, dan adaptasi per platform untuk membuat Kantongin nyaman di berbagai ukuran layar. Sampai jumpa di episode 11!