Lewati ke konten
Standar desain
Dokumentasi Pratinjau

Standar desain

Aturan yang mengikat seluruh halaman di dalam aplikasi: warna, jarak, huruf, keadaan, dan gerak.

Halaman ini mengikat
Yang tertulis di sini bukan saran. Kalau sebuah halaman melanggar salah satunya, halaman itu yang salah — bukan standarnya. Sebagian aturan sudah dijaga otomatis oleh tools/check.py.

Prinsip

Tenang, bukan ramai

Latar hampir putih, satu warna aksen, aksen hanya untuk hal yang benar-benar penting. Warna kedua dipakai untuk peringatan, bukan hiasan.

Berulang, bukan unik

Dua halaman yang berbeda harus terlihat seperti dibuat orang yang sama. Kalau sebuah pola muncul dua kali, pola itu naik jadi komponen.

Angka datang dari token

Jarak 16 px bukan "16 px", tapi --ck-space-4. Kalau skalanya berubah, seluruh aplikasi ikut berubah tanpa menyunting komponen.

Keadaan ikut dirancang

Kosong, memuat, gagal, dan nonaktif adalah bagian dari desain — bukan keadaan darurat. Komponen tanpa keadaan itu belum selesai.

Warna

Warna punya peran, bukan selera. Pakai token sesuai perannya.

PeranTokenDipakai untuk
Permukaan halaman--ck-backgroundLatar halaman
Permukaan terangkat--ck-cardKartu, panel, topbar, sidebar
Teks utama--ck-foregroundJudul dan isi
Teks sekunder--ck-muted-foregroundKeterangan, label, metadata
Aksi utama--ck-primaryTombol utama, tautan aktif, penanda terpilih
Permukaan sekunder--ck-secondaryTombol sekunder, baris tersorot, latar isian
Aksen hangat--ck-accentPenanda kecil, sorotan, bukan tombol utama
Bahaya--ck-destructiveHapus, tindakan tak bisa dibatalkan
Peringatan--ck-warningButuh perhatian, belum gagal
Berhasil--ck-successSelesai, benar, tuntas
Informasi--ck-infoKeterangan netral
Aturan warna yang tidak bisa ditawar
  • Warna hanya lewat hsl(var(--ck-…)). Tidak ada nilai hex, tidak ada rgb() langsung.
  • Jangan memakai warna status sebagai teks di atas latar terang — success dan warning tidak lolos kontras sebagai teks (lihat Aksesibilitas). Pakai sebagai isian, atau pakai varian subtle.
  • Warna aksen tidak dipakai untuk tombol utama. Tombol utama selalu primary.
  • Warna tidak boleh jadi satu-satunya pembawa makna — selalu ada teks atau ikon pendamping.

Jarak

Satu skala, kelipatan 4 px. Tidak ada nilai di luar daftar ini.

TokenNilaiDipakai untuk
--ck-space-14 pxAntara ikon dan teks di dalam tombol kecil
--ck-space-28 pxAntar elemen yang berpasangan rapat
--ck-space-312 pxBantalan dalam komponen kecil
--ck-space-416 pxBantalan standar, jarak antar kartu
--ck-space-520 pxBantalan kartu sedang
--ck-space-624 pxBantalan kartu besar, jarak antar bagian
--ck-space-832 pxJarak antar blok besar
--ck-space-1248 pxPemisah antar bagian halaman

Utilitas siap pakai: ck-mt-4, ck-mb-6, ck-p-6, ck-py-4, ck-px-4, ck-gap-3. Semuanya memakai token di atas.

Tipografi

KelasUkuranPakai untuk
ck-h136 pxJudul halaman pemasaran/hero
ck-h230 pxJudul halaman di dalam aplikasi
ck-h324 pxJudul bagian
ck-h420 pxJudul sub-bagian
ck-lead18 pxSatu paragraf pengantar di bawah judul
ck-text16 pxIsi standar
ck-text-sm14 pxLabel, tombol, isi tabel
ck-text-xs12 pxMetadata dan catatan
ck-overline11 pxLabel kelompok huruf besar berspasi

Bobot huruf hanya empat: 400 normal, 500 medium (label dan tombol), 600 semibold (judul kecil), 700 bold (judul besar). Jangan memakai bobot lain.

Radius & bayangan

RadiusNilaiDipakai untuk
ck-radius-sm4 pxLencana, penanda kecil
ck-radius-md8 pxTombol, input, tautan sidebar
ck-radius-lg12 pxKartu, modal
ck-radius-xl16 pxPanel besar, kartu pratinjau
ck-radius-fullpenuhAvatar, pil, sakelar
BayanganDipakai untuk
ck-shadow-smKartu diam, tombol utama
ck-shadow-mdKartu yang bisa disinggahi
ck-shadow-lgDropdown, popover
ck-shadow-xlModal, laci

Kaidahnya: semakin dekat ke pengguna, semakin dalam bayangannya. Permukaan datar tidak diberi bayangan.

Keadaan interaktif

Setiap elemen yang bisa disentuh wajib punya lima keadaan ini. Yang tidak punya dianggap belum selesai.

KeadaanPerubahan
DiamGaya dasar
HoverLatar naik satu langkah (secondary atau primary-600)
Fokus papan ketikCincin outline: 2px solid hsl(var(--ck-ring)) dengan jarak 2 px. Tidak boleh dihilangkan
Aktif/terpilihLatar primary, teks primary-foreground
NonaktifOpasitas turun, kursor not-allowed, tidak menerima klik
MemuatSpinner + teks tetap ada, lebar tidak berubah (ck-btn--loading)

Gerak

TokenDurasiDipakai untuk
--ck-dur-fast120 msWarna, latar, sorot
--ck-dur200 msBuka-tutup, geser, laci
--ck-dur-slow500 msMasuknya panel besar

Gerak hanya untuk menjelaskan perubahan, tidak untuk hiburan. Semua gerak wajib berhenti saat pengguna mengaktifkan prefers-reduced-motion.

Larangan

DilarangAlasan
Nilai warna atau ukuran mentah di komponenMode gelap tidak ikut berubah; sistem terpecah
!importantMenandakan konflik yang belum diselesaikan
Gaya sebaris (style="…") untuk warna atau jarakTidak bisa diubah lewat token, tidak bisa diuji
Selektor berdasarkan id atau struktur dalam (> 3 tingkat)Rapuh; satu perubahan markup merusak gaya
Ikon tanpa teks untuk aksi merusakTidak jelas dan tidak terbaca pembaca layar
Tombol tanpa typeDi dalam form, tombol tanpa type mengirim form
classroom-themekitdokumentasi