@sekiui/elements 0.0.24 → 0.0.26

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 (35) hide show
  1. package/README.md +10 -257
  2. package/dist/cjs/{index-6jIfEFyf.js → index-B1pILoQg.js} +61 -2
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/seki-button.cjs.entry.js +2 -2
  5. package/dist/cjs/seki-input.cjs.entry.js +66 -0
  6. package/dist/cjs/seki-skeleton.cjs.entry.js +25 -0
  7. package/dist/cjs/sekiui.cjs.js +2 -2
  8. package/dist/collection/collection-manifest.json +3 -1
  9. package/dist/collection/components/button/seki-button.css +20 -0
  10. package/dist/collection/components/input/seki-input.css +446 -0
  11. package/dist/collection/components/input/seki-input.js +503 -0
  12. package/dist/collection/components/skeleton/seki-skeleton.css +383 -0
  13. package/dist/collection/components/skeleton/seki-skeleton.js +61 -0
  14. package/dist/components/index.js +65 -3
  15. package/dist/components/seki-button.js +1 -1
  16. package/dist/components/seki-input.d.ts +11 -0
  17. package/dist/components/seki-input.js +104 -0
  18. package/dist/components/seki-skeleton.d.ts +11 -0
  19. package/dist/components/seki-skeleton.js +46 -0
  20. package/dist/esm/{index-BROrRAlq.js → index-CLC2YwJ6.js} +61 -3
  21. package/dist/esm/loader.js +3 -3
  22. package/dist/esm/seki-button.entry.js +2 -2
  23. package/dist/esm/seki-input.entry.js +64 -0
  24. package/dist/esm/seki-skeleton.entry.js +23 -0
  25. package/dist/esm/sekiui.js +3 -3
  26. package/dist/sekiui/{p-a3520082.entry.js → p-10c9b8b2.entry.js} +1 -1
  27. package/dist/sekiui/p-6573bc92.entry.js +1 -0
  28. package/dist/sekiui/p-6bb2c486.entry.js +1 -0
  29. package/dist/sekiui/p-CLC2YwJ6.js +2 -0
  30. package/dist/sekiui/sekiui.esm.js +1 -1
  31. package/dist/types/components/input/seki-input.d.ts +107 -0
  32. package/dist/types/components/skeleton/seki-skeleton.d.ts +15 -0
  33. package/dist/types/components.d.ts +250 -0
  34. package/package.json +1 -1
  35. package/dist/sekiui/p-BROrRAlq.js +0 -2
@@ -246,6 +246,17 @@
246
246
  --seki-button-shadow: var(--seki-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
247
247
  --seki-button-shadow-hover: var(--seki-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
248
248
  --seki-button-disabled-opacity: 0.5;
249
+
250
+ /* Input Component Colors */
251
+ --seki-input-bg: var(--seki-background);
252
+ --seki-input-border: var(--seki-border);
253
+ --seki-input-text: var(--seki-foreground);
254
+ --seki-input-placeholder: var(--seki-muted-foreground);
255
+ --seki-input-ring: var(--seki-ring);
256
+ --seki-input-invalid-border: var(--seki-destructive);
257
+ --seki-input-invalid-ring: var(--seki-destructive);
258
+ --seki-input-disabled-opacity: 0.5;
259
+ --seki-input-radius: var(--seki-radius-md);
249
260
  }
250
261
 
251
262
  /**
@@ -272,6 +283,15 @@
272
283
  --seki-spacing-16: 4rem; /* 64px */
273
284
  --seki-spacing-20: 5rem; /* 80px */
274
285
  --seki-spacing-24: 6rem; /* 96px */
286
+
287
+ /* Input Component Tokens */
288
+ --seki-input-height-sm: 2rem; /* 32px */
289
+ --seki-input-height-md: 2.5rem; /* 40px - default */
290
+ --seki-input-height-lg: 3rem; /* 48px */
291
+ --seki-input-padding-x: 0.75rem; /* 12px */
292
+ --seki-input-padding-y: 0.5rem; /* 8px */
293
+ --seki-input-font-size: 0.875rem; /* 14px */
294
+ --seki-input-ring-offset: 2px;
275
295
  }
276
296
 
277
297
  /**
@@ -0,0 +1,446 @@
1
+ /**
2
+ * SekiUI Design Tokens - Index
3
+ * Aggregates all design token files into a single entry point
4
+ *
5
+ * Import this file to get access to all design tokens:
6
+ * @import '../tokens/index.css';
7
+ */
8
+
9
+ /**
10
+ * SekiUI Design Tokens - Colors
11
+ * Based on shadcn/ui color system
12
+ */
13
+
14
+ /* =============================================================================
15
+ PRIMITIVE COLOR TOKENS (Layer 1: Raw Values)
16
+ ============================================================================= */
17
+
18
+ :root {
19
+ /* Neutral Scale (50-950) - shadcn/ui inspired */
20
+ --seki-neutral-50: hsl(0, 0%, 98%);
21
+ --seki-neutral-100: hsl(0, 0%, 96.1%);
22
+ --seki-neutral-200: hsl(0, 0%, 89.8%);
23
+ --seki-neutral-300: hsl(0, 0%, 83.1%);
24
+ --seki-neutral-400: hsl(0, 0%, 63.9%);
25
+ --seki-neutral-500: hsl(0, 0%, 45.1%);
26
+ --seki-neutral-600: hsl(0, 0%, 32.2%);
27
+ --seki-neutral-700: hsl(0, 0%, 25.1%);
28
+ --seki-neutral-800: hsl(0, 0%, 14.9%);
29
+ --seki-neutral-900: hsl(0, 0%, 9%);
30
+ --seki-neutral-950: hsl(0, 0%, 3.9%);
31
+
32
+ /* Primary/Accent Scale (50-950) */
33
+ --seki-primary-50: hsl(210, 100%, 97%);
34
+ --seki-primary-100: hsl(210, 95%, 93%);
35
+ --seki-primary-200: hsl(210, 95%, 85%);
36
+ --seki-primary-300: hsl(210, 90%, 73%);
37
+ --seki-primary-400: hsl(210, 85%, 58%);
38
+ --seki-primary-500: hsl(210, 80%, 48%);
39
+ --seki-primary-600: hsl(210, 75%, 40%);
40
+ --seki-primary-700: hsl(210, 70%, 32%);
41
+ --seki-primary-800: hsl(210, 65%, 25%);
42
+ --seki-primary-900: hsl(210, 60%, 18%);
43
+ --seki-primary-950: hsl(210, 55%, 10%);
44
+
45
+ /* Semantic Color Primitives */
46
+ --seki-success-500: hsl(142, 71%, 45%);
47
+ --seki-success-600: hsl(142, 71%, 35%);
48
+ --seki-warning-500: hsl(38, 92%, 50%);
49
+ --seki-warning-600: hsl(38, 92%, 40%);
50
+ --seki-destructive-500: hsl(0, 84.2%, 60.2%);
51
+ --seki-destructive-600: hsl(0, 72%, 41%);
52
+ }
53
+
54
+ /* =============================================================================
55
+ SEMANTIC TOKENS (Layer 2: shadcn/ui Style)
56
+ ============================================================================= */
57
+
58
+ :root {
59
+ /* Base */
60
+ --seki-background: hsl(0, 0%, 100%);
61
+ --seki-foreground: hsl(0, 0%, 3.9%);
62
+
63
+ /* Muted */
64
+ --seki-muted: hsl(0, 0%, 96.1%);
65
+ --seki-muted-foreground: hsl(0, 0%, 45.1%);
66
+
67
+ /* Card */
68
+ --seki-card: hsl(0, 0%, 100%);
69
+ --seki-card-foreground: hsl(0, 0%, 3.9%);
70
+
71
+ /* Popover */
72
+ --seki-popover: hsl(0, 0%, 100%);
73
+ --seki-popover-foreground: hsl(0, 0%, 3.9%);
74
+
75
+ /* Border */
76
+ --seki-border: hsl(0, 0%, 89.8%);
77
+ --seki-input: hsl(0, 0%, 89.8%);
78
+
79
+ /* Primary */
80
+ --seki-primary: hsl(0, 0%, 9%);
81
+ --seki-primary-foreground: hsl(0, 0%, 98%);
82
+
83
+ /* Secondary */
84
+ --seki-secondary: hsl(0, 0%, 96.1%);
85
+ --seki-secondary-foreground: hsl(0, 0%, 9%);
86
+
87
+ /* Accent */
88
+ --seki-accent: hsl(0, 0%, 96.1%);
89
+ --seki-accent-foreground: hsl(0, 0%, 9%);
90
+
91
+ /* Destructive */
92
+ --seki-destructive: hsl(0, 84.2%, 60.2%);
93
+ --seki-destructive-foreground: hsl(0, 0%, 98%);
94
+
95
+ /* Ring */
96
+ --seki-ring: hsl(0, 0%, 3.9%);
97
+
98
+ /* Legacy aliases for backward compatibility */
99
+ --seki-bg-primary: var(--seki-background);
100
+ --seki-bg-secondary: var(--seki-muted);
101
+ --seki-bg-tertiary: var(--seki-accent);
102
+ --seki-text-primary: var(--seki-foreground);
103
+ --seki-text-secondary: var(--seki-muted-foreground);
104
+ --seki-text-tertiary: var(--seki-neutral-400);
105
+ --seki-border-default: var(--seki-border);
106
+ --seki-border-emphasis: var(--seki-neutral-300);
107
+ }
108
+
109
+ /* Dark Mode Semantic Tokens */
110
+ :root[data-theme='dark'] {
111
+ /* Base */
112
+ --seki-background: hsl(0, 0%, 3.9%);
113
+ --seki-foreground: hsl(0, 0%, 98%);
114
+
115
+ /* Muted */
116
+ --seki-muted: hsl(0, 0%, 14.9%);
117
+ --seki-muted-foreground: hsl(0, 0%, 63.9%);
118
+
119
+ /* Card */
120
+ --seki-card: hsl(0, 0%, 3.9%);
121
+ --seki-card-foreground: hsl(0, 0%, 98%);
122
+
123
+ /* Popover */
124
+ --seki-popover: hsl(0, 0%, 3.9%);
125
+ --seki-popover-foreground: hsl(0, 0%, 98%);
126
+
127
+ /* Border */
128
+ --seki-border: hsl(0, 0%, 14.9%);
129
+ --seki-input: hsl(0, 0%, 14.9%);
130
+
131
+ /* Primary */
132
+ --seki-primary: hsl(0, 0%, 98%);
133
+ --seki-primary-foreground: hsl(0, 0%, 9%);
134
+
135
+ /* Secondary */
136
+ --seki-secondary: hsl(0, 0%, 14.9%);
137
+ --seki-secondary-foreground: hsl(0, 0%, 98%);
138
+
139
+ /* Accent */
140
+ --seki-accent: hsl(0, 0%, 14.9%);
141
+ --seki-accent-foreground: hsl(0, 0%, 98%);
142
+
143
+ /* Destructive */
144
+ --seki-destructive: hsl(0, 62.8%, 30.6%);
145
+ --seki-destructive-foreground: hsl(0, 0%, 98%);
146
+
147
+ /* Ring */
148
+ --seki-ring: hsl(0, 0%, 83.1%);
149
+
150
+ /* Legacy aliases for backward compatibility */
151
+ --seki-bg-primary: var(--seki-background);
152
+ --seki-bg-secondary: var(--seki-muted);
153
+ --seki-bg-tertiary: var(--seki-accent);
154
+ --seki-text-primary: var(--seki-foreground);
155
+ --seki-text-secondary: var(--seki-muted-foreground);
156
+ --seki-text-tertiary: var(--seki-neutral-600);
157
+ --seki-border-default: var(--seki-border);
158
+ --seki-border-emphasis: var(--seki-neutral-700);
159
+
160
+ /* Button overrides for dark mode */
161
+ --seki-button-primary-hover-bg: hsl(0, 0%, 98%, 0.9);
162
+ --seki-button-secondary-hover-bg: hsl(0, 0%, 14.9%, 0.8);
163
+ }
164
+
165
+ /* =============================================================================
166
+ COMPONENT TOKENS (Layer 3: Button-Specific - shadcn/ui Style)
167
+ ============================================================================= */
168
+
169
+ :root {
170
+ /* Button Variant: Primary (default in shadcn/ui) */
171
+ --seki-button-primary-bg: var(--seki-primary);
172
+ --seki-button-primary-text: var(--seki-primary-foreground);
173
+ --seki-button-primary-border: transparent;
174
+ --seki-button-primary-hover-bg: hsl(0, 0%, 9%, 0.9);
175
+ --seki-button-primary-hover-text: var(--seki-primary-foreground);
176
+ --seki-button-primary-hover-border: transparent;
177
+
178
+ /* Button Variant: Secondary */
179
+ --seki-button-secondary-bg: var(--seki-secondary);
180
+ --seki-button-secondary-text: var(--seki-secondary-foreground);
181
+ --seki-button-secondary-border: transparent;
182
+ --seki-button-secondary-hover-bg: hsl(0, 0%, 96.1%, 0.8);
183
+ --seki-button-secondary-hover-text: var(--seki-secondary-foreground);
184
+ --seki-button-secondary-hover-border: transparent;
185
+
186
+ /* Button Variant: Outline */
187
+ --seki-button-outline-bg: transparent;
188
+ --seki-button-outline-text: var(--seki-foreground);
189
+ --seki-button-outline-border: var(--seki-input);
190
+ --seki-button-outline-hover-bg: var(--seki-accent);
191
+ --seki-button-outline-hover-text: var(--seki-accent-foreground);
192
+ --seki-button-outline-hover-border: var(--seki-input);
193
+
194
+ /* Button Variant: Ghost */
195
+ --seki-button-ghost-bg: transparent;
196
+ --seki-button-ghost-text: var(--seki-foreground);
197
+ --seki-button-ghost-border: transparent;
198
+ --seki-button-ghost-hover-bg: var(--seki-accent);
199
+ --seki-button-ghost-hover-text: var(--seki-accent-foreground);
200
+ --seki-button-ghost-hover-border: transparent;
201
+
202
+ /* Button Variant: Destructive */
203
+ --seki-button-destructive-bg: var(--seki-destructive);
204
+ --seki-button-destructive-text: var(--seki-destructive-foreground);
205
+ --seki-button-destructive-border: transparent;
206
+ --seki-button-destructive-hover-bg: hsl(0, 84.2%, 60.2%, 0.9);
207
+ --seki-button-destructive-hover-border: transparent;
208
+
209
+ /* Button Sizing: Small */
210
+ --seki-button-sm-padding-x: var(--seki-spacing-3, 0.75rem);
211
+ --seki-button-sm-padding-y: 0.375rem;
212
+ --seki-button-sm-font-size: var(--seki-text-sm, 0.875rem);
213
+ --seki-button-sm-height: 2.25rem; /* Updated from 2rem to match shadcn (36px) */
214
+
215
+ /* Button Sizing: Medium (default) */
216
+ --seki-button-md-padding-x: var(--seki-spacing-4, 1rem);
217
+ --seki-button-md-padding-y: var(--seki-spacing-2, 0.5rem);
218
+ --seki-button-md-font-size: var(--seki-text-base, 1rem);
219
+ --seki-button-md-height: 2.5rem;
220
+
221
+ /* Button Sizing: Large */
222
+ --seki-button-lg-padding-x: 2rem; /* Updated from 1.25rem to match shadcn */
223
+ --seki-button-lg-padding-y: 0.5rem;
224
+ --seki-button-lg-font-size: 1rem; /* Updated from 1.125rem to match shadcn */
225
+ --seki-button-lg-height: 2.75rem; /* Updated from 3rem to match shadcn (44px) */
226
+
227
+ /* Button Sizing: Icon-only (NEW - shadcn compatibility) */
228
+ --seki-button-icon-sm-size: 2rem; /* 32x32px square */
229
+ --seki-button-icon-size: 2.5rem; /* 40x40px square */
230
+ --seki-button-icon-lg-size: 3rem; /* 48x48px square */
231
+ --seki-button-icon-gap: 0.5rem; /* 8px gap between icon and text */
232
+
233
+ /* Button Variant: Link (NEW - shadcn compatibility) */
234
+ --seki-button-link-bg: transparent;
235
+ --seki-button-link-text: var(--seki-primary);
236
+ --seki-button-link-border: transparent;
237
+ --seki-button-link-hover-bg: transparent;
238
+ --seki-button-link-hover-text: var(--seki-primary);
239
+ --seki-button-link-hover-border: transparent;
240
+
241
+ /* Button Common */
242
+ --seki-button-radius: var(--seki-radius-md, 0.375rem);
243
+ --seki-button-font-weight: var(--seki-font-medium, 500);
244
+ --seki-button-transition-duration: 150ms;
245
+ --seki-button-transition-timing: ease-in-out;
246
+ --seki-button-shadow: var(--seki-shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
247
+ --seki-button-shadow-hover: var(--seki-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
248
+ --seki-button-disabled-opacity: 0.5;
249
+
250
+ /* Input Component Colors */
251
+ --seki-input-bg: var(--seki-background);
252
+ --seki-input-border: var(--seki-border);
253
+ --seki-input-text: var(--seki-foreground);
254
+ --seki-input-placeholder: var(--seki-muted-foreground);
255
+ --seki-input-ring: var(--seki-ring);
256
+ --seki-input-invalid-border: var(--seki-destructive);
257
+ --seki-input-invalid-ring: var(--seki-destructive);
258
+ --seki-input-disabled-opacity: 0.5;
259
+ --seki-input-radius: var(--seki-radius-md);
260
+ }
261
+
262
+ /**
263
+ * SekiUI Design Tokens - Spacing
264
+ * 4px base unit, rem-based scale
265
+ */
266
+
267
+ :root {
268
+ /* Spacing Scale (4px base unit) */
269
+ --seki-spacing-0: 0;
270
+ --seki-spacing-0-5: 0.125rem; /* 2px */
271
+ --seki-spacing-1: 0.25rem; /* 4px */
272
+ --seki-spacing-1-5: 0.375rem; /* 6px */
273
+ --seki-spacing-2: 0.5rem; /* 8px */
274
+ --seki-spacing-2-5: 0.625rem; /* 10px */
275
+ --seki-spacing-3: 0.75rem; /* 12px */
276
+ --seki-spacing-3-5: 0.875rem; /* 14px */
277
+ --seki-spacing-4: 1rem; /* 16px */
278
+ --seki-spacing-5: 1.25rem; /* 20px */
279
+ --seki-spacing-6: 1.5rem; /* 24px */
280
+ --seki-spacing-8: 2rem; /* 32px */
281
+ --seki-spacing-10: 2.5rem; /* 40px */
282
+ --seki-spacing-12: 3rem; /* 48px */
283
+ --seki-spacing-16: 4rem; /* 64px */
284
+ --seki-spacing-20: 5rem; /* 80px */
285
+ --seki-spacing-24: 6rem; /* 96px */
286
+
287
+ /* Input Component Tokens */
288
+ --seki-input-height-sm: 2rem; /* 32px */
289
+ --seki-input-height-md: 2.5rem; /* 40px - default */
290
+ --seki-input-height-lg: 3rem; /* 48px */
291
+ --seki-input-padding-x: 0.75rem; /* 12px */
292
+ --seki-input-padding-y: 0.5rem; /* 8px */
293
+ --seki-input-font-size: 0.875rem; /* 14px */
294
+ --seki-input-ring-offset: 2px;
295
+ }
296
+
297
+ /**
298
+ * SekiUI Design Tokens - Shadows
299
+ * Subtle elevation system
300
+ */
301
+
302
+ :root {
303
+ /* Shadow Levels */
304
+ --seki-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
305
+ --seki-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
306
+ --seki-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.15), 0 4px 6px -4px rgb(0 0 0 / 0.1);
307
+ }
308
+
309
+ /**
310
+ * SekiUI Design Tokens - Typography
311
+ * System font stacks, sizes, weights, line heights
312
+ */
313
+
314
+ :root {
315
+ /* Font Families */
316
+ --seki-font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue',
317
+ Arial, sans-serif;
318
+ --seki-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
319
+
320
+ /* Font Sizes (rem-based) */
321
+ --seki-text-xs: 0.75rem; /* 12px */
322
+ --seki-text-sm: 0.875rem; /* 14px */
323
+ --seki-text-base: 1rem; /* 16px */
324
+ --seki-text-lg: 1.125rem; /* 18px */
325
+ --seki-text-xl: 1.25rem; /* 20px */
326
+ --seki-text-2xl: 1.5rem; /* 24px */
327
+ --seki-text-3xl: 1.875rem; /* 30px */
328
+ --seki-text-4xl: 2.25rem; /* 36px */
329
+
330
+ /* Font Weights */
331
+ --seki-font-normal: 400;
332
+ --seki-font-medium: 500;
333
+ --seki-font-semibold: 600;
334
+ --seki-font-bold: 700;
335
+
336
+ /* Line Heights */
337
+ --seki-leading-tight: 1.25;
338
+ --seki-leading-normal: 1.5;
339
+ --seki-leading-relaxed: 1.75;
340
+ }
341
+
342
+ /**
343
+ * SekiUI Design Tokens - Border Radius
344
+ * Four-level radius system
345
+ */
346
+
347
+ :root {
348
+ /* Border Radius Levels */
349
+ --seki-radius-sm: 0.25rem; /* 4px */
350
+ --seki-radius-md: 0.375rem; /* 6px */
351
+ --seki-radius-lg: 0.5rem; /* 8px */
352
+ --seki-radius-xl: 1rem; /* 16px */
353
+ }
354
+
355
+
356
+
357
+ :host {
358
+ display: inline-block;
359
+ width: 100%;
360
+ }
361
+
362
+ .input {
363
+ /* Base styles */
364
+ box-sizing: border-box;
365
+ width: 100%;
366
+ font-family: var(--seki-font-sans);
367
+ font-size: var(--seki-input-font-size);
368
+ border-radius: var(--seki-input-radius);
369
+ border: 1px solid var(--seki-input-border);
370
+ background: var(--seki-input-bg);
371
+ color: var(--seki-input-text);
372
+ padding: var(--seki-input-padding-y) var(--seki-input-padding-x);
373
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
374
+ }
375
+
376
+ /* Placeholder */
377
+ .input::placeholder {
378
+ color: var(--seki-input-placeholder);
379
+ }
380
+
381
+ /* Focus state */
382
+ .input:focus-visible {
383
+ outline: 2px solid var(--seki-input-ring);
384
+ outline-offset: var(--seki-input-ring-offset);
385
+ border-color: var(--seki-input-ring);
386
+ }
387
+
388
+ /* Disabled state */
389
+ .input:disabled {
390
+ cursor: not-allowed;
391
+ opacity: var(--seki-input-disabled-opacity);
392
+ }
393
+
394
+ /* Readonly state */
395
+ .input:read-only {
396
+ background: var(--seki-muted);
397
+ }
398
+
399
+ /* Invalid/error state */
400
+ .input--invalid {
401
+ border-color: var(--seki-input-invalid-border);
402
+ }
403
+
404
+ .input--invalid:focus-visible {
405
+ outline-color: var(--seki-input-invalid-ring);
406
+ border-color: var(--seki-input-invalid-border);
407
+ }
408
+
409
+ /* Size variants */
410
+ .input--sm {
411
+ height: var(--seki-input-height-sm);
412
+ font-size: calc(var(--seki-input-font-size) * 0.875); /* 12px */
413
+ padding: calc(var(--seki-input-padding-y) * 0.75) calc(var(--seki-input-padding-x) * 0.875);
414
+ }
415
+
416
+ .input--md {
417
+ height: var(--seki-input-height-md);
418
+ }
419
+
420
+ .input--lg {
421
+ height: var(--seki-input-height-lg);
422
+ font-size: calc(var(--seki-input-font-size) * 1.125); /* 16px */
423
+ padding: calc(var(--seki-input-padding-y) * 1.25) calc(var(--seki-input-padding-x) * 1.125);
424
+ }
425
+
426
+ /* File input styling (shadcn pattern) */
427
+ .input[type="file"]::file-selector-button {
428
+ border: 0;
429
+ background: transparent;
430
+ font-size: var(--seki-input-font-size);
431
+ font-weight: 500;
432
+ margin-right: 0.75rem;
433
+ cursor: pointer;
434
+ color: var(--seki-input-text);
435
+ }
436
+
437
+ .input[type="file"]::file-selector-button:hover {
438
+ text-decoration: underline;
439
+ }
440
+
441
+ /* Reduced motion */
442
+ @media (prefers-reduced-motion: reduce) {
443
+ .input {
444
+ transition: none;
445
+ }
446
+ }