Gamuda Land Vietnam
Q3 2018 – Q3 2020
Design System v1.0

GL Connect
Design System

Hệ thống thiết kế bilingual (Tiếng Việt/English), token-based, kết hợp GL Connect homebuying portal, GL Lifestyle resident app và các trang landing chiến dịch — đảm bảo trải nghiệm nhất quán, accessible trên web, iOS và Android.

52 Components
140+ Tokens
3 Platforms
v1.0 Version
Foundation · 01

Color Tokens

Forest green là màu accent chính — ánh xạ trực tiếp đến triết lý biophilic design của Gamuda: Yen So Park, hành lang xanh, không gian sống kết nối thiên nhiên. Ấm và cao cấp trong thị trường bất động sản Việt Nam, tránh xung đột ngữ nghĩa với màu đỏ dùng cho trạng thái lỗi và badge đã bán.

Green Scale
--green-dark #1B3A2D
--green #2D6A4F
--green-mid #4A8B6F
--green-light #74B89A
--green-pale #EAF4EF
--green-subtle #F3FAF6
Sand Scale
--sand-50 #FDFAF5
--sand-100 #F7F2E8
--sand-200 #EDE4D0
--sand-300 #D9CCAE
Ink Scale
--ink-900 #1A1A1A
--ink-700 #3D3D3D
--ink-500 #6B6B6B
--ink-300 #A3A3A3
Token Value Usage
--color-bg --sand-50 Background canvas chính của trang
--color-surface #FFFFFF Card, modal, panel surface
--color-text-primary --ink-900 Heading, label, primary text
--color-text-muted --ink-500 Body copy, placeholder, secondary info
--color-accent --green CTA, links, active states, badges
--color-border --sand-200 Input borders, dividers, card outlines
--error #B91C1C Validation errors, destructive actions
--warning #C4751A Reserved status, cautionary messaging

Status Badges

Còn hàng Đặt cọc Đã bán
Nguyên tắc accessibility: Mọi badge trạng thái đều gồm icon + màu + text — không bao giờ chỉ dùng màu một mình. Người dùng khiếm thị màu (color blind) và người dùng screen reader đều cần thêm icon và label text để hiểu trạng thái. Đây là yêu cầu WCAG 1.4.1 (Use of Color).
Foundation · 02

Typography

Font pairing gồm Lora (Lora serif cho heading và số display), Inter (body và UI), và JetBrains Mono (token names và code). Vietnamese font stack bao gồm Be Vietnam Pro fallback để tối ưu hiển thị dấu tiếng Việt.

Lora — Headings & Display Numbers
--text-3xl 40px · Lora 600
Celadon City
--text-2xl 32px · Lora 600
Từ 3.2 tỷ đồng
--text-xl 24px · Lora 600
Căn hộ 2 phòng ngủ
--text-lg 20px · Lora 400
GL Connect — Homebuying Portal
Inter — Body & UI
--text-md 18px · Inter 400
Trải nghiệm đặt chỗ trực tuyến nhanh chóng và minh bạch.
--text-base 16px · Inter 400
Diện tích 72m² · Tầng 12 · View Yen So Park
--text-sm 14px · Inter 400
Cập nhật lần cuối: 12 tháng 3, 2025
--text-xs 12px · Inter 500 CAPS
Section Label · Eyebrow
JetBrains Mono — Tokens & Code
--text-xs 12px · Mono 400
--color-accent: var(--green)
--text-xs 11px · Mono 500
FOUNDATION · 01
Vietnamese specimen — Lora · 1.7 line-height "Nhà Gamuda Land —
nơi mỗi gia đình tìm về."
🔤
Be Vietnam Pro fallback: Khi Inter không có glyph dấu tiếng Việt tối ưu, Be Vietnam Pro được ưu tiên trong font stack. line-height 1.7 là bắt buộc cho body text tiếng Việt — dấu ngã, hỏi trên chữ cái có dấu mũ cần thêm không gian dọc.
Foundation · 03

Spacing

8pt grid — mọi khoảng cách đều là bội số của 4px. Tokens --sp-* áp dụng nhất quán cho padding, margin, gap trên tất cả components và layouts.

--sp-12px Icon gaps, micro offsets
--sp-24px Badge padding, tight labels
--sp-38px Icon-to-text, button icon gap
--sp-412px Inline padding, meta pills
--sp-516px Card padding (sm), nav items
--sp-724px Card padding (default), section gaps
--sp-832px Section internal gap, form spacing
--sp-1048px Mobile nav height, large gaps
--sp-1264px Page content padding, section top
--sp-1696px Footer padding, hero vertical space
Components · 04

Buttons

Ba variants — Primary (gradient fill), Secondary (outline), Ghost (text). Mọi button đều có min-height 44px theo WCAG 2.5.8. Primary button có sheen animation ::before trên hover, không gây layout shift.

Variant Default Hover Focus Disabled
Primary --green-gradient-btn, white text Sheen + lift -1px, stronger glow outline 2px --green-mid +3px offset opacity 0.45, no transform
Secondary transparent, --ink-900 border border → --green, text → --green outline 2px --green-mid opacity 0.45
Ghost transparent, --ink-500 text text → --ink-900, underline --green outline 2px --green-mid opacity 0.45
<!-- Primary button -->
<button class="btn btn-primary">Đặt cọc ngay</button>

<!-- Secondary -->
<button class="btn btn-secondary">Xem chi tiết</button>

<!-- Ghost -->
<button class="btn btn-ghost">Tìm hiểu thêm</button>
Components · 05

Cards

Property listing card với status badge, tên dự án, giá và CTA. Hover state: shadow-md + border shift — không dùng translate để giữ sự trang nhã. Featured card có --green-pale tint và accent top border.

Hoàng Mai, Hà Nội Celadon City T1 3.2 tỷ đồng
Tây Mỗ, Hà Nội Celadon City T3 2.9 tỷ đồng
<!-- Property card — semantic tokens only -->
<article class="property-card">
  <div class="card-image-placeholder">
    <!-- Badge: icon + color + text (WCAG 1.4.1) -->
    <span class="status-badge badge-available" role="status">
      <span aria-hidden="true"></span> Còn hàng
    </span>
  </div>
  <div class="card-body">
    <span class="card-name">Celadon City T1</span>
    <span class="card-price">3.2 tỷ đồng</span>
  </div>
</article>
Components · 06

Form Inputs

Tất cả input states: default, hover, focus, error, disabled. Focus ring dùng outline — không dùng box-shadow để tránh xung đột với existing shadows. Inline validation (không chờ submit) là yêu cầu bắt buộc cho AT users.

Định dạng: 09xx xxx xxx hoặc +84 xxx xxx xxx
Email không hợp lệ — vui lòng kiểm tra lại định dạng
Không thể chỉnh sửa trong bước này
Inline validation: Validation kích hoạt khi user blur khỏi field (không phải khi submit). aria-invalid="true" + aria-describedby + role="alert" trên error message đảm bảo screen reader đọc lỗi ngay lập tức. Min-height 44px đáp ứng WCAG 2.5.8 Target Size.
Components · 07

Accessible Date Picker

📊
Accessibility Recovery Story 0% → 83% keyboard completion Date picker ban đầu được build bằng div click handlers — 0% users dùng keyboard navigation hoàn thành reservation flow. Sau ARIA overhaul theo W3C Date Picker pattern (role="grid", gridcell, arrow key navigation, focus management): tỷ lệ tăng lên 83%. Component này là lý do tại sao accessibility không phải checkbox — nó là core functionality.

Demo đầy đủ keyboard navigation: phím mũi tên di chuyển giữa ngày, Enter để chọn, Escape để đóng. Focus quay về trigger button khi đóng.

<!-- W3C ARIA Date Picker pattern -->
<button aria-haspopup="dialog" aria-expanded="false">
  Chọn ngày
</button>

<div role="dialog" aria-modal="true"
     aria-label="Lịch chọn ngày">

  <div role="grid" aria-label="Lịch ngày">
    <div role="row">
      <!-- Day cells -->
      <button role="gridcell"
              aria-label="15 tháng 4, 2025"
              aria-selected="false">15</button>
    </div>
  </div>

  <!-- Arrow keys: left/right (prev/next day) -->
  <!--           up/down (+/- 7 days)          -->
  <!-- Enter: select · Escape: close+return   -->
</div>
Screens & Docs · 09

Morning / Evening Theme

Data từ Hotjar cho thấy 41% homebuyers duyệt listing vào buổi tối (19h–23h). Evening mode không phải dark mode thẩm mỹ — đây là quyết định product dựa trên behavioral analytics. Màu midnight được thiết kế để giảm mỏi mắt trong điều kiện ánh sáng thấp, đồng thời giữ property imagery vẫn hấp dẫn.

☀ Sáng — Morning Mode
Yên Sở, Hà Nội Gamuda Gardens
4.8 tỷ đồng
Còn hàng
☾ Tối — Evening Mode
Yên Sở, Hà Nội Gamuda Gardens
4.8 tỷ đồng
Còn hàng
// Auto time-of-day detection
const hour = new Date().getHours();
if (hour >= 19 || hour < 7) {
  // Apply immediately — no transition on load
  document.body.classList.add('no-transition');
  document.body.classList.add('evening-mode');
  requestAnimationFrame(() => {
    document.body.classList.remove('no-transition');
  });
}
Screens & Docs · 10

Bilingual Support

Tiếng Việt và tiếng Anh được xử lý như hai ngôn ngữ đồng đẳng, không phải translation. Vietnamese copy được viết lại cho giọng văn chuyên nghiệp địa phương. html[lang] attribute là bắt buộc cho TalkBack/VoiceOver phát âm đúng.

html[lang="vi"] 🇻🇳
Tiếng Việt Tìm ngôi nhà của bạn Khám phá các căn hộ cao cấp tại Celadon City — nơi thiên nhiên và tiện nghi hiện đại hòa quyện trong từng không gian sống.
html[lang="en"] 🇬🇧
English Find Your Home Discover premium residences at Celadon City — where nature and modern amenities come together in every living space.
🔊
Screen reader note: lang attribute trên <html> là bắt buộc để TalkBack (Android) và VoiceOver (iOS) chọn đúng voice engine. Thiếu lang="vi", screen reader phát âm tiếng Việt theo quy tắc tiếng Anh — trải nghiệm hoàn toàn không dùng được cho người dùng khiếm thị. Đây là WCAG 3.1.1 Language of Page (Level A).
// Language switcher pattern
function setLanguage(lang) {
  document.documentElement.setAttribute('lang', lang);
  // Update all [data-vi] / [data-en] elements
  document.querySelectorAll('[data-vi][data-en]')
    .forEach(el => {
      el.textContent = el.dataset[lang];
    });
}