# PDP Design System — Website kit (Sayt), v0.7 > Use when building a website, landing page or web interface: buttons, forms, slider, menus, badges, avatars (3D), cards, callouts, app components (tabs, progress, table, pagination, modal, empty state, upload), charts, chip types, rich tooltip and submenu; extra components — command palette, date picker, overlays (sheet, hover card, context menu, toast stack), data table (toolbar, bulk actions), structure (accordion, tree, stepper, carousel, resizable), field patterns (input group, error summary, validation timing), toolbar (toggle group, split button, menubar), inline edit and contextual save bar, status indicators (icon, shape, KPI delta), saved views with filter pills; EcoSystem-only (r92): number input (−/+ stepper, spinbutton), rating and feedback (star input and display, rating summary, NPS 0–10 scale, «Was this helpful?»), countdown and deadline chips, table settings (density 40/52/64, expandable rows, pinned first column), tag / multi-select field (chips inside the field, typeahead listbox, create new, limit), video lesson player (chapters on the timeline, speed, captions, transcript, next-lesson end card), gallery and lightbox viewer (dialog, prev/next, zoom, swipe); page templates — sign-in, sign-up and password reset, multi-step application (question pages, check answers, confirmation), error pages (404, 500, 503 maintenance, 403 — EcoSystem only); email (EcoSystem only, r94): base layout (600 px table layout, tokens compiled to inline hex, dark mode via prefers-color-scheme and [data-ogsc], locked logo header, bulletproof pill button, preheader), 8 ready templates in Uzbek, Russian and English with plain-text parts (email verification, password reset, application received, payment receipt, lesson reminder, certificate ready, event invitation with add-to-calendar and .ics, weekly digest with one-click unsubscribe) at https://design.pdp.uz/ds/email/, staff email signature generator (HTML + plain text) and a pre-send checklist (Gmail clipping < 100 KB, client matrix); backgrounds, live backgrounds, text motion and effects; brand card kinds and signatures; states, required blocks (header, footer, hero, CTA), page anatomy; patterns and guides — interaction states, adaptive layout, writing, microcopy library (310+ ready UI strings in Uzbek, Russian and English with context, max length, tone and an avoid variant; 14 categories incl. validation, destructive confirmations, push/SMS, payments and classes/attendance/certificates; ICU plurals; download https://design.pdp.uz/ds/sayt/microcopy.json and microcopy.csv — reuse these strings by id instead of writing new ones), onboarding and permissions, search, data entry, modality, settings, data visualisation, inclusive language, task list, step-by-step navigation, cookie consent. Every section works in all six brands (tokens, logo slot and fonts follow the active brand). Page: https://design.pdp.uz/ds/sayt/ (all six brands; ?brand=, ?theme=light|dark, ?lang=uz|ru|en). Read first: the Core kit https://design.pdp.uz/ds/yadro/ai.md (foundations, tokens, motion, accessibility) and the brand file of the product you build (list below). The full shared rule set is https://design.pdp.uz/ds/ai/core.md. This file lists only what the Website kit adds: its sections, their blocks, the PDP class names they use and the tokens those classes need. Set data-brand="" and data-theme="light" (product default) or "dark" on ; load one token file and the fonts (https://design.pdp.uz/ds/fonts/fonts.css). Use tokens, never raw hex. Component CSS: do not re-implement the PDP classes (.eco-*) — link the published package https://design.pdp.uz/ds/css/v0.7.1/pdp-components.css (@pdp/design-system@0.7.1, immutable; latest: https://design.pdp.uz/ds/css/; manifest: https://design.pdp.uz/ds/css/v0.7.1/manifest.json). Order: fonts → tokens/.css → pdp-base.css (optional reset) → pdp-components.css → product layer (products/lms.css, products/nextcloud-*.css) → your own CSS. Never copy the package CSS into a project. Guide: https://design.pdp.uz/ds/yadro/#dev-install. ## Sections ### Text and number motion (Backgrounds and effects) — https://design.pdp.uz/ds/sayt/#text-motion **Text motion — to focus attention on one place.** A KPI number counts up, an announcement chip shimmers, a hero heading resolves from blur, a word rotates, an AI reply types itself out, a testimonial strip scrolls by. Each effect plays once or in a slow loop; the meaning reads in full without motion. Inspired by Magic UI and Aceternity UI. - Blocks: [Six effects](https://design.pdp.uz/ds/sayt/#text-motion-oltita-effekt) - PDP classes: .eco-avatar (--3d, --tint), .eco-badge (--sm, --solid), .eco-btn (--icon, --tertiary, --xs), .eco-segment (--sm), .eco-shine (__t) ### Effects and connections (Backgrounds and effects) — https://design.pdp.uz/ds/sayt/#effects **Visible connection and borders without strokes.** Live beams and an orbit that show how the parts of the system connect, a glow border for the selected plan, a cursor-following spotlight and a banner shine. Under the PDP rule there is no stroke around a card: the border is a soft glow behind it, and the light sits in the card background itself. Inspired by Magic UI and Aceternity UI. - Blocks: [Seven effects](https://design.pdp.uz/ds/sayt/#effects-yettita-effekt) - PDP classes: .eco-badge (--sm, --solid), .eco-btn (--primary, --sm), .eco-segment (--sm), .eco-toast (__body) ### Background patterns (Backgrounds and effects) — https://design.pdp.uz/ds/sayt/#backgrounds **The background is a stage, not content: dots, cells and grids.** Calm backgrounds for the hero, empty states, the sign-in screen and promo bands. Three are static (CSS gradient — no images, zero weight), three are live: flickering grid, cells and retro grid. Inspired by Magic UI and Aceternity UI; colours come from the active brand tokens: black field, brand colour and accent. - Blocks: [Six patterns](https://design.pdp.uz/ds/sayt/#backgrounds-oltita-naqsh) - PDP classes: .eco-btn (--rainbow), .eco-segment (--sm) ### Live backgrounds (Backgrounds and effects) — https://design.pdp.uz/ds/sayt/#bg-motion **Black field, brand colour and accent — in motion.** Five live backgrounds for promo bands, the hero, event announcements and the sign-in screen: aurora, ripple, meteors, beams and particles. All in CSS or a small canvas (no libraries), in brand colours, with a clear centre for text. Inspired by Aceternity UI and Magic UI. - Status: Beta (since 05.10.2026) — new, under art-director review; class names may still change. - Blocks: [Five live backgrounds](https://design.pdp.uz/ds/sayt/#bg-motion-beshta-jonli-fon) - PDP classes: .eco-btn (--primary), .eco-segment (--sm) ### Aurora background (Backgrounds and effects) — https://design.pdp.uz/ds/sayt/#aurora **Aurora — the EcoSystem Light background.** The approved background for the DS banner, presentation cover and hero: soft colours flowing into one another with a white field around the mark. Brand-fixed — Light only: even when the page switches to Dark, the aurora stays light; there is no Dark version. - EcoSystem only: the block always uses the EcoSystem tokens (in the DS it is wrapped in class="eco-lock-ecosystem"); do not make per-brand variants. - Blocks: [Hero and banner](https://design.pdp.uz/ds/sayt/#aurora-hero-va-banner); [Cover background](https://design.pdp.uz/ds/sayt/#aurora-muqova-foni) - PDP classes: .eco-aurora (__bg), .eco-btn (--glass, --primary), .eco-cover (--dark, --light), .eco-glass (--light), .eco-segment (--sm) - Nextcloud DOM classes reproduced in the example: .snip-fold (__chev, __sum) ### Buttons (Components) — https://design.pdp.uz/ds/sayt/#buttons **One screen — one primary action.** A button is an action the user performs. Colour tells its role: primary, accent, secondary and tertiary, link and destructive; a screen has one primary button. Variants, sizes and states are based on Untitled UI; the look is the designer’s proposal (Rahimjon Gaziyev, 29.09.2026): pill, body font, no shadow; only outline has a border. The mockup had no loading, pressed state, link style or 44/48 px sizes — they continue the same style. Colours come from the active brand tokens: the same class takes its own colour in every brand. - EcoSystem only: the block always uses the EcoSystem tokens (in the DS it is wrapped in class="eco-lock-ecosystem"); do not make per-brand variants. - Blocks: [Thirteen variants, one primary](https://design.pdp.uz/ds/sayt/#buttons-on-uch-variant); [Pick the size for the place](https://design.pdp.uz/ds/sayt/#buttons-olcham-joyga-qarab); [States](https://design.pdp.uz/ds/sayt/#buttons-holatlar); [Icons, link style and full width](https://design.pdp.uz/ds/sayt/#buttons-ikonka-havola-korinishi); [Tooltip — extra context](https://design.pdp.uz/ds/sayt/#buttons-tooltip-qoshimcha-izoh); [Groups, placement and colored backgrounds](https://design.pdp.uz/ds/sayt/#buttons-guruh-joylashuv-va); [Rainbow button — for hero and promo](https://design.pdp.uz/ds/sayt/#buttons-kamalak-tugma-hero); [Glass buttons and surfaces](https://design.pdp.uz/ds/sayt/#buttons-shisha-tugmalar-va); [Joined button group](https://design.pdp.uz/ds/sayt/#buttons-tutash-tugmalar-guruhi); [Specification](https://design.pdp.uz/ds/sayt/#buttons-spetsifikatsiya) - PDP classes: .eco-badge (--dot, --success), .eco-btn (--accent, --block, --ghost, --glass, --icon, --ink, --lg, --link-color, --link-destructive, --link-gray, --outline, --primary, --primary-destructive, --rainbow, --rainbow-light, --secondary, --secondary-destructive, --sm, --tertiary, --tertiary-destructive, --xl, --xs), .eco-btn-group (--fill), .eco-cover (--dark, --light, --still), .eco-field, .eco-glass (--pill, --tile), .eco-icon (--sm), .eco-input, .eco-label, .eco-tooltip - Nextcloud DOM classes reproduced in the example: .bi (__col, __list), .bz (__s), .dd (__stage), .demo (--surface, __label), .dlg (__m, __t), .fig (__stage), .gls (__badge, __card, __d, __row, __tag, __tiles), .phone (__bar, __card, __cta, __m, __p, __t), .snip-fold (__chev, __sum), .stage (--lbl2), .stage-pair (--stack), .vl (__g, __r, __s, __t) ### Forms (Components) — https://design.pdp.uz/ds/sayt/#forms **Labels are always visible, errors are stated clearly.** A form is a conversation with the user. Every field has a visible label and, when needed, a hint and an error message that says how to fix it. A field matches its button’s height: md field 44 px — lg button, sm field 40 px — md button. Structure and sizes are based on Untitled UI; the field’s look is a proposal by designer Rahimjon Gaziyev (29.09.2026). - Blocks: [Field anatomy](https://design.pdp.uz/ds/sayt/#forms-maydon-anatomiyasi); [Sizes: sm and md](https://design.pdp.uz/ds/sayt/#forms-olchamlar-sm-va); [States and field types](https://design.pdp.uz/ds/sayt/#forms-holatlar-va-maydon); [Input group: prefix and suffix](https://design.pdp.uz/ds/sayt/#forms-input-guruhi-prefiks); [Selection: checkbox, radio, switch, segment](https://design.pdp.uz/ds/sayt/#forms-tanlov-checkbox-radio); [Checkbox va radio: anatomiya](https://design.pdp.uz/ds/sayt/#forms-checkbox-va-radio); [SMS code and file upload](https://design.pdp.uz/ds/sayt/#forms-sms-kod-va); [Example: course enrollment](https://design.pdp.uz/ds/sayt/#forms-namuna-kursga-yozilish); [Error messages: specific and blame-free](https://design.pdp.uz/ds/sayt/#forms-xato-matni-aniq) - PDP classes: .eco-alert (--success), .eco-btn (--icon, --lg, --link-color, --primary, --secondary, --tertiary), .eco-check (--md, --media, --round), .eco-choice (--md), .eco-field, .eco-hint, .eco-icon, .eco-input (--sm), .eco-input-group (--sm, __addon, __addon--icon, __addon--plain, __btn, __input, __select), .eco-input-reveal, .eco-input-wrap, .eco-label, .eco-on, .eco-otp (__cell, __foot, __row, __sep), .eco-progress, .eco-radio (--md), .eco-segment (--fill, --stacked), .eco-switch (--md) ### Slider (Components) — https://design.pdp.uz/ds/sayt/#slider **Pick a value or a range by dragging.** A slider is for an approximate number or range: price, discount, volume. If an exact number is needed, use a field. The primary look is a single thumb with step dots and a value bubble; a two-thumb range and a scale are an additional variant. Shape — designer proposal (Rahimjon Gaziyev, 29.09.2026), colors — from brand tokens. - Blocks: [Single value and range](https://design.pdp.uz/ds/sayt/#slider-bitta-qiymat-va); [Two sizes: bold and thin](https://design.pdp.uz/ds/sayt/#slider-ikki-olcham-qalin); [States](https://design.pdp.uz/ds/sayt/#slider-holatlar); [Keyboard and screen reader](https://design.pdp.uz/ds/sayt/#slider-klaviatura-va-ekran) - PDP classes: .eco-hint, .eco-label, .eco-range (--thin), .eco-slider (--steps, --thin, __control, __fill, __head, __input, __marks, __tip, __track, __value) ### Menu and list (Components) — https://design.pdp.uz/ds/sayt/#menus **A menu is for actions, a list is for choosing.** A menu opens below a button and offers several actions; a selection list lets the user pick one value out of several. Both are built from the same row: icon or avatar, title and description, and a keyboard shortcut or mark at the end. Shape, size and states come from the designer’s layout (HeroUI); colour, focus and contrast come from PDP Design System tokens. - Blocks: [Dropdown menu](https://design.pdp.uz/ds/sayt/#menus-dropdown-menyu); [List item](https://design.pdp.uz/ds/sayt/#menus-royxat-elementi) - PDP classes: .eco-avatar (--3d), .eco-btn (--secondary, --sm), .eco-dropdown, .eco-field, .eco-label, .eco-menu (__body, __check, __check--dot, __desc, __end, __group, __item, __item--danger, __kbd, __label, __sep, __title) ### Labels and statuses (badge) (Components) — https://design.pdp.uz/ds/sayt/#badges **Name the status in one word, and let color confirm it.** A badge briefly states an object’s status or category. Color signals urgency, while the word carries the meaning — so a badge never goes without a word. The status vocabulary is the same for all PDP products — the brand only changes the colors. - Blocks: [Seven variants — seven meanings](https://design.pdp.uz/ds/sayt/#badges-yettita-variant-yettita); [Two types, three sizes](https://design.pdp.uz/ds/sayt/#badges-ikki-tur-va); [Dot for status, no dot for category](https://design.pdp.uz/ds/sayt/#badges-nuqta-holat-nuqtasiz); [Category badge: color tells groups apart](https://design.pdp.uz/ds/sayt/#badges-toifa-beyji-rang); [Status vocabulary](https://design.pdp.uz/ds/sayt/#badges-statuslar-lugati); [Brand fill — only for “New”](https://design.pdp.uz/ds/sayt/#badges-brend-fon-faqat); [Chips: filter and tag](https://design.pdp.uz/ds/sayt/#badges-chiplar-filtr-va); [Avatar: size, image and group](https://design.pdp.uz/ds/sayt/#badges-avatar-olcham-rasm); [Counter, dot and avatar status](https://design.pdp.uz/ds/sayt/#badges-hisoblagich-nuqta-va); [Accent chip — one achievement or tally](https://design.pdp.uz/ds/sayt/#badges-aksent-chipi-bitta) - PDP classes: .eco-avatar (--2xl, --3d, --lg, --sm, --tint, --xl, --xs, __status, __status--busy, __status--off), .eco-badge (--badge, --brand, --cat-black, --cat-blue, --cat-green, --cat-red, --cat-teal, --dot, --error, --info, --lg, --sm, --solid, --success, --warning), .eco-btn (--icon, --secondary, --sm, --tertiary), .eco-card (__title), .eco-chip (--accent), .eco-field, .eco-hint, .eco-icon (--lg, --sm), .eco-label, .eco-link ### Avatars (Components) — https://design.pdp.uz/ds/sayt/#avatars **The project’s own avatar and other users.** An avatar is a small mark for a user. People get a 3D avatar (the background colour is baked into the image); the project and agents (AI-mentor, bot, system, group) get initials or an icon on a solid brand-tint circle. The background is always coloured: no gradient (blurred orb) and no grey avatars. - Blocks: [3D avatars](https://design.pdp.uz/ds/sayt/#avatars-3d-avatarlar); [Project and agent avatar](https://design.pdp.uz/ds/sayt/#avatars-loyiha-va-agent); [Diversity: other users](https://design.pdp.uz/ds/sayt/#avatars-xilma-xillik-boshqa); [Tokens and size](https://design.pdp.uz/ds/sayt/#avatars-tokenlar-va-olcham) - PDP classes: .eco-avatar (--2xl, --36, --3d, --accent, --inverse, --lg, --sm, --tint, --xl, --xs, __status), .eco-icon ### Cards (Components) — https://design.pdp.uz/ds/sayt/#cards **One card — one object and one primary action.** A card gathers information about one object — a project, course, metric or announcement — in one place. Radius 24 px, no border and no shadow — a proposal by designer Rahimjon Gaziyev (28.09.2026); structure based on Untitled UI; the rules are a proposal for all PDP products. - Blocks: [Anatomy](https://design.pdp.uz/ds/sayt/#cards-anatomiya); [Three levels: base, interactive, raised](https://design.pdp.uz/ds/sayt/#cards-uch-daraja-base); [Project and course cards](https://design.pdp.uz/ds/sayt/#cards-loyiha-va-kurs); [Metric, announcement and empty card](https://design.pdp.uz/ds/sayt/#cards-korsatkich-elon-va); [Grid and mobile](https://design.pdp.uz/ds/sayt/#cards-grid-va-mobil); [Usage](https://design.pdp.uz/ds/sayt/#cards-qollanish); [Info, selectable and image cards](https://design.pdp.uz/ds/sayt/#cards-informatsion) - PDP classes: .eco-badge (--brand, --dot, --error, --solid, --success, --warning), .eco-btn (--primary, --secondary, --tertiary), .eco-card (--interactive, --raised, __meta, __title), .eco-icon (--lg, --sm), .eco-progress ### Callouts (Components) — https://design.pdp.uz/ds/sayt/#callouts **A short aside that stands apart from the main text.** A callout is a calm filled surface in the flow of text: a small icon tile, a title, body text and, if needed, one link or button. No border and no shadow. The tone is chosen by meaning only — neutral, brand, info, warning, error, success; there are no decorative colours. The brand tone follows the active brand; the others are the same in all six brands. - Blocks: [Six tones, Light and Dark](https://design.pdp.uz/ds/sayt/#callouts-olti-ohang-light); [Anatomy](https://design.pdp.uz/ds/sayt/#callouts-anatomiya); [Three variants](https://design.pdp.uz/ds/sayt/#callouts-uch-korinish); [Which tone when](https://design.pdp.uz/ds/sayt/#callouts-qaysi-ohang-qachon); [Rules](https://design.pdp.uz/ds/sayt/#callouts-qoidalar) - PDP classes: .eco-btn (--secondary, --sm), .eco-callout (--brand, --compact, --error, --info, --success, --warning, __action, __actions, __body, __close, __content, __icon, __title) ### App components (Components) — https://design.pdp.uz/ds/sayt/#app **Seven components for account and dashboard screens.** Tabs, progress, table, pagination, modal, empty state and file upload — Untitled UI’s app components on PDP tokens. Structure, sizes and states come from Untitled UI; color, focus and contrast follow the PDP Design System rules. Every component works in both modes and at a width of 390 px. The kanban board and other app blocks are on the “App” page. - Blocks: [Tabs](https://design.pdp.uz/ds/sayt/#app-tablar); [Progress: bar and circle](https://design.pdp.uz/ds/sayt/#app-progress-chiziq-va); [Table card](https://design.pdp.uz/ds/sayt/#app-jadval-kartasi); [Pagination](https://design.pdp.uz/ds/sayt/#app-sahifalash); [Modal](https://design.pdp.uz/ds/sayt/#app-modal-2); [Empty state](https://design.pdp.uz/ds/sayt/#app-bosh-holat); [File upload](https://design.pdp.uz/ds/sayt/#app-fayl-yuklash) - PDP classes: .eco-avatar (--3d), .eco-badge (--brand, --dot, --error, --sm, --success, --warning), .eco-btn (--icon, --link-destructive, --primary, --primary-destructive, --secondary, --sm, --tertiary), .eco-check (--md), .eco-dropzone (__hint, __input, __text), .eco-empty (--md, __actions, __art, __text, __title), .eco-featured-icon (--error, --md, --modern), .eco-field, .eco-file (__body, __del, __meta, __name, __status, __status--error, __status--ok), .eco-files, .eco-icon, .eco-input (--sm), .eco-input-wrap, .eco-label, .eco-loader (--sm, __core, __o, __ray, __spin), .eco-modal (--blur, --md, --xs, __actions, __body, __close, __text, __title), .eco-modal-overlay, .eco-on, .eco-pagination (--minimal, __btns, __gap, __info, __next, __page, __pages, __prev), .eco-progress, .eco-progress-circle (--md, --sm, --xxs, __v), .eco-progress-field (__head, __hint, __info, __label, __status, __value), .eco-progress-float (--bottom), .eco-progress-row, .eco-segment (--brand, --lg, --md, --sm), .eco-tab, .eco-table (__actions, __check, __hit, __person, __sort), .eco-table-card (__actions, __body, __desc, __foot, __head, __heading, __title), .eco-tabpanel, .eco-tabs (--accent, --brand, --fill, --inverse, --md, --pill) ### Charts (Components) — https://design.pdp.uz/ds/sayt/#charts **One chart — one idea.** Charts have their own tokens: six categorical colors and two five-step scales. The first series is always the brand color; the other five are the brand’s own colors, black and greys; the token itself switches with the mode. Every chart answers one question: one series is highlighted, values are labeled directly, and the grid is barely visible. - Blocks: [Palette: six series and two scales](https://design.pdp.uz/ds/sayt/#charts-palitra-olti-seriya); [Line chart: change over time](https://design.pdp.uz/ds/sayt/#charts-chiziqli-grafik-vaqt); [Bars and donut: comparison and share](https://design.pdp.uz/ds/sayt/#charts-ustun-va-donut); [Scales: sequential and diverging](https://design.pdp.uz/ds/sayt/#charts-shkalalar-ketma-ket); [KPI tile: number, change and trend](https://design.pdp.uz/ds/sayt/#charts-kpi-plitka-raqam); [Rules and sizes](https://design.pdp.uz/ds/sayt/#charts-qoidalar-va-olchamlar); [Stacked bar: composition over time](https://design.pdp.uz/ds/sayt/#charts-toplangan-ustun-tarkib); [Annual statistics: months and a KPI pair](https://design.pdp.uz/ds/sayt/#charts-yillik-statistika-oylar); [Chart anatomy](https://design.pdp.uz/ds/sayt/#charts-grafik-anatomiyasi); [Which chart for which question](https://design.pdp.uz/ds/sayt/#charts-qaysi-savolga-qaysi); [Line and area: trend, crosshair and tooltip](https://design.pdp.uz/ds/sayt/#charts-chiziq-va-maydon); [Bars: vertical, grouped, stacked and 100%](https://design.pdp.uz/ds/sayt/#charts-ustunlar-vertikal); [Share: donut, pie, rings and gauge](https://design.pdp.uz/ds/sayt/#charts-ulush-donut-doira); [KPI tiles: sparkline, mini bars and target](https://design.pdp.uz/ds/sayt/#charts-kpi-plitkalar-sparkline); [Activity calendar: density by day](https://design.pdp.uz/ds/sayt/#charts-faollik-kalendari-kun); [Funnel: admissions and sales](https://design.pdp.uz/ds/sayt/#charts-voronka-qabul-va); [Scatter, bubble and radar](https://design.pdp.uz/ds/sayt/#charts-nuqtali-pufakli-va); [Treemap and waterfall](https://design.pdp.uz/ds/sayt/#charts-treemap-va-sharshara); [Combo: bars and line, two axes](https://design.pdp.uz/ds/sayt/#charts-kombinatsiya-ustun-va); [Progress and bullet](https://design.pdp.uz/ds/sayt/#charts-progress-va-bullet); [Flow: Sankey diagram](https://design.pdp.uz/ds/sayt/#charts-oqim-sankey-diagrammasi); [Timeline: mini Gantt](https://design.pdp.uz/ds/sayt/#charts-vaqt-jadvali-mini); [Leaderboard: ranked list with bars](https://design.pdp.uz/ds/sayt/#charts-reyting-tartiblangan); [Big number: the chart as illustration](https://design.pdp.uz/ds/sayt/#charts-katta-raqam-grafik); [States: empty, loading, error](https://design.pdp.uz/ds/sayt/#charts-holatlar-bosh) - PDP classes: .eco-badge (--error, --sm, --success), .eco-btn (--sm, --tertiary), .eco-icon (--sm), .eco-link, .eco-skeleton, .eco-table ### Chip types (Components) — https://design.pdp.uz/ds/sayt/#chip-types **One shape, four jobs.** A chip is a small, compact control. It always looks the same (neutral fill, pill or 8 px corners, no stroke), but it has four jobs: it suggests an action, filters a list, shows an entered value or offers a ready-made reply. Don’t mix jobs — one type per row. Built on .eco-chip (Badges and statuses); a label that shows a status is a badge, not a chip. Inspired by Material Design 3 “Chips” and Apple HIG “Token fields”. - Blocks: [Four types](https://design.pdp.uz/ds/sayt/#chip-types-tort-tur); [Behaviour and accessibility](https://design.pdp.uz/ds/sayt/#chip-types-xatti-harakat-va) - PDP classes: .eco-avatar (--3d), .eco-chip (--assist, --input, --menu, --suggest, __x) ### Rich tooltip and submenu (Components) — https://design.pdp.uz/ds/sayt/#popovers **Longer explanation — rich tooltip; deeper menu — submenu.** A plain tooltip gives a one-line name (Buttons). When a term, a limit or a calculation needs explaining, use a rich tooltip: a title, two or three lines of text and an optional link. When one group of actions in a menu grows too large, use a nested submenu — one level only. Inspired by Material Design 3 “Rich tooltips”, “Cascading menus” and Apple HIG “Popovers”. - Blocks: [Rich tooltip](https://design.pdp.uz/ds/sayt/#popovers-rich-tooltip); [Nested menu](https://design.pdp.uz/ds/sayt/#popovers-ichma-ich-menyu) - PDP classes: .eco-btn (--link-color, --link-gray), .eco-menu (__end, __item, __item--danger, __sep, __title), .eco-rtip (__acts, __text, __title) ### Commands and search (More components) — https://design.pdp.uz/ds/sayt/#command **In one keystroke: ⌘K, combobox and Kbd.** In a CRM with many sections, hunting through menus with the mouse is slow. The command palette (⌘K) finds a page, a student and an action in a single search; the combobox lets you search and pick from a long list; Kbd is a keyboard shortcut label. Inspired by shadcn/ui (Command, Combobox, Kbd); shape and colours use PDP tokens. - Blocks: [Command palette — ⌘K](https://design.pdp.uz/ds/sayt/#command-buyruqlar-paneli-k); [Combobox — search and pick](https://design.pdp.uz/ds/sayt/#command-combobox-qidirib-tanlash); [Kbd — keyboard shortcut label](https://design.pdp.uz/ds/sayt/#command-kbd-tezkor-tugma) - PDP classes: .eco-avatar (--3d), .eco-chip, .eco-cmd (__empty, __foot, __group, __input, __item, __label, __list, __search), .eco-combobox (--multi, __chev, __empty, __field), .eco-field, .eco-hint, .eco-icon (--sm), .eco-input, .eco-kbd (--lg, --on-dark), .eco-kbd-combo, .eco-label, .eco-menu (__body, __check, __desc, __end, __item, __title) ### Date picker (More components) — https://design.pdp.uz/ds/sayt/#datepicker **Calendar, date and range: for classes, deadlines and reports.** Class day, assignment deadline and reporting period are the most used fields in the CRM. One calendar in three views: an inline calendar, a date picker that opens below a field, and a range picker with preset periods. Inspired by shadcn/ui (Calendar, Date Picker); colours use PDP tokens: the selected day is a brand fill with a white number, the range is a brand tint. - Blocks: [Calendar and date picker](https://design.pdp.uz/ds/sayt/#datepicker-kalendar-va-sana); [Range picker — with preset periods](https://design.pdp.uz/ds/sayt/#datepicker-oraliq-tanlash-tayyor) - PDP classes: .eco-btn (--icon, --primary, --sm, --tertiary, --xs), .eco-cal (__cell, __day, __grid, __head, __month, __months, __nav, __nav--next, __nav--prev, __title, __wd), .eco-field, .eco-hint, .eco-label, .eco-popover ### Panels and layers (More components) — https://design.pdp.uz/ds/sayt/#overlays **Without leaving the page: panel, card, menu and notification.** View a record without leaving the list (Sheet), quick info on hovering a name (Hover card), the right-click menu (Context menu) and the results of several background processes (Toast stack). Inspired by shadcn/ui (Sheet, Drawer, Hover Card, Context Menu, Sonner); surfaces match .eco-menu and .eco-modal: white layer, shadow, no stroke. - Blocks: [Sheet — side and bottom panel](https://design.pdp.uz/ds/sayt/#overlays-sheet-yon-va); [Hover card — a short card over a name](https://design.pdp.uz/ds/sayt/#overlays-hover-card-ism); [Context menu — right click](https://design.pdp.uz/ds/sayt/#overlays-context-menu-ong); [Toast stack — several results](https://design.pdp.uz/ds/sayt/#overlays-toast-toplami-bir) - PDP classes: .eco-avatar (--3d), .eco-badge (--dot, --error, --success, --warning), .eco-btn (--icon, --primary, --sm, --tertiary), .eco-hovercard (__foot, __head, __name, __role, __stats), .eco-menu (__body, __item, __item--danger, __kbd, __sep, __title), .eco-segment (--sm), .eco-sheet (--end, __body, __foot, __grip, __head, __sub, __title), .eco-toast (__act, __body, __x), .eco-toaster ### Data table (More components) — https://design.pdp.uz/ds/sayt/#datatable **Working with lists: search, filter, select and bulk actions.** The CRM’s main screen is a list of students, payments and groups. The table card (App components) gets a toolbar: search, faceted filters (with a count next to each value), visible columns, sorting, row selection and a bulk actions bar. Inspired by shadcn/ui Data Table. - Blocks: [Toolbar and bulk actions](https://design.pdp.uz/ds/sayt/#datatable-asboblar-qatori-va) - PDP classes: .eco-avatar (--3d), .eco-badge (--brand, --sm), .eco-btn (--icon, --link, --primary, --secondary, --sm, --tertiary, --xs), .eco-check, .eco-icon, .eco-input (--sm), .eco-input-wrap, .eco-menu (__item), .eco-pagination (__btns), .eco-segment (--sm), .eco-skeleton, .eco-table (__check, __sort), .eco-table-card (__actions, __body, __foot, __head, __heading, __title) ### Table settings (More components) — https://design.pdp.uz/ds/sayt/#table-settings **Table settings: density, expandable rows and a pinned column.** CRM staff work with tables all day: some need many rows on one screen, others want them roomy and easy to read. Three densities, extra details inside a row (without leaving the page) and a first column that stays put while scrolling sideways. Search, filters, column picker and bulk actions are in Data table. Inspired by IBM Carbon (Data table) and Gravity UI (TableColumnSetup). - EcoSystem only: the block always uses the EcoSystem tokens (in the DS it is wrapped in class="eco-lock-ecosystem"); do not make per-brand variants. - Status: Beta (since 06.10.2026) — new, under art-director review; class names may still change. - Blocks: [Live example](https://design.pdp.uz/ds/sayt/#table-settings-jonli-namuna); [Three densities](https://design.pdp.uz/ds/sayt/#table-settings-uch-zichlik); [Keyboard, screen readers and rules](https://design.pdp.uz/ds/sayt/#table-settings-klaviatura-ekran-oqigich) - PDP classes: .eco-avatar (--3d, --sm), .eco-badge (--info, --sm, --success, --warning), .eco-btn (--primary, --secondary, --sm, --tertiary), .eco-label, .eco-only, .eco-segment (--sm), .eco-table (__person, __sort), .eco-table-card (__head, __heading, __title) - Nextcloud DOM classes reproduced in the example: .snip-fold (__chev, __sum) ### Structure components (More components) — https://design.pdp.uz/ds/sayt/#structure **Showing lots of content in order: accordion, tree, stepper, carousel and panels.** A course syllabus, a folder structure, sign-up steps, an announcement feed and a two- or three-column workspace — five components. Inspired by shadcn/ui (Accordion, Carousel, Resizable) and Magic UI (File Tree); all are keyboard-operable and switch instantly under “Reduce motion”. - Blocks: [Accordion and Tree view](https://design.pdp.uz/ds/sayt/#structure-accordion-va-tree); [Stepper — step-by-step form](https://design.pdp.uz/ds/sayt/#structure-stepper-bosqichli-forma); [Carousel — announcement and course feed](https://design.pdp.uz/ds/sayt/#structure-carousel-elonlar-va); [Resizable — panels you can resize](https://design.pdp.uz/ds/sayt/#structure-resizable-olchami) - PDP classes: .eco-accordion (__body), .eco-btn (--icon, --primary, --sm, --tertiary), .eco-carousel (__dots, __head, __slide, __track), .eco-resizable (__handle, __pane), .eco-stepper (__dot, __t), .eco-tree (__meta, __row) ### Field patterns (More components) — https://design.pdp.uz/ds/sayt/#field-patterns **In-field actions, counter, groups and errors.** Field anatomy and states are covered in Forms (label, hint, error text, prefix and suffix). This section covers the patterns built from them: a button and state inside the field, a character counter, field groups and their orientation, inline and summary errors, and validation timing. Inspired by shadcn/ui (Input Group, Field) and Apple HIG “Entering data”. - Blocks: [Inside the field: button, shortcut, state](https://design.pdp.uz/ds/sayt/#field-patterns-maydon-ichida-tugma); [Groups and orientation](https://design.pdp.uz/ds/sayt/#field-patterns-guruh-va-yonalish); [Errors: inline and summary list](https://design.pdp.uz/ds/sayt/#field-patterns-xatolar-joyida-va); [Validation timing](https://design.pdp.uz/ds/sayt/#field-patterns-tekshiruv-vaqti) - PDP classes: .eco-btn (--block, --ghost, --icon, --primary, --sm), .eco-field, .eco-hint, .eco-icon, .eco-input (--sm), .eco-input-group (__addon, __addon--icon, __btn, __input), .eco-label, .eco-loader (--sm, __core, __o, __ray, __spin), .eco-switch ### Tag field (More components) — https://design.pdp.uz/ds/sayt/#tag-input **Tag field: several values in one field.** Course tags, filter directions, client labels in a CRM — several values, each a tag inside the field. Typing narrows the list, a missing value can be created, Backspace removes the last tag. A single value takes a combobox. Inspired by IBM Carbon (Multiselect), Gravity UI (Select multiple) and Atlassian (Select). - EcoSystem only: the block always uses the EcoSystem tokens (in the DS it is wrapped in class="eco-lock-ecosystem"); do not make per-brand variants. - Status: Beta (since 06.10.2026) — new, under art-director review; class names may still change. - Blocks: [Live example: Light and Dark](https://design.pdp.uz/ds/sayt/#tag-input-jonli-namuna-light); [Anatomy and sizes](https://design.pdp.uz/ds/sayt/#tag-input-anatomiya-va-olchamlar); [States](https://design.pdp.uz/ds/sayt/#tag-input-holatlar); [Keyboard and screen readers](https://design.pdp.uz/ds/sayt/#tag-input-klaviatura-va-ekran); [When and how](https://design.pdp.uz/ds/sayt/#tag-input-qachon-va-qanday) - PDP classes: .eco-btn (--primary, --secondary, --sm), .eco-field, .eco-hint, .eco-input (--sm), .eco-label, .eco-menu (__body, __check, __item, __title), .eco-only, .eco-tag (__new, __x), .eco-tags (--sm, __count, __empty, __input, __list) - Nextcloud DOM classes reproduced in the example: .demo (--surface, __label), .snip-fold (__chev, __sum), .stage (--lbl2) ### Toolbar (More components) — https://design.pdp.uz/ds/sayt/#toolbar **Toggle group, split button, toolbar and menu bar.** In a text editor, a table or a file view, actions of the same kind are gathered into one row. Toggle group — several independent on/off toggles; split button — a main action and its variants; toolbar — up to 3 groups; menu bar — document editors only. For a single choice (view, period) use a segment; for joined buttons, a Joined button group. Inspired by shadcn/ui (Toggle Group, Menubar), M3 (Split button, Toolbars), Apple HIG (Toolbars). - Blocks: [Toggle group and split button](https://design.pdp.uz/ds/sayt/#toolbar-toggle-guruh-va); [Toolbar](https://design.pdp.uz/ds/sayt/#toolbar-asboblar-paneli); [Menu bar](https://design.pdp.uz/ds/sayt/#toolbar-menyu-paneli) - PDP classes: .eco-btn (--ghost, --icon, --primary, --sm, --tertiary), .eco-menu (__body, __check, __item, __kbd, __title), .eco-segment (--sm) ### Inline edit (More components) — https://design.pdp.uz/ds/sayt/#edit-save **Inline editing and save bar.** Much of the work in a CRM is fixing a single value: a group name, a phone number, a note, a status. No separate form opens for this: the value is edited in place and saved with Enter. On a settings page with several fields, a save bar appears at the top as soon as a change begins — “Save” and “Cancel” are always in the same place. The decision rule is in Settings (“immediately or Save”); the leave prompt is in Modality. Inspired by Atlassian Design System (Inline edit) and Shopify Polaris (Contextual save bar). - Blocks: [Inline edit: click a value](https://design.pdp.uz/ds/sayt/#edit-save-joyida-tahrirlash); [Contextual save bar](https://design.pdp.uz/ds/sayt/#edit-save-kontekst-saqlash-paneli); [Which to use](https://design.pdp.uz/ds/sayt/#edit-save-qaysi-biri) - PDP classes: .eco-badge (--dot, --success), .eco-btn (--icon, --link-gray, --primary, --sm, --tertiary), .eco-choice, .eco-field, .eco-hint, .eco-input, .eco-input-group (--sm, __addon, __input), .eco-label, .eco-segment (--sm), .eco-switch, .eco-toast ### Status indicators (More components) — https://design.pdp.uz/ds/sayt/#status-set **Status indicators: shape, colour and text together.** If a status is conveyed by colour alone, people with colour blindness (one in 12 men) and anyone reading a black-and-white printout won’t see it. So a status combines three cues: shape (an icon or a geometric mark), colour and a word. The badge and status vocabulary is in Badges and statuses, notifications in Notification centre. Inspired by IBM Carbon (Status indicators) and Atlassian (Lozenge). - Blocks: [Icon indicators](https://design.pdp.uz/ds/sayt/#status-set-ikonka-korsatkichlari); [Shape indicators: for dense tables](https://design.pdp.uz/ds/sayt/#status-set-shakl-korsatkichlari); [Change indicator](https://design.pdp.uz/ds/sayt/#status-set-ozgarish-korsatkichi); [Severity levels and lozenges](https://design.pdp.uz/ds/sayt/#status-set-muhimlik-darajasi-va) ### Saved views (More components) — https://design.pdp.uz/ds/sayt/#saved-views **Saved views and active filters.** CRM lists are opened with the same filter every day: “Debtors”, “Today’s applications”, “My groups”. A saved view is a tab above the list: filter, sort and search under one name. When the filter changes, “Save view” appears. For table tools and bulk actions, see Data table, for search, see Search. Inspired by Shopify Polaris (Index filters). - Blocks: [Live example: student list](https://design.pdp.uz/ds/sayt/#saved-views-jonli-namuna-oquvchilar) - PDP classes: .eco-avatar (--3d, --sm), .eco-badge (--brand, --dot, --error, --success), .eco-btn (--icon, --primary, --secondary, --sm, --tertiary), .eco-input (--sm), .eco-tab, .eco-tabs (--pill, --sm) ### Number input (More components) — https://design.pdp.uz/ds/sayt/#number-input **Number input: change a small number in one click.** Ticket count, seats in a group, lesson hours, discount percentage — a small number with known limits. People can type the number or change it one at a time with −/+. A large or exact number (price, phone, card) takes a regular field. Inspired by IBM Carbon (Number input) and Gravity UI (NumberInput). - EcoSystem only: the block always uses the EcoSystem tokens (in the DS it is wrapped in class="eco-lock-ecosystem"); do not make per-brand variants. - Status: Beta (since 06.10.2026) — new, under art-director review; class names may still change. - Blocks: [Live example: Light and Dark](https://design.pdp.uz/ds/sayt/#number-input-jonli-namuna-light); [Anatomy and sizes](https://design.pdp.uz/ds/sayt/#number-input-anatomiya-va-olchamlar); [States](https://design.pdp.uz/ds/sayt/#number-input-holatlar); [Keyboard and screen readers](https://design.pdp.uz/ds/sayt/#number-input-klaviatura-va-ekran); [When and how](https://design.pdp.uz/ds/sayt/#number-input-qachon-va-qanday) - PDP classes: .eco-btn (--primary, --secondary, --sm), .eco-field, .eco-hint, .eco-label, .eco-num (--block, --end, --sm, __btn, __input, __unit), .eco-only - Nextcloud DOM classes reproduced in the example: .demo (--surface, __label), .snip-fold (__chev, __sum), .stage (--lbl2) ### Rating and feedback (More components) — https://design.pdp.uz/ds/sayt/#rating **Rating and feedback: stars, scale and “Was this helpful?”.** Course and lesson pages, post-event surveys, the teacher’s dashboard — everywhere the same question: “how was it?”. A star rating for input and display, a rating distribution, a recommendation scale (NPS, 0–10) and a one-click “Was this helpful?”. For a full survey, see App Forms. Inspired by Ant Design and MUI (Rating), shadcn/ui (Questionnaire) and Vercel Geist (Feedback). - EcoSystem only: the block always uses the EcoSystem tokens (in the DS it is wrapped in class="eco-lock-ecosystem"); do not make per-brand variants. - Status: Beta (since 06.10.2026) — new, under art-director review; class names may still change. - Blocks: [Star rating: Light and Dark](https://design.pdp.uz/ds/sayt/#rating-yulduz-bahosi-light); [Anatomy and sizes](https://design.pdp.uz/ds/sayt/#rating-anatomiya-va-olchamlar); [Overall rating and reviews](https://design.pdp.uz/ds/sayt/#rating-umumiy-baho-va); [Recommendation scale (NPS) and “Was this helpful?”](https://design.pdp.uz/ds/sayt/#rating-tavsiya-shkalasi-nps); [Keyboard, screen readers and rules](https://design.pdp.uz/ds/sayt/#rating-klaviatura-ekran-oqigich) - PDP classes: .eco-avatar (--3d, --sm), .eco-btn (--primary, --secondary, --sm, --tertiary), .eco-helpful (__acts, __done, __more), .eco-input, .eco-label, .eco-only, .eco-rating (--input, --lg, --read, --sm, __fill, __star), .eco-rating-sum (__bar, __bars, __big), .eco-scale (__ends, __row) - Nextcloud DOM classes reproduced in the example: .demo (--surface, __label), .snip-fold (__chev, __sum) ### Countdown and deadline (More components) — https://design.pdp.uz/ds/sayt/#countdown **Countdown and deadline: how long is left and until when.** Admissions closing, an open day, an assignment deadline — people need to know two things: how much time is left and the exact day and time. The large countdown is for landing and admissions pages, the small deadline tag for lists, cards and dashboards. Date format is in Writing guidelines, the event page in Event page. - EcoSystem only: the block always uses the EcoSystem tokens (in the DS it is wrapped in class="eco-lock-ecosystem"); do not make per-brand variants. - Status: Beta (since 06.10.2026) — new, under art-director review; class names may still change. - Blocks: [Large countdown: admissions page](https://design.pdp.uz/ds/sayt/#countdown-katta-sanoq-qabul); [On a card: Light and Dark](https://design.pdp.uz/ds/sayt/#countdown-kartada-light-va); [Deadline tag: lists and dashboard](https://design.pdp.uz/ds/sayt/#countdown-muddat-yorligi-royxat); [Anatomy, screen readers and rules](https://design.pdp.uz/ds/sayt/#countdown-anatomiya-ekran-oqigich) - PDP classes: .eco-btn (--lg, --primary, --secondary, --sm, --tertiary), .eco-countdown (--lg, --on-dark, --sm, __unit), .eco-deadline (--live, --off, --soon, --today), .eco-only - Nextcloud DOM classes reproduced in the example: .demo (--surface, __label), .snip-fold (__chev, __sum), .stage (--lbl2) ### Video lesson player (More components) — https://design.pdp.uz/ds/sayt/#video-player **Video lesson player: chapters, speed and the next lesson.** A lesson video on a course page: our own controls over the native