@chill-sharp/ui-core 1.1.12

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 (204) hide show
  1. package/.agents/skills/chillsharp-current-user-preferences/SKILL.md +70 -0
  2. package/.agents/skills/chillsharp-ui-template/SKILL.md +18 -0
  3. package/README.md +103 -0
  4. package/chill-sharp-ui-core.d.ts.map +1 -0
  5. package/doc/AIAssistedDevelopment/README.md +185 -0
  6. package/doc/AttachmentModel/README.md +173 -0
  7. package/doc/AuthenticationModel/README.md +213 -0
  8. package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +293 -0
  9. package/doc/ChillSharpClient.md +464 -0
  10. package/doc/ClientGeneration/README.md +172 -0
  11. package/doc/ComplianceGuide/README.md +178 -0
  12. package/doc/Configuration/README.md +94 -0
  13. package/doc/CurrentUserPreferences.md +114 -0
  14. package/doc/DateTimePolicy/README.md +154 -0
  15. package/doc/DateTimeSerialization.md +423 -0
  16. package/doc/Endpoints.md +260 -0
  17. package/doc/HowTo/01-simple-blog-sqlite.md +153 -0
  18. package/doc/HowTo/02-blog-schema-labels.md +140 -0
  19. package/doc/HowTo/03-authentication.md +218 -0
  20. package/doc/HowTo/04-blog-posts-one-to-many.md +194 -0
  21. package/doc/HowTo/05-docker-env-variables.md +274 -0
  22. package/doc/HowTo/06-chunk-transactions-autocomplete.md +196 -0
  23. package/doc/Mcp/ChatGPT.md +291 -0
  24. package/doc/Mcp/README.md +799 -0
  25. package/doc/MenuGuide/README.md +49 -0
  26. package/doc/ModelPreparation.md +255 -0
  27. package/doc/PermissionModel/README.md +277 -0
  28. package/doc/README.md +228 -0
  29. package/doc/ReferenceExistence.md +130 -0
  30. package/doc/RegisterContext.md +217 -0
  31. package/doc/UiCore/CRUD.md +170 -0
  32. package/doc/UiCore/README.md +13 -0
  33. package/doc/ValidationModel/README.md +117 -0
  34. package/doc/it/AIAssistedDevelopment/README.md +185 -0
  35. package/doc/it/AttachmentModel/README.md +173 -0
  36. package/doc/it/AuthenticationModel/README.md +171 -0
  37. package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +292 -0
  38. package/doc/it/ChillSharpClient.md +464 -0
  39. package/doc/it/ClientGeneration/README.md +152 -0
  40. package/doc/it/ComplianceGuide/README.md +178 -0
  41. package/doc/it/Configuration/README.md +94 -0
  42. package/doc/it/CurrentUserPreferences.md +114 -0
  43. package/doc/it/DateTimePolicy/README.md +154 -0
  44. package/doc/it/DateTimeSerialization.md +423 -0
  45. package/doc/it/Endpoints.md +260 -0
  46. package/doc/it/HowTo/01-simple-blog-sqlite.md +152 -0
  47. package/doc/it/HowTo/02-blog-schema-labels.md +139 -0
  48. package/doc/it/HowTo/03-authentication.md +221 -0
  49. package/doc/it/HowTo/04-blog-posts-one-to-many.md +193 -0
  50. package/doc/it/HowTo/05-docker-env-variables.md +268 -0
  51. package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +196 -0
  52. package/doc/it/Mcp/ChatGPT.md +291 -0
  53. package/doc/it/Mcp/README.md +799 -0
  54. package/doc/it/MenuGuide/README.md +49 -0
  55. package/doc/it/ModelPreparation.md +254 -0
  56. package/doc/it/PermissionModel/README.md +190 -0
  57. package/doc/it/README.md +172 -0
  58. package/doc/it/ReferenceExistence.md +130 -0
  59. package/doc/it/RegisterContext.md +218 -0
  60. package/doc/it/UiCore/CRUD.md +170 -0
  61. package/doc/it/UiCore/README.md +13 -0
  62. package/doc/it/ValidationModel/README.md +117 -0
  63. package/fesm2022/chill-sharp-ui-core.mjs +16725 -0
  64. package/fesm2022/chill-sharp-ui-core.mjs.map +1 -0
  65. package/index.d.ts +6 -0
  66. package/lib/chill-sharp-ui-root.component.d.ts +6 -0
  67. package/lib/chill-sharp-ui-root.component.d.ts.map +1 -0
  68. package/lib/chill-sharp-ui.routes.d.ts +3 -0
  69. package/lib/chill-sharp-ui.routes.d.ts.map +1 -0
  70. package/lib/chill.config.d.ts +5 -0
  71. package/lib/chill.config.d.ts.map +1 -0
  72. package/lib/layouts/auth-shell.component.d.ts +8 -0
  73. package/lib/layouts/auth-shell.component.d.ts.map +1 -0
  74. package/lib/layouts/workspace-page.component.d.ts +49 -0
  75. package/lib/layouts/workspace-page.component.d.ts.map +1 -0
  76. package/lib/lib/chill-form.component.d.ts +151 -0
  77. package/lib/lib/chill-form.component.d.ts.map +1 -0
  78. package/lib/lib/chill-i18n-button-label.component.d.ts +27 -0
  79. package/lib/lib/chill-i18n-button-label.component.d.ts.map +1 -0
  80. package/lib/lib/chill-i18n-label.component.d.ts +30 -0
  81. package/lib/lib/chill-i18n-label.component.d.ts.map +1 -0
  82. package/lib/lib/chill-json-input.component.d.ts +31 -0
  83. package/lib/lib/chill-json-input.component.d.ts.map +1 -0
  84. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts +12 -0
  85. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-boolean-control.component.d.ts.map +1 -0
  86. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts +17 -0
  87. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-editor-control.component.d.ts.map +1 -0
  88. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts +45 -0
  89. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-lookup-control.component.d.ts.map +1 -0
  90. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts +19 -0
  91. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-scalar-control.component.d.ts.map +1 -0
  92. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts +12 -0
  93. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-select-control.component.d.ts.map +1 -0
  94. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts +13 -0
  95. package/lib/lib/chill-polymorphic-input-controls/chill-polymorphic-textarea-control.component.d.ts.map +1 -0
  96. package/lib/lib/chill-polymorphic-input.component.d.ts +452 -0
  97. package/lib/lib/chill-polymorphic-input.component.d.ts.map +1 -0
  98. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts +7 -0
  99. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-boolean-control.component.d.ts.map +1 -0
  100. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts +7 -0
  101. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-lookup-control.component.d.ts.map +1 -0
  102. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts +7 -0
  103. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-number-control.component.d.ts.map +1 -0
  104. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts +8 -0
  105. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-temporal-control.component.d.ts.map +1 -0
  106. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts +7 -0
  107. package/lib/lib/chill-polymorphic-output-controls/chill-polymorphic-output-value-control.component.d.ts.map +1 -0
  108. package/lib/lib/chill-polymorphic-output.component.d.ts +75 -0
  109. package/lib/lib/chill-polymorphic-output.component.d.ts.map +1 -0
  110. package/lib/lib/chill-table.component.d.ts +434 -0
  111. package/lib/lib/chill-table.component.d.ts.map +1 -0
  112. package/lib/lib/chill-text-editor-dialog.component.d.ts +14 -0
  113. package/lib/lib/chill-text-editor-dialog.component.d.ts.map +1 -0
  114. package/lib/lib/crud-configuration.utils.d.ts +4 -0
  115. package/lib/lib/crud-configuration.utils.d.ts.map +1 -0
  116. package/lib/lib/culture-name-options.d.ts +3 -0
  117. package/lib/lib/culture-name-options.d.ts.map +1 -0
  118. package/lib/lib/date-format-options.d.ts +3 -0
  119. package/lib/lib/date-format-options.d.ts.map +1 -0
  120. package/lib/lib/iana-time-zone-options.d.ts +3 -0
  121. package/lib/lib/iana-time-zone-options.d.ts.map +1 -0
  122. package/lib/lib/notice-transition.directive.d.ts +17 -0
  123. package/lib/lib/notice-transition.directive.d.ts.map +1 -0
  124. package/lib/lib/schema-property-dialog.component.d.ts +74 -0
  125. package/lib/lib/schema-property-dialog.component.d.ts.map +1 -0
  126. package/lib/models/chill-auth.models.d.ts +176 -0
  127. package/lib/models/chill-auth.models.d.ts.map +1 -0
  128. package/lib/models/chill-menu.models.d.ts +12 -0
  129. package/lib/models/chill-menu.models.d.ts.map +1 -0
  130. package/lib/models/chill-schema.models.d.ts +141 -0
  131. package/lib/models/chill-schema.models.d.ts.map +1 -0
  132. package/lib/models/workspace-dialog.models.d.ts +16 -0
  133. package/lib/models/workspace-dialog.models.d.ts.map +1 -0
  134. package/lib/models/workspace-task.models.d.ts +36 -0
  135. package/lib/models/workspace-task.models.d.ts.map +1 -0
  136. package/lib/pages/confirm-reset-page.component.d.ts +21 -0
  137. package/lib/pages/confirm-reset-page.component.d.ts.map +1 -0
  138. package/lib/pages/crud/attachment-upload-dialog.component.d.ts +24 -0
  139. package/lib/pages/crud/attachment-upload-dialog.component.d.ts.map +1 -0
  140. package/lib/pages/crud/crud-page.component.d.ts +244 -0
  141. package/lib/pages/crud/crud-page.component.d.ts.map +1 -0
  142. package/lib/pages/login-page.component.d.ts +21 -0
  143. package/lib/pages/login-page.component.d.ts.map +1 -0
  144. package/lib/pages/permissions/auth-role-dialog.component.d.ts +29 -0
  145. package/lib/pages/permissions/auth-role-dialog.component.d.ts.map +1 -0
  146. package/lib/pages/permissions/auth-search-select.component.d.ts +28 -0
  147. package/lib/pages/permissions/auth-search-select.component.d.ts.map +1 -0
  148. package/lib/pages/permissions/auth-user-dialog.component.d.ts +35 -0
  149. package/lib/pages/permissions/auth-user-dialog.component.d.ts.map +1 -0
  150. package/lib/pages/permissions/permission-editor.component.d.ts +55 -0
  151. package/lib/pages/permissions/permission-editor.component.d.ts.map +1 -0
  152. package/lib/pages/permissions/permissions-page.component.d.ts +38 -0
  153. package/lib/pages/permissions/permissions-page.component.d.ts.map +1 -0
  154. package/lib/pages/permissions/role-permission.component.d.ts +43 -0
  155. package/lib/pages/permissions/role-permission.component.d.ts.map +1 -0
  156. package/lib/pages/permissions/user-permission.component.d.ts +43 -0
  157. package/lib/pages/permissions/user-permission.component.d.ts.map +1 -0
  158. package/lib/pages/register-page.component.d.ts +24 -0
  159. package/lib/pages/register-page.component.d.ts.map +1 -0
  160. package/lib/pages/reset-password-page.component.d.ts +18 -0
  161. package/lib/pages/reset-password-page.component.d.ts.map +1 -0
  162. package/lib/provide-chill-sharp-ui-core.d.ts +8 -0
  163. package/lib/provide-chill-sharp-ui-core.d.ts.map +1 -0
  164. package/lib/services/chill.service.d.ts +249 -0
  165. package/lib/services/chill.service.d.ts.map +1 -0
  166. package/lib/services/workspace-dialog.service.d.ts +22 -0
  167. package/lib/services/workspace-dialog.service.d.ts.map +1 -0
  168. package/lib/services/workspace-layout.service.d.ts +13 -0
  169. package/lib/services/workspace-layout.service.d.ts.map +1 -0
  170. package/lib/services/workspace-task-registry.service.d.ts +35 -0
  171. package/lib/services/workspace-task-registry.service.d.ts.map +1 -0
  172. package/lib/services/workspace-toolbar.service.d.ts +23 -0
  173. package/lib/services/workspace-toolbar.service.d.ts.map +1 -0
  174. package/lib/services/workspace.service.d.ts +114 -0
  175. package/lib/services/workspace.service.d.ts.map +1 -0
  176. package/lib/storage-keys.d.ts +5 -0
  177. package/lib/storage-keys.d.ts.map +1 -0
  178. package/lib/tasks/crud-task/crud-task.component.d.ts +33 -0
  179. package/lib/tasks/crud-task/crud-task.component.d.ts.map +1 -0
  180. package/lib/tasks/goto-url-task/goto-url-task.component.d.ts +31 -0
  181. package/lib/tasks/goto-url-task/goto-url-task.component.d.ts.map +1 -0
  182. package/lib/workspace/confirm-message-dialog.component.d.ts +16 -0
  183. package/lib/workspace/confirm-message-dialog.component.d.ts.map +1 -0
  184. package/lib/workspace/entity-options-dialog.component.d.ts +29 -0
  185. package/lib/workspace/entity-options-dialog.component.d.ts.map +1 -0
  186. package/lib/workspace/external-task-api.d.ts +2 -0
  187. package/lib/workspace/external-task-api.d.ts.map +1 -0
  188. package/lib/workspace/user-profile-dialog.component.d.ts +30 -0
  189. package/lib/workspace/user-profile-dialog.component.d.ts.map +1 -0
  190. package/lib/workspace/workspace-dialog-host.component.d.ts +26 -0
  191. package/lib/workspace/workspace-dialog-host.component.d.ts.map +1 -0
  192. package/lib/workspace/workspace-menu-item-dialog.component.d.ts +61 -0
  193. package/lib/workspace/workspace-menu-item-dialog.component.d.ts.map +1 -0
  194. package/lib/workspace/workspace-menu.component.d.ts +104 -0
  195. package/lib/workspace/workspace-menu.component.d.ts.map +1 -0
  196. package/lib/workspace/workspace-taskbar.component.d.ts +14 -0
  197. package/lib/workspace/workspace-taskbar.component.d.ts.map +1 -0
  198. package/package.json +54 -0
  199. package/public-api.d.ts +56 -0
  200. package/public-api.d.ts.map +1 -0
  201. package/service-worker/chill-sharp-service-worker.js +166 -0
  202. package/styles/core-theme.scss +1268 -0
  203. package/template-customization/upgrade.ps1.template +342 -0
  204. package/template-customization/upgrade.sh.template +271 -0
@@ -0,0 +1,1268 @@
1
+ @import 'monaco-editor/min/vs/editor/editor.main.css';
2
+
3
+ @font-face {
4
+ font-family: 'Material Symbols';
5
+ font-style: normal;
6
+ font-display: swap;
7
+ font-weight: 400;
8
+ src:
9
+ url('/fonts/material-symbols.woff2') format('woff2'),
10
+ url('/fonts/material-symbols.woff') format('woff');
11
+ }
12
+
13
+ :root {
14
+ --workspace-topbar-height: 4.75rem;
15
+ --font-sans: "Segoe UI Variable", "Segoe UI", sans-serif;
16
+ }
17
+
18
+ :root,
19
+ :root[data-theme='bright'] {
20
+ --bg-top: #f4efe6;
21
+ --bg-bottom: #d8e8e8;
22
+ --surface-0: #fcfaf6;
23
+ --surface-1: rgba(252, 250, 246, 0.82);
24
+ --surface-2: rgba(255, 255, 255, 0.72);
25
+ --surface-3: rgba(236, 245, 245, 0.9);
26
+ --text-main: #18313b;
27
+ --text-muted: #5d7178;
28
+ --accent: #2f7f79;
29
+ --accent-strong: #204e57;
30
+ --accent-soft: rgba(47, 127, 121, 0.14);
31
+ --link-color: var(--accent-strong);
32
+ --border-color: rgba(24, 49, 59, 0.14);
33
+ --shadow: 0 24px 60px rgba(32, 78, 87, 0.12);
34
+ --shadow-soft: 0 12px 30px rgba(32, 78, 87, 0.08);
35
+ --danger: #a43f2e;
36
+ --danger-bg: #fae5df;
37
+ --warning: #7a541a;
38
+ --warning-bg: #fff0cf;
39
+ --info: var(--accent-strong);
40
+ --info-bg: var(--accent-soft);
41
+ --success: #275846;
42
+ --success-bg: #e1f1e8;
43
+ --workspace-backdrop:
44
+ radial-gradient(circle at top left, rgba(47, 127, 121, 0.18), transparent 28%),
45
+ radial-gradient(circle at top right, rgba(192, 141, 93, 0.18), transparent 24%),
46
+ linear-gradient(180deg, var(--bg-top), var(--bg-bottom));
47
+ }
48
+
49
+ :root[data-theme='dark'] {
50
+ --bg-top: #09131a;
51
+ --bg-bottom: #13232d;
52
+ --surface-0: #15232d;
53
+ --surface-1: rgba(15, 28, 36, 0.82);
54
+ --surface-2: rgba(24, 41, 52, 0.8);
55
+ --surface-3: rgba(18, 36, 45, 0.96);
56
+ --text-main: #edf6f5;
57
+ --text-muted: #97aeb2;
58
+ --accent: #7fd8cb;
59
+ --accent-strong: #b1f0e6;
60
+ --accent-soft: rgba(127, 216, 203, 0.12);
61
+ --link-color: var(--accent-strong);
62
+ --border-color: rgba(237, 246, 245, 0.12);
63
+ --shadow: 0 24px 60px rgba(0, 0, 0, 0.34);
64
+ --shadow-soft: 0 12px 30px rgba(0, 0, 0, 0.22);
65
+ --danger: #ff8d7d;
66
+ --danger-bg: rgba(164, 63, 46, 0.18);
67
+ --warning: #ffd37a;
68
+ --warning-bg: rgba(156, 107, 20, 0.24);
69
+ --info: var(--accent-strong);
70
+ --info-bg: var(--accent-soft);
71
+ --success: #9de2c2;
72
+ --success-bg: rgba(39, 88, 70, 0.24);
73
+ --workspace-backdrop:
74
+ radial-gradient(circle at top left, rgba(127, 216, 203, 0.18), transparent 24%),
75
+ radial-gradient(circle at top right, rgba(101, 136, 191, 0.18), transparent 26%),
76
+ linear-gradient(180deg, var(--bg-top), var(--bg-bottom));
77
+ }
78
+
79
+ :root[data-theme='soft'] {
80
+ --bg-top: #efe2df;
81
+ --bg-bottom: #dde6f1;
82
+ --surface-0: #f5efef;
83
+ --surface-1: rgba(245, 239, 239, 0.86);
84
+ --surface-2: rgba(238, 231, 234, 0.84);
85
+ --surface-3: rgba(230, 237, 245, 0.94);
86
+ --text-main: #403d53;
87
+ --text-muted: #6e6884;
88
+ --accent: #b16a7e;
89
+ --accent-strong: #6769a9;
90
+ --accent-soft: rgba(177, 106, 126, 0.18);
91
+ --link-color: var(--accent-strong);
92
+ --border-color: rgba(64, 61, 83, 0.16);
93
+ --shadow: 0 24px 60px rgba(73, 77, 126, 0.18);
94
+ --shadow-soft: 0 12px 30px rgba(73, 77, 126, 0.12);
95
+ --danger: #a8445a;
96
+ --danger-bg: rgba(177, 106, 126, 0.2);
97
+ --warning: #7f5d22;
98
+ --warning-bg: rgba(215, 176, 92, 0.26);
99
+ --info: var(--accent-strong);
100
+ --info-bg: var(--accent-soft);
101
+ --success: #587967;
102
+ --success-bg: rgba(136, 181, 161, 0.26);
103
+ --workspace-backdrop:
104
+ radial-gradient(circle at top left, rgba(177, 106, 126, 0.16), transparent 28%),
105
+ radial-gradient(circle at top right, rgba(103, 105, 169, 0.14), transparent 24%),
106
+ linear-gradient(180deg, var(--bg-top), var(--bg-bottom));
107
+ }
108
+
109
+ :root[data-theme='cini'] {
110
+ --bg-top: #f5f5f5;
111
+ --bg-bottom: #e7f1f3;
112
+ --surface-0: #ffffff;
113
+ --surface-1: rgba(255, 255, 255, 0.88);
114
+ --surface-2: rgba(245, 245, 245, 0.86);
115
+ --surface-3: rgba(237, 246, 248, 0.94);
116
+ --text-main: #16333a;
117
+ --text-muted: #5b747a;
118
+ --accent: #00667c;
119
+ --accent-strong: #4d99a9;
120
+ --accent-soft: rgba(0, 102, 124, 0.14);
121
+ --link-color: #89b1bc;
122
+ --border-color: rgba(0, 102, 124, 0.16);
123
+ --shadow: 0 24px 60px rgba(0, 102, 124, 0.13);
124
+ --shadow-soft: 0 12px 30px rgba(0, 102, 124, 0.09);
125
+ --danger: #a43f2e;
126
+ --danger-bg: #fae5df;
127
+ --warning: #7a541a;
128
+ --warning-bg: #fff0cf;
129
+ --info: var(--accent-strong);
130
+ --info-bg: var(--accent-soft);
131
+ --success: #275846;
132
+ --success-bg: #e1f1e8;
133
+ --workspace-backdrop:
134
+ radial-gradient(circle at top left, rgba(0, 102, 124, 0.14), transparent 28%),
135
+ radial-gradient(circle at top right, rgba(137, 177, 188, 0.18), transparent 24%),
136
+ linear-gradient(180deg, var(--bg-top), var(--bg-bottom));
137
+ }
138
+
139
+ * {
140
+ box-sizing: border-box;
141
+ }
142
+
143
+ html,
144
+ body {
145
+ margin: 0;
146
+ min-height: 100%;
147
+ }
148
+
149
+ body {
150
+ color: var(--text-main);
151
+ background: var(--workspace-backdrop);
152
+ font-family: var(--font-sans);
153
+ }
154
+
155
+ .material-symbol-icon {
156
+ display: inline-flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ font-family: 'Material Symbols', sans-serif;
160
+ font-style: normal;
161
+ font-weight: 400;
162
+ font-size: 1.25rem;
163
+ line-height: 1;
164
+ letter-spacing: normal;
165
+ text-transform: none;
166
+ white-space: nowrap;
167
+ direction: ltr;
168
+ font-feature-settings: 'liga';
169
+ -webkit-font-feature-settings: 'liga';
170
+ -webkit-font-smoothing: antialiased;
171
+ }
172
+
173
+ /* Make scrollbar thin */
174
+ ::-webkit-scrollbar {
175
+ width: 4px;
176
+ height: 4px;
177
+ }
178
+
179
+ /* Track (background) */
180
+ ::-webkit-scrollbar-track {
181
+ background: transparent;
182
+ }
183
+
184
+ /* Thumb (the draggable part) */
185
+ ::-webkit-scrollbar-thumb {
186
+ background-color: var(--accent-soft);
187
+ border-radius: 10px;
188
+ }
189
+
190
+ /* On hover (slightly more visible) */
191
+ ::-webkit-scrollbar-thumb:hover {
192
+ background-color: var(--accent);
193
+ }
194
+
195
+ button,
196
+ input,
197
+ textarea,
198
+ select {
199
+ font: inherit;
200
+ }
201
+
202
+ :root[data-theme='dark'] select,
203
+ :root[data-theme='dark'] option,
204
+ :root[data-theme='dark'] optgroup {
205
+ background-color: #13232d;
206
+ color: var(--text-main);
207
+ }
208
+
209
+ :root[data-theme='dark'] select {
210
+ color-scheme: dark;
211
+ }
212
+
213
+ a {
214
+ color: var(--link-color);
215
+ }
216
+
217
+ button,
218
+ a {
219
+ transition:
220
+ background-color 160ms ease,
221
+ color 160ms ease,
222
+ border-color 160ms ease,
223
+ transform 160ms ease,
224
+ box-shadow 160ms ease;
225
+ }
226
+
227
+ .auth-layout {
228
+ min-height: 100vh;
229
+ display: grid;
230
+ grid-template-columns: minmax(18rem, 28rem) minmax(0, 1fr);
231
+ gap: 2rem;
232
+ padding: 2rem;
233
+ }
234
+
235
+ .auth-layout__hero,
236
+ .auth-layout__content {
237
+ min-width: 0;
238
+ }
239
+
240
+ .auth-layout__hero {
241
+ display: flex;
242
+ flex-direction: column;
243
+ justify-content: flex-end;
244
+ padding: 2rem;
245
+ border-radius: 2rem;
246
+ background:
247
+ linear-gradient(160deg, rgba(255, 255, 255, 0.08), transparent),
248
+ linear-gradient(180deg, var(--accent-soft), rgba(255, 255, 255, 0.04));
249
+ border: 1px solid var(--border-color);
250
+ box-shadow: var(--shadow-soft);
251
+ }
252
+
253
+ .auth-layout__hero h1 {
254
+ margin: 0;
255
+ font-size: clamp(2.8rem, 5vw, 4.6rem);
256
+ line-height: 0.92;
257
+ letter-spacing: -0.05em;
258
+ }
259
+
260
+ .auth-layout__hero p:last-child {
261
+ max-width: 24rem;
262
+ color: var(--text-muted);
263
+ }
264
+
265
+ .auth-layout__content {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ }
270
+
271
+ .auth-page {
272
+ display: flex;
273
+ justify-content: center;
274
+ width: 100%;
275
+ padding: 1rem 0 3rem;
276
+ }
277
+
278
+ .auth-card {
279
+ width: min(100%, 34rem);
280
+ padding: 2rem;
281
+ border-radius: 1.75rem;
282
+ background: var(--surface-1);
283
+ border: 1px solid rgba(255, 255, 255, 0.28);
284
+ box-shadow: var(--shadow);
285
+ backdrop-filter: blur(18px);
286
+ }
287
+
288
+ .auth-card.wide {
289
+ width: min(100%, 46rem);
290
+ }
291
+
292
+ .eyebrow {
293
+ margin: 0;
294
+ color: var(--accent);
295
+ text-transform: uppercase;
296
+ letter-spacing: 0.18em;
297
+ font-size: 0.75rem;
298
+ font-weight: 700;
299
+ }
300
+
301
+ .auth-card h1 {
302
+ margin: 0.5rem 0 0;
303
+ font-size: clamp(2rem, 5vw, 3.5rem);
304
+ line-height: 0.95;
305
+ }
306
+
307
+ .lede {
308
+ margin: 1rem 0 0;
309
+ color: var(--text-muted);
310
+ }
311
+
312
+ .auth-form {
313
+ display: grid;
314
+ gap: 1rem;
315
+ margin-top: 1.5rem;
316
+ }
317
+
318
+ .auth-form.two-columns {
319
+ grid-template-columns: repeat(2, minmax(0, 1fr));
320
+ }
321
+
322
+ .auth-form label,
323
+ .full-width {
324
+ display: grid;
325
+ gap: 0.45rem;
326
+ }
327
+
328
+ .auth-form label span {
329
+ font-weight: 600;
330
+ }
331
+
332
+ .auth-form input,
333
+ .auth-form textarea {
334
+ width: 100%;
335
+ padding: 0.9rem 1rem;
336
+ border-radius: 1rem;
337
+ border: 1px solid var(--border-color);
338
+ background: rgba(255, 255, 255, 0.84);
339
+ color: var(--text-main);
340
+ }
341
+
342
+ :root[data-theme='dark'] .auth-form input,
343
+ :root[data-theme='dark'] .auth-form textarea {
344
+ background: rgba(9, 19, 26, 0.54);
345
+ }
346
+
347
+ .auth-form textarea {
348
+ resize: vertical;
349
+ }
350
+
351
+ .auth-form .checkbox {
352
+ grid-template-columns: auto 1fr;
353
+ align-items: center;
354
+ }
355
+
356
+ .auth-form .checkbox input {
357
+ width: 1rem;
358
+ height: 1rem;
359
+ margin-top: 0.15rem;
360
+ }
361
+
362
+ .auth-form button,
363
+ .button-link,
364
+ .workspace-menu__item,
365
+ .workspace-toolbar-button,
366
+ .theme-pill,
367
+ .user-menu__panel button,
368
+ .taskbar__link,
369
+ .taskbar__close,
370
+ .icon-button {
371
+ border: 0;
372
+ cursor: pointer;
373
+ }
374
+
375
+ .auth-form button,
376
+ .button-link {
377
+ display: inline-flex;
378
+ justify-content: center;
379
+ align-items: center;
380
+ min-height: 3.25rem;
381
+ padding: 0.9rem 1.2rem;
382
+ border-radius: 999px;
383
+ background: linear-gradient(135deg, var(--accent), var(--accent-strong));
384
+ color: var(--surface-0);
385
+ font-weight: 700;
386
+ text-decoration: none;
387
+ box-shadow: var(--shadow-soft);
388
+ }
389
+
390
+ .auth-form button:disabled {
391
+ cursor: progress;
392
+ opacity: 0.7;
393
+ }
394
+
395
+ .notice {
396
+ margin-top: 1rem;
397
+ padding: 0.85rem 1rem;
398
+ border-radius: 1rem;
399
+ max-width: 100%;
400
+ max-height: 5rem;
401
+ overflow-x: hidden;
402
+ overflow-y: auto;
403
+ overflow-wrap: anywhere;
404
+ word-break: break-word;
405
+ }
406
+
407
+ .notice-transition-leave-clone {
408
+ pointer-events: none;
409
+ }
410
+
411
+ .notice-dismissible {
412
+ display: flex;
413
+ align-items: flex-start;
414
+ justify-content: space-between;
415
+ gap: 0.75rem;
416
+ }
417
+
418
+ .notice-dismissible > span {
419
+ min-width: 0;
420
+ flex: 1 1 auto;
421
+ }
422
+
423
+ .notice-close {
424
+ width: 2rem;
425
+ height: 2rem;
426
+ flex: 0 0 auto;
427
+ display: inline-grid;
428
+ place-items: center;
429
+ padding: 0;
430
+ border: 1px solid color-mix(in srgb, currentColor 24%, var(--border-color));
431
+ border-radius: 0.6rem;
432
+ background: color-mix(in srgb, var(--surface-0) 88%, transparent);
433
+ color: inherit;
434
+ cursor: pointer;
435
+ line-height: 1;
436
+ }
437
+
438
+ .notice.success {
439
+ color: var(--success);
440
+ background: var(--success-bg);
441
+ }
442
+
443
+ .notice.info {
444
+ color: var(--info);
445
+ background: var(--info-bg);
446
+ }
447
+
448
+ .notice.warn,
449
+ .notice.warning {
450
+ color: var(--warning);
451
+ background: var(--warning-bg);
452
+ }
453
+
454
+ .notice.error {
455
+ color: var(--danger);
456
+ background: var(--danger-bg);
457
+ }
458
+
459
+ .auth-links {
460
+ display: flex;
461
+ flex-wrap: wrap;
462
+ gap: 1rem;
463
+ margin-top: 1.5rem;
464
+ }
465
+
466
+ .token-panel {
467
+ margin-top: 1.5rem;
468
+ padding: 1rem;
469
+ border-radius: 1rem;
470
+ background: var(--accent-soft);
471
+ }
472
+
473
+ .token-title {
474
+ margin: 0 0 1rem;
475
+ font-weight: 700;
476
+ }
477
+
478
+ .token-panel dl {
479
+ margin: 0;
480
+ display: grid;
481
+ gap: 0.9rem;
482
+ }
483
+
484
+ .token-panel dt {
485
+ font-weight: 700;
486
+ }
487
+
488
+ .token-panel dd {
489
+ margin: 0.25rem 0 0;
490
+ color: var(--text-muted);
491
+ }
492
+
493
+ .wrap {
494
+ overflow-wrap: anywhere;
495
+ }
496
+
497
+ .full-width {
498
+ grid-column: 1 / -1;
499
+ }
500
+
501
+ .workspace-shell {
502
+ height: 100vh;
503
+ min-height: 0;
504
+ padding: 1rem;
505
+ overflow: hidden;
506
+ }
507
+
508
+ .workspace-topbar {
509
+ position: relative;
510
+ z-index: 30;
511
+ height: var(--workspace-topbar-height);
512
+ display: grid;
513
+ grid-template-columns: auto minmax(0, 1fr) auto;
514
+ gap: 1rem;
515
+ align-items: center;
516
+ padding: 0.75rem 1rem;
517
+ border: 1px solid var(--border-color);
518
+ border-radius: 1.5rem;
519
+ background: var(--surface-1);
520
+ backdrop-filter: blur(20px);
521
+ box-shadow: var(--shadow-soft);
522
+ }
523
+
524
+ .workspace-topbar__left,
525
+ .workspace-topbar__right {
526
+ display: flex;
527
+ align-items: center;
528
+ gap: 0.75rem;
529
+ }
530
+
531
+ .workspace-topbar__center {
532
+ min-width: 0;
533
+ align-self: stretch;
534
+ display: flex;
535
+ }
536
+
537
+ .workspace-toolbar-actions {
538
+ display: inline-flex;
539
+ flex-wrap: wrap;
540
+ gap: 0.5rem;
541
+ justify-content: flex-end;
542
+ }
543
+
544
+ .workspace-toolbar-button {
545
+ min-height: 3rem;
546
+ display: inline-flex;
547
+ align-items: center;
548
+ gap: 0.5rem;
549
+ padding: 0.7rem 1rem;
550
+ border: 1px solid var(--border-color);
551
+ border-radius: 999px;
552
+ background: var(--surface-2);
553
+ color: var(--text-main);
554
+ white-space: nowrap;
555
+ }
556
+
557
+ .workspace-toolbar-button:disabled {
558
+ cursor: progress;
559
+ opacity: 0.65;
560
+ }
561
+
562
+ .workspace-toolbar-button__icon {
563
+ color: var(--text-muted);
564
+ font-size: 0.78rem;
565
+ font-weight: 700;
566
+ letter-spacing: 0.08em;
567
+ text-transform: uppercase;
568
+ }
569
+
570
+ .workspace-toolbar-button__icon.material-symbol-icon {
571
+ font-size: 1.2rem;
572
+ font-weight: 400;
573
+ }
574
+
575
+ .icon-button {
576
+ width: 3rem;
577
+ height: 3rem;
578
+ display: inline-flex;
579
+ flex-direction: column;
580
+ justify-content: center;
581
+ gap: 0.28rem;
582
+ padding: 0.75rem;
583
+ border-radius: 1rem;
584
+ background: var(--surface-2);
585
+ border: 1px solid var(--border-color);
586
+ }
587
+
588
+ .icon-button span {
589
+ width: 100%;
590
+ height: 2px;
591
+ border-radius: 999px;
592
+ background: var(--text-main);
593
+ }
594
+
595
+ .theme-pill {
596
+ width: 100%;
597
+ padding: 0.75rem 0.9rem;
598
+ border-radius: 0.9rem;
599
+ background: transparent;
600
+ color: var(--text-muted);
601
+ text-transform: capitalize;
602
+ text-align: left;
603
+ }
604
+
605
+ .theme-pill.active {
606
+ background: var(--accent-soft);
607
+ color: var(--text-main);
608
+ }
609
+
610
+ .theme-menu {
611
+ position: relative;
612
+ }
613
+
614
+ .theme-menu__summary {
615
+ min-height: 3rem;
616
+ display: inline-flex;
617
+ align-items: center;
618
+ gap: 0.65rem;
619
+ padding: 0.7rem 0.95rem;
620
+ border-radius: 999px;
621
+ border: 1px solid var(--border-color);
622
+ background: var(--surface-2);
623
+ cursor: pointer;
624
+ list-style: none;
625
+ }
626
+
627
+ .theme-menu__summary::-webkit-details-marker {
628
+ display: none;
629
+ }
630
+
631
+ .theme-menu__swatch {
632
+ width: 0.9rem;
633
+ height: 0.9rem;
634
+ border-radius: 50%;
635
+ border: 1px solid color-mix(in srgb, var(--text-main) 15%, transparent);
636
+ background: linear-gradient(135deg, var(--accent), var(--accent-strong));
637
+ box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.22);
638
+ }
639
+
640
+ .theme-menu__label {
641
+ color: var(--text-main);
642
+ font-weight: 700;
643
+ text-transform: capitalize;
644
+ }
645
+
646
+ .theme-menu[open] .theme-menu__panel {
647
+ display: grid;
648
+ }
649
+
650
+ .theme-menu__panel {
651
+ position: absolute;
652
+ top: calc(100% + 0.75rem);
653
+ right: 0;
654
+ min-width: 11rem;
655
+ display: none;
656
+ gap: 0.35rem;
657
+ padding: 0.75rem;
658
+ border-radius: 1rem;
659
+ border: 1px solid var(--border-color);
660
+ background: var(--surface-3);
661
+ box-shadow: var(--shadow);
662
+ z-index: 31;
663
+ }
664
+
665
+ .user-menu {
666
+ position: relative;
667
+ }
668
+
669
+ .user-menu summary {
670
+ display: block;
671
+ list-style: none;
672
+ cursor: pointer;
673
+ }
674
+
675
+ .user-menu summary::-webkit-details-marker {
676
+ display: none;
677
+ }
678
+
679
+ .user-avatar {
680
+ width: 3rem;
681
+ height: 3rem;
682
+ display: grid;
683
+ place-items: center;
684
+ border-radius: 50%;
685
+ background: linear-gradient(135deg, var(--accent), var(--accent-strong));
686
+ color: var(--surface-0);
687
+ font-weight: 800;
688
+ }
689
+
690
+ .user-menu[open] .user-menu__panel {
691
+ display: grid;
692
+ }
693
+
694
+ .user-menu__panel {
695
+ position: absolute;
696
+ top: calc(100% + 0.75rem);
697
+ right: 0;
698
+ min-width: 14rem;
699
+ display: none;
700
+ gap: 0.4rem;
701
+ padding: 0.75rem;
702
+ border-radius: 1rem;
703
+ border: 1px solid var(--border-color);
704
+ background: var(--surface-3);
705
+ box-shadow: var(--shadow);
706
+ z-index: 31;
707
+ }
708
+
709
+ .user-menu__name {
710
+ margin: 0 0 0.25rem;
711
+ padding-bottom: 0.5rem;
712
+ border-bottom: 1px solid var(--border-color);
713
+ font-weight: 700;
714
+ }
715
+
716
+ .user-menu__panel button {
717
+ padding: 0.85rem 0.9rem;
718
+ text-align: left;
719
+ border-radius: 0.9rem;
720
+ background: transparent;
721
+ color: var(--text-main);
722
+ }
723
+
724
+ .user-menu__panel button:hover,
725
+ .workspace-menu__item:hover,
726
+ .workspace-toolbar-button:hover,
727
+ .taskbar__link:hover,
728
+ .taskbar__close:hover,
729
+ .theme-pill:hover,
730
+ .icon-button:hover {
731
+ /*background: var(--accent-soft);*/
732
+ opacity: 1;
733
+ }
734
+
735
+ .workspace-main {
736
+ height: calc(100vh - var(--workspace-topbar-height) - 2rem);
737
+ min-height: 0;
738
+ display: grid;
739
+ grid-template-columns: auto minmax(0, 1fr);
740
+ gap: 0;
741
+ margin-top: 0.5rem;
742
+ }
743
+
744
+ .workspace-drawer {
745
+ width: 0;
746
+ min-height: 0;
747
+ overflow: hidden;
748
+ transition: width 180ms ease;
749
+ }
750
+
751
+ .workspace-drawer.open {
752
+ width: min(22rem, 34vw);
753
+ margin-right: 1rem;
754
+ }
755
+
756
+ .workspace-menu {
757
+ height: 100%;
758
+ min-height: 0;
759
+ overflow-y: auto;
760
+ padding: 1.25rem;
761
+ border-radius: 1.5rem;
762
+ border: 1px solid var(--border-color);
763
+ background: var(--surface-1);
764
+ box-shadow: var(--shadow-soft);
765
+ }
766
+
767
+ .workspace-menu__header h2 {
768
+ margin: 0.4rem 0 0;
769
+ font-size: 1.6rem;
770
+ }
771
+
772
+ .workspace-menu__header p:last-child {
773
+ color: var(--text-muted);
774
+ }
775
+
776
+ .workspace-menu__crud-launcher {
777
+ display: grid;
778
+ gap: 0.85rem;
779
+ margin-top: 1.5rem;
780
+ padding: 1rem;
781
+ border-radius: 1rem;
782
+ border: 1px solid var(--border-color);
783
+ background: var(--surface-2);
784
+ }
785
+
786
+ .workspace-menu__section-heading {
787
+ display: grid;
788
+ gap: 0.2rem;
789
+ }
790
+
791
+ .workspace-menu__section-heading span,
792
+ .workspace-menu__status {
793
+ color: var(--text-muted);
794
+ }
795
+
796
+ .workspace-menu__status {
797
+ margin: 0;
798
+ }
799
+
800
+ .workspace-menu__status.error {
801
+ color: var(--danger);
802
+ }
803
+
804
+ .workspace-menu__field {
805
+ display: grid;
806
+ gap: 0.45rem;
807
+ }
808
+
809
+ .workspace-menu__field span {
810
+ font-weight: 600;
811
+ }
812
+
813
+ .workspace-menu__field select,
814
+ .workspace-menu__field input {
815
+ width: 100%;
816
+ padding: 0.8rem 0.9rem;
817
+ border-radius: 0.85rem;
818
+ border: 1px solid var(--border-color);
819
+ background: var(--surface-0);
820
+ color: var(--text-main);
821
+ }
822
+
823
+ :root[data-theme='dark'] .workspace-menu__field select,
824
+ :root[data-theme='dark'] .workspace-menu__field input {
825
+ background: rgba(9, 19, 26, 0.58);
826
+ }
827
+
828
+ .workspace-menu__list {
829
+ display: grid;
830
+ gap: 0.75rem;
831
+ margin-top: 1.5rem;
832
+ }
833
+
834
+ .workspace-menu__item {
835
+ display: grid;
836
+ gap: 0.35rem;
837
+ padding: 1rem;
838
+ border-radius: 1rem;
839
+ border: 1px solid var(--border-color);
840
+ background: var(--surface-2);
841
+ color: var(--text-main);
842
+ text-align: left;
843
+ }
844
+
845
+ .workspace-menu__item span {
846
+ color: var(--text-muted);
847
+ }
848
+
849
+ .workspace-menu__item--launch {
850
+ margin-top: 0.35rem;
851
+ }
852
+
853
+ .workspace-menu__item.active {
854
+ border-color: color-mix(in srgb, var(--accent) 30%, transparent);
855
+ background: var(--accent-soft);
856
+ }
857
+
858
+ .workspace-menu__managed-menu {
859
+ display: grid;
860
+ gap: 0.85rem;
861
+ margin-top: 1.25rem;
862
+ padding: 1rem;
863
+ border-radius: 1rem;
864
+ border: 1px solid var(--border-color);
865
+ background: var(--surface-2);
866
+ }
867
+
868
+ .workspace-menu__section-heading--row {
869
+ display: flex;
870
+ align-items: flex-start;
871
+ justify-content: space-between;
872
+ gap: 0.75rem;
873
+ }
874
+
875
+ .workspace-menu__item--compact {
876
+ min-height: 2.4rem;
877
+ padding: 0.7rem 0.9rem;
878
+ }
879
+
880
+ .workspace-menu__tree {
881
+ display: grid;
882
+ gap: 0.45rem;
883
+ }
884
+
885
+ .workspace-menu__tree-node {
886
+ display: grid;
887
+ gap: 0.4rem;
888
+ }
889
+
890
+ .workspace-menu__drop-zone {
891
+ min-height: 0.55rem;
892
+ margin-left: calc((var(--menu-depth, 0) * 0.9rem) + 3.1rem);
893
+ border-radius: 999px;
894
+ background: transparent;
895
+ transition: background-color 120ms ease, box-shadow 120ms ease;
896
+ }
897
+
898
+ .workspace-menu__drop-zone:hover,
899
+ .workspace-menu__drop-zone.is-active {
900
+ background: color-mix(in srgb, var(--accent) 22%, transparent);
901
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent);
902
+ }
903
+
904
+ .workspace-menu__tree-row {
905
+ display: grid;
906
+ grid-template-columns: minmax(0, 1fr);
907
+ gap: 0.75rem;
908
+ align-items: start;
909
+ padding-left: calc(var(--menu-depth, 0) * 0.9rem);
910
+ }
911
+
912
+ .workspace-menu__tree-row.is-dragging {
913
+ opacity: 0.55;
914
+ }
915
+
916
+ .workspace-menu__tree-main {
917
+ display: grid;
918
+ grid-template-columns: minmax(0, 1fr) auto;
919
+ align-items: start;
920
+ min-width: 0;
921
+ border: 1px solid var(--border-color);
922
+ border-radius: 0.85rem;
923
+ background: var(--surface-0);
924
+ transition: border-color 120ms ease, background-color 120ms ease, box-shadow 120ms ease;
925
+ }
926
+
927
+ .workspace-menu__tree-main.is-active {
928
+ border-color: color-mix(in srgb, var(--accent) 30%, transparent);
929
+ background: var(--accent-soft);
930
+ }
931
+
932
+ .workspace-menu__tree-main.is-pending-expand {
933
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 42%, transparent);
934
+ }
935
+
936
+ .workspace-menu__tree-body {
937
+ min-width: 0;
938
+ display: grid;
939
+ }
940
+
941
+ .workspace-menu__tree-expander,
942
+ .workspace-menu__tree-action,
943
+ .workspace-menu__tree-trigger {
944
+ color: var(--text-main);
945
+ font: inherit;
946
+ }
947
+
948
+ .workspace-menu__tree-expander {
949
+ width: 2.75rem;
950
+ min-height: 100%;
951
+ padding: 0.65rem 0.55rem;
952
+ display: inline-flex;
953
+ align-items: center;
954
+ justify-content: center;
955
+ align-self: stretch;
956
+ border: 0;
957
+ border-left: 1px solid var(--border-color);
958
+ border-radius: 0 0.85rem 0.85rem 0;
959
+ background: transparent;
960
+ place-items: center;
961
+ cursor: pointer;
962
+ }
963
+
964
+ .workspace-menu__tree-expander.is-placeholder {
965
+ opacity: 0.35;
966
+ cursor: default;
967
+ }
968
+
969
+ .workspace-menu__tree-trigger {
970
+ min-width: 0;
971
+ display: grid;
972
+ grid-template-columns: minmax(0, 1fr);
973
+ padding: 0.85rem 0.95rem;
974
+ text-align: left;
975
+ cursor: pointer;
976
+ border: 0;
977
+ background: transparent;
978
+ }
979
+
980
+ .workspace-menu__tree-label {
981
+ min-width: 0;
982
+ display: grid;
983
+ gap: 0.25rem;
984
+ }
985
+
986
+ .workspace-menu__tree-label span {
987
+ color: var(--text-muted);
988
+ }
989
+
990
+ .workspace-menu__tree-meta {
991
+ min-width: 0;
992
+ padding: 0 0.95rem 0.85rem;
993
+ }
994
+
995
+ .workspace-menu__tree-meta span {
996
+ color: var(--text-muted);
997
+ }
998
+
999
+ .workspace-menu__tree-trigger:disabled {
1000
+ cursor: default;
1001
+ }
1002
+
1003
+ .workspace-menu__tree-trigger:focus-visible,
1004
+ .workspace-menu__tree-expander:focus-visible {
1005
+ outline: none;
1006
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 55%, transparent);
1007
+ }
1008
+
1009
+ .workspace-menu__tree-expander-icon {
1010
+ display: inline-flex;
1011
+ align-items: center;
1012
+ justify-content: center;
1013
+ min-width: 1.25rem;
1014
+ }
1015
+
1016
+ .workspace-menu__tree-actions {
1017
+ display: flex;
1018
+ flex-wrap: wrap;
1019
+ gap: 0.45rem;
1020
+ justify-content: flex-start;
1021
+ padding-left: 0.1rem;
1022
+ }
1023
+
1024
+ .workspace-menu__tree-actions--inline {
1025
+ padding: 0 0.95rem 0.85rem;
1026
+ }
1027
+
1028
+ .workspace-menu__tree-action {
1029
+ width: 2.5rem;
1030
+ min-height: 2.5rem;
1031
+ padding: 0;
1032
+ display: inline-flex;
1033
+ align-items: center;
1034
+ justify-content: center;
1035
+ cursor: pointer;
1036
+ }
1037
+
1038
+ .workspace-menu__tree-children {
1039
+ display: grid;
1040
+ gap: 0.45rem;
1041
+ }
1042
+
1043
+ .workspace-menu__root-action {
1044
+ margin-top: 0.75rem;
1045
+ }
1046
+
1047
+ .workspace-menu__status--nested {
1048
+ margin-left: calc((var(--menu-depth, 0) + 1) * 0.9rem);
1049
+ }
1050
+
1051
+ .workspace-content {
1052
+ height: 100%;
1053
+ min-height: 0;
1054
+ min-width: 0;
1055
+ padding: 1rem;
1056
+ border-radius: 1.5rem;
1057
+ border: 1px solid var(--border-color);
1058
+ background: var(--surface-1);
1059
+ box-shadow: var(--shadow-soft);
1060
+ overflow: hidden;
1061
+ }
1062
+
1063
+ .workspace-task-host,
1064
+ .workspace-empty-state {
1065
+ height: 100%;
1066
+ }
1067
+
1068
+ .workspace-empty-state {
1069
+ display: grid;
1070
+ place-content: center;
1071
+ gap: 0.8rem;
1072
+ text-align: center;
1073
+ }
1074
+
1075
+ .workspace-empty-state h2,
1076
+ .workspace-empty-state p {
1077
+ margin: 0;
1078
+ }
1079
+
1080
+ .workspace-empty-state p:last-child {
1081
+ max-width: 28rem;
1082
+ color: var(--text-muted);
1083
+ }
1084
+
1085
+ .taskbar {
1086
+ min-width: 0;
1087
+ height: 100%;
1088
+ display: block;
1089
+ overflow-x: auto;
1090
+ padding-bottom: 0.2rem;
1091
+ }
1092
+
1093
+ .taskbar__empty {
1094
+ margin: 0;
1095
+ color: var(--text-muted);
1096
+ white-space: nowrap;
1097
+ }
1098
+
1099
+ .taskbar__item {
1100
+ height: 100%;
1101
+ display: inline-flex;
1102
+ align-items: center;
1103
+ gap: 0.15rem;
1104
+ padding: 0 0.25rem;
1105
+ border-radius: 1rem;
1106
+ border: 1px solid var(--border-color);
1107
+ background: color-mix(in srgb, var(--accent) 25%, var(--surface-2));
1108
+ white-space: nowrap;
1109
+ }
1110
+
1111
+ .taskbar__item.active {
1112
+ background: color-mix(in srgb, var(--accent) 50%, var(--surface-2));
1113
+ }
1114
+
1115
+ .taskbar__desktop {
1116
+ display: flex;
1117
+ align-items: center;
1118
+ height: 100%;
1119
+ gap: 0.5rem;
1120
+ }
1121
+
1122
+ .taskbar__breadcrumb {
1123
+ color: var(--text-muted);
1124
+ }
1125
+
1126
+ .taskbar__link,
1127
+ .taskbar__close {
1128
+ padding: 0.55rem 0.8rem;
1129
+ border-radius: 1rem;
1130
+ background: transparent;
1131
+ color: var(--text-main);
1132
+ }
1133
+
1134
+ .taskbar__close {
1135
+ width: 2rem;
1136
+ padding-inline: 0;
1137
+ }
1138
+
1139
+ @media (max-width: 960px) {
1140
+ .auth-layout {
1141
+ grid-template-columns: 1fr;
1142
+ padding: 1rem;
1143
+ }
1144
+
1145
+ .auth-layout__hero {
1146
+ min-height: 14rem;
1147
+ justify-content: flex-end;
1148
+ }
1149
+
1150
+ .workspace-topbar {
1151
+ grid-template-columns: auto 1fr;
1152
+ grid-template-areas:
1153
+ "menu user"
1154
+ "tasks tasks";
1155
+ height: auto;
1156
+ }
1157
+
1158
+ .workspace-topbar__left {
1159
+ grid-area: menu;
1160
+ }
1161
+
1162
+ .workspace-topbar__center {
1163
+ grid-area: tasks;
1164
+ }
1165
+
1166
+ .workspace-topbar__right {
1167
+ grid-area: user;
1168
+ justify-content: flex-end;
1169
+ }
1170
+
1171
+ .workspace-main {
1172
+ height: calc(100vh - 9.5rem);
1173
+ }
1174
+
1175
+ .workspace-drawer.open {
1176
+ width: min(18rem, 45vw);
1177
+ }
1178
+ }
1179
+
1180
+ @media (max-width: 720px) {
1181
+ .auth-card {
1182
+ padding: 1.35rem;
1183
+ border-radius: 1.25rem;
1184
+ }
1185
+
1186
+ .auth-form.two-columns {
1187
+ grid-template-columns: 1fr;
1188
+ }
1189
+
1190
+ .workspace-shell {
1191
+ padding: 0.75rem;
1192
+ overflow-x: hidden;
1193
+ overflow-y: auto;
1194
+ -webkit-overflow-scrolling: touch;
1195
+ }
1196
+
1197
+ .workspace-topbar {
1198
+ padding: 0.75rem;
1199
+ border-radius: 1.2rem;
1200
+ }
1201
+
1202
+ .workspace-topbar__right {
1203
+ flex-wrap: wrap;
1204
+ justify-content: flex-end;
1205
+ }
1206
+
1207
+ .workspace-toolbar-actions {
1208
+ width: 100%;
1209
+ }
1210
+
1211
+ .workspace-toolbar-button {
1212
+ flex: 1 1 auto;
1213
+ justify-content: center;
1214
+ }
1215
+
1216
+ .theme-menu {
1217
+ width: 100%;
1218
+ }
1219
+
1220
+ .theme-menu__summary {
1221
+ width: 100%;
1222
+ justify-content: center;
1223
+ }
1224
+
1225
+ .theme-menu__panel {
1226
+ width: 100%;
1227
+ }
1228
+
1229
+ .workspace-main {
1230
+ grid-template-columns: 1fr;
1231
+ height: auto;
1232
+ min-height: calc(100vh - 11rem);
1233
+ }
1234
+
1235
+ .workspace-drawer,
1236
+ .workspace-drawer.open {
1237
+ width: 100%;
1238
+ margin-right: 0;
1239
+ }
1240
+
1241
+ .workspace-drawer:not(.open) {
1242
+ display: none;
1243
+ }
1244
+
1245
+ .workspace-menu__section-heading--row {
1246
+ flex-direction: column;
1247
+ }
1248
+
1249
+ .workspace-menu__tree-row {
1250
+ grid-template-columns: 1fr;
1251
+ }
1252
+
1253
+ .workspace-menu__tree-actions {
1254
+ justify-content: stretch;
1255
+ }
1256
+
1257
+ .workspace-menu__tree-actions--inline {
1258
+ padding-top: 0;
1259
+ }
1260
+
1261
+ .workspace-menu__tree-action {
1262
+ flex: 1 1 auto;
1263
+ }
1264
+
1265
+ .workspace-content {
1266
+ min-height: 65vh;
1267
+ }
1268
+ }