@tokis/theme 1.0.0

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 (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/package.json +69 -0
  4. package/src/base/index.css +19 -0
  5. package/src/base/reset.css +76 -0
  6. package/src/base/variables.css +206 -0
  7. package/src/components/accordion.css +124 -0
  8. package/src/components/alert.css +196 -0
  9. package/src/components/app-bar.css +69 -0
  10. package/src/components/avatar.css +199 -0
  11. package/src/components/bottom-nav.css +79 -0
  12. package/src/components/button.css +213 -0
  13. package/src/components/card.css +248 -0
  14. package/src/components/charts.css +38 -0
  15. package/src/components/checkbox.css +158 -0
  16. package/src/components/circular-progress.css +62 -0
  17. package/src/components/codeblock.css +229 -0
  18. package/src/components/command-palette.css +183 -0
  19. package/src/components/confirm-dialog.css +95 -0
  20. package/src/components/context-menu.css +82 -0
  21. package/src/components/dialog.css +149 -0
  22. package/src/components/drawer.css +167 -0
  23. package/src/components/dropdown.css +33 -0
  24. package/src/components/emptystate.css +42 -0
  25. package/src/components/extended.css +663 -0
  26. package/src/components/hover-card.css +29 -0
  27. package/src/components/index.css +40 -0
  28. package/src/components/infinite-scroll.css +45 -0
  29. package/src/components/input.css +201 -0
  30. package/src/components/nav-rail.css +104 -0
  31. package/src/components/navigation.css +273 -0
  32. package/src/components/pagination.css +91 -0
  33. package/src/components/progress.css +192 -0
  34. package/src/components/result.css +58 -0
  35. package/src/components/search-field.css +102 -0
  36. package/src/components/select.css +175 -0
  37. package/src/components/slider.css +115 -0
  38. package/src/components/snackbar.css +234 -0
  39. package/src/components/statistic.css +70 -0
  40. package/src/components/stepper.css +131 -0
  41. package/src/components/switch.css +107 -0
  42. package/src/components/tabs.css +152 -0
  43. package/src/components/timeline.css +125 -0
  44. package/src/components/toggle.css +103 -0
  45. package/src/components/tooltip.css +113 -0
  46. package/src/components/treeview.css +107 -0
  47. package/src/components/virtual-list.css +19 -0
  48. package/src/index.css +6 -0
  49. package/src/utilities/index.css +2 -0
  50. package/src/utilities/layout.css +28 -0
@@ -0,0 +1,196 @@
1
+ /* ============================================================
2
+ Tokis — Alert & Snackbar / Toast
3
+ ============================================================ */
4
+
5
+ /* ── Alert ──────────────────────────────────────────────────── */
6
+
7
+ .tokis-alert {
8
+ display: flex;
9
+ gap: var(--tokis-spacing-3);
10
+ padding: var(--tokis-spacing-4);
11
+ border-radius: var(--tokis-radius-lg);
12
+ border-left: 3px solid transparent;
13
+ font-size: var(--tokis-font-size-sm);
14
+ line-height: var(--tokis-line-height-normal);
15
+ animation: tokis-alert-in 250ms var(--tokis-ease-spring) both;
16
+ }
17
+
18
+ @keyframes tokis-alert-in {
19
+ from { opacity: 0; transform: translateY(-6px); }
20
+ to { opacity: 1; transform: translateY(0); }
21
+ }
22
+
23
+ .tokis-alert--info {
24
+ background: var(--tokis-color-info-subtle);
25
+ color: var(--tokis-color-info);
26
+ border-left-color: var(--tokis-color-info);
27
+ }
28
+ .tokis-alert--success {
29
+ background: var(--tokis-color-success-subtle);
30
+ color: var(--tokis-color-success);
31
+ border-left-color: var(--tokis-color-success);
32
+ }
33
+ .tokis-alert--warning {
34
+ background: var(--tokis-color-warning-subtle);
35
+ color: var(--tokis-color-warning);
36
+ border-left-color: var(--tokis-color-warning);
37
+ }
38
+ .tokis-alert--error {
39
+ background: var(--tokis-color-error-subtle);
40
+ color: var(--tokis-color-error);
41
+ border-left-color: var(--tokis-color-error);
42
+ }
43
+
44
+ /* Dark mode: softer, more readable versions */
45
+ [data-theme="dark"] .tokis-alert--info { background: rgb(2 132 199 / 0.12); }
46
+ [data-theme="dark"] .tokis-alert--success { background: rgb(22 163 74 / 0.12); }
47
+ [data-theme="dark"] .tokis-alert--warning { background: rgb(217 119 6 / 0.12); }
48
+ [data-theme="dark"] .tokis-alert--error { background: rgb(220 38 38 / 0.12); }
49
+
50
+ .tokis-alert__icon { flex-shrink: 0; margin-top: 1px; }
51
+ .tokis-alert__body { flex: 1; min-width: 0; }
52
+ .tokis-alert__title {
53
+ font-weight: var(--tokis-font-weight-semibold);
54
+ margin-bottom: var(--tokis-spacing-1);
55
+ }
56
+ .tokis-alert__message {
57
+ color: inherit;
58
+ opacity: 0.8;
59
+ font-size: var(--tokis-font-size-xs);
60
+ line-height: var(--tokis-line-height-normal);
61
+ margin-top: 2px;
62
+ }
63
+ .tokis-alert__close {
64
+ flex-shrink: 0;
65
+ cursor: pointer;
66
+ opacity: 0.6;
67
+ transition: opacity var(--tokis-duration-fast) var(--tokis-ease-out);
68
+ background: none;
69
+ border: none;
70
+ color: inherit;
71
+ padding: 0;
72
+ display: flex;
73
+ align-items: center;
74
+ outline: none;
75
+ border-radius: var(--tokis-radius-sm);
76
+ align-self: flex-start;
77
+ }
78
+ .tokis-alert__close:hover { opacity: 1; }
79
+ .tokis-alert__close:focus-visible { box-shadow: 0 0 0 2px var(--tokis-color-focus-ring); }
80
+
81
+ /* ── Snackbar / Toast container ─────────────────────────────── */
82
+
83
+ .tokis-snackbar-container {
84
+ position: fixed;
85
+ bottom: var(--tokis-spacing-6);
86
+ right: var(--tokis-spacing-6);
87
+ z-index: var(--tokis-z-toast);
88
+ display: flex;
89
+ flex-direction: column;
90
+ gap: var(--tokis-spacing-2);
91
+ max-width: 400px;
92
+ width: calc(100% - var(--tokis-spacing-8));
93
+ pointer-events: none;
94
+ }
95
+ .tokis-snackbar-container--top-right { top: var(--tokis-spacing-6); bottom: auto; right: var(--tokis-spacing-6); }
96
+ .tokis-snackbar-container--top-center { top: var(--tokis-spacing-6); bottom: auto; left: 50%; right: auto; transform: translateX(-50%); }
97
+ .tokis-snackbar-container--bottom-center { bottom: var(--tokis-spacing-6); left: 50%; right: auto; transform: translateX(-50%); }
98
+
99
+ /* ── Snackbar / Toast ───────────────────────────────────────── */
100
+
101
+ .tokis-snackbar {
102
+ display: flex;
103
+ align-items: flex-start;
104
+ gap: var(--tokis-spacing-3);
105
+ padding: var(--tokis-spacing-3) var(--tokis-spacing-4);
106
+ background: var(--tokis-color-neutral-900);
107
+ color: var(--tokis-text-inverse);
108
+ border-radius: var(--tokis-radius-lg);
109
+ box-shadow: var(--tokis-shadow-xl);
110
+ font-size: var(--tokis-font-size-sm);
111
+ animation: tokis-snackbar-in var(--tokis-duration-normal) var(--tokis-ease-spring);
112
+ min-width: 280px;
113
+ pointer-events: all;
114
+ border: 1px solid rgb(255 255 255 / 0.08);
115
+ border-left-width: 3px;
116
+ border-left-color: rgb(255 255 255 / 0.15);
117
+ }
118
+
119
+ [data-theme="dark"] .tokis-snackbar {
120
+ background: var(--tokis-color-neutral-800);
121
+ color: var(--tokis-text-primary);
122
+ border-color: var(--tokis-color-border);
123
+ border-left-color: var(--tokis-color-border-strong);
124
+ }
125
+
126
+ /* Variant color accents — minimal, left-border only */
127
+ .tokis-snackbar--success {
128
+ border-left-color: var(--tokis-color-success);
129
+ }
130
+ .tokis-snackbar--error {
131
+ border-left-color: var(--tokis-color-error);
132
+ }
133
+ .tokis-snackbar--warning {
134
+ border-left-color: var(--tokis-color-warning);
135
+ }
136
+ .tokis-snackbar--info {
137
+ border-left-color: var(--tokis-color-info);
138
+ }
139
+
140
+ .tokis-snackbar__icon { flex-shrink: 0; margin-top: 1px; }
141
+ .tokis-snackbar__body { flex: 1; min-width: 0; }
142
+ .tokis-snackbar__title {
143
+ font-weight: var(--tokis-font-weight-semibold);
144
+ margin-bottom: 2px;
145
+ }
146
+ .tokis-snackbar__message {
147
+ opacity: 0.75;
148
+ font-size: var(--tokis-font-size-xs);
149
+ line-height: 1.4;
150
+ }
151
+ .tokis-snackbar__action {
152
+ font-weight: var(--tokis-font-weight-medium);
153
+ text-decoration: underline;
154
+ text-underline-offset: 2px;
155
+ cursor: pointer;
156
+ background: none;
157
+ border: none;
158
+ color: inherit;
159
+ font-size: inherit;
160
+ padding: 0;
161
+ opacity: 0.9;
162
+ white-space: nowrap;
163
+ }
164
+ .tokis-snackbar__action:hover { opacity: 1; }
165
+ .tokis-snackbar__close {
166
+ flex-shrink: 0;
167
+ cursor: pointer;
168
+ opacity: 0.7;
169
+ background: none;
170
+ border: none;
171
+ color: inherit;
172
+ display: flex;
173
+ align-items: center;
174
+ padding: 0;
175
+ transition: opacity var(--tokis-duration-fast) var(--tokis-ease-out);
176
+ outline: none;
177
+ border-radius: var(--tokis-radius-sm);
178
+ align-self: flex-start;
179
+ }
180
+ .tokis-snackbar__close:hover { opacity: 1; }
181
+ .tokis-snackbar__close:focus-visible { box-shadow: 0 0 0 2px rgb(255 255 255 / 0.4); }
182
+
183
+ /* ── Animations ─────────────────────────────────────────────── */
184
+
185
+ @keyframes tokis-snackbar-in {
186
+ from { opacity: 0; transform: translateX(24px) scale(0.96); }
187
+ to { opacity: 1; transform: translateX(0) scale(1); }
188
+ }
189
+
190
+ /* ── Reduced motion ─────────────────────────────────────────── */
191
+
192
+ @media (prefers-reduced-motion: reduce) {
193
+ .tokis-alert { animation: none; }
194
+ .tokis-snackbar { animation: none; }
195
+ .tokis-alert__close, .tokis-snackbar__close { transition: none; }
196
+ }
@@ -0,0 +1,69 @@
1
+ /* ── AppBar ──────────────────────────────────────────────── */
2
+
3
+ .tokis-app-bar {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: var(--tokis-spacing-3);
7
+ padding: 0 var(--tokis-spacing-4);
8
+ height: 56px;
9
+ background: var(--tokis-color-background);
10
+ border-bottom: 1px solid var(--tokis-color-border);
11
+ width: 100%;
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ /* Variants */
16
+ .tokis-app-bar--primary {
17
+ background: var(--tokis-color-primary);
18
+ border-bottom-color: transparent;
19
+ color: var(--tokis-text-on-primary);
20
+ }
21
+
22
+ .tokis-app-bar--transparent {
23
+ background: transparent;
24
+ border-bottom-color: transparent;
25
+ }
26
+
27
+ /* Elevation */
28
+ .tokis-app-bar--elevation-sm {
29
+ box-shadow: var(--tokis-shadow-sm);
30
+ border-bottom: none;
31
+ }
32
+
33
+ .tokis-app-bar--elevation-md {
34
+ box-shadow: var(--tokis-shadow-md);
35
+ border-bottom: none;
36
+ }
37
+
38
+ /* Sticky */
39
+ .tokis-app-bar--sticky {
40
+ position: sticky;
41
+ top: 0;
42
+ z-index: var(--tokis-z-dropdown);
43
+ }
44
+
45
+ /* Slots */
46
+ .tokis-app-bar__leading {
47
+ flex-shrink: 0;
48
+ display: flex;
49
+ align-items: center;
50
+ }
51
+
52
+ .tokis-app-bar__title {
53
+ flex: 1;
54
+ min-width: 0;
55
+ font-size: var(--tokis-font-size-base);
56
+ font-weight: var(--tokis-font-weight-semibold);
57
+ color: inherit;
58
+ white-space: nowrap;
59
+ overflow: hidden;
60
+ text-overflow: ellipsis;
61
+ }
62
+
63
+ .tokis-app-bar__trailing {
64
+ flex-shrink: 0;
65
+ display: flex;
66
+ align-items: center;
67
+ gap: var(--tokis-spacing-2);
68
+ margin-left: auto;
69
+ }
@@ -0,0 +1,199 @@
1
+ /* ============================================================
2
+ Tokis — Avatar, Badge, Chip / Tag
3
+ ============================================================ */
4
+
5
+ /* ── Avatar ─────────────────────────────────────────────────── */
6
+
7
+ .tokis-avatar {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ border-radius: var(--tokis-radius-full);
12
+ background: var(--tokis-color-primary-subtle);
13
+ color: var(--tokis-color-primary);
14
+ font-weight: var(--tokis-font-weight-semibold);
15
+ font-size: var(--tokis-font-size-sm);
16
+ letter-spacing: var(--tokis-letter-spacing-wide);
17
+ overflow: hidden;
18
+ flex-shrink: 0;
19
+ position: relative;
20
+ width: 40px;
21
+ height: 40px;
22
+ user-select: none;
23
+ }
24
+
25
+ .tokis-avatar--xs { width: 24px; height: 24px; font-size: 9px; }
26
+ .tokis-avatar--sm { width: 32px; height: 32px; font-size: var(--tokis-font-size-xs); }
27
+ .tokis-avatar--lg { width: 48px; height: 48px; font-size: var(--tokis-font-size-md); }
28
+ .tokis-avatar--xl { width: 64px; height: 64px; font-size: var(--tokis-font-size-xl); }
29
+ .tokis-avatar--2xl { width: 80px; height: 80px; font-size: var(--tokis-font-size-2xl); }
30
+
31
+ .tokis-avatar--square { border-radius: var(--tokis-radius-md); }
32
+ .tokis-avatar--sm.tokis-avatar--square { border-radius: var(--tokis-radius-sm); }
33
+ .tokis-avatar--lg.tokis-avatar--square { border-radius: var(--tokis-radius-lg); }
34
+
35
+ .tokis-avatar img {
36
+ width: 100%;
37
+ height: 100%;
38
+ object-fit: cover;
39
+ display: block;
40
+ }
41
+
42
+ /* Status indicator */
43
+ .tokis-avatar-status {
44
+ position: absolute;
45
+ bottom: 1px;
46
+ right: 1px;
47
+ width: 10px;
48
+ height: 10px;
49
+ border-radius: var(--tokis-radius-full);
50
+ border: 2px solid var(--tokis-color-background);
51
+ background: var(--tokis-color-neutral-400);
52
+ }
53
+ .tokis-avatar-status--online { background: var(--tokis-color-success); }
54
+ .tokis-avatar-status--away { background: var(--tokis-color-warning); }
55
+ .tokis-avatar-status--busy { background: var(--tokis-color-error); }
56
+
57
+ /* Avatar Group */
58
+ .tokis-avatar-group {
59
+ display: flex;
60
+ align-items: center;
61
+ }
62
+ .tokis-avatar-group .tokis-avatar {
63
+ border: 2px solid var(--tokis-color-background);
64
+ margin-left: -8px;
65
+ }
66
+ .tokis-avatar-group .tokis-avatar:first-child {
67
+ margin-left: 0;
68
+ }
69
+ .tokis-avatar-group .tokis-avatar-overflow {
70
+ background: var(--tokis-color-neutral-200);
71
+ color: var(--tokis-text-secondary);
72
+ font-size: var(--tokis-font-size-xs);
73
+ font-weight: var(--tokis-font-weight-semibold);
74
+ border: 2px solid var(--tokis-color-background);
75
+ margin-left: -8px;
76
+ }
77
+
78
+ /* ── Badge ──────────────────────────────────────────────────── */
79
+
80
+ .tokis-badge {
81
+ display: inline-flex;
82
+ align-items: center;
83
+ gap: var(--tokis-spacing-1);
84
+ padding: 2px var(--tokis-spacing-2);
85
+ font-size: var(--tokis-font-size-xs);
86
+ font-weight: var(--tokis-font-weight-medium);
87
+ line-height: 1.5;
88
+ border-radius: var(--tokis-radius-full);
89
+ white-space: nowrap;
90
+ letter-spacing: 0.01em;
91
+ animation: tokis-badge-pop 200ms var(--tokis-ease-spring) both;
92
+ }
93
+
94
+ @keyframes tokis-badge-pop {
95
+ from { transform: scale(0.5); opacity: 0; }
96
+ to { transform: scale(1); opacity: 1; }
97
+ }
98
+
99
+ .tokis-badge--default { background: var(--tokis-color-neutral-100); color: var(--tokis-text-secondary); }
100
+ .tokis-badge--primary { background: var(--tokis-color-primary-subtle); color: var(--tokis-color-primary); }
101
+ .tokis-badge--success { background: var(--tokis-color-success-subtle); color: var(--tokis-color-success); }
102
+ .tokis-badge--warning { background: var(--tokis-color-warning-subtle); color: var(--tokis-color-warning); }
103
+ .tokis-badge--error { background: var(--tokis-color-error-subtle); color: var(--tokis-color-error); }
104
+ .tokis-badge--info { background: var(--tokis-color-info-subtle); color: var(--tokis-color-info); }
105
+
106
+ .tokis-badge--solid-primary { background: var(--tokis-color-primary); color: var(--tokis-text-on-primary); }
107
+ .tokis-badge--solid-success { background: var(--tokis-color-success); color: var(--tokis-text-inverse); }
108
+ .tokis-badge--solid-warning { background: var(--tokis-color-warning); color: var(--tokis-color-neutral-900); }
109
+ .tokis-badge--solid-error { background: var(--tokis-color-error); color: var(--tokis-text-inverse); }
110
+
111
+ .tokis-badge--outline {
112
+ background: transparent;
113
+ border: 1px solid currentColor;
114
+ }
115
+
116
+ .tokis-badge--dot::before {
117
+ content: '';
118
+ display: inline-block;
119
+ width: 6px;
120
+ height: 6px;
121
+ border-radius: var(--tokis-radius-full);
122
+ background: currentColor;
123
+ flex-shrink: 0;
124
+ }
125
+
126
+ /* ── Chip / Tag ─────────────────────────────────────────────── */
127
+
128
+ .tokis-chip {
129
+ display: inline-flex;
130
+ align-items: center;
131
+ gap: var(--tokis-spacing-1);
132
+ padding: var(--tokis-spacing-1) var(--tokis-spacing-3);
133
+ font-size: var(--tokis-font-size-sm);
134
+ font-weight: var(--tokis-font-weight-medium);
135
+ background: var(--tokis-color-surface-hover);
136
+ color: var(--tokis-text-primary);
137
+ border: 1px solid var(--tokis-color-border);
138
+ border-radius: var(--tokis-radius-full);
139
+ cursor: default;
140
+ user-select: none;
141
+ transition:
142
+ transform 150ms var(--tokis-ease-spring),
143
+ background var(--tokis-duration-fast) var(--tokis-ease-out),
144
+ border-color var(--tokis-duration-fast) var(--tokis-ease-out);
145
+ line-height: 1.5;
146
+ }
147
+
148
+ .tokis-chip--clickable {
149
+ cursor: pointer;
150
+ outline: none;
151
+ }
152
+ .tokis-chip--clickable:hover {
153
+ background: var(--tokis-color-surface-active);
154
+ border-color: var(--tokis-color-border-strong);
155
+ }
156
+ .tokis-chip--clickable:focus-visible {
157
+ box-shadow: 0 0 0 3px var(--tokis-color-focus-ring);
158
+ }
159
+
160
+ .tokis-chip--selected {
161
+ background: var(--tokis-color-primary-subtle);
162
+ color: var(--tokis-color-primary);
163
+ border-color: var(--tokis-color-primary);
164
+ transform: scale(1.04);
165
+ }
166
+ .tokis-chip--selected:hover {
167
+ background: var(--tokis-color-primary-subtle);
168
+ }
169
+
170
+ .tokis-chip__icon { flex-shrink: 0; display: inline-flex; align-items: center; }
171
+ .tokis-chip__delete {
172
+ display: inline-flex;
173
+ align-items: center;
174
+ justify-content: center;
175
+ width: 16px;
176
+ height: 16px;
177
+ border-radius: var(--tokis-radius-full);
178
+ color: currentColor;
179
+ cursor: pointer;
180
+ opacity: 0.55;
181
+ transition: opacity var(--tokis-duration-fast) var(--tokis-ease-out), background var(--tokis-duration-fast) var(--tokis-ease-out);
182
+ margin-right: -4px;
183
+ flex-shrink: 0;
184
+ border: none;
185
+ background: none;
186
+ padding: 0;
187
+ }
188
+ .tokis-chip__delete:hover {
189
+ opacity: 1;
190
+ background: var(--tokis-color-surface-active);
191
+ }
192
+
193
+ /* ── Reduced motion ─────────────────────────────────────────── */
194
+
195
+ @media (prefers-reduced-motion: reduce) {
196
+ .tokis-badge { animation: none; }
197
+ .tokis-chip { transition: none; transform: none !important; }
198
+ .tokis-chip__delete { transition: none; }
199
+ }
@@ -0,0 +1,79 @@
1
+ /* ── BottomNavigation ────────────────────────────────────── */
2
+
3
+ .tokis-bottom-nav {
4
+ display: flex;
5
+ align-items: stretch;
6
+ background: var(--tokis-color-surface-overlay);
7
+ border-top: 1px solid var(--tokis-color-border);
8
+ width: 100%;
9
+ box-shadow: var(--tokis-shadow-lg);
10
+ }
11
+
12
+ .tokis-bottom-nav__item {
13
+ flex: 1;
14
+ display: flex;
15
+ flex-direction: column;
16
+ align-items: center;
17
+ justify-content: center;
18
+ gap: 3px;
19
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-1);
20
+ background: transparent;
21
+ border: none;
22
+ cursor: pointer;
23
+ color: var(--tokis-text-tertiary);
24
+ transition: color var(--tokis-duration-fast) var(--tokis-ease-out),
25
+ background var(--tokis-duration-fast) var(--tokis-ease-out);
26
+ font-family: var(--tokis-font-family);
27
+ min-height: 56px;
28
+ }
29
+
30
+ .tokis-bottom-nav__item:hover {
31
+ background: var(--tokis-color-surface-hover);
32
+ color: var(--tokis-text-secondary);
33
+ }
34
+
35
+ .tokis-bottom-nav__item--active {
36
+ color: var(--tokis-color-primary);
37
+ }
38
+
39
+ .tokis-bottom-nav__item:focus-visible {
40
+ outline: none;
41
+ background: var(--tokis-color-primary-subtle);
42
+ }
43
+
44
+ .tokis-bottom-nav__icon {
45
+ position: relative;
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ width: 24px;
50
+ height: 24px;
51
+ }
52
+
53
+ .tokis-bottom-nav__badge {
54
+ position: absolute;
55
+ top: -4px;
56
+ right: -8px;
57
+ min-width: 16px;
58
+ height: 16px;
59
+ padding: 0 4px;
60
+ background: var(--tokis-color-error);
61
+ color: #fff;
62
+ font-size: 10px;
63
+ font-weight: var(--tokis-font-weight-bold);
64
+ border-radius: var(--tokis-radius-full);
65
+ display: flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ line-height: 1;
69
+ }
70
+
71
+ .tokis-bottom-nav__label {
72
+ font-size: 10px;
73
+ font-weight: var(--tokis-font-weight-medium);
74
+ letter-spacing: 0.01em;
75
+ }
76
+
77
+ @media (prefers-reduced-motion: reduce) {
78
+ .tokis-bottom-nav__item { transition: none; }
79
+ }