prompt_engine 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +67 -0
  4. data/Rakefile +22 -0
  5. data/app/assets/stylesheets/prompt_engine/application.css +22 -0
  6. data/app/assets/stylesheets/prompt_engine/buttons.css +124 -0
  7. data/app/assets/stylesheets/prompt_engine/cards.css +63 -0
  8. data/app/assets/stylesheets/prompt_engine/comparison.css +244 -0
  9. data/app/assets/stylesheets/prompt_engine/components/_test_runs.css +144 -0
  10. data/app/assets/stylesheets/prompt_engine/dashboard.css +343 -0
  11. data/app/assets/stylesheets/prompt_engine/evaluations.css +124 -0
  12. data/app/assets/stylesheets/prompt_engine/forms.css +198 -0
  13. data/app/assets/stylesheets/prompt_engine/foundation.css +182 -0
  14. data/app/assets/stylesheets/prompt_engine/layout.css +75 -0
  15. data/app/assets/stylesheets/prompt_engine/loading.css +229 -0
  16. data/app/assets/stylesheets/prompt_engine/notifications.css +78 -0
  17. data/app/assets/stylesheets/prompt_engine/overrides.css +42 -0
  18. data/app/assets/stylesheets/prompt_engine/prompts.css +237 -0
  19. data/app/assets/stylesheets/prompt_engine/sidebar.css +90 -0
  20. data/app/assets/stylesheets/prompt_engine/tables.css +250 -0
  21. data/app/assets/stylesheets/prompt_engine/utilities.css +52 -0
  22. data/app/assets/stylesheets/prompt_engine/versions.css +370 -0
  23. data/app/clients/prompt_engine/open_ai_evals_client.rb +135 -0
  24. data/app/controllers/prompt_engine/admin/base_controller.rb +7 -0
  25. data/app/controllers/prompt_engine/application_controller.rb +4 -0
  26. data/app/controllers/prompt_engine/dashboard_controller.rb +24 -0
  27. data/app/controllers/prompt_engine/eval_runs_controller.rb +23 -0
  28. data/app/controllers/prompt_engine/eval_sets_controller.rb +200 -0
  29. data/app/controllers/prompt_engine/evaluations_controller.rb +32 -0
  30. data/app/controllers/prompt_engine/playground_controller.rb +57 -0
  31. data/app/controllers/prompt_engine/playground_run_results_controller.rb +41 -0
  32. data/app/controllers/prompt_engine/prompts_controller.rb +70 -0
  33. data/app/controllers/prompt_engine/settings_controller.rb +28 -0
  34. data/app/controllers/prompt_engine/test_cases_controller.rb +231 -0
  35. data/app/controllers/prompt_engine/versions_controller.rb +90 -0
  36. data/app/helpers/prompt_engine/application_helper.rb +4 -0
  37. data/app/jobs/prompt_engine/application_job.rb +4 -0
  38. data/app/mailers/prompt_engine/application_mailer.rb +6 -0
  39. data/app/models/prompt_engine/application_record.rb +5 -0
  40. data/app/models/prompt_engine/eval_result.rb +19 -0
  41. data/app/models/prompt_engine/eval_run.rb +40 -0
  42. data/app/models/prompt_engine/eval_set.rb +97 -0
  43. data/app/models/prompt_engine/parameter.rb +126 -0
  44. data/app/models/prompt_engine/parameter_parser.rb +39 -0
  45. data/app/models/prompt_engine/playground_run_result.rb +20 -0
  46. data/app/models/prompt_engine/prompt.rb +192 -0
  47. data/app/models/prompt_engine/prompt_version.rb +72 -0
  48. data/app/models/prompt_engine/setting.rb +45 -0
  49. data/app/models/prompt_engine/test_case.rb +29 -0
  50. data/app/services/prompt_engine/evaluation_runner.rb +258 -0
  51. data/app/services/prompt_engine/playground_executor.rb +124 -0
  52. data/app/services/prompt_engine/variable_detector.rb +97 -0
  53. data/app/views/layouts/prompt_engine/admin.html.erb +65 -0
  54. data/app/views/layouts/prompt_engine/application.html.erb +17 -0
  55. data/app/views/prompt_engine/dashboard/index.html.erb +230 -0
  56. data/app/views/prompt_engine/eval_runs/show.html.erb +204 -0
  57. data/app/views/prompt_engine/eval_sets/compare.html.erb +229 -0
  58. data/app/views/prompt_engine/eval_sets/edit.html.erb +111 -0
  59. data/app/views/prompt_engine/eval_sets/index.html.erb +63 -0
  60. data/app/views/prompt_engine/eval_sets/metrics.html.erb +371 -0
  61. data/app/views/prompt_engine/eval_sets/new.html.erb +113 -0
  62. data/app/views/prompt_engine/eval_sets/show.html.erb +235 -0
  63. data/app/views/prompt_engine/evaluations/index.html.erb +194 -0
  64. data/app/views/prompt_engine/playground/result.html.erb +58 -0
  65. data/app/views/prompt_engine/playground/show.html.erb +129 -0
  66. data/app/views/prompt_engine/playground_run_results/index.html.erb +99 -0
  67. data/app/views/prompt_engine/playground_run_results/show.html.erb +123 -0
  68. data/app/views/prompt_engine/prompts/_form.html.erb +224 -0
  69. data/app/views/prompt_engine/prompts/edit.html.erb +9 -0
  70. data/app/views/prompt_engine/prompts/index.html.erb +80 -0
  71. data/app/views/prompt_engine/prompts/new.html.erb +9 -0
  72. data/app/views/prompt_engine/prompts/show.html.erb +297 -0
  73. data/app/views/prompt_engine/settings/edit.html.erb +93 -0
  74. data/app/views/prompt_engine/shared/_form_errors.html.erb +16 -0
  75. data/app/views/prompt_engine/test_cases/edit.html.erb +72 -0
  76. data/app/views/prompt_engine/test_cases/import.html.erb +92 -0
  77. data/app/views/prompt_engine/test_cases/import_preview.html.erb +103 -0
  78. data/app/views/prompt_engine/test_cases/new.html.erb +79 -0
  79. data/app/views/prompt_engine/versions/_version_card.html.erb +56 -0
  80. data/app/views/prompt_engine/versions/compare.html.erb +82 -0
  81. data/app/views/prompt_engine/versions/index.html.erb +96 -0
  82. data/app/views/prompt_engine/versions/show.html.erb +98 -0
  83. data/config/routes.rb +61 -0
  84. data/db/migrate/20250124000001_create_eval_tables.rb +43 -0
  85. data/db/migrate/20250124000002_add_open_ai_fields_to_evals.rb +11 -0
  86. data/db/migrate/20250125000001_add_grader_fields_to_eval_sets.rb +8 -0
  87. data/db/migrate/20250723161909_create_prompts.rb +17 -0
  88. data/db/migrate/20250723184757_create_prompt_engine_versions.rb +24 -0
  89. data/db/migrate/20250723203838_create_prompt_engine_parameters.rb +20 -0
  90. data/db/migrate/20250724160623_create_prompt_engine_playground_run_results.rb +30 -0
  91. data/db/migrate/20250724165118_create_prompt_engine_settings.rb +14 -0
  92. data/lib/prompt_engine/engine.rb +25 -0
  93. data/lib/prompt_engine/version.rb +3 -0
  94. data/lib/prompt_engine.rb +33 -0
  95. data/lib/tasks/active_prompt_tasks.rake +32 -0
  96. data/lib/tasks/eval_demo.rake +149 -0
  97. metadata +293 -0
@@ -0,0 +1,182 @@
1
+ /* CSS Variables - Color Palette */
2
+ :root {
3
+ /* Neutral Grays */
4
+ --color-gray-50: #f9fafb;
5
+ --color-gray-100: #f3f4f6;
6
+ --color-gray-200: #e5e7eb;
7
+ --color-gray-300: #d1d5db;
8
+ --color-gray-400: #9ca3af;
9
+ --color-gray-500: #6b7280;
10
+ --color-gray-600: #4b5563;
11
+ --color-gray-700: #374151;
12
+ --color-gray-800: #1f2937;
13
+ --color-gray-900: #111827;
14
+
15
+ /* Primary Colors */
16
+ --color-primary-50: #eef2ff;
17
+ --color-primary-100: #e0e7ff;
18
+ --color-primary-200: #c7d2fe;
19
+ --color-primary-300: #a5b4fc;
20
+ --color-primary-400: #818cf8;
21
+ --color-primary-500: #6366f1;
22
+ --color-primary-600: #4f46e5;
23
+ --color-primary-700: #4338ca;
24
+ --color-primary-800: #3730a3;
25
+ --color-primary-900: #312e81;
26
+
27
+ /* Semantic Colors */
28
+ --color-danger: #ef4444;
29
+ --color-danger-hover: #dc2626;
30
+ --color-danger-50: #fef2f2;
31
+ --color-danger-900: #7f1d1d;
32
+ --color-success: #10b981;
33
+ --color-success-hover: #059669;
34
+ --color-success-50: #f0fdf4;
35
+ --color-success-900: #14532d;
36
+ --color-warning: #f59e0b;
37
+ --color-warning-hover: #d97706;
38
+ --color-warning-50: #fffbeb;
39
+ --color-warning-900: #78350f;
40
+
41
+ /* Typography */
42
+ --font-family-base:
43
+ -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
44
+ --font-size-xs: 0.75rem; /* 12px */
45
+ --font-size-sm: 0.875rem; /* 14px */
46
+ --font-size-base: 1rem; /* 16px */
47
+ --font-size-lg: 1.125rem; /* 18px */
48
+ --font-size-xl: 1.25rem; /* 20px */
49
+ --font-size-2xl: 1.5rem; /* 24px */
50
+ --font-size-3xl: 1.875rem; /* 30px */
51
+
52
+ --line-height-tight: 1.25;
53
+ --line-height-normal: 1.5;
54
+ --line-height-relaxed: 1.75;
55
+
56
+ /* Spacing */
57
+ --spacing-xs: 0.25rem; /* 4px */
58
+ --spacing-sm: 0.5rem; /* 8px */
59
+ --spacing-md: 1rem; /* 16px */
60
+ --spacing-lg: 1.5rem; /* 24px */
61
+ --spacing-xl: 2rem; /* 32px */
62
+ --spacing-2xl: 3rem; /* 48px */
63
+ --spacing-3xl: 4rem; /* 64px */
64
+
65
+ /* Border Radius */
66
+ --radius-sm: 0.25rem; /* 4px */
67
+ --radius-md: 0.375rem; /* 6px */
68
+ --radius-lg: 0.5rem; /* 8px */
69
+ --radius-xl: 0.75rem; /* 12px */
70
+
71
+ /* Shadows */
72
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
73
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
74
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
75
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
76
+
77
+ /* Layout */
78
+ --sidebar-width: 240px;
79
+ --header-height: 64px;
80
+
81
+ /* Transitions */
82
+ --transition-fast: 150ms ease-in-out;
83
+ --transition-base: 200ms ease-in-out;
84
+ --transition-slow: 300ms ease-in-out;
85
+ }
86
+
87
+ /* CSS Reset / Normalize */
88
+ .prompt-engine-admin * {
89
+ box-sizing: border-box;
90
+ margin: 0;
91
+ padding: 0;
92
+ }
93
+
94
+ .prompt-engine-admin {
95
+ font-family: var(--font-family-base);
96
+ font-size: var(--font-size-base);
97
+ line-height: var(--line-height-normal);
98
+ color: var(--color-gray-900);
99
+ background-color: var(--color-gray-50);
100
+ -webkit-font-smoothing: antialiased;
101
+ -moz-osx-font-smoothing: grayscale;
102
+ }
103
+
104
+ /* Typography Base Styles */
105
+ .prompt-engine-admin h1,
106
+ .prompt-engine-admin h2,
107
+ .prompt-engine-admin h3,
108
+ .prompt-engine-admin h4,
109
+ .prompt-engine-admin h5,
110
+ .prompt-engine-admin h6 {
111
+ font-weight: 600;
112
+ line-height: var(--line-height-tight);
113
+ }
114
+
115
+ .prompt-engine-admin h1 {
116
+ font-size: var(--font-size-3xl);
117
+ margin-bottom: var(--spacing-lg);
118
+ }
119
+
120
+ .prompt-engine-admin h2 {
121
+ font-size: var(--font-size-2xl);
122
+ margin-bottom: var(--spacing-md);
123
+ }
124
+
125
+ .prompt-engine-admin h3 {
126
+ font-size: var(--font-size-xl);
127
+ margin-bottom: var(--spacing-md);
128
+ }
129
+
130
+ .prompt-engine-admin p {
131
+ margin-bottom: var(--spacing-md);
132
+ }
133
+
134
+ .prompt-engine-admin a {
135
+ color: var(--color-primary-600);
136
+ text-decoration: none;
137
+ transition: color var(--transition-fast);
138
+ }
139
+
140
+ .prompt-engine-admin a:hover {
141
+ color: var(--color-primary-700);
142
+ text-decoration: underline;
143
+ }
144
+
145
+ /* Utility Classes */
146
+ .prompt-engine-admin .text-sm {
147
+ font-size: var(--font-size-sm);
148
+ }
149
+ .prompt-engine-admin .text-xs {
150
+ font-size: var(--font-size-xs);
151
+ }
152
+ .prompt-engine-admin .text-lg {
153
+ font-size: var(--font-size-lg);
154
+ }
155
+ .prompt-engine-admin .text-muted {
156
+ color: var(--color-gray-600);
157
+ }
158
+ .prompt-engine-admin .text-danger {
159
+ color: var(--color-danger);
160
+ }
161
+ .prompt-engine-admin .text-success {
162
+ color: var(--color-success);
163
+ }
164
+
165
+ .prompt-engine-admin .mt-sm {
166
+ margin-top: var(--spacing-sm);
167
+ }
168
+ .prompt-engine-admin .mt-md {
169
+ margin-top: var(--spacing-md);
170
+ }
171
+ .prompt-engine-admin .mt-lg {
172
+ margin-top: var(--spacing-lg);
173
+ }
174
+ .prompt-engine-admin .mb-sm {
175
+ margin-bottom: var(--spacing-sm);
176
+ }
177
+ .prompt-engine-admin .mb-md {
178
+ margin-bottom: var(--spacing-md);
179
+ }
180
+ .prompt-engine-admin .mb-lg {
181
+ margin-bottom: var(--spacing-lg);
182
+ }
@@ -0,0 +1,75 @@
1
+ /* Admin Layout Structure */
2
+ .admin-layout {
3
+ display: flex;
4
+ min-height: 100vh;
5
+ background-color: var(--color-gray-50);
6
+ }
7
+
8
+ /* Sidebar Container */
9
+ .admin-layout__sidebar {
10
+ width: var(--sidebar-width);
11
+ background-color: var(--color-gray-900);
12
+ color: var(--color-gray-100);
13
+ position: fixed;
14
+ top: 0;
15
+ left: 0;
16
+ bottom: 0;
17
+ overflow-y: auto;
18
+ z-index: 10;
19
+ }
20
+
21
+ /* Main Content Area */
22
+ .admin-layout__main {
23
+ flex: 1;
24
+ margin-left: var(--sidebar-width);
25
+ min-height: 100vh;
26
+ background-color: var(--color-gray-50);
27
+ }
28
+
29
+ .admin-main {
30
+ padding: var(--spacing-xl);
31
+ max-width: 1280px;
32
+ margin: 0 auto;
33
+ }
34
+
35
+ /* Page Header */
36
+ .admin-header {
37
+ display: flex;
38
+ justify-content: space-between;
39
+ align-items: center;
40
+ margin-bottom: var(--spacing-xl);
41
+ }
42
+
43
+ .admin-header h1 {
44
+ margin: 0;
45
+ font-size: var(--font-size-2xl);
46
+ font-weight: 600;
47
+ color: var(--color-gray-900);
48
+ }
49
+
50
+ .admin-header p {
51
+ margin: var(--spacing-xs) 0 0;
52
+ color: var(--color-gray-600);
53
+ }
54
+
55
+ /* Responsive Layout */
56
+ @media (max-width: 768px) {
57
+ .admin-layout__sidebar {
58
+ transform: translateX(-100%);
59
+ transition: transform var(--transition-base);
60
+ }
61
+
62
+ .admin-layout__sidebar--open {
63
+ transform: translateX(0);
64
+ }
65
+
66
+ .admin-layout__main {
67
+ margin-left: 0;
68
+ }
69
+
70
+ .admin-header {
71
+ flex-direction: column;
72
+ align-items: flex-start;
73
+ gap: var(--spacing-md);
74
+ }
75
+ }
@@ -0,0 +1,229 @@
1
+ /* Loading States */
2
+
3
+ /* Spinner */
4
+ .spinner {
5
+ display: inline-block;
6
+ width: 1.5rem;
7
+ height: 1.5rem;
8
+ border: 0.2rem solid var(--color-gray-200);
9
+ border-top-color: var(--color-primary-600);
10
+ border-radius: 50%;
11
+ animation: spin 1s linear infinite;
12
+ }
13
+
14
+ .spinner--small {
15
+ width: 1rem;
16
+ height: 1rem;
17
+ border-width: 0.15rem;
18
+ }
19
+
20
+ .spinner--large {
21
+ width: 3rem;
22
+ height: 3rem;
23
+ border-width: 0.25rem;
24
+ }
25
+
26
+ .spinner--white {
27
+ border-color: rgba(255, 255, 255, 0.3);
28
+ border-top-color: white;
29
+ }
30
+
31
+ @keyframes spin {
32
+ to { transform: rotate(360deg); }
33
+ }
34
+
35
+ /* Loading Overlay */
36
+ .loading-overlay {
37
+ position: fixed;
38
+ top: 0;
39
+ left: 0;
40
+ right: 0;
41
+ bottom: 0;
42
+ background-color: rgba(0, 0, 0, 0.5);
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ z-index: 9999;
47
+ }
48
+
49
+ .loading-overlay__content {
50
+ background: white;
51
+ padding: var(--spacing-xl);
52
+ border-radius: var(--radius-lg);
53
+ box-shadow: var(--shadow-xl);
54
+ text-align: center;
55
+ max-width: 400px;
56
+ }
57
+
58
+ .loading-overlay__spinner {
59
+ margin-bottom: var(--spacing-lg);
60
+ }
61
+
62
+ .loading-overlay__title {
63
+ font-size: var(--font-size-lg);
64
+ font-weight: 600;
65
+ color: var(--color-gray-900);
66
+ margin-bottom: var(--spacing-sm);
67
+ }
68
+
69
+ .loading-overlay__text {
70
+ color: var(--color-gray-600);
71
+ font-size: var(--font-size-sm);
72
+ }
73
+
74
+ /* Button Loading State */
75
+ .btn--loading {
76
+ position: relative;
77
+ color: transparent !important;
78
+ pointer-events: none;
79
+ }
80
+
81
+ .btn--loading::after {
82
+ content: "";
83
+ position: absolute;
84
+ width: 1rem;
85
+ height: 1rem;
86
+ top: 50%;
87
+ left: 50%;
88
+ margin-left: -0.5rem;
89
+ margin-top: -0.5rem;
90
+ border: 0.15rem solid rgba(255, 255, 255, 0.3);
91
+ border-top-color: white;
92
+ border-radius: 50%;
93
+ animation: spin 1s linear infinite;
94
+ }
95
+
96
+ .btn--secondary.btn--loading::after,
97
+ .btn--outline.btn--loading::after {
98
+ border-color: var(--color-gray-300);
99
+ border-top-color: var(--color-gray-600);
100
+ }
101
+
102
+ /* Form Loading State */
103
+ .form--loading {
104
+ position: relative;
105
+ pointer-events: none;
106
+ opacity: 0.6;
107
+ }
108
+
109
+ .form--loading::after {
110
+ content: "";
111
+ position: absolute;
112
+ top: 0;
113
+ left: 0;
114
+ right: 0;
115
+ bottom: 0;
116
+ background: rgba(255, 255, 255, 0.8);
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: center;
120
+ }
121
+
122
+ /* Card Loading State */
123
+ .card--loading {
124
+ position: relative;
125
+ min-height: 200px;
126
+ }
127
+
128
+ .card--loading .card__body {
129
+ opacity: 0.5;
130
+ }
131
+
132
+ .card--loading::after {
133
+ content: "";
134
+ position: absolute;
135
+ top: 50%;
136
+ left: 50%;
137
+ transform: translate(-50%, -50%);
138
+ width: 2rem;
139
+ height: 2rem;
140
+ border: 0.2rem solid var(--color-gray-200);
141
+ border-top-color: var(--color-primary-600);
142
+ border-radius: 50%;
143
+ animation: spin 1s linear infinite;
144
+ }
145
+
146
+ /* Skeleton Loading */
147
+ .skeleton {
148
+ background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
149
+ background-size: 200% 100%;
150
+ animation: loading 1.5s infinite;
151
+ }
152
+
153
+ .skeleton-text {
154
+ height: 1rem;
155
+ margin-bottom: var(--spacing-sm);
156
+ border-radius: var(--radius-sm);
157
+ }
158
+
159
+ .skeleton-text--lg {
160
+ height: 1.5rem;
161
+ }
162
+
163
+ .skeleton-text--sm {
164
+ height: 0.75rem;
165
+ }
166
+
167
+ @keyframes loading {
168
+ 0% {
169
+ background-position: 200% 0;
170
+ }
171
+ 100% {
172
+ background-position: -200% 0;
173
+ }
174
+ }
175
+
176
+ /* Progress Bar */
177
+ .progress {
178
+ height: 0.5rem;
179
+ background-color: var(--color-gray-200);
180
+ border-radius: var(--radius-full);
181
+ overflow: hidden;
182
+ }
183
+
184
+ .progress__bar {
185
+ height: 100%;
186
+ background-color: var(--color-primary-600);
187
+ transition: width 0.3s ease;
188
+ }
189
+
190
+ .progress--striped .progress__bar {
191
+ background-image: linear-gradient(
192
+ 45deg,
193
+ rgba(255, 255, 255, 0.15) 25%,
194
+ transparent 25%,
195
+ transparent 50%,
196
+ rgba(255, 255, 255, 0.15) 50%,
197
+ rgba(255, 255, 255, 0.15) 75%,
198
+ transparent 75%,
199
+ transparent
200
+ );
201
+ background-size: 1rem 1rem;
202
+ }
203
+
204
+ .progress--animated .progress__bar {
205
+ animation: progress-bar-stripes 1s linear infinite;
206
+ }
207
+
208
+ @keyframes progress-bar-stripes {
209
+ from {
210
+ background-position: 1rem 0;
211
+ }
212
+ to {
213
+ background-position: 0 0;
214
+ }
215
+ }
216
+
217
+ /* Pulse Animation */
218
+ .pulse {
219
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
220
+ }
221
+
222
+ @keyframes pulse {
223
+ 0%, 100% {
224
+ opacity: 1;
225
+ }
226
+ 50% {
227
+ opacity: 0.5;
228
+ }
229
+ }
@@ -0,0 +1,78 @@
1
+ /* Notifications Container */
2
+ .admin-notifications {
3
+ margin-bottom: var(--spacing-lg);
4
+ }
5
+
6
+ /* Notification Base */
7
+ .admin-notification {
8
+ padding: var(--spacing-md) var(--spacing-lg);
9
+ margin-bottom: var(--spacing-md);
10
+ background-color: var(--color-gray-50);
11
+ border: 1px solid var(--color-gray-200);
12
+ border-radius: var(--radius-md);
13
+ font-size: var(--font-size-sm);
14
+ }
15
+
16
+ /* Notification Types */
17
+ .admin-notification--notice {
18
+ border-left: 4px solid var(--color-primary-500);
19
+ background-color: var(--color-primary-50);
20
+ color: var(--color-primary-900);
21
+ }
22
+
23
+ .admin-notification--success {
24
+ border-left: 4px solid var(--color-success);
25
+ background-color: var(--color-success-50);
26
+ color: var(--color-success-900);
27
+ }
28
+
29
+ .admin-notification--alert,
30
+ .admin-notification--error {
31
+ border-left: 4px solid var(--color-danger);
32
+ background-color: var(--color-danger-50);
33
+ color: var(--color-danger-900);
34
+ }
35
+
36
+ .admin-notification--warning {
37
+ border-left: 4px solid var(--color-warning);
38
+ background-color: var(--color-warning-50);
39
+ color: var(--color-warning-900);
40
+ }
41
+
42
+ /* Alert Component */
43
+ .alert {
44
+ padding: var(--spacing-md) var(--spacing-lg);
45
+ margin-bottom: var(--spacing-md);
46
+ border-radius: var(--radius-md);
47
+ font-size: var(--font-size-sm);
48
+ border: 1px solid transparent;
49
+ }
50
+
51
+ .alert strong {
52
+ font-weight: 600;
53
+ }
54
+
55
+ .alert--success {
56
+ background-color: #dcfce7;
57
+ color: #166534;
58
+ border-color: #bbf7d0;
59
+ }
60
+
61
+ .alert--warning {
62
+ background-color: #fef3c7;
63
+ color: #92400e;
64
+ border-color: #fde68a;
65
+ }
66
+
67
+ .alert--danger {
68
+ background-color: #fee2e2;
69
+ color: #991b1b;
70
+ border-color: #fecaca;
71
+ }
72
+
73
+ .alert--info {
74
+ background-color: #dbeafe;
75
+ color: #1e40af;
76
+ border-color: #bfdbfe;
77
+ }
78
+
@@ -0,0 +1,42 @@
1
+ /* Specific overrides to ensure proper styling */
2
+
3
+ /* Sidebar link overrides */
4
+ .admin-sidebar a.admin-nav__link,
5
+ .admin-sidebar a.admin-nav__link:link,
6
+ .admin-sidebar a.admin-nav__link:visited {
7
+ color: var(--color-gray-300);
8
+ text-decoration: none;
9
+ }
10
+
11
+ .admin-sidebar a.admin-nav__link:hover {
12
+ color: white;
13
+ text-decoration: none;
14
+ }
15
+
16
+ .admin-sidebar a.admin-nav__link--active,
17
+ .admin-sidebar a.admin-nav__link--active:link,
18
+ .admin-sidebar a.admin-nav__link--active:visited {
19
+ color: white;
20
+ }
21
+
22
+ .admin-sidebar a.admin-nav__link--disabled,
23
+ .admin-sidebar a.admin-nav__link--disabled:hover {
24
+ color: var(--color-gray-500);
25
+ }
26
+
27
+ /* Button text color overrides */
28
+ a.btn--primary,
29
+ button.btn--primary,
30
+ input.btn--primary,
31
+ a.btn--primary:link,
32
+ a.btn--primary:visited {
33
+ color: white !important;
34
+ }
35
+
36
+ a.btn--danger,
37
+ button.btn--danger,
38
+ input.btn--danger,
39
+ a.btn--danger:link,
40
+ a.btn--danger:visited {
41
+ color: white !important;
42
+ }