openuispec 0.1.25 → 0.1.28

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 (139) hide show
  1. package/README.md +63 -18
  2. package/cli/index.ts +21 -3
  3. package/cli/init.ts +27 -11
  4. package/docs/implementation-notes.md +119 -0
  5. package/docs/release-notes-v0.1.26.md +64 -0
  6. package/docs/release-notes-v0.1.27.md +28 -0
  7. package/docs/release-notes-v0.1.28.md +25 -0
  8. package/docs/stress-test-maturity-report.md +1 -1
  9. package/drift/index.ts +396 -22
  10. package/examples/taskflow/AGENTS.md +112 -0
  11. package/examples/taskflow/CLAUDE.md +112 -0
  12. package/examples/taskflow/generated/android/TaskFlow/README.md +43 -0
  13. package/examples/taskflow/generated/android/TaskFlow/app/build.gradle.kts +76 -0
  14. package/examples/taskflow/generated/android/TaskFlow/app/proguard-rules.pro +1 -0
  15. package/examples/taskflow/generated/android/TaskFlow/app/src/main/AndroidManifest.xml +21 -0
  16. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/MainActivity.kt +19 -0
  17. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/TaskFlowApp.kt +283 -0
  18. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/model/DomainModels.kt +106 -0
  19. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/model/SampleData.kt +57 -0
  20. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/components/Common.kt +109 -0
  21. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/HomeScreen.kt +112 -0
  22. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/ProjectsScreen.kt +61 -0
  23. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/SettingsScreen.kt +82 -0
  24. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/TaskDetailScreen.kt +111 -0
  25. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/sheets/Sheets.kt +77 -0
  26. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Color.kt +30 -0
  27. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Theme.kt +86 -0
  28. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Type.kt +57 -0
  29. package/examples/taskflow/generated/android/TaskFlow/app/src/main/res/values/strings.xml +155 -0
  30. package/examples/taskflow/generated/android/TaskFlow/app/src/main/res/values/themes.xml +4 -0
  31. package/examples/taskflow/generated/android/TaskFlow/build.gradle.kts +5 -0
  32. package/examples/taskflow/generated/android/TaskFlow/gradle/gradle-daemon-jvm.properties +12 -0
  33. package/examples/taskflow/generated/android/TaskFlow/gradle/wrapper/gradle-wrapper.jar +0 -0
  34. package/examples/taskflow/generated/android/TaskFlow/gradle/wrapper/gradle-wrapper.properties +7 -0
  35. package/examples/taskflow/generated/android/TaskFlow/gradle.properties +4 -0
  36. package/examples/taskflow/generated/android/TaskFlow/gradlew +18 -0
  37. package/examples/taskflow/generated/android/TaskFlow/gradlew.bat +12 -0
  38. package/examples/taskflow/generated/android/TaskFlow/settings.gradle.kts +18 -0
  39. package/examples/taskflow/generated/ios/TaskFlow/README.md +21 -0
  40. package/examples/taskflow/generated/ios/TaskFlow/Resources/en.lproj/Localizable.strings +115 -0
  41. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/App/TaskFlowApp.swift +24 -0
  42. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Components/AppChrome.swift +150 -0
  43. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Flows/TaskEditorSheet.swift +220 -0
  44. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Models/DomainModels.swift +122 -0
  45. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/CalendarView.swift +21 -0
  46. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/HomeView.swift +201 -0
  47. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProfileEditView.swift +48 -0
  48. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProjectDetailView.swift +59 -0
  49. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProjectsView.swift +63 -0
  50. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/SettingsView.swift +85 -0
  51. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/TaskDetailView.swift +219 -0
  52. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Support/AppModel.swift +320 -0
  53. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Support/AppSupport.swift +41 -0
  54. package/examples/taskflow/generated/ios/TaskFlow/project.yml +26 -0
  55. package/examples/taskflow/generated/web/TaskFlow/README.md +19 -0
  56. package/examples/taskflow/generated/web/TaskFlow/index.html +12 -0
  57. package/examples/taskflow/generated/web/TaskFlow/package-lock.json +1908 -0
  58. package/examples/taskflow/generated/web/TaskFlow/package.json +24 -0
  59. package/examples/taskflow/generated/web/TaskFlow/src/App.tsx +58 -0
  60. package/examples/taskflow/generated/web/TaskFlow/src/AppShell.tsx +55 -0
  61. package/examples/taskflow/generated/web/TaskFlow/src/components/Common.tsx +82 -0
  62. package/examples/taskflow/generated/web/TaskFlow/src/components/Modals.tsx +191 -0
  63. package/examples/taskflow/generated/web/TaskFlow/src/components/Nav.tsx +41 -0
  64. package/examples/taskflow/generated/web/TaskFlow/src/generated/messages.ts +131 -0
  65. package/examples/taskflow/generated/web/TaskFlow/src/hooks.ts +25 -0
  66. package/examples/taskflow/generated/web/TaskFlow/src/i18n.ts +39 -0
  67. package/examples/taskflow/generated/web/TaskFlow/src/locales.en.json +111 -0
  68. package/examples/taskflow/generated/web/TaskFlow/src/main.tsx +13 -0
  69. package/examples/taskflow/generated/web/TaskFlow/src/screens/HomeScreen.tsx +111 -0
  70. package/examples/taskflow/generated/web/TaskFlow/src/screens/ProjectsScreen.tsx +82 -0
  71. package/examples/taskflow/generated/web/TaskFlow/src/screens/SettingsScreens.tsx +132 -0
  72. package/examples/taskflow/generated/web/TaskFlow/src/screens/TaskDetail.tsx +105 -0
  73. package/examples/taskflow/generated/web/TaskFlow/src/store.ts +216 -0
  74. package/examples/taskflow/generated/web/TaskFlow/src/styles.css +617 -0
  75. package/examples/taskflow/generated/web/TaskFlow/src/types.ts +64 -0
  76. package/examples/taskflow/generated/web/TaskFlow/src/utils.ts +78 -0
  77. package/examples/taskflow/generated/web/TaskFlow/tsconfig.json +21 -0
  78. package/examples/taskflow/generated/web/TaskFlow/vite.config.ts +6 -0
  79. package/examples/taskflow/openuispec/README.md +49 -0
  80. package/examples/todo-orbit/AGENTS.md +46 -14
  81. package/examples/todo-orbit/CLAUDE.md +46 -14
  82. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/components/CommonComponents.kt +69 -18
  83. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/screens/TasksScreen.kt +5 -0
  84. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/sheets/EditorSheets.kt +5 -2
  85. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/res/values/strings.xml +1 -0
  86. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/res/values-ru/strings.xml +1 -0
  87. package/examples/todo-orbit/generated/ios/Todo Orbit/Resources/en.lproj/Localizable.strings +1 -0
  88. package/examples/todo-orbit/generated/ios/Todo Orbit/Resources/ru.lproj/Localizable.strings +1 -0
  89. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Flows/RecurringRuleSheet.swift +3 -0
  90. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Flows/TaskEditorSheet.swift +1 -0
  91. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Screens/SettingsView.swift +2 -0
  92. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Screens/TasksHomeView.swift +1 -0
  93. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Support/AppModel.swift +1 -1
  94. package/examples/todo-orbit/generated/web/Todo Orbit/src/App.tsx +59 -6
  95. package/examples/todo-orbit/generated/web/Todo Orbit/src/styles.css +40 -0
  96. package/examples/todo-orbit/openuispec/README.md +24 -131
  97. package/examples/todo-orbit/openuispec/flows/create_recurring_rule.yaml +3 -0
  98. package/examples/todo-orbit/openuispec/flows/create_task.yaml +1 -0
  99. package/examples/todo-orbit/openuispec/flows/edit_task.yaml +1 -0
  100. package/examples/todo-orbit/openuispec/locales/en.json +1 -0
  101. package/examples/todo-orbit/openuispec/locales/ru.json +1 -0
  102. package/examples/todo-orbit/openuispec/screens/task_detail.yaml +1 -0
  103. package/examples/todo-orbit/openuispec/tokens/icons.yaml +6 -0
  104. package/package.json +6 -1
  105. package/prepare/index.ts +391 -0
  106. package/schema/semantic-lint.ts +592 -0
  107. package/schema/validate.ts +17 -13
  108. package/status/index.ts +200 -0
  109. /package/examples/taskflow/{contracts → openuispec/contracts}/README.md +0 -0
  110. /package/examples/taskflow/{contracts → openuispec/contracts}/action_trigger.yaml +0 -0
  111. /package/examples/taskflow/{contracts → openuispec/contracts}/collection.yaml +0 -0
  112. /package/examples/taskflow/{contracts → openuispec/contracts}/data_display.yaml +0 -0
  113. /package/examples/taskflow/{contracts → openuispec/contracts}/feedback.yaml +0 -0
  114. /package/examples/taskflow/{contracts → openuispec/contracts}/input_field.yaml +0 -0
  115. /package/examples/taskflow/{contracts → openuispec/contracts}/nav_container.yaml +0 -0
  116. /package/examples/taskflow/{contracts → openuispec/contracts}/surface.yaml +0 -0
  117. /package/examples/taskflow/{contracts → openuispec/contracts}/x_media_player.yaml +0 -0
  118. /package/examples/taskflow/{flows → openuispec/flows}/create_task.yaml +0 -0
  119. /package/examples/taskflow/{flows → openuispec/flows}/edit_task.yaml +0 -0
  120. /package/examples/taskflow/{locales → openuispec/locales}/en.json +0 -0
  121. /package/examples/taskflow/{openuispec.yaml → openuispec/openuispec.yaml} +0 -0
  122. /package/examples/taskflow/{platform → openuispec/platform}/android.yaml +0 -0
  123. /package/examples/taskflow/{platform → openuispec/platform}/ios.yaml +0 -0
  124. /package/examples/taskflow/{platform → openuispec/platform}/web.yaml +0 -0
  125. /package/examples/taskflow/{screens → openuispec/screens}/calendar.yaml +0 -0
  126. /package/examples/taskflow/{screens → openuispec/screens}/home.yaml +0 -0
  127. /package/examples/taskflow/{screens → openuispec/screens}/profile_edit.yaml +0 -0
  128. /package/examples/taskflow/{screens → openuispec/screens}/project_detail.yaml +0 -0
  129. /package/examples/taskflow/{screens → openuispec/screens}/projects.yaml +0 -0
  130. /package/examples/taskflow/{screens → openuispec/screens}/settings.yaml +0 -0
  131. /package/examples/taskflow/{screens → openuispec/screens}/task_detail.yaml +0 -0
  132. /package/examples/taskflow/{tokens → openuispec/tokens}/color.yaml +0 -0
  133. /package/examples/taskflow/{tokens → openuispec/tokens}/elevation.yaml +0 -0
  134. /package/examples/taskflow/{tokens → openuispec/tokens}/icons.yaml +0 -0
  135. /package/examples/taskflow/{tokens → openuispec/tokens}/layout.yaml +0 -0
  136. /package/examples/taskflow/{tokens → openuispec/tokens}/motion.yaml +0 -0
  137. /package/examples/taskflow/{tokens → openuispec/tokens}/spacing.yaml +0 -0
  138. /package/examples/taskflow/{tokens → openuispec/tokens}/themes.yaml +0 -0
  139. /package/examples/taskflow/{tokens → openuispec/tokens}/typography.yaml +0 -0
@@ -0,0 +1,617 @@
1
+ @import url("https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap");
2
+
3
+ :root {
4
+ color-scheme: light;
5
+ --bg: #ffffff;
6
+ --bg-secondary: #f7f6f3;
7
+ --bg-tertiary: #efeee8;
8
+ --surface-warm: #f8f3ec;
9
+ --text: #1c1b1a;
10
+ --text-secondary: #6b6966;
11
+ --text-tertiary: #9c9a94;
12
+ --border: rgba(28, 27, 26, 0.12);
13
+ --primary: #5b4fe8;
14
+ --secondary: #e8634f;
15
+ --success: #2d9d5e;
16
+ --warning: #d4920e;
17
+ --danger: #d43b3b;
18
+ --info: #3b82d4;
19
+ --shadow-lg: 0 22px 55px rgba(58, 44, 25, 0.12);
20
+ --shadow-sm: 0 10px 28px rgba(58, 44, 25, 0.08);
21
+ --radius-lg: 28px;
22
+ --radius-md: 20px;
23
+ --radius-sm: 14px;
24
+ }
25
+
26
+ :root[data-theme="dark"] {
27
+ color-scheme: dark;
28
+ --bg: #171513;
29
+ --bg-secondary: #1f1c19;
30
+ --bg-tertiary: #141210;
31
+ --surface-warm: #241d19;
32
+ --text: #f7f3ef;
33
+ --text-secondary: #d0c4ba;
34
+ --text-tertiary: #9f9287;
35
+ --border: rgba(247, 243, 239, 0.14);
36
+ --primary: #8a80ff;
37
+ --secondary: #ff8a73;
38
+ --success: #55c585;
39
+ --warning: #f2b544;
40
+ --danger: #ff7979;
41
+ --info: #70a7ff;
42
+ --shadow-lg: 0 22px 55px rgba(0, 0, 0, 0.28);
43
+ --shadow-sm: 0 10px 28px rgba(0, 0, 0, 0.22);
44
+ }
45
+
46
+ :root[data-theme="warm"] {
47
+ --bg: #fbf6ef;
48
+ --bg-secondary: #f3ede2;
49
+ --bg-tertiary: #ebe0d2;
50
+ --surface-warm: #fff8ee;
51
+ }
52
+
53
+ * {
54
+ box-sizing: border-box;
55
+ }
56
+
57
+ html,
58
+ body,
59
+ #root {
60
+ min-height: 100%;
61
+ }
62
+
63
+ body {
64
+ margin: 0;
65
+ font-family: "DM Sans", sans-serif;
66
+ color: var(--text);
67
+ background:
68
+ radial-gradient(circle at top left, rgba(91, 79, 232, 0.16), transparent 28%),
69
+ radial-gradient(circle at bottom right, rgba(232, 99, 79, 0.18), transparent 24%),
70
+ linear-gradient(180deg, var(--bg) 0%, var(--bg-tertiary) 100%);
71
+ }
72
+
73
+ button,
74
+ input,
75
+ select,
76
+ textarea {
77
+ font: inherit;
78
+ }
79
+
80
+ button {
81
+ cursor: pointer;
82
+ }
83
+
84
+ input,
85
+ select,
86
+ textarea {
87
+ width: 100%;
88
+ border: 1px solid var(--border);
89
+ background: rgba(255, 255, 255, 0.56);
90
+ border-radius: 14px;
91
+ color: var(--text);
92
+ padding: 14px 16px;
93
+ }
94
+
95
+ textarea {
96
+ resize: vertical;
97
+ }
98
+
99
+ .app-frame {
100
+ min-height: 100vh;
101
+ }
102
+
103
+ .shell-layout {
104
+ min-height: 100vh;
105
+ }
106
+
107
+ .size-regular,
108
+ .size-expanded {
109
+ display: grid;
110
+ grid-template-columns: 260px minmax(0, 1fr);
111
+ }
112
+
113
+ .sidebar-shell {
114
+ position: sticky;
115
+ top: 0;
116
+ height: 100vh;
117
+ padding: 28px 20px;
118
+ background: rgba(255, 255, 255, 0.38);
119
+ backdrop-filter: blur(18px);
120
+ border-right: 1px solid var(--border);
121
+ }
122
+
123
+ .brand-lockup {
124
+ display: flex;
125
+ gap: 14px;
126
+ align-items: center;
127
+ margin-bottom: 28px;
128
+ }
129
+
130
+ .brand-lockup h2,
131
+ .brand-lockup p,
132
+ .screen-header h1,
133
+ .detail-hero h2,
134
+ .profile-hero h1,
135
+ .empty-card h3 {
136
+ margin: 0;
137
+ }
138
+
139
+ .brand-mark,
140
+ .avatar {
141
+ display: grid;
142
+ place-items: center;
143
+ border-radius: 18px;
144
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
145
+ color: white;
146
+ font-weight: 700;
147
+ }
148
+
149
+ .brand-mark {
150
+ width: 56px;
151
+ height: 56px;
152
+ }
153
+
154
+ .avatar {
155
+ width: 46px;
156
+ height: 46px;
157
+ }
158
+
159
+ .avatar.large {
160
+ width: 72px;
161
+ height: 72px;
162
+ border-radius: 24px;
163
+ }
164
+
165
+ .eyebrow,
166
+ .section-tag {
167
+ text-transform: uppercase;
168
+ letter-spacing: 0.12em;
169
+ font-size: 11px;
170
+ font-weight: 700;
171
+ color: var(--text-tertiary);
172
+ }
173
+
174
+ .nav-list {
175
+ display: flex;
176
+ flex-direction: column;
177
+ gap: 10px;
178
+ }
179
+
180
+ .nav-item {
181
+ text-decoration: none;
182
+ color: var(--text-secondary);
183
+ padding: 14px 16px;
184
+ border-radius: 18px;
185
+ transition: 180ms ease;
186
+ }
187
+
188
+ .nav-item.active,
189
+ .nav-item:hover {
190
+ background: rgba(91, 79, 232, 0.1);
191
+ color: var(--text);
192
+ }
193
+
194
+ .screen-shell {
195
+ padding: 24px;
196
+ padding-bottom: 92px;
197
+ }
198
+
199
+ .screen {
200
+ display: flex;
201
+ flex-direction: column;
202
+ gap: 22px;
203
+ max-width: 1200px;
204
+ margin: 0 auto;
205
+ }
206
+
207
+ .screen-header {
208
+ display: flex;
209
+ justify-content: space-between;
210
+ gap: 16px;
211
+ align-items: flex-start;
212
+ }
213
+
214
+ .screen-header h1 {
215
+ font-size: 32px;
216
+ letter-spacing: -0.02em;
217
+ }
218
+
219
+ .screen-subtitle,
220
+ .field-block small,
221
+ .detail-row span,
222
+ .task-copy p,
223
+ .profile-card p,
224
+ .footnote,
225
+ .empty-card p {
226
+ margin: 0;
227
+ color: var(--text-secondary);
228
+ line-height: 1.5;
229
+ }
230
+
231
+ .search-panel,
232
+ .settings-card,
233
+ .detail-card,
234
+ .empty-card,
235
+ .modal-card,
236
+ .project-card,
237
+ .profile-card,
238
+ .stat-card {
239
+ background: rgba(255, 255, 255, 0.62);
240
+ border: 1px solid var(--border);
241
+ border-radius: var(--radius-lg);
242
+ box-shadow: var(--shadow-sm);
243
+ }
244
+
245
+ .search-panel,
246
+ .settings-card,
247
+ .detail-card,
248
+ .empty-card {
249
+ padding: 20px;
250
+ }
251
+
252
+ .chip-row,
253
+ .action-row,
254
+ .two-up,
255
+ .detail-hero,
256
+ .profile-hero {
257
+ display: flex;
258
+ gap: 12px;
259
+ }
260
+
261
+ .chip-row {
262
+ flex-wrap: wrap;
263
+ }
264
+
265
+ .chip {
266
+ border: 1px solid var(--border);
267
+ background: rgba(255, 255, 255, 0.46);
268
+ color: var(--text-secondary);
269
+ border-radius: 999px;
270
+ padding: 10px 14px;
271
+ }
272
+
273
+ .chip.active {
274
+ background: var(--primary);
275
+ color: white;
276
+ }
277
+
278
+ .home-grid {
279
+ display: block;
280
+ }
281
+
282
+ .home-grid.expanded {
283
+ display: grid;
284
+ grid-template-columns: minmax(0, 0.95fr) minmax(360px, 0.75fr);
285
+ gap: 22px;
286
+ }
287
+
288
+ .card-stack {
289
+ display: flex;
290
+ flex-direction: column;
291
+ gap: 14px;
292
+ }
293
+
294
+ .task-row,
295
+ .detail-row,
296
+ .profile-card,
297
+ .project-card {
298
+ display: flex;
299
+ align-items: center;
300
+ gap: 16px;
301
+ text-align: left;
302
+ width: 100%;
303
+ padding: 16px 18px;
304
+ border: 1px solid var(--border);
305
+ background: rgba(255, 255, 255, 0.54);
306
+ border-radius: 22px;
307
+ }
308
+
309
+ .task-row.selected {
310
+ border-color: rgba(91, 79, 232, 0.35);
311
+ background: linear-gradient(180deg, rgba(91, 79, 232, 0.1), rgba(255, 255, 255, 0.68));
312
+ }
313
+
314
+ .check-shell {
315
+ display: flex;
316
+ align-items: center;
317
+ }
318
+
319
+ .check-shell input {
320
+ width: 18px;
321
+ height: 18px;
322
+ }
323
+
324
+ .task-copy {
325
+ flex: 1;
326
+ }
327
+
328
+ .task-copy strong,
329
+ .profile-card strong,
330
+ .detail-row strong,
331
+ .stat-card strong {
332
+ display: block;
333
+ }
334
+
335
+ .badge {
336
+ display: inline-flex;
337
+ align-items: center;
338
+ justify-content: center;
339
+ border-radius: 999px;
340
+ padding: 8px 10px;
341
+ font-size: 12px;
342
+ font-weight: 700;
343
+ }
344
+
345
+ .badge-low,
346
+ .badge-todo,
347
+ .badge-neutral {
348
+ background: rgba(156, 163, 175, 0.16);
349
+ color: #61646e;
350
+ }
351
+
352
+ .badge-medium {
353
+ background: rgba(59, 130, 212, 0.16);
354
+ color: var(--info);
355
+ }
356
+
357
+ .badge-high,
358
+ .badge-in_progress {
359
+ background: rgba(212, 146, 14, 0.16);
360
+ color: var(--warning);
361
+ }
362
+
363
+ .badge-urgent {
364
+ background: rgba(212, 59, 59, 0.14);
365
+ color: var(--danger);
366
+ }
367
+
368
+ .badge-done {
369
+ background: rgba(45, 157, 94, 0.14);
370
+ color: var(--success);
371
+ }
372
+
373
+ .detail-card {
374
+ display: flex;
375
+ flex-direction: column;
376
+ gap: 18px;
377
+ }
378
+
379
+ .detail-hero {
380
+ justify-content: space-between;
381
+ align-items: flex-start;
382
+ }
383
+
384
+ .detail-hero h2 {
385
+ font-size: 28px;
386
+ letter-spacing: -0.02em;
387
+ }
388
+
389
+ .stat-grid {
390
+ display: grid;
391
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
392
+ gap: 12px;
393
+ }
394
+
395
+ .stat-card {
396
+ padding: 16px;
397
+ }
398
+
399
+ .detail-section {
400
+ display: flex;
401
+ flex-direction: column;
402
+ gap: 10px;
403
+ }
404
+
405
+ .media-player {
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: 10px;
409
+ padding: 14px;
410
+ border-radius: 16px;
411
+ border: 1px solid var(--border);
412
+ background: rgba(255, 255, 255, 0.52);
413
+ }
414
+
415
+ .media-player video,
416
+ .media-player audio {
417
+ width: 100%;
418
+ border-radius: 12px;
419
+ }
420
+
421
+ .detail-row {
422
+ justify-content: space-between;
423
+ }
424
+
425
+ .project-grid {
426
+ display: grid;
427
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
428
+ gap: 16px;
429
+ }
430
+
431
+ .project-card {
432
+ flex-direction: column;
433
+ align-items: flex-start;
434
+ }
435
+
436
+ .project-chip {
437
+ border-radius: 14px;
438
+ padding: 10px 12px;
439
+ font-size: 12px;
440
+ font-weight: 700;
441
+ }
442
+
443
+ .field-block {
444
+ display: flex;
445
+ flex-direction: column;
446
+ gap: 8px;
447
+ }
448
+
449
+ .field-label {
450
+ font-size: 14px;
451
+ font-weight: 600;
452
+ }
453
+
454
+ .toggle-row {
455
+ display: flex;
456
+ justify-content: space-between;
457
+ align-items: center;
458
+ gap: 14px;
459
+ }
460
+
461
+ .toggle-row input {
462
+ width: auto;
463
+ }
464
+
465
+ .footnote {
466
+ display: flex;
467
+ flex-direction: column;
468
+ gap: 6px;
469
+ align-items: center;
470
+ text-align: center;
471
+ }
472
+
473
+ .profile-hero {
474
+ align-items: center;
475
+ }
476
+
477
+ .primary-button,
478
+ .secondary-button,
479
+ .danger-button,
480
+ .ghost-button {
481
+ border: 0;
482
+ border-radius: 18px;
483
+ padding: 12px 16px;
484
+ }
485
+
486
+ .primary-button {
487
+ background: linear-gradient(135deg, var(--primary), #7b73ff);
488
+ color: white;
489
+ }
490
+
491
+ .secondary-button {
492
+ background: rgba(91, 79, 232, 0.12);
493
+ color: var(--text);
494
+ }
495
+
496
+ .danger-button {
497
+ background: rgba(212, 59, 59, 0.14);
498
+ color: var(--danger);
499
+ }
500
+
501
+ .ghost-button {
502
+ background: transparent;
503
+ color: var(--text-secondary);
504
+ }
505
+
506
+ .wide {
507
+ width: 100%;
508
+ }
509
+
510
+ .fab-button {
511
+ position: fixed;
512
+ right: 22px;
513
+ bottom: 88px;
514
+ border: 0;
515
+ border-radius: 999px;
516
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
517
+ color: white;
518
+ padding: 14px 18px;
519
+ box-shadow: var(--shadow-lg);
520
+ }
521
+
522
+ .floating-user-chip {
523
+ position: fixed;
524
+ top: 18px;
525
+ right: 18px;
526
+ padding: 8px 12px;
527
+ border-radius: 999px;
528
+ background: rgba(255, 255, 255, 0.72);
529
+ border: 1px solid var(--border);
530
+ color: var(--text-secondary);
531
+ backdrop-filter: blur(12px);
532
+ }
533
+
534
+ .bottom-nav {
535
+ position: fixed;
536
+ left: 12px;
537
+ right: 12px;
538
+ bottom: 12px;
539
+ display: grid;
540
+ grid-template-columns: repeat(4, 1fr);
541
+ gap: 8px;
542
+ padding: 10px;
543
+ border-radius: 24px;
544
+ background: rgba(255, 255, 255, 0.78);
545
+ border: 1px solid var(--border);
546
+ backdrop-filter: blur(18px);
547
+ }
548
+
549
+ .bottom-nav .nav-item {
550
+ text-align: center;
551
+ padding: 10px 8px;
552
+ }
553
+
554
+ .modal {
555
+ border: 0;
556
+ padding: 0;
557
+ background: transparent;
558
+ }
559
+
560
+ .modal::backdrop {
561
+ background: rgba(20, 18, 16, 0.5);
562
+ }
563
+
564
+ .modal-card {
565
+ width: min(720px, calc(100vw - 24px));
566
+ margin: auto;
567
+ padding: 20px;
568
+ }
569
+
570
+ .modal-card.compact {
571
+ width: min(560px, calc(100vw - 24px));
572
+ }
573
+
574
+ .modal-header {
575
+ display: flex;
576
+ justify-content: space-between;
577
+ gap: 12px;
578
+ align-items: center;
579
+ margin-bottom: 16px;
580
+ }
581
+
582
+ .modal-content {
583
+ display: flex;
584
+ flex-direction: column;
585
+ gap: 14px;
586
+ margin-bottom: 18px;
587
+ }
588
+
589
+ @media (max-width: 1024px) {
590
+ .size-regular,
591
+ .size-expanded {
592
+ grid-template-columns: 88px minmax(0, 1fr);
593
+ }
594
+
595
+ .brand-lockup h2,
596
+ .brand-lockup p {
597
+ display: none;
598
+ }
599
+ }
600
+
601
+ @media (max-width: 600px) {
602
+ .screen-shell {
603
+ padding: 18px 14px 88px;
604
+ }
605
+
606
+ .screen-header,
607
+ .action-row,
608
+ .two-up,
609
+ .detail-hero {
610
+ flex-direction: column;
611
+ }
612
+
613
+ .floating-user-chip {
614
+ top: 12px;
615
+ right: 12px;
616
+ }
617
+ }
@@ -0,0 +1,64 @@
1
+ export type Priority = "low" | "medium" | "high" | "urgent";
2
+ export type Status = "todo" | "in_progress" | "done";
3
+ export type ThemeMode = "system" | "light" | "dark" | "warm";
4
+ export type Filter = "all" | "today" | "upcoming" | "done";
5
+ export type SizeClass = "compact" | "regular" | "expanded";
6
+
7
+ export type User = {
8
+ id: string;
9
+ name: string;
10
+ firstName: string;
11
+ email: string;
12
+ };
13
+
14
+ export type Project = {
15
+ id: string;
16
+ name: string;
17
+ color: string;
18
+ icon: string;
19
+ taskCount: number;
20
+ };
21
+
22
+ export type Attachment = {
23
+ source: string;
24
+ mediaType: "audio" | "video";
25
+ title: string;
26
+ };
27
+
28
+ export type Task = {
29
+ id: string;
30
+ title: string;
31
+ description?: string;
32
+ status: Status;
33
+ priority: Priority;
34
+ dueDate?: string;
35
+ projectId?: string;
36
+ tags: string[];
37
+ createdAt: string;
38
+ updatedAt: string;
39
+ assignee?: User;
40
+ attachment?: Attachment;
41
+ };
42
+
43
+ export type Preferences = {
44
+ theme: ThemeMode;
45
+ defaultPriority: Priority;
46
+ notificationsEnabled: boolean;
47
+ remindersEnabled: boolean;
48
+ };
49
+
50
+ export type TaskDraft = {
51
+ title: string;
52
+ description: string;
53
+ projectId: string;
54
+ priority: Priority;
55
+ dueDate: string;
56
+ tags: string;
57
+ assignToSelf: boolean;
58
+ };
59
+
60
+ export type ProjectDraft = {
61
+ name: string;
62
+ color: string;
63
+ icon: string;
64
+ };