Colophon
Panduan gaya dan catatan pembuatan situs ini. Semua yang ada di bawah dirender dari token CSS dan komponen situs sendiri, jadi ikut berubah saat keduanya berubah.
Warna
Nilai dibaca dari variabel CSS yang aktif dengan getComputedStyle, satu kali untuk tiap tema.
- --bg
Latar halaman
GelapTerang- --surface
Kartu, panel menu
GelapTerang- --ink
Teks utama
GelapTerang- --ink-2
Teks sekunder, label
GelapTerang- --line
Garis tipis, garis putus-putus baris
GelapTerang- --line-strong
Bingkai kontrol, ruler, crosshair
GelapTerang- --dot
Titik-titik latar
GelapTerang- --grid
Garis grid hero
GelapTerang- --accent
Link, cincin fokus, penanda aktif, tombol utama
GelapTerang- --ok
Status berhasil
GelapTerang- --err
Status galat
GelapTerang
Kontras
Rasio kontras WCAG 2.x, dihitung dari nilai di atas. Teks isi butuh 4,5:1 (AA); teks besar dan bagian UI butuh 3:1.
- --ink / --bg
Teks utama di halaman
GelapTerang- --ink-2 / --bg
Teks sekunder di halaman
GelapTerang- --ink-2 / --surface
Teks sekunder di kartu
GelapTerang- --accent / --bg
Aksen di halaman (link, penanda)
GelapTerang- --bg / --accent
Teks tombol utama di atas aksen
GelapTerang- --ok / --bg
Tanda berhasil di halaman
GelapTerang- --err / --bg
Teks galat di halaman
GelapTerang
Tipografi
Judul dan tombol memakai Hubot Sans, label dan path memakai Martian Mono, teks isi memakai font sistem. Kedua web font di-host sendiri dan di-preload.
- --display
Judul, brand, tombol
Dodi Sopandi, 0123456789
- --mono
Path, label, navigasi, tanggal, kode
Dodi Sopandi, 0123456789
- --sans
Teks isi
Dodi Sopandi, 0123456789
Skala yang dipakai
Contoh memakai class aslinya; ukuran diukur dari elemen yang dirender.
- Judul section
Cara saya bekerja
- Judul baris
Platform transaksi
- Teks isi
Membangun dan merawat platform transaksi secara menyeluruh.
- Tombol
- Lihat pekerjaan saya
- Label path
- /process
- Label baris
Proyek klien
Headline hero bersifat fluid: clamp(2rem, 3.2vw, 2.625rem) di desktop, diskalakan per bahasa dengan --fit (Indonesia 0,78).
Jarak dan grid
Layout berasal dari empat token. Nilainya dibaca langsung, jadi menunjukkan viewport saat ini (gutter hilang di layar kecil).
- --frame
Lebar konten maksimum
- --gutter
Margin bertitik berisi ruler, tiap sisi
- --pad-x
Padding horizontal di dalam section
- --pad-y
Padding vertikal di dalam section
Breakpoint
- 767px
- Ruler dan gutter hilang, split section menumpuk, baris jadi satu kolom
- 879px
- Header beralih ke tombol menu
- 880–1023px
- Jarak header lebih rapat; hero menumpuk di bawah 1024px
- 1024px
- Desktop: hero dua kolom, scrollbar halaman disembunyikan
Pola blueprint
- Titik-titik
- Pola titik radial-gradient di latar halaman.
- Ruler
- Garis putus-putus vertikal dengan tanda tiap 80px, di gutter.
- Crosshair
- Tanda + di sudut tempat garis section bertemu.
- Garis putus-putus
- Border putus-putus untuk baris dan kontrol; garis penuh hanya untuk tepi section.
Langsung: section dengan sudut crosshair dan baris putus-putus
Komponen
Contoh langsung dari yang ada di kode. Tidak ada varian yang tidak dipakai situs.
- Tombol utama
- Kirim email
Satu aksi utama dalam sebuah grup, seperti Kirim email.
- Tombol sekunder
- Salin email
Aksi lain di samping tombol utama, seperti Salin email.
- Rows
Label
Judul baris
Satu kalimat singkat tentang baris ini.
Label
Baris lain
Baris dipisahkan garis putus-putus.
Daftar karya, pengalaman, dan stack. Label kiri menyala saat hover.
- Split section
Section konten: label di kiri, isi di kanan.
- Label path
Label kecil di atas judul section; sama dengan anchor di URL.
- Kartu
- Kartu dengan border putus-putus.
Blok berbingkai dengan border putus-putus dan warna surface.
- Status
Tidak sedang aktif mencari kerja, tapi senang diajak ngobrol.
Satu baris keadaan singkat; titik hijau hanya untuk “ok”.
Kontrol header (tombol menu, pilihan EN | ID, tombol tema) dan kontrol footer (Animasi, Inspect) juga aktif di halaman ini.
Gerakan
Semua gerakan singkat dan hanya memakai transform dan opacity, jadi layout tidak pernah bergeser.
- --dur-fast
Perubahan opacity, geseran kecil
- --dur
Transform
- --ease
Easing untuk semuanya
Yang bergerak
- Intro loader
- Satu baris boot log sekali per sesi; tombol apa saja atau klik melewatinya.
- Blur-in
- Teks hero muncul perlahan dengan blur kecil.
- Ganti tema
- Tema baru membesar sebagai lingkaran dari tombol (View Transition 450ms).
- Ikon tema
- Lingkaran bayangan bergeser menutup matahari jadi bulan sabit.
- Ganti bahasa
- Kotak penanda bergeser ke bahasa pilihan sebelum halaman berganti.
- Link navigasi
- Kurung siku muncul saat hover dan fokus keyboard.
- Hover baris
- Garis aksen tipis tumbuh di kiri baris.
- Link berpanah
- Panah bergeser 3px ke arah tujuannya saat hover.
- Salin email
- Centang hijau tergambar dan bingkai jadi hijau, lalu kembali setelah 2 detik.
- Click feedback
- Tanda sudut muncul di sekitar tombol saat hover dan ditekan.
- Tiba di section
- Crosshair menyala setelah link menu dipakai.
- Panel menu
- Menu mobile muncul dengan fade dan geser (150ms).
Mematikannya
Tombol Animasi di footer memasang data-motion="off" pada <html> dan mengingatnya. Durasi jadi 0s, dan loader, blur-in, serta animasi ganti tema dilewati. prefers-reduced-motion melakukan hal yang sama, dan Animasi mulai dalam keadaan off untuk pengunjung itu. Perubahan status tetap terlihat, hanya tanpa gerakan.
Aksesibilitas
Yang dilakukan kode saat ini.
- Fokus keyboard
- Setiap elemen interaktif mendapat outline aksen 2px dengan offset 3px pada :focus-visible.
- Skip link
- “Lewati ke konten” adalah elemen pertama yang bisa difokuskan.
- Struktur
- Satu h1 per halaman, landmark header, nav, main, dan footer, serta section yang dinamai oleh judulnya.
- Status lewat ARIA
- aria-current untuk section dan bahasa aktif, aria-pressed pada toggle, aria-expanded dan aria-controls pada tombol menu, serta live region untuk umpan balik salin email.
- Bahasa
- html lang mengikuti halaman, dan link bahasa membawa hreflang dan lang.
- Area sentuh
- Kontrol header setinggi minimal 40px, tombol 44px.
- Kontras
- Rasio setiap pasangan teks tercantum di bagian Warna, dihitung dari nilai yang aktif.
- Gerakan
- Mengikuti prefers-reduced-motion dan tombol Animasi.
Dibuat dengan
Hanya fakta yang bisa dicek di repositori.
- Framework
- Astro 7.4.1, output statis
- JavaScript
- Tanpa framework di sisi klien. Beberapa script inline kecil mengurus tema, bahasa, menu, salin email, dan Inspect.
- Hosting
- Cloudflare Workers dengan static assets, di domain kustom stackfolio.web.id.
- Deploy
- Push ke branch main di GitHub; Cloudflare yang membangun dan men-deploy-nya.
- Font
- Hubot Sans dan Martian Mono, di-host sendiri sebagai variable font.
- Bahasa
- Inggris dan Indonesia dari kamus bertipe, dengan hreflang dan sitemap.
- Dependensi
- 4 paket: Astro, integrasi sitemap, dan dua font.
- Tracker
- Tidak ada di kode: tanpa analytics, tanpa script pihak ketiga.
- Halaman ini
- …