PDP UI/UX qo‘llanma · v0.7

Rasmiy brend

PDP Ishxona

DS bilan ishlaydiganlar uchun: boshqaruv, komponentlar holati va tarixi, design tokenlar, dasturchilar uchun ulanish, AI fayllari va tayyor promptlar.

Ko‘lam — raqamlarda

Yig‘ishda manbadan sanaladi · 08.10.2026

  • 7bo‘lim
  • 28hujjat bloki
  • 15tayyor prompt
  • 501--eco-* token

Boshqaruv

Bitta tizim, oltita brend — bitta yo‘l

Kim qaror qiladi, versiya qachon oshadi va o‘zgarish saytga qanday chiqadi.

Qoidalar va kod

PDP Design System — barcha PDP loyihalari uchun bitta: komponentlar, semantik tokenlar va qoidalar umumiy, har brend esa o‘z qatlamini beradi — ranglar, shrift va logotip. Bu bo‘lim kim qaror qilishini, versiya qachon oshishini, brend nimani o‘zgartira olishini, yangi komponent va ekran qanday tekshirilishini va o‘zgarish qaysi yo‘l bilan design.pdp.uz saytiga chiqishini ko‘rsatadi.

Ikki holat: Figma belgili va belgisiz

Qoidalar va kod
Figma

Tasdiqlangan brend qoidasi

Brend egasining Figma fayli yoki rasmiy hujjatidan olingan: ranglar, shrift, logotip va uning o‘lchov moduli. Mahsulotlar uni o‘zgartirmasdan ishlatadi. Har brendning manbasi — pastdagi jadvalda.

Belgisiz — design system qarori

Manbada hali yo‘q qaror: shkalalar, semantik tokenlar, komponentlar, patternlar — va to‘rtta yangi brendning ranglari. Ishlatish mumkin, lekin keyingi versiyada o‘zgarishi mumkin — tasdiq kutadi.

BelgisizFigmato‘rt shart bajarilganda

  1. Sinovdan o‘tgan Kamida bitta mahsulotda haqiqiy ekranda ishlatilgan — masalan, kurs sahifasida yoki kabinetda.
  2. Tekshirilgan Oltita brendda, ikki rejimda, 390px kenglikda; matn kontrasti ≥ 4.5:1.
  3. Figma’da chizilgan Brendning Figma fayliga qoida yoki komponent sifatida qo‘shilgan.
  4. Brend egasi tasdiqlagan Blokka “Figma” belgisi qo‘yiladi, pastdagi Versiyalarga PATCH sifatida yoziladi.

Rad etilgan taklif sahifadan olib tashlanadi, sababi esa Versiyalar yozuvida qoladi — xuddi shu savol qayta ko‘tarilmasligi uchun.

Brendlar va ularning egalari

Oltita brend: har birining egasi, manbasi va brendbuki.

Qoidalar va kod

Har brend — bitta brend moduli: tools/ecosystem-ds/brands/<id>.js. Unda brend primitivlari, 27 ta brend kaliti, shrift va logotip turadi; qolgan hamma narsa umumiy. Faol brend qatori ajratilgan.

Brend Holat Brend egasi Brend manbasi Brendbuk
PDP EcoSystemfaolRasmiyEcoSystem brend jamoasi · ota brendFigma: PDP EcoSystem Brand Color 2026/ecosystem/
PDP AcademyfaolRasmiyAcademy brend egasi · marketingFigma: PDP Academy Logo 2026/academy/
PDP SchoolfaolTasdiq kutadiSchool jamoasiPDP School Guideline, School DS v1.0; shrift — Onest (qaror)Tayyorlanmoqda · amaldagi DS — /school/
PDP UniversityfaolTasdiq kutadiUniversity jamoasiSayt logotiplari (SVG), palitra A; Figma manbasi yo‘qTayyorlanmoqda
PDP OnlinefaolTasdiq kutadiOnline jamoasiBelgi — Academy Figma to‘plamidan; logotip — 1-variant (biz chizdik)Tayyorlanmoqda
PDP JuniorfaolTasdiq kutadiJunior jamoasiBelgi — Academy Figma to‘plamidan; logotip — 1-variant «Oila» (biz chizdik)Tayyorlanmoqda

«Tasdiq kutadi» holatidagi brend ishlatiladi, lekin ranglari va shrifti brend jamoasi tasdiqlaguncha o‘zgarishi mumkin. Tasdiqdan keyin modulda status: 'rasmiy' qo‘yiladi va Versiyalarga yoziladi.

Kim nimaga javob beradi

Qaror — yakuniy so‘z va javobgarlik Tasdiqlaydi — uning roziligisiz chiqmaydi Maslahat — fikri oldindan so‘raladi Taklif beradi — o‘zgarishni boshlay oladi
Qoidalar va kod
Qaror sohasi Brend egasi har brendning o‘z jamoasi DS maintaineri DS kodi, tokenlar Mahsulot jamoasi sayt, kabinet, ilova
Brend ranglari, logotip, belgi, shriftQarorKontrastni tekshiradiIshlatadi
Brend kalitlari: tugma, havola va fokus qaysi rejimda qaysi rang (27 ta)TasdiqlaydiQarorTaklif beradi
Umumiy tokenlar: neytral, holat ranglari, --eco-chart-*, --eco-cat-*, oraliq, radiusXabardorQarorTaklif beradi
Umumiy komponentlar .eco-*MaslahatQarorTaklif beradi
Loyiha aksenti --eco-project-*TasdiqlaydiQarorTaklif beradi
Mahsulot ekranlari va oqimlariMaslahatMaslahatQaror
Versiya, changelog, deployXabardorQarorXabardor

Brend nimani o‘zgartira oladi

Qoidalar va kod

Umumiy — hamma brendda bir xil

Brend o‘zgartirmaydi — faqat PDP Design System versiyasi orqali.

  • Token nomlari --eco-* va komponent tuzilmasi .eco-*
  • --eco-color-neutral-*, -error-*, -warning-* — neytral va holat shkalalari
  • --eco-chart-2…6, --eco-cat-* — grafik seriyalari va toifa tuslari (dizayner bergan ranglar; tartibini build brendga qarab tanlaydi)
  • --eco-spacing-*, --eco-radius-*, matn shkalasi, soyalar, harakat tokenlari
  • Kontrast, fokus, klaviatura va reduced motion qoidalari

Brend moduli beradi

Shart: build har brendni ikki rejimda tekshiradi — xato bo‘lsa sahifa yig‘ilmaydi.

  • --eco-color-<brend>-* — brend primitivlari va shkalalari
  • 27 ta brend kaliti: --eco-bg-brand-*, --eco-text-brand-*, --eco-fg-brand-*, --eco-border-brand, --eco-focus-ring, --eco-chart-1, -seq-*, muvaffaqiyat kalitlari
  • --eco-font-display, --eco-font-body, --eco-gradient
  • Logotip, belgi va ularning eng kichik o‘lchami
  • --eco-project-<o‘z id> — faqat o‘z loyihasining aksenti; qo‘shnilariniki tegilmaydi
// tools/ecosystem-ds/brands/<id>.js — brend moduli (qisqartirilgan)
module.exports = derive({
  id: '<id>', name: 'PDP …', status: 'taklif',   // tasdiqdan keyin — 'rasmiy'
  primitives: { … },                 // brend ranglari — brend egasi
  semantic: () => slots({ … }),       // 27 brend kaliti, ikki rejim — DS maintaineri
  fonts: { display, body, mono },      // shrift — brend egasi
  logo: { symbols: 'brands/<id>/symbols.html' },
});
// build tekshiradi: 27 kalit, brend maydonidagi matn ≥ 4.5:1, grafik seriyalari
// orasida ΔE ≥ 0.10, sahifa fonidagi yuza ≥ 3:1 (yoki sababi yozilgan)

Brend ranglari — brend qarori: ularni faqat shu brend egasi o‘zgartiradi. Ajratish ranglari va umumiy tokenlar — tizim qarori, ularni DS maintaineri dizayner bergan ranglardan belgilaydi. Bir brendning rangi boshqa brendda ishlatilmaydi — build buni brend literallari tekshiruvi bilan ushlaydi.

Versiya raqami: MAJOR.MINOR.PATCH

MAJOR 1.0 → 2.0
Token o‘chirildi yoki nomi o‘zgardi, komponentning HTML tuzilishi o‘zgardi. Mahsulotlar kodini yangilaydi — migratsiya izohi bilan.
MINOR 0.4 → 0.5
Yangi token, komponent, pattern yoki brend qo‘shildi. Mavjud kod o‘zgarishsiz ishlayveradi.
PATCH 0.5.0 → 0.5.1
Qoida matni aniqlashtirildi, xato yoki kontrast tuzatildi, taklif “Figma” belgisini oldi, brend tasdiqlandi. Token nomlari o‘zgarmaydi.
Qoidalar va kod

1.0 gacha (0.x) minor versiyada ham token nomi o‘zgarishi mumkin — yangilashdan oldin shu yozuvlarni o‘qing. Raqam yon paneldagi belgida, <meta name="pdp-ds-system"> tegida (deploy’dan keyin CI shu teg bo‘yicha sahifani tekshiradi) va shu ro‘yxatda yangilanadi. Brendbuklarning versiyasi alohida.

Yangi komponent va ekran chiqishidan oldin

Chapda — yangi komponent 4 qadamda, o‘ngda — ekran chiqishidan oldingi tekshiruv.

Yangi komponent — 4 qadam

Ekran chiqishidan oldin

Qoidalar va kod

Tizim yomon qarorlardan emas, hujjatlashtirilmagan istisnolardan buziladi. Chapda — yangi komponent qanday qo‘shiladi, o‘ngda — har bir ekran chiqishidan oldingi tekshiruv. Qoidalar oltita brendda bir xil.

Yangi komponent — 4 qadam
  1. Borligini tekshiringO‘ntadan to‘qqiztasi aslida yangi emas: bu boshqa mazmundagi karta, beyj yoki ro‘yxat qatori. Avval shu sahifadan eng yaqin komponent yoki patternni qidiring.
  2. Tokenlardan yig‘ingRang, oraliq, radius va soya — faqat shkalalardan. Qiymat yetishmasa, bu komponent haqida emas, token haqidagi suhbat: o‘zgarish so‘rovi oching.
  3. Holatlarni tavsiflangDefault, hover, active, focus, disabled va loading. Komponent ma’lumot ko‘rsatsa — bo‘sh holat va xato holati ham.
  4. Sahifaga qo‘shingKomponent shu sahifada jonli namuna va qoidasi bilan turgandagina mavjud: oltita brendda, ikki rejimda, 390px kenglikda. Hujjatsiz komponent — yo‘q komponent.

O‘zgarish yo‘li: taklifdan saytgacha

  1. Taklif
  2. Figma
  3. Bo‘lim fayli
  4. Yig‘ish
  5. Merge request
  6. Deploy
Qoidalar va kod
Taklif

O‘zgarish so‘rovi ochiladi: nima, nega, qaysi brend va mahsulotlarga ta’sir qiladi.

GitLab issue · shablon pastda
Figma

Dizayner yechimni maketda ko‘rsatadi. Brend rangi, shrift yoki logotipga tegsa — shu brend egasi ko‘radi.

brendning Figma fayli
Bo‘lim fayli

Qoida va jonli namuna bo‘lim fayliga yoziladi, ruscha matn — ds/i18n/ru/<id>.json ga. Brend qiymati — faqat brend moduliga: brands/<id>.js.

tools/ecosystem-ds/ds/sections/NNN-id.html
Yig‘ish

Sahifa oltita brendda, ikki rejimda va 390px kenglikda tekshiriladi. Natija — site/ds/, token va AI fayllari — ham commit qilinadi.

node tools/ecosystem-ds/build.js --project pdp
Merge request

DS maintaineri ko‘rib chiqadi; brend qiymatiga tegsa — shu brend egasi ham tasdiqlaydi.

MR → main
Deploy

Merge’dan so‘ng CI sahifa manbaga mosligini tekshiradi, site/ papkasini serverga ko‘chiradi va meta teglarni tekshiradi.

design.pdp.uz/ds/

O‘zgarish so‘rovi shabloni

Qoidalar va kod
## O‘zgarish so‘rovi · PDP Design System

- **Nima o‘zgaradi:** token / komponent / pattern / brend moduli
- **Qayerda:** bo‘lim yoki fayl — masalan, `ds/sections/060-color.html` yoki `brands/school.js`
- **Nega:** qaysi muammoni hal qiladi; misol ekran — Figma havolasi
- **Qaysi brendlar:** hammasi / EcoSystem / Academy / School / University / Online / Junior
- **Versiya turi:** MAJOR / MINOR / PATCH
- **Holat:** Taklif

### Tekshiruv
- [ ] oltita brendda, qorong‘i va yorug‘ rejimda ko‘rildi
- [ ] 390px kenglikda gorizontal skroll yo‘q
- [ ] kontrast: matn ≥ 4.5:1; ikonka, chegara va fokus ≥ 3:1
- [ ] faqat `--eco-*` tokenlari; brend qiymati faqat brend modulida
- [ ] Versiyalarga yozuv qo‘shildi

Muallif: ism, jamoa · 26.09.2026

Komponentlar holati

Komponentlar holati: nima tayyor, nima yangi, nima eskirgan

Har bo‘lim holati: Tayyor, Beta, Eskirgan yoki Rejada — qidiruv va filtr bilan.

Qoidalar va kod

Har bir bo‘lim — qaysi to‘plamda, qaysi brendlarda va qanday holatda: Tayyor — mahsulotda ishlating; Beta — yangi, art direktor ko‘rib chiqmoqda; Eskirgan — yangi ishda ishlatilmaydi, o‘rniga nima borligi yozilgan; Rejada — hali yo‘q. Jadval menyudan yig‘ishda tuziladi, qo‘lda yozilmaydi. G‘oya — GitHub Primer (Component status) va Atlassian (Beta yorliqlari).

Komponentlar tarixi

Komponentlar tarixi: nima, qachon va nima uchun o‘zgardi

Komponentni tanlang — faqat uning o‘zgarishlari qoladi, yangidan eskiga.

Qoidalar va kod

Har komponent bo‘yicha o‘zgarishlar — yangidan eskiga: yangi bo‘lim, o‘lcham yoki rang qoidasi, eskirgan variant. Komponentni tanlang — faqat unga tegishli yozuvlar qoladi. Umumiy yangiliklar — Kirish’dagi «Nima yangi»; to‘liq qoidalar — dizayn qoidalari faylida. G‘oya — GitHub Primer, Atlassian va Shopify Polaris changelog’lari.

Tokenlar

Kodda ishlatish uchun tayyor

CSS va JSON tokenlar; Light va Dark yonma-yon — bitta markup.

Qoidalar va kod

Qiymatlar CSS o‘zgaruvchilari va JSON ko‘rinishida beriladi. Token nomlari oltita brendda bir xil — --eco-*, qiymatlari brendniki. Semantik tokenlar ikki rejimda ishlaydi: mahsulot uchun asosiysi — yorug‘, qorong‘i esa qo‘llab-quvvatlanadigan muqobil va brend konteksti. Sahifaning o‘zini ham rejim tugmasi bilan almashtirib ko‘ring.

Ikki rejim yonma-yon

bir xil markup, faqat data-theme farq qiladi
data-theme="dark" · muqobil

Kursni tamomlang, sertifikat oling

Qora fonda brend maydoni va havola yorqin pog‘onada. Batafsil

bg-secondaryFaol
data-theme="light" · mahsulot uchun asosiy

Kursni tamomlang, sertifikat oling

Oq fonda havola va fokus o‘qiladigan to‘qroq pog‘onaga o‘tadi. Batafsil

bg-secondaryFaol

Untitled UI nomlari

Token nomi anatomiyasi: prefiks, guruh, rol, daraja va holat.

Umumiy tokenQorong‘iYorug‘Qayerda
--eco-text-primaryneutral-50blackSarlavha, asosiy matn
--eco-text-secondaryneutral-200neutral-700Label, tugma matni
--eco-text-tertiaryneutral-400neutral-600Izoh, meta satr, ikkinchi darajali matn
--eco-bg-primaryblackwhiteSahifa foni, karta ichidagi maydon
--eco-bg-secondaryneutral-900surfaceKarta, maydon, segment, jadval sarlavhasi
--eco-bg-primary_altneutral-800whiteSuzuvchi qatlam: dropdown, modal
--eco-border-primaryneutral-500neutral-500Checkbox va radio chegarasi (≥ 3 : 1)
--eco-border-tertiaryneutral-50 · 14%black · 14%Bo‘luvchi chiziq, jadval kartasi chegarasi
Qoidalar va kod

Semantik tokenlar Untitled UI nomlarini oladi, oldiga --eco- qo‘shiladi. Nom rangni emas, vazifani aytadi: qiymat brend va rejimga qarab o‘zgaradi, nom o‘zgarmaydi. Chiziqcha (-) nom qismlarini ajratadi, pastki chiziq (_) — holat yoki variantni.

  1. --eco-prefiks
  2. bg-guruh
  3. brand-rol
  4. soliddaraja yoki tur
  5. _hoverholat

Shisha tokenlari

--eco-glass-fill -fill-hover
Shisha foni va hover foni: Dark — qora 20 % (hover 32 %), Light — oq 40 % (hover 58 %).
--eco-glass-backdrop
backdrop-filter qiymati: Dark — blur(3px) brightness(1.25), Light — blur(3px) brightness(1.06).
--eco-glass-rim
1 px qirra gradienti — yorug‘lik chap-tepadan (Dark — oq 60 % dan, Light — oqdan shaffofga). Chiziq emas, shishaning o‘zi.
--eco-glass-ink -solid
Shisha ustidagi matn va ikonka (Dark — oq, Light — qora); blur’siz brauzer uchun zaxira fon.

Rejimga ergashadi; rejimdan qat’i nazar — .eco-glass--dark / .eco-glass--light. Komponentlar: .eco-glass, .eco-btn--glass (Sayt → Tugmalar).

Bu tokenlar oltita brendda bir xil. Qiymat ustunida — primitiv rang: neutral-50 = --eco-color-neutral-50. Brendga bog‘liq 27 ta kalit — pastda, faol brend uchun.

Yorug‘ bg-secondary — loyihaning kulrang foni --eco-color-surface (brend qatlamida): hozircha hamma loyihada #F5F5F5, keyin har loyihaga o‘z foni. Hover, faol, disabled va tertiary fonlar ham undan hisoblanadi — tussiz kulrang zina.

Yorug‘ bg-brand-primary — loyihaning och brend tusi --eco-color-brand-tint (brend qatlamida): tanlangan karta, informatsion karta, bosilgan chip, brend beyji. EcoSystem, Academy va Online’da #E9FED8 (qaror 01.10.2026).

Brend qatlami — PDP EcoSystem

Rasmiy

Brend primitivlari brendniki

Brend kalitlari 27 ta

  • --eco-bg-brand-*, --eco-text-brand-*, --eco-fg-brand-*
  • --eco-border-brand, --eco-focus-ring, --eco-text-primary_on-brand
  • --eco-*-success-*
  • --eco-chart-1, -seq-*, -div-4, -div-5

Umumiy tokenlar hamma brendda

Brend qayta yozmaydi: ular PDP Design System versiyasi bilan o‘zgaradi.

  • --eco-color-neutral-*, -error-*, -warning-*
  • --eco-chart-2…6, --eco-cat-*, --eco-project-*, --eco-glass-*
  • Neytral matn, fon va chegara tokenlari
  • Matn shkalasi, oraliqlar, burchaklar, soyalar, harakat
Qoidalar va kod
Brend primitivlari brendniki

Brend ranglari va ulardan hisoblangan shkalalar. Belgini bosib nusxalang.

Brend kalitlari 27 ta

Shu semantik tokenlar brend primitivlariga ulangan. Nomi o‘zgarmaydi — faqat qiymati.

27 ta brend kalitining qiymatlari · yorug‘ va qorong‘i rejim
TokenYorug‘Qorong‘i
--eco-text-primary_on-brand#FFFFFF#141414
--eco-text-brand-primary#00A603#BDFF00
--eco-text-brand-secondary#00A603#BDFF00
--eco-text-brand-secondary_hover#014C02#CFFF80
--eco-text-brand-tertiary#00A603#00C508
--eco-text-success-primary#026503#63E95D
--eco-border-brand#048307#BDFF00
--eco-fg-brand-primary#048307#BDFF00
--eco-fg-brand-primary_alt#00C508#BDFF00
--eco-fg-brand-secondary#00C508#00C508
--eco-fg-success-primary#048307#00C508
--eco-fg-success-secondary#00C508#40D63C
--eco-bg-brand-primary#E9FED8rgba(189, 255, 0, .10)
--eco-bg-brand-secondary#C6FFC0rgba(189, 255, 0, .18)
--eco-bg-brand-solid#00B533#BDFF00
--eco-bg-brand-solid_hover#02A307#CFFF80
--eco-bg-success-primary#E7FFE4rgba(0, 197, 8, .16)
--eco-bg-success-solid#00B533#00B533
--eco-focus-ring#048307#BDFF00
--eco-chart-1#00B533#BDFF00
--eco-chart-seq-1#E5FFC0#014C02
--eco-chart-seq-2#BDFF00#048307
--eco-chart-seq-3#00B533#00C508
--eco-chart-seq-4#026503#63E95D
--eco-chart-seq-5#013A04#BDFF00
--eco-chart-div-4#40D63C#40D63C
--eco-chart-div-5#048307#048307
tokens/ecosystem.css · brend qatlami
/* Brend qatlami — brendbuk belgilaydi, loyiha o‘zgartirmaydi */
:root {
  --eco-color-black: #141414;
  --eco-color-malachite: #00C508;
  --eco-color-lime: #BDFF00;
  --eco-color-lime-light: #B5F500;
  --eco-color-malachite-button: #00B533;
  --eco-color-green-done: #00A603;
  --eco-gradient-stop-1: #F2FFC7;
  --eco-gradient-stop-2: var(--eco-color-lime);
  --eco-gradient-stop-3: var(--eco-color-malachite);
  --eco-gradient-stop-4: var(--eco-color-green-950);
  --eco-gradient: linear-gradient(90deg, var(--eco-gradient-stop-1) 0%, var(--eco-gradient-stop-2) 22%, var(--eco-gradient-stop-3) 58%, var(--eco-gradient-stop-4) 100%);
  --eco-color-surface: #F5F5F5;
  --eco-color-brand-tint: #E9FED8;
  --eco-font-display: "PDP Display", "PDP Display Fallback", system-ui, sans-serif;
  --eco-font-body: "Inter", "Inter Fallback", system-ui, sans-serif;
  --eco-font-mono: "IBM Plex Mono", "IBM Plex Mono Fallback", ui-monospace, monospace;
  --eco-logo-min-full: 120px;
  --eco-logo-min-mark: 16px;
  --eco-logo-min-badge: 64px;
}

Shrift: Space Grotesk + Golos Text (sarlavha) va Inter (matn). Ulash havolasi token fayli boshidagi izohda.

<!-- bitta brend: shu brendning fayli -->
<html lang="uz" data-theme="light">
<link rel="stylesheet" href="https://design.pdp.uz/ds/tokens/ecosystem.css">

<!-- bir ilovada bir nechta brend: all.css + data-brand -->
<html lang="uz" data-brand="ecosystem" data-theme="light">
<link rel="stylesheet" href="https://design.pdp.uz/ds/tokens/all.css">

Dasturchilar uchun

Komponentlar CSS’ini ulash: bitta manba

ERP, LMS va Desk uchun CSS bitta manzildan yoki npm paketidan — fayllar xaritasi bilan.

Qoidalar va kod

ERP, LMS va Desk komponentlar CSS’ini bitta joydan oladi — design.pdp.uz/ds/css/ yoki npm paketi @pdp/design-system. Nusxa ko‘chirilmaydi: loyihadagi nusxa vaqt o‘tib asl nusxadan farqlanib ketadi. Joriy versiya — 0.7.27.

AI uchun

AI yordamchiga qoidalarni bir marta bering

Har brend uchun ingliz tilidagi tayyor prompt — nusxalang va AI yordamchiga bering.

Qoidalar va kod

Qoidalar berilmasa, Claude, Cursor yoki Copilot dizaynni o‘zicha o‘ylab topadi: binafsha gradient, emoji ikonkalar, brend maydonida o‘qilmaydigan matn. Har brendning o‘z prompti bor: umumiy qoidalar — komponentlar, tokenlar, foydalanish qulayligi — va shu brendning ranglari, shrifti va logotipi. Prompt ingliz tilida — modellar ko‘rsatmani shu tilda aniqroq bajaradi, interfeys matni esa baribir o‘zbekcha chiqadi.

Vazifaga qarab: to‘plam fayllari

Agentga vazifasiga mos to‘plam fayli beriladi — butun DS emas.

Qoidalar va kod

Agentga butun Design System emas, vazifasiga mos to‘plam beriladi. Har to‘plamning ai.md faylida faqat shu to‘plam bo‘limlari, bloklari, PDP klasslari va ular ishlatadigan tokenlar bor — build ularni bo‘lim ma’lumotidan yig‘adi.

Yo‘naltiruvchi fayl: design.pdp.uz/llms.txt — to‘plamlar ro‘yxati va qaysi birini qachon o‘qish. Avval Yadro, keyin vazifa to‘plami va brend prompti (pastda).

Tayyor fayl — PDP EcoSystem

Rasmiy

Brend prompti matn fayli sifatida ham bor — agent uni havoladan o‘qiydi.

Qoidalar va kod

Shu brend uchun prompt alohida matn fayli sifatida ham bor — agent uni to‘g‘ridan-to‘g‘ri o‘qiydi: design.pdp.uz/ds/ai/ecosystem.md. Tokenlar: tokens/ecosystem.css.

Boshqa brend mahsuloti uchun sahifadagi brend tanlovidan brendni almashtiring — prompt va fayl ham almashadi. Bitta loyihaga bitta brend prompti qo‘yiladi.

Prompt — PDP EcoSystem

Rasmiy
ai/ecosystem.mdingliz tilidav0.6 · 01.10.2026
Kod
# PDP EcoSystem — UI rules for AI assistants (PDP Design System v0.6, brand "ecosystem")

You write UI for PDP EcoSystem, the parent brand of PDP Academy, PDP Online, PDP University, PDP School and PDP Junior. Follow these rules exactly. If a request conflicts with a rule, follow the rule and say which rule you kept. Tokens: https://design.pdp.uz/ds/tokens/ecosystem.css (CSS custom properties) or https://design.pdp.uz/ds/tokens/ecosystem.json (W3C DTCG). Load one token file only.
The system is based on Untitled UI: structure, sizes, variants, states and token names come from Untitled UI (with the --eco- prefix); colours, fonts and the logo are EcoSystem's.

## Mode
- Products are light-first: for a product screen the light mode is the default. Set data-theme="light" on <html> — bare :root is the dark mode.
- Dark is the supported alternative, not the product default: leave data-theme off (or set "dark") for brand surfaces — hero, covers, the brand book — and when the user asks for dark.
- Light: page background #FFFFFF, brand fill green #00B533 with white text. Dark: page background #141414, brand fill lime with black text. All semantic tokens switch; component CSS stays the same.
- Every component works in both modes. Never hard-code colours in components; use var(--eco-*).

## Brand colours (fixed, from the brand book)
- Vivid Malachite #00C508 (--eco-color-malachite): brand green — the mark, decoration and brand graphics.
- Button color #00B533 (--eco-color-malachite-button): every green component fill in UI — light-mode brand fill, primary button, checked controls, solid badge, brand band.
- Black #141414 (--eco-color-black): backgrounds and text.
- Bitter Lime #BDFF00 (--eco-color-lime): dark-mode brand fill (primary button, links, focus ring).
- Green: Done #00A603 (--eco-color-green-done): all green text in the light mode — section eyebrows, card titles, labels and links (--eco-text-brand-secondary); 3.25:1 on #FFFFFF, 2.98:1 on #F5F5F5 — art director exception (05.10.2026). Never a fill: green fills stay #00B533 with white text.
- Gradient --eco-gradient: #F2FFC7 0%, #BDFF00 22%, #00C508 58%, #013A04 100%; every stop has its own token --eco-gradient-stop-1…4 (the gradient is built from them). Brand moments only, never behind body text.
- Primitive scales (25, 50, 100…900, 950): --eco-color-green-*, --eco-color-lime-*, --eco-color-neutral-*, --eco-color-error-*, --eco-color-warning-*. Components use semantic tokens, not primitives.
- No black text or marks on a green fill (brand decision 30.09.2026): text and marks on green are white #FFFFFF. Text on lime fills is ALWAYS black #141414 (15.3:1).
- Exception: white text on green fills (#00B533) — brand decision (30.09.2026): no black text or marks on a green fill, contrast 2.7:1. Every green component fill (primary button, checked checkbox and switch, solid badge, brand band, success call to action) is #00B533 with white text and marks: EcoSystem light mode, Academy, Online. Take the colour from the tokens (--eco-text-primary_on-brand, --eco-brand-on-*), never hard-code it. Black on green appears only in SMM designs and large banners, never in UI.
- Exception: the selected tab label is pure black or pure white exactly as in the design (user decision 30.09.2026), for every brand, even below 4.5:1 (white on the University teal pill). Unselected tab labels are black at 70 % (white at 70 % in the dark mode). Take them from --eco-tab-label, --eco-tab-label-strong and --eco-tab-*-fg, never hard-code them.
- Exception: white text on teal fills in PDP University — brand decision (30.09.2026): no black text or marks on a teal fill, contrast 3.05:1. Every teal component fill (primary button, checked checkbox and switch, solid badge, brand band) takes white text and marks through the tokens (--eco-text-primary_on-brand, --eco-brand-on-*); the yellow accent keeps black text. Black on teal appears only in media and SMM designs, never in UI.
- Never lime text on white or light surfaces (1.2:1). Never #00C508 as text on white (2.3:1).
- Light mode: brand text = --eco-text-brand-tertiary and links = --eco-text-brand-secondary, both Green: Done #00A603 (3.25:1 on white, 2.98:1 on the #F5F5F5 grey surface — art director exception, 05.10.2026); link hover green-900. Green-700 #048307 stays for borders and the focus ring, never for text.

## Distinction colours — these are NOT brand accents
- There is no separate working palette: the old PDP Portal 2025 working-colour scales were removed (01.10.2026). Only colours the designer gave tell things apart.
- Chart series: --eco-chart-2…6 (see Charts). Category badges: --eco-cat-{black|green|blue|teal|red} through .eco-badge--cat-* (the diversity set; avatars do not use it). The key names are slots: in EcoSystem the set is text colour, green, dark green, grey and lime, and the board / calendar / tag dots --eco-board-1…6 (text on the fill --eco-board-ink-1…6) are green, black (white in Dark), grey, light green, dark green and lime — no blue, cyan, teal, yellow or red. Callout tones: .eco-callout--tip (green), --warning (orange), --note (teal), --important (purple), colours from the callout frame.
- A distinction colour NEVER becomes a button, a link, a focus ring or a status (success, warning, error). Those stay brand (lime/malachite) and the status scales. The category green and red look like status colours: a category badge never gets a dot and always carries a word.
- Brand colours keep their jobs unchanged: accent, primary action, link, focus, brand surfaces.
- Contrast still applies: text on a category tint ≥ 4.5:1 (the components mix the colour toward black in the light mode and toward white in the dark mode), marks and borders ≥ 3:1, in both modes.
- Product surfaces (page, card, divider) come from --eco-color-neutral-* and the project's light grey surface --eco-color-surface (--eco-bg-secondary in the light mode; currently neutral #F5F5F5 in every project, each project will get its own later) through the semantic tokens, never from a distinction colour.
- Light mode hover, active, disabled and tertiary backgrounds (--eco-bg-primary_hover, --eco-bg-active, --eco-bg-secondary_hover, --eco-bg-tertiary, --eco-bg-disabled) are hue-less greys derived from --eco-color-surface (--eco-color-surface-active, -hover, -tertiary; currently #F7F7F7, #E6E6E6, #E6E6E6, and #F5F5F5 for disabled). Never use the green-tinted neutral-50/100/200 steps as a light background; they stay for text, icons and borders.

## Charts
- Categorical series in a fixed order: --eco-chart-1, -2, -3, -4, -5, -6. Series 1 always takes chart-1 (the brand). Series 2–6 are the brand's OWN colours plus near-black/near-white and greys (art director, 05.10.2026) — EcoSystem light: #00B533 green, near-black (neutral-900, not pure black), lime, greys; EcoSystem dark: lime, near-white (neutral-100), malachite, greys. Never another brand's colour: no blue, yellow, teal or aqua in EcoSystem charts. Black is a primary colour — use it before reaching for grey. Never reshuffle the order per chart; take the colour from the token, never the HEX.
- Maximum six series. Need more? Merge the tail into “Boshqa”, or separate them with a pattern or a direct label — never invent a seventh colour.
- Never put two close greens next to each other (e.g. green-700 beside #00B533 beside green-300). Lime is fine for fills and bars; in the light mode it is 1.2:1 on white, so a lime line or slice always carries a direct label.
- Sequential (low → high): --eco-chart-seq-1…5, one green ladder — ONLY for ordered magnitude (heatmap, activity calendar, density). Never use it for categorical series or stacked parts. Diverging (error ↔ success): --eco-chart-div-1…5, neutral in the middle.
- Colour never carries meaning alone: label the series or add a pattern. Axes and gridlines ≥ 3:1 against the background; series colours follow the known limits above.

## Project accents
- --eco-project-{academy|school|junior|university|online}: one accent per active ecosystem project, its own brand colour (school blue, a lighter step in dark; university teal; junior cyan; online yellow — the Academy family sun). Values come from the tokens; the hue stays, only the step may shift with the mode.
- Use them to tell projects apart: project chip, filter, legend, card stripe, avatar background. Not for buttons, links or focus.
- A project may re-map its own --eco-project-* token; it may not re-map the brand colours or another project's accent.

## Semantic tokens (use inside components)
- Backgrounds: --eco-bg-primary (page), --eco-bg-secondary (cards, sections, progress track), --eco-bg-tertiary (progress track on grey surfaces), --eco-bg-quaternary, --eco-bg-primary_alt (dialogs, popovers, raised cards), --eco-bg-primary_hover, --eco-bg-secondary_hover, --eco-bg-active, --eco-bg-disabled, --eco-bg-overlay (behind dialogs), --eco-bg-primary-solid (tooltips, toasts)
- Text: --eco-text-primary, --eco-text-secondary (+ _hover), --eco-text-tertiary (muted, + _hover), --eco-text-quaternary, --eco-text-placeholder, --eco-text-disabled, --eco-text-white, --eco-text-brand-primary, --eco-text-brand-secondary (links, + _hover), --eco-text-brand-tertiary, --eco-text-primary_on-brand (text on brand fills: white on the light-mode green fill, black on the dark-mode lime fill)
- Borders: --eco-border-primary (strong strokes; ≥ 3:1), --eco-border-secondary (strong dividers, hover), --eco-border-tertiary (dividers, table rows), --eco-border-disabled, --eco-border-brand (input focus, drag-over), --eco-border-error, --eco-border-error_subtle
- Foreground (icons): --eco-fg-primary, --eco-fg-secondary, --eco-fg-tertiary, --eco-fg-quaternary (+ _hover), --eco-fg-white, --eco-fg-disabled, --eco-fg-brand-primary, --eco-fg-brand-primary_alt (on inverted surfaces such as .eco-toast), --eco-fg-brand-secondary, --eco-fg-error-primary, --eco-fg-error-secondary, --eco-fg-warning-primary, --eco-fg-success-primary, --eco-fg-success-secondary
- Brand fills: --eco-bg-brand-solid (+ _hover) for checked controls, solid badges and brand bands; --eco-bg-brand-primary, --eco-bg-brand-secondary for soft tints. In the light mode --eco-bg-brand-primary is the project's brand tint --eco-color-brand-tint (#E9FED8 in EcoSystem, Academy and Online): selected cards, info cards, pressed chips, brand badges; never mix your own tint from the brand colour.
- Buttons: --eco-brand-button with --eco-brand-on-button (primary), --eco-brand-button-accent with --eco-brand-on-button-accent, --eco-brand-button-ink with --eco-brand-on-button-ink; secondary text --eco-brand-button-secondary-fg. Never mix the pairs.
- Status: success, warning, error, plus info only for the “Waiting” status (.eco-badge--info, icon --eco-fg-info-primary) — the only blue in EcoSystem. Soft fill --eco-bg-{success|warning|error}-primary, solid fill --eco-bg-{success|warning|error}-solid, text --eco-text-{success|warning|error}-primary, icon --eco-fg-{success|warning|error}-primary; error also has --eco-bg-error-secondary, --eco-bg-error-solid_hover, --eco-text-error-primary_hover.
- Focus: --eco-focus-ring; --eco-focus-ring-error on destructive controls.
- Shadows: --eco-shadow-xs (modern featured icons, table cards), --eco-shadow-sm, --eco-shadow-md, --eco-shadow-lg (dropdowns, toasts, raised cards), --eco-shadow-xl (dialogs), --eco-shadow-2xl, --eco-shadow-3xl. Buttons, inputs and plain cards have no shadow.
- Light ↔ dark: brand fill green #00B533 ↔ lime; links green-done #00A603 ↔ lime; focus green-700 ↔ lime; --eco-bg-primary #FFFFFF ↔ #141414; text on brand fills white ↔ black.
- Removed in v0.3, never use: --eco-surface*, --eco-accent*, --eco-on-accent, --eco-text-muted, --eco-border-strong, --eco-space-N, --eco-control-*, --eco-type-*, --eco-tracking-*, --eco-shadow-1/2/3, --eco-danger-*, --eco-info-*.

## Typography
- Headings: --eco-font-display ("PDP Display": Space Grotesk for Latin, Golos Text for Cyrillic, one weight lighter at 96%). Medium 500 for display/h1/h2, Regular 400 for h3/h4. Display text of 20px and larger: letter-spacing −4% (var(--eco-font-display--letter-spacing)); never on uppercase eyebrows or labels.
- Body and UI: --eco-font-body (Inter). Code: --eco-font-mono (IBM Plex Mono). Load all of them with one <link rel="stylesheet" href="https://design.pdp.uz/ds/fonts/fonts.css"> (self-hosted, SIL OFL).
- Scale, size/line-height in px: --eco-text-xs 12/18, --eco-text-sm 14/20, --eco-text-md 16/24, --eco-text-lg 18/28, --eco-text-xl 20/30, --eco-text-display-xs 24/32, --eco-text-display-sm 30/38, --eco-text-display-md 36/44, --eco-text-display-lg 48/60, --eco-text-display-xl 60/72, --eco-text-display-2xl 72/90.
- Every size has a --line-height pair; every display size also has --letter-spacing (−4%). Use: font: var(--eco-font-display--weight, 500) var(--eco-text-display-lg)/var(--eco-text-display-lg--line-height) var(--eco-font-display); letter-spacing: var(--eco-text-display-lg--letter-spacing). Other styles use 0.
- Sentence case. Body and input text 16px (--eco-text-md); buttons 16/24 in --eco-font-body, weight 500 (xs and sm 14/20); labels and hints 14px. Nothing below 12px.
- Section eyebrows (the uppercase label above a section title, e.g. “05 — TYPOGRAPHY”): --eco-font-mono, Medium 500, 14px, letter-spacing 0.12em, uppercase, in every brand. In EcoSystem, Academy and Online all green text in the light mode — eyebrows, card titles, labels and links — is --eco-color-green-done, an exception below 4.5:1 approved by the user (01.10.2026). Green fills keep their colour and white text.

## Spacing, shape, size
- Spacing scale only, px: --eco-spacing-{none 0, xxs 2, xs 4, sm 6, md 8, lg 12, xl 16, 2xl 20, 3xl 24, 4xl 32, 5xl 40, 6xl 48, 7xl 64, 8xl 80, 9xl 96, 10xl 128, 11xl 160}.
- Radius scale only, px: --eco-radius-{none 0, xxs 2, xs 4, sm 6, md 8, lg 10, xl 12, 2xl 16, 3xl 20, 4xl 24, full 9999}.
- Buttons, cards, alerts, dialogs, dropdown menus: 24px (--eco-radius-4xl; buttons are pills; xs buttons 16px; menu rows 20px); link-style buttons 4px (--eco-radius-xs). Inputs, selects, input groups, comboboxes, date and search fields: pill (--eco-field-radius-affix = --eco-radius-full), 44px high (sm 40px); multi-line textarea 20px (--eco-field-radius-multiline); OTP cells 12px. Toasts, tooltips: 12px (--eco-radius-xl). Callouts: 10px (--eco-radius-lg). Chips and --badge badges: 6px (--eco-radius-sm; lg badges 8px). Fully round (--eco-radius-full) only for single-line fields, pill badges, avatars, radios, switches, progress bars, sliders, segments and pill tabs.
- Heights: buttons xs 32, sm 36, md 40 (default), lg 44, xl 48px; inputs sm 40, md 44px (default). Buttons have a fixed height and horizontal padding only (xs 12, sm and md 16, lg 20, xl 24px; icon-only: a square, no padding); inputs take their height from padding + line-height.
- Content width: --eco-max-width-container 1280px.
- Icons: Phosphor Icons v2.1.1 (MIT) — Regular weight by default, Fill weight for active / selected / on states (current nav item, selected tab or segment, pressed toggle such as Saved or Favourite, current lesson, rating star); Bold only for tiny status marks in circles (check-bold, x-bold). Sizes --eco-icon-sm 16px, --eco-icon-md 20px, --eco-icon-lg 24px; colour is currentColor.
- Motion: --eco-duration-fast 120ms (hover, press), --eco-duration-base 200ms (toggles, tabs), --eco-duration-slow 360ms (panels); easing --eco-ease-standard, --eco-ease-emphasized (entering), --eco-ease-exit (leaving).
- Breakpoints (min-width): xs 600, sm 640, md 768, lg 1024, xl 1280, 2xl 1536px. Grid: 4 columns below 768px, 8 from md, 12 from lg; gutter 16px, 24px from md. Mobile first; no horizontal scroll at 390px.

## Components (reuse these class names; if the CSS is missing, implement them with these names and tokens)
- .eco-btn: sizes --xs | --sm | md (default, no class) | --lg | --xl; variants --primary | --accent | --ink | --secondary | --tertiary | --outline | --ghost | --link-color | --link-gray | --primary-destructive | --secondary-destructive | --tertiary-destructive | --link-destructive; --icon (square, icon only), --block (full width); .is-loading; [disabled]. While a button waits, put .eco-loader.eco-loader--sm.eco-loader--mono (aria-hidden) before the label and change the label (“Saqlanmoqda…”). Pill, no shadow; only --outline has a ring (1px, the same neutral as the tertiary fill in the dark mode). Hover darkens the fill; focus = hover fill + ring; pressed: scale(.975). Icon 16px (lg, xl: 20px), gap 8px (xs: 4px). In link variants wrap the label in <span> for the hover underline. Joined buttons: .eco-btn-group > .eco-btn.
- .eco-field > .eco-label (+ .req) + .eco-input (input, textarea, select; --sm 40px, md 44px default; no border: --eco-bg-secondary fill, --eco-bg-primary inside a card) + .eco-hint; .eco-input-wrap with a leading and/or trailing .eco-icon; .is-error (or aria-invalid="true"), .is-success
- .eco-otp (fieldset) > legend.eco-label + .eco-hint + .eco-otp__row (6 × input.eco-input.eco-otp__cell, 42×44px, 3 + 3 with an optional span.eco-otp__sep) + .eco-otp__foot (text + .eco-btn--link-color “resend”, aria-disabled while the timer runs). First cell autocomplete="one-time-code", all inputmode="numeric", no maxlength (spread a pasted code from the first cell); error: .is-error + aria-invalid="true" on every cell, message with role="alert"; checking: aria-busy="true"; disabled: fieldset[disabled].
- .eco-input-group (+ --sm; 44px default, 40px sm; inner pill 32 / 28px) > .eco-input-group__addon | select.eco-input-group__select (inside the addon) | button.eco-input-group__btn (--icon = icon only) + input.eco-input-group__input. One pill surface (radius var(--eco-field-radius-affix) = --eco-radius-full; plain .eco-input stays 12px), 6px inset, NO divider lines. Prefix/suffix = a pill inside the field (height = field − 12px); only a part with a function (select, button: copy, show, apply) or static text (%, .pdp.uz, +998) gets its own fill; static icons (globe, search, mail, lock) are .eco-input-group__addon--icon: no fill, --eco-fg-quaternary, like a search icon; --plain = text without fill. Fills come from context: on white the field is --eco-bg-secondary and the pill --eco-bg-primary_alt; on grey (.eco-card, .eco-input-group--on-grey) the field is --eco-bg-primary and the pill --eco-bg-secondary (custom properties --field-bg / --affix-bg, Light and Dark). Focus: 1.5px --eco-brand-button ring around the whole group; error: constant 1.5px --eco-focus-ring-error ring + message with an icon below. A text affix is a second <label for> of the input; with a select: role="group" + aria-labelledby on the group, aria-label on the select. At ≤ 479px a button pill with an icon shows the icon only.
- .eco-choice > .eco-check | .eco-radio (16px, --md 20px) | .eco-switch (36×20, --md 44×24) + label text (+ <small> hint); .eco-check--round (24px, + --lg 28px; + --media on photos) for multi-select on phones, lists, photos and avatars. Native inputs (spans with .is-on in aria-hidden mock-ups). Checkbox and radio = the global «Morf» component (08.10.2026, one shape for all 8 PDP projects, web and mobile; only the brand colour differs): no stroke; unchecked = 10% of the text colour (transparent mix, any surface), hover 16%; checked checkbox = 34% rounded square in --eco-brand-button that grows from a circle, then a round-cap tick in --eco-brand-on-button draws in (2.2 on a 20 grid); indeterminate (checkbox only) = the same fill + a dash; checked radio = the neutral disc + a brand dot at 50% of the size (never a fully filled circle); error = [aria-invalid="true"] (20% error tint); press = scale .88 + a small brand seed; .eco-choice--card = whole card as the control. On a brand-filled surface set --ctl-on: var(--btn-p-fg); data colours (calendar) set --ctl-on / --ctl-off-bg / --ctl-mark. Never redraw the control per section. Switch = brand fill + --eco-text-primary_on-brand thumb.
- .eco-slider (#slider): .eco-slider__head + .eco-slider__control (track, fill, 1–2 range inputs, optional __tip); --steps = step dots. Fill --eco-slider-fill (brand colour, both modes), white thumb, soft shadow only — no ring on track, thumb or bubble.
- .eco-badge: type pill (default) | --badge (6px corners); size --sm 22 | md 24 (default) | --lg 28px; colour --gray (default) | --brand | --success | --warning | --error; --dot. --solid (brand fill: green #00B533 with white text in light, lime with black text in dark) only for “Yangi”.
- .eco-chip (button[aria-pressed], 6px corners), .eco-avatar (--xs 24 | --sm 32 | --36 (design size: Inter 500 12/20, icon 16px) | md 40 default | --lg 48 | --xl 56 | --2xl 64px; .eco-avatar__status)
- Avatars (section “Avatarlar”, #avatars): an avatar always has a coloured background — no gradient (blurred orb) avatars and no grey circle with an icon or initials (art director decision, 04.10.2026). Every person, the current user included (lists, tables, chat, comments, rankings, kanban, groups), uses a 3D avatar (background colour baked into the image, the same in Light and Dark) — <span class="eco-avatar eco-avatar--3d" aria-hidden="true"><img src="https://design.pdp.uz/ds/assets/avatars/avatar-{01…16}.webp" alt="" width="40" height="40" loading="lazy" decoding="async"></span>; image picked by a stable hash of the user id, neighbours differ (images: Figma Community set by Arthur Belfort, CC BY 4.0 — credit kept in /ds/assets/avatars/README.md). Non-person agents — AI-mentor, bots, the system, groups — and the project mark use .eco-avatar--tint: a solid brand-tint circle (--eco-avatar-tint-bg) with a brand-colour Phosphor icon (#i-sparkles for the AI-mentor, #i-bot, #i-users) or the project initials (--eco-avatar-tint-ink). There is no initials fallback for people (--solid, --ink-*, --cat-* removed, 02.10.2026). Colours come from the --eco-avatar-* tokens. No real photos, no ring or border around an avatar, no animation.
- The EcoSystem project mark may also use .eco-avatar--accent (lime circle, green initials) or --inverse (#1F1F1F circle, lime initials).
- .eco-card (--raised, --interactive; .eco-card__title, .eco-card__meta): 24px corners, 24px padding, --eco-bg-secondary, no border (1px transparent keeps the size), no shadow; --raised and --interactive hover add --eco-shadow-lg
- .eco-tabs > .eco-tab[role=tab][aria-selected] (underline; pill — .eco-tabs--pill; --fill = equal widths), .eco-segment > button[aria-pressed] (--fill; --stacked — icon on top), .eco-link
- Dropdown menu and list (section “Menyu va ro‘yxat”, #menus): .eco-dropdown > button[aria-haspopup=menu|listbox][aria-expanded][aria-controls] + .eco-menu[role=menu|listbox][hidden] (--eco-bg-primary_alt + shadow-lg) > .eco-menu__group (.eco-menu__label), .eco-menu__sep, .eco-menu__item[role=menuitem|menuitemradio|menuitemcheckbox|option] (svg 16 or .eco-avatar 36, .eco-menu__body > .eco-menu__title + .eco-menu__desc, .eco-menu__kbd or .eco-menu__end; .eco-menu__check, --dot for one choice; --danger last, in its own group). Rows 36 / 38 / 56px. Arrows, Home/End, typeahead; Esc returns focus to the trigger. Form fields keep a native <select>.
- .eco-table (td.num), .eco-alert (--brand --success --warning --error; svg.eco-alert__icon + .eco-alert__body > __title + __desc, optional .eco-btn--sm.eco-alert__cta), .eco-toast, .eco-tooltip (+ <small>), .eco-progress > span (--v; fill --eco-brand-button, track --eco-bg-secondary, no stroke), .eco-progress-field (__head: __label + optional __info icon, __value with % + __status icon in role="status" — spinner #i-loader, .is-complete #i-circle-check, .is-error #i-circle-x; then .eco-progress or .eco-progress-row; __hint below, error message with role="alert"), .eco-progress-row (.eco-progress + <b>40%</b>), .eco-progress-float (--bottom; label bubble with shadow, no stroke), .eco-skeleton
- .eco-callout (tone: none = neutral grey | --brand | --info | --warning | --error | --success; variants: --compact, dismissible with .eco-callout__close), role="note": span.eco-callout__icon[aria-hidden] > svg (Phosphor fill: notepad-text, sparkles, info, triangle-alert, circle-x, circle-check), then div.eco-callout__content > p.eco-callout__title + div.eco-callout__body + optional div.eco-callout__actions > a.eco-callout__action (or one .eco-btn--sm); optional button.eco-callout__close[aria-label] > svg #i-x. Calm filled surface from semantic tokens only (brand tint follows the brand, info is the status blue --eco-cat-blue), 32px icon tile, title Inter 600 16/24 in --eco-text-primary, body 14/20 at 76% of the text colour; no border, left stripe or shadow, no decorative tones (teal/purple are gone). Old names still work: --note = neutral, --tip = --brand, --important = --info. A status or system response is .eco-alert.
- App components (section “Ilova komponentlari”, #app): tabs (.eco-tabs underline; pill — .eco-tabs--pill or .eco-segment in a grey track, stroke-less: neutral by default — white pill with a soft shadow and a black label, --inverse — black pill with a white label, --brand and --accent — brand pills from the --eco-tab-* tokens; sizes --sm | --md | --lg; the old --button-border | --button-gray | --button-brand names still work), progress bar, field with states and circle (.eco-progress, .eco-progress-field, .eco-progress-circle --xxs | --sm | --md, --p number), table in a card (.eco-table-card with .eco-table and .eco-pagination), pagination (.eco-pagination, --minimal), dialog (.eco-modal in .eco-modal-overlay or <dialog class="eco-modal">; --xs 320 | 480 | --md 640 | --lg 800, <dialog> only --cover | --full; --blur backdrop; cancel --tertiary), empty state (.eco-empty, --md), file upload (.eco-dropzone + .eco-file list), kanban board — moved to the Ilova page as the Nextcloud Deck reskin (/ds/ilova/#kanban: Deck DOM classes .app-deck, .stack, .card, .card-labels .labels li with a --eco-board-* dot, .duedate[data-due-state], .icon-badge; grey stacks, white cards, no outlines; EcoSystem tokens only). Copy their markup from that section.
- Icon markup (Phosphor symbols in an SVG sprite, id "i-<key>", filled twin "i-<key>-fill"): <svg class="eco-icon" aria-hidden="true"><use href="#i-search"/></svg>. On a control whose state changes (aria-pressed, aria-selected, aria-current) put both weights in one svg and let base.css switch them: <svg class="eco-icon" aria-hidden="true"><use href="#i-heart"/><use class="eco-on" href="#i-heart-fill"/></svg>

## Layout
- One primary action per screen: at most one .eco-btn--primary. Next to a coloured button (primary, accent, ink) put only a colourless one: .eco-btn--tertiary (neutral fill, the default) or .eco-btn--outline (no fill, 1px neutral ring; on busy or coloured backgrounds). Never two coloured buttons side by side; .eco-btn--secondary (brand-coloured text) is for a lone secondary action, never next to a primary. Otherwise use a link button.
- Buttons and single-line inputs are pills; multi-line textareas 20px, cards 24px.
- Lime and green are accents. Most of the screen stays white (light mode) or black (dark mode).
- Layer surfaces with --eco-bg-secondary / --eco-bg-tertiary fills, not borders or heavy shadows. No stroke around a filled object (card, control, chip, tab, stage): switches and slider tracks sit on --eco-bg-tertiary (--eco-bg-primary inside a grey card), checkboxes and radios use their thin neutral ring; a selected chip or card is a brand tint without a ring; a selected tab is a solid pill or the 2px underline, without a ring. Keep dividers inside components (key–value rows, table rows, card footers), focus rings and error strokes. Only floating layers (dropdowns, dialogs, toasts) get --eco-shadow-lg or --eco-shadow-xl.

## Screens
- Look for an existing component or pattern first (sections “Majburiy bloklar”, “Sahifa anatomiyasi”, “Ilova komponentlari”). Build a new component only when nothing fits, and start from the closest one.
- One lead metric per screen, next to the one primary action: the lead number is the largest on the screen; other numbers are smaller and neutral.
- Learning data first: progress, grades and deadlines come before technical data (IDs, sync times, system status).
- Every screen that shows data ships three states: loading (.eco-skeleton in the shape of the content; a page or action wait shows .eco-loader, never a border spinner), empty (.eco-empty: icon, title, one action) and error (what happened, plus a retry action).
- Responsive cabinet: sidebar 248px from 1280px, a 72px icon rail with tooltips from 1024px, a drawer with an overlay from 768px, a bottom tab bar (4–5 items, each ≥ 48px) below 768px. Below 768px each table row becomes a card with its main value and status.
- Headings go h1 → h2 → h3 without skipping a level; tabular data is a real <table> with th cells.
- Check every button, badge and tab label in Uzbek, Russian and English: Uzbek is often the longest (Russian ≈ +1%, English ≈ −7% on average), so design for the Uzbek length first, leave ~30% room, and labels never truncate.

## Content and language
- UI copy in Uzbek Latin unless asked for Russian. <html lang="uz">; Russian pages lang="ru".
- Write o‘ and g‘ with U+2018 (‘) and the tutuq belgisi with U+2019 (’): o‘quvchi, g‘olib, ma’lumot, e’tibor. Never ASCII ' or ` there. Quotes: “…”.
- Realistic content: courses (Frontend dasturlash, UI/UX dizayn, Backend · Node.js), names (Dilnoza, Jasur, Madina), prices in so‘m (1 200 000 so‘m), dates DD.MM.YYYY (21.09.2026). No lorem ipsum.
- Tone: short, direct, imperative.

## Accessibility minimums (WCAG 2.2 AA)
- Text ≥ 4.5:1; large text (≥ 24px), icons and focus ring ≥ 3:1. Status never by colour alone.
- Exception: avatar initials keep the designed colours even below 4.5:1 on the tint (user decision 30.09.2026). The avatar is decorative (aria-hidden="true") and the name is always shown next to it as text.
- Focus: :focus-visible — 1.5px ring (--eco-focus-w) drawn with box-shadow: 0 0 0 2px var(--eco-bg-primary), 0 0 0 calc(2px + var(--eco-focus-w)) var(--eco-focus-ring), plus outline: var(--eco-focus-w) solid transparent for forced-colors (Chrome rounds outline widths to whole px). Never 2px. Never remove it. Destructive controls use --eco-focus-ring-error. Fields (input, textarea, select, OTP, input group, search, combobox, date, tag and chat inputs) all share ONE focus state: outline: var(--eco-field-focus-w) solid var(--eco-brand-button); outline-offset: 0 — 1.5px, the brand button colour, following the field radius; --eco-focus-ring-error on a field with an error. Never 2px and never --eco-focus-ring on a field. Inside a brand-filled area set --eco-focus-ring: var(--eco-text-primary_on-brand).
- Touch targets ≥ 40px on mobile: md (40px) buttons by default, lg (44px) or xl (48px) for the main mobile action. xs (32px) and sm (36px) buttons and chips only in dense UI, at least 8px apart.
- Real elements: <button>, <a href>, <input> with a visible <label>. Icon-only buttons get an Uzbek aria-label.
- Keyboard: logical Tab order, Esc closes overlays and returns focus, arrow keys move inside tabs and segments.
- Form errors: text + icon + colour, aria-invalid="true", aria-describedby to the message.
- Images: meaningful Uzbek alt text; decorative images alt="" or aria-hidden="true".
- Honour prefers-reduced-motion: no movement, near-zero durations.

## Never
- No purple, blue or rainbow gradients; no gradient except --eco-gradient (avatars have no gradients).
- No distinction colour (chart series, category tone) as a button, link, focus ring or status; none where a brand or status token exists.
- No seventh chart colour, no re-ordered or re-tuned chart series.
- No emoji as icons and no other icon sets; use Phosphor (Regular, Fill for active states).
- No lime text on white or light backgrounds; no white text on lime; no black text or marks on green.
- No new colours, fonts, radii, shadows or spacing values outside the tokens.
- No sharp-cornered buttons, inputs or cards, no pill-shaped inputs, no more than one primary button per screen.
- No ALL CAPS body text; no text in images.
- Do not stretch, recolour, rotate or restyle the PDP EcoSystem logo; keep 1X clear space (X = mark width / 9).

Before you finish, check your output against this list and name any rule you could not follow.

Qayerga qo‘yish

Qoidalar va kod
VositaJoyIzoh
Claude CodeCLAUDE.mdHar sessiya boshida o‘qiladi. Mavjud faylga alohida bo‘lim qilib qo‘shing.
Claude (claude.ai)Project → InstructionsShu loyihadagi barcha chatlarga ta’sir qiladi.
Cursor.cursor/rules/pdp-ui.mdcFayl boshiga alwaysApply: true frontmatter qo‘ying.
GitHub Copilot.github/copilot-instructions.mdVS Code’dagi Copilot Chat ham, github.com’dagi Copilot ham o‘qiydi.
Boshqa agentlarAGENTS.mdOpenAI Codex va boshqa ko‘plab agentlar o‘qiydigan umumiy fayl.

Faylni git’ga qo‘shing — butun jamoa bir xil qoidalar bilan ishlaydi. Loyihada boshqa brend prompti bo‘lsa, uni almashtiring: ikki brend qoidasi birga ziddiyat beradi.

Natijani tekshiring

Review this UI against the PDP EcoSystem rules (PDP Design System, brand "ecosystem": https://design.pdp.uz/ds/ai/ecosystem.md). List every violation (brand colours, text on brand fills, contrast, logo, radius, spacing, fonts, icons, Uzbek orthography, accessibility; missing loading, empty or error states; more than one primary action or lead metric; tables that do not become cards below 768px), then fix them without adding new colours.
Qoidalar va kod
Light
Yangi

Frontend dasturlash

8 oy · 01.10.2026 dan · 1 200 000 so‘m / oy

Dark
Yangi

Frontend dasturlash

8 oy · 01.10.2026 dan · 1 200 000 so‘m / oy

Tokenlar, pill tugma, 24px karta, bitta primary; brend maydonida faqat --eco-text-primary_on-brand rangidagi matn.

Tekshiruv so‘rovi

Natija shubhali bo‘lsa, yordamchiga shu so‘rovni yuboring. Oxirgi so‘z baribir insonda — foydalanish qulayligi ro‘yxati bo‘yicha tekshiring.

Ekranning o‘zini — Boshqaruv bo‘limidagi «Ekran chiqishidan oldin» ro‘yxati bo‘yicha: bitta primary tugma va bitta asosiy metrika, uch holat, to‘rt kenglik, uch til.

Prompt kutubxonasi

Tayyor promptlar: AI chatdan brendga mos natija

Taqdimot, matn, sahifa va bosma uchun promptlar — nusxalang va AI chatga qo‘ying.

Qoidalar va kod

O‘qituvchi va xodimlar uchun: taqdimot, xat, e’lon, sahifa yoki hujjat kerak bo‘lsa — dizayner kutmasdan ChatGPT, Claude yoki Gemini’dan so‘rang. Har prompt AI’ga avval PDP Design System faylini o‘qitadi, PDP ohangida, to‘g‘ri o‘zbek lotin yozuvida yozdiradi va yetishmagan ma’lumotni so‘ratadi. Dasturchilar va AI agentlar uchun qoidalar — AI uchun.

Qanday ishlatiladi

  1. Nusxalang

  2. AI chatga qo‘ying

  3. Qavslarni to‘ldiring

Qoidalar va kod
Nusxalang

Vazifangizga mos promptni toping va «Nusxalash» tugmasini bosing.

AI chatga qo‘ying

ChatGPT, Claude yoki Gemini’da yangi suhbat oching va promptni qo‘ying. Havolalarni o‘chirmang — AI qoidalarni shu fayllardan o‘qiydi.

Qavslarni to‘ldiring

[qavs] ichidagi maydonlar o‘rniga o‘z ma’lumotingizni yozing. AI savol bersa — javob bering, natijada sana, ism va raqamlarni tekshiring.

PDP Design System v0.7 · brend: PDP EcoSystembrend: PDP Academybrend: PDP Schoolbrend: PDP Universitybrend: PDP Onlinebrend: PDP Junior Barcha loyihalar · PDP School DS v1.0 · © 2026 PDP Dizayner — Rahim Sadiy · RedFox