completion-kit 0.1.0.rc1

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 (123) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +192 -0
  4. data/Rakefile +12 -0
  5. data/app/assets/config/completion_kit_manifest.js +1 -0
  6. data/app/assets/config/manifest.js +3 -0
  7. data/app/assets/images/completion_kit/logo.svg +6 -0
  8. data/app/assets/javascripts/completion_kit/evaluation_steps_controller.js +25 -0
  9. data/app/assets/stylesheets/completion_kit/application.css +2214 -0
  10. data/app/controllers/completion_kit/api/v1/base_controller.rb +29 -0
  11. data/app/controllers/completion_kit/api/v1/criteria_controller.rb +62 -0
  12. data/app/controllers/completion_kit/api/v1/datasets_controller.rb +51 -0
  13. data/app/controllers/completion_kit/api/v1/metrics_controller.rb +51 -0
  14. data/app/controllers/completion_kit/api/v1/prompts_controller.rb +64 -0
  15. data/app/controllers/completion_kit/api/v1/provider_credentials_controller.rb +51 -0
  16. data/app/controllers/completion_kit/api/v1/responses_controller.rb +32 -0
  17. data/app/controllers/completion_kit/api/v1/runs_controller.rb +71 -0
  18. data/app/controllers/completion_kit/api_reference_controller.rb +9 -0
  19. data/app/controllers/completion_kit/application_controller.rb +31 -0
  20. data/app/controllers/completion_kit/criteria_controller.rb +67 -0
  21. data/app/controllers/completion_kit/datasets_controller.rb +53 -0
  22. data/app/controllers/completion_kit/mcp_controller.rb +57 -0
  23. data/app/controllers/completion_kit/metrics_controller.rb +52 -0
  24. data/app/controllers/completion_kit/prompts_controller.rb +69 -0
  25. data/app/controllers/completion_kit/provider_credentials_controller.rb +63 -0
  26. data/app/controllers/completion_kit/responses_controller.rb +44 -0
  27. data/app/controllers/completion_kit/runs_controller.rb +131 -0
  28. data/app/helpers/completion_kit/application_helper.rb +193 -0
  29. data/app/jobs/completion_kit/application_job.rb +4 -0
  30. data/app/jobs/completion_kit/generate_job.rb +12 -0
  31. data/app/jobs/completion_kit/judge_job.rb +12 -0
  32. data/app/jobs/completion_kit/model_discovery_job.rb +29 -0
  33. data/app/mailers/completion_kit/application_mailer.rb +6 -0
  34. data/app/models/completion_kit/application_record.rb +5 -0
  35. data/app/models/completion_kit/criteria.rb +22 -0
  36. data/app/models/completion_kit/criteria_membership.rb +20 -0
  37. data/app/models/completion_kit/dataset.rb +24 -0
  38. data/app/models/completion_kit/metric.rb +97 -0
  39. data/app/models/completion_kit/model.rb +13 -0
  40. data/app/models/completion_kit/prompt.rb +99 -0
  41. data/app/models/completion_kit/provider_credential.rb +114 -0
  42. data/app/models/completion_kit/response.rb +30 -0
  43. data/app/models/completion_kit/review.rb +28 -0
  44. data/app/models/completion_kit/run.rb +253 -0
  45. data/app/models/completion_kit/run_metric.rb +6 -0
  46. data/app/models/completion_kit/suggestion.rb +8 -0
  47. data/app/services/completion_kit/anthropic_client.rb +86 -0
  48. data/app/services/completion_kit/api_config.rb +80 -0
  49. data/app/services/completion_kit/csv_processor.rb +65 -0
  50. data/app/services/completion_kit/judge_service.rb +87 -0
  51. data/app/services/completion_kit/llm_client.rb +45 -0
  52. data/app/services/completion_kit/mcp_dispatcher.rb +53 -0
  53. data/app/services/completion_kit/mcp_tools/criteria.rb +106 -0
  54. data/app/services/completion_kit/mcp_tools/datasets.rb +90 -0
  55. data/app/services/completion_kit/mcp_tools/metrics.rb +98 -0
  56. data/app/services/completion_kit/mcp_tools/prompts.rb +112 -0
  57. data/app/services/completion_kit/mcp_tools/provider_credentials.rb +97 -0
  58. data/app/services/completion_kit/mcp_tools/responses.rb +45 -0
  59. data/app/services/completion_kit/mcp_tools/runs.rb +130 -0
  60. data/app/services/completion_kit/model_discovery_service.rb +223 -0
  61. data/app/services/completion_kit/ollama_client.rb +80 -0
  62. data/app/services/completion_kit/open_ai_client.rb +71 -0
  63. data/app/services/completion_kit/open_router_client.rb +69 -0
  64. data/app/services/completion_kit/prompt_improvement_service.rb +81 -0
  65. data/app/views/completion_kit/api_reference/_example.html.erb +6 -0
  66. data/app/views/completion_kit/api_reference/index.html.erb +308 -0
  67. data/app/views/completion_kit/criteria/_form.html.erb +46 -0
  68. data/app/views/completion_kit/criteria/edit.html.erb +14 -0
  69. data/app/views/completion_kit/criteria/index.html.erb +37 -0
  70. data/app/views/completion_kit/criteria/new.html.erb +13 -0
  71. data/app/views/completion_kit/criteria/show.html.erb +37 -0
  72. data/app/views/completion_kit/datasets/_form.html.erb +29 -0
  73. data/app/views/completion_kit/datasets/edit.html.erb +13 -0
  74. data/app/views/completion_kit/datasets/index.html.erb +38 -0
  75. data/app/views/completion_kit/datasets/new.html.erb +12 -0
  76. data/app/views/completion_kit/datasets/show.html.erb +45 -0
  77. data/app/views/completion_kit/metrics/_form.html.erb +72 -0
  78. data/app/views/completion_kit/metrics/edit.html.erb +13 -0
  79. data/app/views/completion_kit/metrics/index.html.erb +34 -0
  80. data/app/views/completion_kit/metrics/new.html.erb +12 -0
  81. data/app/views/completion_kit/metrics/show.html.erb +49 -0
  82. data/app/views/completion_kit/prompts/_form.html.erb +52 -0
  83. data/app/views/completion_kit/prompts/edit.html.erb +13 -0
  84. data/app/views/completion_kit/prompts/index.html.erb +46 -0
  85. data/app/views/completion_kit/prompts/new.html.erb +12 -0
  86. data/app/views/completion_kit/prompts/show.html.erb +156 -0
  87. data/app/views/completion_kit/provider_credentials/_discovery_status.html.erb +30 -0
  88. data/app/views/completion_kit/provider_credentials/_form.html.erb +71 -0
  89. data/app/views/completion_kit/provider_credentials/edit.html.erb +12 -0
  90. data/app/views/completion_kit/provider_credentials/index.html.erb +41 -0
  91. data/app/views/completion_kit/provider_credentials/new.html.erb +12 -0
  92. data/app/views/completion_kit/responses/show.html.erb +87 -0
  93. data/app/views/completion_kit/runs/_actions.html.erb +14 -0
  94. data/app/views/completion_kit/runs/_form.html.erb +159 -0
  95. data/app/views/completion_kit/runs/_progress.html.erb +18 -0
  96. data/app/views/completion_kit/runs/_response_row.html.erb +13 -0
  97. data/app/views/completion_kit/runs/_sort_toolbar.html.erb +8 -0
  98. data/app/views/completion_kit/runs/_status_header.html.erb +15 -0
  99. data/app/views/completion_kit/runs/edit.html.erb +14 -0
  100. data/app/views/completion_kit/runs/index.html.erb +43 -0
  101. data/app/views/completion_kit/runs/new.html.erb +12 -0
  102. data/app/views/completion_kit/runs/show.html.erb +79 -0
  103. data/app/views/completion_kit/runs/suggestion.html.erb +47 -0
  104. data/app/views/layouts/completion_kit/application.html.erb +77 -0
  105. data/config/routes.rb +55 -0
  106. data/db/migrate/20260311000001_create_completion_kit_tables.rb +87 -0
  107. data/db/migrate/20260326000001_rename_criteria_to_instruction_on_metrics_and_reviews.rb +6 -0
  108. data/db/migrate/20260327000001_add_progress_to_runs.rb +6 -0
  109. data/db/migrate/20260327100001_replace_criteria_with_direct_metrics_on_runs.rb +12 -0
  110. data/db/migrate/20260328000001_add_error_message_to_runs.rb +5 -0
  111. data/db/migrate/20260329000001_create_completion_kit_models.rb +20 -0
  112. data/db/migrate/20260401170001_add_discovery_columns_to_completion_kit_provider_credentials.rb +7 -0
  113. data/db/migrate/20260403000001_add_temperature_to_completion_kit_runs.rb +5 -0
  114. data/db/migrate/20260403000002_create_completion_kit_suggestions.rb +13 -0
  115. data/db/migrate/20260403000003_add_applied_at_to_completion_kit_suggestions.rb +5 -0
  116. data/lib/completion-kit.rb +1 -0
  117. data/lib/completion_kit/engine.rb +35 -0
  118. data/lib/completion_kit/version.rb +3 -0
  119. data/lib/completion_kit.rb +55 -0
  120. data/lib/generators/completion_kit/install_generator.rb +21 -0
  121. data/lib/generators/completion_kit/templates/README +20 -0
  122. data/lib/generators/completion_kit/templates/initializer.rb +43 -0
  123. metadata +361 -0
@@ -0,0 +1,2214 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap');
2
+
3
+ .turbo-progress-bar {
4
+ background-color: var(--ck-accent);
5
+ }
6
+
7
+ :root {
8
+ --ck-bg: #080b14;
9
+ --ck-bg-strong: #0d1117;
10
+ --ck-surface: #111827;
11
+ --ck-surface-soft: #151d2e;
12
+ --ck-surface-hover: #1a2332;
13
+ --ck-line: #1e293b;
14
+ --ck-line-strong: #334155;
15
+ --ck-text: #e2e8f0;
16
+ --ck-muted: #8b9ab5;
17
+ --ck-dim: #64748b;
18
+ --ck-accent: #06b6d4;
19
+ --ck-accent-soft: rgba(6, 182, 212, 0.1);
20
+ --ck-accent-hover: #22d3ee;
21
+ --ck-success: #2dd4a8;
22
+ --ck-success-soft: rgba(45, 212, 168, 0.1);
23
+ --ck-danger: #f87171;
24
+ --ck-danger-soft: rgba(248, 113, 113, 0.1);
25
+ --ck-warning: #e0a458;
26
+ --ck-warning-soft: rgba(224, 164, 88, 0.1);
27
+ --ck-info: #06b6d4;
28
+ --ck-info-soft: rgba(6, 182, 212, 0.1);
29
+ --ck-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
30
+ --ck-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
31
+ --ck-radius: 6px;
32
+ --ck-radius-lg: 10px;
33
+ }
34
+
35
+ *,
36
+ *::before,
37
+ *::after {
38
+ box-sizing: border-box;
39
+ }
40
+
41
+ html {
42
+ font-size: 18px;
43
+ line-height: 1.5;
44
+ -webkit-font-smoothing: antialiased;
45
+ -moz-osx-font-smoothing: grayscale;
46
+ }
47
+
48
+ body.ck-app {
49
+ margin: 0;
50
+ min-height: 100vh;
51
+ display: flex;
52
+ flex-direction: column;
53
+ background: var(--ck-bg);
54
+ color: var(--ck-text);
55
+ font-family: var(--ck-sans);
56
+ font-size: 1rem;
57
+ }
58
+
59
+ body.ck-app > main {
60
+ flex: 1;
61
+ }
62
+
63
+ a {
64
+ color: inherit;
65
+ }
66
+
67
+ pre,
68
+ code {
69
+ font-family: var(--ck-mono);
70
+ }
71
+
72
+ pre {
73
+ margin: 0;
74
+ white-space: pre-wrap;
75
+ word-break: break-word;
76
+ }
77
+
78
+ code {
79
+ padding: 0.15em 0.4em;
80
+ background: var(--ck-surface);
81
+ border: 1px solid var(--ck-line);
82
+ border-radius: 3px;
83
+ font-size: 0.85em;
84
+ color: var(--ck-accent);
85
+ }
86
+
87
+ form.inline-block,
88
+ form.button_to {
89
+ display: inline-block;
90
+ margin: 0;
91
+ }
92
+
93
+ .ck-wrap {
94
+ width: 100%;
95
+ max-width: 1200px;
96
+ margin: 0 auto;
97
+ padding-left: clamp(1rem, 4vw, 2.5rem);
98
+ padding-right: clamp(1rem, 4vw, 2.5rem);
99
+ }
100
+
101
+ .ck-topbar {
102
+ position: sticky;
103
+ top: 0;
104
+ z-index: 20;
105
+ border-bottom: 1px solid var(--ck-line);
106
+ background: rgba(8, 11, 20, 0.85);
107
+ backdrop-filter: blur(16px) saturate(180%);
108
+ }
109
+
110
+ .ck-topbar__inner {
111
+ display: flex;
112
+ flex-wrap: wrap;
113
+ align-items: center;
114
+ justify-content: space-between;
115
+ gap: 0.75rem;
116
+ padding: 0.75rem 0;
117
+ }
118
+
119
+ .ck-brand {
120
+ display: inline-flex;
121
+ align-items: center;
122
+ gap: 0.5rem;
123
+ font-family: var(--ck-mono);
124
+ font-size: 1.25rem;
125
+ font-weight: 700;
126
+ letter-spacing: 0.02em;
127
+ text-decoration: none;
128
+ color: var(--ck-accent);
129
+ }
130
+
131
+ .ck-brand img {
132
+ display: block;
133
+ }
134
+
135
+ .ck-topbar__copy {
136
+ display: none;
137
+ }
138
+
139
+ .ck-nav,
140
+ .ck-actions,
141
+ .ck-toolbar,
142
+ .ck-inline,
143
+ .ck-chip-row {
144
+ display: flex;
145
+ flex-wrap: wrap;
146
+ gap: 0.35rem;
147
+ align-items: center;
148
+ }
149
+
150
+ .ck-actions {
151
+ justify-content: flex-end;
152
+ flex-shrink: 0;
153
+ }
154
+
155
+ .ck-toolbar__spacer {
156
+ flex: 1;
157
+ min-width: 1rem;
158
+ }
159
+
160
+ .ck-breadcrumb {
161
+ display: flex;
162
+ flex-wrap: wrap;
163
+ align-items: center;
164
+ gap: 0.35rem;
165
+ margin: 0 0 0.75rem;
166
+ padding: 0;
167
+ list-style: none;
168
+ font-family: var(--ck-mono);
169
+ font-size: 0.8rem;
170
+ color: var(--ck-dim);
171
+ }
172
+
173
+ .ck-breadcrumb a {
174
+ color: var(--ck-muted);
175
+ text-decoration: none;
176
+ transition: color 0.15s;
177
+ }
178
+
179
+ .ck-breadcrumb a:hover {
180
+ color: var(--ck-accent);
181
+ }
182
+
183
+ .ck-breadcrumb li + li::before {
184
+ content: '/';
185
+ margin-right: 0.35rem;
186
+ color: var(--ck-dim);
187
+ }
188
+
189
+ .ck-main {
190
+ padding: 1.75rem 0 4rem;
191
+ }
192
+
193
+ .ck-page-header {
194
+ display: flex;
195
+ align-items: flex-start;
196
+ justify-content: space-between;
197
+ gap: 1rem;
198
+ margin-bottom: 2rem;
199
+ }
200
+
201
+ .ck-step,
202
+ .ck-kicker,
203
+ .ck-minor-label,
204
+ .ck-label {
205
+ margin: 0;
206
+ font-family: var(--ck-mono);
207
+ font-size: 0.8rem;
208
+ font-weight: 500;
209
+ letter-spacing: 0.08em;
210
+ text-transform: uppercase;
211
+ color: var(--ck-dim);
212
+ }
213
+
214
+ .ck-title,
215
+ .ck-section-title,
216
+ .ck-card-title,
217
+ .ck-item-title {
218
+ margin: 0;
219
+ font-family: var(--ck-mono);
220
+ font-weight: 700;
221
+ letter-spacing: -0.02em;
222
+ color: var(--ck-text);
223
+ }
224
+
225
+ .ck-title {
226
+ font-size: clamp(1.8rem, 3.5vw, 2.5rem);
227
+ line-height: 1.15;
228
+ margin-right: 0.75rem;
229
+ }
230
+
231
+ .ck-section-title {
232
+ font-size: 1.35rem;
233
+ }
234
+
235
+ .ck-card-title,
236
+ .ck-item-title {
237
+ font-size: 1.15rem;
238
+ }
239
+
240
+ .ck-lead,
241
+ .ck-copy,
242
+ .ck-meta-copy,
243
+ .ck-note,
244
+ .ck-hint {
245
+ margin: 0.35rem 0 0;
246
+ color: var(--ck-muted);
247
+ font-family: var(--ck-sans);
248
+ }
249
+
250
+ .ck-lead {
251
+ max-width: 56rem;
252
+ font-size: 1.05rem;
253
+ }
254
+
255
+ .ck-copy,
256
+ .ck-meta-copy,
257
+ .ck-note,
258
+ .ck-hint {
259
+ font-size: 0.95rem;
260
+ line-height: 1.6;
261
+ }
262
+
263
+ .ck-note {
264
+ margin-top: 0.5rem;
265
+ }
266
+
267
+ .ck-link {
268
+ text-decoration: none;
269
+ color: var(--ck-text);
270
+ transition: color 0.15s;
271
+ }
272
+
273
+ .ck-link:hover {
274
+ color: var(--ck-accent);
275
+ }
276
+
277
+ .ck-list {
278
+ display: grid;
279
+ gap: 0.5rem;
280
+ }
281
+
282
+ .ck-list--compact {
283
+ gap: 0.35rem;
284
+ }
285
+
286
+ .ck-grid {
287
+ display: grid;
288
+ gap: 0.75rem;
289
+ }
290
+
291
+ .ck-grid--sidebar {
292
+ grid-template-columns: minmax(0, 1.6fr) minmax(16rem, 0.8fr);
293
+ }
294
+
295
+ .ck-grid--cards,
296
+ .ck-grid--two {
297
+ grid-template-columns: repeat(2, minmax(0, 1fr));
298
+ }
299
+
300
+ .ck-grid--spaced,
301
+ .ck-card--spaced,
302
+ .ck-empty--spaced {
303
+ margin-top: 2rem;
304
+ }
305
+
306
+ .ck-card,
307
+ .ck-result-card,
308
+ .ck-empty {
309
+ border: 1px solid var(--ck-line);
310
+ border-radius: var(--ck-radius-lg);
311
+ background: var(--ck-surface);
312
+ }
313
+
314
+ .ck-card,
315
+ .ck-result-card {
316
+ padding: 1.5rem;
317
+ }
318
+
319
+ .ck-empty {
320
+ display: flex;
321
+ align-items: center;
322
+ min-height: 3.25rem;
323
+ padding: 0.85rem 1.15rem;
324
+ color: var(--ck-muted);
325
+ font-family: var(--ck-mono);
326
+ font-size: 0.95rem;
327
+ border-style: dashed;
328
+ }
329
+
330
+ .ck-split {
331
+ display: flex;
332
+ flex-wrap: wrap;
333
+ align-items: flex-start;
334
+ justify-content: space-between;
335
+ gap: 0.75rem;
336
+ }
337
+
338
+ .ck-split--tight {
339
+ align-items: center;
340
+ margin-bottom: 0.75rem;
341
+ }
342
+
343
+ .ck-stack {
344
+ display: grid;
345
+ gap: 1.5rem;
346
+ }
347
+
348
+ .ck-chip,
349
+ .ck-badge {
350
+ display: inline-flex;
351
+ align-items: center;
352
+ gap: 0.3rem;
353
+ padding: 0.2rem 0.5rem;
354
+ border-radius: 4px;
355
+ font-family: var(--ck-mono);
356
+ font-size: 0.78rem;
357
+ font-weight: 500;
358
+ letter-spacing: 0.03em;
359
+ text-transform: uppercase;
360
+ }
361
+
362
+ .ck-chip {
363
+ background: var(--ck-surface-soft);
364
+ border: 1px solid var(--ck-line);
365
+ color: var(--ck-muted);
366
+ }
367
+
368
+ .ck-chip--publish {
369
+ opacity: 0;
370
+ cursor: pointer;
371
+ transition: opacity 0.15s, border-color 0.15s, color 0.15s;
372
+ }
373
+ tr:hover .ck-chip--publish {
374
+ opacity: 0.5;
375
+ }
376
+ .ck-chip--publish:hover {
377
+ opacity: 1 !important;
378
+ border-color: var(--ck-accent);
379
+ color: var(--ck-accent);
380
+ }
381
+
382
+ .ck-chip--soft {
383
+ background: var(--ck-accent-soft);
384
+ border-color: rgba(6, 182, 212, 0.2);
385
+ color: var(--ck-accent);
386
+ }
387
+
388
+ .ck-badge--high {
389
+ background: var(--ck-success-soft);
390
+ border: 1px solid rgba(34, 197, 94, 0.25);
391
+ color: var(--ck-success);
392
+ }
393
+
394
+ .ck-badge--medium {
395
+ background: var(--ck-warning-soft);
396
+ border: 1px solid rgba(245, 158, 11, 0.25);
397
+ color: var(--ck-warning);
398
+ }
399
+
400
+ .ck-badge--low {
401
+ background: var(--ck-danger-soft);
402
+ border: 1px solid rgba(239, 68, 68, 0.25);
403
+ color: var(--ck-danger);
404
+ }
405
+
406
+ .ck-badge--pending {
407
+ background: var(--ck-surface-soft);
408
+ border: 1px solid var(--ck-line);
409
+ color: var(--ck-dim);
410
+ }
411
+
412
+ .ck-badge--running {
413
+ background: var(--ck-info-soft);
414
+ border: 1px solid rgba(59, 130, 246, 0.25);
415
+ color: var(--ck-info);
416
+ animation: ck-pulse 2s ease-in-out infinite;
417
+ }
418
+
419
+ @keyframes ck-pulse {
420
+ 0%, 100% { opacity: 1; }
421
+ 50% { opacity: 0.6; }
422
+ }
423
+
424
+ .ck-button {
425
+ display: inline-flex;
426
+ align-items: center;
427
+ justify-content: center;
428
+ min-height: 2rem;
429
+ padding: 0.4rem 0.75rem;
430
+ border: 1px solid transparent;
431
+ border-radius: var(--ck-radius);
432
+ text-decoration: none;
433
+ font-family: var(--ck-mono);
434
+ font-size: 0.85rem;
435
+ font-weight: 500;
436
+ letter-spacing: 0.04em;
437
+ text-transform: uppercase;
438
+ line-height: 1;
439
+ cursor: pointer;
440
+ transition: all 0.15s ease;
441
+ }
442
+
443
+ .ck-button:hover {
444
+ transform: translateY(-1px);
445
+ }
446
+
447
+ .ck-button--primary {
448
+ background: var(--ck-accent);
449
+ color: #080b14;
450
+ }
451
+
452
+ .ck-button--primary:hover {
453
+ background: var(--ck-accent-hover);
454
+ box-shadow: 0 0 20px rgba(6, 182, 212, 0.25);
455
+ }
456
+
457
+ .ck-button:disabled {
458
+ opacity: 0.35;
459
+ cursor: not-allowed;
460
+ transform: none;
461
+ }
462
+
463
+ .ck-button:disabled:hover {
464
+ transform: none;
465
+ box-shadow: none;
466
+ }
467
+
468
+ .ck-button--secondary {
469
+ background: transparent;
470
+ border-color: var(--ck-line-strong);
471
+ color: var(--ck-muted);
472
+ }
473
+
474
+ .ck-button--secondary:hover {
475
+ border-color: var(--ck-accent);
476
+ color: var(--ck-accent);
477
+ }
478
+
479
+ .ck-button--success {
480
+ background: transparent;
481
+ border-color: var(--ck-line-strong);
482
+ color: var(--ck-muted);
483
+ }
484
+
485
+ .ck-button--success:hover {
486
+ border-color: var(--ck-accent);
487
+ color: var(--ck-accent);
488
+ }
489
+
490
+ .ck-button--danger {
491
+ background: transparent;
492
+ border-color: var(--ck-line-strong);
493
+ color: var(--ck-muted);
494
+ }
495
+
496
+ .ck-button--danger:hover {
497
+ background: var(--ck-danger-soft);
498
+ border-color: rgba(239, 68, 68, 0.4);
499
+ color: var(--ck-danger);
500
+ }
501
+
502
+ .ck-button--ghost {
503
+ background: transparent;
504
+ border-color: transparent;
505
+ color: var(--ck-dim);
506
+ padding: 0.35rem 0.65rem;
507
+ }
508
+
509
+ .ck-button--ghost:hover {
510
+ color: var(--ck-muted);
511
+ background: var(--ck-surface);
512
+ }
513
+
514
+ .ck-login {
515
+ flex: 1;
516
+ display: flex;
517
+ align-items: center;
518
+ justify-content: center;
519
+ padding: 2rem;
520
+ }
521
+
522
+ .ck-login__card {
523
+ background: var(--ck-surface);
524
+ border: 1px solid var(--ck-line);
525
+ border-radius: var(--ck-radius-lg);
526
+ padding: 2.5rem;
527
+ width: 100%;
528
+ max-width: 380px;
529
+ }
530
+
531
+ .ck-login__brand {
532
+ font-family: var(--ck-mono);
533
+ font-size: 1.1rem;
534
+ font-weight: 700;
535
+ color: var(--ck-accent);
536
+ text-transform: uppercase;
537
+ letter-spacing: 0.04em;
538
+ text-align: center;
539
+ margin: 0 0 2rem;
540
+ }
541
+
542
+ .ck-login__form {
543
+ display: flex;
544
+ flex-direction: column;
545
+ gap: 1rem;
546
+ }
547
+
548
+ .ck-login__submit {
549
+ width: 100%;
550
+ margin-top: 0.5rem;
551
+ }
552
+
553
+ .ck-provider-list {
554
+ display: flex;
555
+ flex-direction: column;
556
+ gap: 0.5rem;
557
+ }
558
+
559
+ .ck-provider-card {
560
+ display: block;
561
+ background: var(--ck-surface);
562
+ border: 1px solid var(--ck-line);
563
+ border-radius: var(--ck-radius-lg);
564
+ text-decoration: none;
565
+ color: inherit;
566
+ transition: border-color 0.15s, background 0.15s;
567
+ overflow: hidden;
568
+ }
569
+
570
+ .ck-provider-card:hover {
571
+ border-color: var(--ck-line-strong);
572
+ background: var(--ck-surface-hover);
573
+ }
574
+
575
+ .ck-provider-card__header {
576
+ display: flex;
577
+ align-items: baseline;
578
+ gap: 0.75rem;
579
+ padding: 0.85rem 1rem 0.35rem;
580
+ }
581
+
582
+ .ck-provider-card__name {
583
+ font-family: var(--ck-mono);
584
+ font-weight: 700;
585
+ font-size: 0.95rem;
586
+ color: var(--ck-text);
587
+ }
588
+
589
+ .ck-provider-card__key {
590
+ font-family: var(--ck-mono);
591
+ font-size: 0.7rem;
592
+ color: var(--ck-dim);
593
+ letter-spacing: 0.02em;
594
+ }
595
+
596
+ .ck-provider-card__meta {
597
+ display: flex;
598
+ flex-wrap: wrap;
599
+ gap: 0.35rem 1rem;
600
+ padding: 0 1rem 0.75rem;
601
+ font-size: 0.75rem;
602
+ color: var(--ck-muted);
603
+ }
604
+
605
+ .ck-form-card__models {
606
+ margin-top: 0.75rem;
607
+ padding: 0.75rem 1rem;
608
+ max-width: 36rem;
609
+ }
610
+
611
+ .ck-form-card__footer-header {
612
+ display: flex;
613
+ align-items: center;
614
+ justify-content: space-between;
615
+ gap: 0.5rem;
616
+ }
617
+
618
+ .ck-form-card__footer-header > div:first-child {
619
+ flex: 1;
620
+ min-width: 0;
621
+ }
622
+
623
+ .ck-form-card__footer-header .ck-icon-btn {
624
+ flex-shrink: 0;
625
+ }
626
+
627
+ .ck-form-card__models .ck-discovery-bar {
628
+ padding: 0 0 0.25rem;
629
+ border-top: none;
630
+ background: none;
631
+ }
632
+
633
+ .ck-discovery-bar {
634
+ padding: 0.4rem 1rem 0.5rem;
635
+ font-size: 0.72rem;
636
+ color: var(--ck-muted);
637
+ border-top: 1px solid var(--ck-line);
638
+ }
639
+
640
+ .ck-field .ck-discovery-bar {
641
+ padding: 0.35rem 0;
642
+ border-top: none;
643
+ }
644
+
645
+ .ck-discovery-bar__label {
646
+ margin-bottom: 0.25rem;
647
+ font-family: var(--ck-mono);
648
+ }
649
+
650
+ .ck-discovery-bar__track {
651
+ height: 4px;
652
+ background: var(--ck-surface);
653
+ border-radius: 2px;
654
+ overflow: hidden;
655
+ }
656
+
657
+ .ck-discovery-bar__fill {
658
+ height: 100%;
659
+ background: var(--ck-accent);
660
+ border-radius: 2px;
661
+ transition: width 0.3s ease;
662
+ }
663
+
664
+ .ck-discovery-bar__fill--indeterminate {
665
+ width: 30%;
666
+ animation: ck-indeterminate 1.5s infinite ease-in-out;
667
+ }
668
+
669
+ @keyframes ck-indeterminate {
670
+ 0% { transform: translateX(-100%); }
671
+ 100% { transform: translateX(400%); }
672
+ }
673
+
674
+ .ck-discovery-bar--failed .ck-discovery-bar__label {
675
+ color: var(--ck-danger);
676
+ }
677
+
678
+ .ck-discovery-bar--completed .ck-discovery-bar__label {
679
+ color: var(--ck-text);
680
+ }
681
+
682
+ .ck-model-list-details summary {
683
+ list-style: none;
684
+ }
685
+
686
+ .ck-model-list-details summary::before {
687
+ content: '▸ ';
688
+ color: var(--ck-dim);
689
+ }
690
+
691
+ .ck-model-list-details[open] summary::before {
692
+ content: '▾ ';
693
+ }
694
+
695
+ .ck-model-list {
696
+ display: flex;
697
+ flex-wrap: wrap;
698
+ gap: 0.3rem;
699
+ margin-top: 0.5rem;
700
+ max-height: 240px;
701
+ overflow-y: auto;
702
+ }
703
+
704
+ .ck-model-list__item {
705
+ display: inline-flex;
706
+ align-items: baseline;
707
+ gap: 0.35rem;
708
+ padding: 0.2rem 0.5rem;
709
+ font-family: var(--ck-mono);
710
+ font-size: 0.7rem;
711
+ color: var(--ck-muted);
712
+ background: var(--ck-surface-soft);
713
+ border: 1px solid var(--ck-line);
714
+ border-radius: 3px;
715
+ }
716
+
717
+ .ck-model-list__badge {
718
+ font-size: 0.6rem;
719
+ color: var(--ck-dim);
720
+ text-transform: uppercase;
721
+ letter-spacing: 0.05em;
722
+ }
723
+
724
+ .ck-button--warning {
725
+ background: transparent;
726
+ border-color: rgba(245, 158, 11, 0.4);
727
+ color: var(--ck-warning);
728
+ }
729
+
730
+ .ck-button--warning:hover {
731
+ background: var(--ck-warning-soft);
732
+ border-color: var(--ck-warning);
733
+ }
734
+
735
+ .ck-button--info {
736
+ background: transparent;
737
+ border-color: rgba(59, 130, 246, 0.4);
738
+ color: var(--ck-info);
739
+ }
740
+
741
+ .ck-button--info:hover {
742
+ background: var(--ck-info-soft);
743
+ border-color: var(--ck-info);
744
+ }
745
+
746
+ .ck-code,
747
+ .ck-note-box {
748
+ margin-top: 0.5rem;
749
+ border-radius: var(--ck-radius);
750
+ padding: 0.85rem;
751
+ font-size: 0.82rem;
752
+ line-height: 1.65;
753
+ }
754
+
755
+ .ck-code {
756
+ font-family: var(--ck-mono);
757
+ background: var(--ck-bg);
758
+ border: 1px solid var(--ck-line);
759
+ color: var(--ck-text);
760
+ font-size: 0.9rem;
761
+ }
762
+
763
+ .ck-code--dark {
764
+ background: #020409;
765
+ border-color: var(--ck-line);
766
+ color: var(--ck-accent);
767
+ }
768
+
769
+ .ck-note-box {
770
+ background: var(--ck-surface-soft);
771
+ border: 1px solid var(--ck-line);
772
+ color: var(--ck-muted);
773
+ font-family: var(--ck-sans);
774
+ }
775
+
776
+ .ck-note-box--strong {
777
+ background: var(--ck-warning-soft);
778
+ border-color: rgba(245, 158, 11, 0.25);
779
+ color: var(--ck-warning);
780
+ }
781
+
782
+ .ck-score {
783
+ margin: 0.25rem 0 0;
784
+ font-family: var(--ck-mono);
785
+ font-size: 2rem;
786
+ font-weight: 700;
787
+ letter-spacing: -0.04em;
788
+ color: var(--ck-accent);
789
+ }
790
+
791
+ .ck-form-card {
792
+ display: grid;
793
+ gap: 1rem;
794
+ max-width: 36rem;
795
+ }
796
+
797
+ .ck-field-hint {
798
+ font-family: var(--ck-sans);
799
+ font-size: 0.8rem;
800
+ line-height: 1.4;
801
+ margin: 0;
802
+ color: var(--ck-muted);
803
+ }
804
+
805
+ .ck-field--info .ck-input {
806
+ border-color: var(--ck-accent);
807
+ }
808
+
809
+ .ck-field--info .ck-field-hint {
810
+ color: var(--ck-accent);
811
+ }
812
+
813
+ .ck-field--warn .ck-input {
814
+ border-color: var(--ck-warning);
815
+ }
816
+
817
+ .ck-field--warn .ck-field-hint {
818
+ color: var(--ck-warning);
819
+ }
820
+
821
+ .ck-field--error .ck-input {
822
+ border-color: var(--ck-danger);
823
+ }
824
+
825
+ .ck-field--error .ck-field-hint {
826
+ color: var(--ck-danger);
827
+ }
828
+
829
+ .ck-run-config {
830
+ display: grid;
831
+ gap: 0;
832
+ max-width: 32rem;
833
+ border: 1px solid var(--ck-line);
834
+ border-radius: var(--ck-radius-lg);
835
+ background: var(--ck-surface);
836
+ overflow: hidden;
837
+ }
838
+
839
+ .ck-run-config__row {
840
+ display: flex;
841
+ align-items: center;
842
+ gap: 0.75rem;
843
+ padding: 0.65rem 1rem;
844
+ min-height: 2.75rem;
845
+ font-family: var(--ck-sans);
846
+ font-size: 0.88rem;
847
+ }
848
+
849
+ .ck-run-config__row + .ck-run-config__row {
850
+ border-top: 1px solid var(--ck-line);
851
+ }
852
+
853
+ .ck-run-config__key {
854
+ flex-shrink: 0;
855
+ width: 5rem;
856
+ font-family: var(--ck-mono);
857
+ font-size: 0.72rem;
858
+ font-weight: 500;
859
+ letter-spacing: 0.06em;
860
+ text-transform: uppercase;
861
+ color: var(--ck-dim);
862
+ }
863
+
864
+ .ck-run-config__none {
865
+ color: var(--ck-dim);
866
+ }
867
+
868
+ .ck-run-config__warn {
869
+ color: var(--ck-warning);
870
+ font-size: 0.82rem;
871
+ }
872
+
873
+ .ck-run-config__note {
874
+ border-top: 1px solid var(--ck-line);
875
+ padding: 0.55rem 1rem;
876
+ min-height: 2.75rem;
877
+ display: flex;
878
+ align-items: center;
879
+ font-family: var(--ck-sans);
880
+ font-size: 0.82rem;
881
+ color: var(--ck-accent);
882
+ background: var(--ck-accent-soft);
883
+ }
884
+
885
+ .ck-status-indicator {
886
+ display: flex;
887
+ align-items: center;
888
+ gap: 0.75rem;
889
+ margin-bottom: 1.25rem;
890
+ }
891
+
892
+ .ck-field {
893
+ display: grid;
894
+ gap: 0.4rem;
895
+ }
896
+
897
+ .ck-field--spacious {
898
+ margin-top: 0.3rem;
899
+ }
900
+
901
+ .ck-field--tight {
902
+ gap: 0.3rem;
903
+ }
904
+
905
+ .ck-input {
906
+ width: 100%;
907
+ padding: 0.65rem 0.85rem;
908
+ border: 1px solid var(--ck-line-strong);
909
+ border-radius: var(--ck-radius);
910
+ background: var(--ck-bg);
911
+ color: var(--ck-text);
912
+ font-family: var(--ck-sans);
913
+ font-size: 0.95rem;
914
+ transition: border-color 0.15s, box-shadow 0.15s;
915
+ }
916
+
917
+ .ck-input:focus {
918
+ outline: none;
919
+ border-color: var(--ck-accent);
920
+ box-shadow: 0 0 0 3px var(--ck-accent-soft);
921
+ }
922
+
923
+ .ck-input::placeholder {
924
+ color: var(--ck-dim);
925
+ }
926
+
927
+ .ck-input--area {
928
+ min-height: 10rem;
929
+ resize: vertical;
930
+ }
931
+
932
+ .ck-input--code {
933
+ font-family: var(--ck-mono);
934
+ font-size: 0.9rem;
935
+ }
936
+
937
+ .ck-checkbox {
938
+ width: 1rem;
939
+ height: 1rem;
940
+ accent-color: var(--ck-accent);
941
+ }
942
+
943
+ .ck-section-title {
944
+ font-size: 1.05rem;
945
+ font-weight: 600;
946
+ color: var(--ck-text);
947
+ }
948
+
949
+ .ck-rubric-builder,
950
+ .ck-rubric-display {
951
+ display: grid;
952
+ gap: 0.5rem;
953
+ margin-top: 0.75rem;
954
+ }
955
+
956
+ .ck-rubric-row {
957
+ display: grid;
958
+ grid-template-columns: 5.5rem minmax(0, 1fr);
959
+ gap: 0.85rem;
960
+ align-items: flex-start;
961
+ padding: 0.85rem;
962
+ border: 1px solid var(--ck-line);
963
+ border-radius: var(--ck-radius);
964
+ background: var(--ck-surface-soft);
965
+ }
966
+
967
+ .ck-rubric-row--display {
968
+ background: var(--ck-bg-strong);
969
+ }
970
+
971
+ .ck-rubric-row__stars {
972
+ display: flex;
973
+ align-items: center;
974
+ gap: 1px;
975
+ padding-top: 0.5rem;
976
+ }
977
+
978
+ .ck-rubric-row__fields {
979
+ display: grid;
980
+ gap: 0.6rem;
981
+ }
982
+
983
+ .ck-star {
984
+ stroke-width: 1.75;
985
+ }
986
+
987
+ .ck-star--filled {
988
+ fill: var(--ck-accent);
989
+ stroke: var(--ck-accent);
990
+ }
991
+
992
+ .ck-star--empty {
993
+ fill: none;
994
+ stroke: var(--ck-dim);
995
+ }
996
+
997
+ .ck-step-row {
998
+ display: flex;
999
+ gap: 0.5rem;
1000
+ align-items: center;
1001
+ margin-bottom: 0.4rem;
1002
+ }
1003
+
1004
+ .ck-step-row .ck-input {
1005
+ flex: 1;
1006
+ }
1007
+
1008
+ .ck-icon-btn {
1009
+ background: none;
1010
+ border: 1px solid transparent;
1011
+ border-radius: var(--ck-radius);
1012
+ padding: 0.375rem;
1013
+ cursor: pointer;
1014
+ display: flex;
1015
+ align-items: center;
1016
+ justify-content: center;
1017
+ color: var(--ck-dim);
1018
+ transition: all 0.15s;
1019
+ }
1020
+
1021
+ .ck-icon-btn svg {
1022
+ width: 16px;
1023
+ height: 16px;
1024
+ }
1025
+
1026
+ .ck-select-with-action {
1027
+ display: flex;
1028
+ gap: 0.5rem;
1029
+ align-items: center;
1030
+ }
1031
+
1032
+ .ck-select-with-action .ck-input {
1033
+ flex: 1;
1034
+ }
1035
+
1036
+ .ck-icon-btn:hover {
1037
+ background: rgba(255, 255, 255, 0.05);
1038
+ border-color: var(--ck-line-strong);
1039
+ color: var(--ck-danger);
1040
+ }
1041
+
1042
+ .ck-icon-btn--spinning svg {
1043
+ animation: ck-spin 0.8s linear infinite;
1044
+ }
1045
+
1046
+ .ck-icon-btn--spinning {
1047
+ pointer-events: none;
1048
+ color: var(--ck-accent);
1049
+ }
1050
+
1051
+ @keyframes ck-spin {
1052
+ to { transform: rotate(360deg); }
1053
+ }
1054
+
1055
+ .ck-add-btn {
1056
+ display: inline-flex;
1057
+ align-items: center;
1058
+ gap: 0.4rem;
1059
+ color: var(--ck-muted);
1060
+ font-size: 0.85rem;
1061
+ cursor: pointer;
1062
+ padding: 0.25rem 0;
1063
+ margin-top: 0.25rem;
1064
+ background: none;
1065
+ border: none;
1066
+ transition: color 0.15s;
1067
+ }
1068
+
1069
+ .ck-add-btn:hover {
1070
+ color: var(--ck-text);
1071
+ }
1072
+
1073
+ .ck-step-list {
1074
+ padding-left: 1.5rem;
1075
+ display: grid;
1076
+ gap: 0.4rem;
1077
+ }
1078
+
1079
+ .ck-step-list li {
1080
+ color: var(--ck-text);
1081
+ line-height: 1.5;
1082
+ }
1083
+
1084
+ .ck-filter-grid {
1085
+ display: grid;
1086
+ gap: 0.75rem;
1087
+ }
1088
+
1089
+ .ck-item {
1090
+ display: flex;
1091
+ flex-wrap: wrap;
1092
+ align-items: center;
1093
+ justify-content: space-between;
1094
+ gap: 0.75rem;
1095
+ padding: 0.75rem 0.85rem;
1096
+ border: 1px solid var(--ck-line);
1097
+ border-radius: var(--ck-radius);
1098
+ background: var(--ck-surface-soft);
1099
+ transition: border-color 0.15s;
1100
+ }
1101
+
1102
+ .ck-item:hover {
1103
+ border-color: var(--ck-line-strong);
1104
+ }
1105
+
1106
+ .ck-stat-list {
1107
+ display: grid;
1108
+ gap: 0.5rem;
1109
+ margin: 0.75rem 0 0;
1110
+ }
1111
+
1112
+ .ck-stat-row {
1113
+ display: flex;
1114
+ align-items: center;
1115
+ justify-content: space-between;
1116
+ gap: 1rem;
1117
+ padding-bottom: 0.5rem;
1118
+ border-bottom: 1px solid var(--ck-line);
1119
+ font-family: var(--ck-mono);
1120
+ font-size: 0.9rem;
1121
+ color: var(--ck-muted);
1122
+ }
1123
+
1124
+ .ck-stat-row:last-child {
1125
+ padding-bottom: 0;
1126
+ border-bottom: 0;
1127
+ }
1128
+
1129
+ .ck-stat-row dd {
1130
+ margin: 0;
1131
+ font-weight: 700;
1132
+ color: var(--ck-text);
1133
+ }
1134
+
1135
+ .ck-flash {
1136
+ margin-bottom: 1rem;
1137
+ padding: 0.75rem 1rem;
1138
+ border-radius: var(--ck-radius);
1139
+ border: 1px solid transparent;
1140
+ font-family: var(--ck-sans);
1141
+ font-size: 0.95rem;
1142
+ }
1143
+
1144
+ .ck-flash--notice {
1145
+ border-color: rgba(34, 197, 94, 0.3);
1146
+ background: var(--ck-success-soft);
1147
+ color: var(--ck-success);
1148
+ }
1149
+
1150
+ .ck-flash--alert {
1151
+ border-color: rgba(239, 68, 68, 0.3);
1152
+ background: var(--ck-danger-soft);
1153
+ color: var(--ck-danger);
1154
+ }
1155
+
1156
+ .ck-flash__title {
1157
+ margin: 0;
1158
+ font-weight: 700;
1159
+ }
1160
+
1161
+ .ck-error-list {
1162
+ margin: 0.5rem 0 0;
1163
+ padding-left: 1.25rem;
1164
+ }
1165
+
1166
+ select.ck-input {
1167
+ appearance: none;
1168
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2364748b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
1169
+ background-repeat: no-repeat;
1170
+ background-position: right 0.75rem center;
1171
+ padding-right: 2rem;
1172
+ }
1173
+
1174
+ .ck-results-table {
1175
+ width: 100%;
1176
+ border-collapse: separate;
1177
+ border-spacing: 0;
1178
+ border: 1px solid var(--ck-line);
1179
+ border-radius: var(--ck-radius-lg);
1180
+ overflow: hidden;
1181
+ font-size: 0.95rem;
1182
+ }
1183
+
1184
+ .ck-results-table th,
1185
+ .ck-results-table td {
1186
+ padding: 0.75rem 1rem;
1187
+ text-align: left;
1188
+ }
1189
+
1190
+ .ck-results-table thead th {
1191
+ background: var(--ck-surface-soft);
1192
+ border-bottom: 1px solid var(--ck-line);
1193
+ font-family: var(--ck-mono);
1194
+ font-size: 0.8rem;
1195
+ font-weight: 500;
1196
+ letter-spacing: 0.08em;
1197
+ text-transform: uppercase;
1198
+ color: var(--ck-dim);
1199
+ }
1200
+
1201
+ .ck-results-table tbody tr {
1202
+ border-bottom: 1px solid var(--ck-line);
1203
+ background: var(--ck-surface);
1204
+ transition: background 0.15s;
1205
+ }
1206
+
1207
+ .ck-results-table tbody tr:last-child {
1208
+ border-bottom: none;
1209
+ }
1210
+
1211
+ .ck-results-table tbody tr:hover {
1212
+ background: var(--ck-surface-hover);
1213
+ }
1214
+
1215
+ .ck-results-table td {
1216
+ color: var(--ck-muted);
1217
+ }
1218
+
1219
+ .ck-results-table td strong {
1220
+ color: var(--ck-text);
1221
+ font-family: var(--ck-mono);
1222
+ font-weight: 600;
1223
+ }
1224
+
1225
+ .ck-results-table__arrow {
1226
+ text-align: right;
1227
+ color: var(--ck-dim);
1228
+ font-size: 1.1rem;
1229
+ }
1230
+
1231
+ .ck-details {
1232
+ margin-top: 1.5rem;
1233
+ border: 1px solid var(--ck-line);
1234
+ border-radius: var(--ck-radius-lg);
1235
+ background: var(--ck-surface);
1236
+ overflow: hidden;
1237
+ }
1238
+
1239
+ .ck-details__summary {
1240
+ display: flex;
1241
+ align-items: center;
1242
+ min-height: 3.25rem;
1243
+ padding: 0.85rem 1.15rem;
1244
+ font-family: var(--ck-mono);
1245
+ font-size: 0.85rem;
1246
+ font-weight: 500;
1247
+ letter-spacing: 0.04em;
1248
+ text-transform: uppercase;
1249
+ color: var(--ck-muted);
1250
+ cursor: pointer;
1251
+ transition: color 0.15s;
1252
+ list-style: none;
1253
+ }
1254
+
1255
+ .ck-details__summary::-webkit-details-marker {
1256
+ display: none;
1257
+ }
1258
+
1259
+ .ck-details__summary::before {
1260
+ content: '+ ';
1261
+ color: var(--ck-dim);
1262
+ }
1263
+
1264
+ .ck-details[open] > .ck-details__summary::before {
1265
+ content: '- ';
1266
+ }
1267
+
1268
+ .ck-details__summary:hover {
1269
+ color: var(--ck-accent);
1270
+ }
1271
+
1272
+ .ck-details .ck-code {
1273
+ margin: 0;
1274
+ border-radius: 0;
1275
+ border: none;
1276
+ border-top: 1px solid var(--ck-line);
1277
+ }
1278
+
1279
+
1280
+ .ck-response-list {
1281
+ display: grid;
1282
+ gap: 0.75rem;
1283
+ margin-top: 1.5rem;
1284
+ }
1285
+
1286
+ .ck-response-card {
1287
+ border: 1px solid var(--ck-line);
1288
+ border-radius: var(--ck-radius-lg);
1289
+ background: var(--ck-surface);
1290
+ padding: 1.5rem;
1291
+ transition: border-color 0.15s;
1292
+ }
1293
+
1294
+ .ck-response-card:hover {
1295
+ border-color: var(--ck-line-strong);
1296
+ }
1297
+
1298
+ .ck-response-card--low {
1299
+ border-color: rgba(239, 68, 68, 0.25);
1300
+ }
1301
+
1302
+ .ck-response-card--low:hover {
1303
+ border-color: rgba(239, 68, 68, 0.4);
1304
+ }
1305
+
1306
+ .ck-response-card__header {
1307
+ display: flex;
1308
+ align-items: center;
1309
+ justify-content: space-between;
1310
+ margin-bottom: 1rem;
1311
+ }
1312
+
1313
+ .ck-response-card__body {
1314
+ display: grid;
1315
+ gap: 1rem;
1316
+ }
1317
+
1318
+ .ck-metric-bar {
1319
+ display: flex;
1320
+ flex-wrap: wrap;
1321
+ gap: 0.5rem;
1322
+ margin-top: 1rem;
1323
+ padding-top: 1rem;
1324
+ border-top: 1px solid var(--ck-line);
1325
+ }
1326
+
1327
+ .ck-metric-pip {
1328
+ display: inline-flex;
1329
+ align-items: center;
1330
+ gap: 0.35rem;
1331
+ padding: 0.2rem 0.5rem;
1332
+ border-radius: 4px;
1333
+ font-family: var(--ck-mono);
1334
+ font-size: 0.75rem;
1335
+ letter-spacing: 0.03em;
1336
+ }
1337
+
1338
+ .ck-metric-pip--high {
1339
+ background: var(--ck-success-soft);
1340
+ color: var(--ck-success);
1341
+ }
1342
+
1343
+ .ck-metric-pip--medium {
1344
+ background: var(--ck-warning-soft);
1345
+ color: var(--ck-warning);
1346
+ }
1347
+
1348
+ .ck-metric-pip--low {
1349
+ background: var(--ck-danger-soft);
1350
+ color: var(--ck-danger);
1351
+ }
1352
+
1353
+ .ck-metric-pip--pending {
1354
+ background: var(--ck-surface-soft);
1355
+ color: var(--ck-dim);
1356
+ }
1357
+
1358
+ .ck-metric-pip__bar {
1359
+ display: inline-block;
1360
+ width: 4px;
1361
+ height: 12px;
1362
+ border-radius: 2px;
1363
+ background: currentColor;
1364
+ opacity: 0.6;
1365
+ }
1366
+
1367
+ .ck-metric-pip__label {
1368
+ white-space: nowrap;
1369
+ }
1370
+
1371
+ .ck-dot {
1372
+ display: inline-block;
1373
+ width: 8px;
1374
+ height: 8px;
1375
+ border-radius: 50%;
1376
+ flex-shrink: 0;
1377
+ vertical-align: text-top;
1378
+ margin-top: 0.3em;
1379
+ }
1380
+
1381
+ .ck-dot--pending {
1382
+ background: var(--ck-accent);
1383
+ }
1384
+
1385
+ .ck-dot--running {
1386
+ background: var(--ck-accent);
1387
+ animation: ck-pulse 1.5s ease-in-out infinite;
1388
+ }
1389
+
1390
+ .ck-dot--completed {
1391
+ background: var(--ck-success);
1392
+ }
1393
+
1394
+ .ck-dot--high {
1395
+ background: var(--ck-success);
1396
+ }
1397
+
1398
+ .ck-dot--medium {
1399
+ background: var(--ck-warning);
1400
+ }
1401
+
1402
+ .ck-dot--low {
1403
+ background: var(--ck-danger);
1404
+ }
1405
+
1406
+ .ck-dot--failed {
1407
+ background: var(--ck-danger);
1408
+ }
1409
+
1410
+ @keyframes ck-pulse {
1411
+ 0%, 100% { opacity: 1; }
1412
+ 50% { opacity: 0.3; }
1413
+ }
1414
+
1415
+ .ck-run-name {
1416
+ display: inline-flex;
1417
+ align-items: center;
1418
+ gap: 0.5rem;
1419
+ }
1420
+
1421
+ .ck-title .ck-run-name {
1422
+ gap: 1rem;
1423
+ }
1424
+
1425
+ .ck-title .ck-dot {
1426
+ width: 16px;
1427
+ height: 16px;
1428
+ }
1429
+
1430
+ .ck-metric-pip__label strong {
1431
+ font-weight: 700;
1432
+ }
1433
+
1434
+ .ck-metric-bar--compact {
1435
+ margin-top: 0;
1436
+ padding-top: 0;
1437
+ border-top: none;
1438
+ gap: 3px;
1439
+ flex-wrap: nowrap;
1440
+ }
1441
+
1442
+ .ck-metric-bar--compact .ck-metric-pip {
1443
+ padding: 0;
1444
+ gap: 0;
1445
+ position: relative;
1446
+ }
1447
+
1448
+ .ck-metric-bar--compact .ck-metric-pip__bar {
1449
+ width: 6px;
1450
+ height: 14px;
1451
+ border-radius: 2px;
1452
+ }
1453
+
1454
+ .ck-metric-bar--compact .ck-metric-pip__label {
1455
+ display: none;
1456
+ position: absolute;
1457
+ left: 50%;
1458
+ bottom: calc(100% + 4px);
1459
+ transform: translateX(-50%);
1460
+ background: var(--ck-surface);
1461
+ border: 1px solid var(--ck-line);
1462
+ border-radius: 4px;
1463
+ padding: 0.15rem 0.4rem;
1464
+ font-size: 0.875rem;
1465
+ z-index: 10;
1466
+ pointer-events: none;
1467
+ }
1468
+
1469
+ .ck-metric-bar--compact .ck-metric-pip:hover .ck-metric-pip__label {
1470
+ display: block;
1471
+ }
1472
+
1473
+ .ck-review-list {
1474
+ display: grid;
1475
+ gap: 0.75rem;
1476
+ margin-top: 0.5rem;
1477
+ }
1478
+
1479
+ .ck-review-card {
1480
+ border: 1px solid var(--ck-line);
1481
+ border-radius: var(--ck-radius-lg);
1482
+ background: var(--ck-surface);
1483
+ padding: 1.5rem;
1484
+ }
1485
+
1486
+ .ck-review-card__header {
1487
+ display: flex;
1488
+ align-items: center;
1489
+ justify-content: space-between;
1490
+ gap: 1rem;
1491
+ }
1492
+
1493
+ .ck-review-card__metric {
1494
+ font-family: var(--ck-mono);
1495
+ font-size: 0.95rem;
1496
+ font-weight: 600;
1497
+ color: var(--ck-text);
1498
+ }
1499
+
1500
+ .ck-review-card__feedback {
1501
+ margin-top: 0.75rem;
1502
+ }
1503
+
1504
+ .ck-review-card__feedback .ck-note-box {
1505
+ margin-top: 0;
1506
+ }
1507
+
1508
+ @media (max-width: 900px) {
1509
+ .ck-grid--sidebar,
1510
+ .ck-grid--cards,
1511
+ .ck-grid--two {
1512
+ grid-template-columns: 1fr;
1513
+ }
1514
+ }
1515
+
1516
+ @media (max-width: 44rem) {
1517
+ .ck-rubric-row {
1518
+ grid-template-columns: 1fr;
1519
+ }
1520
+ }
1521
+
1522
+ @media (max-width: 640px) {
1523
+ .ck-main {
1524
+ padding-top: 1rem;
1525
+ }
1526
+
1527
+ .ck-card,
1528
+ .ck-result-card,
1529
+ .ck-empty {
1530
+ padding: 0.85rem;
1531
+ }
1532
+
1533
+ .ck-button {
1534
+ width: 100%;
1535
+ }
1536
+
1537
+ .ck-actions,
1538
+ .ck-toolbar,
1539
+ .ck-nav {
1540
+ width: 100%;
1541
+ }
1542
+
1543
+ .ck-results-table {
1544
+ font-size: 0.85rem;
1545
+ }
1546
+
1547
+ .ck-results-table th,
1548
+ .ck-results-table td {
1549
+ padding: 0.5rem 0.65rem;
1550
+ }
1551
+
1552
+ .ck-response-card {
1553
+ padding: 1rem;
1554
+ }
1555
+
1556
+ .ck-review-card {
1557
+ padding: 1rem;
1558
+ }
1559
+ }
1560
+
1561
+ .ck-api-endpoint {
1562
+ padding: 1rem 0;
1563
+ border-bottom: 1px solid var(--ck-line);
1564
+ }
1565
+
1566
+ .ck-api-endpoint:last-child {
1567
+ border-bottom: none;
1568
+ padding-bottom: 0;
1569
+ }
1570
+
1571
+ .ck-api-endpoint:first-of-type {
1572
+ padding-top: 1rem;
1573
+ }
1574
+
1575
+ .ck-api-method {
1576
+ margin: 0;
1577
+ font-family: var(--ck-mono);
1578
+ font-size: 0.85rem;
1579
+ font-weight: 500;
1580
+ color: var(--ck-text);
1581
+ }
1582
+
1583
+ .ck-api-params {
1584
+ margin: 0.35rem 0 0;
1585
+ font-family: var(--ck-sans);
1586
+ font-size: 0.85rem;
1587
+ color: var(--ck-muted);
1588
+ }
1589
+
1590
+ .ck-api-example {
1591
+ position: relative;
1592
+ margin-top: 0.5rem;
1593
+ }
1594
+
1595
+ .ck-api-copy {
1596
+ position: absolute;
1597
+ top: 0.5rem;
1598
+ right: 0.5rem;
1599
+ display: flex;
1600
+ align-items: center;
1601
+ justify-content: center;
1602
+ width: 28px;
1603
+ height: 28px;
1604
+ padding: 0;
1605
+ border: 1px solid var(--ck-line);
1606
+ border-radius: 4px;
1607
+ background: var(--ck-surface);
1608
+ color: var(--ck-dim);
1609
+ cursor: pointer;
1610
+ opacity: 1;
1611
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
1612
+ }
1613
+
1614
+ .ck-api-copy:hover {
1615
+ color: var(--ck-accent);
1616
+ border-color: var(--ck-accent);
1617
+ }
1618
+
1619
+ .ck-api-copy--done {
1620
+ opacity: 1 !important;
1621
+ color: var(--ck-success) !important;
1622
+ border-color: var(--ck-success) !important;
1623
+ }
1624
+
1625
+ .ck-token-toggle {
1626
+ transition: border-color 0.15s, color 0.15s;
1627
+ }
1628
+
1629
+ .ck-token-toggle:hover {
1630
+ border-color: var(--ck-accent);
1631
+ color: var(--ck-accent);
1632
+ }
1633
+
1634
+ .ck-token-toggle.ck-api-copy--done {
1635
+ border-color: var(--ck-success) !important;
1636
+ color: var(--ck-success) !important;
1637
+ }
1638
+
1639
+ .ck-api-tabs {
1640
+ display: grid;
1641
+ grid-template-columns: 180px 1fr;
1642
+ gap: 0;
1643
+ margin-top: 1rem;
1644
+ border: 1px solid var(--ck-line);
1645
+ border-radius: var(--ck-radius-lg);
1646
+ background: var(--ck-surface);
1647
+ overflow: hidden;
1648
+ }
1649
+
1650
+ .ck-api-tabs__radio {
1651
+ display: none;
1652
+ }
1653
+
1654
+ .ck-api-tabs__nav {
1655
+ display: flex;
1656
+ flex-direction: column;
1657
+ border-right: 1px solid var(--ck-line);
1658
+ background: var(--ck-bg-strong);
1659
+ padding: 0.5rem 0;
1660
+ }
1661
+
1662
+ .ck-api-tabs__label {
1663
+ display: flex;
1664
+ align-items: center;
1665
+ justify-content: space-between;
1666
+ padding: 0.6rem 1.25rem;
1667
+ font-family: var(--ck-mono);
1668
+ font-size: 0.8rem;
1669
+ font-weight: 500;
1670
+ color: var(--ck-muted);
1671
+ cursor: pointer;
1672
+ transition: color 0.15s, background 0.15s;
1673
+ border-left: 2px solid transparent;
1674
+ }
1675
+
1676
+ .ck-api-tabs__label:hover {
1677
+ color: var(--ck-text);
1678
+ background: var(--ck-surface-soft);
1679
+ }
1680
+
1681
+ .ck-api-tabs__count {
1682
+ font-size: 0.7rem;
1683
+ color: var(--ck-dim);
1684
+ }
1685
+
1686
+ .ck-api-tabs__panels {
1687
+ padding: 1.5rem;
1688
+ min-height: 300px;
1689
+ }
1690
+
1691
+ .ck-api-tabs__panel {
1692
+ display: none;
1693
+ }
1694
+
1695
+ #ck-tab-mcp:checked ~ .ck-api-tabs__nav label[for="ck-tab-mcp"],
1696
+ #ck-tab-prompts:checked ~ .ck-api-tabs__nav label[for="ck-tab-prompts"],
1697
+ #ck-tab-runs:checked ~ .ck-api-tabs__nav label[for="ck-tab-runs"],
1698
+ #ck-tab-responses:checked ~ .ck-api-tabs__nav label[for="ck-tab-responses"],
1699
+ #ck-tab-datasets:checked ~ .ck-api-tabs__nav label[for="ck-tab-datasets"],
1700
+ #ck-tab-metrics:checked ~ .ck-api-tabs__nav label[for="ck-tab-metrics"],
1701
+ #ck-tab-criteria:checked ~ .ck-api-tabs__nav label[for="ck-tab-criteria"],
1702
+ #ck-tab-providers:checked ~ .ck-api-tabs__nav label[for="ck-tab-providers"] {
1703
+ color: var(--ck-accent);
1704
+ background: var(--ck-surface-soft);
1705
+ border-left-color: var(--ck-accent);
1706
+ }
1707
+
1708
+ #ck-tab-mcp:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(1),
1709
+ #ck-tab-prompts:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(2),
1710
+ #ck-tab-runs:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(3),
1711
+ #ck-tab-responses:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(4),
1712
+ #ck-tab-datasets:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(5),
1713
+ #ck-tab-metrics:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(6),
1714
+ #ck-tab-criteria:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(7),
1715
+ #ck-tab-providers:checked ~ .ck-api-tabs__panels .ck-api-tabs__panel:nth-child(8) {
1716
+ display: block;
1717
+ }
1718
+
1719
+ @media (max-width: 700px) {
1720
+ .ck-api-tabs {
1721
+ grid-template-columns: 1fr;
1722
+ }
1723
+
1724
+ .ck-api-tabs__nav {
1725
+ flex-direction: row;
1726
+ flex-wrap: wrap;
1727
+ border-right: none;
1728
+ border-bottom: 1px solid var(--ck-line);
1729
+ padding: 0.5rem;
1730
+ gap: 0.25rem;
1731
+ }
1732
+
1733
+ .ck-api-tabs__label {
1734
+ padding: 0.4rem 0.75rem;
1735
+ border-left: none;
1736
+ border-bottom: 2px solid transparent;
1737
+ border-radius: 4px;
1738
+ font-size: 0.75rem;
1739
+ }
1740
+
1741
+ #ck-tab-mcp:checked ~ .ck-api-tabs__nav label[for="ck-tab-mcp"],
1742
+ #ck-tab-prompts:checked ~ .ck-api-tabs__nav label[for="ck-tab-prompts"],
1743
+ #ck-tab-runs:checked ~ .ck-api-tabs__nav label[for="ck-tab-runs"],
1744
+ #ck-tab-responses:checked ~ .ck-api-tabs__nav label[for="ck-tab-responses"],
1745
+ #ck-tab-datasets:checked ~ .ck-api-tabs__nav label[for="ck-tab-datasets"],
1746
+ #ck-tab-metrics:checked ~ .ck-api-tabs__nav label[for="ck-tab-metrics"],
1747
+ #ck-tab-criteria:checked ~ .ck-api-tabs__nav label[for="ck-tab-criteria"],
1748
+ #ck-tab-providers:checked ~ .ck-api-tabs__nav label[for="ck-tab-providers"] {
1749
+ border-left-color: transparent;
1750
+ border-bottom-color: var(--ck-accent);
1751
+ }
1752
+
1753
+ .ck-api-tabs__count {
1754
+ display: none;
1755
+ }
1756
+ }
1757
+
1758
+ .ck-metric-checkboxes {
1759
+ display: grid;
1760
+ gap: 0.25rem;
1761
+ }
1762
+
1763
+ .ck-checkbox-label {
1764
+ display: flex;
1765
+ align-items: center;
1766
+ gap: 0.5rem;
1767
+ font-family: var(--ck-sans);
1768
+ font-size: 0.9rem;
1769
+ color: var(--ck-text);
1770
+ cursor: pointer;
1771
+ padding: 0.35rem 0;
1772
+ }
1773
+
1774
+ .ck-checkbox-label:hover {
1775
+ color: var(--ck-accent);
1776
+ }
1777
+
1778
+ .ck-response-row {
1779
+ display: flex;
1780
+ align-items: center;
1781
+ gap: 0.75rem;
1782
+ padding: 0.65rem 0.75rem;
1783
+ border-bottom: 1px solid var(--ck-line);
1784
+ text-decoration: none;
1785
+ color: inherit;
1786
+ transition: background 0.15s;
1787
+ }
1788
+
1789
+ .ck-response-row:first-child {
1790
+ border-top: 1px solid var(--ck-line);
1791
+ }
1792
+
1793
+ .ck-response-row:hover {
1794
+ background: var(--ck-surface-soft);
1795
+ }
1796
+
1797
+ .ck-response-row__index {
1798
+ font-family: var(--ck-mono);
1799
+ font-size: 0.8rem;
1800
+ color: var(--ck-dim);
1801
+ min-width: 2rem;
1802
+ flex-shrink: 0;
1803
+ }
1804
+
1805
+ .ck-response-row__text {
1806
+ flex: 1;
1807
+ font-size: 0.9rem;
1808
+ color: var(--ck-muted);
1809
+ overflow: hidden;
1810
+ text-overflow: ellipsis;
1811
+ white-space: nowrap;
1812
+ }
1813
+
1814
+ .ck-response-row__score {
1815
+ flex-shrink: 0;
1816
+ }
1817
+
1818
+ .ck-score {
1819
+ font-size: 0.85rem;
1820
+ color: var(--ck-muted);
1821
+ white-space: nowrap;
1822
+ }
1823
+
1824
+ .ck-score__star {
1825
+ font-size: 1rem;
1826
+ color: #f59e0b;
1827
+ }
1828
+
1829
+ .ck-prompt-preview {
1830
+ margin-top: 1rem;
1831
+ }
1832
+
1833
+ .ck-prompt-preview__header {
1834
+ display: flex;
1835
+ align-items: center;
1836
+ justify-content: space-between;
1837
+ }
1838
+
1839
+ .ck-prompt-preview__header .ck-kicker {
1840
+ margin: 0;
1841
+ }
1842
+
1843
+ .ck-button--sm {
1844
+ font-size: 0.72rem;
1845
+ padding: 0.3em 0.8em;
1846
+ }
1847
+
1848
+ .ck-endpoint {
1849
+ display: flex;
1850
+ align-items: center;
1851
+ gap: 0.4rem;
1852
+ margin-top: 0.4rem;
1853
+ }
1854
+
1855
+ .ck-endpoint__url {
1856
+ font-family: var(--ck-mono);
1857
+ font-size: 0.72rem;
1858
+ color: var(--ck-dim);
1859
+ background: var(--ck-surface);
1860
+ padding: 0.25em 0.6em;
1861
+ border-radius: var(--ck-radius);
1862
+ border: 1px solid var(--ck-line);
1863
+ user-select: all;
1864
+ }
1865
+
1866
+ .ck-prompt-preview__text {
1867
+ font-size: 0.9rem;
1868
+ color: var(--ck-muted);
1869
+ line-height: 1.5;
1870
+ display: -webkit-box;
1871
+ -webkit-line-clamp: 3;
1872
+ -webkit-box-orient: vertical;
1873
+ overflow: hidden;
1874
+ white-space: pre-wrap;
1875
+ margin: 0.35rem 0;
1876
+ }
1877
+
1878
+ .ck-prompt-preview__text--expanded {
1879
+ -webkit-line-clamp: unset;
1880
+ }
1881
+
1882
+ .ck-slider-row {
1883
+ display: flex;
1884
+ align-items: center;
1885
+ gap: 0.75rem;
1886
+ }
1887
+
1888
+ .ck-slider {
1889
+ flex: 1;
1890
+ -webkit-appearance: none;
1891
+ appearance: none;
1892
+ height: 4px;
1893
+ background: var(--ck-line-strong);
1894
+ border-radius: 2px;
1895
+ outline: none;
1896
+ }
1897
+
1898
+ .ck-slider::-webkit-slider-thumb {
1899
+ -webkit-appearance: none;
1900
+ appearance: none;
1901
+ width: 16px;
1902
+ height: 16px;
1903
+ border-radius: 50%;
1904
+ background: var(--ck-accent);
1905
+ cursor: pointer;
1906
+ border: 2px solid var(--ck-bg);
1907
+ }
1908
+
1909
+ .ck-slider::-moz-range-thumb {
1910
+ width: 16px;
1911
+ height: 16px;
1912
+ border-radius: 50%;
1913
+ background: var(--ck-accent);
1914
+ cursor: pointer;
1915
+ border: 2px solid var(--ck-bg);
1916
+ }
1917
+
1918
+ .ck-slider-value {
1919
+ font-family: var(--ck-mono);
1920
+ font-size: 0.85rem;
1921
+ color: var(--ck-text);
1922
+ min-width: 2rem;
1923
+ text-align: right;
1924
+ }
1925
+
1926
+ .ck-info-toggle {
1927
+ display: inline-flex;
1928
+ align-items: center;
1929
+ justify-content: center;
1930
+ width: 18px;
1931
+ height: 18px;
1932
+ border-radius: 50%;
1933
+ border: 1px solid var(--ck-line-strong);
1934
+ color: var(--ck-muted);
1935
+ font-size: 0.65rem;
1936
+ font-weight: 700;
1937
+ cursor: help;
1938
+ vertical-align: middle;
1939
+ margin-left: 0.35rem;
1940
+ position: relative;
1941
+ }
1942
+
1943
+ .ck-info-toggle:hover + .ck-info-popup,
1944
+ .ck-info-popup:hover {
1945
+ display: block;
1946
+ }
1947
+
1948
+ .ck-info-popup {
1949
+ display: none;
1950
+ position: absolute;
1951
+ top: 100%;
1952
+ left: 0;
1953
+ margin-top: 0.5rem;
1954
+ padding: 0.75rem 1rem;
1955
+ background: var(--ck-surface);
1956
+ border: 1px solid var(--ck-line-strong);
1957
+ border-radius: var(--ck-radius);
1958
+ font-size: 0.78rem;
1959
+ line-height: 1.5;
1960
+ color: var(--ck-text);
1961
+ width: 320px;
1962
+ z-index: 10;
1963
+ font-weight: 400;
1964
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1965
+ }
1966
+
1967
+ .ck-suggest-reasoning {
1968
+ margin: 1.5rem 0;
1969
+ padding: 1.25rem 1.5rem;
1970
+ background: var(--ck-accent-soft);
1971
+ border-left: 3px solid var(--ck-accent);
1972
+ border-radius: 0 var(--ck-radius) var(--ck-radius) 0;
1973
+ }
1974
+
1975
+ .ck-suggest-reasoning .ck-kicker {
1976
+ margin-bottom: 0.5rem;
1977
+ }
1978
+
1979
+ .ck-suggest-reasoning__body {
1980
+ font-size: 0.85rem;
1981
+ line-height: 1.7;
1982
+ color: var(--ck-text);
1983
+ }
1984
+
1985
+ .ck-suggest-reasoning__body p {
1986
+ margin: 0 0 0.4rem;
1987
+ }
1988
+
1989
+ .ck-suggest-diff {
1990
+ display: grid;
1991
+ grid-template-columns: 1fr 1fr;
1992
+ gap: 1px;
1993
+ margin: 1.5rem 0;
1994
+ border: 1px solid var(--ck-line);
1995
+ border-radius: var(--ck-radius);
1996
+ overflow: hidden;
1997
+ background: var(--ck-line);
1998
+ }
1999
+
2000
+ .ck-suggest-diff__pane {
2001
+ background: var(--ck-surface);
2002
+ min-width: 0;
2003
+ }
2004
+
2005
+ .ck-suggest-diff__header {
2006
+ display: flex;
2007
+ align-items: center;
2008
+ justify-content: space-between;
2009
+ padding: 0.6rem 1rem;
2010
+ background: var(--ck-bg-strong);
2011
+ border-bottom: 1px solid var(--ck-line);
2012
+ }
2013
+
2014
+ .ck-suggest-diff__label {
2015
+ font-family: var(--ck-mono);
2016
+ font-size: 0.7rem;
2017
+ font-weight: 500;
2018
+ text-transform: uppercase;
2019
+ letter-spacing: 0.05em;
2020
+ }
2021
+
2022
+ .ck-suggest-diff__label--before {
2023
+ color: var(--ck-danger);
2024
+ }
2025
+
2026
+ .ck-suggest-diff__label--after {
2027
+ color: var(--ck-success);
2028
+ }
2029
+
2030
+ .ck-suggest-diff__version {
2031
+ font-family: var(--ck-mono);
2032
+ font-size: 0.7rem;
2033
+ color: var(--ck-dim);
2034
+ }
2035
+
2036
+ .ck-suggest-diff__code {
2037
+ margin: 0;
2038
+ padding: 1rem;
2039
+ font-family: var(--ck-mono);
2040
+ font-size: 0.8rem;
2041
+ line-height: 1.8;
2042
+ color: var(--ck-text);
2043
+ white-space: pre-wrap;
2044
+ word-break: break-word;
2045
+ overflow-x: auto;
2046
+ }
2047
+
2048
+ .ck-diff-del {
2049
+ background: rgba(248, 113, 113, 0.2);
2050
+ color: var(--ck-danger);
2051
+ text-decoration: line-through;
2052
+ text-decoration-color: rgba(248, 113, 113, 0.5);
2053
+ border-radius: 2px;
2054
+ padding: 0.1em 0.15em;
2055
+ }
2056
+
2057
+ .ck-diff-ins {
2058
+ background: rgba(45, 212, 168, 0.15);
2059
+ color: var(--ck-success);
2060
+ border-radius: 2px;
2061
+ padding: 0.1em 0.15em;
2062
+ }
2063
+
2064
+ .ck-suggest-full {
2065
+ margin: 1.5rem 0;
2066
+ }
2067
+
2068
+ .ck-mcp-tools {
2069
+ display: grid;
2070
+ grid-template-columns: 1fr;
2071
+ gap: 1px;
2072
+ background: var(--ck-line);
2073
+ border: 1px solid var(--ck-line);
2074
+ border-radius: var(--ck-radius);
2075
+ overflow: hidden;
2076
+ }
2077
+
2078
+ .ck-mcp-tool {
2079
+ display: flex;
2080
+ align-items: baseline;
2081
+ gap: 1rem;
2082
+ padding: 0.5rem 0.75rem;
2083
+ background: var(--ck-surface);
2084
+ }
2085
+
2086
+ .ck-mcp-tool__name {
2087
+ font-family: var(--ck-mono);
2088
+ font-size: 0.75rem;
2089
+ color: var(--ck-accent);
2090
+ white-space: nowrap;
2091
+ min-width: 14rem;
2092
+ }
2093
+
2094
+ .ck-mcp-tool__desc {
2095
+ font-size: 0.8rem;
2096
+ color: var(--ck-muted);
2097
+ }
2098
+
2099
+ .ck-mcp-install-grid {
2100
+ display: grid;
2101
+ grid-template-columns: 1fr;
2102
+ gap: 1rem;
2103
+ margin: 1.5rem 0 2rem;
2104
+ }
2105
+
2106
+ .ck-mcp-install-card {
2107
+ border: 1px solid var(--ck-line);
2108
+ border-radius: var(--ck-radius);
2109
+ overflow: hidden;
2110
+ background: var(--ck-bg-strong);
2111
+ }
2112
+
2113
+ .ck-mcp-install-card__header {
2114
+ display: flex;
2115
+ align-items: center;
2116
+ gap: 0.5rem;
2117
+ padding: 0.6rem 0.85rem;
2118
+ font-family: var(--ck-mono);
2119
+ font-size: 0.78rem;
2120
+ font-weight: 500;
2121
+ color: var(--ck-text);
2122
+ border-bottom: 1px solid var(--ck-line);
2123
+ background: var(--ck-surface);
2124
+ }
2125
+
2126
+ .ck-mcp-install-card__icon {
2127
+ color: var(--ck-accent);
2128
+ font-size: 0.65rem;
2129
+ }
2130
+
2131
+ .ck-mcp-install-card .ck-api-example {
2132
+ margin: 0;
2133
+ }
2134
+
2135
+ .ck-mcp-install-card .ck-code {
2136
+ border-radius: 0;
2137
+ border: none;
2138
+ font-size: 0.72rem;
2139
+ padding: 1rem 1rem 1.1rem;
2140
+ line-height: 1.7;
2141
+ }
2142
+
2143
+ .ck-mcp-tool-group {
2144
+ margin-bottom: 1.25rem;
2145
+ }
2146
+
2147
+ .ck-mcp-tool-group:last-child {
2148
+ margin-bottom: 0;
2149
+ }
2150
+
2151
+ .ck-mcp-tool-group__label {
2152
+ font-family: var(--ck-mono);
2153
+ font-size: 0.72rem;
2154
+ font-weight: 500;
2155
+ color: var(--ck-dim);
2156
+ text-transform: uppercase;
2157
+ letter-spacing: 0.06em;
2158
+ margin: 0 0 0.4rem;
2159
+ display: flex;
2160
+ align-items: center;
2161
+ gap: 0.5rem;
2162
+ }
2163
+
2164
+ .ck-api-prompts-section {
2165
+ margin-top: 1.5rem;
2166
+ }
2167
+
2168
+ .ck-api-prompts-section .ck-kicker {
2169
+ margin-bottom: 0.75rem;
2170
+ }
2171
+
2172
+ .ck-api-prompt-card {
2173
+ border: 1px solid var(--ck-line);
2174
+ border-radius: var(--ck-radius);
2175
+ background: var(--ck-surface);
2176
+ margin-bottom: 0.65rem;
2177
+ overflow: hidden;
2178
+ }
2179
+
2180
+ .ck-api-prompt-card__top {
2181
+ display: flex;
2182
+ align-items: flex-start;
2183
+ justify-content: space-between;
2184
+ gap: 1rem;
2185
+ padding: 0.85rem 1rem 0.6rem;
2186
+ }
2187
+
2188
+ .ck-api-prompt-card__name {
2189
+ font-size: 0.9rem;
2190
+ color: var(--ck-text);
2191
+ }
2192
+
2193
+ .ck-api-prompt-card__desc {
2194
+ font-size: 0.78rem;
2195
+ color: var(--ck-muted);
2196
+ margin: 0.2rem 0 0;
2197
+ line-height: 1.4;
2198
+ }
2199
+
2200
+ .ck-api-prompt-card__url {
2201
+ display: flex;
2202
+ align-items: center;
2203
+ gap: 0.4rem;
2204
+ padding: 0.5rem 1rem;
2205
+ background: var(--ck-bg-strong);
2206
+ border-top: 1px solid var(--ck-line);
2207
+ }
2208
+
2209
+ .ck-api-prompt-card__url .ck-endpoint__url {
2210
+ flex: 1;
2211
+ overflow: hidden;
2212
+ text-overflow: ellipsis;
2213
+ }
2214
+