@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,663 @@
1
+ /* ============================================================
2
+ Tokis — Extended Components
3
+ Supplemental components and layout utilities
4
+ ============================================================ */
5
+
6
+ /* ── Button Group ───────────────────────────────────────────── */
7
+
8
+ .tokis-button-group {
9
+ display: inline-flex;
10
+ gap: 0;
11
+ }
12
+ .tokis-button-group > .tokis-btn {
13
+ border-radius: 0;
14
+ }
15
+ .tokis-button-group > .tokis-btn:first-child {
16
+ border-radius: var(--tokis-radius-md) 0 0 var(--tokis-radius-md);
17
+ }
18
+ .tokis-button-group > .tokis-btn:last-child {
19
+ border-radius: 0 var(--tokis-radius-md) var(--tokis-radius-md) 0;
20
+ }
21
+ .tokis-button-group > .tokis-btn--secondary + .tokis-btn--secondary {
22
+ border-left-color: transparent;
23
+ }
24
+ .tokis-button-group--vertical {
25
+ flex-direction: column;
26
+ }
27
+ .tokis-button-group--vertical > .tokis-btn {
28
+ border-radius: 0;
29
+ width: 100%;
30
+ }
31
+ .tokis-button-group--vertical > .tokis-btn:first-child {
32
+ border-radius: var(--tokis-radius-md) var(--tokis-radius-md) 0 0;
33
+ }
34
+ .tokis-button-group--vertical > .tokis-btn:last-child {
35
+ border-radius: 0 0 var(--tokis-radius-md) var(--tokis-radius-md);
36
+ }
37
+
38
+ /* ── FAB (Floating Action Button) ───────────────────────────── */
39
+
40
+ .tokis-fab {
41
+ width: 56px;
42
+ height: 56px;
43
+ border-radius: var(--tokis-radius-full);
44
+ box-shadow: var(--tokis-shadow-lg);
45
+ font-size: 20px;
46
+ position: fixed;
47
+ bottom: var(--tokis-spacing-6);
48
+ right: var(--tokis-spacing-6);
49
+ z-index: var(--tokis-z-raised);
50
+ }
51
+ .tokis-fab:hover {
52
+ box-shadow: var(--tokis-shadow-xl);
53
+ transform: translateY(-2px);
54
+ }
55
+
56
+ /* ── Toggle Group ───────────────────────────────────────────── */
57
+
58
+ .tokis-toggle-group {
59
+ display: inline-flex;
60
+ border: 1px solid var(--tokis-color-border);
61
+ border-radius: var(--tokis-radius-md);
62
+ overflow: hidden;
63
+ background: var(--tokis-color-surface-raised);
64
+ }
65
+ .tokis-toggle-button {
66
+ display: inline-flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ gap: var(--tokis-spacing-2);
70
+ border: 0;
71
+ border-right: 1px solid var(--tokis-color-border);
72
+ background: transparent;
73
+ color: var(--tokis-text-secondary);
74
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-3);
75
+ font-size: var(--tokis-font-size-sm);
76
+ font-weight: var(--tokis-font-weight-medium);
77
+ font-family: inherit;
78
+ cursor: pointer;
79
+ transition:
80
+ background var(--tokis-duration-fast) var(--tokis-ease-out),
81
+ color var(--tokis-duration-fast) var(--tokis-ease-out);
82
+ outline: none;
83
+ white-space: nowrap;
84
+ -webkit-tap-highlight-color: transparent;
85
+ }
86
+ .tokis-toggle-button:last-child { border-right: 0; }
87
+ .tokis-toggle-button:hover { background: var(--tokis-color-surface-hover); color: var(--tokis-text-primary); }
88
+ .tokis-toggle-button:focus-visible { box-shadow: 0 0 0 2px inset var(--tokis-color-focus-ring); }
89
+ .tokis-toggle-button--selected {
90
+ background: var(--tokis-color-primary-subtle);
91
+ color: var(--tokis-color-primary);
92
+ }
93
+ .tokis-toggle-button[aria-disabled="true"] { opacity: 0.45; cursor: not-allowed; pointer-events: none; }
94
+
95
+ /* ── Stepper ────────────────────────────────────────────────── */
96
+
97
+ .tokis-stepper {
98
+ list-style: none;
99
+ margin: 0;
100
+ padding: 0;
101
+ display: flex;
102
+ flex-direction: column;
103
+ gap: 0;
104
+ }
105
+ .tokis-stepper--horizontal {
106
+ flex-direction: row;
107
+ align-items: flex-start;
108
+ }
109
+
110
+ .tokis-step {
111
+ display: flex;
112
+ gap: var(--tokis-spacing-3);
113
+ color: var(--tokis-text-secondary);
114
+ position: relative;
115
+ padding-bottom: var(--tokis-spacing-6);
116
+ }
117
+ .tokis-step:last-child { padding-bottom: 0; }
118
+ .tokis-step--active { color: var(--tokis-text-primary); }
119
+ .tokis-step--done { color: var(--tokis-text-secondary); }
120
+
121
+ .tokis-step-indicator {
122
+ display: flex;
123
+ flex-direction: column;
124
+ align-items: center;
125
+ flex-shrink: 0;
126
+ }
127
+ .tokis-step-index {
128
+ width: 28px;
129
+ height: 28px;
130
+ border-radius: var(--tokis-radius-full);
131
+ background: var(--tokis-color-neutral-200);
132
+ color: var(--tokis-text-secondary);
133
+ display: inline-flex;
134
+ align-items: center;
135
+ justify-content: center;
136
+ font-size: var(--tokis-font-size-xs);
137
+ font-weight: var(--tokis-font-weight-semibold);
138
+ flex-shrink: 0;
139
+ transition:
140
+ background var(--tokis-duration-fast) var(--tokis-ease-out),
141
+ color var(--tokis-duration-fast) var(--tokis-ease-out);
142
+ }
143
+ .tokis-step--active .tokis-step-index {
144
+ background: var(--tokis-color-primary);
145
+ color: var(--tokis-text-on-primary);
146
+ }
147
+ .tokis-step--done .tokis-step-index {
148
+ background: var(--tokis-color-success);
149
+ color: var(--tokis-text-inverse);
150
+ }
151
+
152
+ .tokis-step-connector {
153
+ width: 1px;
154
+ flex: 1;
155
+ background: var(--tokis-color-border);
156
+ margin: var(--tokis-spacing-1) 0;
157
+ min-height: 20px;
158
+ }
159
+ .tokis-step--done .tokis-step-connector {
160
+ background: var(--tokis-color-success);
161
+ }
162
+
163
+ .tokis-step-content { flex: 1; padding-top: 3px; min-width: 0; }
164
+ .tokis-step-label {
165
+ font-weight: var(--tokis-font-weight-medium);
166
+ font-size: var(--tokis-font-size-sm);
167
+ line-height: 1.5;
168
+ }
169
+ .tokis-step-description {
170
+ font-size: var(--tokis-font-size-xs);
171
+ color: var(--tokis-text-secondary);
172
+ line-height: 1.4;
173
+ margin-top: 2px;
174
+ }
175
+
176
+ /* ── Autocomplete ───────────────────────────────────────────── */
177
+
178
+ .tokis-autocomplete {
179
+ position: relative;
180
+ width: 100%;
181
+ }
182
+ .tokis-autocomplete-list {
183
+ position: absolute;
184
+ top: calc(100% + 4px);
185
+ left: 0;
186
+ right: 0;
187
+ background: var(--tokis-color-surface-overlay);
188
+ border: 1px solid var(--tokis-color-border);
189
+ border-radius: var(--tokis-radius-lg);
190
+ box-shadow: var(--tokis-shadow-xl);
191
+ z-index: var(--tokis-z-dropdown);
192
+ overflow: hidden;
193
+ animation: tokis-dropdown-in var(--tokis-duration-fast) var(--tokis-ease-out);
194
+ max-height: 240px;
195
+ overflow-y: auto;
196
+ scrollbar-width: thin;
197
+ scrollbar-color: var(--tokis-color-border) transparent;
198
+ }
199
+ .tokis-autocomplete-item {
200
+ width: 100%;
201
+ border: 0;
202
+ background: transparent;
203
+ text-align: left;
204
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-3);
205
+ cursor: pointer;
206
+ color: var(--tokis-text-primary);
207
+ font-size: var(--tokis-font-size-sm);
208
+ font-family: inherit;
209
+ transition: background var(--tokis-duration-fast) var(--tokis-ease-out);
210
+ outline: none;
211
+ min-height: 36px;
212
+ display: flex;
213
+ align-items: center;
214
+ }
215
+ .tokis-autocomplete-item:hover,
216
+ .tokis-autocomplete-item[data-focused="true"] { background: var(--tokis-color-surface-hover); }
217
+ .tokis-autocomplete-item:focus-visible { background: var(--tokis-color-surface-hover); }
218
+
219
+ /* ── Rating ─────────────────────────────────────────────────── */
220
+
221
+ .tokis-rating {
222
+ display: inline-flex;
223
+ gap: 2px;
224
+ align-items: center;
225
+ }
226
+ .tokis-rating-star {
227
+ border: 0;
228
+ background: transparent;
229
+ color: var(--tokis-color-neutral-300);
230
+ cursor: pointer;
231
+ transition:
232
+ color var(--tokis-duration-fast) var(--tokis-ease-out),
233
+ transform var(--tokis-duration-fast) var(--tokis-ease-spring);
234
+ outline: none;
235
+ line-height: 1;
236
+ padding: 2px;
237
+ display: inline-flex;
238
+ align-items: center;
239
+ -webkit-tap-highlight-color: transparent;
240
+ }
241
+ .tokis-rating-star:hover { color: var(--tokis-color-warning); transform: scale(1.15); }
242
+ .tokis-rating-star--active { color: var(--tokis-color-warning); }
243
+ .tokis-rating-star--hover { transform: scale(1.15); }
244
+ .tokis-rating-star:focus-visible {
245
+ box-shadow: 0 0 0 2px var(--tokis-color-focus-ring);
246
+ border-radius: var(--tokis-radius-sm);
247
+ outline: none;
248
+ }
249
+ .tokis-rating--readonly .tokis-rating-star,
250
+ .tokis-rating[data-readonly="true"] .tokis-rating-star { cursor: default; pointer-events: none; }
251
+
252
+ /* ── OTP Input ──────────────────────────────────────────────── */
253
+
254
+ .tokis-otp-root {
255
+ display: inline-block;
256
+ }
257
+
258
+ .tokis-otp-inputs {
259
+ display: flex;
260
+ gap: var(--tokis-spacing-2);
261
+ align-items: center;
262
+ }
263
+
264
+ .tokis-otp-cell {
265
+ width: 44px;
266
+ height: 52px;
267
+ text-align: center;
268
+ font-size: var(--tokis-font-size-xl);
269
+ font-weight: var(--tokis-font-weight-semibold);
270
+ font-family: var(--tokis-font-family-mono);
271
+ border: 1.5px solid var(--tokis-color-border-strong);
272
+ border-radius: var(--tokis-radius-lg);
273
+ background: var(--tokis-color-surface-raised);
274
+ color: var(--tokis-text-primary);
275
+ transition:
276
+ border-color var(--tokis-duration-fast) var(--tokis-ease-out),
277
+ box-shadow var(--tokis-duration-fast) var(--tokis-ease-out);
278
+ outline: none;
279
+ caret-color: var(--tokis-color-primary);
280
+ }
281
+
282
+ .tokis-otp-cell:focus {
283
+ border-color: var(--tokis-color-primary);
284
+ box-shadow: 0 0 0 3px var(--tokis-color-focus-ring);
285
+ }
286
+
287
+ .tokis-otp-cell--filled {
288
+ border-color: var(--tokis-color-primary);
289
+ background: var(--tokis-color-primary-subtle);
290
+ }
291
+
292
+ .tokis-otp-cell--error {
293
+ border-color: var(--tokis-color-error);
294
+ }
295
+
296
+ .tokis-otp-cell--error:focus {
297
+ box-shadow: 0 0 0 3px var(--tokis-color-focus-ring-error);
298
+ }
299
+
300
+ .tokis-otp-cell:disabled {
301
+ opacity: 0.5;
302
+ cursor: not-allowed;
303
+ background: var(--tokis-color-surface);
304
+ }
305
+
306
+ /* ── File Drop Zone ─────────────────────────────────────────── */
307
+
308
+ .tokis-dropzone {
309
+ display: flex;
310
+ flex-direction: column;
311
+ align-items: center;
312
+ justify-content: center;
313
+ gap: var(--tokis-spacing-2);
314
+ padding: var(--tokis-spacing-8) var(--tokis-spacing-6);
315
+ border: 2px dashed var(--tokis-color-border-strong);
316
+ border-radius: var(--tokis-radius-xl);
317
+ background: var(--tokis-color-surface);
318
+ cursor: pointer;
319
+ text-align: center;
320
+ transition:
321
+ border-color var(--tokis-duration-normal) var(--tokis-ease-out),
322
+ background var(--tokis-duration-normal) var(--tokis-ease-out);
323
+ outline: none;
324
+ min-height: 140px;
325
+ }
326
+
327
+ .tokis-dropzone:focus-visible {
328
+ box-shadow: 0 0 0 3px var(--tokis-color-focus-ring);
329
+ border-color: var(--tokis-color-primary);
330
+ }
331
+
332
+ .tokis-dropzone:hover,
333
+ .tokis-dropzone--dragging {
334
+ border-color: var(--tokis-color-primary);
335
+ background: var(--tokis-color-primary-subtle);
336
+ }
337
+
338
+ .tokis-dropzone--error {
339
+ border-color: var(--tokis-color-error);
340
+ background: var(--tokis-color-error-subtle);
341
+ }
342
+
343
+ .tokis-dropzone--disabled {
344
+ opacity: 0.5;
345
+ cursor: not-allowed;
346
+ pointer-events: none;
347
+ }
348
+
349
+ .tokis-dropzone__icon {
350
+ color: var(--tokis-text-tertiary);
351
+ transition: color var(--tokis-duration-fast) var(--tokis-ease-out);
352
+ }
353
+
354
+ .tokis-dropzone:hover .tokis-dropzone__icon,
355
+ .tokis-dropzone--dragging .tokis-dropzone__icon {
356
+ color: var(--tokis-color-primary);
357
+ }
358
+
359
+ .tokis-dropzone__label {
360
+ font-size: var(--tokis-font-size-sm);
361
+ font-weight: var(--tokis-font-weight-medium);
362
+ color: var(--tokis-text-primary);
363
+ }
364
+
365
+ .tokis-dropzone__hint {
366
+ font-size: var(--tokis-font-size-xs);
367
+ color: var(--tokis-text-tertiary);
368
+ }
369
+
370
+ .tokis-dropzone__error {
371
+ font-size: var(--tokis-font-size-xs);
372
+ color: var(--tokis-color-error);
373
+ font-weight: var(--tokis-font-weight-medium);
374
+ }
375
+
376
+ .tokis-dropzone__files {
377
+ display: flex;
378
+ flex-wrap: wrap;
379
+ gap: var(--tokis-spacing-1);
380
+ justify-content: center;
381
+ }
382
+
383
+ .tokis-dropzone__file {
384
+ font-size: var(--tokis-font-size-xs);
385
+ padding: 2px var(--tokis-spacing-2);
386
+ background: var(--tokis-color-primary-subtle);
387
+ color: var(--tokis-color-primary);
388
+ border-radius: var(--tokis-radius-full);
389
+ font-weight: var(--tokis-font-weight-medium);
390
+ }
391
+
392
+ /* ── App Bar ────────────────────────────────────────────────── */
393
+
394
+ .tokis-app-bar {
395
+ width: 100%;
396
+ min-height: 56px;
397
+ background: var(--tokis-color-surface-raised);
398
+ border-bottom: 1px solid var(--tokis-color-border);
399
+ color: var(--tokis-text-primary);
400
+ display: flex;
401
+ align-items: center;
402
+ padding: 0 var(--tokis-spacing-4);
403
+ gap: var(--tokis-spacing-3);
404
+ box-shadow: var(--tokis-shadow-xs);
405
+ }
406
+ .tokis-app-bar--sticky { position: sticky; top: 0; z-index: var(--tokis-z-sticky); }
407
+ .tokis-app-bar--fixed { position: fixed; top: 0; left: 0; right: 0; z-index: var(--tokis-z-sticky); }
408
+
409
+ .tokis-app-bar__title {
410
+ font-size: var(--tokis-font-size-lg);
411
+ font-weight: var(--tokis-font-weight-semibold);
412
+ color: var(--tokis-text-primary);
413
+ flex: 1;
414
+ }
415
+ .tokis-app-bar__actions {
416
+ display: flex;
417
+ align-items: center;
418
+ gap: var(--tokis-spacing-2);
419
+ margin-left: auto;
420
+ }
421
+
422
+ /* ── Paper / Surface ────────────────────────────────────────── */
423
+
424
+ .tokis-paper {
425
+ background: var(--tokis-color-surface-raised);
426
+ border: 1px solid var(--tokis-color-border);
427
+ border-radius: var(--tokis-radius-lg);
428
+ padding: var(--tokis-spacing-4);
429
+ }
430
+ .tokis-paper--1 { box-shadow: var(--tokis-shadow-sm); border-color: transparent; }
431
+ .tokis-paper--2 { box-shadow: var(--tokis-shadow-md); border-color: transparent; }
432
+ .tokis-paper--3 { box-shadow: var(--tokis-shadow-lg); border-color: transparent; }
433
+
434
+ /* ── Bottom Nav ─────────────────────────────────────────────── */
435
+
436
+ .tokis-bottom-nav {
437
+ display: grid;
438
+ grid-template-columns: repeat(auto-fit, minmax(64px, 1fr));
439
+ gap: var(--tokis-spacing-1);
440
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-2);
441
+ border-top: 1px solid var(--tokis-color-border);
442
+ background: var(--tokis-color-surface-raised);
443
+ position: fixed;
444
+ bottom: 0;
445
+ left: 0;
446
+ right: 0;
447
+ z-index: var(--tokis-z-sticky);
448
+ }
449
+ .tokis-bottom-nav-item {
450
+ border: 0;
451
+ border-radius: var(--tokis-radius-md);
452
+ background: transparent;
453
+ color: var(--tokis-text-secondary);
454
+ min-height: 52px;
455
+ font-size: var(--tokis-font-size-xs);
456
+ font-family: inherit;
457
+ display: flex;
458
+ flex-direction: column;
459
+ gap: 3px;
460
+ align-items: center;
461
+ justify-content: center;
462
+ cursor: pointer;
463
+ transition: color var(--tokis-duration-fast) var(--tokis-ease-out), background var(--tokis-duration-fast) var(--tokis-ease-out);
464
+ outline: none;
465
+ -webkit-tap-highlight-color: transparent;
466
+ }
467
+ .tokis-bottom-nav-item:hover { background: var(--tokis-color-surface-hover); }
468
+ .tokis-bottom-nav-item:focus-visible { box-shadow: 0 0 0 2px inset var(--tokis-color-focus-ring); }
469
+ .tokis-bottom-nav-item--active {
470
+ color: var(--tokis-color-primary);
471
+ background: var(--tokis-color-primary-subtle);
472
+ }
473
+
474
+ /* ── Speed Dial ─────────────────────────────────────────────── */
475
+
476
+ .tokis-speed-dial {
477
+ position: relative;
478
+ display: inline-flex;
479
+ flex-direction: column;
480
+ align-items: flex-end;
481
+ gap: var(--tokis-spacing-2);
482
+ }
483
+ .tokis-speed-dial-actions {
484
+ display: flex;
485
+ flex-direction: column;
486
+ gap: var(--tokis-spacing-2);
487
+ animation: tokis-dropdown-in var(--tokis-duration-fast) var(--tokis-ease-out);
488
+ }
489
+ .tokis-speed-dial-action {
490
+ display: inline-flex;
491
+ align-items: center;
492
+ gap: var(--tokis-spacing-2);
493
+ border: 1px solid var(--tokis-color-border);
494
+ border-radius: var(--tokis-radius-full);
495
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-4);
496
+ background: var(--tokis-color-surface-raised);
497
+ cursor: pointer;
498
+ font-size: var(--tokis-font-size-sm);
499
+ font-family: inherit;
500
+ box-shadow: var(--tokis-shadow-md);
501
+ color: var(--tokis-text-primary);
502
+ transition: box-shadow var(--tokis-duration-fast) var(--tokis-ease-out), transform var(--tokis-duration-fast) var(--tokis-ease-out);
503
+ outline: none;
504
+ white-space: nowrap;
505
+ }
506
+ .tokis-speed-dial-action:hover {
507
+ box-shadow: var(--tokis-shadow-lg);
508
+ transform: scale(1.02);
509
+ }
510
+ .tokis-speed-dial-action:focus-visible {
511
+ box-shadow: 0 0 0 3px var(--tokis-color-focus-ring);
512
+ }
513
+
514
+ /* ── Backdrop ───────────────────────────────────────────────── */
515
+
516
+ .tokis-backdrop {
517
+ position: fixed;
518
+ inset: 0;
519
+ background: rgb(0 0 0 / 0.45);
520
+ backdrop-filter: blur(2px);
521
+ -webkit-backdrop-filter: blur(2px);
522
+ display: grid;
523
+ place-items: center;
524
+ z-index: var(--tokis-z-modal);
525
+ }
526
+
527
+ /* ── Fade transition helper ─────────────────────────────────── */
528
+
529
+ .tokis-fade {
530
+ opacity: 0;
531
+ transform: translateY(6px);
532
+ transition:
533
+ opacity var(--tokis-duration-normal) var(--tokis-ease-out),
534
+ transform var(--tokis-duration-normal) var(--tokis-ease-out);
535
+ }
536
+ .tokis-fade--in {
537
+ opacity: 1;
538
+ transform: translateY(0);
539
+ }
540
+
541
+ /* ── Number Field ───────────────────────────────────────────── */
542
+
543
+ .tokis-number-field {
544
+ display: flex;
545
+ flex-direction: column;
546
+ gap: var(--tokis-spacing-2);
547
+ }
548
+ .tokis-number-field-wrapper {
549
+ display: flex;
550
+ gap: 0;
551
+ align-items: stretch;
552
+ }
553
+ .tokis-number-field .tokis-input {
554
+ border-radius: 0;
555
+ text-align: center;
556
+ border-left-color: transparent;
557
+ border-right-color: transparent;
558
+ }
559
+ .tokis-number-field-btn {
560
+ display: inline-flex;
561
+ align-items: center;
562
+ justify-content: center;
563
+ width: 36px;
564
+ background: var(--tokis-color-surface-raised);
565
+ border: 1px solid var(--tokis-color-border);
566
+ color: var(--tokis-text-secondary);
567
+ cursor: pointer;
568
+ font-size: 16px;
569
+ transition: background var(--tokis-duration-fast) var(--tokis-ease-out);
570
+ outline: none;
571
+ flex-shrink: 0;
572
+ -webkit-tap-highlight-color: transparent;
573
+ }
574
+ .tokis-number-field-btn:first-child { border-radius: var(--tokis-radius-md) 0 0 var(--tokis-radius-md); }
575
+ .tokis-number-field-btn:last-child { border-radius: 0 var(--tokis-radius-md) var(--tokis-radius-md) 0; }
576
+ .tokis-number-field-btn:hover { background: var(--tokis-color-surface-hover); color: var(--tokis-text-primary); }
577
+ .tokis-number-field-btn:focus-visible { box-shadow: 0 0 0 2px inset var(--tokis-color-focus-ring); }
578
+
579
+ /* ── Transfer List ──────────────────────────────────────────── */
580
+
581
+ .tokis-transfer-list {
582
+ display: grid;
583
+ grid-template-columns: 1fr auto 1fr;
584
+ gap: var(--tokis-spacing-3);
585
+ align-items: center;
586
+ }
587
+ .tokis-transfer-pane {
588
+ border: 1px solid var(--tokis-color-border);
589
+ border-radius: var(--tokis-radius-lg);
590
+ overflow: hidden;
591
+ min-width: 200px;
592
+ }
593
+ .tokis-transfer-pane-header {
594
+ padding: var(--tokis-spacing-3) var(--tokis-spacing-4);
595
+ font-size: var(--tokis-font-size-sm);
596
+ font-weight: var(--tokis-font-weight-semibold);
597
+ color: var(--tokis-text-primary);
598
+ border-bottom: 1px solid var(--tokis-color-border);
599
+ background: var(--tokis-color-neutral-50);
600
+ }
601
+ .tokis-transfer-item {
602
+ display: flex;
603
+ align-items: center;
604
+ gap: var(--tokis-spacing-2);
605
+ padding: var(--tokis-spacing-2) var(--tokis-spacing-4);
606
+ font-size: var(--tokis-font-size-sm);
607
+ color: var(--tokis-text-primary);
608
+ cursor: pointer;
609
+ transition: background var(--tokis-duration-fast) var(--tokis-ease-out);
610
+ }
611
+ .tokis-transfer-item:hover { background: var(--tokis-color-surface-hover); }
612
+ .tokis-transfer-item--selected { background: var(--tokis-color-primary-subtle); color: var(--tokis-color-primary); }
613
+ .tokis-transfer-actions {
614
+ display: flex;
615
+ flex-direction: column;
616
+ gap: var(--tokis-spacing-2);
617
+ }
618
+
619
+ /* ── Tree View ──────────────────────────────────────────────── */
620
+
621
+ .tokis-tree-list {
622
+ list-style: none;
623
+ margin: 0;
624
+ padding: 0;
625
+ }
626
+ .tokis-tree-list--nested {
627
+ padding-left: var(--tokis-spacing-4);
628
+ }
629
+ .tokis-tree-item {
630
+ border: 0;
631
+ background: transparent;
632
+ color: var(--tokis-text-primary);
633
+ font-size: var(--tokis-font-size-sm);
634
+ font-family: inherit;
635
+ padding: var(--tokis-spacing-1) var(--tokis-spacing-2);
636
+ cursor: pointer;
637
+ display: flex;
638
+ align-items: center;
639
+ gap: var(--tokis-spacing-2);
640
+ border-radius: var(--tokis-radius-sm);
641
+ width: 100%;
642
+ text-align: left;
643
+ transition: background var(--tokis-duration-fast) var(--tokis-ease-out);
644
+ outline: none;
645
+ }
646
+ .tokis-tree-item:hover { background: var(--tokis-color-surface-hover); }
647
+ .tokis-tree-item[aria-selected="true"] { background: var(--tokis-color-primary-subtle); color: var(--tokis-color-primary); }
648
+ .tokis-tree-item:focus-visible { box-shadow: 0 0 0 2px var(--tokis-color-focus-ring); }
649
+
650
+ /* ── Reduced motion ─────────────────────────────────────────── */
651
+
652
+ @media (prefers-reduced-motion: reduce) {
653
+ .tokis-toggle-button { transition: none; }
654
+ .tokis-rating-star { transition: none; transform: none !important; }
655
+ .tokis-bottom-nav-item { transition: none; }
656
+ .tokis-speed-dial-action { transition: none; }
657
+ .tokis-speed-dial-actions { animation: none; }
658
+ .tokis-autocomplete-list { animation: none; }
659
+ .tokis-fade { transition: none; }
660
+ .tokis-tree-item { transition: none; }
661
+ .tokis-transfer-item { transition: none; }
662
+ .tokis-number-field-btn { transition: none; }
663
+ }
@@ -0,0 +1,29 @@
1
+ /* ── HoverCard ───────────────────────────────────────────── */
2
+
3
+ .tokis-hover-card {
4
+ z-index: var(--tokis-z-popover);
5
+ background: var(--tokis-color-surface-overlay);
6
+ border: 1px solid var(--tokis-color-border);
7
+ border-radius: var(--tokis-radius-xl);
8
+ box-shadow: var(--tokis-shadow-xl);
9
+ padding: var(--tokis-spacing-4);
10
+ min-width: 220px;
11
+ max-width: 360px;
12
+ animation: tokis-hover-card-in var(--tokis-duration-fast) var(--tokis-ease-out);
13
+ }
14
+
15
+ @keyframes tokis-hover-card-in {
16
+ /* Use standalone 'translate' so it composes with the positioning
17
+ 'transform' on the element instead of overriding it */
18
+ from { opacity: 0; translate: 0 4px; }
19
+ to { opacity: 1; translate: 0 0; }
20
+ }
21
+
22
+ .tokis-hover-card--top { transform-origin: bottom center; }
23
+ .tokis-hover-card--bottom { transform-origin: top center; }
24
+ .tokis-hover-card--left { transform-origin: right center; }
25
+ .tokis-hover-card--right { transform-origin: left center; }
26
+
27
+ @media (prefers-reduced-motion: reduce) {
28
+ .tokis-hover-card { animation: none; }
29
+ }