@transcodes/design-tokens 0.4.3 → 0.4.4

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/CHANGELOG.md CHANGED
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.4] - 2025-12-23
9
+
10
+ ### Added
11
+
12
+ - `prepublishOnly` 스크립트 추가: npm publish 시 자동으로 clean → build 수행
13
+
8
14
  ## [0.4.3] - 2025-12-23
9
15
 
10
16
  ### Changed
@@ -0,0 +1 @@
1
+ *,:before,:after{box-sizing:border-box;margin:0;padding:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}@keyframes fadeInUp{0%{opacity:0;transform:translateY(1rem)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(.5rem)}to{opacity:1;transform:translateY(0)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-.25rem)}75%{transform:translate(.25rem)}}@keyframes inkFloat{0%,to{opacity:.5;transform:translate(0)scale(1)}50%{opacity:.7;transform:translate(.625rem,-.625rem)scale(1.1)}}@keyframes inkDrift{0%,to{opacity:.4;transform:translate(0)rotate(0)}33%{opacity:.6;transform:translate(-.5rem,.5rem)rotate(-5deg)}66%{opacity:.5;transform:translate(.375rem,-.375rem)rotate(3deg)}}@keyframes inkSpread{0%{opacity:.4;transform:scale(0)}to{transform:scale(var(--ink-effect-spread-scale,2.5));opacity:0}}.page-container{width:100%;max-width:var(--page-container-max-width);padding:0 var(--page-container-padding);animation:fadeInUp .6s var(--transition-smooth)both;margin:0 auto;position:relative}.page-container--wide{max-width:var(--page-container-max-width-wide)}.page-card{background:var(--paper-white);padding:var(--page-card-padding);border-radius:var(--page-card-radius);box-shadow:var(--shadow-card);position:relative;overflow:hidden}.page-card:before{content:"";border-radius:inherit;padding:var(--space-fixed-2xs);background:linear-gradient(135deg,var(--alpha-primary08)0%,transparent 50%,var(--alpha-primary04)100%);-webkit-mask-composite:xor;pointer-events:none;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-composite:exclude;mask-mode:match-source,match-source}.page-card--centered{text-align:center}.page-decoration{filter:blur(3.75rem);pointer-events:none;z-index:0;border-radius:50%;position:absolute}.page-decoration--primary{background:var(--alpha-primary15)}.page-decoration--success{background:var(--alpha-success15)}.page-decoration--float{animation:4s ease-in-out infinite inkFloat}.page-decoration--drift{animation:5s ease-in-out infinite inkDrift}.button{height:var(--button-height);padding:0 var(--space-lg);font-family:var(--font-body);font-size:var(--button-font-size);font-weight:var(--button-font-weight);letter-spacing:var(--button-letter-spacing);border:var(--space-fixed-2xs)solid transparent;border-radius:var(--button-radius);cursor:pointer;transition:background var(--transition-fast),transform var(--transition-fast)}.button-primary{background:var(--accent-primary);color:var(--paper-white)}.button-primary:hover:not(:disabled){background:var(--accent-primary-hover);box-shadow:var(--shadow-button-hover-primary);transform:translateY(calc(-1*var(--space-fixed-2xs)))}.button-success{background:var(--accent-success);color:var(--paper-white)}.button-success:hover:not(:disabled){background:var(--accent-success-hover);box-shadow:var(--shadow-button-hover-success);transform:translateY(calc(-1*var(--space-fixed-2xs)))}.button-secondary{height:var(--button-height-secondary);color:var(--ink-dark);border:var(--space-fixed-2xs)solid var(--ink-faint);background:0 0}.button-secondary:hover:not(:disabled){color:var(--accent-primary);border-color:var(--accent-primary);background:var(--alpha-primary04)}.button:disabled{cursor:not-allowed;opacity:.7}.text-button{height:var(--button-text-height);padding:var(--space-sm)var(--space-md);font-family:var(--font-body);font-size:var(--button-text-font-size);color:var(--ink-dark);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;font-weight:500;display:inline-flex}.text-button:hover{background:var(--paper-cream);color:var(--accent-primary)}.text-button-sm{height:auto;padding:var(--space-xs)var(--space-sm);font-size:.8125rem}.text-button-md{height:auto;padding:var(--space-sm)var(--space-md)}.button-content{justify-content:center;align-items:center;gap:var(--button-content-gap);display:flex}.button-icon{flex-shrink:0;justify-content:center;align-items:center;display:flex}.button-text{text-align:center;flex:1}.button-spinner{width:var(--button-spinner-size);height:var(--button-spinner-size);border:var(--button-spinner-border-width)solid currentColor;border-top-color:#0000;border-radius:50%;animation:.6s linear infinite spin}.button-ink{position:relative;overflow:hidden}.button-ink:after{content:"";pointer-events:none;width:21.875rem;height:21.875rem;transition:transform var(--ink-effect-ripple-duration,.6s)var(--ink-effect-ripple-easing,cubic-bezier(.4,0,.2,1)),opacity var(--ink-effect-fade-duration,.3s)ease;opacity:0;background:radial-gradient(circle,#ffffff80 0%,#0000 70%);border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(0)}.button-ink:hover:after{opacity:1;transform:translate(-50%,-50%)scale(1)}.button-ink:active:after{opacity:.8;transform:translate(-50%,-50%)scale(.8)}.card{background:var(--paper-white);padding:var(--card-padding);border-radius:var(--card-radius);box-shadow:var(--shadow-card);position:relative;overflow:hidden}.container{width:100%;max-width:var(--container-max-width);position:relative}.container-wide{max-width:var(--container-max-width-wide)}.form-header{text-align:center;margin-bottom:var(--form-header-margin-bottom)}.form-title{font-family:var(--font-body);font-size:var(--title-font-size);font-weight:var(--title-font-weight);color:var(--ink-black);letter-spacing:var(--title-letter-spacing);animation:slideDown .4s var(--transition-smooth).2s both}.form-subtitle{font-size:var(--form-subtitle-font-size);color:var(--ink-medium);margin-top:var(--space-sm);animation:fadeInUp .4s var(--transition-smooth).4s both}.form-fields{gap:var(--form-fields-gap);flex-direction:column;display:flex}.form-footer{margin-top:var(--form-footer-margin-top);text-align:center;animation:fadeInUp .4s var(--transition-smooth).6s both}.field-group{gap:var(--field-group-gap);flex-direction:column;display:flex}.field-label{font-size:var(--label-font-size);font-weight:var(--label-font-weight);text-transform:uppercase;letter-spacing:var(--label-letter-spacing);color:var(--ink-medium);transition:color var(--transition-fast);display:block}.field-group.focused .field-label{color:var(--accent-primary)}.required-mark{color:var(--accent-primary);margin-left:var(--space-2xs)}.input{width:100%;padding:var(--input-padding-y)var(--input-padding-x);font-family:var(--font-body);font-size:var(--input-font-size);color:var(--ink-black);background:var(--paper-cream);border:var(--space-fixed-2xs)solid transparent;border-radius:var(--input-radius);transition:background var(--transition-smooth),border-color var(--transition-smooth),box-shadow var(--transition-smooth)}.input::placeholder{color:var(--ink-faint)}.input:hover{background:var(--paper-warm)}.input:focus{background:var(--paper-white);border-color:var(--ink-faint);box-shadow:var(--shadow-input-focus);outline:none}.label{font-size:var(--label-font-size);font-weight:var(--label-font-weight);text-transform:uppercase;letter-spacing:var(--label-letter-spacing);color:var(--ink-medium);margin-bottom:var(--space-sm);transition:color var(--transition-fast);display:block}.title{font-family:var(--font-body);font-size:var(--title-font-size);font-weight:var(--title-font-weight);color:var(--ink-black);letter-spacing:var(--title-letter-spacing)}.error-message{align-items:flex-start;gap:var(--feedback-error-gap);padding:var(--feedback-error-padding);background:var(--error-bg);border:var(--space-fixed-2xs)solid var(--error-border);border-radius:var(--feedback-error-radius);color:var(--error-base);animation:slideDown .3s var(--transition-smooth)both;display:flex}.error-icon{width:var(--feedback-error-icon-size);height:var(--feedback-error-icon-size);color:var(--error-base);flex-shrink:0;justify-content:center;align-items:center;display:flex}.error-message.shake{animation:shake .4s var(--transition-smooth)}.notice{align-items:flex-start;gap:var(--feedback-notice-gap);padding:var(--feedback-notice-padding);border-radius:var(--feedback-notice-radius);animation:slideUp .4s var(--transition-smooth)both;display:flex}.notice-icon{width:var(--feedback-notice-icon-size);height:var(--feedback-notice-icon-size);flex-shrink:0;justify-content:center;align-items:center;display:flex}.notice-success{border:var(--space-fixed-2xs)solid #357a4633;color:var(--accent-success);background:#357a4614}.notice-warning{border:var(--space-fixed-2xs)solid #b4530933;color:var(--semantic-warning);background:#b4530914}.notice-info{border:var(--space-fixed-2xs)solid #0369a133;color:var(--semantic-info);background:#0369a114}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ */
4
+
5
+ export declare const componentStyles: string;
6
+ export default componentStyles;
@@ -0,0 +1,532 @@
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
3
+ * Component styles from design-tokens for use with Lit's adoptedStyleSheets
4
+ */
5
+
6
+ export const componentStyles = `/**
7
+ * Do not edit directly, this file was auto-generated.
8
+ */
9
+
10
+ /* Minimal Reset for Shadow DOM */
11
+ *,
12
+ *::before,
13
+ *::after {
14
+ box-sizing: border-box;
15
+ margin: 0;
16
+ padding: 0;
17
+ }
18
+
19
+ button,
20
+ input,
21
+ select,
22
+ textarea {
23
+ font: inherit;
24
+ color: inherit;
25
+ }
26
+
27
+ button {
28
+ cursor: pointer;
29
+ background: none;
30
+ border: none;
31
+ }
32
+
33
+ /* Animations */
34
+ @keyframes fadeInUp {
35
+ 0% {
36
+ opacity: 0;
37
+ transform: translateY(1rem);
38
+ }
39
+ 100% {
40
+ opacity: 1;
41
+ transform: translateY(0);
42
+ }
43
+ }
44
+
45
+ @keyframes slideDown {
46
+ 0% {
47
+ opacity: 0;
48
+ transform: translateY(-0.5rem);
49
+ }
50
+ 100% {
51
+ opacity: 1;
52
+ transform: translateY(0);
53
+ }
54
+ }
55
+
56
+ @keyframes slideUp {
57
+ 0% {
58
+ opacity: 0;
59
+ transform: translateY(0.5rem);
60
+ }
61
+ 100% {
62
+ opacity: 1;
63
+ transform: translateY(0);
64
+ }
65
+ }
66
+
67
+ @keyframes spin {
68
+ to {
69
+ transform: rotate(360deg);
70
+ }
71
+ }
72
+
73
+ @keyframes shake {
74
+ 0%, 100% {
75
+ transform: translateX(0);
76
+ }
77
+ 25% {
78
+ transform: translateX(-0.25rem);
79
+ }
80
+ 75% {
81
+ transform: translateX(0.25rem);
82
+ }
83
+ }
84
+
85
+ @keyframes inkFloat {
86
+ 0%, 100% {
87
+ transform: translate(0, 0) scale(1);
88
+ opacity: 0.5;
89
+ }
90
+ 50% {
91
+ transform: translate(0.625rem, -0.625rem) scale(1.1);
92
+ opacity: 0.7;
93
+ }
94
+ }
95
+
96
+ @keyframes inkDrift {
97
+ 0%, 100% {
98
+ transform: translate(0, 0) rotate(0deg);
99
+ opacity: 0.4;
100
+ }
101
+ 33% {
102
+ transform: translate(-0.5rem, 0.5rem) rotate(-5deg);
103
+ opacity: 0.6;
104
+ }
105
+ 66% {
106
+ transform: translate(0.375rem, -0.375rem) rotate(3deg);
107
+ opacity: 0.5;
108
+ }
109
+ }
110
+
111
+ @keyframes inkSpread {
112
+ 0% {
113
+ transform: scale(0);
114
+ opacity: 0.4;
115
+ }
116
+ 100% {
117
+ transform: scale(var(--ink-effect-spread-scale, 2.5));
118
+ opacity: 0;
119
+ }
120
+ }
121
+
122
+ /* Page Layout */
123
+ .page-container {
124
+ position: relative;
125
+ width: 100%;
126
+ max-width: var(--page-container-max-width);
127
+ margin: 0 auto;
128
+ padding: 0 var(--page-container-padding);
129
+ animation: fadeInUp 600ms var(--transition-smooth) both;
130
+ }
131
+
132
+ .page-container--wide {
133
+ max-width: var(--page-container-max-width-wide);
134
+ }
135
+
136
+ .page-card {
137
+ background: var(--paper-white);
138
+ padding: var(--page-card-padding);
139
+ border-radius: var(--page-card-radius);
140
+ box-shadow: var(--shadow-card);
141
+ position: relative;
142
+ overflow: hidden;
143
+ }
144
+
145
+ .page-card::before {
146
+ content: '';
147
+ position: absolute;
148
+ inset: 0;
149
+ border-radius: inherit;
150
+ padding: var(--space-fixed-2xs);
151
+ background: linear-gradient(135deg, var(--alpha-primary08) 0%, transparent 50%, var(--alpha-primary04) 100%);
152
+ -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
153
+ -webkit-mask-composite: xor;
154
+ mask-composite: exclude;
155
+ pointer-events: none;
156
+ }
157
+
158
+ .page-card--centered {
159
+ text-align: center;
160
+ }
161
+
162
+ /* Page Decoration - Ink effect backgrounds */
163
+ .page-decoration {
164
+ position: absolute;
165
+ border-radius: 50%;
166
+ filter: blur(3.75rem);
167
+ pointer-events: none;
168
+ z-index: 0;
169
+ }
170
+
171
+ .page-decoration--primary {
172
+ background: var(--alpha-primary15);
173
+ }
174
+
175
+ .page-decoration--success {
176
+ background: var(--alpha-success15);
177
+ }
178
+
179
+ .page-decoration--float {
180
+ animation: inkFloat 4s ease-in-out infinite;
181
+ }
182
+
183
+ .page-decoration--drift {
184
+ animation: inkDrift 5s ease-in-out infinite;
185
+ }
186
+
187
+ /* Buttons */
188
+ .button {
189
+ height: var(--button-height);
190
+ padding: 0 var(--space-lg);
191
+ font-family: var(--font-body);
192
+ font-size: var(--button-font-size);
193
+ font-weight: var(--button-font-weight);
194
+ letter-spacing: var(--button-letter-spacing);
195
+ border: var(--space-fixed-2xs) solid transparent;
196
+ border-radius: var(--button-radius);
197
+ cursor: pointer;
198
+ transition: background var(--transition-fast), transform var(--transition-fast);
199
+ }
200
+
201
+ .button-primary {
202
+ background: var(--accent-primary);
203
+ color: var(--paper-white);
204
+ }
205
+
206
+ .button-primary:hover:not(:disabled) {
207
+ background: var(--accent-primary-hover);
208
+ box-shadow: var(--shadow-button-hover-primary);
209
+ transform: translateY(calc(-1 * var(--space-fixed-2xs)));
210
+ }
211
+
212
+ .button-success {
213
+ background: var(--accent-success);
214
+ color: var(--paper-white);
215
+ }
216
+
217
+ .button-success:hover:not(:disabled) {
218
+ background: var(--accent-success-hover);
219
+ box-shadow: var(--shadow-button-hover-success);
220
+ transform: translateY(calc(-1 * var(--space-fixed-2xs)));
221
+ }
222
+
223
+ .button-secondary {
224
+ height: var(--button-height-secondary);
225
+ background: transparent;
226
+ color: var(--ink-dark);
227
+ border: var(--space-fixed-2xs) solid var(--ink-faint);
228
+ }
229
+
230
+ .button-secondary:hover:not(:disabled) {
231
+ color: var(--accent-primary);
232
+ border-color: var(--accent-primary);
233
+ background: var(--alpha-primary04);
234
+ }
235
+
236
+ .button:disabled {
237
+ cursor: not-allowed;
238
+ opacity: 0.7;
239
+ }
240
+
241
+ /* Text Button */
242
+ .text-button {
243
+ display: inline-flex;
244
+ align-items: center;
245
+ justify-content: center;
246
+ height: var(--button-text-height);
247
+ padding: var(--space-sm) var(--space-md);
248
+ font-family: var(--font-body);
249
+ font-size: var(--button-text-font-size);
250
+ font-weight: 500;
251
+ color: var(--ink-dark);
252
+ background: transparent;
253
+ border: none;
254
+ border-radius: var(--radius-md);
255
+ cursor: pointer;
256
+ transition: background var(--transition-fast), color var(--transition-fast);
257
+ }
258
+
259
+ .text-button:hover {
260
+ background: var(--paper-cream);
261
+ color: var(--accent-primary);
262
+ }
263
+
264
+ .text-button-sm {
265
+ height: auto;
266
+ padding: var(--space-xs) var(--space-sm);
267
+ font-size: 0.8125rem;
268
+ }
269
+
270
+ .text-button-md {
271
+ height: auto;
272
+ padding: var(--space-sm) var(--space-md);
273
+ }
274
+
275
+ /* Button Content Layout */
276
+ .button-content {
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ gap: var(--button-content-gap);
281
+ }
282
+
283
+ .button-icon {
284
+ display: flex;
285
+ align-items: center;
286
+ justify-content: center;
287
+ flex-shrink: 0;
288
+ }
289
+
290
+ .button-text {
291
+ flex: 1;
292
+ text-align: center;
293
+ }
294
+
295
+ /* Button Spinner */
296
+ .button-spinner {
297
+ width: var(--button-spinner-size);
298
+ height: var(--button-spinner-size);
299
+ border: var(--button-spinner-border-width) solid currentColor;
300
+ border-top-color: transparent;
301
+ border-radius: 50%;
302
+ animation: spin 600ms linear infinite;
303
+ }
304
+
305
+ /* Button Ink Ripple Effect */
306
+ .button-ink {
307
+ position: relative;
308
+ overflow: hidden;
309
+ }
310
+
311
+ .button-ink::after {
312
+ content: '';
313
+ position: absolute;
314
+ top: 50%;
315
+ left: 50%;
316
+ width: 21.875rem;
317
+ height: 21.875rem;
318
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.5) 0%, transparent 70%);
319
+ transform: translate(-50%, -50%) scale(0);
320
+ border-radius: 50%;
321
+ pointer-events: none;
322
+ transition: transform var(--ink-effect-ripple-duration, 600ms) var(--ink-effect-ripple-easing, cubic-bezier(0.4, 0, 0.2, 1)),
323
+ opacity var(--ink-effect-fade-duration, 300ms) ease;
324
+ opacity: 0;
325
+ }
326
+
327
+ .button-ink:hover::after {
328
+ transform: translate(-50%, -50%) scale(1);
329
+ opacity: 1;
330
+ }
331
+
332
+ .button-ink:active::after {
333
+ transform: translate(-50%, -50%) scale(0.8);
334
+ opacity: 0.8;
335
+ }
336
+
337
+ /* Card */
338
+ .card {
339
+ background: var(--paper-white);
340
+ padding: var(--card-padding);
341
+ border-radius: var(--card-radius);
342
+ box-shadow: var(--shadow-card);
343
+ position: relative;
344
+ overflow: hidden;
345
+ }
346
+
347
+ /* Container */
348
+ .container {
349
+ position: relative;
350
+ width: 100%;
351
+ max-width: var(--container-max-width);
352
+ }
353
+
354
+ .container-wide {
355
+ max-width: var(--container-max-width-wide);
356
+ }
357
+
358
+ /* Form Layout */
359
+ .form-header {
360
+ text-align: center;
361
+ margin-bottom: var(--form-header-margin-bottom);
362
+ }
363
+
364
+ .form-title {
365
+ font-family: var(--font-body);
366
+ font-size: var(--title-font-size);
367
+ font-weight: var(--title-font-weight);
368
+ color: var(--ink-black);
369
+ letter-spacing: var(--title-letter-spacing);
370
+ animation: slideDown 400ms var(--transition-smooth) 200ms both;
371
+ }
372
+
373
+ .form-subtitle {
374
+ font-size: var(--form-subtitle-font-size);
375
+ color: var(--ink-medium);
376
+ margin-top: var(--space-sm);
377
+ animation: fadeInUp 400ms var(--transition-smooth) 400ms both;
378
+ }
379
+
380
+ .form-fields {
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: var(--form-fields-gap);
384
+ }
385
+
386
+ .form-footer {
387
+ margin-top: var(--form-footer-margin-top);
388
+ text-align: center;
389
+ animation: fadeInUp 400ms var(--transition-smooth) 600ms both;
390
+ }
391
+
392
+ /* Field Group */
393
+ .field-group {
394
+ display: flex;
395
+ flex-direction: column;
396
+ gap: var(--field-group-gap);
397
+ }
398
+
399
+ .field-label {
400
+ display: block;
401
+ font-size: var(--label-font-size);
402
+ font-weight: var(--label-font-weight);
403
+ text-transform: uppercase;
404
+ letter-spacing: var(--label-letter-spacing);
405
+ color: var(--ink-medium);
406
+ transition: color var(--transition-fast);
407
+ }
408
+
409
+ .field-group.focused .field-label {
410
+ color: var(--accent-primary);
411
+ }
412
+
413
+ .required-mark {
414
+ color: var(--accent-primary);
415
+ margin-left: var(--space-2xs);
416
+ }
417
+
418
+ /* Input */
419
+ .input {
420
+ width: 100%;
421
+ padding: var(--input-padding-y) var(--input-padding-x);
422
+ font-family: var(--font-body);
423
+ font-size: var(--input-font-size);
424
+ color: var(--ink-black);
425
+ background: var(--paper-cream);
426
+ border: var(--space-fixed-2xs) solid transparent;
427
+ border-radius: var(--input-radius);
428
+ transition: background var(--transition-smooth), border-color var(--transition-smooth), box-shadow var(--transition-smooth);
429
+ }
430
+
431
+ .input::placeholder {
432
+ color: var(--ink-faint);
433
+ }
434
+
435
+ .input:hover {
436
+ background: var(--paper-warm);
437
+ }
438
+
439
+ .input:focus {
440
+ outline: none;
441
+ background: var(--paper-white);
442
+ border-color: var(--ink-faint);
443
+ box-shadow: var(--shadow-input-focus);
444
+ }
445
+
446
+ /* Label */
447
+ .label {
448
+ display: block;
449
+ font-size: var(--label-font-size);
450
+ font-weight: var(--label-font-weight);
451
+ text-transform: uppercase;
452
+ letter-spacing: var(--label-letter-spacing);
453
+ color: var(--ink-medium);
454
+ margin-bottom: var(--space-sm);
455
+ transition: color var(--transition-fast);
456
+ }
457
+
458
+ /* Title */
459
+ .title {
460
+ font-family: var(--font-body);
461
+ font-size: var(--title-font-size);
462
+ font-weight: var(--title-font-weight);
463
+ color: var(--ink-black);
464
+ letter-spacing: var(--title-letter-spacing);
465
+ }
466
+
467
+ /* Feedback */
468
+ .error-message {
469
+ display: flex;
470
+ align-items: flex-start;
471
+ gap: var(--feedback-error-gap);
472
+ padding: var(--feedback-error-padding);
473
+ background: var(--error-bg);
474
+ border: var(--space-fixed-2xs) solid var(--error-border);
475
+ border-radius: var(--feedback-error-radius);
476
+ color: var(--error-base);
477
+ animation: slideDown 300ms var(--transition-smooth) both;
478
+ }
479
+
480
+ .error-icon {
481
+ display: flex;
482
+ align-items: center;
483
+ justify-content: center;
484
+ flex-shrink: 0;
485
+ width: var(--feedback-error-icon-size);
486
+ height: var(--feedback-error-icon-size);
487
+ color: var(--error-base);
488
+ }
489
+
490
+ .error-message.shake {
491
+ animation: shake 400ms var(--transition-smooth);
492
+ }
493
+
494
+ /* Notice */
495
+ .notice {
496
+ display: flex;
497
+ align-items: flex-start;
498
+ gap: var(--feedback-notice-gap);
499
+ padding: var(--feedback-notice-padding);
500
+ border-radius: var(--feedback-notice-radius);
501
+ animation: slideUp 400ms var(--transition-smooth) both;
502
+ }
503
+
504
+ .notice-icon {
505
+ display: flex;
506
+ align-items: center;
507
+ justify-content: center;
508
+ flex-shrink: 0;
509
+ width: var(--feedback-notice-icon-size);
510
+ height: var(--feedback-notice-icon-size);
511
+ }
512
+
513
+ .notice-success {
514
+ background: rgba(53, 122, 70, 0.08);
515
+ border: var(--space-fixed-2xs) solid rgba(53, 122, 70, 0.2);
516
+ color: var(--accent-success);
517
+ }
518
+
519
+ .notice-warning {
520
+ background: rgba(180, 83, 9, 0.08);
521
+ border: var(--space-fixed-2xs) solid rgba(180, 83, 9, 0.2);
522
+ color: var(--semantic-warning);
523
+ }
524
+
525
+ .notice-info {
526
+ background: rgba(3, 105, 161, 0.08);
527
+ border: var(--space-fixed-2xs) solid rgba(3, 105, 161, 0.2);
528
+ color: var(--semantic-info);
529
+ }
530
+ `;
531
+
532
+ export default componentStyles;