@naeil/ui 0.2.0 → 0.3.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 (106) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/DESIGN.md +186 -0
  3. package/LICENSE +21 -0
  4. package/README.md +77 -53
  5. package/THIRD_PARTY_NOTICES.md +49 -0
  6. package/dist/{chunk-SYI3IKIC.js → chunk-QKVN6Q6C.js} +102 -19
  7. package/dist/components/index.d.ts +2 -2
  8. package/dist/components/index.js +9 -9
  9. package/dist/components/ui/index.d.ts +26 -4
  10. package/dist/components/ui/index.js +288 -33
  11. package/dist/source/components/footer.d.ts +15 -0
  12. package/dist/source/components/footer.js +172 -0
  13. package/dist/source/components/index.d.ts +11 -0
  14. package/dist/source/components/index.js +26 -0
  15. package/dist/source/components/locale-switcher.d.ts +17 -0
  16. package/dist/source/components/locale-switcher.js +66 -0
  17. package/dist/source/components/logo.d.ts +9 -0
  18. package/dist/source/components/logo.js +52 -0
  19. package/dist/source/components/nav.d.ts +39 -0
  20. package/dist/source/components/nav.js +412 -0
  21. package/dist/source/components/theme-provider.d.ts +6 -0
  22. package/dist/source/components/theme-provider.js +45 -0
  23. package/dist/source/components/theme-toggle-icon.d.ts +5 -0
  24. package/dist/source/components/theme-toggle-icon.js +62 -0
  25. package/dist/source/components/theme-toggle.d.ts +5 -0
  26. package/dist/source/components/theme-toggle.js +34 -0
  27. package/dist/source/components/typography.d.ts +12 -0
  28. package/dist/source/components/typography.js +49 -0
  29. package/dist/source/components/ui/avatar.d.ts +14 -0
  30. package/dist/source/components/ui/avatar.js +137 -0
  31. package/dist/source/components/ui/badge.d.ts +13 -0
  32. package/dist/source/components/ui/badge.js +76 -0
  33. package/dist/source/components/ui/button.d.ts +14 -0
  34. package/dist/source/components/ui/button.js +88 -0
  35. package/dist/source/components/ui/card.d.ts +13 -0
  36. package/dist/source/components/ui/card.js +135 -0
  37. package/dist/source/components/ui/checkbox.d.ts +7 -0
  38. package/dist/source/components/ui/checkbox.js +58 -0
  39. package/dist/source/components/ui/dialog.d.ts +20 -0
  40. package/dist/source/components/ui/dialog.js +182 -0
  41. package/dist/source/components/ui/dropdown-menu.d.ts +28 -0
  42. package/dist/source/components/ui/dropdown-menu.js +282 -0
  43. package/dist/source/components/ui/index.d.ts +19 -0
  44. package/dist/source/components/ui/index.js +131 -0
  45. package/dist/source/components/ui/input.d.ts +6 -0
  46. package/dist/source/components/ui/input.js +49 -0
  47. package/dist/source/components/ui/select.d.ts +16 -0
  48. package/dist/source/components/ui/select.js +197 -0
  49. package/dist/source/components/ui/sonner.d.ts +6 -0
  50. package/dist/source/components/ui/sonner.js +80 -0
  51. package/dist/source/components/ui/switch.d.ts +7 -0
  52. package/dist/source/components/ui/switch.js +54 -0
  53. package/dist/source/components/ui/tabs.d.ts +10 -0
  54. package/dist/source/components/ui/tabs.js +57 -0
  55. package/dist/source/components/ui/textarea.d.ts +6 -0
  56. package/dist/source/components/ui/textarea.js +46 -0
  57. package/dist/source/i18n/config.d.ts +6 -0
  58. package/dist/source/i18n/config.js +12 -0
  59. package/dist/source/i18n/routing.d.ts +371 -0
  60. package/dist/source/i18n/routing.js +17 -0
  61. package/dist/source/lib/design/modal-inert.d.ts +6 -0
  62. package/dist/source/lib/design/modal-inert.js +73 -0
  63. package/dist/source/lib/utils.d.ts +5 -0
  64. package/dist/source/lib/utils.js +8 -0
  65. package/dist/tokens.ts +217 -0
  66. package/docs/components/README.md +21 -0
  67. package/docs/components/avatar.md +47 -0
  68. package/docs/components/badge.md +29 -0
  69. package/docs/components/button.md +39 -0
  70. package/docs/components/card.md +32 -0
  71. package/docs/components/checkbox.md +35 -0
  72. package/docs/components/common.md +31 -0
  73. package/docs/components/composition.md +68 -0
  74. package/docs/components/dialog.md +41 -0
  75. package/docs/components/dropdown-menu.md +38 -0
  76. package/docs/components/input.md +32 -0
  77. package/docs/components/select.md +39 -0
  78. package/docs/components/sonner.md +37 -0
  79. package/docs/components/switch.md +33 -0
  80. package/docs/components/tabs.md +40 -0
  81. package/docs/components/textarea.md +35 -0
  82. package/docs/design/component-demand.md +30 -0
  83. package/docs/design/public-ui-final-verification.md +96 -0
  84. package/docs/design/public-ui-release-validation.md +86 -0
  85. package/docs/design/public-ui-stage3-verification.md +98 -0
  86. package/docs/design/public-ui-stage4-verification.md +129 -0
  87. package/docs/design/public-ui-support.md +40 -0
  88. package/docs/design/v2-migration.md +199 -0
  89. package/docs/package-release.md +89 -0
  90. package/licenses/Noto-Sans-JP-OFL.txt +93 -0
  91. package/licenses/Nunito-Sans-OFL.txt +93 -0
  92. package/licenses/Pretendard-OFL.txt +94 -0
  93. package/licenses/React-MIT.txt +21 -0
  94. package/licenses/Storybook-MIT.txt +21 -0
  95. package/licenses/popper-MIT.txt +25 -0
  96. package/licenses/react-remove-scroll-bar-MIT.txt +21 -0
  97. package/licenses/store2-MIT.txt +22 -0
  98. package/licenses/toggle-selection-MIT.txt +21 -0
  99. package/package.json +182 -34
  100. package/src/styles/components.css +276 -0
  101. package/src/styles/globals.css +18 -0
  102. package/src/styles/theme.css +185 -98
  103. package/messages/en.json +0 -221
  104. package/messages/ja.json +0 -221
  105. package/messages/ko.json +0 -221
  106. package/src/app/globals.css +0 -32
@@ -0,0 +1,276 @@
1
+ @layer components {
2
+ .ui-textarea {
3
+ min-height: var(--ui-control-height);
4
+ font-size: var(--text-base);
5
+ line-height: var(--leading-normal);
6
+ padding-block: var(--spacing-2-value);
7
+ transition:
8
+ color var(--ui-motion-fast),
9
+ background-color var(--ui-motion-fast),
10
+ border-color var(--ui-motion-fast);
11
+ }
12
+ .ui-textarea[aria-invalid="true"] {
13
+ border-color: var(--error);
14
+ }
15
+ .ui-textarea::placeholder {
16
+ color: var(--muted-foreground);
17
+ opacity: 1;
18
+ }
19
+ .ui-tabs {
20
+ display: flex;
21
+ flex-direction: column;
22
+ gap: var(--spacing-3-value);
23
+ }
24
+ .ui-tabs[data-orientation="vertical"] {
25
+ flex-direction: row;
26
+ }
27
+ .ui-tabs-list {
28
+ display: flex;
29
+ align-items: flex-start;
30
+ max-width: 100%;
31
+ min-width: 0;
32
+ gap: var(--spacing-2-value);
33
+ padding: var(--spacing-2-value);
34
+ overflow-x: auto;
35
+ }
36
+ .ui-tabs-list[aria-orientation="vertical"] {
37
+ flex-direction: column;
38
+ flex-shrink: 0;
39
+ align-self: flex-start;
40
+ }
41
+ .ui-tabs-trigger {
42
+ color: var(--foreground);
43
+ border-bottom-color: transparent;
44
+ }
45
+ .ui-tabs-trigger:hover:not(:disabled) {
46
+ background-color: var(--surface-subtle);
47
+ }
48
+ .ui-tabs-trigger[data-state="active"] {
49
+ background-color: var(--surface-selected);
50
+ border-bottom-color: var(--primary);
51
+ }
52
+ .ui-focus:focus-visible {
53
+ outline: 2px solid var(--ring);
54
+ outline-offset: 3px;
55
+ }
56
+ .ui-control {
57
+ height: var(--ui-control-height);
58
+ font-size: var(--text-base);
59
+ line-height: var(--leading-normal);
60
+ border-radius: var(--radius-md-value);
61
+ transition:
62
+ color var(--ui-motion-fast),
63
+ background-color var(--ui-motion-fast),
64
+ border-color var(--ui-motion-fast);
65
+ }
66
+ .ui-control[data-size="lg"],
67
+ .ui-control[data-size="icon-lg"] {
68
+ height: calc(var(--ui-control-height) + 4px);
69
+ }
70
+ .ui-control[data-size^="icon"] {
71
+ width: var(--ui-control-height);
72
+ padding: 0;
73
+ }
74
+ .ui-control[aria-invalid="true"] {
75
+ border-color: var(--error);
76
+ }
77
+ .ui-control::placeholder {
78
+ color: var(--muted-foreground);
79
+ opacity: 1;
80
+ }
81
+ [data-slot="button"][aria-busy="true"] {
82
+ cursor: progress;
83
+ }
84
+ .ui-menu {
85
+ background: var(--popover);
86
+ color: var(--popover-foreground);
87
+ border: 1px solid var(--border-strong);
88
+ border-radius: var(--radius-md-value);
89
+ box-shadow: var(--shadow-md);
90
+ }
91
+ .ui-menu [role^="menuitem"],
92
+ .ui-menu [role="option"] {
93
+ min-height: var(--ui-control-height);
94
+ font-size: var(--text-base);
95
+ }
96
+ .ui-menu [data-highlighted] {
97
+ background: var(--surface-subtle);
98
+ outline: 1px solid var(--ring);
99
+ outline-offset: -2px;
100
+ }
101
+ .ui-popup[data-state="open"] {
102
+ animation: ui-reveal var(--ui-motion-fast) ease-out;
103
+ }
104
+ .ui-popup[data-state="closed"] {
105
+ animation: ui-hide var(--ui-motion-fast) ease-in;
106
+ }
107
+ [data-slot="dialog-content"],
108
+ [data-slot="dialog-overlay"] {
109
+ --ui-motion-fast: var(--ui-motion-standard);
110
+ }
111
+ [data-slot="card"] {
112
+ gap: var(--ui-field-gap);
113
+ padding-block: var(--ui-panel-padding);
114
+ }
115
+ [data-slot="card-header"],
116
+ [data-slot="card-content"],
117
+ [data-slot="card-footer"] {
118
+ padding-inline: var(--ui-panel-padding);
119
+ }
120
+ [data-ui-layout] {
121
+ width: 100%;
122
+ margin-inline: auto;
123
+ }
124
+ [data-ui-layout="reading"] {
125
+ max-width: var(--ui-width-reading);
126
+ line-height: var(--leading-relaxed);
127
+ }
128
+ [data-ui-layout="settings"] {
129
+ max-width: var(--ui-width-settings);
130
+ }
131
+ [data-ui-layout="list"] {
132
+ max-width: var(--ui-width-list);
133
+ }
134
+ [data-ui-layout="short-form"] {
135
+ max-width: var(--ui-width-short-form);
136
+ }
137
+ [data-ui-layout="fluid"] {
138
+ max-width: none;
139
+ }
140
+ .ui-choice {
141
+ position: relative;
142
+ display: inline-flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ flex-shrink: 0;
146
+ }
147
+ .ui-choice:disabled {
148
+ opacity: 0.45;
149
+ cursor: not-allowed;
150
+ }
151
+ .ui-choice::before {
152
+ content: "";
153
+ position: absolute;
154
+ width: 44px;
155
+ height: 44px;
156
+ left: 50%;
157
+ top: 50%;
158
+ transform: translate(-50%, -50%);
159
+ }
160
+ [data-slot="switch"] {
161
+ width: 36px;
162
+ height: 22px;
163
+ padding: 3px;
164
+ border-radius: 999px;
165
+ background: var(--border-strong);
166
+ transition: background-color var(--ui-motion-fast);
167
+ }
168
+ [data-slot="switch"][data-state="checked"] {
169
+ background: var(--primary);
170
+ }
171
+ [data-slot="switch-thumb"] {
172
+ width: 16px;
173
+ height: 16px;
174
+ border-radius: 999px;
175
+ background: white;
176
+ transform: translateX(-7px);
177
+ transition: transform var(--ui-motion-standard);
178
+ }
179
+ [data-slot="switch-thumb"][data-state="checked"] {
180
+ background: var(--primary-foreground);
181
+ transform: translateX(7px);
182
+ }
183
+ [data-slot="checkbox"] {
184
+ width: 18px;
185
+ height: 18px;
186
+ border: 1px solid var(--border-strong);
187
+ border-radius: var(--radius-sm-value);
188
+ background: var(--background);
189
+ }
190
+ [data-slot="checkbox"][data-state="checked"],
191
+ [data-slot="checkbox"][data-state="indeterminate"] {
192
+ color: var(--primary-foreground);
193
+ background: var(--primary);
194
+ border-color: var(--primary);
195
+ }
196
+ .ui-choice-label {
197
+ display: inline-flex;
198
+ align-items: center;
199
+ gap: 12px;
200
+ min-height: 44px;
201
+ cursor: pointer;
202
+ }
203
+ [data-sonner-toast] {
204
+ font-family: var(--font-sans);
205
+ --normal-bg: var(--popover);
206
+ --normal-text: var(--foreground);
207
+ --normal-border: var(--border-strong);
208
+ transition-duration: var(--ui-motion-standard);
209
+ }
210
+ }
211
+
212
+ @keyframes ui-reveal {
213
+ from {
214
+ opacity: 0;
215
+ }
216
+ to {
217
+ opacity: 1;
218
+ }
219
+ }
220
+ @keyframes ui-hide {
221
+ from {
222
+ opacity: 1;
223
+ }
224
+ to {
225
+ opacity: 0;
226
+ }
227
+ }
228
+ @media (max-width: 560px), (pointer: coarse) {
229
+ .ui-control,
230
+ .ui-textarea,
231
+ [data-slot="dialog-close"] {
232
+ min-height: 44px;
233
+ }
234
+ .ui-control[data-size^="icon"],
235
+ [data-slot="dialog-close"] {
236
+ min-width: 44px;
237
+ }
238
+ }
239
+ @media (prefers-reduced-motion: reduce) {
240
+ [data-slot],
241
+ [data-slot] *,
242
+ [data-sonner-toast],
243
+ [data-sonner-toast] * {
244
+ animation: none !important;
245
+ transition: none !important;
246
+ scroll-behavior: auto !important;
247
+ }
248
+ }
249
+
250
+ /* Background-only switch tracks/thumbs both become Canvas under forced colors.
251
+ System colors preserve the control boundary, state and moving thumb. */
252
+ @media (forced-colors: active) {
253
+ [data-slot="switch"] {
254
+ forced-color-adjust: none;
255
+ border: 1px solid ButtonText;
256
+ background: Canvas;
257
+ }
258
+ [data-slot="switch-thumb"] {
259
+ background: ButtonText;
260
+ }
261
+ [data-slot="switch"][data-state="checked"] {
262
+ background: Highlight;
263
+ border-color: Highlight;
264
+ }
265
+ [data-slot="switch-thumb"][data-state="checked"] {
266
+ background: HighlightText;
267
+ }
268
+ [data-slot="switch"]:disabled {
269
+ opacity: 1;
270
+ background: Canvas;
271
+ border-color: GrayText;
272
+ }
273
+ [data-slot="switch"]:disabled [data-slot="switch-thumb"] {
274
+ background: GrayText;
275
+ }
276
+ }
@@ -0,0 +1,18 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+ @import "./theme.css";
4
+ @import "./components.css";
5
+
6
+ @custom-variant dark (&:is(.dark *));
7
+
8
+ @layer base {
9
+ * {
10
+ @apply border-border;
11
+ }
12
+ body {
13
+ @apply bg-background text-foreground font-sans text-base leading-normal antialiased;
14
+ }
15
+ :lang(ja) {
16
+ font-family: "Noto Sans JP", var(--font-sans);
17
+ }
18
+ }
@@ -1,8 +1,8 @@
1
+ /* Generated from src/tokens — DO NOT EDIT. */
1
2
  @theme inline {
2
3
  --color-background: var(--background);
3
4
  --color-foreground: var(--foreground);
4
5
  --color-card: var(--card);
5
- --color-card-elevated: var(--card-elevated);
6
6
  --color-card-foreground: var(--card-foreground);
7
7
  --color-popover: var(--popover);
8
8
  --color-popover-foreground: var(--popover-foreground);
@@ -35,6 +35,18 @@
35
35
  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
36
36
  --color-sidebar-border: var(--sidebar-border);
37
37
  --color-sidebar-ring: var(--sidebar-ring);
38
+ --color-card-elevated: var(--card-elevated);
39
+ --color-primary-hover: var(--primary-hover);
40
+ --color-surface-selected: var(--surface-selected);
41
+ --color-border-strong: var(--border-strong);
42
+ --color-error: var(--error);
43
+ --color-error-bg: var(--error-bg);
44
+ --color-success: var(--success);
45
+ --color-success-bg: var(--success-bg);
46
+ --color-warning: var(--warning);
47
+ --color-warning-bg: var(--warning-bg);
48
+ --color-info: var(--info);
49
+ --color-info-bg: var(--info-bg);
38
50
 
39
51
  --color-project-cc: var(--project-cc);
40
52
  --color-project-sa: var(--project-sa);
@@ -42,9 +54,26 @@
42
54
  --color-project-naeilUi: var(--project-naeilUi);
43
55
  --color-project-baby: var(--project-baby);
44
56
 
45
- --font-sans: 'Pretendard Variable', Pretendard, -apple-system, system-ui, sans-serif;
57
+ --font-sans: 'Pretendard Variable', Pretendard, 'Noto Sans JP', -apple-system, system-ui, sans-serif;
46
58
  --font-mono: 'JetBrains Mono', 'Geist Mono', ui-monospace, monospace;
47
59
 
60
+ --text-xs: 0.8125rem;
61
+ --text-sm: 0.875rem;
62
+ --text-base: 1rem;
63
+ --text-lg: 1.125rem;
64
+ --text-xl: 1.25rem;
65
+ --text-2xl: 1.5rem;
66
+ --text-3xl: 2rem;
67
+ --text-4xl: 2.25rem;
68
+ --font-weight-normal: 400;
69
+ --font-weight-medium: 500;
70
+ --font-weight-bold: 700;
71
+ --font-weight-semibold: 600;
72
+ --leading-tight: 1.25;
73
+ --leading-normal: 1.5625;
74
+ --leading-relaxed: 1.875;
75
+ --shadow-sm: 0 1px 2px 0 oklch(0 0 0 / 0.05);
76
+ --shadow-md: 0 4px 6px -1px oklch(0 0 0 / 0.1), 0 2px 4px -2px oklch(0 0 0 / 0.1);
48
77
  --radius-none: var(--radius-none-value);
49
78
  --radius-sm: var(--radius-sm-value);
50
79
  --radius-md: var(--radius-md-value);
@@ -64,43 +93,69 @@
64
93
  }
65
94
 
66
95
  :root {
67
- --background: oklch(1 0 0);
68
- --foreground: oklch(0.145 0 0);
69
- --card: oklch(1 0 0);
70
- --card-elevated: oklch(1 0 0);
71
- --card-foreground: oklch(0.145 0 0);
72
- --popover: oklch(1 0 0);
73
- --popover-foreground: oklch(0.145 0 0);
74
- --primary: oklch(0.205 0 0);
75
- --primary-foreground: oklch(0.985 0 0);
76
- --secondary: oklch(0.970 0 0);
77
- --secondary-foreground: oklch(0.205 0 0);
78
- --muted: oklch(0.970 0 0);
79
- --muted-foreground: oklch(0.556 0 0);
80
- --accent: oklch(0.970 0 0);
81
- --accent-foreground: oklch(0.205 0 0);
82
- --destructive: oklch(0.577 0.245 27.325);
83
- --destructive-foreground: oklch(0.985 0 0);
84
- --border: oklch(0.922 0 0);
85
- --border-subtle: oklch(0 0 0 / 6%);
86
- --border-subtle-hover: oklch(0 0 0 / 12%);
87
- --surface-subtle: oklch(0 0 0 / 2%);
88
- --input: oklch(0.922 0 0);
89
- --ring: oklch(0.708 0 0);
96
+ --background: #f7f8fa;
97
+ --foreground: #202127;
98
+ --card: #ffffff;
99
+ --card-foreground: #202127;
100
+ --popover: #ffffff;
101
+ --popover-foreground: #202127;
102
+ --primary: #292929;
103
+ --primary-foreground: #ffffff;
104
+ --secondary: #ebebeb;
105
+ --secondary-foreground: #202127;
106
+ --muted: #f0f1f5;
107
+ --muted-foreground: #5f626e;
108
+ --accent: #ebebeb;
109
+ --accent-foreground: #202127;
110
+ --destructive: #b73a45;
111
+ --destructive-foreground: #ffffff;
112
+ --border: #e2e3e9;
113
+ --border-subtle: #e2e3e9;
114
+ --border-subtle-hover: #8c8f9b;
115
+ --surface-subtle: #f0f1f5;
116
+ --input: #8c8f9b;
117
+ --ring: #616161;
90
118
  --chart-1: oklch(0.646 0.222 41.116);
91
119
  --chart-2: oklch(0.6 0.118 184.704);
92
120
  --chart-3: oklch(0.398 0.07 227.392);
93
121
  --chart-4: oklch(0.828 0.189 84.429);
94
122
  --chart-5: oklch(0.769 0.188 70.08);
95
- --sidebar: oklch(0.985 0 0);
96
- --sidebar-foreground: oklch(0.145 0 0);
97
- --sidebar-primary: oklch(0.205 0 0);
98
- --sidebar-primary-foreground: oklch(0.985 0 0);
99
- --sidebar-accent: oklch(0.970 0 0);
100
- --sidebar-accent-foreground: oklch(0.205 0 0);
101
- --sidebar-border: oklch(0.922 0 0);
102
- --sidebar-ring: oklch(0.708 0 0);
123
+ --sidebar: #ffffff;
124
+ --sidebar-foreground: #202127;
125
+ --sidebar-primary: #292929;
126
+ --sidebar-primary-foreground: #ffffff;
127
+ --sidebar-accent: #ebebeb;
128
+ --sidebar-accent-foreground: #202127;
129
+ --sidebar-border: #e2e3e9;
130
+ --sidebar-ring: #616161;
131
+ --card-elevated: #ffffff;
132
+ --primary-hover: #414141;
133
+ --surface-selected: #ebebeb;
134
+ --border-strong: #8c8f9b;
135
+ --error: #b73a45;
136
+ --error-bg: #fff0f1;
137
+ --success: #246a49;
138
+ --success-bg: #e9f5ee;
139
+ --warning: #865d17;
140
+ --warning-bg: #fff3da;
141
+ --info: #245ec7;
142
+ --info-bg: #edf3ff;
103
143
 
144
+ --ui-control-height: 40px;
145
+ --ui-control-height-compact: 36px;
146
+ --ui-touch-target: 44px;
147
+ --ui-row-height: 72px;
148
+ --ui-row-height-compact: 60px;
149
+ --ui-panel-padding: 24px;
150
+ --ui-panel-padding-compact: 20px;
151
+ --ui-field-gap: 24px;
152
+ --ui-field-gap-compact: 16px;
153
+ --ui-width-reading: 640px;
154
+ --ui-width-settings: 640px;
155
+ --ui-width-list: 1200px;
156
+ --ui-width-short-form: 480px;
157
+ --ui-motion-fast: 120ms;
158
+ --ui-motion-standard: 180ms;
104
159
  --project-cc: oklch(0.704 0.140 181);
105
160
  --project-sa: oklch(0.723 0.219 149);
106
161
  --project-pkm: oklch(0.627 0.265 303);
@@ -108,9 +163,9 @@
108
163
  --project-baby: oklch(0.769 0.188 70.08);
109
164
 
110
165
  --radius-none-value: 0px;
111
- --radius-sm-value: 2px;
112
- --radius-md-value: 4px;
113
- --radius-lg-value: 8px;
166
+ --radius-sm-value: 4px;
167
+ --radius-md-value: 8px;
168
+ --radius-lg-value: 12px;
114
169
 
115
170
  --spacing-0-value: 0px;
116
171
  --spacing-1-value: 4px;
@@ -126,81 +181,113 @@
126
181
  }
127
182
 
128
183
  .dark {
129
- --background: oklch(0.145 0 0);
130
- --foreground: oklch(0.985 0 0);
131
- --card: oklch(0.205 0 0);
132
- --card-elevated: oklch(0.18 0 0);
133
- --card-foreground: oklch(0.985 0 0);
134
- --popover: oklch(0.205 0 0);
135
- --popover-foreground: oklch(0.985 0 0);
136
- --primary: oklch(0.922 0 0);
137
- --primary-foreground: oklch(0.205 0 0);
138
- --secondary: oklch(0.269 0 0);
139
- --secondary-foreground: oklch(0.985 0 0);
140
- --muted: oklch(0.269 0 0);
141
- --muted-foreground: oklch(0.708 0 0);
142
- --accent: oklch(0.269 0 0);
143
- --accent-foreground: oklch(0.985 0 0);
144
- --destructive: oklch(0.577 0.245 27.325);
145
- --destructive-foreground: oklch(0.985 0 0);
146
- --border: oklch(1 0 0 / 10%);
147
- --border-subtle: oklch(1 0 0 / 6%);
148
- --border-subtle-hover: oklch(1 0 0 / 12%);
149
- --surface-subtle: oklch(1 0 0 / 3%);
150
- --input: oklch(1 0 0 / 15%);
151
- --ring: oklch(0.556 0 0);
184
+ --background: #0b0c0e;
185
+ --foreground: #eff0f3;
186
+ --card: #111215;
187
+ --card-foreground: #eff0f3;
188
+ --popover: #191a1f;
189
+ --popover-foreground: #eff0f3;
190
+ --primary: #e5e5e5;
191
+ --primary-foreground: #171717;
192
+ --secondary: #262626;
193
+ --secondary-foreground: #eff0f3;
194
+ --muted: #202127;
195
+ --muted-foreground: #a4a6b0;
196
+ --accent: #262626;
197
+ --accent-foreground: #eff0f3;
198
+ --destructive: #b73a45;
199
+ --destructive-foreground: #ffffff;
200
+ --border: #292b33;
201
+ --border-subtle: #292b33;
202
+ --border-subtle-hover: #646773;
203
+ --surface-subtle: #202127;
204
+ --input: #646773;
205
+ --ring: #b5b5b5;
152
206
  --chart-1: oklch(0.488 0.243 264.376);
153
207
  --chart-2: oklch(0.696 0.17 162.48);
154
208
  --chart-3: oklch(0.769 0.188 70.08);
155
209
  --chart-4: oklch(0.627 0.265 303.9);
156
210
  --chart-5: oklch(0.645 0.246 16.439);
157
- --sidebar: oklch(0.205 0 0);
158
- --sidebar-foreground: oklch(0.985 0 0);
159
- --sidebar-primary: oklch(0.488 0.243 264.376);
160
- --sidebar-primary-foreground: oklch(0.985 0 0);
161
- --sidebar-accent: oklch(0.269 0 0);
162
- --sidebar-accent-foreground: oklch(0.985 0 0);
163
- --sidebar-border: oklch(1 0 0 / 10%);
164
- --sidebar-ring: oklch(0.556 0 0);
211
+ --sidebar: #111215;
212
+ --sidebar-foreground: #eff0f3;
213
+ --sidebar-primary: #e5e5e5;
214
+ --sidebar-primary-foreground: #171717;
215
+ --sidebar-accent: #262626;
216
+ --sidebar-accent-foreground: #eff0f3;
217
+ --sidebar-border: #292b33;
218
+ --sidebar-ring: #b5b5b5;
219
+ --card-elevated: #191a1f;
220
+ --primary-hover: #cccccc;
221
+ --surface-selected: #262626;
222
+ --border-strong: #646773;
223
+ --error: #f0a0a0;
224
+ --error-bg: #342021;
225
+ --success: #87c9a6;
226
+ --success-bg: #182b23;
227
+ --warning: #e4bf78;
228
+ --warning-bg: #302819;
229
+ --info: #a2c2ff;
230
+ --info-bg: #18263f;
165
231
  }
166
232
 
167
233
  @media (prefers-color-scheme: dark) {
168
234
  :root:not(.light) {
169
- --background: oklch(0.145 0 0);
170
- --foreground: oklch(0.985 0 0);
171
- --card: oklch(0.205 0 0);
172
- --card-elevated: oklch(0.18 0 0);
173
- --card-foreground: oklch(0.985 0 0);
174
- --popover: oklch(0.205 0 0);
175
- --popover-foreground: oklch(0.985 0 0);
176
- --primary: oklch(0.922 0 0);
177
- --primary-foreground: oklch(0.205 0 0);
178
- --secondary: oklch(0.269 0 0);
179
- --secondary-foreground: oklch(0.985 0 0);
180
- --muted: oklch(0.269 0 0);
181
- --muted-foreground: oklch(0.708 0 0);
182
- --accent: oklch(0.269 0 0);
183
- --accent-foreground: oklch(0.985 0 0);
184
- --destructive: oklch(0.577 0.245 27.325);
185
- --destructive-foreground: oklch(0.985 0 0);
186
- --border: oklch(1 0 0 / 10%);
187
- --border-subtle: oklch(1 0 0 / 6%);
188
- --border-subtle-hover: oklch(1 0 0 / 12%);
189
- --surface-subtle: oklch(1 0 0 / 3%);
190
- --input: oklch(1 0 0 / 15%);
191
- --ring: oklch(0.556 0 0);
235
+ --background: #0b0c0e;
236
+ --foreground: #eff0f3;
237
+ --card: #111215;
238
+ --card-foreground: #eff0f3;
239
+ --popover: #191a1f;
240
+ --popover-foreground: #eff0f3;
241
+ --primary: #e5e5e5;
242
+ --primary-foreground: #171717;
243
+ --secondary: #262626;
244
+ --secondary-foreground: #eff0f3;
245
+ --muted: #202127;
246
+ --muted-foreground: #a4a6b0;
247
+ --accent: #262626;
248
+ --accent-foreground: #eff0f3;
249
+ --destructive: #b73a45;
250
+ --destructive-foreground: #ffffff;
251
+ --border: #292b33;
252
+ --border-subtle: #292b33;
253
+ --border-subtle-hover: #646773;
254
+ --surface-subtle: #202127;
255
+ --input: #646773;
256
+ --ring: #b5b5b5;
192
257
  --chart-1: oklch(0.488 0.243 264.376);
193
258
  --chart-2: oklch(0.696 0.17 162.48);
194
259
  --chart-3: oklch(0.769 0.188 70.08);
195
260
  --chart-4: oklch(0.627 0.265 303.9);
196
261
  --chart-5: oklch(0.645 0.246 16.439);
197
- --sidebar: oklch(0.205 0 0);
198
- --sidebar-foreground: oklch(0.985 0 0);
199
- --sidebar-primary: oklch(0.488 0.243 264.376);
200
- --sidebar-primary-foreground: oklch(0.985 0 0);
201
- --sidebar-accent: oklch(0.269 0 0);
202
- --sidebar-accent-foreground: oklch(0.985 0 0);
203
- --sidebar-border: oklch(1 0 0 / 10%);
204
- --sidebar-ring: oklch(0.556 0 0);
262
+ --sidebar: #111215;
263
+ --sidebar-foreground: #eff0f3;
264
+ --sidebar-primary: #e5e5e5;
265
+ --sidebar-primary-foreground: #171717;
266
+ --sidebar-accent: #262626;
267
+ --sidebar-accent-foreground: #eff0f3;
268
+ --sidebar-border: #292b33;
269
+ --sidebar-ring: #b5b5b5;
270
+ --card-elevated: #191a1f;
271
+ --primary-hover: #cccccc;
272
+ --surface-selected: #262626;
273
+ --border-strong: #646773;
274
+ --error: #f0a0a0;
275
+ --error-bg: #342021;
276
+ --success: #87c9a6;
277
+ --success-bg: #182b23;
278
+ --warning: #e4bf78;
279
+ --warning-bg: #302819;
280
+ --info: #a2c2ff;
281
+ --info-bg: #18263f;
205
282
  }
206
283
  }
284
+
285
+ :root[data-ui-density="compact"] {
286
+ --ui-control-height: 36px;
287
+ --ui-row-height: 60px;
288
+ --ui-panel-padding: 20px;
289
+ --ui-field-gap: 16px;
290
+ }
291
+ @media (max-width: 560px), (pointer: coarse) {
292
+ :root, :root[data-ui-density="compact"] { --ui-control-height: var(--ui-touch-target); --ui-row-height: 72px; }
293
+ }