Lewati ke konten
Citia DS

Fondasi

Tipografi

Satu huruf, 17 peran tipografi, angka tabular untuk data, lebar baca 50–75 karakter, dan aturan teks yang memanjang dalam bahasa Indonesia atau terbungkus di layar kecil.

Citia DS memakai satu keluarga huruf, Manrope, dan membangun hierarki dari ukuran, bobot, tracking, dan leading sebagai satu set. Setiap peran adalah empat token (--ds-type-<peran>-size, -leading, -weight, -tracking), sehingga judul tidak pernah mendapat ukuran tanpa jarak yang cocok. Pakai peran, bukan ukuran font mentah.

Font

  • Manrope variable font, sumbu bobot 200–800. DS memakai 400–800.
  • Di-host sendiri di /_content/Citia.DesignSystem/fonts/manrope/ dalam dua subset, latin dan latin-ext. Lisensi SIL OFL 1.1 (OFL.txt ada di folder yang sama).
  • Tanpa permintaan ke CDN. Aplikasi tetap jalan di jaringan terbatas dan pihak ketiga tidak bisa memblokir font.
  • font-display: swap. Subset latin di-preload oleh _DsHead, jadi teks tampil dengan fallback selama font dimuat.
  • font-optical-sizing: auto aktif, sehingga bentuk huruf menyesuaikan ukuran tampil.

Fallback: "Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif. Token monospace --ds-font-mono hanya untuk kode, markup literal, dan kunci rahasia.

VariabelNilaiCatatan
--ds-font-sans"Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serifManrope variable 200–800 (dipakai 400–800), self-hosted, OFL 1.1.
--ds-font-monoui-monospace, "Cascadia Mono", "Segoe UI Mono", Consolas, "SF Mono", Menlo, monospaceHanya XML, kode literal, kunci rahasia.
--ds-weight-regular400
--ds-weight-medium500
--ds-weight-semibold600
--ds-weight-strong650
--ds-weight-bold700
--ds-weight-heavy750
--ds-weight-extrabold800

Peran tipografi

Tujuh belas peran, dari display sampai micro. Contoh di bawah dirender dengan variabel aslinya.

Data akurat, integrasi cepat

Peran
display
Ukuran
clamp(2rem, 3vw, 3rem)
Leading
1.1
Bobot
750
Tracking
-0.04em

Judul hero halaman login/landing (.auth-hero-title).

Data akurat, integrasi cepat

Peran
title-1
Ukuran
clamp(1.75rem, 2.5vw, 2.25rem)
Leading
1.15
Bobot
650
Tracking
-0.035em

Judul halaman (h1) daftar/form/detail (.master-heading h1).

Data akurat, integrasi cepat

Peran
title-2
Ukuran
clamp(1.375rem, 2vw, 1.75rem)
Leading
1.2
Bobot
750
Tracking
-0.03em

Judul layar portal/dashboard (.pt-header h1).

Data akurat, integrasi cepat

Peran
title-3
Ukuran
clamp(1.25rem, 1.6vw, 1.625rem)
Leading
1.25
Bobot
750
Tracking
-0.03em

Judul di top bar (.topbar-title).

Data akurat, integrasi cepat

Peran
title-auth
Ukuran
1.75rem
Leading
1.2
Bobot
650
Tracking
-0.02em

Judul panel login (.auth-title).

Data akurat, integrasi cepat

Peran
headline
Ukuran
1.25rem
Leading
1.3
Bobot
650
Tracking
-0.01em

Judul dialog, empty state (.qa-title, .master-empty h2).

Data akurat, integrasi cepat

Peran
section
Ukuran
1.0625rem
Leading
1.4
Bobot
650
Tracking
0

Legend fieldset, judul bagian form (.master-fieldset legend).

Data akurat, integrasi cepat

Peran
card-title
Ukuran
0.9375rem
Leading
1.4
Bobot
700
Tracking
0

Judul kartu (.pt-card-head h2).

Data akurat, integrasi cepat

Peran
body
Ukuran
1rem
Leading
1.5
Bobot
400
Tracking
0

Teks isi dan semua input (16 px mencegah zoom di iOS).

Data akurat, integrasi cepat

Peran
label
Ukuran
0.9375rem
Leading
1.5
Bobot
600
Tracking
0

Label field (.master-field > label).

Data akurat, integrasi cepat

Peran
callout
Ukuran
0.875rem
Leading
1.5
Bobot
400
Tracking
0

Isi tabel, item navigasi, tombol.

Data akurat, integrasi cepat

Peran
footnote
Ukuran
0.8125rem
Leading
1.5
Bobot
400
Tracking
0

Bantuan field, header tabel data, catatan (.master-help).

Data akurat, integrasi cepat

Peran
caption
Ukuran
0.75rem
Leading
1.4
Bobot
400
Tracking
0

Keterangan KPI, waktu, meta (.pt-kpi-sub).

Data master

Peran
eyebrow
Ukuran
0.6875rem
Leading
1rem
Bobot
700
Tracking
0.08em

Kepala grup sidebar, eyebrow portal, label badge (.sb-group-toggle, .pt-eyebrow).

Data master

Peran
table-head
Ukuran
0.6875rem
Leading
1rem
Bobot
700
Tracking
0.06em

Header tabel modern (.pt-table th).

12

Peran
micro
Ukuran
0.625rem
Leading
1
Bobot
800
Tracking
0

Angka badge notifikasi (.notif-badge).

1574782

Peran
metric
Ukuran
1.75rem
Leading
1.1
Bobot
750
Tracking
-0.03em

Angka KPI (.pt-kpi-value).

Peran Ukuran / leading / bobot / tracking Dipakai untuk
display clamp(2rem, 3vw, 3rem) / 1.1 / 750 / -0.04em Hero landing dan halaman masuk
title-1 clamp(1.75rem, 2.5vw, 2.25rem) / 1.15 / 650 / -0.035em Judul halaman
title-2 clamp(1.375rem, 2vw, 1.75rem) / 1.2 / 750 / -0.03em Judul bagian halaman, header padat
title-3 clamp(1.25rem, 1.6vw, 1.625rem) / 1.25 / 750 / -0.03em Judul top bar
title-auth 1.75rem / 1.2 / 650 / -0.02em Form masuk dan akun
headline 1.25rem / 1.3 / 650 / -0.01em Judul dialog dan empty state
section 1.0625rem / 1.4 / 650 / 0 Legend fieldset, judul bagian
card-title 0.9375rem / 1.4 / 700 / 0 Header kartu
body 1rem / 1.5 / 400 / 0 Teks isi dan semua input
label 0.9375rem / 1.5 / 600 / 0 Label field
callout 0.875rem / 1.5 / 400 / 0 Sel tabel, item navigasi, tombol
footnote 0.8125rem / 1.5 / 400 / 0 Teks bantuan
caption 0.75rem / 1.4 / 400 / 0 Metadata, baris sekunder
eyebrow 0.6875rem / 1rem / 700 / 0.08em, kapital Label grup di atas judul
table-head 0.6875rem / 1rem / 700 / 0.06em, kapital Header kolom tabel
micro 0.625rem / 1 / 800 / 0 Hanya lencana hitungan
metric 1.75rem / 1.1 / 750 / -0.03em, tabular Angka besar di kartu statistik

Di CSS, pasang peran lewat empat variabelnya:

CSS
.page-title {
  font-size: var(--ds-type-title-1-size);
  line-height: var(--ds-type-title-1-leading);
  font-weight: var(--ds-type-title-1-weight);
  letter-spacing: var(--ds-type-title-1-tracking);
  text-wrap: balance;
}

Dengan tema Tailwind, kelas text-title-1 memasang keempatnya sekaligus.

Bobot, tracking, dan leading

Bobot berjalan dari --ds-weight-regular (400) sampai --ds-weight-extrabold (800). Teks isi 400, label 600, judul 650–750. Bangun hierarki dari bobot, ukuran, dan leading bersama; menebalkan teks tanpa mengubah yang lain membuat halaman datar.

  • Tracking. Negatif hanya untuk teks besar: display -0.04em, turun ke headline -0.01em. Dari section ke bawah 0. Teks isi selalu 0. Peran kapital (eyebrow, table-head) memakai tracking positif (0.06–0.08em), karena huruf kapital tanpa tracking terbaca rapat.
  • Leading. Judul besar rapat (1.1 untuk display, 1.15 untuk title-1, 1.2 untuk title-2). Teks isi 1.5, caption 1.4. Peran satu baris (eyebrow, micro) memakai leading tetap agar tinggi baris sama.
  • Input. Semua input 16px. Di bawah 16px, Safari iOS memperbesar halaman saat field difokuskan.

Angka

font-variant-numeric: tabular-nums aktif pada <table>, .ds-num, dan .tabular. Pakai angka tabular di mana digit harus sejajar atau berubah seiring waktu: tabel, statistik, hitungan, paging, timer, dan identifier. Pakai angka proporsional di teks mengalir.

Angka tabular di tabel
FakturKlienJumlah
INV-2026-0418Ayu Lestari1.248,50
INV-2026-0419Daniel Okafor98,00
INV-2026-0420Mei Tanaka15.011,75
Lihat kode HTML
HTML
<table class="table">
  <thead><tr><th>Faktur</th><th>Klien</th><th style="text-align:end">Jumlah</th></tr></thead>
  <tbody>
    <tr><td><span class="ds-id">INV-2026-0418</span></td><td>Ayu Lestari</td><td style="text-align:end">1.248,50</td></tr>
    <tr><td><span class="ds-id">INV-2026-0419</span></td><td>Daniel Okafor</td><td style="text-align:end">98,00</td></tr>
    <tr><td><span class="ds-id">INV-2026-0420</span></td><td>Mei Tanaka</td><td style="text-align:end">15.011,75</td></tr>
  </tbody>
</table>

Identitas bisnis (PRJ-1024, INV-2026-0418) memakai Manrope dengan angka tabular lewat .ds-id, yang juga mereset letter-spacing ke 0. Monospace hanya untuk kode literal (pre.code). Ratakan kolom angka ke kanan dan taruh satuan di sel terpisah atau di header.

Lebar baca

Jaga teks mengalir antara 50 dan 75 karakter per baris. --ds-size-measure bernilai 65ch, dipasang oleh .ds-measure. Jangan biarkan paragraf melebar sepanjang layar.

Lebar baca dan judul seimbang

Faktur direkonsiliasi setiap malam pukul 02.00

Proses malam membandingkan setiap faktur dengan catatan pembayarannya dan menandai selisih di atas 0,5%. Item yang ditandai muncul di antrean tinjauan keesokan paginya, dikelompokkan per proyek, sehingga tim keuangan bisa menyelesaikannya sekaligus.

Lihat kode HTML
HTML
<div class="ds-measure">
  <h3 style="font-size:var(--ds-type-title-2-size);line-height:var(--ds-type-title-2-leading);font-weight:var(--ds-type-title-2-weight);letter-spacing:var(--ds-type-title-2-tracking);text-wrap:balance;margin:0 0 .5rem">Faktur direkonsiliasi setiap malam pukul 02.00</h3>
  <p style="text-wrap:pretty;margin:0">Proses malam membandingkan setiap faktur dengan catatan pembayarannya dan menandai selisih di atas 0,5%. Item yang ditandai muncul di antrean tinjauan keesokan paginya, dikelompokkan per proyek, sehingga tim keuangan bisa menyelesaikannya sekaligus.</p>
</div>

Tambahkan text-wrap: balance pada judul (maksimal dua sampai tiga baris) agar baris terakhir tidak berisi satu kata, dan text-wrap: pretty pada paragraf panjang.

Inggris dan Indonesia

String bahasa Indonesia biasanya 20–40% lebih panjang daripada bahasa Inggris ("Save changes" menjadi "Simpan perubahan", "Rows per page" menjadi "Baris per halaman"). Rancang untuk pertumbuhan 40%:

  • Tanpa lebar tetap pada wadah teks; pakai min-width, max-width, flex, dan grid dengan minmax().
  • Tombol melebar dan tetap satu baris bila muat. Label lebih dari sekitar 28 karakter sebaiknya pindah ke tooltip atau baris bantuan.
  • Uji setiap layar dalam kedua bahasa sebelum rilis. Jangan menilai tata letak dari bahasa Inggris saja.
  • Jangan menyingkat agar muat. Persingkat kalimatnya.

Pemotongan dan pembungkusan

  • Bungkus secara default. Judul, deskripsi, label, dan sel tabel berisi kalimat dibungkus ke sebanyak baris yang dibutuhkan.
  • Potong hanya teks identitas (nama file, email, item breadcrumb, tag), dan hanya bila lebar terbatas. Pakai text-overflow: ellipsis pada satu baris dan taruh teks penuh di title atau nama aksesibel.
  • Batasi deskripsi dengan .ds-clamp-2 (dua baris) di kartu dan daftar. Jangan membatasi satu-satunya salinan teks yang harus dibaca pengguna, seperti galat.
  • String panjang tanpa spasi (URL, ID) memakai overflow-wrap: anywhere agar tidak melebarkan tata letak melebihi 320px.
  • Tanpa text-align: justify. Ratakan teks ke awal di kedua bahasa.

Panduan

  • Pilih peran sesuai maknanya, bukan ukuran yang diinginkan. Bila tidak ada peran yang cocok, minta token baru, bukan ukuran sekali pakai.
  • Satu title-1 per halaman. Jangan melompati level judul: h1, h2, h3 berurutan, apa pun tampilannya.
  • Pakai --ds-subtle untuk teks sekunder dan --ds-muted untuk teks tersier. Jangan menurunkan opasitas untuk meredupkan teks; kontras harus tetap terukur (4.5:1).
  • Teks isi minimal 16px, dengan 12px (caption) sebagai batas bawah.

Token

--ds-font-sans, --ds-font-mono, --ds-weight-*, --ds-type-<peran>-size, -leading, -weight, -tracking, --ds-size-measure.

Citia Design System 2.0.2 · Citia Engineering Indonesia. Diturunkan dari INTEGRA TPS Integration; dibuat untuk semua aplikasi web Citia.