adata-ui 2.1.40 → 2.1.41-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/-error.vue +2 -2
  2. package/.playground/app.vue +13 -13
  3. package/.playground/nuxt.config.ts +1 -1
  4. package/CLAUDE.md +63 -0
  5. package/assets/styles/main.css +12 -0
  6. package/assets/styles/theme.css +583 -0
  7. package/assets/styles/ui.css +247 -0
  8. package/components/elements/a-select-row/ASelectRowV2.vue +13 -17
  9. package/components/elements/a-select-row/index.vue +13 -12
  10. package/components/elements/accordion/AAccordion.vue +2 -2
  11. package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +1 -1
  12. package/components/elements/accordion/AAccordionGroup/ui.config.ts +4 -4
  13. package/components/elements/accordion/ui.config.ts +4 -4
  14. package/components/elements/alert/AAlert.vue +5 -5
  15. package/components/elements/bg-block/ABgBlock.vue +1 -1
  16. package/components/elements/button/AButton.vue +48 -45
  17. package/components/elements/button/AButtonV2.vue +74 -30
  18. package/components/elements/button-login/index.vue +2 -1
  19. package/components/elements/carousel/config.ui.ts +2 -2
  20. package/components/elements/chip-wrapper/AChipWrapper.vue +4 -3
  21. package/components/elements/chips/AChips.vue +4 -3
  22. package/components/elements/companies/AOurClients.vue +1 -1
  23. package/components/elements/count-up/ACountUp.vue +54 -0
  24. package/components/elements/curve-block/ACurveBlock.vue +15 -48
  25. package/components/elements/curve-block-v2/ACurveBlockV2.vue +60 -25
  26. package/components/elements/digit-badge/ADigitBadge.vue +17 -16
  27. package/components/elements/empty-box/empty-box-V2.vue +92 -0
  28. package/components/elements/error-template/index.vue +99 -31
  29. package/components/elements/feature-description/AFeatureDescription.vue +8 -8
  30. package/components/elements/illustrations/noAccess.vue +1 -1
  31. package/components/elements/infinite-carousel/AInfiniteCarousel.vue +44 -16
  32. package/components/elements/leave-note/ALeaveNote.vue +2 -2
  33. package/components/elements/pagination/APagination.vue +8 -8
  34. package/components/elements/section-heading/ASectionHeading.vue +35 -0
  35. package/components/elements/segmented/ASegmentedV2.vue +24 -21
  36. package/components/elements/select/ASelect.vue +28 -27
  37. package/components/elements/select/ASelectMobile.vue +5 -5
  38. package/components/elements/select/ASelectV2.vue +20 -28
  39. package/components/elements/select/ui/select-button.vue +8 -8
  40. package/components/elements/select/ui/select-list.vue +2 -2
  41. package/components/elements/show-more/AShowMore.vue +2 -2
  42. package/components/elements/show-more/AShowMoreV2.vue +3 -3
  43. package/components/elements/skeleton/ASkeleton.vue +1 -1
  44. package/components/elements/slider/ASlider.vue +3 -2
  45. package/components/elements/slider/ASliderV2.vue +182 -0
  46. package/components/elements/star-rating/AStarRating.vue +2 -2
  47. package/components/elements/status-badge/AStatusBadge.vue +40 -36
  48. package/components/elements/step-slider/AStepSliderColCard.vue +77 -39
  49. package/components/elements/step-slider/AStepSliderColNumber.vue +74 -53
  50. package/components/elements/table/table.config.ts +8 -8
  51. package/components/elements/tree-select/components/ATreeSelectNode.vue +4 -4
  52. package/components/elements/tree-select-mobile/components/ATreeSelectNodesMobile.vue +3 -3
  53. package/components/elements/tree-select-modal/ATreeSelectModal.vue +4 -4
  54. package/components/features/color-mode/AColorMode.client.vue +2 -24
  55. package/components/features/dropdown/ADropdownV2.vue +1 -1
  56. package/components/features/lang-switcher/lang-switcher.vue +6 -6
  57. package/components/features/payment/banner/BasicPlusLimitBanner.vue +3 -23
  58. package/components/features/payment/banner/PaymentBanner.vue +3 -23
  59. package/components/features/payment/banner/UpSellBanner.vue +1 -21
  60. package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +8 -7
  61. package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +5 -5
  62. package/components/features/payment/process/PaymentMethodSidePanel.vue +12 -12
  63. package/components/features/payment/process/PaymentTopUpSidePanel.vue +6 -6
  64. package/components/features/pk-mobile-services/APkMobileServices.vue +14 -43
  65. package/components/features//321/201hange-version/AChangeVersion.vue +1 -1
  66. package/components/forms/checkbox/ACheckbox.vue +8 -8
  67. package/components/forms/checkbox/ACheckboxV2.vue +8 -8
  68. package/components/forms/feedback-form/FeedbackForm.vue +8 -8
  69. package/components/forms/feedback-form/FeedbackFormV2.vue +9 -8
  70. package/components/forms/input/AInputV2.vue +39 -25
  71. package/components/forms/input/button/AInputButton.vue +1 -1
  72. package/components/forms/input/date/AInputDate.vue +13 -9
  73. package/components/forms/input/password/AInputPassword.vue +1 -1
  74. package/components/forms/input/standard/AInputStandard.vue +23 -14
  75. package/components/forms/input/textarea/ATextarea.vue +15 -11
  76. package/components/forms/input/textarea/ATextareaV2.vue +18 -13
  77. package/components/forms/radio-button/ARadioButton.vue +4 -4
  78. package/components/forms/request-demo/ARequestDemo.vue +5 -5
  79. package/components/forms/toggle/AToggle.vue +8 -7
  80. package/components/forms/toggle/AToggleV2.vue +7 -6
  81. package/components/modals/AConfirmationEmail.vue +3 -3
  82. package/components/modals/AboutTariffModal.vue +10 -9
  83. package/components/modals/AnotherDeviceModal.vue +11 -10
  84. package/components/modals/ApplicationAcceptedModal.vue +3 -2
  85. package/components/modals/ConnectingTariffModal.vue +1 -1
  86. package/components/modals/ContactsMobileModel.vue +5 -5
  87. package/components/modals/ContentNavigationModal.vue +8 -7
  88. package/components/modals/Insufficient-funds-modal.vue +4 -4
  89. package/components/modals/LimitReachedModal.vue +18 -7
  90. package/components/modals/NoAccessModal.vue +7 -3
  91. package/components/modals/PaymentMethodModal.vue +4 -4
  92. package/components/modals/RedirectsBanksModal.vue +4 -4
  93. package/components/modals/ReplenishModal.vue +2 -2
  94. package/components/modals/ReportBugConfirmModal.vue +2 -2
  95. package/components/modals/ReportBugModal.vue +2 -2
  96. package/components/modals/Resend.vue +4 -4
  97. package/components/modals/SubmitApplicationModal.vue +1 -5
  98. package/components/modals/id/AuthModal.vue +27 -47
  99. package/components/modals/id/IdAutoLogoutModal.vue +23 -24
  100. package/components/modals/id/IdBanner.vue +4 -24
  101. package/components/modals/id/IdConfirmAccountOtpModal.vue +5 -4
  102. package/components/modals/id/IdConfirmSuccessfulModal.vue +3 -3
  103. package/components/modals/id/IdLoginModal.vue +8 -8
  104. package/components/modals/id/IdModals.vue +1 -3
  105. package/components/modals/id/IdNewPasswordModal.vue +3 -3
  106. package/components/modals/id/IdOtpInput.vue +3 -3
  107. package/components/modals/id/IdPasswordSuccessfulModal.vue +3 -3
  108. package/components/modals/id/IdRecoveryModal.vue +3 -3
  109. package/components/modals/id/IdRegistrationModal.vue +4 -4
  110. package/components/modals/id/IdResetPasswordOtpModal.vue +5 -4
  111. package/components/modals/id/IdTwoFactorModal.vue +3 -2
  112. package/components/navigation/bottom-navigation/ABottomNavigation.vue +7 -7
  113. package/components/navigation/breadcrumbs/ABreadcrumbs.vue +4 -4
  114. package/components/navigation/footer/AFooter.vue +2 -2
  115. package/components/navigation/footer/ui/a-footer-accordion.vue +1 -1
  116. package/components/navigation/header/AHeader.vue +11 -11
  117. package/components/navigation/header/AlmatyContacts.vue +7 -7
  118. package/components/navigation/header/AstanaContacts.vue +4 -4
  119. package/components/navigation/header/CardGallery.vue +8 -7
  120. package/components/navigation/header/ContactMenu.vue +1 -1
  121. package/components/navigation/header/HeaderLink.vue +5 -5
  122. package/components/navigation/header/HeaderUsage.vue +14 -14
  123. package/components/navigation/header/ListItem.vue +4 -3
  124. package/components/navigation/header/NavCard.vue +6 -5
  125. package/components/navigation/header/NavList.vue +9 -8
  126. package/components/navigation/header/NotificationsMenu.vue +10 -10
  127. package/components/navigation/header/ProductMenu.vue +10 -9
  128. package/components/navigation/header/ProfileMenu.vue +13 -12
  129. package/components/navigation/header/SystemNotification.vue +4 -4
  130. package/components/navigation/line-tabs/ALineTabs.vue +10 -9
  131. package/components/navigation/pill-tabs/APillTabs.vue +18 -16
  132. package/components/navigation/pill-tabs/APillTabsV2.vue +40 -25
  133. package/components/navigation/side-navigation/ASideNavigation.vue +3 -3
  134. package/components/overlays/drawer/ADrawerV2.vue +12 -11
  135. package/components/overlays/modal/AModal.vue +4 -4
  136. package/components/overlays/modal/AModalV2.vue +17 -13
  137. package/components/overlays/side-panel/ASidePanel.vue +7 -7
  138. package/components/overlays/sideover/ASlideover.vue +4 -4
  139. package/components/overlays/tooltip/ATooltip.vue +3 -2
  140. package/components/overlays/tooltip/ATooltipV2.vue +2 -2
  141. package/composables/highlight.ts +2 -1
  142. package/eslint.config.mjs +14 -1
  143. package/icons/arrow/arrow-left.vue +14 -0
  144. package/icons/arrow-currency-gray.vue +1 -1
  145. package/icons/arrow-currency-green.vue +1 -1
  146. package/icons/arrow-currency-red.vue +1 -1
  147. package/icons/avatar.vue +1 -1
  148. package/icons/bar-chart-3.vue +3 -0
  149. package/icons/book-open.vue +3 -0
  150. package/icons/bookmark/bookmark-filled.vue +1 -0
  151. package/icons/braces.vue +3 -0
  152. package/icons/check/check-outline.vue +3 -0
  153. package/icons/chevron/chevron-down-outline.vue +3 -0
  154. package/icons/clipboard-list.vue +3 -0
  155. package/icons/clock-outline.vue +3 -0
  156. package/icons/company-egov-small.vue +1 -1
  157. package/icons/database.vue +3 -0
  158. package/icons/download-outline.vue +3 -0
  159. package/icons/download.vue +1 -1
  160. package/icons/egov.vue +1 -1
  161. package/icons/elicense.vue +1 -1
  162. package/icons/file-json.vue +3 -0
  163. package/icons/file-search.vue +3 -0
  164. package/icons/file-text.vue +3 -0
  165. package/icons/flask-conical.vue +3 -0
  166. package/icons/folder-open.vue +3 -0
  167. package/icons/gift-outline.vue +3 -0
  168. package/icons/globe-2.vue +3 -0
  169. package/icons/graph-loading.vue +2 -2
  170. package/icons/hand/hand-thumb-up-filled.vue +1 -1
  171. package/icons/home.vue +14 -0
  172. package/icons/invoice.vue +1 -0
  173. package/icons/key-round.vue +3 -0
  174. package/icons/letter/letter-a.vue +4 -2
  175. package/icons/letter/letter-b.vue +2 -2
  176. package/icons/letter/letter-c.vue +2 -2
  177. package/icons/letter/letter-d.vue +2 -2
  178. package/icons/letter/letter-e.vue +2 -2
  179. package/icons/logo.vue +1 -1
  180. package/icons/main-filter.vue +1 -1
  181. package/icons/menu.vue +4 -4
  182. package/icons/message/message.vue +1 -1
  183. package/icons/messages-square.vue +3 -0
  184. package/icons/more.vue +1 -1
  185. package/icons/payment/payment-card.vue +2 -2
  186. package/icons/radio/radio-check.vue +1 -1
  187. package/icons/robot-outline.vue +3 -0
  188. package/icons/scales/scale-outline.vue +3 -0
  189. package/icons/search-outline.vue +3 -0
  190. package/icons/send.vue +3 -0
  191. package/icons/star/star-filled.vue +1 -0
  192. package/icons/star/star-half-filled.vue +1 -0
  193. package/icons/sun.vue +1 -0
  194. package/icons/terminal.vue +3 -0
  195. package/icons/toasts/warning-triangle-toast.vue +1 -0
  196. package/icons/triangle-alert.vue +3 -0
  197. package/icons/users-outline.vue +3 -0
  198. package/icons/webhook.vue +3 -0
  199. package/icons/x-outline.vue +3 -0
  200. package/icons/yandex.vue +2 -1
  201. package/illustrations/address-location.vue +2 -2
  202. package/illustrations/award-badge.vue +105 -0
  203. package/illustrations/ball-with-chain.vue +7 -7
  204. package/illustrations/bill.vue +5 -5
  205. package/illustrations/buildings.vue +4 -4
  206. package/illustrations/calendar.vue +11 -11
  207. package/illustrations/chains.vue +12 -12
  208. package/illustrations/coin-percent.vue +3 -3
  209. package/illustrations/coins-stack.vue +4 -4
  210. package/illustrations/delete-dark.vue +1 -0
  211. package/illustrations/delete.vue +1 -0
  212. package/illustrations/doc-with-stamp.vue +5 -5
  213. package/illustrations/document.vue +3 -3
  214. package/illustrations/door.vue +79 -68
  215. package/illustrations/empty-badge-check.vue +20 -0
  216. package/illustrations/empty-ban.vue +18 -0
  217. package/illustrations/empty-box.vue +5 -5
  218. package/illustrations/empty-filter.vue +20 -0
  219. package/illustrations/empty-inbox.vue +19 -0
  220. package/illustrations/empty-scale.vue +22 -0
  221. package/illustrations/empty-search-x.vue +21 -0
  222. package/illustrations/empty-shopping-cart.vue +21 -0
  223. package/illustrations/empty-users-round.vue +20 -0
  224. package/illustrations/empty-wallet.vue +121 -155
  225. package/illustrations/graph-in-coin.vue +2 -2
  226. package/illustrations/hammer.vue +5 -5
  227. package/illustrations/hand-cash.vue +1 -1
  228. package/illustrations/info.vue +49 -36
  229. package/illustrations/mail-active.vue +86 -0
  230. package/illustrations/mail.vue +4 -4
  231. package/illustrations/no-access.vue +92 -0
  232. package/illustrations/ok.vue +86 -58
  233. package/illustrations/people-group.vue +1 -1
  234. package/illustrations/person-with-phone.vue +5 -5
  235. package/illustrations/person.vue +3 -3
  236. package/illustrations/phone-check.vue +104 -84
  237. package/illustrations/phone-payment-method.vue +1 -1
  238. package/illustrations/shield-user.vue +94 -0
  239. package/illustrations/stop-hand.vue +78 -71
  240. package/illustrations/stop-sign.vue +1 -1
  241. package/illustrations/suit.vue +93 -107
  242. package/illustrations/suitcase.vue +6 -6
  243. package/illustrations/terminal.vue +94 -228
  244. package/illustrations/trash-can.vue +60 -102
  245. package/illustrations/turn-on-tariff.vue +2 -2
  246. package/illustrations/two-persons.vue +2 -2
  247. package/lang/en.ts +25 -29
  248. package/lang/kk.ts +24 -28
  249. package/lang/ru.ts +24 -29
  250. package/nuxt.config.ts +11 -4
  251. package/package.json +7 -12
  252. package/assets/styles/index.scss +0 -166
  253. package/assets/styles/modules/_base.scss +0 -5
  254. package/assets/styles/modules/_typography.scss +0 -152
  255. package/components/elements/error-template/types.ts +0 -23
  256. package/illustrations/terminal-dark.vue +0 -48
  257. package/tailwind.config.ts +0 -194
  258. package/tests/AButton.test.ts +0 -81
@@ -223,10 +223,10 @@ onBeforeUnmount(() => {
223
223
 
224
224
  <template>
225
225
  <div class="flex flex-col gap-5">
226
- <h1 class="heading-02 text-center" data-test-id="login-form-title">
226
+ <h1 class="text-h2 text-center" data-test-id="login-form-title">
227
227
  {{ t('modals.id.login.title') }}
228
228
  </h1>
229
- <p class="body-400 text-center" data-test-id="login-form-subtitle">
229
+ <p class="text-body-md text-center" data-test-id="login-form-subtitle">
230
230
  {{ t('modals.id.login.subtitle') }}
231
231
  </p>
232
232
  <div class="flex flex-col gap-4">
@@ -244,7 +244,7 @@ onBeforeUnmount(() => {
244
244
  :error="getError('password')"
245
245
  />
246
246
  <div class="flex items-center justify-between">
247
- <div class="body-400 flex gap-2" data-test-id="login-form-remember-me-checkbox">
247
+ <div class="text-body-md flex gap-2" data-test-id="login-form-remember-me-checkbox">
248
248
  <a-checkbox
249
249
  v-model="rememberMe"
250
250
  name="remember_me"
@@ -257,7 +257,7 @@ onBeforeUnmount(() => {
257
257
  }}</label>
258
258
  </div>
259
259
  <button
260
- class="link-s-400"
260
+ class="text-body-md text-link"
261
261
  data-test-id="login-form-forgot-password-button"
262
262
  @click="onForgotPassword"
263
263
  >
@@ -266,7 +266,7 @@ onBeforeUnmount(() => {
266
266
  </div>
267
267
  </div>
268
268
  <div class="flex items-center gap-4">
269
- <div class="h-px w-full bg-deepblue-500/30" />
269
+ <div class="h-px w-full bg-(--border-color-default)" />
270
270
  <div class="flex shrink-0 gap-4">
271
271
  <span
272
272
  class="cursor-pointer"
@@ -290,7 +290,7 @@ onBeforeUnmount(() => {
290
290
  <a-icon-mailru />
291
291
  </span>
292
292
  </div>
293
- <div class="h-px w-full bg-deepblue-500/30" />
293
+ <div class="h-px w-full bg-(--border-color-default)" />
294
294
  </div>
295
295
  <a-button
296
296
  :loading="loading"
@@ -300,7 +300,7 @@ onBeforeUnmount(() => {
300
300
  >
301
301
  {{ t('actions.login') }}
302
302
  </a-button>
303
- <p class="body-400 text-center">
303
+ <p class="text-body-md text-center">
304
304
  {{ t('modals.id.login.first_time') }}
305
305
  </p>
306
306
 
@@ -325,7 +325,7 @@ onBeforeUnmount(() => {
325
325
  </a-button>
326
326
 
327
327
  <a-alert
328
- class="max-w-screen-sm !text-[10px]"
328
+ class="max-w-screen-sm !text-body-sm"
329
329
  size="xs"
330
330
  >
331
331
  {{ t('info.userAgreement') }}
@@ -119,9 +119,7 @@ const autoLoginClose = () => {
119
119
  <id-password-successful-modal v-if="passwordSuccessfulModal" />
120
120
  </a-modal>
121
121
 
122
- <a-modal v-model="autoLogoutModal" prevent-close>
123
- <id-auto-logout-modal v-if="autoLogoutModal" @closed="autoLoginClose" />
124
- </a-modal>
122
+ <id-auto-logout-modal v-if="autoLogoutModal" @closed="autoLoginClose" />
125
123
  </template>
126
124
 
127
125
  <style scoped></style>
@@ -85,10 +85,10 @@ async function onSubmit() {
85
85
  novalidate
86
86
  @submit.prevent="onSubmit"
87
87
  >
88
- <h2 class="text-center text-2xl font-bold">
88
+ <h2 class="text-center text-h2">
89
89
  {{ t('modals.id.newPassword.title') }}
90
90
  </h2>
91
- <p class="text-center text-sm">
91
+ <p class="text-center text-body-md">
92
92
  {{ t('modals.id.newPassword.content') }}
93
93
  </p>
94
94
 
@@ -114,7 +114,7 @@ async function onSubmit() {
114
114
  {{ t('actions.set') }}
115
115
  </a-button>
116
116
 
117
- <p class="text-center text-sm">
117
+ <p class="text-center text-body-md">
118
118
  {{ t('reuse.or') }}
119
119
  </p>
120
120
 
@@ -126,10 +126,10 @@ function moveFocus(index: number, to: string) {
126
126
  type="text"
127
127
  inputmode="numeric"
128
128
  maxlength="1"
129
- class="size-10 rounded bg-deepblue-900/5 text-center text-lg caret-transparent focus:outline-none dark:bg-[#E3E5E80D]"
129
+ class="size-10 rounded bg-muted text-center text-lg caret-transparent focus:outline-hidden"
130
130
  :class="{
131
- 'border border-[#E74135] bg-[#E741351A] dark:border-[#F47E75] dark:bg-[#F47E751A]': showError,
132
- 'focus:border focus:border-blue-700 dark:focus:border-blue-500': !showError,
131
+ 'border border-danger bg-danger/10': showError,
132
+ 'focus:border focus:border-focus': !showError,
133
133
  }"
134
134
  @input="onInput($event, index)"
135
135
  @keydown.backspace="onBackspace(index, $event)"
@@ -5,13 +5,13 @@ const { t } = useI18n()
5
5
 
6
6
  <template>
7
7
  <div class="flex flex-col gap-4 text-center">
8
- <h2 class="text-2xl font-bold">
8
+ <h2 class="text-h2">
9
9
  {{ t('modals.id.passwordSuccessful.title') }}
10
10
  </h2>
11
- <span class="mx-auto size-[100px] rounded-full bg-[#BDC7CE26]">
11
+ <span class="mx-auto size-[100px] rounded-full bg-muted">
12
12
  <a-ill-ok />
13
13
  </span>
14
- <p class="text-sm">
14
+ <p class="text-body-md">
15
15
  {{ t('modals.id.passwordSuccessful.content') }}
16
16
  </p>
17
17
  <a-button @click="passwordSuccessfulModal = false">
@@ -87,10 +87,10 @@ onBeforeUnmount(() => {
87
87
  novalidate
88
88
  @submit.prevent="onSubmit"
89
89
  >
90
- <h2 class="text-center text-2xl font-bold">
90
+ <h2 class="text-center text-h2">
91
91
  {{ t('modals.id.recovery.title') }}
92
92
  </h2>
93
- <p class="text-center text-sm">
93
+ <p class="text-center text-body-md">
94
94
  {{ t('modals.id.recovery.content') }}
95
95
  </p>
96
96
  <a-input-standard
@@ -101,7 +101,7 @@ onBeforeUnmount(() => {
101
101
  <a-button :loading="loading">
102
102
  {{ t('actions.recover') }}
103
103
  </a-button>
104
- <p class="text-center text-sm">
104
+ <p class="text-center text-body-md">
105
105
  {{ t('reuse.or') }}
106
106
  </p>
107
107
  <a-button
@@ -149,10 +149,10 @@ onBeforeUnmount(() => {
149
149
  novalidate
150
150
  @submit.prevent="onSubmit"
151
151
  >
152
- <h2 class="text-center text-2xl font-bold">
152
+ <h2 class="text-center text-h2">
153
153
  {{ t('modals.id.register.title') }}
154
154
  </h2>
155
- <p class="text-center text-sm">
155
+ <p class="text-center text-body-md">
156
156
  {{ t('modals.id.register.subtitle') }}
157
157
  </p>
158
158
  <a-input-standard
@@ -187,7 +187,7 @@ onBeforeUnmount(() => {
187
187
  <i18n-t keypath="modals.id.register.agreement.text">
188
188
  <template #link>
189
189
  <nuxt-link-locale
190
- class="text-blue-700"
190
+ class="text-brand"
191
191
  @click="getUrl"
192
192
  >
193
193
  {{ t('modals.id.register.agreement.link') }}
@@ -201,7 +201,7 @@ onBeforeUnmount(() => {
201
201
  >
202
202
  {{ t('modals.id.register.continue') }}
203
203
  </a-button>
204
- <p class="text-center text-sm">
204
+ <p class="text-center text-body-md">
205
205
  {{ t('modals.id.register.haveAcc') }}
206
206
  </p>
207
207
  <a-button
@@ -108,24 +108,25 @@ onBeforeUnmount(() => {
108
108
 
109
109
  <template>
110
110
  <div class="flex flex-col items-center gap-4 text-center">
111
- <h2 class="text-2xl font-bold">
111
+ <h2 class="text-h2">
112
112
  {{ t('modals.id.resetPasswordOtp.title') }}
113
113
  </h2>
114
114
 
115
+ <!-- осознанно константный: пара light/dark-ассетов, тема переключается dark:-классами -->
115
116
  <a-icon-hand-with-phone-light class="size-32 dark:hidden" />
116
117
  <a-icon-hand-with-phone-dark class="hidden size-32 dark:block" />
117
118
 
118
- <div class="text-sm">
119
+ <div class="text-body-md">
119
120
  <p class="mb-1">
120
121
  {{ t('modals.id.resetPasswordOtp.content') }}
121
122
  </p>
122
123
 
123
- <div v-if="timer > 0" class="text-2xl font-bold">
124
+ <div v-if="timer > 0" class="text-h2">
124
125
  {{ timer }} {{ t('modals.id.resetPasswordOtp.seconds') }}
125
126
  </div>
126
127
  <button
127
128
  v-else
128
- class="text-blue-700 dark:text-blue-500 flex items-center gap-2 mx-auto"
129
+ class="text-brand flex items-center gap-2 mx-auto"
129
130
  @click="onResend"
130
131
  :disabled="isResendLoading"
131
132
  >
@@ -96,9 +96,10 @@ onBeforeUnmount(() => {
96
96
 
97
97
  <template>
98
98
  <div class="flex flex-col items-center gap-4">
99
- <p class="heading-02 text-center">
99
+ <p class="text-h2 text-center">
100
100
  {{ t('modals.id.twoFactor.title') }}
101
101
  </p>
102
+ <!-- осознанно константный: пара light/dark-ассетов, тема переключается dark:-классами -->
102
103
  <a-icon-hand-with-phone-light class="size-32 dark:hidden" />
103
104
  <a-icon-hand-with-phone-dark class="hidden size-32 dark:block" />
104
105
  <id-otp-input
@@ -106,7 +107,7 @@ onBeforeUnmount(() => {
106
107
  v-model:error="showError"
107
108
  @on-completed="onConfirm"
108
109
  />
109
- <p class="body-400 text-center">
110
+ <p class="text-body-md text-center">
110
111
  {{ t('modals.id.twoFactor.code') }}
111
112
  </p>
112
113
 
@@ -56,17 +56,17 @@ const profile: string = 'modals.mobile_navigation.type_profile'
56
56
  </script>
57
57
 
58
58
  <template>
59
- <header class="mx-3 mb-3 overflow-hidden rounded-full border border-deepblue-900/10 bg-gray-50/20 shadow-lg backdrop-blur-lg dark:border-gray-200/10 dark:bg-gray-900/30">
59
+ <header class="mx-3 mb-3 overflow-hidden rounded-full border border-default bg-subtle shadow-lg backdrop-blur-lg">
60
60
  <div class="grid w-full grid-cols-3 justify-items-center">
61
61
  <slot>
62
62
  <button
63
63
  v-for="(item, index) in items"
64
64
  :key="index"
65
- class="h-16 w-auto min-w-16 max-w-[168px] lg:hover:bg-blue-700/20 lg:hover:text-blue-700"
66
- :class="{ grow, 'text-blue-700': modelValue === item.value }"
65
+ class="h-16 w-auto min-w-16 max-w-[168px] lg:hover:bg-brand-subtle lg:hover:text-link-hover"
66
+ :class="{ grow, 'text-brand': modelValue === item.value }"
67
67
  @click="onClick(item.value)"
68
68
  >
69
- <span class="flex flex-col items-center justify-center text-[10px] leading-5 lg:text-sm">
69
+ <span class="flex flex-col items-center justify-center text-body-sm lg:text-body-md">
70
70
  <template v-if="Object.prototype.hasOwnProperty.call(item, 'icon')">
71
71
  <component
72
72
  :is="item.icon"
@@ -81,9 +81,9 @@ const profile: string = 'modals.mobile_navigation.type_profile'
81
81
  class="h-16 w-auto min-w-16 max-w-[168px]"
82
82
  @click="onClick('profile')"
83
83
  >
84
- <span class="flex flex-col items-center justify-center text-[10px] leading-5 lg:text-sm">
84
+ <span class="flex flex-col items-center justify-center text-body-sm lg:text-body-md">
85
85
  <avatar
86
- class="bg-gray outline-blue size-6 rounded-full"
86
+ class="size-6 rounded-full bg-muted outline-(--border-color-focus)"
87
87
  />
88
88
  {{ t(profile) }}
89
89
  </span>
@@ -93,7 +93,7 @@ const profile: string = 'modals.mobile_navigation.type_profile'
93
93
  class="h-16 w-auto min-w-16 max-w-[168px]"
94
94
  @click="goAuth"
95
95
  >
96
- <span class="flex flex-col items-center justify-center text-[10px] leading-5 lg:text-sm">
96
+ <span class="flex flex-col items-center justify-center text-body-sm lg:text-body-md">
97
97
  <icon-logout class="lg:size-6" />
98
98
  {{ t(login) }}
99
99
  </span>
@@ -46,12 +46,12 @@ const items = computed<Item[]>(() => {
46
46
  v-if="item.kind === 'ellipsis'"
47
47
  class="flex items-center gap-2"
48
48
  >
49
- <span class="text-[#CAD5E2] dark:text-gray-600">
49
+ <span class="text-icon-disabled">
50
50
  <a-icon-chevron-right class="size-4" />
51
51
  </span>
52
52
  <button
53
53
  type="button"
54
- class="flex size-[18px] items-center justify-center rounded text-[#62748E] transition-colors hover:text-deepblue-900 dark:text-gray-400 dark:hover:text-gray-200"
54
+ class="flex size-[18px] items-center justify-center rounded text-quaternary transition-colors hover:text-primary"
55
55
  :aria-label="t('actions.showMore')"
56
56
  @click="expanded = true"
57
57
  >
@@ -62,7 +62,7 @@ const items = computed<Item[]>(() => {
62
62
  v-else
63
63
  :class="
64
64
  twMerge(
65
- 'flex items-center gap-2 text-body-md text-[#62748E] underline-offset-2 last-of-type:font-semibold last-of-type:text-deepblue-900 hover:underline dark:text-gray-400 dark:last-of-type:text-gray-200',
65
+ 'flex items-center gap-2 text-body-md text-quaternary underline-offset-2 last-of-type:font-semibold last-of-type:text-primary hover:underline',
66
66
  customClasses,
67
67
  )
68
68
  "
@@ -81,7 +81,7 @@ const items = computed<Item[]>(() => {
81
81
  >
82
82
  <span
83
83
  v-if="idx !== 0"
84
- class="text-[#CAD5E2] dark:text-gray-600"
84
+ class="text-icon-disabled"
85
85
  >
86
86
  <a-icon-chevron-right class="size-4" />
87
87
  </span>
@@ -166,7 +166,7 @@ const contactLinks = computed(() => ({
166
166
  <template>
167
167
  <footer
168
168
  id="footer"
169
- class="rounded-t-2xl bg-deepblue-900 py-4 dark:bg-gray-900 lg:py-5"
169
+ class="rounded-t-[32px] bg-secondary-500 py-4 lg:py-5 dark:bg-black"
170
170
  >
171
171
  <div class="a-container mobile-padding flex flex-col justify-between gap-8 py-5 text-white lg:flex-row">
172
172
  <div class="flex flex-col justify-between gap-8">
@@ -221,7 +221,7 @@ const contactLinks = computed(() => ({
221
221
  <!-- noindex -->
222
222
  <div class="flex flex-col items-start gap-2" data-nosnippet>
223
223
  <nuxt-link
224
- class="cursor-pointer border-b-[0.5px] border-white pb-3 pr-4 text-body-md-strong"
224
+ class="cursor-pointer border-b-[0.5px] border-current pr-4 pb-3 text-body-md-strong"
225
225
  :to="contactLinks.link?.replace(/\/$/, '')"
226
226
  >
227
227
  {{ contactLinks.title }}
@@ -40,7 +40,7 @@ const filterCheck = computed(() => {
40
40
  <div class="flex flex-col items-start gap-2">
41
41
  <div class="flex w-full justify-between gap-2">
42
42
  <nuxt-link
43
- class="cursor-default text-body-md-strong lg:border-b-[0.5px] lg:border-white lg:pb-3 lg:pr-4"
43
+ class="cursor-default text-body-md-strong lg:border-b-[0.5px] lg:border-current lg:pb-3 lg:pr-4"
44
44
  :class="{ 'cursor-pointer': link }"
45
45
  :to="link?.replace(/\/$/, '')"
46
46
  >
@@ -107,7 +107,7 @@ onMounted(() => {
107
107
  <system-notification />
108
108
  <header
109
109
  ref="headerRef"
110
- class="relative h-16 border-b border-deepblue-900/10 bg-gray-50/20 backdrop-blur-lg dark:border-gray-200/10 dark:bg-gray-900/30"
110
+ class="relative h-16 border-b border-default bg-main/72 backdrop-blur-[14px] backdrop-saturate-140"
111
111
  >
112
112
  <div class="a-container mobile-padding flex h-full items-center justify-between gap-2">
113
113
  <!-- Desktop hidden -->
@@ -117,7 +117,7 @@ onMounted(() => {
117
117
  >
118
118
  <div
119
119
  v-if="mobileHeaderType === 'default'"
120
- class="text-deepblue dark:text-[#E3E5E8]"
120
+ class="text-primary"
121
121
  @click="goToAnotherModule"
122
122
  >
123
123
  <span class="visually-hidden"> Сервисы Adata.kz</span>
@@ -132,15 +132,15 @@ onMounted(() => {
132
132
  class="flex w-full items-center gap-2 lg:hidden"
133
133
  >
134
134
  <logo
135
- class="dark:text-gray-200"
135
+ class=""
136
136
  @click="goToAnotherModule"
137
137
  />
138
138
  <button
139
- class="flex w-full items-center gap-2 rounded-full border border-gray-300/50 bg-white/30 px-4 py-1.5 backdrop-blur-sm dark:border-gray-600/50 dark:bg-white/5 dark:text-gray-300"
139
+ class="flex w-full items-center gap-2 rounded-full border border-strong/50 bg-main/30 px-4 py-1.5 backdrop-blur-sm"
140
140
  @click="$emit('search')"
141
141
  >
142
- <a-icon-search class="text-gray-400 dark:text-gray-500" />
143
- <span class="text-body-md text-gray-500 dark:text-gray-400">{{ t('header.search') }}</span>
142
+ <a-icon-search class="text-icon-disabled" />
143
+ <span class="text-body-md text-secondary">{{ t('header.search') }}</span>
144
144
  </button>
145
145
  </div>
146
146
  </section>
@@ -161,7 +161,7 @@ onMounted(() => {
161
161
  <nuxt-link-locale
162
162
  aria-label="Adata-logo"
163
163
  :to="buildLocalizedUrl(locale, urls.landing)"
164
- class="text-deepblue cursor-pointer dark:text-[#E3E5E8]"
164
+ class="cursor-pointer text-primary"
165
165
  data-test-id="header-main-adata-logo"
166
166
  @click="goToAnotherModule"
167
167
  >
@@ -172,7 +172,7 @@ onMounted(() => {
172
172
  </nuxt-link-locale>
173
173
  <header-link :menu-top="headerBottom || 64" />
174
174
  </nav>
175
- <div class="text-deepblue hidden items-center gap-4 dark:text-[#E3E5E8] lg:flex">
175
+ <div class="hidden items-center gap-4 text-primary lg:flex">
176
176
  <header-usage
177
177
  v-if="isAuthenticated"
178
178
  :limit-remaining="limitRemaining"
@@ -197,10 +197,10 @@ onMounted(() => {
197
197
  <template #default="{ toggle, isOpen }">
198
198
  <button
199
199
  type="button"
200
- class="hidden h-8 cursor-pointer items-center gap-1.5 rounded-full px-3 text-body-md-medium transition-colors duration-150 hover:bg-deepblue-900/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:ring-offset-1 dark:hover:bg-white/10 dark:focus-visible:ring-offset-gray-900 lg:inline-flex"
200
+ class="hidden h-8 cursor-pointer items-center gap-1.5 rounded-full px-3 text-body-md-medium transition-colors duration-150 hover:bg-action-secondary-hover focus-visible:ring-2 focus-visible:ring-brand-500/50 focus-visible:ring-offset-1 focus-visible:outline-hidden lg:inline-flex"
201
201
  :class="isOpen
202
- ? 'bg-deepblue-900/10 text-deepblue-900 dark:bg-white/15 dark:text-white'
203
- : 'text-gray-900 dark:text-gray-100'"
202
+ ? 'bg-action-secondary-hover text-primary'
203
+ : 'text-primary'"
204
204
  data-test-id="header-email-text"
205
205
  :aria-label="email"
206
206
  @click.stop="toggle"
@@ -62,7 +62,7 @@ const newContacts = computed(() => contacts.value.map(item => ({
62
62
  {{ item.title }}
63
63
  </div>
64
64
  <a
65
- class="flex items-center gap-1 text-deepblue-900 dark:text-white"
65
+ class="flex items-center gap-1 text-primary"
66
66
  :href="item.to"
67
67
  >
68
68
  <component
@@ -85,7 +85,7 @@ const newContacts = computed(() => contacts.value.map(item => ({
85
85
  <a
86
86
  v-for="link in newContacts"
87
87
  :key="link.subtitle"
88
- class="flex gap-1 text-deepblue-900 dark:text-white 2xl:items-center"
88
+ class="flex gap-1 text-primary 2xl:items-center"
89
89
  :href="link.to"
90
90
  :target="link.icon === Whatsapp ? '_blank' : '_self'"
91
91
  >
@@ -104,16 +104,16 @@ const newContacts = computed(() => contacts.value.map(item => ({
104
104
  <a
105
105
  v-for="link in technicalSupport"
106
106
  :key="link.subtitle"
107
- class="flex gap-1 text-deepblue-900 dark:text-white 2xl:items-center"
107
+ class="flex gap-1 text-primary 2xl:items-center"
108
108
  :href="link.to"
109
109
  target="_blank"
110
110
  >
111
- <div class="line-clamp-1 text-body-md text-blue-600">
111
+ <div class="line-clamp-1 text-body-md text-brand">
112
112
  {{ link.subtitle }}
113
113
  </div>
114
114
  <component
115
115
  :is="link.icon"
116
- class="stroke-blue-600"
116
+ class="stroke-icon-brand"
117
117
  />
118
118
  </a>
119
119
  </div>
@@ -130,10 +130,10 @@ const newContacts = computed(() => contacts.value.map(item => ({
130
130
  <!-- to="https://api.whatsapp.com/send?phone=77713954561" -->
131
131
  <!-- target="_blank" -->
132
132
  <!-- > -->
133
- <!-- <div class="body-400 line-clamp-1 text-blue-600"> -->
133
+ <!-- <div class="body-400 line-clamp-1 text-brand"> -->
134
134
  <!-- {{ t('header.contacts.almaty.financeDep.linkTitle') }} -->
135
135
  <!-- </div> -->
136
- <!-- <a-icon-expand-window class="stroke-blue-600"/> -->
136
+ <!-- <a-icon-expand-window class="stroke-icon-brand"/> -->
137
137
  <!-- </nuxt-link> -->
138
138
  <!-- </div> -->
139
139
  </div>
@@ -1,22 +1,22 @@
1
1
  <template>
2
2
  <!--noindex-->
3
3
  <div class="h-[272px]" data-nosnippet>
4
- <h2 class="heading-02 mb-4">
4
+ <h2 class="text-h2 mb-4">
5
5
  {{ t('header.contacts.astana.title') }}
6
6
  </h2>
7
7
  <div class="grid grid-cols-2 gap-5 ">
8
8
  <div class="xl:grid grid-cols-2 grid-rows-3 flex flex-wrap gap-4 ">
9
9
  <div v-for="(item, index) in AstanaItems" class="flex flex-col gap-2 " :class="{'col-span-2':index===0 }">
10
- <div class="heading-04">
10
+ <div class="text-h5">
11
11
  {{ item.title }}
12
12
  </div>
13
13
  <a
14
- class="flex items-center gap-1 text-deepblue-900 dark:text-white"
14
+ class="flex items-center gap-1 text-primary"
15
15
  :href="item?.to"
16
16
  :target="item.icon === Whatsapp ? '_blank' : '_self'"
17
17
  >
18
18
  <component :is="item.icon"/>
19
- <div class=" body-400">
19
+ <div class=" text-body-md">
20
20
  {{ item.subtitle }}
21
21
  </div>
22
22
  </a>
@@ -122,27 +122,28 @@ onUnmounted(() => clearTimer())
122
122
  :src="items[currentIndex].image"
123
123
  class="size-full object-cover rounded-xl"
124
124
  />
125
+ <!-- осознанно константный: белый текст/иконки и bg-white/50-точки на брендовом оверлее поверх изображения -->
125
126
  <nuxt-link-locale :to="items[currentIndex].to">
126
- <div class="absolute bottom-0 rounded-xl w-full bg-blue-700/80 dark:bg-blue-500/80 px-4 pt-4 pb-12 shadow-[0_-2px_4px_0_rgba(0,0,0,0.25)] backdrop-blur-md flex flex-col gap-6">
127
+ <div class="absolute bottom-0 flex w-full flex-col gap-6 rounded-xl bg-brand/80 px-4 pb-12 pt-4 shadow-[0_-2px_4px_0] shadow-surface-dark/25 backdrop-blur-md">
127
128
  <div class="flex flex-col gap-2">
128
129
  <div class="flex items-center justify-between">
129
130
  <div class="flex items-center gap-2">
130
- <div class="flex items-center justify-center bg-white dark:bg-gray-900 text-blue-700 dark:text-blue-500 size-8 rounded-md">
131
+ <div class="flex items-center justify-center bg-main text-brand size-8 rounded-md">
131
132
  <component
132
133
  :is="items[currentIndex].icon"
133
134
  class="size-6"
134
135
  />
135
136
  </div>
136
- <p class="normal-case text-white dark:text-gray-900 font-semibold text-xl">
137
+ <p class="normal-case text-white text-h3">
137
138
  {{ t(items[currentIndex].title) }}
138
139
  </p>
139
140
  </div>
140
141
  <a-icon-arrow-side-up
141
- class="icon-link size-6 text-white dark:text-gray-900"
142
+ class="icon-link size-6 text-white"
142
143
  :class="{ 'visible': isHovered }"
143
144
  />
144
145
  </div>
145
- <p class="normal-case text-white font-semibold dark:text-gray-900">
146
+ <p class="normal-case text-white font-semibold">
146
147
  {{ t(items[currentIndex].subtitle) }}
147
148
  </p>
148
149
  </div>
@@ -155,13 +156,13 @@ onUnmounted(() => clearTimer())
155
156
  <div
156
157
  v-for="(item, index) in items"
157
158
  :key="index"
158
- class="relative bg-white/50 dark:bg-gray-900/50 rounded-full overflow-hidden cursor-pointer h-2 w-2 transition-[width] duration-500 ease-[cubic-bezier(0.22,1,0.36,1)]"
159
+ class="relative bg-white/50 rounded-full overflow-hidden cursor-pointer h-2 w-2 transition-[width] duration-500 ease-[cubic-bezier(0.22,1,0.36,1)]"
159
160
  :class="{ 'w-[52px]': currentIndex === index }"
160
161
  @click="setCurrentIndex(index)"
161
162
  >
162
163
  <div
163
164
  v-if="currentIndex === index"
164
- class="absolute inset-0 bg-white dark:bg-gray-900 progress-bar"
165
+ class="absolute inset-0 bg-main progress-bar"
165
166
  :style="{ animationPlayState: isHovered ? 'paused' : 'running' }"
166
167
  />
167
168
  </div>
@@ -21,7 +21,7 @@ const options = [
21
21
 
22
22
  <template>
23
23
  <div class="normal-case">
24
- <div class="bg-white dark:bg-gray-950">
24
+ <div class="bg-main">
25
25
  <div class="a-container">
26
26
  <div class="mb-8 flex justify-between pt-2">
27
27
  <a-pill-tabs
@@ -131,7 +131,7 @@ onBeforeUnmount(() => {
131
131
  <li
132
132
  v-for="(nav, index) in navs"
133
133
  :key="nav.label"
134
- class="relative after:absolute after:right-0 after:top-1/2 after:h-6 after:w-px after:-translate-y-1/2 after:bg-gray-300 last:after:hidden dark:after:bg-gray-700"
134
+ class="relative after:absolute after:right-0 after:top-1/2 after:h-6 after:w-px after:-translate-y-1/2 after:bg-(--border-color-strong) last:after:hidden"
135
135
  :data-test-id="nav.dataAttribute"
136
136
  role="listitem"
137
137
  >
@@ -139,15 +139,15 @@ onBeforeUnmount(() => {
139
139
  type="button"
140
140
  class="group relative cursor-pointer px-3 py-2 font-bold uppercase tracking-tight transition-colors duration-150"
141
141
  :class="isActive(index)
142
- ? 'text-blue-700 dark:text-blue-400'
143
- : 'text-deepblue-900 hover:text-blue-700 dark:text-gray-200 dark:hover:text-blue-400'"
142
+ ? 'text-brand'
143
+ : 'text-primary hover:text-link-hover'"
144
144
  @mouseenter="scheduleOpen(index)"
145
145
  @mouseleave="clearHoverTimer"
146
146
  @click="toggleMenu(index)"
147
147
  >
148
148
  {{ t(nav.label) }}
149
149
  <span
150
- class="absolute inset-x-3 -bottom-0.5 h-0.5 origin-left rounded-full bg-blue-600 transition-transform duration-200 dark:bg-blue-400"
150
+ class="absolute inset-x-3 -bottom-0.5 h-0.5 origin-left rounded-full bg-brand transition-transform duration-200"
151
151
  :class="isActive(index) ? 'scale-x-100' : 'scale-x-0 group-hover:scale-x-100'"
152
152
  />
153
153
  </button>
@@ -162,7 +162,7 @@ onBeforeUnmount(() => {
162
162
  :style="{ top: `${menuTop}px`, height: `calc(100dvh - ${menuTop}px)` }"
163
163
  >
164
164
  <div
165
- class="absolute inset-0 bg-gray-900/30 backdrop-blur dark:bg-black/50"
165
+ class="absolute inset-0 bg-overlay backdrop-blur"
166
166
  @click="closeMenu"
167
167
  @mouseover="onOverlayHover"
168
168
  />