@dmsej108/design-system 2.2.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.
- package/dist/components/Badge/Badge.d.ts +13 -0
- package/dist/components/Badge/Badge.d.ts.map +1 -0
- package/dist/components/Badge/index.d.ts +3 -0
- package/dist/components/Badge/index.d.ts.map +1 -0
- package/dist/components/BaseButton/BaseButton.d.ts +14 -0
- package/dist/components/BaseButton/BaseButton.d.ts.map +1 -0
- package/dist/components/BaseButton/index.d.ts +3 -0
- package/dist/components/BaseButton/index.d.ts.map +1 -0
- package/dist/components/Button/Button.d.ts +14 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/Button/index.d.ts +3 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- package/dist/components/Card/Card.d.ts +13 -0
- package/dist/components/Card/Card.d.ts.map +1 -0
- package/dist/components/Card/index.d.ts +3 -0
- package/dist/components/Card/index.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +30 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/index.d.ts +3 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -0
- package/dist/components/Chip/Chip.d.ts +17 -0
- package/dist/components/Chip/Chip.d.ts.map +1 -0
- package/dist/components/Chip/index.d.ts +3 -0
- package/dist/components/Chip/index.d.ts.map +1 -0
- package/dist/components/DatePicker/DatePicker.d.ts +18 -0
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker/index.d.ts +3 -0
- package/dist/components/DatePicker/index.d.ts.map +1 -0
- package/dist/components/FileInput/FileInput.d.ts +19 -0
- package/dist/components/FileInput/FileInput.d.ts.map +1 -0
- package/dist/components/FileInput/index.d.ts +3 -0
- package/dist/components/FileInput/index.d.ts.map +1 -0
- package/dist/components/Icon/Icon.d.ts +17 -0
- package/dist/components/Icon/Icon.d.ts.map +1 -0
- package/dist/components/Icon/index.d.ts +3 -0
- package/dist/components/Icon/index.d.ts.map +1 -0
- package/dist/components/Input/Input.d.ts +14 -0
- package/dist/components/Input/Input.d.ts.map +1 -0
- package/dist/components/Input/index.d.ts +3 -0
- package/dist/components/Input/index.d.ts.map +1 -0
- package/dist/components/Modal/Modal.d.ts +18 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -0
- package/dist/components/Modal/index.d.ts +3 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.d.ts +11 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/index.d.ts +3 -0
- package/dist/components/Pagination/index.d.ts.map +1 -0
- package/dist/components/Radio/Radio.d.ts +25 -0
- package/dist/components/Radio/Radio.d.ts.map +1 -0
- package/dist/components/Radio/index.d.ts +3 -0
- package/dist/components/Radio/index.d.ts.map +1 -0
- package/dist/components/Select/Select.d.ts +19 -0
- package/dist/components/Select/Select.d.ts.map +1 -0
- package/dist/components/Select/index.d.ts +3 -0
- package/dist/components/Select/index.d.ts.map +1 -0
- package/dist/components/Tab/Tab.d.ts +18 -0
- package/dist/components/Tab/Tab.d.ts.map +1 -0
- package/dist/components/Tab/index.d.ts +3 -0
- package/dist/components/Tab/index.d.ts.map +1 -0
- package/dist/components/Table/Table.d.ts +23 -0
- package/dist/components/Table/Table.d.ts.map +1 -0
- package/dist/components/Table/index.d.ts +3 -0
- package/dist/components/Table/index.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +15 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea/index.d.ts +3 -0
- package/dist/components/Textarea/index.d.ts.map +1 -0
- package/dist/components/Toast/Toast.d.ts +32 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -0
- package/dist/components/Toast/index.d.ts +3 -0
- package/dist/components/Toast/index.d.ts.map +1 -0
- package/dist/components/Typography/Typography.d.ts +10 -0
- package/dist/components/Typography/Typography.d.ts.map +1 -0
- package/dist/components/Typography/index.d.ts +3 -0
- package/dist/components/Typography/index.d.ts.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1407 -0
- package/dist/index.js.map +1 -0
- package/package.json +76 -0
- package/src/styles/base/common.css +2060 -0
- package/src/styles/base/ellipsis.xml +1 -0
- package/src/styles/base/fonts.css +39 -0
- package/src/styles/base/layout.css +864 -0
- package/src/styles/base/reset.css +241 -0
- package/src/styles/components/breadcrumb.css +39 -0
- package/src/styles/components/button.css +423 -0
- package/src/styles/components/dashboard.css +970 -0
- package/src/styles/components/ellipsis.xml +1 -0
- package/src/styles/components/form.css +744 -0
- package/src/styles/components/loading.css +93 -0
- package/src/styles/components/login.css +405 -0
- package/src/styles/components/modal.css +218 -0
- package/src/styles/components/operate.css +85 -0
- package/src/styles/components/tab.css +80 -0
- package/src/styles/components/table.css +1024 -0
- package/src/styles/components/tree.css +284 -0
- package/src/styles/img/kb_logo.png +0 -0
- package/src/styles/index.css +18 -0
- package/src/styles/swiper.min.css +658 -0
- package/src/tokens/Tokens.stories.tsx +185 -0
- package/src/tokens/index.css +295 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
|
|
3
|
+
const meta: Meta = {
|
|
4
|
+
title: 'Foundation/Design Tokens',
|
|
5
|
+
tags: ['autodocs'],
|
|
6
|
+
parameters: { layout: 'fullscreen' },
|
|
7
|
+
};
|
|
8
|
+
export default meta;
|
|
9
|
+
type Story = StoryObj;
|
|
10
|
+
|
|
11
|
+
/* ── Color Swatch ── */
|
|
12
|
+
function Swatch({ name, cssVar }: { name: string; cssVar: string }) {
|
|
13
|
+
return (
|
|
14
|
+
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 6, minWidth: 64 }}>
|
|
15
|
+
<div
|
|
16
|
+
style={{
|
|
17
|
+
width: 48,
|
|
18
|
+
height: 48,
|
|
19
|
+
borderRadius: 8,
|
|
20
|
+
backgroundColor: `var(${cssVar})`,
|
|
21
|
+
border: '1px solid rgba(0,0,0,0.08)',
|
|
22
|
+
boxShadow: '0 1px 3px rgba(0,0,0,0.08)',
|
|
23
|
+
}}
|
|
24
|
+
/>
|
|
25
|
+
<span style={{ fontSize: 11, color: 'var(--color-neutral-500)', textAlign: 'center' }}>{name}</span>
|
|
26
|
+
</div>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function ColorRow({ label, prefix, shades }: { label: string; prefix: string; shades: string[] }) {
|
|
31
|
+
return (
|
|
32
|
+
<div style={{ marginBottom: 32 }}>
|
|
33
|
+
<p style={{ margin: '0 0 12px', fontSize: 12, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.06em', color: 'var(--color-neutral-500)' }}>
|
|
34
|
+
{label}
|
|
35
|
+
</p>
|
|
36
|
+
<div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>
|
|
37
|
+
{shades.map((shade) => (
|
|
38
|
+
<Swatch key={shade} name={shade} cssVar={`--color-${prefix}-${shade}`} />
|
|
39
|
+
))}
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const Colors: Story = {
|
|
46
|
+
name: '색상',
|
|
47
|
+
render: () => {
|
|
48
|
+
const shades = ['50','100','200','300','400','500','600','700','800','900'];
|
|
49
|
+
return (
|
|
50
|
+
<div style={{ padding: 32, fontFamily: 'var(--font-family-base)' }}>
|
|
51
|
+
<ColorRow label="Primary / KB Yellow" prefix="primary" shades={shades} />
|
|
52
|
+
<ColorRow label="Secondary / KB Gray" prefix="secondary" shades={shades} />
|
|
53
|
+
<ColorRow label="Neutral" prefix="neutral" shades={shades} />
|
|
54
|
+
|
|
55
|
+
<div style={{ marginBottom: 32 }}>
|
|
56
|
+
<p style={{ margin: '0 0 12px', fontSize: 12, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.06em', color: 'var(--color-neutral-500)' }}>KB Brand</p>
|
|
57
|
+
<div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>
|
|
58
|
+
<Swatch name="yellow-positive" cssVar="--color-brand-yellow-positive" />
|
|
59
|
+
<Swatch name="yellow-negative" cssVar="--color-brand-yellow-negative" />
|
|
60
|
+
<Swatch name="gray" cssVar="--color-brand-gray" />
|
|
61
|
+
<Swatch name="dark-gray" cssVar="--color-brand-dark-gray" />
|
|
62
|
+
<Swatch name="gold" cssVar="--color-brand-gold" />
|
|
63
|
+
<Swatch name="silver" cssVar="--color-brand-silver" />
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div style={{ marginBottom: 32 }}>
|
|
68
|
+
<p style={{ margin: '0 0 12px', fontSize: 12, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.06em', color: 'var(--color-neutral-500)' }}>Semantic</p>
|
|
69
|
+
<div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>
|
|
70
|
+
<Swatch name="success" cssVar="--color-success" />
|
|
71
|
+
<Swatch name="success-light" cssVar="--color-success-light" />
|
|
72
|
+
<Swatch name="warning" cssVar="--color-warning" />
|
|
73
|
+
<Swatch name="warning-light" cssVar="--color-warning-light" />
|
|
74
|
+
<Swatch name="error" cssVar="--color-error" />
|
|
75
|
+
<Swatch name="error-light" cssVar="--color-error-light" />
|
|
76
|
+
<Swatch name="info" cssVar="--color-info" />
|
|
77
|
+
<Swatch name="info-light" cssVar="--color-info-light" />
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
);
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export const Typography: Story = {
|
|
86
|
+
name: '타이포그래피',
|
|
87
|
+
render: () => (
|
|
88
|
+
<div style={{ padding: 32, fontFamily: 'var(--font-family-base)' }}>
|
|
89
|
+
<p style={{ margin: '0 0 24px', fontSize: 12, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.06em', color: 'var(--color-neutral-500)' }}>Font Size</p>
|
|
90
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 12, marginBottom: 40 }}>
|
|
91
|
+
{[
|
|
92
|
+
['xs', '12px'], ['sm', '14px'], ['md', '16px'], ['lg', '18px'],
|
|
93
|
+
['xl', '20px'], ['2xl', '24px'], ['3xl', '30px'], ['4xl', '36px'],
|
|
94
|
+
].map(([key, px]) => (
|
|
95
|
+
<div key={key} style={{ display: 'flex', alignItems: 'baseline', gap: 16 }}>
|
|
96
|
+
<span style={{ fontSize: 'var(--font-size-' + key + ')', color: 'var(--ds-text)', lineHeight: 1.3 }}>
|
|
97
|
+
StarBanking
|
|
98
|
+
</span>
|
|
99
|
+
<span style={{ fontSize: 11, color: 'var(--ds-text-muted)' }}>{key} / {px}</span>
|
|
100
|
+
</div>
|
|
101
|
+
))}
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<p style={{ margin: '0 0 16px', fontSize: 12, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.06em', color: 'var(--color-neutral-500)' }}>Font Weight</p>
|
|
105
|
+
<div style={{ display: 'flex', gap: 24, flexWrap: 'wrap', marginBottom: 40 }}>
|
|
106
|
+
{[
|
|
107
|
+
['Regular (400)', '400'], ['Medium (500)', '500'],
|
|
108
|
+
['Semibold (600)', '600'], ['Bold (700)', '700'],
|
|
109
|
+
].map(([label, weight]) => (
|
|
110
|
+
<div key={weight} style={{ fontWeight: weight, fontSize: 16, color: 'var(--ds-text)' }}>{label}</div>
|
|
111
|
+
))}
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
),
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export const Spacing: Story = {
|
|
118
|
+
name: '스페이싱',
|
|
119
|
+
render: () => (
|
|
120
|
+
<div style={{ padding: 32, fontFamily: 'var(--font-family-base)' }}>
|
|
121
|
+
<p style={{ margin: '0 0 24px', fontSize: 12, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.06em', color: 'var(--color-neutral-500)' }}>Spacing Scale</p>
|
|
122
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
|
|
123
|
+
{[
|
|
124
|
+
['--space-1', '4px'], ['--space-2', '8px'], ['--space-3', '12px'],
|
|
125
|
+
['--space-4', '16px'], ['--space-5', '20px'], ['--space-6', '24px'],
|
|
126
|
+
['--space-8', '32px'], ['--space-10', '40px'], ['--space-12', '48px'],
|
|
127
|
+
['--space-16', '64px'],
|
|
128
|
+
].map(([token, px]) => (
|
|
129
|
+
<div key={token} style={{ display: 'flex', alignItems: 'center', gap: 16 }}>
|
|
130
|
+
<div style={{ width: `var(${token})`, height: 20, backgroundColor: 'var(--color-primary-400)', borderRadius: 3, flexShrink: 0 }} />
|
|
131
|
+
<span style={{ fontSize: 12, color: 'var(--color-neutral-500)', whiteSpace: 'nowrap' }}>
|
|
132
|
+
{token} · {px}
|
|
133
|
+
</span>
|
|
134
|
+
</div>
|
|
135
|
+
))}
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
),
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export const Shadows: Story = {
|
|
142
|
+
name: '그림자',
|
|
143
|
+
render: () => (
|
|
144
|
+
<div style={{ padding: 32, fontFamily: 'var(--font-family-base)' }}>
|
|
145
|
+
<div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>
|
|
146
|
+
{['xs','sm','md','lg','xl'].map((s) => (
|
|
147
|
+
<div key={s} style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 12 }}>
|
|
148
|
+
<div style={{
|
|
149
|
+
width: 80, height: 80, borderRadius: 12,
|
|
150
|
+
backgroundColor: '#fff',
|
|
151
|
+
boxShadow: `var(--shadow-${s})`,
|
|
152
|
+
border: '1px solid var(--color-neutral-100)',
|
|
153
|
+
}} />
|
|
154
|
+
<span style={{ fontSize: 12, color: 'var(--color-neutral-500)' }}>shadow-{s}</span>
|
|
155
|
+
</div>
|
|
156
|
+
))}
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
),
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export const BorderRadius: Story = {
|
|
163
|
+
name: '테두리 반경',
|
|
164
|
+
render: () => (
|
|
165
|
+
<div style={{ padding: 32, fontFamily: 'var(--font-family-base)' }}>
|
|
166
|
+
<div style={{ display: 'flex', gap: 24, flexWrap: 'wrap', alignItems: 'flex-end' }}>
|
|
167
|
+
{[
|
|
168
|
+
['sm', '4px'], ['md', '8px'], ['lg', '12px'], ['xl', '16px'], ['full', '9999px'],
|
|
169
|
+
].map(([key, px]) => (
|
|
170
|
+
<div key={key} style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 12 }}>
|
|
171
|
+
<div style={{
|
|
172
|
+
width: 64, height: 64,
|
|
173
|
+
backgroundColor: 'var(--color-primary-100)',
|
|
174
|
+
border: '2px solid var(--color-primary-400)',
|
|
175
|
+
borderRadius: `var(--radius-${key})`,
|
|
176
|
+
}} />
|
|
177
|
+
<span style={{ fontSize: 12, color: 'var(--color-neutral-500)', textAlign: 'center' }}>
|
|
178
|
+
radius-{key}<br />{px}
|
|
179
|
+
</span>
|
|
180
|
+
</div>
|
|
181
|
+
))}
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
),
|
|
185
|
+
};
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/* ── Colors ── */
|
|
3
|
+
/* Primary / KB Yellow */
|
|
4
|
+
--color-primary-50: #FFF9E6;
|
|
5
|
+
--color-primary-100: #FFEDB3;
|
|
6
|
+
--color-primary-200: #FFE080;
|
|
7
|
+
--color-primary-300: #FFD54D;
|
|
8
|
+
--color-primary-400: #FFCC00; /* KB Yellow Negative */
|
|
9
|
+
--color-primary-500: #FFBC00; /* KB Yellow Positive */
|
|
10
|
+
--color-primary-600: #CC9600;
|
|
11
|
+
--color-primary-700: #997000;
|
|
12
|
+
--color-primary-800: #664B00;
|
|
13
|
+
--color-primary-900: #332500;
|
|
14
|
+
|
|
15
|
+
/* Secondary / KB Gray */
|
|
16
|
+
--color-secondary-50: #F7F5F2;
|
|
17
|
+
--color-secondary-100: #EDEAE5;
|
|
18
|
+
--color-secondary-200: #D8D2CA;
|
|
19
|
+
--color-secondary-300: #BCB3A8;
|
|
20
|
+
--color-secondary-400: #9A9186;
|
|
21
|
+
--color-secondary-500: #7D7468;
|
|
22
|
+
--color-secondary-600: #60584C; /* KB Gray */
|
|
23
|
+
--color-secondary-700: #545045; /* KB Dark Gray */
|
|
24
|
+
--color-secondary-800: #3C3730;
|
|
25
|
+
--color-secondary-900: #261F19;
|
|
26
|
+
|
|
27
|
+
/* Neutral */
|
|
28
|
+
--color-neutral-0: #ffffff;
|
|
29
|
+
--color-neutral-50: #f7f8fa;
|
|
30
|
+
--color-neutral-100: #f1f3f5;
|
|
31
|
+
--color-neutral-200: #e4e7ec;
|
|
32
|
+
--color-neutral-300: #d0d5dd;
|
|
33
|
+
--color-neutral-400: #98a2b3;
|
|
34
|
+
--color-neutral-500: #667085;
|
|
35
|
+
--color-neutral-600: #475467;
|
|
36
|
+
--color-neutral-700: #344054;
|
|
37
|
+
--color-neutral-800: #1d2939;
|
|
38
|
+
--color-neutral-900: #101828;
|
|
39
|
+
|
|
40
|
+
/* Semantic */
|
|
41
|
+
--color-success-light: #d1fae5;
|
|
42
|
+
--color-success: #36b37e;
|
|
43
|
+
--color-success-dark: #1d7a57;
|
|
44
|
+
|
|
45
|
+
--color-warning-light: #fff3cd;
|
|
46
|
+
--color-warning: #ff8b00;
|
|
47
|
+
--color-warning-dark: #b85e00;
|
|
48
|
+
|
|
49
|
+
--color-error-light: #fee2e2;
|
|
50
|
+
--color-error: #ff5630;
|
|
51
|
+
--color-error-dark: #b91c1c;
|
|
52
|
+
|
|
53
|
+
--color-info-light: #dbeafe;
|
|
54
|
+
--color-info: #2563eb;
|
|
55
|
+
--color-info-dark: #1e40af;
|
|
56
|
+
|
|
57
|
+
/* ── Typography ── */
|
|
58
|
+
--font-family-base: 'Pretendard', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
59
|
+
--font-family-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
|
|
60
|
+
|
|
61
|
+
--font-size-xs: 0.75rem; /* 12px */
|
|
62
|
+
--font-size-sm: 0.875rem; /* 14px */
|
|
63
|
+
--font-size-md: 1rem; /* 16px */
|
|
64
|
+
--font-size-lg: 1.125rem; /* 18px */
|
|
65
|
+
--font-size-xl: 1.25rem; /* 20px */
|
|
66
|
+
--font-size-2xl: 1.5rem; /* 24px */
|
|
67
|
+
--font-size-3xl: 1.875rem; /* 30px */
|
|
68
|
+
--font-size-4xl: 2.25rem; /* 36px */
|
|
69
|
+
|
|
70
|
+
--font-weight-regular: 400;
|
|
71
|
+
--font-weight-medium: 500;
|
|
72
|
+
--font-weight-semibold: 600;
|
|
73
|
+
--font-weight-bold: 700;
|
|
74
|
+
|
|
75
|
+
--line-height-tight: 1.25;
|
|
76
|
+
--line-height-snug: 1.375;
|
|
77
|
+
--line-height-normal: 1.5;
|
|
78
|
+
--line-height-relaxed: 1.625;
|
|
79
|
+
|
|
80
|
+
/* ── Spacing ── */
|
|
81
|
+
--space-1: 0.25rem; /* 4px */
|
|
82
|
+
--space-2: 0.5rem; /* 8px */
|
|
83
|
+
--space-3: 0.75rem; /* 12px */
|
|
84
|
+
--space-4: 1rem; /* 16px */
|
|
85
|
+
--space-5: 1.25rem; /* 20px */
|
|
86
|
+
--space-6: 1.5rem; /* 24px */
|
|
87
|
+
--space-8: 2rem; /* 32px */
|
|
88
|
+
--space-10: 2.5rem; /* 40px */
|
|
89
|
+
--space-12: 3rem; /* 48px */
|
|
90
|
+
--space-16: 4rem; /* 64px */
|
|
91
|
+
|
|
92
|
+
/* ── Border Radius ── */
|
|
93
|
+
--radius-sm: 4px;
|
|
94
|
+
--radius-md: 8px;
|
|
95
|
+
--radius-lg: 12px;
|
|
96
|
+
--radius-xl: 16px;
|
|
97
|
+
--radius-full: 9999px;
|
|
98
|
+
|
|
99
|
+
/* ── Shadows ── */
|
|
100
|
+
--shadow-xs: 0 1px 2px rgba(16, 24, 40, 0.05);
|
|
101
|
+
--shadow-sm: 0 1px 3px rgba(16, 24, 40, 0.1), 0 1px 2px rgba(16, 24, 40, 0.06);
|
|
102
|
+
--shadow-md: 0 4px 8px rgba(16, 24, 40, 0.08), 0 2px 4px rgba(16, 24, 40, 0.04);
|
|
103
|
+
--shadow-lg: 0 12px 24px rgba(16, 24, 40, 0.1), 0 4px 8px rgba(16, 24, 40, 0.04);
|
|
104
|
+
--shadow-xl: 0 24px 48px rgba(16, 24, 40, 0.12);
|
|
105
|
+
|
|
106
|
+
/* ── Transitions ── */
|
|
107
|
+
--transition-fast: 100ms ease;
|
|
108
|
+
--transition-normal: 200ms ease;
|
|
109
|
+
--transition-slow: 300ms ease;
|
|
110
|
+
|
|
111
|
+
/* ── KB Brand ── */
|
|
112
|
+
--color-brand-yellow-positive: #FFBC00; /* KB Yellow Positive (Pantone 130 C) */
|
|
113
|
+
--color-brand-yellow-negative: #FFCC00; /* KB Yellow Negative (Pantone 1235 C) */
|
|
114
|
+
--color-brand-gray: #60584C; /* KB Gray (Pantone 404 C) */
|
|
115
|
+
--color-brand-dark-gray: #545045; /* KB Dark Gray (Pantone 411C) */
|
|
116
|
+
--color-brand-gold: #C5A028; /* KB Gold (Pantone 872 C) */
|
|
117
|
+
--color-brand-silver: #A8AAAD; /* KB Silver (Pantone 877 C) */
|
|
118
|
+
|
|
119
|
+
/* ── Legacy variable aliases (maps css/ folder variables to design tokens) ── */
|
|
120
|
+
--base-txt-color: var(--color-neutral-600);
|
|
121
|
+
--strong-txt-color: var(--color-neutral-900);
|
|
122
|
+
--primary-txt-color: #ffbc00;
|
|
123
|
+
--point-txt-color: #287eff;
|
|
124
|
+
--error-txt-color: #ff3232;
|
|
125
|
+
--placeholder-txt-color: var(--color-neutral-400);
|
|
126
|
+
--base-bg-color: var(--color-neutral-50);
|
|
127
|
+
--base-bd-color: var(--color-neutral-300);
|
|
128
|
+
--bd1-color: var(--color-neutral-300);
|
|
129
|
+
--bd2-color: var(--color-neutral-200);
|
|
130
|
+
|
|
131
|
+
/* ── Semantic design system tokens (dark-mode aware) ── */
|
|
132
|
+
--ds-surface: #ffffff;
|
|
133
|
+
--ds-surface-hover: #f2f2f2;
|
|
134
|
+
--ds-surface-disabled: #f2f2f2;
|
|
135
|
+
--ds-surface-nav: #253349;
|
|
136
|
+
--ds-surface-nav-hover:#464646;
|
|
137
|
+
--ds-surface-primary: var(--color-primary-500); /* #FFBC00 KB Yellow Positive */
|
|
138
|
+
--ds-surface-primary-hover: var(--color-primary-600); /* #CC9600 */
|
|
139
|
+
--ds-surface-secondary: var(--ds-surface-nav); /* #253349 dark navy */
|
|
140
|
+
--ds-surface-secondary-hover: var(--ds-surface-nav-hover);/* #464646 */
|
|
141
|
+
|
|
142
|
+
--ds-text: #222222;
|
|
143
|
+
--ds-text-2: #444444;
|
|
144
|
+
--ds-text-muted: #767676;
|
|
145
|
+
--ds-text-placeholder: #999999;
|
|
146
|
+
--ds-text-disabled: #ababab;
|
|
147
|
+
--ds-text-on-dark: #ffffff;
|
|
148
|
+
--ds-text-error: #ff3232;
|
|
149
|
+
|
|
150
|
+
--ds-border: #d2d2d2;
|
|
151
|
+
--ds-border-light: #ebebeb;
|
|
152
|
+
--ds-border-strong: #444444;
|
|
153
|
+
--ds-border-focus: #999999;
|
|
154
|
+
--ds-border-error: #ff3232;
|
|
155
|
+
|
|
156
|
+
--ds-danger: #ff3232;
|
|
157
|
+
--ds-danger-hover: #cc0000;
|
|
158
|
+
|
|
159
|
+
/* badge variants */
|
|
160
|
+
--ds-badge-success-bg: #d1fae5;
|
|
161
|
+
--ds-badge-success-text: #1d7a57;
|
|
162
|
+
--ds-badge-warning-bg: #fff3cd;
|
|
163
|
+
--ds-badge-warning-text: #b85e00;
|
|
164
|
+
--ds-badge-error-bg: #fee2e2;
|
|
165
|
+
--ds-badge-error-text: #b91c1c;
|
|
166
|
+
--ds-badge-info-bg: #dbeafe;
|
|
167
|
+
--ds-badge-info-text: #1e40af;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* ── Dark mode overrides ── */
|
|
171
|
+
/* Applied via data-theme="dark" on <html> (manual toggle) */
|
|
172
|
+
:root[data-theme="dark"] {
|
|
173
|
+
/* Neutral scale (flipped for dark) */
|
|
174
|
+
--color-neutral-0: #1c1f28;
|
|
175
|
+
--color-neutral-50: #13151c;
|
|
176
|
+
--color-neutral-100: #1e2130;
|
|
177
|
+
--color-neutral-200: #2c3044;
|
|
178
|
+
--color-neutral-300: #3c4055;
|
|
179
|
+
--color-neutral-400: #6b6e82;
|
|
180
|
+
--color-neutral-500: #9295a8;
|
|
181
|
+
--color-neutral-600: #b8bace;
|
|
182
|
+
--color-neutral-700: #d0d2e0;
|
|
183
|
+
--color-neutral-800: #e4e6f2;
|
|
184
|
+
--color-neutral-900: #f2f3f8;
|
|
185
|
+
|
|
186
|
+
/* Semantic status (dark-friendly) */
|
|
187
|
+
--color-success-light: #0a2e1c;
|
|
188
|
+
--color-success: #34d980;
|
|
189
|
+
--color-success-dark: #86efac;
|
|
190
|
+
--color-warning-light: #2e1d00;
|
|
191
|
+
--color-warning: #fbbf24;
|
|
192
|
+
--color-warning-dark: #fde68a;
|
|
193
|
+
--color-error-light: #2e0909;
|
|
194
|
+
--color-error: #f87171;
|
|
195
|
+
--color-error-dark: #fca5a5;
|
|
196
|
+
--color-info-light: #08163a;
|
|
197
|
+
--color-info: #60a5fa;
|
|
198
|
+
--color-info-dark: #93c5fd;
|
|
199
|
+
|
|
200
|
+
/* Semantic ds tokens (dark) */
|
|
201
|
+
--ds-surface: #1c1f28;
|
|
202
|
+
--ds-surface-hover: #252830;
|
|
203
|
+
--ds-surface-disabled: #1e2130;
|
|
204
|
+
--ds-surface-nav: #121924;
|
|
205
|
+
--ds-surface-nav-hover:#2a3548;
|
|
206
|
+
|
|
207
|
+
--ds-text: #f0f0f4;
|
|
208
|
+
--ds-text-2: #c8cad8;
|
|
209
|
+
--ds-text-muted: #8a8d9e;
|
|
210
|
+
--ds-text-placeholder: #5c5f70;
|
|
211
|
+
--ds-text-disabled: #44475a;
|
|
212
|
+
--ds-text-on-dark: #f0f0f4;
|
|
213
|
+
--ds-text-error: #ff6b6b;
|
|
214
|
+
|
|
215
|
+
--ds-border: #353848;
|
|
216
|
+
--ds-border-light: #272a38;
|
|
217
|
+
--ds-border-strong: #8a8d9e;
|
|
218
|
+
--ds-border-focus: #6b6e82;
|
|
219
|
+
--ds-border-error: #ff6b6b;
|
|
220
|
+
|
|
221
|
+
--ds-danger: #ff5252;
|
|
222
|
+
--ds-danger-hover: #d32f2f;
|
|
223
|
+
|
|
224
|
+
/* badge variants (dark) */
|
|
225
|
+
--ds-badge-success-bg: #0a2e1c;
|
|
226
|
+
--ds-badge-success-text: #34d980;
|
|
227
|
+
--ds-badge-warning-bg: #2e1d00;
|
|
228
|
+
--ds-badge-warning-text: #fbbf24;
|
|
229
|
+
--ds-badge-error-bg: #2e0909;
|
|
230
|
+
--ds-badge-error-text: #f87171;
|
|
231
|
+
--ds-badge-info-bg: #08163a;
|
|
232
|
+
--ds-badge-info-text: #60a5fa;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/* Applied via OS-level dark preference */
|
|
236
|
+
/* @media (prefers-color-scheme: dark) {
|
|
237
|
+
:root:not([data-theme="light"]) {
|
|
238
|
+
--color-neutral-0: #1c1f28;
|
|
239
|
+
--color-neutral-50: #13151c;
|
|
240
|
+
--color-neutral-100: #1e2130;
|
|
241
|
+
--color-neutral-200: #2c3044;
|
|
242
|
+
--color-neutral-300: #3c4055;
|
|
243
|
+
--color-neutral-400: #6b6e82;
|
|
244
|
+
--color-neutral-500: #9295a8;
|
|
245
|
+
--color-neutral-600: #b8bace;
|
|
246
|
+
--color-neutral-700: #d0d2e0;
|
|
247
|
+
--color-neutral-800: #e4e6f2;
|
|
248
|
+
--color-neutral-900: #f2f3f8;
|
|
249
|
+
|
|
250
|
+
--color-success-light: #0a2e1c;
|
|
251
|
+
--color-success: #34d980;
|
|
252
|
+
--color-success-dark: #86efac;
|
|
253
|
+
--color-warning-light: #2e1d00;
|
|
254
|
+
--color-warning: #fbbf24;
|
|
255
|
+
--color-warning-dark: #fde68a;
|
|
256
|
+
--color-error-light: #2e0909;
|
|
257
|
+
--color-error: #f87171;
|
|
258
|
+
--color-error-dark: #fca5a5;
|
|
259
|
+
--color-info-light: #08163a;
|
|
260
|
+
--color-info: #60a5fa;
|
|
261
|
+
--color-info-dark: #93c5fd;
|
|
262
|
+
|
|
263
|
+
--ds-surface: #1c1f28;
|
|
264
|
+
--ds-surface-hover: #252830;
|
|
265
|
+
--ds-surface-disabled: #1e2130;
|
|
266
|
+
--ds-surface-nav: #121924;
|
|
267
|
+
--ds-surface-nav-hover:#2a3548;
|
|
268
|
+
|
|
269
|
+
--ds-text: #f0f0f4;
|
|
270
|
+
--ds-text-2: #c8cad8;
|
|
271
|
+
--ds-text-muted: #8a8d9e;
|
|
272
|
+
--ds-text-placeholder: #5c5f70;
|
|
273
|
+
--ds-text-disabled: #44475a;
|
|
274
|
+
--ds-text-on-dark: #f0f0f4;
|
|
275
|
+
--ds-text-error: #ff6b6b;
|
|
276
|
+
|
|
277
|
+
--ds-border: #353848;
|
|
278
|
+
--ds-border-light: #272a38;
|
|
279
|
+
--ds-border-strong: #8a8d9e;
|
|
280
|
+
--ds-border-focus: #6b6e82;
|
|
281
|
+
--ds-border-error: #ff6b6b;
|
|
282
|
+
|
|
283
|
+
--ds-danger: #ff5252;
|
|
284
|
+
--ds-danger-hover: #d32f2f;
|
|
285
|
+
|
|
286
|
+
--ds-badge-success-bg: #0a2e1c;
|
|
287
|
+
--ds-badge-success-text: #34d980;
|
|
288
|
+
--ds-badge-warning-bg: #2e1d00;
|
|
289
|
+
--ds-badge-warning-text: #fbbf24;
|
|
290
|
+
--ds-badge-error-bg: #2e0909;
|
|
291
|
+
--ds-badge-error-text: #f87171;
|
|
292
|
+
--ds-badge-info-bg: #08163a;
|
|
293
|
+
--ds-badge-info-text: #60a5fa;
|
|
294
|
+
}
|
|
295
|
+
} */
|