trackops 2.0.3 → 2.0.5

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 (103) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +695 -402
  3. package/bin/trackops.js +116 -116
  4. package/lib/config.js +326 -326
  5. package/lib/control.js +208 -208
  6. package/lib/env.js +244 -244
  7. package/lib/init.js +325 -325
  8. package/lib/locale.js +24 -0
  9. package/lib/opera-bootstrap.js +941 -874
  10. package/lib/opera.js +494 -477
  11. package/lib/preferences.js +74 -74
  12. package/lib/registry.js +214 -196
  13. package/lib/release.js +56 -56
  14. package/lib/runtime-state.js +144 -144
  15. package/lib/server.js +312 -207
  16. package/lib/skills.js +74 -57
  17. package/lib/workspace.js +260 -260
  18. package/locales/en.json +192 -166
  19. package/locales/es.json +192 -166
  20. package/package.json +61 -58
  21. package/scripts/postinstall-locale.js +21 -21
  22. package/scripts/skills-marketplace-smoke.js +124 -124
  23. package/scripts/smoke-tests.js +558 -554
  24. package/scripts/sync-skill-version.js +21 -21
  25. package/scripts/validate-skill.js +103 -103
  26. package/skills/trackops/SKILL.md +126 -122
  27. package/skills/trackops/agents/openai.yaml +7 -7
  28. package/skills/trackops/locales/en/SKILL.md +126 -122
  29. package/skills/trackops/locales/en/references/activation.md +94 -75
  30. package/skills/trackops/locales/en/references/troubleshooting.md +73 -55
  31. package/skills/trackops/locales/en/references/workflow.md +55 -32
  32. package/skills/trackops/references/activation.md +94 -75
  33. package/skills/trackops/references/troubleshooting.md +73 -55
  34. package/skills/trackops/references/workflow.md +55 -32
  35. package/skills/trackops/skill.json +29 -29
  36. package/templates/hooks/post-checkout +2 -2
  37. package/templates/hooks/post-commit +2 -2
  38. package/templates/hooks/post-merge +2 -2
  39. package/templates/opera/agent.md +28 -27
  40. package/templates/opera/architecture/dependency-graph.md +24 -24
  41. package/templates/opera/architecture/runtime-automation.md +24 -24
  42. package/templates/opera/architecture/runtime-operations.md +34 -34
  43. package/templates/opera/en/agent.md +22 -21
  44. package/templates/opera/en/architecture/dependency-graph.md +24 -24
  45. package/templates/opera/en/architecture/runtime-automation.md +24 -24
  46. package/templates/opera/en/architecture/runtime-operations.md +34 -34
  47. package/templates/opera/en/reviews/delivery-audit.md +18 -18
  48. package/templates/opera/en/reviews/integration-audit.md +18 -18
  49. package/templates/opera/en/router.md +24 -19
  50. package/templates/opera/references/autonomy-and-recovery.md +117 -117
  51. package/templates/opera/references/opera-cycle.md +193 -193
  52. package/templates/opera/registry.md +28 -28
  53. package/templates/opera/reviews/delivery-audit.md +18 -18
  54. package/templates/opera/reviews/integration-audit.md +18 -18
  55. package/templates/opera/router.md +54 -49
  56. package/templates/skills/changelog-updater/SKILL.md +69 -69
  57. package/templates/skills/commiter/SKILL.md +99 -99
  58. package/templates/skills/opera-contract-auditor/SKILL.md +38 -38
  59. package/templates/skills/opera-contract-auditor/locales/en/SKILL.md +38 -38
  60. package/templates/skills/opera-policy-guard/SKILL.md +26 -26
  61. package/templates/skills/opera-policy-guard/locales/en/SKILL.md +26 -26
  62. package/templates/skills/opera-skill/SKILL.md +279 -0
  63. package/templates/skills/opera-skill/locales/en/SKILL.md +279 -0
  64. package/templates/skills/opera-skill/locales/en/references/phase-dod.md +138 -0
  65. package/templates/skills/opera-skill/references/phase-dod.md +138 -0
  66. package/templates/skills/project-starter-skill/SKILL.md +150 -131
  67. package/templates/skills/project-starter-skill/locales/en/SKILL.md +143 -105
  68. package/templates/skills/project-starter-skill/references/opera-cycle.md +195 -193
  69. package/ui/css/base.css +284 -266
  70. package/ui/css/charts.css +425 -327
  71. package/ui/css/components.css +1107 -570
  72. package/ui/css/onboarding.css +133 -0
  73. package/ui/css/panels.css +345 -406
  74. package/ui/css/terminal.css +125 -0
  75. package/ui/css/timeline.css +58 -0
  76. package/ui/css/tokens.css +284 -227
  77. package/ui/favicon.svg +5 -5
  78. package/ui/index.html +99 -96
  79. package/ui/js/api.js +49 -13
  80. package/ui/js/app.js +28 -32
  81. package/ui/js/charts.js +526 -0
  82. package/ui/js/console-logger.js +172 -172
  83. package/ui/js/filters.js +247 -0
  84. package/ui/js/icons.js +129 -104
  85. package/ui/js/keyboard.js +229 -0
  86. package/ui/js/onboarding.js +33 -42
  87. package/ui/js/router.js +142 -125
  88. package/ui/js/theme.js +100 -100
  89. package/ui/js/time-tracker.js +248 -248
  90. package/ui/js/views/board.js +84 -114
  91. package/ui/js/views/dashboard.js +870 -0
  92. package/ui/js/views/flash.js +47 -47
  93. package/ui/js/views/projects.js +745 -0
  94. package/ui/js/views/scrum.js +476 -0
  95. package/ui/js/views/settings.js +153 -203
  96. package/ui/js/views/sidebar.js +37 -31
  97. package/ui/js/views/tasks.js +218 -101
  98. package/ui/js/views/timeline.js +265 -0
  99. package/ui/js/views/topbar.js +94 -107
  100. package/ui/app.js +0 -950
  101. package/ui/js/views/insights.js +0 -340
  102. package/ui/js/views/overview.js +0 -369
  103. package/ui/styles.css +0 -688
package/ui/css/tokens.css CHANGED
@@ -1,227 +1,284 @@
1
- /* ═══════════════════════════════════════════════════════
2
- TRACKOPS DESIGN TOKENS
3
- Coherentes con docs/index.html (identidad de marca web)
4
- ═══════════════════════════════════════════════════════ */
5
-
6
- :root {
7
- /* ── Colores base (marca web) ── */
8
- --navy: #0A0F1E;
9
- --navy-90: #0d1326;
10
- --navy-80: #111827;
11
- --slate: #1E293B;
12
- --charcoal: #111111;
13
-
14
- /* ── Accent (indigo) ── */
15
- --accent: #6366F1;
16
- --accent-light: rgba(99, 102, 241, 0.15);
17
- --accent-glow: rgba(99, 102, 241, 0.30);
18
- --accent-hover: #818CF8;
19
-
20
- /* ── Superficies del dashboard ── */
21
- --surface-0: #0A0F1E; /* fondo global */
22
- --surface-1: #0d1326; /* sidebar + panel base */
23
- --surface-2: #111827; /* cards */
24
- --surface-3: #1a2234; /* hover cards */
25
- --surface-4: rgba(255,255,255,0.04); /* inset sutil */
26
-
27
- /* ── Texto ── */
28
- --text-primary: #F1F5F9;
29
- --text-secondary: #94A3B8;
30
- --text-muted: #475569;
31
- --text-accent: #818CF8;
32
-
33
- /* ── Bordes ── */
34
- --border: rgba(255,255,255,0.06);
35
- --border-strong: rgba(255,255,255,0.12);
36
- --border-accent: rgba(99,102,241,0.35);
37
-
38
- /* ── Estado ── */
39
- --success: #10B981;
40
- --success-light: rgba(16, 185, 129, 0.12);
41
- --warning: #F59E0B;
42
- --warning-light: rgba(245, 158, 11, 0.12);
43
- --danger: #EF4444;
44
- --danger-light: rgba(239, 68, 68, 0.12);
45
- --info: #3B82F6;
46
- --info-light: rgba(59, 130, 246, 0.12);
47
-
48
- /* ── Prioridades ── */
49
- --p0: #EF4444;
50
- --p1: #F59E0B;
51
- --p2: #6366F1;
52
- --p3: #475569;
53
-
54
- /* ── Fuentes (coherentes con marca web) ── */
55
- --font-ui: 'Outfit', system-ui, -apple-system, sans-serif;
56
- --font-heading: 'Plus Jakarta Sans', 'Outfit', sans-serif;
57
- --font-mono: 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
58
-
59
- /* ── Tamaños de fuente (escala modular 1.25) ── */
60
- --text-xs: 0.75rem; /* 12px */
61
- --text-sm: 0.875rem; /* 14px */
62
- --text-base: 1rem; /* 16px */
63
- --text-md: 1.125rem; /* 18px */
64
- --text-lg: 1.25rem; /* 20px */
65
- --text-xl: 1.5rem; /* 24px */
66
- --text-2xl: 1.875rem; /* 30px */
67
- --text-3xl: 2.25rem; /* 36px */
68
-
69
- /* ── Border Radius (marca web usa 3rem = super) ── */
70
- --radius-xs: 0.375rem; /* 6px */
71
- --radius-sm: 0.625rem; /* 10px */
72
- --radius-md: 0.875rem; /* 14px */
73
- --radius-lg: 1.25rem; /* 20px */
74
- --radius-xl: 1.75rem; /* 28px */
75
- --radius-2xl: 2rem; /* 32px */
76
- --radius-super: 3rem; /* 48px */
77
- --radius-full: 9999px;
78
-
79
- /* ── Sombras ── */
80
- --shadow-sm: 0 1px 3px rgba(0,0,0,0.4), 0 1px 2px rgba(0,0,0,0.3);
81
- --shadow-md: 0 4px 20px rgba(0,0,0,0.35), 0 2px 8px rgba(0,0,0,0.25);
82
- --shadow-lg: 0 12px 40px rgba(0,0,0,0.4), 0 4px 16px rgba(0,0,0,0.3);
83
- --shadow-xl: 0 24px 60px rgba(0,0,0,0.5), 0 8px 24px rgba(0,0,0,0.35);
84
- --shadow-accent: 0 8px 24px rgba(99,102,241,0.25);
85
- --shadow-glow: 0 0 40px rgba(99,102,241,0.15);
86
-
87
- /* ── Espaciado ── */
88
- --space-1: 0.25rem; /* 4px */
89
- --space-2: 0.5rem; /* 8px */
90
- --space-3: 0.75rem; /* 12px */
91
- --space-4: 1rem; /* 16px */
92
- --space-5: 1.25rem; /* 20px */
93
- --space-6: 1.5rem; /* 24px */
94
- --space-8: 2rem; /* 32px */
95
- --space-10: 2.5rem; /* 40px */
96
- --space-12: 3rem; /* 48px */
97
- --space-16: 4rem; /* 64px */
98
-
99
- /* ── Layout ── */
100
- --sidebar-width: 272px;
101
- --topbar-height: 64px;
102
- --content-pad: 24px;
103
-
104
- /* ── Transiciones ── */
105
- --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
106
- --ease-in: cubic-bezier(0.4, 0, 1, 1);
107
- --ease-inout: cubic-bezier(0.4, 0, 0.2, 1);
108
- --duration-fast: 120ms;
109
- --duration-base: 200ms;
110
- --duration-slow: 350ms;
111
- --duration-slower: 600ms;
112
-
113
- /* ── Z-index ── */
114
- --z-base: 1;
115
- --z-panel: 10;
116
- --z-topbar: 20;
117
- --z-sidebar: 30;
118
- --z-modal: 40;
119
- --z-toast: 50;
120
- --z-onboard: 60;
121
- }
122
- /* ───────────────────────────────────
123
- TEMA CLARO
124
- Activo con: html[data-theme="light"]
125
- ─────────────────────────────────── */
126
- [data-theme="light"] {
127
-
128
- /* ── Superficies ── */
129
- --surface-0: #F0F2F8; /* fondo global */
130
- --surface-1: #FFFFFF; /* sidebar + panel base */
131
- --surface-2: #F8F9FC; /* cards */
132
- --surface-3: #EEF0F7; /* hover / inset */
133
- --surface-4: rgba(0,0,0,0.04); /* inset sutil */
134
-
135
- /* ── Texto ── */
136
- --text-primary: #0D1117;
137
- --text-secondary: #4A5568;
138
- --text-muted: #9AA5B4;
139
- --text-accent: #4F46E5;
140
-
141
- /* ── Bordes ── */
142
- --border: rgba(0,0,0,0.08);
143
- --border-strong: rgba(0,0,0,0.14);
144
- --border-accent: rgba(99,102,241,0.3);
145
-
146
- /* ── Sombras (más suaves sobre fondos claros) ── */
147
- --shadow-sm: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.05);
148
- --shadow-md: 0 4px 20px rgba(0,0,0,0.08), 0 2px 8px rgba(0,0,0,0.06);
149
- --shadow-lg: 0 12px 40px rgba(0,0,0,0.12), 0 4px 16px rgba(0,0,0,0.08);
150
- --shadow-xl: 0 24px 60px rgba(0,0,0,0.15), 0 8px 24px rgba(0,0,0,0.10);
151
- --shadow-accent: 0 8px 24px rgba(99,102,241,0.20);
152
-
153
- /* ── Accent ajustado para legibilidad en claro ── */
154
- --accent: #4F46E5;
155
- --accent-hover: #6366F1;
156
- --accent-light: rgba(79,70,229,0.10);
157
- --accent-glow: rgba(79,70,229,0.20);
158
-
159
- /* ── Estado (más saturados en claro) ── */
160
- --success-light: rgba(5,150,105,0.10);
161
- --warning-light: rgba(217,119,6,0.10);
162
- --danger-light: rgba(220,38,38,0.10);
163
- --info-light: rgba(37,99,235,0.10);
164
- }
165
-
166
- /* Ajustes específicos que no se pueden resolver solo con tokens */
167
-
168
- /* Topbar en light */
169
- [data-theme="light"] .topbar {
170
- background: rgba(248,249,252,0.88);
171
- }
172
-
173
- /* Terminal siempre dark (legibilidad de código) */
174
- [data-theme="light"] .terminal-surface,
175
- [data-theme="light"] .terminal-output,
176
- [data-theme="light"] .console-panel {
177
- background: #1a1f2e;
178
- color: #94D4BC;
179
- }
180
- [data-theme="light"] .terminal-header {
181
- background: rgba(255,255,255,0.04);
182
- border-bottom-color: rgba(255,255,255,0.04);
183
- }
184
- [data-theme="light"] .console-panel-header {
185
- background: rgba(255,255,255,0.02);
186
- }
187
-
188
- /* Time tracker card en light */
189
- [data-theme="light"] .time-tracker-card {
190
- background: linear-gradient(135deg, #f0f2fb 0%, #ffffff 100%);
191
- border-color: rgba(99,102,241,0.2);
192
- }
193
-
194
- /* Onboarding backdrop en light */
195
- [data-theme="light"] .onboarding-backdrop {
196
- background: rgba(0,0,0,0.45);
197
- }
198
-
199
- /* Sidebar logo icon sigue con gradiente oscuro */
200
- [data-theme="light"] .sidebar-logo-icon {
201
- box-shadow: 0 4px 12px rgba(79,70,229,0.3);
202
- }
203
-
204
- /* Topbar timer en light */
205
- [data-theme="light"] .topbar-timer {
206
- background: #F0F2F8;
207
- border-color: rgba(0,0,0,0.10);
208
- }
209
-
210
- /* Modal en light */
211
- [data-theme="light"] .modal {
212
- background: #FFFFFF;
213
- border-color: rgba(0,0,0,0.10);
214
- }
215
-
216
- /* Flash toast en light */
217
- [data-theme="light"] .flash {
218
- background: #FFFFFF;
219
- border-color: rgba(0,0,0,0.10);
220
- }
221
-
222
- /* Transición suave al cambiar de tema */
223
- html {
224
- transition:
225
- background-color var(--duration-slow) var(--ease-out),
226
- color var(--duration-slow) var(--ease-out);
227
- }
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>