Softpoint Design System
☰
Theme
Mode
თქვენი არჩევანი შენახულია localStorage-ში

Living style guide

Softpoint Design System

UI-ის ყველა element ერთ ადგილზე. Theme და Mode ცვლილება ზევით - ნახე როგორც გამოიყურება ყველაფერი ახალ შრიფტში.

00 · philosophy

Design philosophy

რას ვცდილობთ მივაღწიოთ Softpoint-ის UI-ის დიზაინისას. ეს არის "რატომ"-ის ფუძე ყველა სხვა გადაწყვეტილების ქვეშ.

One thing per page

არც ერთი ეკრანი არ არის "everything dashboard". თითოეული გვერდი ფოკუსირებულია ერთ შემადგენელ გადაწყვეტილებაზე: ვაგონის ძებნა, მინდობილობის გაცემა, ბალანსის შევსება. ყოველდღიურ რუტინაში ჩართული მომხმარებლისთვის ფოკუსირება ერთ საკითხზე ქმნის სიმარტივეს და უკეთეს UX-ს.

Wizards over multi-purpose forms

რთული ფლოუ: რეგისტრაცია, მინდობილობა, მომხმარებლების მოწვევა - დაყოფილია ნაბიჯებად ცალცალკე სექციებად. თითო ნაბიჯი წარმოადგენს ერთი პატარა გადაწყვეტილების მიღებისთვის საჭირო არეალს. Step indicator-ი აჩვენებს მდებარეობას პროცესში. უკან დაბრუნება ყოველთვის შესაძლებელია.

Inline help, not tooltips

ფორმა თვითონ ხსნის რას და რატომ ვითხოვთ — .field-help ტექსტი ველის ქვემოთ ან ფორმაზე. Tooltip-ები მალავენ ინფორმაციას, ცუდად მუშაობენ touch-ზე და accessibility გამოწვევაა - ამიტომაც, განმარტებები ეგრევე ჩანს (სამომავლოდ, მომხმარებლების ცოდნის ზრდასთან ერთად შეგვიძლია მოვიფიქროთ უფრო კომპაქტური ვარიანტებიც). ახლა კი ეს UI აგებულია პრინციპით "ცხადი = ლამაზი".

Business voice — სანდო და საქმიანი

B2B პროდუქტი - აქ მომხმარებელი თავის მოვალეობას ასრულებს სამსახურში. თქვენობით ვესაუბრებით. ვუხსნით რატომ ვითხოვთ რაიმეს - "ჩვენ ეს მონაცემი გვჭირდება, რომ X-ს გავაკეთოთ". ეს არც ფამილიარულია ("ჰაი! 👋 რაშუებიიი?"), და არც დისტანცირებულია ("Dear customer"). სანდოა და საქმიანი.

Built on the logo

მთელი ფერთა სისტემა ლოგოს პალიტრაზეა აწყობილი — ink navy (#0a0e2a) ტექსტისთვის და signal blue (#002bff), ლოგოს წერტილი, ერთადერთ accent-ად. მშვიდი, სანდო ვიზუალი: სიღრმე hairline border-ებიდან მოდის და არა მძიმე ჩრდილებიდან. ეს უნდა იყოს "სანდო და დაცული ადგილი, არა საავადმყოფო". ოთხი ალტერნატიული პალიტრაც გვაქვს შესარჩევად, და ვზრუნავთ მომხმარებლებზე, რომლებიც ღამით მუშაობენ — გვაქვს Dark Mode.

Plain HTML + CSS + minimal vanilla JS

Zero build step. გვერდი ერთ ფაილს უკავშირდება — styles.css (@import manifest: tokens + components). CDN dependency მხოლოდ შრიფტებია: FiraGO + JetBrains Mono (Fontsource), Noto Sans Georgian (Google Fonts). JS გამოიყენება მხოლოდ იქ, სადაც CSS ვერ აღწევს: tabs (settings), mobile menu sync (details ფიქსი), theme switcher (design system), loading state. ფრონტ-ის სტეკი ჯერ არ არჩეულა: ეს მოგვიანებით ცალკე ADR-ის გადაწყვეტილებაა - თუმცა ვფიქრობთ, რომ Server Side Rendering-ით წავიდეთ და ჩვენი vanilla JS, css, components გამოვიყენოთ.

Progressive disclosure

Default-ად ვუჩვენებთ მთავარს. დანარჩენი - collapsed details (<details>), danger zones, advanced options ცალკე გვერდებზე. როგორც დასაწყისში აღვნიშნეთ, ეკრანი არ ცდილობს ყველა საქმე ერთ ხედში მოაქციოს.

Accessible by default

Native HTML elements: <button>, <label for="">, <dialog>, <details>. Aria attributes იქ, სადაც სემანტიკა არ ფარავს. Keyboard navigation მუშაობს default-ად. Color contrast WCAG AA-ის ზევით ყველა text/bg წყვილში.

01 · brand

Brand

მთელი სისტემა ლოგოს პალიტრაზეა აწყობილი — ink navy (#0a0e2a) და signal blue (#002bff, წერტილი). ერთადერთი SVG სისტემაში ლოგოა (assets/logo.svg); პროდუქტის chrome-ში ბრენდის ნიშანი იგივე ლურჯი წერტილია.

ლოგო — SoftPoint Technology wordmark
SoftPoint Technology

On light · primary

SoftPoint Technology

On dark · knockout

ლოგოს პალიტრა — ფერები, რომლებზეც ბრენდი შენდება
Ink
#0a0e2a
Signal blue
#002bff
Canvas
#f5f7fb
In-app lockup — .topnav-brand (signal blue წერტილი + wordmark)
Softpoint

signal blue წერტილი — „soft point" — ink navy wordmark-თან, პირდაპირ ლოგოდან.

Rail divider — რკინიგზის მოტივი, ერთადერთი დეკორატიული ელემენტი

გრადიენტები, ფოტო-hero და ტექსტურები არ გვაქვს — სექციების რიტმი off-white/თეთრის მონაცვლეობით და navy band-ებით კეთდება.

02 · themes

Themes

ოთხი ალტერნატიული პალიტრა. თითოეული მუშაობს Light + Dark mode-ში. Signal — ლოგოს ფერებზე აწყობილი — დღესდღეობით production-ზეა. დააჭირე ნებისმიერს — გადართავს და preview-ს გვიჩვენებს ცოცხლად.

Signal · default
logo navy + signal blue — production
Steel
cool slate blue — enterprise
Forest
deep green — transport
Midnight
navy + gold — premium
03 · colors

Color tokens

ყველა ფერი გადის CSS custom property-ით. ცვლი theme-ს — ეს grid განახლდება ცოცხლად.

bg
Background
--color-bg
bg-alt
Background alt
--color-bg-alt
bg-soft
Background soft
--color-bg-soft
fg
Foreground
--color-fg
fg-muted
Foreground muted
--color-fg-muted
fg-subtle
Foreground subtle
--color-fg-subtle
border
Border
--color-border
border-str
Border strong
--color-border-strong
accent
Accent
--color-accent
accent-soft
Accent soft
--color-accent-soft
success
Success
--color-success
success-soft
Success soft
--color-success-soft
danger
Danger
--color-danger
danger-soft
Danger soft
--color-danger-soft
info
Info
--color-info
info-soft
Info soft
--color-info-soft
warning
Warning (literal)
#d4b56e dot · #8a6a1d text
warning-soft
Warning soft (literal)
#fbf2dc

Warning განზრახ literal-ია (token არ აქვს) — ერთადერთი ქარვისფერი ტონი, რომელიც ყველა თემაში უცვლელი რჩება. იხ. .alert-warning / .pill-warning.

04 · typography

Typography

FiraGO ლათინიკისთვის (Fontsource CDN) + Noto Sans Georgian ქართულისთვის და ₾-ისთვის. JetBrains Mono — ნომრები, კოდები, tabular data. Weights: 400/500/600/700.

--text-3xl · 48px · semibold

სარკინიგზო მონაცემები

--text-2xl · 36px · semibold

გვერდის სათაური

--text-xl · 28px · semibold (.page-title)

სექციის სათაური

--text-lg · 22px · semibold

ქვესექცია

--text-md · 18px (.page-lead, .section-title)

Page lead — ხშირად ქვესათაურის ქვემოთ.

--text-base · 16px (default body)

ძირითადი ტექსტი. ყოველდღიური წერა, აბზაცი, ფორმის labels.

--text-sm · 14px (.field-help, .note)

დამხმარე ტექსტი — ფორმის ველის ქვემოთ.

--text-xs · 12px (.page-eyebrow uppercase)

Eyebrow — uppercase letterspaced

--font-mono (JetBrains Mono)

405123456 · 23456789 · TaxNo · sk_live_…7b2a

.link — accent underline

აქ გრძელდება ლინკი ტექსტის შიგნით.

Mono კონტექსტში — ვაგონის ნომერი / OTP / ბალანსი / API key
Wagon number
23456789
One-time code
042 891
Balance
1,247.50 ₾
API key
sk_live_8Kd2…f0Az
05 · iconography

Iconography

არც icon font, არც icon set, არც emoji. ხატულები მცირე, განზრახ შერჩეული Unicode გლიფებია UI შრიფტში. სტატუსს ატარებენ ფერადი pill-ები და status dot-ები — და არა ხატულის ფორმები. ერთადერთი SVG ლოგოა. თუ გლიფი გაკლია — დასვი საკითხად, ნუ მოხატავ ახალს.

☰
mobile menu toggle
⚙
პარამეტრები
⤓ ⤒
გადმოწერა / ატვირთვა
×
დახურვა / მოხსნა
✓
შენახული / დადასტურებული
→ ←
ნავიგაცია · admin⇄client
+ −
FAQ accordion გახსნა/დახურვა
·
გამყოფი meta ხაზებში
06 · spacing

Spacing scale

4px-ის ბაზაზე. ფართო breathing room — სუფთა და გასაგები.

--space-1
4px
--space-2
8px
--space-3
12px
--space-4
16px
--space-5
24px
--space-6
32px
--space-7
48px
--space-8
64px
--space-9
96px
--space-10
128px
07 · radius

Border radius

Gentle radii — არასოდეს pill-ებს გარდა.

--radius-sm · 4px
--radius-md · 6px
--radius-lg · 10px
--radius-xl · 16px
pill · 999px
08 · shadows

Shadows

Subtle only. Dropdown panels, hover lifts, modal-ები.

--shadow-sm
--shadow-md
--shadow-lg
09 · layout

Layout containers

ოთხი intent-driven სიგანე — გვერდის ტიპი ირჩევს container-ს, არა პირიქით. ყველა იკუმშება mobile-ზე.

.container-form · 520px
.wizard-content · 640px
.container · 960px
.container-data · 1200px
Container discipline — რომელი როდის
Container max-width როდის
.container-form 520px focused single-action ფლოუ — login, password-set, მოწვევა
.wizard-content 640px multi-field signup ნაბიჯები — stepper + .grid-2 ველები
.container 960px default — ტექსტი + მცირე (≤6 სვეტი) ცხრილები, app-ის „main"
.container-data 1200px ფართო ცხრილები (≥7 სვეტი), ფილტრებიანი დაფები — tracking, balance, admin billing
10 · layout & flow

Layout & flow primitives

სტრუქტურული კლასები, რომლებითაც გვერდი იწყობა — spacing მხოლოდ აქ ცხოვრობს, inline style ატრიბუტი მკაცრად აკრძალულია (ADR-0009). ვერტიკალური რიტმი — .flow, ჰორიზონტალური დაჯგუფება — .cluster, ორსვეტიანი ფორმა — .grid-2.

.view / .view-tall — გვერდის ჩონჩხი

ყველა გვერდი ერთი ჩარჩოთი იწყება — <main class="container view">. .view აძლევს main-ს ვერტიკალურ padding-ს (ზევით --space-7, ქვევით --space-9); .view-tall — ოდნავ მეტს ზევით (--space-8), როცა კონტენტს მეტი ჰაერი სჭირდება topnav-ის ქვეშ.

.flow — ვერტიკალური რიტმი (--space-5) · .flow-tight (--space-3)
ბლოკი 1
ბლოკი 2
ბლოკი 3
ბლოკი 1
ბლოკი 2
ბლოკი 3

flow ფლობს რიტმს: შვილების საკუთარი vertical margin-ები ნულდება და მანძილი მხოლოდ owl selector-ით (* + *) ედება — შუალედები არასდროს ორმაგდება. სიმკვრივის ვარიანტები: .flow-tight (--space-3) · .flow-md (--space-4) · .flow (--space-5) · .flow-loose (--space-6).

.cluster — ჰორიზონტალური დაჯგუფება (wrap + gap) · .cluster-tight
აქტიური meta ტექსტი ერთ ხაზზე
ერთი ორი სამი ოთხი

ღილაკების, pill-ების, meta ტექსტის რიგები — ვიწროზე თავად გადაეწყობა (flex-wrap). gap ვარიანტები: .cluster-tight (--space-2) · .cluster (--space-3) · .cluster-md (--space-4) · .cluster-lg (--space-5).

.cluster.cluster-end — labeled ველი + ღილაკი ერთ ხაზზე

label ველის სვეტს ამაღლებს — default center-align ღილაკს შუაში კიდებდა. .cluster-end (align-items: flex-end) ღილაკს input-ის ხაზზე სვამს. გამოიყენე ერთად: class="cluster cluster-end".

.grid-2 — ორსვეტიანი ფორმის grid (600px-ზე ერთ სვეტად)
.spacer — flex-ის დრეკადი შუალედი · .contents — display: contents wrapper

.spacer (flex: 1) ჯგუფებს კიდეებზე შლის — form-actions, toolbar, modal-foot. .contents კი wrapper-ს layout-დან აქრობს: inline <form> .topnav-nav-ში ან .modal-foot-ში ისე ჯდება, თითქოს შვილები პირდაპირ flex row-ში იყვნენ.

11 · buttons

Buttons

Primary (dark) · Secondary (outline) · Ghost (transparent). ზომები: .btn-sm / default / .btn-lg / .btn-block.

.btn .btn-primary
.btn .btn-secondary
.btn .btn-ghost
.btn-sm — კომპაქტური inline მოქმედება

შემცირებული padding (--space-1 / --space-3) — topnav-ის logout, pager-ის კონტროლები, ცხრილის რიგის მოქმედება.

.btn-block — სრული სიგანე
12 · forms

Form elements

.field + .input
დამხმარე ტექსტი ხსნის რას ვითხოვთ და რატომ.
.field-w-xs / -sm / -md — სიგანის cap: 200 / 320 / 480px

input მონაცემის ზომას მიჰყვება და არა სვეტს — 8-ნიშნა ვაგონის ნომერს 960px არ სჭირდება. cap ედება .field wrapper-ს; mobile-ზე უვნებელია (max-width მხოლოდ ზრდას ზღუდავს). ზომები: .field-w-xs 200px (თარიღი, თანხა) · .field-w-sm 320px (ვაგონის №, TaxNo) · .field-w-md 480px (ელფოსტა, სახელი).

.input.input-lg — wizard / hero ფორმებში
textarea + select
.input.input-otp — monospace, letterspaced
.file-upload — dashed dropzone
Radio cards (inline)
.form-actions — გასწორება სტრიქონად
13 · validation

Form validation

HTML5 validity API + ჩვენი ცოცხალი UI: წითელი border + ⚠ inline error ველის ქვემოთ + summary alert ფორმის ზევით (jump-link-ებით ცუდ ველებამდე). Form-ის opt-in: data-validate novalidate. Field-ის წესები — required, pattern, minlength/maxlength, min/max, type=email. Custom message: data-error-message.

სტატიკური preview — has-error + field-error
შეიყვანეთ ვალიდური ელფოსტის მისამართი — მაგ.: name@company.ge
ცოცხალი demo — დააჭირე "გაგზავნა" ცარიელ ფორმაზე და ნახე რა ხდება
Masked input — data-mask="card" / "card-exp" / "phone-ge"
სტატიკური preview — summary alert + multiple errors
3 ველი საჭიროებს ყურადღებას
ვაგონის ნომერი უნდა იყოს ზუსტად 8 ციფრი
შეიყვანეთ ვალიდური ელფოსტა (მაგ. name@company.ge)
მინიმუმ 50
14 · pills

Pills / badges

Status, role, category indicators. ყველა pill 999px radius-ით, თხელი.

soft accent success info warning danger
პრაქტიკული გამოყენება
აქტიური იწურება 23 დღეში ლოდინი — admin რეცენზიაზე უარყოფილი FullAccess Custom · ტრეკინგი Trial
15 · status dots

Status dots

Inline indicators სათაურებში ან kv list-ის ღირებულებებში.

OK / დადასტურებული

Warning / ყურადღებას მოითხოვს

Bad / პრობლემა

Neutral / არ იციმდება

16 · alerts

Alerts / banners

ხუთი ხასიათი (info / success / warning / danger / quiet) — page-level შეტყობინებები. Dismissible variant — × ღილაკით (click → ალერტი იშლება scripts/ui.js-ის დახმარებით).

Info ნეიტრალური დამატებითი ინფორმაცია — მიმოხილვა, ახსნა.
Success წარმატებული მოქმედება — შენახულია, გაიგზავნა, დაიფიქსირდა.
Warning რაღაც ყურადღებას მოითხოვს — დაბალი ბალანსი, ვადის ამოწურვა.
Danger პრობლემა — operation დაიბლოკა, მოქმედება ვერ მოხდა.
Quiet ფონური მინიშნება — soft tone, არ ხტება ცალი ცალკე.
.alert-dismissible — × ღილაკით ცოცხალი
დახურეთ ცოცხლად დააჭირე "×"-ს მარჯვნივ — ალერტი მოიხსნება DOM-დან. ui.js delegated listener.
მოწვევა გაიგზავნა გიორგი ბერიძეს ელფოსტა მიეწერა. ისინი 7 დღეში უნდა მიიღონ მოსაწვევი.
17 · cards

Cards

.card — default

სათაური

Card-ის შიგთავსი — ფორმა, ცხრილი, აღწერა.

.card.card-quiet — dashed border

Quiet card — ფონური ან secondary კონტენტისთვის.

.card.card-danger — danger zone

საშიში მოქმედება

გაუქმება, წაშლა, შეჩერება.

.doc-card — დოკუმენტისთვის
დოკუმენტი.pdf
ხელმოწერილი 14 მარტი 2026 · მოქმედი 14 მარტი 2027-მდე · 384 KB
დადასტურებული
18 · metrics

Metric tiles

Dashboard-ის სტატისტიკა. Auto-fit grid, minmax(220px, 1fr).

ბალანსი
1,247.50 ₾
საკმარისია 2,500 მოთხოვნისთვის
თვის ხარჯი
152.30 ₾
348 მოთხოვნა
აქტიური მინდობ.
7
2 გაცემული · 5 მიღებული
19 · hero balance

Hero balance

ხელმისაწვდომი ბალანსი
1,247.50 ₾
დაბალი ბალანსი
20 · kv list

Key/Value list

2-სვეტიანი dl. Mobile-ზე ერთ სვეტად დაიშლება.

კომპანია
შპს ექსპედიტორი ჯორჯია
საიდენტიფიკაციო კოდი
405123456
დირექტორი
ნინო კვარაცხელია
SDA სტატუსი
აქტიური
21 · tables

Tables

.table-wrap-ში — overflow-x: auto (mobile-ზე ჰორიზონტალურად scroll-დება).

სახელი ტიპი სტატუსი რიცხვი მოქმედება
პირველი ერთი აქტიური 1,247.50 რედაქტ.
მეორე ორი ლოდინი 512.00 რედაქტ.
მესამე სამი გათიშული 0.00 აქტივაცია
22 · data patterns

Data-page patterns

ფართო (.container-data) გვერდების გამეორებადი ბლოკები — tracking, balance, admin billing: სათაური CTA-ებით, ფილტრის რიგი, ველების grid, შემაჯამებელი ფილები და server-driven ცხრილი.

.page-head + .page-intro + .page-head-actions — title მარცხნივ, CTA ზედა-მარჯვნივ

Tracking

ვაგონების ტრეკინგი

მოძებნეთ ვაგონი ნომრით ან ატვირთეთ ნუსხა Excel-იდან.

desktop-ზე page-header-ის მარჯვენა ნახევარი მკვდარი სივრცე აღარ არის; 720px-ზე ქვემოთ ბლოკად დგება (title → actions).

.filter-row + .filter-toggle + .filter-actions — თარიღები · ძებნა · toggle · submit

ველები ქვედა კიდეზე სწორდებიან (align-items: flex-end). .filter-actions slot margin-left: auto-თი მარჯვნივ ეკვრის — wrap პროგნოზირებადი ხდება; 720px-ზე ქვემოთ actions full-width ხაზზე ჩამოდის. .filter-toggle — checkbox accent pill-ად.

.field-grid — ველები გვერდიგვერდ, minmax(200px, 360px)

gap ცვლის .field-ის საკუთარ margin-ს. growth-cap: 360px — auto-fit + 1fr დამალული (.is-hidden) ველების track-ებს შლიდა და ერთადერთი ხილული ველი full-width (~910px) იჭიმებოდა; cap ველს მონაცემის ზომასთან ახლოს აჩერებს.

.tile-grid + .tag-lg / .tag-value — შემაჯამებელი ფილები
ვაგონი
23456789
მდებარეობა
ქუთაისი II
სტატუსი
გზაშია
განახლდა
10:42

growth-cap: minmax(160px, 240px) — ორფანი ფილა მეორე რიგში full-width აღარ იჭიმება. 480px-ზე ქვემოთ ისევ fill-რეჟიმი (minmax(140px, 1fr)) — definite max ვიწროზე სვეტების თვლას ამცირებდა და ერთი ვიწრო სვეტი რჩებოდა.

.toolbar — ცხრილის ზედა ზოლი: ძებნა · ფილტრი · CTA

.toolbar-ში input/select-ს 240px cap ედება; .spacer CTA-ს მარჯვნივ სვამს. mobile-ზე სვეტად დგება და კონტროლები full-width ხდება.

.data-table — server-driven ცხრილი (ADR-0017): sortable th + .pager
ვაგონი სადგური თანხა
23456789ბათუმი12.50
23456790ფოთი8.00
1–2 / 214

th[data-sort] მიმართულების ინდიკატორს CSS-ით იღებს (↕ default, ↑ .is-sorted-asc, ↓ .is-sorted-desc); sort/paging/search ui.js-ის delegated handler-ებით სერვერს ეკითხება. ფართო ცხრილი mobile-ზე — .scroll-x wrapper + .table-wide (min-width: 840px, --text-xs).

23 · tabs / subnav

Subnav (page tabs)

.subnav-თან წყვილში მუშაობს .tab-pane (active → display:block, fade-in). მაგ.: settings.html.

24 · segment

Segment toggle

Pill-style toggle — 2-3 ექსკლუზიური ვარიანტი. მაგ.: tracking-ის Basic/Advanced.

25 · chips & choices

Chips, tags & choices

არჩევანის კომპაქტური ფორმები — checkbox ჩიპების ბადე, რბილი tag-ები და radio ვარიანტების ორი განლაგება: ვერტიკალური ბარათები (აღწერით) vs ჰორიზონტალური მოკლე რიგები.

.chip-grid + .choice-chip — auto-fit ბადე, minmax(140px, 220px)

growth-cap: 220px — 1fr-ით ჩიპები ფართო container-ში ~400px ფილებად იშლებოდა. მიუწვდომელი ვარიანტი — .choice-chip.is-disabled (dashed). მჭიდრო ორ-სამსვეტიანი სია — .chip-grid-wide (minmax(200px, 1fr)).

.tag — რბილი label alt ფონზე (ფილტრის შეჯამება, meta)
სადგური: ბათუმი პერიოდი: მარტი 2026 405123456

pill-ისგან განსხვავებით სტატუსს არ ატარებს — ნეიტრალური მონაცემის ეტიკეტია. დიდი ვარიანტი .tag-lg + .tag-value — იხ. Data-page patterns.

.choice-list (ვერტიკალური ბარათები) vs .row-wrap + .choice-row (ჰორიზონტალური)

choice-list + choice-card

row-wrap + choice-row

წესი: აღწერას რომ ითხოვს არჩევანი → ვერტიკალური .choice-card ბარათები; მოკლე, თვითახსნადი ვარიანტები → ჰორიზონტალური .choice-row. კიდევ უფრო კომპაქტური — .choice-row-sm.

.segment + .segment-option — segmented control

2-3 ურთიერთგამომრიცხავი view — radio-ს ალტერნატივა, როცა არჩევანი ეკრანს ცვლის და არა მონაცემს. დეტალები — Segment სექციაში; mobile-ზე full-width ხდება და ვარიანტები თანაბრად იყოფა.

26 · wizard navigation

Wizard navigation

Rich wizard nav — section title (current step-ის სრული სათაური) + counter (ვისად ხარ) ზევით, bar-segments per step თითო label-ით ქვემოთ (თითო ბიჯზე ვკლიკავთ), მიმდინარე ბიჯის subtitle (call-to-action) + save state ქვევით. ადრინდელი dots-only indicator (.steps) კვლავ მუშაობს, მაგრამ ახალი გვერდები ამას იყენებენ.

.wiz-nav — სრული პატერნი (5 ბიჯი, 3-ე current)

ადმინისტრატორის ინფორმაცია

რეგისტრაცია 3 / 5
  1. კოდი
  2. დადასტურება
  3. ადმინი
  4. OTP
  5. მზად
ვინ იქნება პირველი ადმინისტრატორი? შესანახია
Save state-ები — შესანახია (default accent) / შენახული (success) / clean (subtle)
შესანახია შენახული ცვლილება არ არის
2-ბიჯიანი მცირე ვარიანტი (login)

კოდის დადასტურება

შესვლა 2 / 2
  1. იდენტიფიკაცია
  2. კოდი
შეიყვანეთ ერთჯერადი კოდი ელფოსტიდან —
Legacy: .steps (dots only) — back-compat-ისთვის რჩება
ნაბიჯი 3 / 5 · ადმინისტრატორი
28 · pdf preview

PDF preview placeholder

Document review-ის left column. რეალურ პროდუქტში — PDF.js ჩაჯდება.

PDF
document.pdf
198 KB · 2 გვერდი
29 · review grid

Review grid layout

Two-column: preview ⟷ metadata. 900px-ზე ქვემოთ stack-დება.

მთავარი — preview

PDF, ცხრილი, რუკა — დიდი მთავარი ნაწილი.

Side panel

Metadata, actions, ჩამონათვალი.

30 · empty state

Empty / pending result

ძებნის შედეგი ჯერ არ არის.
შეიყვანეთ ვაგონის ნომერი ან კომპანიის კოდი.
31 · pagination

Pagination

32 · loading

Spinners + button loading state

Inline spinner currentColor-ით სდევს ღილაკის / ალერტის ფერს. ღილაკზე დაჭერით — disabled state spinner ცენტრში, label იმალება. დააჭირე ქვემოთ ცოცხალი მაგალითი.

.spinner სამი ზომით
sm — 12px default — 16px lg — 32px
Spinner კონტექსტში
მონაცემების სინქრონიზაცია SDA-სთან — ჩვეულებრივ 2-3 წამში.

მოთხოვნა გადაიგზავნა — დადასტურების მოლოდინი

.btn.is-loading — დააჭირე ცოცხალი დემო

დააჭირე — ღილაკი 2 წამით გადაჭდება is-loading state-ში: pointer-events ბლოკდება, ლეიბლი იმალება, ცენტრში ბრუნავს spinner.

.btn.is-loading — სტატიკურ-ფიქსირებული preview
33 · skeletons

Skeleton loaders

ცარიელი placeholder pulse-ით — როცა მონაცემი ჯერ არ დატვირთულა. სიჩქარის ილუზია spinner-ზე უკეთესია, რადგან layout ფიქსირდება და content-ის ზომა მოდის ცხადი მაშინვე.

.skeleton-line / .skeleton-title
.skeleton-block — card placeholder
პრაქტიკული გამოყენება — metric-grid loading
.skeleton-circle — avatar / icon placeholder
34 · progress

Progress bars

Determinate — ცნობილი პროცენტი (ფაილის ატვირთვა, batch-ის წინსვლა). Indeterminate — ცნობილი არა, მაგრამ რაღაც ხდება (server query).

.progress — determinate 65%

ფაილის ატვირთვა — 6.5 MB / 10 MB · 65%

.progress.is-indeterminate

SDA შემოწმება მიმდინარეობს — სიგრძე უცნობია

ზომები: .progress-sm · default · .progress-lg
პრაქტიკული — ხელშეკრულების ატვირთვის ფლოუ
contract-v3.2.pdf 385 KB / 384 KB · 100%

✓ ატვირთვა დასრულდა — დაიგზავნა admin რეცენზიაზე

35 · dialogs

Modal dialogs

HTML5 native <dialog> — keyboard navigation, focus trap, ESC-ის ჩახურვა default-ად. Backdrop blur-ით. სამი ხასიათი: confirm (default), danger, warning. დააჭირე ღილაკებს — ცოცხალი demo.

დასტურის მოთხოვნა — default (accent icon)
საშიში მოქმედების დადასტურება — danger
გაფრთხილება ცვლილებამდე — warning
წარმატების შეტყობინება — success
სტატიკური preview (ყოველთვის გახსნილი) — საშუალოდ ცარიელ ფანჯარაში
36 · disclosure & notes

Disclosure & notes

Progressive disclosure — მეორეხარისხოვანი კონტენტი native <details>-შია დაკეცილი, modal-ის გარეშე. გვერდით — ჩუმი note-ების ოჯახი და შედეგის ეკრანის ბეჯი.

.disclosure — inline details/summary (UA მარკერის გარეშე)
დამატებითი პარამეტრები

მეორეხარისხოვანი ველები default-ად დაკეცილია — მთავარი ფლოუ სუფთა რჩება. [open]-ზე summary-ს --space-4 ედება ქვემოთ.

.card.disclosure-card + .summary-toggle + .disclosure-body — გასაშლელი ბარათი
მინდობილობის დეტალები +
გამცემი, მიმღები, ვადა და scope — მხოლოდ გახსნისას ჩანს. მეტი დაშორება ზემოდან — .disclosure-body-lg.
.summary-danger — დაკეცილი danger zone
საშიში მოქმედებები

ანგარიშის დახურვა, მინდობილობის გაუქმება — გახსნამდე დამალულია, შემთხვევით ვერ მოხვდები.

.note · .note-block · .note-footnote — ჩუმი ტექსტების ოჯახი

.note — inline მინიშნება, subtle ფერით.

.note-block — accent ციტატა / audit-ჩანაწერი: მარცხენა ზოლი + რბილი ფონი.
.note-block.is-muted — ნეიტრალური ვარიანტი accent-ის გარეშე.

.note-footnote — ცენტრირებული დამარწმუნებელი ხაზი ფორმის ქვემოთ.

.result-intro + .result-badge.is-success — done/result ეკრანი
✓

რეგისტრაცია დასრულდა

ანგარიში შეიქმნა — პირველი შესვლის ბმული ელფოსტაზეა.

37 · app shell

App shell — sidebar + appbar (ADR-0018)

ერთი shell ყველა ავტორიზებული გვერდისთვის: მარცხნივ .sidenav, ზემოთ .appbar (crumbs + უტილიტები), კონტენტი .container-data-ზე. მობაილზე sidenav off-canvas drawer-ია checkbox-hack-ით (JS არ სჭირდება). ცოცხალი specimen სამივე არქეტიპით — spec-shell.html; კონტრაქტი — docs/10-system-design/45-app-shell.md.

.sidenav — sec-ჯგუფები, sidenav-group გაშლადი კვანძები (IA ვარიანტი B), is-active, sub, foot
◫მთავარი
ადმინისტრირება
₾ბილინგი▸ ბალანსი ბრუნვა
◔გუნდი▸ კომპანია
ნკნინო კვარაცხელია
ავერსი ლოგისტიკა
.appbar — .crumbs (ერთადერთი wayfinding) + .appbar-btn/badge + .appbar-user dropdown
🔔2
ნკ ნინო ▾
.admin-banner — ადმინ-კონტექსტის მუდმივი ზოლი (/admin + sidebar-მენიუსთან ერთად)
ADMIN · Softpoint-ის კონსოლი
.title-row — H1 + .title-count + .title-actions (browse-ზე page-lead აკრძალულია)

ტრეკინგი

· 6 ობიექტი მონიტორინგზე
.form-grid — create-ფორმის „გაშლილი" მწკრივი (საკუთარი რიტმით; ფორმებში grid-2-ის ნაცვლად)
38 · operator workspace

Operator workspace — დისლოკაციის კომპონენტები

კომპონენტები, რომლებიც დისლოკაციის მონიტორინგის ეკრანებს (#162–#169, map 4.8) სჭირდება. ყველა components.css-შია (prototype → wwwroot sync). გამოძახება — იხ. § 39 „ეკრანები“.

.workspace + .workspace-aside (sticky) + .choice-row-btn(.is-active) — სია მარცხნივ, სამუშაო არე მარჯვნივ; ≤900px ერთ სვეტად

კლიენტი: შპს „კომპანია A"

სამუშაო არე — ცხრილი, ფილტრები, ჯგუფური მოქმედებები.

.kv-grid — რამდენიმე .kv გვერდიგვერდ (ჩანაწერის დეტალი, „ბოლო მდგომარეობა“)
ბოლო სადგური
ალმათი-1
ბოლო ოპერაცია
Прибытие
ოპერაციის თარიღი
28.05.2026 12:15
ტვირთი
ხორბალი
.segment.segment-tabs — გვერდის დონის ტაბები (პანელებს ზემოთ) · .segment-pane + .is-hidden — segment-ით გამოჩენილი პანელი
აქტიური ტაბის პანელი. სხვა პანელს აქვს .is-hidden.
.choice-grid — 2-სვეტიანი checkbox-სია (სვეტების / ველების არჩევა); ≤480px ერთ სვეტად
.field-addon — field-ის მეორადი კონტროლ-რიგი · .input-auto — შინაარსის სიგანის select (მაგ. page-size)
.btn-dashed.btn-dropzone — ფაილის ჩაგდების ზონა cluster-ში · .text-warning — warning ტექსტი (tag-value)
დუბლიკატი
4
შეცდომიანი
2
.table-compact (min 560px — preview / ნახევარ-სვეტი) · .table-register (min 1900px, nowrap — 25-ველიანი რეესტრი) — ორივე .scroll-x-ში
ვაგონისტატუსიშენიშვნა
23456789სწორი—
23456790დუბლიკატიუკვე არის კლიენტთან
.review-grid.review-grid-even — ორი თანაბარი სვეტი (compose + preview); ≤900px ერთ სვეტად

წერილი

ველები: მიმღები, თემა, პერიოდი…

Preview

როგორ მიიღებს კლიენტი.

39 · screens

ეკრანები — პროტოტიპის ფორმების კატალოგი

პროტოტიპის ყველა გვერდი, საიდან იხსნება და რომელ issue-ს / product map-ის პუნქტს ეკუთვნის. ახალი ეკრანი ემატება აქაც და README-შიც („როგორ აღვწერთ პროდუქტს“ — checklist: „ეკრანი პროტოტიპშია, ბმულით მენიუდან“).

დისლოკაციის მონიტორინგი · map 4.8 · Phase 1 (Q-21) · შესვლა: topnav „დისლოკაცია“ → გვერდებს შორის .subnav
ეკრანიფაილისაიდან იხსნებაIssue · map
აწყობა — workspace (ყოფილი „მონიტორინგი“)dislocation-monitoring.htmltopnav „დისლოკაცია“#162 #163 #165 #167 · 4.8.1/4.8.3/4.8.5
კლიენტის ბარათი (დამატება / რედაქტირება)dislocation-client.htmlმონიტორინგის კლიენტების პანელი „+ კლიენტის დამატება“ · „კლიენტის რედაქტირება“#180 · 4.8.8
ვაგონის / კონტეინერის დამატება (ხელით / Excel)dislocation-monitoring.htmlmodal-ები: „+ ვაგონის დამატება“, „+ კონტეინერის დამატება“#164 · 4.8.2
მონიტორინგი (ყოფილი „სრული ცხრილი“: ისტორია, 25 ველი)dislocation-history.htmlsubnav · დეტალური პანელის „სრული ცხრილი →“#166 · 4.8.4
შეტყობინებები (ელფოსტით გაგზავნა კლიენტს) + დაგეგმილი გაგზავნებიdislocation-email.htmlsubnav · modal-ის „სრული ფორმა →“#168 · 4.8.6
შეცდომები და აუდიტიdislocation-errors-audit.htmlsubnav#169 · 4.8.7
დისლოკაცია — ნავიგაციის რუკა: როგორ უკავშირდება ფორმები ერთმანეთს
მონიტორინგი კლიენტი → ვაგონები → დეტალი კლიენტის ბარათი დამატება / რედაქტირება · #180 ვაგონების დამატება ხელით / Excel · #164 შეტყობინებები ახლავე / დაგეგმილი · #168 მონიტორინგი ისტორია, 25 ველი · #166 შეცდომები და აუდიტი #169 „+ კლიენტის დამატება“ „კლიენტის რედაქტირება“ „+ ვაგონის დამატება“ / Excel → modal → „სრული ფორმა →“ „✉ ელფოსტით გაგზავნა“ → modal → „სრული ფორმა →“ „ნახვა“ → დეტალი → „მონიტორინგში ნახვა →“ „↻ განახლება“ → შეცდომები (subnav) ხუთივე ეკრანი ერთმანეთს .subnav-ით უკავშირდება; ქვე-ფორმიდან დაბრუნება — „← დისლოკაციის მონიტორინგი“
დისლოკაცია — გადასვლები: საიდან → მოქმედება → სად, რა გადაეცემა და სად ბრუნდება
საიდანმოქმედებასად იხსნებარა გადაეცემაშედეგი / დაბრუნება
ნებისმიერი tenant გვერდიtopnav „დისლოკაცია“მონიტორინგი——
მონიტორინგი„+ კლიენტის დამატება“ / „კლიენტის რედაქტირება“კლიენტის ბარათი— / არჩეული კლიენტი„შენახვა“ → მონიტორინგი; კლიენტი ჩანს პანელში — მის შემქმნელს / მომსახურეს და კომპანიის ადმინს (BR-DM-33, 37)
მონიტორინგიკლიენტის არჩევა (მარცხენა სია)იგივე გვერდი — ვაგონების ცხრილიკლიენტიცხრილში მხოლოდ ამ კლიენტის ვაგონებია (BR-DM-01/02)
მონიტორინგი„+ ვაგონის დამატება“modal → „სრული ფორმა →“ ვაგონების დამატება (ხელით)არჩეული კლიენტი„დამატება“ / „გაუქმება“ → მონიტორინგი; ახალი ვაგონები ცხრილშია, აუდიტში ჩანაწერი
მონიტორინგი„Excel-დან დამატება“modal → „სრული ფორმა →“ ვაგონების დამატება (Excel ტაბი)არჩეული კლიენტიpreview → „N სწორის დამატება“ → მონიტორინგი
მონიტორინგი„მონიტორინგის პერიოდი“modalმონიშნული ვაგონებიშენახვა → იგივე ცხრილი, პერიოდი განახლებულია (BR-DM-08)
მონიტორინგი„ჩართვა“ / „გამორთვა“იგივე გვერდიმონიშნული ვაგონებისტატუსი იცვლება; გამორთული ვაგონი აღარ იღებს ინფორმაციას და აღარ შედის დაგეგმილ გაგზავნაში (BR-DM-10, BR-DM-28)
მონიტორინგი„↻ განახლება“იგივე გვერდიკლიენტი / მონიშნული ვაგონებიშედეგი „განახლდა · არ შეცვლილა · შეცდომა“; შეცდომები ჩანს „შეცდომები და აუდიტი“-ში
მონიტორინგი„⬇ Excel ექსპორტი“ფაილის ჩამოტვირთვაგაფილტრული ან მონიშნული ვაგონები—
მონიტორინგი„✉ ელფოსტით გაგზავნა“modal → „სრული ფორმა →“ ელფოსტით გაგზავნაკლიენტი + მონიშნული ვაგონები„გაგზავნა“ → გაგზავნის ისტორია; „დაგეგმვა“ → სია „დაგეგმილი გაგზავნები“; ორივე აუდიტში
მონიტორინგივაგონზე „ნახვა“დეტალური პანელი (ბოლო მდგომარეობა / ისტორია) → „მონიტორინგში ნახვა →“ვაგონისრული ცხრილი → „← დისლოკაციის მონიტორინგი“
შეტყობინებებიმიმღები / „ბარათის რედაქტირება“იგივე გვერდი / კლიენტის ბარათიკლიენტის ელფოსტებიმიმღები ბარათის ელფოსტებიდან ირჩევა (BR-DM-34); წერილის ენას ოპერატორი ირჩევს (BR-DM-35)
შეტყობინებებიდაგეგმილ გაგზავნაზე „შეჩერება / განახლება · შეცვლა · გაუქმება“იგივე გვერდი (შეცვლა → ფორმა ზემოთ)დაგეგმვის პარამეტრებისტატუსი იცვლება; ცვლილება მომდევნო გაგზავნიდან მოქმედებს; აუდიტი (BR-DM-27)
შეცდომები და აუდიტიშეცდომაზე „ხელახლა ცდა“იგივე გვერდივაგონიწარმატებისას ინფორმაცია მონიტორინგში და სრულ ცხრილში ჩანს
ხუთივე ეკრანი.subnav / „← დისლოკაციის მონიტორინგი“ნებისმიერი დისლოკაციის ეკრანიარჩეული კლიენტი (პროტოტიპში ფიქსირებულია „კომპანია A“)—

მონაცემების ნაკადი: დარეგისტრირებული კლიენტი → დამატებული ვაგონი → მონიტორინგის ცხრილი → (ჩართული + მოქმედი პერიოდი) ინფორმაციის მიღება → დეტალი და სრული ცხრილი → ელფოსტა კლიენტს. მიღების შეცდომები და ყველა ცვლილება → „შეცდომები და აუდიტი“. პროტოტიპი სტატიკურია: მონაცემები გვერდებს შორის რეალურად არ გადაეცემა, ცხრილი აჩვენებს, რა უნდა გადაეცეს რეალურ აპში.

Tenant app (ძველი topnav — არქივის საკითხი: „როგორ აღვწერთ პროდუქტს“ კითხვა 3)
ეკრანიფაილისაიდან იხსნება
მთავარიdashboard.html · -empty · -impersonatingtopnav „მთავარი“
მინდობილობებიdelegations.html · -new · -new-v2topnav „მინდობილობები“
დოკუმენტებიdocuments.html · -uploadმინდობილობები / პარამეტრები
ბალანსიbalance.html · -pay · -turnovertopnav „ბალანსი“
მომხმარებლები · აუდიტი · პარამეტრებიusers.html · users-invite · audit · settingstopnav · ⚙
Public / Auth · Softpoint Admin · Specs
ჯგუფიფაილები
Public / Authindex · signup · -2 · -3 · -4 · -5 · -sda-error · -duplicate · password-set · login · pending
Softpoint Admintenants · tenant-detail · documents · document-review · tariffs · tariff-new · tariff-edit
Specsspec-shell (sidebar app shell, ADR-0018)
40 · 2026-10 განახლება

სამუშაო გვერდის კომპონენტები და ვიზუალის წესები

კომპონენტები, რომლებიც 2026-10-03-ის გადაწყობამ შემოიტანა (PR #182, #183, #190 და შემდეგი). ყველა components.css-შია (prototype → wwwroot sync). ეკრანები — § 39.

ვიზუალის წესები — რა გამოვიყენოთ და რა არა
წესიასეარა ასე
ვაგონის მდებარეობა.route — მარშრუტის ხაზი (ცხრილში), .route-stops (დეტალში)მხოლოდ ტექსტი „ბოლო სადგური“
ხატულა<span data-ic="mail"> — ერთი SVG ნაკრები, currentColorემოჯი (✉ ⬇ 🕒) — ყველა სისტემაზე სხვანაირად ჩანს
ღილაკის დონე.btn-primary (ერთი ზონაში) · .btn-secondary · .btn-ghostშიშველი .btn — ჩარჩოს გარეშე ტექსტს ჰგავს
ღილაკის ფორმამომრგვალებული (pill) — --radius-btn; ხშირი მოქმედება წარწერის გარეშე: .btn-round + aria-label + data-tipკუთხოვანი ღილაკი; ხატულა-ღილაკი განმარტების გარეშე
ცხრილიზებრა-სტრიქონები (ლუწი ოდნავ მუქი) + სვეტებს შორის წვრილი ხაზი; ბევრსვეტიანზე .table-snugერთფეროვანი თეთრი ცხრილი სვეტების გამყოფის გარეშე
გადამრთველი.segment — მომრგვალებული ზოლი; არჩეული თეთრია, ლურჯი ტექსტითარჩეული მთლიანად ლურჯი — მთავარ ღილაკს ეჯიბრება
სამუშაო ცხრილი.table-grid — ფილტრი და პირობა (≈ = ≥ ≤ …–…) ცხრილის თავში, სვეტის ქვეშ; სვეტის გადატანა / დამაგრება; მომხმარებლის სვეტი (.is-custom) პირდაპირ უჯრაში ივსება. ნიმუში: dislocation-history.htmlფილტრის ველები ცალკე ზოლად ცხრილის ზემოთ
მოქმედების დადასტურებაdata-toast="…" / spToast()ფორმა ჩუმად იხურება
ცარიელი სია.empty-state — რა მოხდა + ერთი ღილაკიცარიელი ცხრილი ან მხოლოდ ერთი ხაზი ტექსტი
გვერდის აღწერა.info-tip სათაურთან (hover / focus).page-lead app-გვერდზე
სტატუსის ფილტრი.stat ჩიპები მთვლელითცალკე select + ცალკე მთვლელი
ტექნიკური კოდებიმომხმარებლის ენით ტექსტი„BR-DM-34“, „§13“ მომხმარებლის ტექსტში
.route (+ .route-p0 / -p25 / -p50 / -p75 / -p100 · .is-done · .is-off) — მარშრუტის ხაზი ცხრილის უჯრაში
თაშქენტი-ც.ალმათი-1 გზაშია · 27.05 09:40
თაშქენტი-ც.ალმათი-1 ჩავიდა (.is-done) · 28.05 12:15
ყორღა-კორგაფოთი იტვირთება (.route-p0)
ალმათი-1ბაქო-სატვ. მონიტორინგი გამორთულია (.is-off)

პროგრესი მხოლოდ კლასით ეთითება (inline style აკრძალულია). ხუთი საფეხური საკმარისია — ხაზი მიახლოებითია, ზუსტი მდებარეობა ქვედა ხაზზე წერია.

.route-stops (li.is-past / .is-now / .is-next) — მარშრუტი დეტალურ ბლოკში
  1. ყორღა-კორგაПогрузка · 24.05 11:10
  2. ბაქო-სატვირთოПрибытие · 25.05 17:20
  3. თაშქენტი-ცენტრიОтправление · 27.05 09:40
  4. ალმათი-1დანიშნულება
[data-ic] — ხატულების ნაკრები (scripts/menu.js) · .icon-btn — ხატულა-ღილაკი (aria-label + data-tip სავალდებულოა)
 refresh  download  upload  mail  clock  calendar  wagon  box  play  pause  edit  eye  building  columns  clip  search  check  x  alert
data-toast / spToast() → .toast — მოქმედების დადასტურება · data-tip → .nav-tip — განმარტება hover / focus-ზე · .info-tip
სათაური i
.container-fluid + .title-row (კომპაქტური) · .card-flush + .card-bar · .stat-strip / .stat · .bulk-bar · .switch · .cell-main / .cell-sub — სამუშაო ცხრილი

შპს „კომპანია A"

მონიშნულია 2 ვაგონი
ვაგონი კონტეინერიმარშრუტიმონიტორინგი
12345678 TGHU4800481 თაშქენტი-ც.ალმათი-1 აქტიური
67890123 MRKU9034126 თაშქენტი-ც.ბიშკეკ-2 გამორთული
.empty-state — ცარიელი სია

ამ ფილტრით ვაგონი ვერ მოიძებნა

შეცვალეთ საძიებო სიტყვა ან სტატუსი, ან გაასუფთავეთ ფილტრები.
.form-card + .form-sec (+ .form-sec-title) + .form-bar · .chip-check · .day-pill · .switch-row · .pick-list · .attach-card — ფორმა სექციებად

ვის

როდის

dislocation_companyA_28-05-2026.xlsx · Excel
2 ვაგონი → info@companya.ge · ორშ, ოთხ — 09:00

.form-bar მიმაგრებულია ფორმის ძირზე (sticky) — შეჯამება და მთავარი ღილაკი სქროლისას ხილული რჩება.

.table-sticky (+ .view-basic · .col-x · .col-stick-1 / -2) — რეესტრის ცხრილი ორი ხედით · .split / .split-sticky · .mail-preview + .table-xs · .tab-count
№თარიღიოპერაციაგზის კოდი (.col-x — მხოლოდ „სრულ“ ხედში)
128.05.2026 12:15Прибытие700