@donkit-ai/design-system 0.2.8 → 0.2.10

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.
package/README.md CHANGED
@@ -38,7 +38,7 @@ npm install @donkit-ai/design-system@latest
38
38
  ## Компоненты
39
39
 
40
40
  - **Button** - кнопки с вариантами (primary, secondary, ghost) и размерами (small, medium, large)
41
- - **Tabs** - вкладки с вариантами secondary border) и ghost (без border), состоянием selected (small, medium, large)
41
+ - **Tabs** - вкладки с состоянием selected в трех размерах (small, medium, large)
42
42
  - **Input** - текстовые поля с поддержкой иконок, ошибок и подсказок (small, medium)
43
43
  - **Stepper** - числовое поле с кнопками +/- для изменения значения (small, medium)
44
44
  - **Card** - карточки двух типов: info (информационная, прозрачный фон) и interactive (интерактивная с hover эффектом)
@@ -200,13 +200,13 @@ document.documentElement.setAttribute('data-theme', 'light');
200
200
  - Font Family: **Fira Mono** (fallback: SF Mono, Monaco, Cascadia Code, Roboto Mono, monospace)
201
201
 
202
202
  **Размеры шрифтов (mobile → tablet → desktop):**
203
- - `--font-size-h1`: 36px → 40px → 48px
204
- - `--font-size-h2`: 28px → 32px → 36px
205
- - `--font-size-h3`: 24px → 28px → 32px
206
- - `--font-size-h4`: 16px → 20px → 24px
207
- - `--font-size-p1`: 16px → 16px20px
208
- - `--font-size-p2`: 12px → 16px → 16px
209
- - `--font-size-p3`: 12px → 12px → 14px
203
+ - `--font-size-h1`: 32px → 40px → 40px
204
+ - `--font-size-h2`: 28px → 36px → 36px
205
+ - `--font-size-h3`: 24px → 28px → 28px
206
+ - `--font-size-h4`: 18px → 20px → 20px
207
+ - `--font-size-p1`: 16px → 18px18px
208
+ - `--font-size-p2`: 14px → 16px → 16px
209
+ - `--font-size-p3`: 12px → 14px → 14px
210
210
 
211
211
  **Letter Spacing (трекинг для мелких кеглей):**
212
212
  - Меньше 20px → +2% (0.02em)
@@ -214,10 +214,10 @@ document.documentElement.setAttribute('data-theme', 'light');
214
214
  - Меньше 14px → +6% (0.06em)
215
215
 
216
216
  Адаптивные значения трекинга:
217
- - `--letter-spacing-h4`: 0.02em → 0 → 0 (16px / 20px / 24px)
218
- - `--letter-spacing-p1`: 0.02em → 0.02em → 0 (16px / 16px / 20px)
219
- - `--letter-spacing-p2`: 0.06em → 0.02em → 0.02em (12px / 16px / 16px)
220
- - `--letter-spacing-p3`: 0.06em → 0.06em → 0.04em (12px / 12px / 14px)
217
+ - `--letter-spacing-h4`: 0.02em → 0 → 0 (18px / 20px / 20px)
218
+ - `--letter-spacing-p1`: 0.02em → 0.02em → 0.02em (16px / 18px / 18px)
219
+ - `--letter-spacing-p2`: 0.04em → 0.02em → 0.02em (14px / 16px / 16px)
220
+ - `--letter-spacing-p3`: 0.06em → 0.04em → 0.04em (12px / 14px / 14px)
221
221
 
222
222
  ### Переходы
223
223
 
@@ -327,27 +327,14 @@ document.documentElement.setAttribute('data-theme', 'light');
327
327
 
328
328
  ### Tabs
329
329
 
330
- Вкладки с двумя вариантами оформления: secondary (с border) и ghost (без border).
330
+ Вкладки с минималистичным дизайном без border.
331
331
 
332
332
  ```jsx
333
333
  import { Tabs, Tab } from '@donkit-ai/design-system';
334
334
  import { AlertCircle } from 'lucide-react';
335
335
 
336
- // Secondary tabs (default) - с border
337
- <Tabs size="medium" variant="secondary">
338
- <Tab selected={selectedTab === 'tab1'} onClick={() => setSelectedTab('tab1')}>
339
- Overview
340
- </Tab>
341
- <Tab selected={selectedTab === 'tab2'} onClick={() => setSelectedTab('tab2')}>
342
- Details
343
- </Tab>
344
- <Tab selected={selectedTab === 'tab3'} onClick={() => setSelectedTab('tab3')}>
345
- Settings
346
- </Tab>
347
- </Tabs>
348
-
349
- // Ghost tabs - без border, минималистичный стиль
350
- <Tabs size="medium" variant="ghost">
336
+ // Basic tabs
337
+ <Tabs size="medium">
351
338
  <Tab selected={selectedTab === 'tab1'} onClick={() => setSelectedTab('tab1')}>
352
339
  Overview
353
340
  </Tab>
@@ -360,7 +347,7 @@ import { AlertCircle } from 'lucide-react';
360
347
  </Tabs>
361
348
 
362
349
  // With icons (всегда 20px для Tabs)
363
- <Tabs size="small" variant="secondary">
350
+ <Tabs size="small">
364
351
  <Tab
365
352
  selected={selectedTab === 'alerts'}
366
353
  onClick={() => setSelectedTab('alerts')}
@@ -374,19 +361,16 @@ import { AlertCircle } from 'lucide-react';
374
361
  </Tabs>
375
362
 
376
363
  // Disabled tab
377
- <Tabs size="medium" variant="secondary">
364
+ <Tabs size="medium">
378
365
  <Tab selected>Active</Tab>
379
366
  <Tab disabled>Disabled</Tab>
380
367
  </Tabs>
381
368
  ```
382
369
 
383
- **Варианты:**
384
- - **secondary** (default) - с border, как вторичные кнопки
385
- - Selected: фон `--color-item-bg-selected`, border `--color-border-selected`
386
- - Hover: фон `--color-item-bg-hover`, border `--color-border-hover`
387
- - **ghost** - без border, минималистичный
388
- - Selected: фон `--color-item-bg-selected`
389
- - Hover: фон `--color-item-bg-hover`
370
+ **Стили:**
371
+ - Selected: фон `--color-item-bg-selected`, текст `--color-txt-icon-1`
372
+ - Hover: фон `--color-item-bg-hover`, текст `--color-txt-icon-1`
373
+ - Default: текст `--color-txt-icon-2`
390
374
 
391
375
  **Размеры:** small, medium, large
392
376
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@donkit-ai/design-system",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "Donkit Design System - minimal design tokens and React components",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -4,7 +4,6 @@
4
4
  gap: var(--space-s);
5
5
  padding: var(--space-s);
6
6
  border-radius: var(--radius-s);
7
- border: 1px solid;
8
7
  }
9
8
 
10
9
  .ds-alert--no-title {
@@ -59,7 +58,6 @@
59
58
  /* Variants */
60
59
  .ds-alert--info {
61
60
  background: linear-gradient(var(--color-status-info-bg), var(--color-status-info-bg)), var(--color-bg);
62
- border-color: var(--color-status-info);
63
61
  color: var(--color-status-info);
64
62
  }
65
63
 
@@ -69,7 +67,6 @@
69
67
 
70
68
  .ds-alert--success {
71
69
  background: linear-gradient(var(--color-status-success-bg), var(--color-status-success-bg)), var(--color-bg);
72
- border-color: var(--color-status-success);
73
70
  color: var(--color-status-success);
74
71
  }
75
72
 
@@ -79,7 +76,6 @@
79
76
 
80
77
  .ds-alert--warning {
81
78
  background: linear-gradient(var(--color-status-warning-bg), var(--color-status-warning-bg)), var(--color-bg);
82
- border-color: var(--color-status-warning);
83
79
  color: var(--color-status-warning);
84
80
  }
85
81
 
@@ -89,7 +85,6 @@
89
85
 
90
86
  .ds-alert--error {
91
87
  background: linear-gradient(var(--color-status-error-bg), var(--color-status-error-bg)), var(--color-bg);
92
- border-color: var(--color-status-error);
93
88
  color: var(--color-status-error);
94
89
  }
95
90
 
@@ -24,35 +24,29 @@
24
24
  .ds-badge--default {
25
25
  background-color: var(--color-item-bg);
26
26
  color: var(--color-txt-icon-2);
27
- border: 1px solid var(--color-txt-icon-2);
28
27
  }
29
28
 
30
29
  .ds-badge--info {
31
30
  background-color: var(--color-status-info-bg);
32
31
  color: var(--color-status-info);
33
- border: 1px solid var(--color-status-info);
34
32
  }
35
33
 
36
34
  .ds-badge--success {
37
35
  background-color: var(--color-status-success-bg);
38
36
  color: var(--color-status-success);
39
- border: 1px solid var(--color-status-success);
40
37
  }
41
38
 
42
39
  .ds-badge--warning {
43
40
  background-color: var(--color-status-warning-bg);
44
41
  color: var(--color-status-warning);
45
- border: 1px solid var(--color-status-warning);
46
42
  }
47
43
 
48
44
  .ds-badge--error {
49
45
  background-color: var(--color-status-error-bg);
50
46
  color: var(--color-status-error);
51
- border: 1px solid var(--color-status-error);
52
47
  }
53
48
 
54
49
  .ds-badge--accent {
55
50
  background-color: var(--color-red-10);
56
51
  color: var(--color-accent);
57
- border: 1px solid var(--color-accent);
58
52
  }
@@ -59,22 +59,22 @@
59
59
 
60
60
  /* Sizes */
61
61
  .ds-button--small {
62
- height: calc(20px + var(--space-xs) * 2);
63
- padding: 0 var(--space-s);
62
+ height: var(--height-s);
63
+ padding: 0 calc(var(--height-s) / 2);
64
64
  font-size: var(--font-size-p2);
65
65
  border-radius: var(--radius-xs);
66
66
  }
67
67
 
68
68
  .ds-button--medium {
69
- height: calc(24px + var(--space-s) * 2);
70
- padding: 0 var(--space-s);
69
+ height: var(--height-m);
70
+ padding: 0 calc(var(--height-m) / 2);
71
71
  font-size: var(--font-size-p1);
72
72
  border-radius: var(--radius-s);
73
73
  }
74
74
 
75
75
  .ds-button--large {
76
- height: calc(28px + var(--space-m) * 2);
77
- padding: 0 var(--space-m);
76
+ height: var(--height-l);
77
+ padding: 0 calc(var(--height-l) / 2);
78
78
  font-size: var(--font-size-h4);
79
79
  border-radius: var(--radius-s);
80
80
  gap: var(--space-s);
@@ -59,33 +59,33 @@
59
59
 
60
60
  /* Sizes */
61
61
  .ds-input--small {
62
- height: calc(20px + var(--space-xs) * 2);
63
- padding: 0 var(--space-s);
62
+ height: var(--height-s);
63
+ padding: 0 calc(var(--height-s) / 4);
64
64
  font-size: var(--font-size-p2);
65
65
  border-radius: var(--radius-xs);
66
66
  }
67
67
 
68
68
  .ds-input--medium {
69
- height: calc(24px + var(--space-s) * 2);
70
- padding: 0 var(--space-s);
69
+ height: var(--height-m);
70
+ padding: 0 calc(var(--height-m) / 4);
71
71
  font-size: var(--font-size-p1);
72
72
  border-radius: var(--radius-s);
73
73
  }
74
74
 
75
75
  .ds-input--with-icon.ds-input--small {
76
- padding-left: calc(var(--space-s) + 20px + var(--space-xs));
76
+ padding-left: calc(var(--height-s) / 4 + 20px + var(--height-s) / 4);
77
77
  }
78
78
 
79
79
  .ds-input--with-icon.ds-input--medium {
80
- padding-left: calc(var(--space-s) + 24px + var(--space-xs));
80
+ padding-left: calc(var(--height-m) / 4 + 24px + var(--height-m) / 4);
81
81
  }
82
82
 
83
83
  .ds-input--with-icon-right.ds-input--small {
84
- padding-right: calc(var(--space-s) + 20px + var(--space-xs));
84
+ padding-right: calc(var(--height-s) / 4 + 20px + var(--height-s) / 4);
85
85
  }
86
86
 
87
87
  .ds-input--with-icon-right.ds-input--medium {
88
- padding-right: calc(var(--space-s) + 24px + var(--space-xs));
88
+ padding-right: calc(var(--height-m) / 4 + 24px + var(--height-m) / 4);
89
89
  }
90
90
 
91
91
  .ds-input-icon {
@@ -97,11 +97,11 @@
97
97
  }
98
98
 
99
99
  .ds-input-icon--small {
100
- left: var(--space-xs);
100
+ left: 8px;
101
101
  }
102
102
 
103
103
  .ds-input-icon--medium {
104
- left: var(--space-s);
104
+ left: 11px;
105
105
  }
106
106
 
107
107
  .ds-input-icon-right {
@@ -122,11 +122,11 @@
122
122
  }
123
123
 
124
124
  .ds-input-icon-right--small {
125
- right: var(--space-xs);
125
+ right: 8px;
126
126
  }
127
127
 
128
128
  .ds-input-icon-right--medium {
129
- right: var(--space-s);
129
+ right: 11px;
130
130
  }
131
131
 
132
132
  .ds-input-hint {
@@ -61,15 +61,15 @@
61
61
 
62
62
  /* Sizes */
63
63
  .ds-select-trigger--small {
64
- height: calc(20px + var(--space-xs) * 2);
65
- padding: 0 var(--space-s);
64
+ height: var(--height-s);
65
+ padding: 0 calc(var(--height-s) / 4);
66
66
  font-size: var(--font-size-p2);
67
67
  border-radius: var(--radius-xs);
68
68
  }
69
69
 
70
70
  .ds-select-trigger--medium {
71
- height: calc(24px + var(--space-s) * 2);
72
- padding: 0 var(--space-s);
71
+ height: var(--height-m);
72
+ padding: 0 calc(var(--height-m) / 4);
73
73
  font-size: var(--font-size-p1);
74
74
  border-radius: var(--radius-s);
75
75
  }
@@ -135,14 +135,14 @@
135
135
  }
136
136
 
137
137
  .ds-select-option--small {
138
- min-height: calc(20px + var(--space-xs) * 2);
139
- padding: var(--space-xs) var(--space-s);
138
+ min-height: var(--height-s);
139
+ padding: var(--space-xs) calc(var(--height-s) / 4);
140
140
  font-size: var(--font-size-p2);
141
141
  }
142
142
 
143
143
  .ds-select-option--medium {
144
- min-height: calc(24px + var(--space-s) * 2);
145
- padding: var(--space-s);
144
+ min-height: var(--height-m);
145
+ padding: var(--space-xs) calc(var(--height-m) / 4);
146
146
  font-size: var(--font-size-p1);
147
147
  }
148
148
 
@@ -100,13 +100,13 @@
100
100
 
101
101
  /* Small */
102
102
  .ds-stepper--small .ds-stepper-button {
103
- width: 32px;
104
- height: 32px;
103
+ width: var(--height-s);
104
+ height: var(--height-s);
105
105
  padding: 0;
106
106
  }
107
107
 
108
108
  .ds-stepper--small .ds-stepper-input {
109
- height: 32px;
109
+ height: var(--height-s);
110
110
  font-size: var(--font-size-p2);
111
111
  letter-spacing: var(--letter-spacing-p2);
112
112
  padding: 0 var(--space-xs);
@@ -114,13 +114,13 @@
114
114
 
115
115
  /* Medium */
116
116
  .ds-stepper--medium .ds-stepper-button {
117
- width: 40px;
118
- height: 40px;
117
+ width: var(--height-m);
118
+ height: var(--height-m);
119
119
  padding: 0;
120
120
  }
121
121
 
122
122
  .ds-stepper--medium .ds-stepper-input {
123
- height: 40px;
123
+ height: var(--height-m);
124
124
  font-size: var(--font-size-p1);
125
125
  letter-spacing: var(--letter-spacing-p1);
126
126
  padding: 0 var(--space-s);
@@ -56,7 +56,7 @@ export function Stepper({
56
56
  disabled && 'ds-stepper--disabled',
57
57
  ].filter(Boolean).join(' ');
58
58
 
59
- const iconSize = size === 'small' ? 16 : 20;
59
+ const iconSize = size === 'small' ? 20 : 24;
60
60
 
61
61
  return (
62
62
  <div className={className}>
@@ -20,20 +20,6 @@
20
20
  }
21
21
 
22
22
  /* Variants */
23
- .ds-tab--secondary {
24
- border: 1px solid var(--color-border);
25
- }
26
-
27
- .ds-tab--secondary:hover:not(.ds-tab--selected):not(:disabled) {
28
- background-color: var(--color-item-bg-hover);
29
- border-color: var(--color-border-hover);
30
- }
31
-
32
- .ds-tab--secondary.ds-tab--selected {
33
- background-color: var(--color-item-bg-selected);
34
- border-color: var(--color-border-selected);
35
- }
36
-
37
23
  .ds-tab--ghost {
38
24
  border: none;
39
25
  color: var(--color-txt-icon-2);
@@ -51,22 +37,22 @@
51
37
 
52
38
  /* Sizes */
53
39
  .ds-tab--small {
54
- height: calc(20px + var(--space-xs) * 2);
55
- padding: 0 var(--space-s);
40
+ height: var(--height-s);
41
+ padding: 0 calc(var(--height-s) / 2);
56
42
  font-size: var(--font-size-p2);
57
43
  border-radius: var(--radius-xs);
58
44
  }
59
45
 
60
46
  .ds-tab--medium {
61
- height: calc(24px + var(--space-s) * 2);
62
- padding: 0 var(--space-s);
47
+ height: var(--height-m);
48
+ padding: 0 calc(var(--height-m) / 2);
63
49
  font-size: var(--font-size-p1);
64
50
  border-radius: var(--radius-s);
65
51
  }
66
52
 
67
53
  .ds-tab--large {
68
- height: calc(28px + var(--space-m) * 2);
69
- padding: 0 var(--space-m);
54
+ height: var(--height-l);
55
+ padding: 0 calc(var(--height-l) / 2);
70
56
  font-size: var(--font-size-p1);
71
57
  border-radius: var(--radius-s);
72
58
  gap: var(--space-s);
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import './Tabs.css';
3
3
 
4
- export function Tabs({ children, size = 'medium', variant = 'secondary', ...props }) {
4
+ export function Tabs({ children, size = 'medium', variant = 'ghost', ...props }) {
5
5
  return (
6
6
  <div className="ds-tabs" role="tablist" {...props}>
7
7
  {React.Children.map(children, (child) => {
@@ -14,7 +14,7 @@ export function Tabs({ children, size = 'medium', variant = 'secondary', ...prop
14
14
  );
15
15
  }
16
16
 
17
- export function Tab({ children, selected = false, onClick, size = 'medium', variant = 'secondary', disabled = false, icon, ...props }) {
17
+ export function Tab({ children, selected = false, onClick, size = 'medium', variant = 'ghost', disabled = false, icon, ...props }) {
18
18
  const isIconOnly = icon && !children;
19
19
 
20
20
  const className = [
@@ -28,8 +28,10 @@
28
28
  transition: border-color var(--transition-normal);
29
29
  line-height: 1.5;
30
30
  resize: vertical;
31
- /* Кастомный resize handle (уголок) */
32
- background-image: linear-gradient(135deg, transparent 0%, transparent 50%, var(--color-border) 50%, var(--color-border) 56%, transparent 56%, transparent 62%, var(--color-border) 62%, var(--color-border) 68%, transparent 68%);
31
+ /* Кастомный resize handle */
32
+ background:
33
+ linear-gradient(135deg, transparent 6px, var(--color-border) 6px, var(--color-border) 7px, transparent 7px),
34
+ linear-gradient(135deg, transparent 10px, var(--color-border) 10px, var(--color-border) 11px, transparent 11px);
33
35
  background-repeat: no-repeat;
34
36
  background-position: bottom right;
35
37
  background-size: 12px 12px;
@@ -41,14 +43,24 @@
41
43
 
42
44
  .ds-textarea:hover:not(:disabled) {
43
45
  border-color: var(--color-border-hover);
44
- background-image: linear-gradient(135deg, transparent 0%, transparent 50%, var(--color-border-hover) 50%, var(--color-border-hover) 56%, transparent 56%, transparent 62%, var(--color-border-hover) 62%, var(--color-border-hover) 68%, transparent 68%);
46
+ background:
47
+ linear-gradient(135deg, transparent 6px, var(--color-border-hover) 6px, var(--color-border-hover) 7px, transparent 7px),
48
+ linear-gradient(135deg, transparent 10px, var(--color-border-hover) 10px, var(--color-border-hover) 11px, transparent 11px);
49
+ background-repeat: no-repeat;
50
+ background-position: bottom right;
51
+ background-size: 12px 12px;
45
52
  }
46
53
 
47
54
  .ds-textarea:focus,
48
55
  .ds-textarea:active {
49
56
  outline: none;
50
57
  border-color: var(--color-border-hover);
51
- background-image: linear-gradient(135deg, transparent 0%, transparent 50%, var(--color-border-hover) 50%, var(--color-border-hover) 56%, transparent 56%, transparent 62%, var(--color-border-hover) 62%, var(--color-border-hover) 68%, transparent 68%);
58
+ background:
59
+ linear-gradient(135deg, transparent 6px, var(--color-border-hover) 6px, var(--color-border-hover) 7px, transparent 7px),
60
+ linear-gradient(135deg, transparent 10px, var(--color-border-hover) 10px, var(--color-border-hover) 11px, transparent 11px);
61
+ background-repeat: no-repeat;
62
+ background-position: bottom right;
63
+ background-size: 12px 12px;
52
64
  }
53
65
 
54
66
  .ds-textarea:disabled {
@@ -57,12 +69,17 @@
57
69
 
58
70
  .ds-textarea--error {
59
71
  border-color: var(--color-error);
60
- background-image: linear-gradient(135deg, transparent 0%, transparent 50%, var(--color-error) 50%, var(--color-error) 56%, transparent 56%, transparent 62%, var(--color-error) 62%, var(--color-error) 68%, transparent 68%);
72
+ background:
73
+ linear-gradient(135deg, transparent 6px, var(--color-error) 6px, var(--color-error) 7px, transparent 7px),
74
+ linear-gradient(135deg, transparent 10px, var(--color-error) 10px, var(--color-error) 11px, transparent 11px);
75
+ background-repeat: no-repeat;
76
+ background-position: bottom right;
77
+ background-size: 12px 12px;
61
78
  }
62
79
 
63
80
  .ds-textarea--no-resize {
64
81
  resize: none;
65
- background-image: none;
82
+ background: none;
66
83
  }
67
84
 
68
85
  /* Sizes */
@@ -10,6 +10,7 @@
10
10
  * ===================================*/
11
11
  /* Color primitives - white */
12
12
  --color-white: #FFFAFA;
13
+ --color-white-95: rgba(255, 250, 250, 0.95);
13
14
  --color-white-65: rgba(255, 250, 250, 0.65);
14
15
  --color-white-50: rgba(255, 250, 250, 0.5);
15
16
  --color-white-40: rgba(255, 250, 250, 0.4);
@@ -20,6 +21,7 @@
20
21
 
21
22
  /* Color primitives - black */
22
23
  --color-black: #0E0F11;
24
+ --color-black-95: rgba(14, 15, 17, 0.95);
23
25
  --color-black-65: rgba(14, 15, 17, 0.65);
24
26
  --color-black-60: rgba(14, 15, 17, 0.6);
25
27
  --color-black-50: rgba(14, 15, 17, 0.5);
@@ -65,7 +67,7 @@
65
67
  --color-border: var(--color-white-20);
66
68
  --color-border-hover: var(--color-white-40);
67
69
  --color-border-selected: var(--color-white-50);
68
- --color-txt-icon-1: var(--color-white);
70
+ --color-txt-icon-1: var(--color-white-95);
69
71
  --color-txt-icon-2: var(--color-white-65);
70
72
  --color-accent: var(--color-red);
71
73
  --color-accent-hover: var(--color-red-90);
@@ -92,7 +94,7 @@
92
94
  --color-border: var(--color-black-20);
93
95
  --color-border-hover: var(--color-black-40);
94
96
  --color-border-selected: var(--color-black-50);
95
- --color-txt-icon-1: var(--color-black);
97
+ --color-txt-icon-1: var(--color-black-95);
96
98
  --color-txt-icon-2: var(--color-black-65);
97
99
  --color-accent: var(--color-red);
98
100
  --color-accent-hover: var(--color-red-90);
@@ -160,13 +162,22 @@
160
162
  /* =====================================
161
163
  * 4) Border radius
162
164
  * ===================================*/
163
- --radius-xs: 2px;
164
- --radius-s: 4px;
165
+ --radius-xs: 4px;
166
+ --radius-s: 6px;
165
167
  }
166
168
 
167
169
  :root {
168
170
  /* =====================================
169
- * 5) Typography scale (mobile/tablet/desktop)
171
+ * 5) Component heights
172
+ * ===================================*/
173
+ --height-s: 32px;
174
+ --height-m: 44px;
175
+ --height-l: 56px;
176
+ }
177
+
178
+ :root {
179
+ /* =====================================
180
+ * 6) Typography scale (mobile/tablet/desktop)
170
181
  * ===================================*/
171
182
  /* Base typography settings */
172
183
  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
@@ -174,21 +185,21 @@
174
185
  font-weight: 400;
175
186
 
176
187
  /* Mobile (default) */
177
- --font-size-h1: 36px;
188
+ --font-size-h1: 32px;
178
189
  --font-size-h2: 28px;
179
190
  --font-size-h3: 24px;
180
- --font-size-h4: 16px;
191
+ --font-size-h4: 18px;
181
192
  --font-size-p1: 16px;
182
- --font-size-p2: 12px;
193
+ --font-size-p2: 14px;
183
194
  --font-size-p3: 12px;
184
195
 
185
196
  /* Letter spacing (tracking) for small font sizes */
186
197
  --letter-spacing-h1: 0;
187
198
  --letter-spacing-h2: 0;
188
199
  --letter-spacing-h3: 0;
189
- --letter-spacing-h4: 0.02em; /* 16px → +2% */
200
+ --letter-spacing-h4: 0.02em; /* 18px → +2% */
190
201
  --letter-spacing-p1: 0.02em; /* 16px → +2% */
191
- --letter-spacing-p2: 0.06em; /* 12px → +6% */
202
+ --letter-spacing-p2: 0.04em; /* 14px → +4% */
192
203
  --letter-spacing-p3: 0.06em; /* 12px → +6% */
193
204
  }
194
205
 
@@ -196,33 +207,33 @@
196
207
  :root {
197
208
  /* Tablet */
198
209
  --font-size-h1: 40px;
199
- --font-size-h2: 32px;
210
+ --font-size-h2: 36px;
200
211
  --font-size-h3: 28px;
201
212
  --font-size-h4: 20px;
202
- --font-size-p1: 16px;
213
+ --font-size-p1: 18px;
203
214
  --font-size-p2: 16px;
204
- --font-size-p3: 12px;
215
+ --font-size-p3: 14px;
205
216
 
206
217
  --letter-spacing-h4: 0; /* 20px → no tracking */
207
- --letter-spacing-p1: 0.02em; /* 16px → +2% */
218
+ --letter-spacing-p1: 0.02em; /* 18px → +2% */
208
219
  --letter-spacing-p2: 0.02em; /* 16px → +2% */
209
- --letter-spacing-p3: 0.06em; /* 12px → +6% */
220
+ --letter-spacing-p3: 0.04em; /* 14px → +4% */
210
221
  }
211
222
  }
212
223
 
213
224
  @media (min-width: 1280px) {
214
225
  :root {
215
226
  /* Desktop */
216
- --font-size-h1: 48px;
227
+ --font-size-h1: 40px;
217
228
  --font-size-h2: 36px;
218
- --font-size-h3: 32px;
219
- --font-size-h4: 24px;
220
- --font-size-p1: 20px;
229
+ --font-size-h3: 28px;
230
+ --font-size-h4: 20px;
231
+ --font-size-p1: 18px;
221
232
  --font-size-p2: 16px;
222
233
  --font-size-p3: 14px;
223
234
 
224
- --letter-spacing-h4: 0; /* 24px → no tracking */
225
- --letter-spacing-p1: 0; /* 20pxno tracking */
235
+ --letter-spacing-h4: 0; /* 20px → no tracking */
236
+ --letter-spacing-p1: 0.02em; /* 18px+2% */
226
237
  --letter-spacing-p2: 0.02em; /* 16px → +2% */
227
238
  --letter-spacing-p3: 0.04em; /* 14px → +4% */
228
239
  }
@@ -230,7 +241,7 @@
230
241
 
231
242
  :root {
232
243
  /* =====================================
233
- * 5) Additional layout tokens
244
+ * 7) Additional layout tokens
234
245
  * ===================================*/
235
246
  /* Mobile (default) */
236
247
  --page-padding-hor: 16px;