trackops 2.0.4 → 2.0.6

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 (92) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +660 -575
  3. package/bin/trackops.js +127 -106
  4. package/lib/cli-format.js +118 -0
  5. package/lib/config.js +352 -326
  6. package/lib/control.js +408 -246
  7. package/lib/env.js +234 -222
  8. package/lib/i18n.js +5 -4
  9. package/lib/init.js +390 -282
  10. package/lib/locale.js +41 -41
  11. package/lib/opera-bootstrap.js +1066 -880
  12. package/lib/opera.js +615 -444
  13. package/lib/preferences.js +74 -74
  14. package/lib/registry.js +214 -214
  15. package/lib/release.js +56 -56
  16. package/lib/runtime-state.js +144 -144
  17. package/lib/skills.js +114 -89
  18. package/lib/workspace.js +259 -248
  19. package/locales/en.json +311 -167
  20. package/locales/es.json +314 -170
  21. package/package.json +61 -58
  22. package/scripts/postinstall-locale.js +21 -21
  23. package/scripts/skills-marketplace-smoke.js +124 -124
  24. package/scripts/smoke-tests.js +563 -517
  25. package/scripts/sync-skill-version.js +21 -21
  26. package/scripts/validate-skill.js +103 -103
  27. package/skills/trackops/SKILL.md +126 -122
  28. package/skills/trackops/agents/openai.yaml +7 -7
  29. package/skills/trackops/locales/en/SKILL.md +126 -122
  30. package/skills/trackops/locales/en/references/activation.md +94 -90
  31. package/skills/trackops/locales/en/references/troubleshooting.md +73 -67
  32. package/skills/trackops/locales/en/references/workflow.md +55 -32
  33. package/skills/trackops/references/activation.md +94 -90
  34. package/skills/trackops/references/troubleshooting.md +73 -67
  35. package/skills/trackops/references/workflow.md +55 -32
  36. package/skills/trackops/skill.json +29 -29
  37. package/templates/hooks/post-checkout +2 -2
  38. package/templates/hooks/post-commit +2 -2
  39. package/templates/hooks/post-merge +2 -2
  40. package/templates/opera/agent.md +28 -27
  41. package/templates/opera/architecture/dependency-graph.md +24 -24
  42. package/templates/opera/architecture/runtime-automation.md +24 -24
  43. package/templates/opera/architecture/runtime-operations.md +34 -34
  44. package/templates/opera/en/agent.md +22 -21
  45. package/templates/opera/en/architecture/dependency-graph.md +24 -24
  46. package/templates/opera/en/architecture/runtime-automation.md +24 -24
  47. package/templates/opera/en/architecture/runtime-operations.md +34 -34
  48. package/templates/opera/en/reviews/delivery-audit.md +18 -18
  49. package/templates/opera/en/reviews/integration-audit.md +18 -18
  50. package/templates/opera/en/router.md +24 -19
  51. package/templates/opera/references/autonomy-and-recovery.md +117 -117
  52. package/templates/opera/references/opera-cycle.md +193 -193
  53. package/templates/opera/registry.md +28 -28
  54. package/templates/opera/reviews/delivery-audit.md +18 -18
  55. package/templates/opera/reviews/integration-audit.md +18 -18
  56. package/templates/opera/router.md +54 -49
  57. package/templates/skills/changelog-updater/SKILL.md +69 -69
  58. package/templates/skills/commiter/SKILL.md +99 -99
  59. package/templates/skills/opera-contract-auditor/SKILL.md +38 -38
  60. package/templates/skills/opera-contract-auditor/locales/en/SKILL.md +38 -38
  61. package/templates/skills/opera-policy-guard/SKILL.md +26 -26
  62. package/templates/skills/opera-policy-guard/locales/en/SKILL.md +26 -26
  63. package/templates/skills/opera-skill/SKILL.md +279 -0
  64. package/templates/skills/opera-skill/locales/en/SKILL.md +279 -0
  65. package/templates/skills/opera-skill/locales/en/references/phase-dod.md +138 -0
  66. package/templates/skills/opera-skill/references/phase-dod.md +138 -0
  67. package/templates/skills/project-starter-skill/SKILL.md +150 -131
  68. package/templates/skills/project-starter-skill/locales/en/SKILL.md +143 -105
  69. package/templates/skills/project-starter-skill/references/opera-cycle.md +195 -193
  70. package/ui/css/base.css +284 -284
  71. package/ui/css/charts.css +425 -425
  72. package/ui/css/components.css +1107 -1107
  73. package/ui/css/onboarding.css +133 -133
  74. package/ui/css/terminal.css +125 -125
  75. package/ui/css/timeline.css +58 -58
  76. package/ui/css/tokens.css +284 -284
  77. package/ui/favicon.svg +5 -5
  78. package/ui/index.html +99 -99
  79. package/ui/js/charts.js +526 -526
  80. package/ui/js/console-logger.js +172 -172
  81. package/ui/js/filters.js +247 -247
  82. package/ui/js/icons.js +129 -129
  83. package/ui/js/keyboard.js +229 -229
  84. package/ui/js/router.js +142 -142
  85. package/ui/js/theme.js +100 -100
  86. package/ui/js/time-tracker.js +248 -248
  87. package/ui/js/views/dashboard.js +870 -870
  88. package/ui/js/views/flash.js +47 -47
  89. package/ui/js/views/projects.js +745 -745
  90. package/ui/js/views/scrum.js +476 -476
  91. package/ui/js/views/settings.js +331 -331
  92. package/ui/js/views/timeline.js +265 -265
package/ui/css/tokens.css CHANGED
@@ -1,284 +1,284 @@
1
- /* ═══════════════════════════════════════════════════════
2
- PROJECT-OPS DESIGN TOKENS
3
- Grayscale + Glassmorphism Design System
4
- ═══════════════════════════════════════════════════════ */
5
-
6
- :root {
7
-
8
- /* ── Grayscale Foundation ── */
9
- --gray-950: #0C0C0E;
10
- --gray-900: #141416;
11
- --gray-850: #1A1A1E;
12
- --gray-800: #222228;
13
- --gray-700: #2E2E36;
14
- --gray-600: #3E3E48;
15
- --gray-500: #5A5A66;
16
- --gray-400: #8A8A96;
17
- --gray-300: #B0B0BC;
18
- --gray-200: #D0D0D8;
19
- --gray-100: #E8E8EE;
20
- --gray-50: #F4F4F8;
21
-
22
- /* ── Data Accent Colors ── */
23
- --accent-blue: #60A5FA;
24
- --accent-cyan: #22D3EE;
25
- --accent-green: #4ADE80;
26
- --accent-yellow: #FACC15;
27
- --accent-red: #F87171;
28
- --accent-purple: #A78BFA;
29
- --accent-orange: #FB923C;
30
-
31
- /* ── Surfaces ── */
32
- --surface-0: var(--gray-900);
33
- --surface-1: rgba(26, 26, 30, 0.85);
34
- --surface-2: rgba(34, 34, 40, 0.55);
35
- --surface-3: rgba(46, 46, 54, 0.65);
36
- --surface-4: rgba(255, 255, 255, 0.03);
37
-
38
- /* ── Text ── */
39
- --text-primary: var(--gray-50);
40
- --text-secondary: var(--gray-400);
41
- --text-muted: var(--gray-500);
42
- --text-accent: var(--accent-blue);
43
-
44
- /* ── Borders ── */
45
- --border: rgba(255, 255, 255, 0.06);
46
- --border-strong: rgba(255, 255, 255, 0.12);
47
- --border-glass: rgba(255, 255, 255, 0.08);
48
- --border-accent: rgba(96, 165, 250, 0.35);
49
-
50
- /* ── Accent ── */
51
- --accent: var(--accent-blue);
52
- --accent-light: rgba(96, 165, 250, 0.12);
53
- --accent-glow: rgba(96, 165, 250, 0.20);
54
- --accent-hover: #93C5FD;
55
-
56
- /* ── Status ── */
57
- --success: var(--accent-green);
58
- --success-light: rgba(74, 222, 128, 0.12);
59
- --warning: var(--accent-yellow);
60
- --warning-light: rgba(250, 204, 21, 0.12);
61
- --danger: var(--accent-red);
62
- --danger-light: rgba(248, 113, 113, 0.12);
63
- --info: var(--accent-cyan);
64
- --info-light: rgba(34, 211, 238, 0.12);
65
-
66
- /* ── Priorities ── */
67
- --p0: var(--accent-red);
68
- --p1: var(--accent-yellow);
69
- --p2: var(--accent-blue);
70
- --p3: var(--gray-500);
71
-
72
- /* ── Glass Token System ── */
73
- --glass-blur: 20px;
74
- --glass-blur-lg: 40px;
75
- --glass-blur-sm: 12px;
76
- --glass-bg: rgba(34, 34, 40, 0.55);
77
- --glass-bg-strong: rgba(34, 34, 40, 0.72);
78
- --glass-bg-subtle: rgba(34, 34, 40, 0.35);
79
- --glass-border: rgba(255, 255, 255, 0.08);
80
- --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.30);
81
- --glass-inner: inset 0 1px 0 rgba(255, 255, 255, 0.05);
82
-
83
- --glass-border-hover: rgba(255, 255, 255, 0.14);
84
-
85
- --bg-gradient: radial-gradient(ellipse 80% 50% at 20% 20%, rgba(90, 90, 120, 0.15), transparent 50%),
86
- radial-gradient(ellipse 60% 40% at 80% 80%, rgba(60, 60, 80, 0.12), transparent 50%),
87
- var(--gray-950);
88
-
89
- /* ── Fonts ── */
90
- --font-ui: 'Outfit', system-ui, -apple-system, sans-serif;
91
- --font-heading: 'Plus Jakarta Sans', 'Outfit', sans-serif;
92
- --font-mono: 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
93
-
94
- /* ── Typography Scale (modular 1.25) ── */
95
- --text-xs: 0.75rem; /* 12px */
96
- --text-sm: 0.875rem; /* 14px */
97
- --text-base: 1rem; /* 16px */
98
- --text-md: 1.125rem; /* 18px */
99
- --text-lg: 1.25rem; /* 20px */
100
- --text-xl: 1.5rem; /* 24px */
101
- --text-2xl: 1.875rem; /* 30px */
102
- --text-3xl: 2.25rem; /* 36px */
103
-
104
- /* ── Border Radius ── */
105
- --radius-xs: 0.375rem; /* 6px */
106
- --radius-sm: 0.625rem; /* 10px */
107
- --radius-md: 0.875rem; /* 14px */
108
- --radius-lg: 1.25rem; /* 20px */
109
- --radius-xl: 1.75rem; /* 28px */
110
- --radius-2xl: 2rem; /* 32px */
111
- --radius-super: 3rem; /* 48px */
112
- --radius-full: 9999px;
113
-
114
- /* ── Shadows ── */
115
- --shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
116
- --shadow-md: 0 4px 20px rgba(0,0,0,0.35), 0 2px 8px rgba(0,0,0,0.25);
117
- --shadow-lg: 0 12px 40px rgba(0,0,0,0.4), 0 4px 16px rgba(0,0,0,0.3);
118
- --shadow-xl: 0 24px 60px rgba(0,0,0,0.5), 0 8px 24px rgba(0,0,0,0.35);
119
- --shadow-accent: 0 8px 24px rgba(96,165,250,0.25);
120
- --shadow-glow: 0 0 40px rgba(96,165,250,0.15);
121
-
122
- /* ── Spacing ── */
123
- --space-1: 0.25rem; /* 4px */
124
- --space-2: 0.5rem; /* 8px */
125
- --space-3: 0.75rem; /* 12px */
126
- --space-4: 1rem; /* 16px */
127
- --space-5: 1.25rem; /* 20px */
128
- --space-6: 1.5rem; /* 24px */
129
- --space-8: 2rem; /* 32px */
130
- --space-10: 2.5rem; /* 40px */
131
- --space-12: 3rem; /* 48px */
132
- --space-16: 4rem; /* 64px */
133
-
134
- /* ── Layout ── */
135
- --sidebar-width: 68px;
136
- --sidebar-width-collapsed: 68px;
137
- --sidebar-width-expanded: 240px;
138
- --topbar-height: 48px;
139
- --content-pad: 24px;
140
-
141
- /* ── Transitions ── */
142
- --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
143
- --ease-in: cubic-bezier(0.4, 0, 1, 1);
144
- --ease-inout: cubic-bezier(0.4, 0, 0.2, 1);
145
- --duration-fast: 120ms;
146
- --duration-base: 200ms;
147
- --duration-slow: 350ms;
148
- --duration-slower: 600ms;
149
-
150
- /* ── Z-index ── */
151
- --z-base: 1;
152
- --z-panel: 10;
153
- --z-topbar: 20;
154
- --z-sidebar: 30;
155
- --z-modal: 40;
156
- --z-toast: 50;
157
- --z-onboard: 60;
158
- }
159
-
160
- /* ═══════════════════════════════════════════════════════
161
- LIGHT THEME
162
- Active with: html[data-theme="light"]
163
- ═══════════════════════════════════════════════════════ */
164
- [data-theme="light"] {
165
-
166
- /* ── Surfaces ── */
167
- --surface-0: #EDEDF3;
168
- --surface-1: rgba(255, 255, 255, 0.70);
169
- --surface-2: rgba(255, 255, 255, 0.50);
170
- --surface-3: rgba(255, 255, 255, 0.65);
171
- --surface-4: rgba(0, 0, 0, 0.03);
172
-
173
- /* ── Text ── */
174
- --text-primary: #111118;
175
- --text-secondary: #55556A;
176
- --text-muted: #8888A0;
177
- --text-accent: #3B82F6;
178
-
179
- /* ── Borders ── */
180
- --border: rgba(0, 0, 0, 0.06);
181
- --border-strong: rgba(0, 0, 0, 0.14);
182
- --border-glass: rgba(0, 0, 0, 0.08);
183
- --border-accent: rgba(59, 130, 246, 0.3);
184
-
185
- /* ── Accent ── */
186
- --accent: #3B82F6;
187
- --accent-hover: #60A5FA;
188
- --accent-light: rgba(59, 130, 246, 0.10);
189
- --accent-glow: rgba(59, 130, 246, 0.20);
190
-
191
- /* ── Glass ── */
192
- --glass-bg: rgba(255, 255, 255, 0.50);
193
- --glass-bg-strong: rgba(255, 255, 255, 0.70);
194
- --glass-bg-subtle: rgba(255, 255, 255, 0.35);
195
- --glass-border: rgba(0, 0, 0, 0.08);
196
- --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.10);
197
- --glass-inner: inset 0 1px 0 rgba(255, 255, 255, 0.80);
198
-
199
- --glass-border-hover: rgba(0, 0, 0, 0.14);
200
-
201
- --bg-gradient: radial-gradient(ellipse 80% 50% at 20% 20%, rgba(180, 180, 200, 0.15), transparent 50%),
202
- radial-gradient(ellipse 60% 40% at 80% 80%, rgba(160, 160, 180, 0.10), transparent 50%),
203
- #EDEDF3;
204
-
205
- /* ── Shadows (reduced opacity for light backgrounds) ── */
206
- --shadow-sm: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.05);
207
- --shadow-md: 0 4px 20px rgba(0,0,0,0.08), 0 2px 8px rgba(0,0,0,0.06);
208
- --shadow-lg: 0 12px 40px rgba(0,0,0,0.12), 0 4px 16px rgba(0,0,0,0.08);
209
- --shadow-xl: 0 24px 60px rgba(0,0,0,0.15), 0 8px 24px rgba(0,0,0,0.10);
210
- --shadow-accent: 0 8px 24px rgba(59,130,246,0.20);
211
-
212
- /* ── Status (light overrides) ── */
213
- --success-light: rgba(74,222,128,0.10);
214
- --warning-light: rgba(250,204,21,0.10);
215
- --danger-light: rgba(248,113,113,0.10);
216
- --info-light: rgba(34,211,238,0.10);
217
- }
218
-
219
- /* ═══════════════════════════════════════════════════════
220
- LIGHT THEME – Component Overrides
221
- ═══════════════════════════════════════════════════════ */
222
-
223
- /* Topbar */
224
- [data-theme="light"] .topbar {
225
- background: rgba(248,249,252,0.88);
226
- }
227
-
228
- /* Terminal always dark */
229
- [data-theme="light"] .terminal-surface,
230
- [data-theme="light"] .terminal-output,
231
- [data-theme="light"] .console-panel {
232
- background: #1a1f2e;
233
- color: #94D4BC;
234
- }
235
- [data-theme="light"] .terminal-header {
236
- background: rgba(255,255,255,0.04);
237
- border-bottom-color: rgba(255,255,255,0.04);
238
- }
239
- [data-theme="light"] .console-panel-header {
240
- background: rgba(255,255,255,0.02);
241
- }
242
-
243
- /* Time tracker card */
244
- [data-theme="light"] .time-tracker-card {
245
- background: linear-gradient(135deg, #f0f2fb 0%, #ffffff 100%);
246
- border-color: rgba(96,165,250,0.2);
247
- }
248
-
249
- /* Onboarding backdrop */
250
- [data-theme="light"] .onboarding-backdrop {
251
- background: rgba(0,0,0,0.45);
252
- }
253
-
254
- /* Sidebar logo icon */
255
- [data-theme="light"] .sidebar-logo-icon {
256
- box-shadow: 0 4px 12px rgba(59,130,246,0.3);
257
- }
258
-
259
- /* Topbar timer */
260
- [data-theme="light"] .topbar-timer {
261
- background: #EDEDF3;
262
- border-color: rgba(0,0,0,0.10);
263
- }
264
-
265
- /* Modal */
266
- [data-theme="light"] .modal {
267
- background: #FFFFFF;
268
- border-color: rgba(0,0,0,0.10);
269
- }
270
-
271
- /* Flash toast */
272
- [data-theme="light"] .flash {
273
- background: #FFFFFF;
274
- border-color: rgba(0,0,0,0.10);
275
- }
276
-
277
- /* ═══════════════════════════════════════════════════════
278
- Theme Transition
279
- ═══════════════════════════════════════════════════════ */
280
- html {
281
- transition:
282
- background-color var(--duration-slow) var(--ease-out),
283
- color var(--duration-slow) var(--ease-out);
284
- }
1
+ /* ═══════════════════════════════════════════════════════
2
+ PROJECT-OPS DESIGN TOKENS
3
+ Grayscale + Glassmorphism Design System
4
+ ═══════════════════════════════════════════════════════ */
5
+
6
+ :root {
7
+
8
+ /* ── Grayscale Foundation ── */
9
+ --gray-950: #0C0C0E;
10
+ --gray-900: #141416;
11
+ --gray-850: #1A1A1E;
12
+ --gray-800: #222228;
13
+ --gray-700: #2E2E36;
14
+ --gray-600: #3E3E48;
15
+ --gray-500: #5A5A66;
16
+ --gray-400: #8A8A96;
17
+ --gray-300: #B0B0BC;
18
+ --gray-200: #D0D0D8;
19
+ --gray-100: #E8E8EE;
20
+ --gray-50: #F4F4F8;
21
+
22
+ /* ── Data Accent Colors ── */
23
+ --accent-blue: #60A5FA;
24
+ --accent-cyan: #22D3EE;
25
+ --accent-green: #4ADE80;
26
+ --accent-yellow: #FACC15;
27
+ --accent-red: #F87171;
28
+ --accent-purple: #A78BFA;
29
+ --accent-orange: #FB923C;
30
+
31
+ /* ── Surfaces ── */
32
+ --surface-0: var(--gray-900);
33
+ --surface-1: rgba(26, 26, 30, 0.85);
34
+ --surface-2: rgba(34, 34, 40, 0.55);
35
+ --surface-3: rgba(46, 46, 54, 0.65);
36
+ --surface-4: rgba(255, 255, 255, 0.03);
37
+
38
+ /* ── Text ── */
39
+ --text-primary: var(--gray-50);
40
+ --text-secondary: var(--gray-400);
41
+ --text-muted: var(--gray-500);
42
+ --text-accent: var(--accent-blue);
43
+
44
+ /* ── Borders ── */
45
+ --border: rgba(255, 255, 255, 0.06);
46
+ --border-strong: rgba(255, 255, 255, 0.12);
47
+ --border-glass: rgba(255, 255, 255, 0.08);
48
+ --border-accent: rgba(96, 165, 250, 0.35);
49
+
50
+ /* ── Accent ── */
51
+ --accent: var(--accent-blue);
52
+ --accent-light: rgba(96, 165, 250, 0.12);
53
+ --accent-glow: rgba(96, 165, 250, 0.20);
54
+ --accent-hover: #93C5FD;
55
+
56
+ /* ── Status ── */
57
+ --success: var(--accent-green);
58
+ --success-light: rgba(74, 222, 128, 0.12);
59
+ --warning: var(--accent-yellow);
60
+ --warning-light: rgba(250, 204, 21, 0.12);
61
+ --danger: var(--accent-red);
62
+ --danger-light: rgba(248, 113, 113, 0.12);
63
+ --info: var(--accent-cyan);
64
+ --info-light: rgba(34, 211, 238, 0.12);
65
+
66
+ /* ── Priorities ── */
67
+ --p0: var(--accent-red);
68
+ --p1: var(--accent-yellow);
69
+ --p2: var(--accent-blue);
70
+ --p3: var(--gray-500);
71
+
72
+ /* ── Glass Token System ── */
73
+ --glass-blur: 20px;
74
+ --glass-blur-lg: 40px;
75
+ --glass-blur-sm: 12px;
76
+ --glass-bg: rgba(34, 34, 40, 0.55);
77
+ --glass-bg-strong: rgba(34, 34, 40, 0.72);
78
+ --glass-bg-subtle: rgba(34, 34, 40, 0.35);
79
+ --glass-border: rgba(255, 255, 255, 0.08);
80
+ --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.30);
81
+ --glass-inner: inset 0 1px 0 rgba(255, 255, 255, 0.05);
82
+
83
+ --glass-border-hover: rgba(255, 255, 255, 0.14);
84
+
85
+ --bg-gradient: radial-gradient(ellipse 80% 50% at 20% 20%, rgba(90, 90, 120, 0.15), transparent 50%),
86
+ radial-gradient(ellipse 60% 40% at 80% 80%, rgba(60, 60, 80, 0.12), transparent 50%),
87
+ var(--gray-950);
88
+
89
+ /* ── Fonts ── */
90
+ --font-ui: 'Outfit', system-ui, -apple-system, sans-serif;
91
+ --font-heading: 'Plus Jakarta Sans', 'Outfit', sans-serif;
92
+ --font-mono: 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
93
+
94
+ /* ── Typography Scale (modular 1.25) ── */
95
+ --text-xs: 0.75rem; /* 12px */
96
+ --text-sm: 0.875rem; /* 14px */
97
+ --text-base: 1rem; /* 16px */
98
+ --text-md: 1.125rem; /* 18px */
99
+ --text-lg: 1.25rem; /* 20px */
100
+ --text-xl: 1.5rem; /* 24px */
101
+ --text-2xl: 1.875rem; /* 30px */
102
+ --text-3xl: 2.25rem; /* 36px */
103
+
104
+ /* ── Border Radius ── */
105
+ --radius-xs: 0.375rem; /* 6px */
106
+ --radius-sm: 0.625rem; /* 10px */
107
+ --radius-md: 0.875rem; /* 14px */
108
+ --radius-lg: 1.25rem; /* 20px */
109
+ --radius-xl: 1.75rem; /* 28px */
110
+ --radius-2xl: 2rem; /* 32px */
111
+ --radius-super: 3rem; /* 48px */
112
+ --radius-full: 9999px;
113
+
114
+ /* ── Shadows ── */
115
+ --shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
116
+ --shadow-md: 0 4px 20px rgba(0,0,0,0.35), 0 2px 8px rgba(0,0,0,0.25);
117
+ --shadow-lg: 0 12px 40px rgba(0,0,0,0.4), 0 4px 16px rgba(0,0,0,0.3);
118
+ --shadow-xl: 0 24px 60px rgba(0,0,0,0.5), 0 8px 24px rgba(0,0,0,0.35);
119
+ --shadow-accent: 0 8px 24px rgba(96,165,250,0.25);
120
+ --shadow-glow: 0 0 40px rgba(96,165,250,0.15);
121
+
122
+ /* ── Spacing ── */
123
+ --space-1: 0.25rem; /* 4px */
124
+ --space-2: 0.5rem; /* 8px */
125
+ --space-3: 0.75rem; /* 12px */
126
+ --space-4: 1rem; /* 16px */
127
+ --space-5: 1.25rem; /* 20px */
128
+ --space-6: 1.5rem; /* 24px */
129
+ --space-8: 2rem; /* 32px */
130
+ --space-10: 2.5rem; /* 40px */
131
+ --space-12: 3rem; /* 48px */
132
+ --space-16: 4rem; /* 64px */
133
+
134
+ /* ── Layout ── */
135
+ --sidebar-width: 68px;
136
+ --sidebar-width-collapsed: 68px;
137
+ --sidebar-width-expanded: 240px;
138
+ --topbar-height: 48px;
139
+ --content-pad: 24px;
140
+
141
+ /* ── Transitions ── */
142
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
143
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
144
+ --ease-inout: cubic-bezier(0.4, 0, 0.2, 1);
145
+ --duration-fast: 120ms;
146
+ --duration-base: 200ms;
147
+ --duration-slow: 350ms;
148
+ --duration-slower: 600ms;
149
+
150
+ /* ── Z-index ── */
151
+ --z-base: 1;
152
+ --z-panel: 10;
153
+ --z-topbar: 20;
154
+ --z-sidebar: 30;
155
+ --z-modal: 40;
156
+ --z-toast: 50;
157
+ --z-onboard: 60;
158
+ }
159
+
160
+ /* ═══════════════════════════════════════════════════════
161
+ LIGHT THEME
162
+ Active with: html[data-theme="light"]
163
+ ═══════════════════════════════════════════════════════ */
164
+ [data-theme="light"] {
165
+
166
+ /* ── Surfaces ── */
167
+ --surface-0: #EDEDF3;
168
+ --surface-1: rgba(255, 255, 255, 0.70);
169
+ --surface-2: rgba(255, 255, 255, 0.50);
170
+ --surface-3: rgba(255, 255, 255, 0.65);
171
+ --surface-4: rgba(0, 0, 0, 0.03);
172
+
173
+ /* ── Text ── */
174
+ --text-primary: #111118;
175
+ --text-secondary: #55556A;
176
+ --text-muted: #8888A0;
177
+ --text-accent: #3B82F6;
178
+
179
+ /* ── Borders ── */
180
+ --border: rgba(0, 0, 0, 0.06);
181
+ --border-strong: rgba(0, 0, 0, 0.14);
182
+ --border-glass: rgba(0, 0, 0, 0.08);
183
+ --border-accent: rgba(59, 130, 246, 0.3);
184
+
185
+ /* ── Accent ── */
186
+ --accent: #3B82F6;
187
+ --accent-hover: #60A5FA;
188
+ --accent-light: rgba(59, 130, 246, 0.10);
189
+ --accent-glow: rgba(59, 130, 246, 0.20);
190
+
191
+ /* ── Glass ── */
192
+ --glass-bg: rgba(255, 255, 255, 0.50);
193
+ --glass-bg-strong: rgba(255, 255, 255, 0.70);
194
+ --glass-bg-subtle: rgba(255, 255, 255, 0.35);
195
+ --glass-border: rgba(0, 0, 0, 0.08);
196
+ --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.10);
197
+ --glass-inner: inset 0 1px 0 rgba(255, 255, 255, 0.80);
198
+
199
+ --glass-border-hover: rgba(0, 0, 0, 0.14);
200
+
201
+ --bg-gradient: radial-gradient(ellipse 80% 50% at 20% 20%, rgba(180, 180, 200, 0.15), transparent 50%),
202
+ radial-gradient(ellipse 60% 40% at 80% 80%, rgba(160, 160, 180, 0.10), transparent 50%),
203
+ #EDEDF3;
204
+
205
+ /* ── Shadows (reduced opacity for light backgrounds) ── */
206
+ --shadow-sm: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.05);
207
+ --shadow-md: 0 4px 20px rgba(0,0,0,0.08), 0 2px 8px rgba(0,0,0,0.06);
208
+ --shadow-lg: 0 12px 40px rgba(0,0,0,0.12), 0 4px 16px rgba(0,0,0,0.08);
209
+ --shadow-xl: 0 24px 60px rgba(0,0,0,0.15), 0 8px 24px rgba(0,0,0,0.10);
210
+ --shadow-accent: 0 8px 24px rgba(59,130,246,0.20);
211
+
212
+ /* ── Status (light overrides) ── */
213
+ --success-light: rgba(74,222,128,0.10);
214
+ --warning-light: rgba(250,204,21,0.10);
215
+ --danger-light: rgba(248,113,113,0.10);
216
+ --info-light: rgba(34,211,238,0.10);
217
+ }
218
+
219
+ /* ═══════════════════════════════════════════════════════
220
+ LIGHT THEME – Component Overrides
221
+ ═══════════════════════════════════════════════════════ */
222
+
223
+ /* Topbar */
224
+ [data-theme="light"] .topbar {
225
+ background: rgba(248,249,252,0.88);
226
+ }
227
+
228
+ /* Terminal always dark */
229
+ [data-theme="light"] .terminal-surface,
230
+ [data-theme="light"] .terminal-output,
231
+ [data-theme="light"] .console-panel {
232
+ background: #1a1f2e;
233
+ color: #94D4BC;
234
+ }
235
+ [data-theme="light"] .terminal-header {
236
+ background: rgba(255,255,255,0.04);
237
+ border-bottom-color: rgba(255,255,255,0.04);
238
+ }
239
+ [data-theme="light"] .console-panel-header {
240
+ background: rgba(255,255,255,0.02);
241
+ }
242
+
243
+ /* Time tracker card */
244
+ [data-theme="light"] .time-tracker-card {
245
+ background: linear-gradient(135deg, #f0f2fb 0%, #ffffff 100%);
246
+ border-color: rgba(96,165,250,0.2);
247
+ }
248
+
249
+ /* Onboarding backdrop */
250
+ [data-theme="light"] .onboarding-backdrop {
251
+ background: rgba(0,0,0,0.45);
252
+ }
253
+
254
+ /* Sidebar logo icon */
255
+ [data-theme="light"] .sidebar-logo-icon {
256
+ box-shadow: 0 4px 12px rgba(59,130,246,0.3);
257
+ }
258
+
259
+ /* Topbar timer */
260
+ [data-theme="light"] .topbar-timer {
261
+ background: #EDEDF3;
262
+ border-color: rgba(0,0,0,0.10);
263
+ }
264
+
265
+ /* Modal */
266
+ [data-theme="light"] .modal {
267
+ background: #FFFFFF;
268
+ border-color: rgba(0,0,0,0.10);
269
+ }
270
+
271
+ /* Flash toast */
272
+ [data-theme="light"] .flash {
273
+ background: #FFFFFF;
274
+ border-color: rgba(0,0,0,0.10);
275
+ }
276
+
277
+ /* ═══════════════════════════════════════════════════════
278
+ Theme Transition
279
+ ═══════════════════════════════════════════════════════ */
280
+ html {
281
+ transition:
282
+ background-color var(--duration-slow) var(--ease-out),
283
+ color var(--duration-slow) var(--ease-out);
284
+ }
package/ui/favicon.svg CHANGED
@@ -1,5 +1,5 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
- <rect width="32" height="32" rx="8" fill="#0F1117"/>
3
- <path d="M16 16c-2.5-3.5-5-6-8-6a6 6 0 0 0 0 12c3 0 5.5-2.5 8-6z" fill="none" stroke="#6366F1" stroke-width="2.5" stroke-linecap="round"/>
4
- <path d="M16 16c2.5 3.5 5 6 8 6a6 6 0 0 0 0-12c-3 0-5.5 2.5-8 6z" fill="none" stroke="#6366F1" stroke-width="2.5" stroke-linecap="round"/>
5
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
+ <rect width="32" height="32" rx="8" fill="#0F1117"/>
3
+ <path d="M16 16c-2.5-3.5-5-6-8-6a6 6 0 0 0 0 12c3 0 5.5-2.5 8-6z" fill="none" stroke="#6366F1" stroke-width="2.5" stroke-linecap="round"/>
4
+ <path d="M16 16c2.5 3.5 5 6 8 6a6 6 0 0 0 0-12c-3 0-5.5 2.5-8 6z" fill="none" stroke="#6366F1" stroke-width="2.5" stroke-linecap="round"/>
5
+ </svg>