Desain · DSN-11 ditegakkan

Desain · Pasal DSN-11

Mode gelap turun dari token, bukan diputuskan ulang di tiap komponen

teranggelap
--surface #ffffff #0a0a0a
--surface-muted #f5f5f5 #171717
--line #ebebeb #262626
--ink #171717 #f5f5f5
--ink-muted #6b6b6b #a3a3a3
Nilai yang sama, dua mode. Komponen tidak memutuskan sendiri warna gelapnya.

Nilai untuk mode gelap tinggal di satu lapis token yang mendefinisikan ulang variabel yang sama. Komponen tidak memutuskan warna gelapnya sendiri.

Kenapa: sampai 1 September 2026 lapis itu tidak ada sama sekali. darkMode: 'class' aktif dan ProjectsLayout punya pengalih tema yang lengkap, tapi tak ada satu pun blok .dark yang mendefinisikan ulang token — sehingga bg-surface tetap putih di mode gelap, dan tiap komponen terpaksa memutuskan warna gelapnya sendiri. Hasilnya 335 utility dark: ditambah 112 selektor .dark: keputusan yang tidak bersumber dari mana-mana. Mengubah satu nuansa gelap berarti menyunting 447 tempat tanpa cara tahu semuanya sudah tersentuh.

Cara menerapkan: lapis html.dark kini ada di global.css. Nilainya diturunkan dari pemakaian nyata, bukan dikarangneutral-800 sudah jadi garis di 70 tempat, neutral-400 jadi tinta redup di 17 tempat — supaya menarik call site lama ke token tidak mengubah rupa. Komponen baru cukup memakai bg-surface, text-ink, border-hairline, dan tidak menulis dark: apa pun.

Utang saat ini: 436. Ini pasal dengan utang terbesar di repo. Ambangnya menahan angka itu agar berhenti tumbuh; penurunannya dikerjakan per sub-app.