ultra_settings 2.8.0 → 2.9.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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -1
  3. data/MIT-LICENSE.txt +1 -1
  4. data/README.md +108 -1
  5. data/VERSION +1 -1
  6. data/app/AGENTS.md +7 -0
  7. data/app/_config_description.html.erb +22 -25
  8. data/app/_config_list.html.erb +2 -14
  9. data/app/_data_source.html.erb +53 -0
  10. data/app/application.css +1078 -259
  11. data/app/application.js +818 -91
  12. data/app/application_vars.css.erb +136 -81
  13. data/app/configuration.html.erb +60 -107
  14. data/app/index.html.erb +164 -20
  15. data/app/layout.css +81 -16
  16. data/app/layout.html.erb +67 -5
  17. data/app/layout_vars.css.erb +29 -5
  18. data/app/locales/ar.json +71 -0
  19. data/app/locales/cs.json +71 -0
  20. data/app/locales/da.json +71 -0
  21. data/app/locales/de.json +71 -0
  22. data/app/locales/el.json +71 -0
  23. data/app/locales/en.json +85 -0
  24. data/app/locales/es.json +71 -0
  25. data/app/locales/fa.json +71 -0
  26. data/app/locales/fr.json +71 -0
  27. data/app/locales/gd.json +71 -0
  28. data/app/locales/he.json +71 -0
  29. data/app/locales/hi.json +71 -0
  30. data/app/locales/it.json +71 -0
  31. data/app/locales/ja.json +71 -0
  32. data/app/locales/ko.json +71 -0
  33. data/app/locales/lt.json +71 -0
  34. data/app/locales/nb.json +71 -0
  35. data/app/locales/nl.json +71 -0
  36. data/app/locales/pl.json +71 -0
  37. data/app/locales/pt-br.json +71 -0
  38. data/app/locales/pt.json +71 -0
  39. data/app/locales/ru.json +71 -0
  40. data/app/locales/sv.json +71 -0
  41. data/app/locales/ta.json +71 -0
  42. data/app/locales/tr.json +71 -0
  43. data/app/locales/uk.json +71 -0
  44. data/app/locales/ur.json +71 -0
  45. data/app/locales/vi.json +71 -0
  46. data/app/locales/zh-cn.json +71 -0
  47. data/app/locales/zh-tw.json +71 -0
  48. data/lib/ultra_settings/application_view.rb +21 -3
  49. data/lib/ultra_settings/audit_data_sources.rb +98 -0
  50. data/lib/ultra_settings/coerce.rb +0 -6
  51. data/lib/ultra_settings/config_helper.rb +4 -4
  52. data/lib/ultra_settings/configuration.rb +28 -7
  53. data/lib/ultra_settings/configuration_view.rb +117 -56
  54. data/lib/ultra_settings/mini_i18n.rb +110 -0
  55. data/lib/ultra_settings/rack_app.rb +51 -1
  56. data/lib/ultra_settings/railtie.rb +8 -0
  57. data/lib/ultra_settings/tasks/audit_data_sources.rake +76 -0
  58. data/lib/ultra_settings/tasks/utils.rb +23 -0
  59. data/lib/ultra_settings/version.rb +1 -1
  60. data/lib/ultra_settings/web_view.rb +33 -2
  61. data/lib/ultra_settings.rb +56 -22
  62. data/ultra_settings.gemspec +3 -0
  63. metadata +38 -3
  64. data/app/_select_menu.html.erb +0 -53
data/app/application.css CHANGED
@@ -1,213 +1,658 @@
1
- .ultra-settings-nav {
2
- margin-bottom: 1rem;
1
+ /* ══════════════════════════════════════════════════════
2
+ SLATE DESIGN — Developer-tool minimalism
3
+ ══════════════════════════════════════════════════════ */
4
+
5
+ :focus-visible {
6
+ outline: 2px solid var(--accent);
7
+ outline-offset: 2px;
3
8
  }
4
9
 
5
- .ultra-settings-description-container {
6
- margin-bottom: 1.5rem;
7
- line-height: 1.5;
8
- border: 1px solid var(--config-file-border-color);
9
- border-radius: 0.375rem;
10
- padding: 1rem 1rem 0 1rem;
10
+ /* ── APP SHELL ── */
11
+ .ultra-settings {
12
+ font-family: var(--font-ui);
13
+ color: var(--text-secondary);
14
+ line-height: 1.6;
15
+ -webkit-font-smoothing: antialiased;
16
+ -moz-osx-font-smoothing: grayscale;
17
+ background: var(--bg-page);
18
+ padding: 20px;
11
19
  }
12
20
 
13
- .ultra-settings-description {
14
- margin-bottom: 1rem;
15
- color: var(--description-color);
21
+ .ultra-settings *, .ultra-settings *::before, .ultra-settings *::after {
22
+ box-sizing: border-box;
16
23
  }
17
24
 
18
- .ultra-settings-config-file-label {
19
- font-weight: 500;
20
- color: var(--description-color);
25
+ /* ══════════════════════════════════════════
26
+ TOPBAR
27
+ ══════════════════════════════════════════ */
28
+ .ultra-settings-topbar {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 12px;
32
+ padding: 0 0 12px;
33
+ max-width: 940px;
34
+ }
35
+
36
+ .ultra-settings-search-wrap {
37
+ flex: 1;
38
+ position: relative;
21
39
  }
22
40
 
23
- .ultra-settings-config-file-path {
24
- font-family: monospace;
41
+ .ultra-settings-search-icon {
42
+ position: absolute;
43
+ inset-inline-start: 12px;
44
+ top: 50%;
45
+ transform: translateY(-50%);
46
+ width: 16px;
47
+ height: 16px;
48
+ color: var(--text-tertiary);
49
+ pointer-events: none;
50
+ }
51
+
52
+ .ultra-settings-search-wrap input {
53
+ width: 100%;
54
+ padding: 10px 38px 10px 38px;
55
+ background: var(--bg-card);
56
+ border: 1px solid var(--border-card);
57
+ border-radius: 8px;
58
+ color: var(--text-primary);
25
59
  font-size: 0.875rem;
26
- color: var(--code-color);
27
- font-weight: 600;
60
+ font-family: var(--font-ui);
61
+ outline: none;
62
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
63
+ box-shadow: var(--shadow-card);
28
64
  }
29
65
 
30
- .ultra-settings-file-not-found {
31
- color: var(--warning-color);
32
- font-style: italic;
33
- margin-left: 0.5rem;
66
+ .ultra-settings-search-wrap input::placeholder {
67
+ color: var(--text-tertiary);
34
68
  }
35
69
 
36
- .ultra-settings-fields {
70
+ .ultra-settings-search-wrap input:focus {
71
+ border-color: var(--accent);
72
+ box-shadow: 0 0 0 2px var(--accent-glow);
73
+ }
74
+
75
+ .ultra-settings-search-clear {
76
+ position: absolute;
77
+ inset-inline-end: 8px;
78
+ top: 50%;
79
+ transform: translateY(-50%);
80
+ width: 28px;
81
+ height: 28px;
82
+ background: none;
83
+ border: none;
84
+ border-radius: 6px;
85
+ cursor: pointer;
86
+ color: var(--text-tertiary);
87
+ display: none;
88
+ align-items: center;
89
+ justify-content: center;
90
+ transition: background 0.1s ease, color 0.1s ease;
91
+ padding: 0;
92
+ }
93
+
94
+ .ultra-settings-search-clear svg {
95
+ width: 14px;
96
+ height: 14px;
97
+ }
98
+
99
+ .ultra-settings-search-clear:hover {
100
+ background: var(--bg-code);
101
+ color: var(--text-secondary);
102
+ }
103
+
104
+ .ultra-settings-search-clear.visible {
37
105
  display: flex;
38
- flex-direction: column;
39
- gap: 1.75rem;
40
106
  }
41
107
 
42
- .ultra-settings-fields svg {
43
- vertical-align: middle;
108
+ /* ══════════════════════════════════════════
109
+ LANGUAGE MENU (in footer)
110
+ ══════════════════════════════════════════ */
111
+ .ultra-settings-language-menu {
112
+ position: relative;
113
+ display: block;
114
+ flex-shrink: 0;
44
115
  }
45
116
 
46
- .ultra-settings-field {
47
- border: 1px solid var(--field-border-color);
48
- border-radius: 0.5rem;
49
- background-color: var(--field-bg-color);
50
- overflow: hidden;
117
+ .ultra-settings-language-menu > summary {
118
+ list-style: none;
51
119
  }
52
120
 
53
- .ultra-settings-field-header {
121
+ .ultra-settings-language-menu > summary::-webkit-details-marker {
122
+ display: none;
123
+ }
124
+
125
+ .ultra-settings-language-trigger {
54
126
  display: flex;
55
- justify-content: space-between;
56
127
  align-items: center;
57
- padding: 0.75rem 1rem;
58
- background-color: var(--field-header-bg-color);
59
- border-bottom: 1px solid var(--field-border-color);
128
+ gap: 8px;
129
+ padding: 8px 10px 8px 9px;
130
+ border-radius: 8px;
131
+ cursor: pointer;
132
+ user-select: none;
133
+ border: 1px solid var(--border-card);
134
+ background: var(--bg-card);
135
+ color: var(--text-secondary);
136
+ font-size: 0.75rem;
137
+ font-weight: 500;
138
+ transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
139
+ box-shadow: var(--shadow-card);
140
+ white-space: nowrap;
60
141
  }
61
142
 
62
- .ultra-settings-field-name {
143
+ .ultra-settings-language-trigger:hover {
144
+ border-color: var(--accent);
145
+ color: var(--text-primary);
146
+ }
147
+
148
+ .ultra-settings-language-trigger:focus-visible {
149
+ outline: 2px solid var(--accent);
150
+ outline-offset: 2px;
151
+ }
152
+
153
+ .ultra-settings-language-trigger-icon {
154
+ width: 16px;
155
+ height: 16px;
156
+ display: inline-flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ flex-shrink: 0;
160
+ color: inherit;
161
+ opacity: 0.7;
162
+ }
163
+
164
+ .ultra-settings-language-trigger-icon svg {
165
+ width: 13px;
166
+ height: 13px;
167
+ }
168
+
169
+ .ultra-settings-language-trigger-current {
170
+ flex: 1;
171
+ min-width: 0;
172
+ font-size: 0.75rem;
173
+ color: inherit;
174
+ font-weight: 500;
175
+ white-space: nowrap;
176
+ overflow: hidden;
177
+ text-overflow: ellipsis;
178
+ }
179
+
180
+ .ultra-settings-language-trigger-caret {
181
+ width: 12px;
182
+ height: 12px;
183
+ color: inherit;
184
+ opacity: 0.5;
185
+ transition: transform 0.15s ease, opacity 0.15s ease;
186
+ }
187
+
188
+ .ultra-settings-language-trigger-caret svg {
189
+ width: 100%;
190
+ height: 100%;
191
+ }
192
+
193
+ .ultra-settings-language-menu[open] .ultra-settings-language-trigger {
194
+ border-color: var(--accent);
195
+ color: var(--text-primary);
196
+ }
197
+
198
+ .ultra-settings-language-menu[open] .ultra-settings-language-trigger-caret {
199
+ opacity: 0.8;
200
+ transform: rotate(180deg);
201
+ }
202
+
203
+ .ultra-settings-language-popup {
204
+ position: absolute;
205
+ inset-inline-end: 0;
206
+ bottom: calc(100% + 6px);
207
+ min-width: 160px;
208
+ margin: 0;
209
+ padding: 4px;
210
+ list-style: none;
211
+ border-radius: 10px;
212
+ border: 1px solid var(--border-card);
213
+ background: var(--bg-card);
214
+ box-shadow: var(--shadow-lg);
215
+ display: grid;
216
+ gap: 1px;
217
+ opacity: 0;
218
+ transform: translateY(-4px);
219
+ pointer-events: none;
220
+ transition: opacity 0.15s ease, transform 0.15s ease;
221
+ z-index: 50;
222
+ max-height: min(280px, 55vh);
223
+ overflow-y: auto;
224
+ }
225
+
226
+ .ultra-settings-language-popup li {
227
+ list-style: none;
228
+ margin: 0;
229
+ padding: 0;
230
+ }
231
+
232
+ .ultra-settings-language-menu[open] .ultra-settings-language-popup {
233
+ opacity: 1;
234
+ transform: translateY(0);
235
+ pointer-events: auto;
236
+ }
237
+
238
+ .ultra-settings-language-option {
239
+ width: 100%;
63
240
  display: flex;
64
241
  align-items: center;
65
- gap: 0.5rem;
242
+ gap: 6px;
243
+ padding: 6px 8px;
244
+ border: 0;
245
+ border-radius: 7px;
246
+ background: transparent;
247
+ color: var(--text-primary);
248
+ cursor: pointer;
249
+ text-align: start;
250
+ font-family: var(--font-ui);
251
+ font-size: 0.75rem;
252
+ font-weight: 500;
253
+ }
254
+
255
+ .ultra-settings-language-option-name {
256
+ flex: 1;
257
+ min-width: 0;
258
+ font-size: 0.75rem;
259
+ font-weight: 500;
260
+ color: var(--text-primary);
261
+ white-space: nowrap;
262
+ overflow: hidden;
263
+ text-overflow: ellipsis;
264
+ }
265
+
266
+ .ultra-settings-language-option:hover,
267
+ .ultra-settings-language-option:focus-visible {
268
+ background: var(--bg-code);
269
+ }
270
+
271
+ .ultra-settings-language-option-check {
272
+ width: 12px;
273
+ height: 12px;
274
+ color: var(--accent);
275
+ opacity: 0;
276
+ transform: scale(0.8);
277
+ transition: opacity 0.15s ease, transform 0.15s ease;
278
+ flex-shrink: 0;
279
+ }
280
+
281
+ .ultra-settings-language-option-check svg {
282
+ width: 100%;
283
+ height: 100%;
66
284
  }
67
285
 
68
- .ultra-settings-field-name code {
69
- font-family: monospace;
286
+ .ultra-settings-language-option.is-active {
287
+ background: var(--accent-light);
288
+ }
289
+
290
+ .ultra-settings-language-option.is-active .ultra-settings-language-option-check {
291
+ opacity: 1;
292
+ transform: scale(1);
293
+ }
294
+
295
+ /* ── View transition animations ── */
296
+ @keyframes ultra-settings-fade-in {
297
+ from { opacity: 0; transform: translateY(6px); }
298
+ to { opacity: 1; transform: translateY(0); }
299
+ }
300
+
301
+ @keyframes ultra-settings-fade-out {
302
+ from { opacity: 1; transform: translateY(0); }
303
+ to { opacity: 0; transform: translateY(-6px); }
304
+ }
305
+
306
+ .ultra-settings-view-enter {
307
+ animation: ultra-settings-fade-in 0.2s ease-out both;
308
+ }
309
+
310
+ .ultra-settings-view-exit {
311
+ animation: ultra-settings-fade-out 0.15s ease-in both;
312
+ }
313
+
314
+ /* ══════════════════════════════════════════
315
+ CONFIG LIST (default view)
316
+ ══════════════════════════════════════════ */
317
+ .ultra-settings-config-list {
318
+ max-width: 940px;
319
+ padding: 8px 0 0;
320
+ display: flex;
321
+ flex-direction: column;
322
+ gap: 8px;
323
+ }
324
+
325
+ .ultra-settings-config-list-item {
326
+ background: var(--bg-card);
327
+ border: 1px solid var(--border-card);
328
+ border-radius: 10px;
329
+ padding: 16px 20px;
330
+ cursor: pointer;
331
+ transition: box-shadow 0.15s ease, border-color 0.15s ease;
332
+ box-shadow: var(--shadow-card);
333
+ }
334
+
335
+ .ultra-settings-config-list-item:hover {
336
+ box-shadow: var(--shadow-sm);
337
+ border-color: var(--accent);
338
+ }
339
+
340
+ .ultra-settings-config-list-item:focus-visible {
341
+ outline: 2px solid var(--accent);
342
+ outline-offset: 2px;
343
+ }
344
+
345
+ .ultra-settings-config-list-name {
70
346
  font-size: 1rem;
71
347
  font-weight: 600;
72
- color: var(--code-color);
348
+ color: var(--text-primary);
349
+ letter-spacing: -0.01em;
73
350
  }
74
351
 
75
- .ultra-settings-field-type {
352
+ .ultra-settings-config-list-desc {
76
353
  font-size: 0.875rem;
77
- font-weight: 600;
78
- color: var(--type-color);
79
- text-transform: uppercase;
80
- letter-spacing: 0.025em;
354
+ color: var(--text-secondary);
355
+ margin-top: 4px;
356
+ line-height: 1.5;
81
357
  }
82
358
 
83
- .ultra-settings-field-badge {
359
+ .ultra-settings-config-list-count {
360
+ font-size: 0.75rem;
361
+ color: var(--text-tertiary);
362
+ margin-top: 6px;
84
363
  display: inline-block;
85
- padding: 0.125rem 0.5rem;
364
+ }
365
+
366
+ /* Hidden utility for search filtering */
367
+ .ultra-settings-config-list-item.hidden,
368
+ .ultra-settings-config-section.hidden,
369
+ .ultra-settings-field-card.hidden { display: none; }
370
+
371
+ /* ══════════════════════════════════════════
372
+ CONFIG DETAIL (selected config view)
373
+ ══════════════════════════════════════════ */
374
+ .ultra-settings-config-detail {
375
+ display: none;
376
+ }
377
+
378
+ .ultra-settings-config-detail.active {
379
+ display: block;
380
+ }
381
+
382
+ /* ══════════════════════════════════════════
383
+ CONFIG SECTIONS
384
+ ══════════════════════════════════════════ */
385
+ .ultra-settings-config-section {
386
+ padding: 0;
387
+ max-width: 940px;
388
+ }
389
+
390
+ .ultra-settings-config-header {
391
+ position: sticky;
392
+ top: -1px; z-index: 10;
393
+ background: var(--bg-sticky);
394
+ padding: 25px 0 16px;
395
+ margin: 0 0 24px;
396
+ border-bottom: 1px solid var(--border-light);
397
+ }
398
+
399
+ .ultra-settings-config-title {
400
+ font-family: var(--font-ui);
401
+ font-size: 1.375rem;
402
+ font-weight: 700;
403
+ color: var(--text-primary);
404
+ letter-spacing: -0.025em;
405
+ line-height: 1.25;
406
+ margin: 0 0 6px 0;
407
+ }
408
+
409
+ .ultra-settings-config-desc {
410
+ font-size: 0.9375rem;
411
+ color: var(--text-secondary);
412
+ line-height: 1.6;
413
+ max-width: 620px;
414
+ }
415
+
416
+ .ultra-settings-config-file {
417
+ display: inline-flex;
418
+ align-items: center;
419
+ gap: 6px;
420
+ font-size: 0.8125rem;
421
+ color: var(--text-tertiary);
422
+ margin-top: 8px;
423
+ }
424
+
425
+ .ultra-settings-config-file svg { width: 13px; height: 13px; }
426
+
427
+ .ultra-settings-config-file code {
428
+ font-family: var(--font-mono);
86
429
  font-size: 0.75rem;
87
430
  font-weight: 500;
431
+ color: var(--text-secondary);
432
+ background: var(--bg-code);
433
+ padding: 2px 8px;
434
+ border-radius: 4px;
435
+ border: 1px solid var(--border-light);
436
+ }
437
+
438
+ .ultra-settings-config-file .ultra-settings-warn { color: #dc2626; font-size: 0.8125rem; }
439
+
440
+ /* ══════════════════════════════════════════
441
+ FIELD CARDS
442
+ ══════════════════════════════════════════ */
443
+ .ultra-settings-fields {
444
+ display: flex;
445
+ flex-direction: column;
446
+ gap: 12px;
447
+ }
448
+
449
+ .ultra-settings-field-card {
450
+ background: var(--bg-card);
451
+ border-radius: 10px;
452
+ box-shadow: var(--shadow-card);
453
+ border: 1px solid var(--border-card);
454
+ overflow: hidden;
455
+ transition: box-shadow 0.15s ease;
456
+ }
457
+
458
+ .ultra-settings-field-card:hover {
459
+ box-shadow: var(--shadow-sm);
460
+ }
461
+
462
+ .ultra-settings-field-header {
463
+ display: flex;
464
+ align-items: center;
465
+ gap: 12px;
466
+ padding: 14px 18px;
467
+ flex-wrap: wrap;
468
+ }
469
+
470
+ .ultra-settings-field-name {
471
+ font-family: var(--font-mono);
472
+ font-size: 0.9375rem;
473
+ font-weight: 600;
474
+ color: var(--text-primary);
475
+ letter-spacing: -0.01em;
476
+ }
477
+
478
+ .ultra-settings-type-indicator {
479
+ display: inline-flex;
480
+ align-items: center;
481
+ gap: 5px;
482
+ }
483
+
484
+ .ultra-settings-type-dot {
485
+ width: 8px;
486
+ height: 8px;
487
+ border-radius: 2px;
488
+ flex-shrink: 0;
489
+ }
490
+
491
+ .ultra-settings-type-dot[data-type="string"] { background: var(--type-string); }
492
+ .ultra-settings-type-dot[data-type="integer"] { background: var(--type-integer); }
493
+ .ultra-settings-type-dot[data-type="float"] { background: var(--type-float); }
494
+ .ultra-settings-type-dot[data-type="boolean"] { background: var(--type-boolean); }
495
+ .ultra-settings-type-dot[data-type="datetime"]{ background: var(--type-datetime); }
496
+ .ultra-settings-type-dot[data-type="array"] { background: var(--type-array); }
497
+ .ultra-settings-type-dot[data-type="symbol"] { background: var(--type-symbol); }
498
+
499
+ .ultra-settings-type-label {
500
+ font-size: 0.75rem;
501
+ font-weight: 500;
502
+ color: var(--text-tertiary);
503
+ text-transform: lowercase;
504
+ font-family: var(--font-mono);
505
+ }
506
+
507
+ .ultra-settings-badge {
508
+ display: inline-flex;
509
+ align-items: center;
510
+ gap: 4px;
511
+ padding: 2px 8px;
512
+ border-radius: 4px;
513
+ font-size: 0.625rem;
514
+ font-weight: 700;
88
515
  text-transform: uppercase;
89
- letter-spacing: 0.025em;
90
- border-radius: 0.25rem;
516
+ letter-spacing: 0.05em;
517
+ line-height: 1.6;
91
518
  }
92
519
 
520
+ .ultra-settings-badge svg { width: 10px; height: 10px; }
521
+
93
522
  .ultra-settings-badge-secret {
94
- background-color: var(--secret-badge-bg-color);
95
- color: var(--secret-badge-text-color);
523
+ background: var(--badge-secret-bg);
524
+ color: var(--badge-secret-text);
525
+ border: 1px solid var(--badge-secret-border);
96
526
  }
97
527
 
98
528
  .ultra-settings-badge-static {
99
- background-color: var(--static-badge-bg-color);
100
- color: var(--static-badge-text-color);
529
+ background: var(--badge-static-bg);
530
+ color: var(--badge-static-text);
531
+ border: 1px solid var(--badge-static-border);
532
+ }
533
+
534
+ .ultra-settings-field-value-wrap {
535
+ margin-inline-start: auto;
536
+ flex-shrink: 0;
537
+ max-width: 50%;
101
538
  }
102
539
 
103
540
  .ultra-settings-field-value {
104
- padding: 1rem;
105
- background-color: var(--value-bg-color);
106
- border-bottom: 1px solid var(--field-border-color);
541
+ font-family: var(--font-mono);
542
+ font-size: 0.8125rem;
543
+ font-weight: 500;
544
+ color: var(--text-primary);
545
+ background: var(--bg-code);
546
+ padding: 4px 12px;
547
+ border-radius: 6px;
548
+ border: 1px solid var(--border-light);
549
+ max-width: 320px;
550
+ overflow: hidden;
551
+ text-overflow: ellipsis;
552
+ white-space: nowrap;
553
+ cursor: pointer;
554
+ display: block;
555
+ transition: all 0.12s ease;
107
556
  }
108
557
 
109
- code.ultra-settings-field-data-value {
110
- font-family: monospace;
111
- font-size: 0.875rem;
112
- word-break: break-all;
113
- color: var(--value-text-color);
114
- background-color: var(--value-code-bg-color);
115
- padding: 0.25rem 0.5rem;
116
- border-radius: 0.25rem;
117
- border: 1px solid var(--value-code-border-color);
558
+ .ultra-settings-field-value:hover {
559
+ border-color: var(--accent);
560
+ background: var(--accent-light);
118
561
  }
119
562
 
120
- .ultra-settings-nil-value {
563
+ .ultra-settings-field-value.nil {
564
+ color: var(--text-tertiary);
121
565
  font-style: italic;
122
- color: var(--nil-color);
123
566
  }
124
567
 
568
+ /* Description */
125
569
  .ultra-settings-field-description {
126
- padding: 0.75rem 1rem;
127
- color: var(--description-color);
128
- line-height: 1.5;
129
- border-bottom: 1px solid var(--field-border-color);
130
- display: flex;
131
- align-items: flex-start;
132
- gap: 0.5rem;
133
- }
134
-
135
- .ultra-settings-description-text {
136
- flex: 1;
570
+ padding: 0 18px 14px 18px;
571
+ font-size: 0.875rem;
572
+ color: var(--text-secondary);
573
+ line-height: 1.6;
137
574
  }
138
575
 
576
+ /* Sources — Compact rows */
139
577
  .ultra-settings-field-sources {
140
- padding: 0.5rem;
578
+ border-top: 1px solid var(--border-light);
579
+ padding: 0;
141
580
  }
142
581
 
143
- .ultra-settings-source {
582
+ .ultra-settings-source-row {
144
583
  display: flex;
145
584
  align-items: center;
146
- justify-content: space-between;
147
- padding: 0.5rem 0.75rem;
148
- margin-bottom: 0.25rem;
149
- border-radius: 0.25rem;
150
- background-color: var(--source-bg-color);
151
- border: 1px solid var(--source-border-color);
152
- transition: all 0.2s ease;
585
+ gap: 12px;
586
+ padding: 8px 18px;
587
+ font-size: 0.8125rem;
588
+ border-bottom: 1px solid var(--border-source-row);
589
+ transition: background 0.08s ease;
153
590
  }
154
591
 
155
- .ultra-settings-source-active {
156
- background-color: var(--source-active-bg-color);
157
- border-color: var(--source-active-border-color);
158
- }
592
+ .ultra-settings-source-row:last-child { border-bottom: none; }
159
593
 
160
- .ultra-settings-source-type {
161
- font-size: 0.875rem;
162
- font-weight: 500;
163
- color: var(--source-type-color);
594
+ .ultra-settings-source-row:hover { background: var(--accent-lighter); }
595
+
596
+ .ultra-settings-source-row.active { background: var(--active-bg); }
597
+
598
+ .ultra-settings-source-chip {
599
+ font-size: 0.625rem;
600
+ font-weight: 700;
164
601
  text-transform: uppercase;
165
- letter-spacing: 0.025em;
166
- min-width: 120px;
602
+ letter-spacing: 0.06em;
603
+ padding: 2px 8px;
604
+ border-radius: 3px;
605
+ flex-shrink: 0;
606
+ min-width: var(--chip-width, 56px);
607
+ text-align: center;
608
+ font-family: var(--font-mono);
167
609
  }
168
610
 
169
- .ultra-settings-source-value {
170
- font-family: monospace;
171
- font-size: 0.875rem;
172
- color: var(--source-value-color);
173
- font-weight: 550;
174
- flex: 1;
175
- margin: 0 0.75rem;
176
- word-break: break-all;
177
- }
611
+ .ultra-settings-chip-env { background: var(--src-env-bg); color: var(--src-env); border: 1px solid var(--src-env-border); }
612
+ .ultra-settings-chip-setting { background: var(--src-setting-bg); color: var(--src-setting); border: 1px solid var(--src-setting-border); }
613
+ .ultra-settings-chip-yaml { background: var(--src-yaml-bg); color: var(--src-yaml); border: 1px solid var(--src-yaml-border); }
614
+ .ultra-settings-chip-default { background: var(--src-default-bg); color: var(--src-default); border: 1px solid var(--src-default-border); }
178
615
 
179
- .ultra-settings-source-indicator {
616
+ .ultra-settings-source-key {
617
+ font-family: var(--font-mono);
180
618
  font-size: 0.75rem;
181
- font-weight: 600;
182
- color: var(--source-indicator-color);
183
- text-transform: uppercase;
184
- letter-spacing: 0.025em;
619
+ color: var(--text-secondary);
620
+ white-space: nowrap;
621
+ overflow: hidden;
622
+ text-overflow: ellipsis;
623
+ min-width: 0;
185
624
  }
186
625
 
187
- .ultra-settings-source-indicator::before {
188
- content: "● ";
189
- font-size: 1rem;
190
- }
626
+ .ultra-settings-source-eq { color: var(--text-tertiary); font-size: 0.75rem; flex-shrink: 0; }
191
627
 
192
- .ultra-settings-icon-info {
193
- color: var(--info-color);
194
- cursor: pointer;
628
+ .ultra-settings-source-val {
629
+ font-family: var(--font-mono);
630
+ font-size: 0.75rem;
631
+ color: var(--text-primary);
632
+ white-space: nowrap;
633
+ overflow: hidden;
634
+ text-overflow: ellipsis;
635
+ min-width: 0;
195
636
  }
196
637
 
197
- .ultra-settings-icon-not-set {
198
- color: var(--warning-color);
199
- cursor: pointer;
200
- }
638
+ .ultra-settings-source-val.not-set { color: var(--text-tertiary); font-style: italic; font-family: var(--font-ui); }
639
+ .ultra-settings-source-val.secret { color: var(--text-tertiary); letter-spacing: 2px; }
201
640
 
202
- .ultra-settings-icon-secret {
203
- color: var(--disabled-color);
204
- cursor: pointer;
641
+ .ultra-settings-source-badge {
642
+ margin-inline-start: auto;
643
+ font-size: 0.6875rem;
644
+ font-weight: 600;
645
+ white-space: nowrap;
646
+ flex-shrink: 0;
205
647
  }
206
648
 
649
+ .ultra-settings-sb-active { color: var(--active-color); }
650
+ .ultra-settings-sb-overridden { color: var(--overridden-color); }
651
+
207
652
  .ultra-settings-edit-link {
208
- color: var(--edit-link-color);
653
+ color: var(--accent);
209
654
  text-decoration: none;
210
- margin-left: 0.5rem;
655
+ margin-inline-start: 0.5rem;
211
656
  opacity: 0.7;
212
657
  transition: opacity 0.2s ease;
213
658
  display: inline-flex;
@@ -218,197 +663,571 @@ code.ultra-settings-field-data-value {
218
663
  opacity: 1;
219
664
  }
220
665
 
666
+ .ultra-settings-edit-link svg { width: 13px; height: 13px; }
667
+
668
+ /* ══════════════════════════════════════════
669
+ DETAIL PANEL
670
+ ══════════════════════════════════════════ */
671
+ .ultra-settings-panel-bg {
672
+ display: none;
673
+ position: fixed;
674
+ inset: 0;
675
+ background: var(--bg-overlay);
676
+ z-index: 100;
677
+ }
678
+ .ultra-settings-panel-bg.open { display: block; }
679
+
680
+ .ultra-settings-detail-panel {
681
+ position: fixed;
682
+ inset-inline-end: 0; top: 0; bottom: 0;
683
+ width: 480px;
684
+ max-width: 94vw;
685
+ background: var(--bg-card);
686
+ box-shadow: var(--shadow-lg);
687
+ z-index: 101;
688
+ transform: translateX(100%);
689
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
690
+ display: flex;
691
+ flex-direction: column;
692
+ border-inline-start: 1px solid var(--border-light);
693
+ }
694
+
695
+ .ultra-settings-panel-bg.open ~ .ultra-settings-detail-panel,
696
+ .ultra-settings-detail-panel.open { transform: translateX(0); }
697
+
698
+ .ultra-settings-dp-header {
699
+ display: flex;
700
+ align-items: center;
701
+ justify-content: space-between;
702
+ padding: 20px 24px;
703
+ border-bottom: 1px solid var(--border-light);
704
+ }
705
+
706
+ .ultra-settings-dp-header h3 {
707
+ font-family: var(--font-mono);
708
+ font-size: 1rem;
709
+ font-weight: 600;
710
+ color: var(--text-primary);
711
+ margin: 0;
712
+ }
713
+
714
+ .ultra-settings-dp-close {
715
+ width: 32px; height: 32px;
716
+ border-radius: 7px;
717
+ border: 1px solid var(--border-light);
718
+ background: transparent;
719
+ cursor: pointer;
720
+ display: flex;
721
+ align-items: center;
722
+ justify-content: center;
723
+ color: var(--text-tertiary);
724
+ transition: all 0.1s ease;
725
+ }
726
+
727
+ .ultra-settings-dp-close:hover {
728
+ background: var(--bg-code);
729
+ color: var(--text-secondary);
730
+ }
731
+
732
+ .ultra-settings-dp-close svg { width: 15px; height: 15px; }
733
+
734
+ .ultra-settings-dp-body { flex: 1; padding: 24px; overflow-y: auto; }
735
+
736
+ .ultra-settings-dp-value {
737
+ font-family: var(--font-mono);
738
+ font-size: 0.875rem;
739
+ color: var(--text-primary);
740
+ background: var(--bg-code);
741
+ border: 1px solid var(--border-light);
742
+ border-radius: 8px;
743
+ padding: 18px;
744
+ word-break: break-all;
745
+ white-space: pre-wrap;
746
+ line-height: 1.7;
747
+ }
748
+
749
+ .ultra-settings-dp-meta {
750
+ margin-top: 14px;
751
+ font-size: 0.8125rem;
752
+ color: var(--text-tertiary);
753
+ }
754
+ .ultra-settings-dp-meta span { font-weight: 600; color: var(--text-secondary); }
755
+
756
+ /* ══════════════════════════════════════════
757
+ DIALOG FALLBACK (standalone ConfigurationView)
758
+ ══════════════════════════════════════════ */
221
759
  .ultra-settings-dialog {
222
- min-width: 20rem;
760
+ min-width: 24rem;
761
+ max-width: 90vw;
223
762
  padding: 0;
224
- border: 1px solid var(--field-border-color);
225
- border-radius: 0.375rem;
763
+ border: none;
764
+ border-radius: 10px;
765
+ box-shadow: var(--shadow-lg);
766
+ animation: ultra-settings-dialog-show 0.2s ease-out;
767
+ background: var(--bg-card);
768
+ }
769
+
770
+ .ultra-settings-dialog::backdrop {
771
+ background-color: var(--bg-overlay);
772
+ animation: ultra-settings-backdrop-show 0.2s ease-out;
773
+ }
774
+
775
+ @keyframes ultra-settings-dialog-show {
776
+ from { opacity: 0; transform: scale(0.95) translateY(-10px); }
777
+ to { opacity: 1; transform: scale(1) translateY(0); }
778
+ }
779
+
780
+ @keyframes ultra-settings-backdrop-show {
781
+ from { opacity: 0; }
782
+ to { opacity: 1; }
226
783
  }
227
784
 
228
785
  .ultra-settings-dialog-header {
229
- padding: 0.5rem;
230
- background-color: var(--field-header-bg-color);
231
- color: var(--field-header-text-color);
232
- font-size: 1rem;
786
+ padding: 1rem 1.25rem;
233
787
  display: flex;
234
- align-items: top;
788
+ align-items: center;
789
+ border-bottom: 1px solid var(--border-light);
235
790
  }
236
791
 
237
792
  .ultra-settings-dialog-title {
238
793
  flex: 1;
239
- text-align: center;
240
- font-weight: 550;
794
+ font-family: var(--font-mono);
795
+ font-weight: 600;
796
+ font-size: 1rem;
797
+ color: var(--text-primary);
241
798
  }
242
799
 
243
800
  .ultra-settings-dialog-close {
244
- border: none;
245
- background: none;
246
- color: var(--field-header-text-color);
801
+ width: 32px; height: 32px;
802
+ border-radius: 7px;
803
+ border: 1px solid var(--border-light);
804
+ background: transparent;
247
805
  cursor: pointer;
248
- padding: 0.25rem;
806
+ display: flex;
807
+ align-items: center;
808
+ justify-content: center;
809
+ color: var(--text-tertiary);
810
+ transition: all 0.1s ease;
249
811
  }
250
812
 
813
+ .ultra-settings-dialog-close:hover {
814
+ background: var(--bg-code);
815
+ color: var(--text-secondary);
816
+ }
817
+
818
+ .ultra-settings-dialog-close svg { width: 15px; height: 15px; }
819
+
251
820
  .ultra-settings-dialog-body {
252
- padding: 1rem;
253
- background-color: var(--background-color);
254
- color: var(--text-color);
821
+ padding: 24px;
822
+ max-height: 60vh;
823
+ overflow-y: auto;
255
824
  }
256
825
 
257
- /* Dropdown Styles */
258
- .ultra-settings-dropdown {
259
- position: relative;
260
- display: inline-block;
261
- width: 100%;
262
- max-width: 400px;
826
+ .ultra-settings-dialog-body .ultra-settings-dialog-value {
827
+ display: block;
828
+ font-family: var(--font-mono);
829
+ font-size: 0.875rem;
830
+ color: var(--text-primary);
831
+ background: var(--bg-code);
832
+ border: 1px solid var(--border-light);
833
+ border-radius: 8px;
834
+ padding: 18px;
835
+ word-break: break-all;
836
+ white-space: pre-wrap;
837
+ line-height: 1.7;
263
838
  }
264
839
 
265
- .ultra-settings-dropdown-button {
266
- width: 100%;
267
- text-align: left;
268
- padding: 0.5rem 1rem;
269
- font-size: 1.25rem;
270
- font-weight: 500;
271
- background-color: var(--form-control-bg-color);
272
- color: var(--form-control-color);
273
- border: 1px solid var(--form-control-border-color);
274
- border-radius: 0.375rem;
840
+
841
+ /* ══════════════════════════════════════════
842
+ SUPER SETTINGS EDIT PANEL (slide-out)
843
+ ══════════════════════════════════════════ */
844
+ .ultra-settings-ss-edit-btn {
845
+ background: none;
846
+ border: none;
275
847
  cursor: pointer;
276
- display: flex;
277
- justify-content: space-between;
848
+ padding: 2px 4px;
849
+ color: var(--accent);
850
+ border-radius: 4px;
851
+ display: inline-flex;
278
852
  align-items: center;
853
+ transition: background 0.15s, color 0.15s;
279
854
  }
280
855
 
281
- .ultra-settings-dropdown-button::after {
282
- content: "";
283
- display: inline-block;
284
- width: 0;
285
- height: 0;
286
- margin-left: 0.5rem;
287
- vertical-align: middle;
288
- border-top: 4px solid;
289
- border-right: 4px solid transparent;
290
- border-left: 4px solid transparent;
856
+ .ultra-settings-ss-edit-btn:hover {
857
+ background: var(--accent);
858
+ color: #fff;
291
859
  }
292
860
 
293
- .ultra-settings-dropdown-menu {
294
- position: absolute;
295
- top: 100%;
296
- left: 0;
297
- z-index: 1000;
861
+ .ultra-settings-ss-panel-bg {
298
862
  display: none;
299
- min-width: 100%;
300
- padding: 0.5rem 0;
301
- margin: 0.125rem 0 0;
302
- font-size: 1rem;
303
- color: var(--text-color);
304
- text-align: left;
305
- list-style: none;
306
- background-color: var(--form-control-bg-color);
307
- background-clip: padding-box;
308
- border: 1px solid var(--form-control-border-color);
309
- border-radius: 0.375rem;
310
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
863
+ position: fixed;
864
+ inset: 0;
865
+ background: var(--bg-overlay);
866
+ z-index: 100;
867
+ }
868
+ .ultra-settings-ss-panel-bg.open { display: block; }
869
+
870
+ .ultra-settings-ss-panel {
871
+ position: fixed;
872
+ inset-inline-end: 0; top: 0; bottom: 0;
873
+ width: 480px;
874
+ max-width: 94vw;
875
+ background: var(--bg-card);
876
+ box-shadow: var(--shadow-lg);
877
+ z-index: 101;
878
+ transform: translateX(100%);
879
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
880
+ display: flex;
881
+ flex-direction: column;
882
+ border-inline-start: 1px solid var(--border-light);
311
883
  }
312
884
 
313
- .ultra-settings-search-container {
314
- padding: 0.5rem 1rem;
315
- border-bottom: 1px solid var(--form-control-border-color);
885
+ .ultra-settings-ss-panel-bg.open ~ .ultra-settings-ss-panel,
886
+ .ultra-settings-ss-panel.open { transform: translateX(0); }
887
+
888
+ /* ── Highlight animation after saving a setting ── */
889
+ @keyframes ultra-settings-border-highlight {
890
+ 0% { box-shadow: 0 0 0 2px var(--accent); }
891
+ 100% { box-shadow: 0 0 0 2px transparent; }
316
892
  }
317
893
 
318
- #config-search {
319
- width: 100%;
320
- padding: 0.375rem 0.75rem;
894
+ .ultra-settings-changed {
895
+ animation: ultra-settings-border-highlight 2s ease-out;
896
+ }
897
+
898
+ .ultra-settings-ss-external-link {
899
+ display: inline-block;
900
+ margin-top: 4px;
901
+ font-size: 0.75rem;
902
+ color: var(--accent);
903
+ text-decoration: none;
904
+ transition: opacity 0.15s;
905
+ }
906
+
907
+ .ultra-settings-ss-external-link:hover {
908
+ text-decoration: underline;
909
+ opacity: 0.85;
910
+ }
911
+
912
+ .ultra-settings-ss-loading {
913
+ text-align: center;
914
+ padding: 32px 16px;
915
+ color: var(--text-tertiary);
321
916
  font-size: 0.875rem;
322
- line-height: 1.5;
323
- color: var(--form-control-color);
324
- background-color: var(--value-bg-color);
325
- background-clip: padding-box;
326
- border: 1px solid var(--form-control-border-color);
327
- border-radius: 0.25rem;
917
+ }
918
+
919
+ .ultra-settings-ss-form {
920
+ display: flex;
921
+ flex-direction: column;
922
+ gap: 16px;
923
+ }
924
+
925
+ .ultra-settings-ss-field {
926
+ display: flex;
927
+ flex-direction: column;
928
+ gap: 6px;
929
+ }
930
+
931
+ .ultra-settings-ss-label {
932
+ font-size: 0.75rem;
933
+ font-weight: 600;
934
+ text-transform: uppercase;
935
+ letter-spacing: 0.05em;
936
+ color: var(--text-tertiary);
937
+ }
938
+
939
+ .ultra-settings-ss-input {
940
+ width: 100%;
941
+ padding: 8px 12px;
942
+ font-size: 0.8125rem;
943
+ font-family: var(--font-mono);
944
+ color: var(--text-primary);
945
+ background: var(--bg-code);
946
+ border: 1px solid var(--border-light);
947
+ border-radius: 6px;
948
+ transition: border-color 0.15s;
328
949
  box-sizing: border-box;
329
950
  }
330
951
 
331
- .ultra-settings-dropdown-list {
332
- list-style: none;
333
- padding: 0;
334
- margin: 0;
335
- max-height: 300px;
336
- overflow-y: auto;
952
+ .ultra-settings-ss-input:focus {
953
+ outline: none;
954
+ border-color: var(--accent);
955
+ }
956
+
957
+ .ultra-settings-ss-input[readonly] {
958
+ opacity: 0.7;
959
+ cursor: default;
960
+ }
961
+
962
+ select.ultra-settings-ss-input {
963
+ cursor: pointer;
964
+ -webkit-appearance: none;
965
+ appearance: none;
966
+ padding-inline-end: 28px;
967
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E");
968
+ background-repeat: no-repeat;
969
+ background-position: right 10px center;
970
+ }
971
+
972
+ textarea.ultra-settings-ss-input {
973
+ resize: vertical;
974
+ min-height: 36px;
975
+ }
976
+
977
+ input[type="number"].ultra-settings-ss-input {
978
+ -moz-appearance: textfield;
979
+ appearance: textfield;
980
+ }
981
+
982
+ input[type="number"].ultra-settings-ss-input::-webkit-inner-spin-button,
983
+ input[type="number"].ultra-settings-ss-input::-webkit-outer-spin-button {
984
+ opacity: 1;
337
985
  }
338
986
 
339
- .ultra-settings-dropdown-item {
987
+ .ultra-settings-ss-datetime-row {
340
988
  display: flex;
341
- align-items: center;
342
- padding: 0.5rem 1rem;
343
- clear: both;
344
- font-weight: 400;
345
- color: var(--form-control-color);
346
- text-align: inherit;
989
+ gap: 8px;
990
+ }
991
+
992
+ .ultra-settings-ss-datetime-row input[type="datetime-local"] {
993
+ flex: 1;
994
+ }
995
+
996
+ .ultra-settings-ss-tz-label {
997
+ flex-shrink: 0;
998
+ font-size: 0.8125rem;
999
+ color: var(--text-tertiary);
347
1000
  white-space: nowrap;
348
- background-color: transparent;
349
- border: 0;
350
- cursor: pointer;
1001
+ align-self: center;
351
1002
  }
352
1003
 
353
- .ultra-settings-dropdown-item:hover {
354
- background-color: var(--field-header-bg-color);
1004
+ .ultra-settings-ss-checkbox-label {
1005
+ display: flex;
1006
+ align-items: center;
1007
+ gap: 8px;
1008
+ font-size: 0.8125rem;
1009
+ color: var(--text-secondary);
1010
+ cursor: pointer;
355
1011
  }
356
1012
 
357
- .ultra-settings-check-icon {
358
- width: 1.5rem;
359
- display: inline-block;
360
- text-align: center;
361
- font-weight: bold;
1013
+ .ultra-settings-ss-checkbox-label input[type="checkbox"] {
1014
+ width: 16px;
1015
+ height: 16px;
1016
+ accent-color: var(--accent);
362
1017
  }
363
1018
 
364
- .ultra-settings-dropdown-item.selected .ultra-settings-check-icon::before {
365
- content: "✓";
1019
+ .ultra-settings-ss-errors {
1020
+ padding: 10px 12px;
1021
+ background: rgba(220,53,69,0.1);
1022
+ border: 1px solid rgba(220,53,69,0.3);
1023
+ border-radius: 6px;
1024
+ color: #dc3545;
1025
+ font-size: 0.8125rem;
1026
+ line-height: 1.4;
366
1027
  }
367
1028
 
368
- .ultra-settings-title {
1029
+ .ultra-settings-ss-error-list {
369
1030
  margin: 0;
370
- font-size: 1.25rem;
371
- font-weight: 500;
372
- color: var(--text-color);
1031
+ padding-left: 1.2em;
1032
+ list-style: disc;
373
1033
  }
374
1034
 
375
- /* Configuration List Styles */
376
- .ultra-settings-configuration-list {
377
- display: grid;
378
- grid-template-columns: repeat(auto-fill, minmax(max(300px, 30%), 1fr));
379
- gap: 1.5rem;
380
- margin-top: 1.5rem;
1035
+ .ultra-settings-ss-actions {
1036
+ display: flex;
1037
+ justify-content: flex-end;
1038
+ gap: 8px;
1039
+ padding-top: 4px;
381
1040
  }
382
1041
 
383
- .ultra-settings-configuration-summary {
384
- background-color: var(--field-bg-color);
385
- border: 1px solid var(--field-border-color);
386
- border-radius: 0.5rem;
387
- padding: 1.5rem;
388
- transition: transform 0.2s ease, box-shadow 0.2s ease;
389
- overflow: hidden;
1042
+ .ultra-settings-ss-btn {
1043
+ padding: 8px 20px;
1044
+ font-size: 0.8125rem;
1045
+ font-weight: 600;
1046
+ border-radius: 6px;
1047
+ border: 1px solid var(--border-light);
1048
+ cursor: pointer;
1049
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
1050
+ font-family: var(--font-ui);
390
1051
  }
391
1052
 
392
- .ultra-settings-configuration-summary:hover {
393
- transform: translateY(-2px);
394
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.1);
1053
+ .ultra-settings-ss-btn-cancel {
1054
+ background: transparent;
1055
+ color: var(--text-secondary);
395
1056
  }
396
1057
 
397
- .ultra-settings-configuration-title {
398
- display: block;
399
- font-size: 1.25rem;
400
- font-weight: 600;
401
- color: var(--description-color);
1058
+ .ultra-settings-ss-btn-cancel:hover {
1059
+ background: var(--bg-code);
1060
+ }
1061
+
1062
+ .ultra-settings-ss-btn-save {
1063
+ background: var(--accent);
1064
+ color: #fff;
1065
+ border-color: var(--accent);
1066
+ }
1067
+
1068
+ .ultra-settings-ss-btn-save:hover {
1069
+ filter: brightness(1.1);
1070
+ }
1071
+
1072
+ .ultra-settings-ss-btn-save:disabled {
1073
+ opacity: 0.6;
1074
+ cursor: not-allowed;
1075
+ }
1076
+
1077
+ @keyframes ultra-settings-spin {
1078
+ to { transform: rotate(360deg); }
1079
+ }
1080
+
1081
+ .ultra-settings-spinner {
1082
+ width: 1em;
1083
+ height: 1em;
1084
+ animation: ultra-settings-spin 0.8s linear infinite;
1085
+ vertical-align: middle;
1086
+ }
1087
+
1088
+ /* ── History view inside edit panel ── */
1089
+ .ultra-settings-ss-history-link-wrap {
1090
+ padding-top: 2px;
1091
+ }
1092
+
1093
+ .ultra-settings-ss-history-link {
1094
+ font-size: 0.8125rem;
1095
+ color: var(--accent);
402
1096
  text-decoration: none;
403
- margin-bottom: 0.75rem;
1097
+ cursor: pointer;
1098
+ transition: opacity 0.15s;
404
1099
  }
405
1100
 
406
- .ultra-settings-configuration-title:hover {
1101
+ .ultra-settings-ss-history-link:hover {
407
1102
  text-decoration: underline;
1103
+ opacity: 0.85;
408
1104
  }
409
1105
 
410
- .ultra-settings-configuration-summary p {
411
- margin: 0;
412
- color: var(--description-color);
1106
+ .ultra-settings-ss-history {
1107
+ display: flex;
1108
+ flex-direction: column;
1109
+ gap: 16px;
1110
+ }
1111
+
1112
+ .ultra-settings-ss-history-entry {
1113
+ background: var(--bg-code);
1114
+ border: 1px solid var(--border-light);
1115
+ border-radius: 8px;
1116
+ padding: 12px 14px;
1117
+ font-size: 0.8125rem;
413
1118
  line-height: 1.5;
414
- }
1119
+ margin-bottom: 12px;
1120
+ }
1121
+
1122
+ .ultra-settings-ss-history-entry:last-child {
1123
+ margin-bottom: 0;
1124
+ }
1125
+
1126
+ .ultra-settings-ss-history-entry-header {
1127
+ display: flex;
1128
+ align-items: center;
1129
+ gap: 6px;
1130
+ color: var(--text-tertiary);
1131
+ font-size: 0.75rem;
1132
+ margin-bottom: 6px;
1133
+ flex-wrap: wrap;
1134
+ }
1135
+
1136
+ .ultra-settings-ss-history-entry-time {
1137
+ font-weight: 600;
1138
+ color: var(--text-secondary);
1139
+ }
1140
+
1141
+ .ultra-settings-ss-history-entry-who {
1142
+ color: var(--text-secondary);
1143
+ }
1144
+
1145
+ .ultra-settings-ss-history-entry-badge {
1146
+ font-size: 0.625rem;
1147
+ font-weight: 700;
1148
+ text-transform: uppercase;
1149
+ letter-spacing: 0.05em;
1150
+ padding: 1px 6px;
1151
+ border-radius: 3px;
1152
+ }
1153
+
1154
+ .ultra-settings-ss-history-entry-badge.deleted {
1155
+ background: rgba(220,53,69,0.1);
1156
+ color: #dc3545;
1157
+ border: 1px solid rgba(220,53,69,0.3);
1158
+ }
1159
+
1160
+ .ultra-settings-ss-history-entry-badge.created {
1161
+ background: var(--accent-light);
1162
+ color: var(--accent);
1163
+ border: 1px solid var(--accent);
1164
+ }
1165
+
1166
+ .ultra-settings-ss-history-entry-value {
1167
+ font-family: var(--font-mono);
1168
+ font-size: 0.75rem;
1169
+ color: var(--text-primary);
1170
+ word-break: break-all;
1171
+ white-space: pre-wrap;
1172
+ }
1173
+
1174
+ .ultra-settings-ss-history-entry-value.nil {
1175
+ color: var(--text-tertiary);
1176
+ font-style: italic;
1177
+ font-family: var(--font-ui);
1178
+ }
1179
+
1180
+ .ultra-settings-ss-history-empty {
1181
+ text-align: center;
1182
+ padding: 24px 16px;
1183
+ color: var(--text-tertiary);
1184
+ font-size: 0.875rem;
1185
+ }
1186
+
1187
+ .ultra-settings-ss-history-pagination {
1188
+ display: flex;
1189
+ justify-content: space-between;
1190
+ gap: 8px;
1191
+ padding-top: 4px;
1192
+ }
1193
+
1194
+ /* ══════════════════════════════════════════
1195
+ RESPONSIVE
1196
+ ══════════════════════════════════════════ */
1197
+ @media (max-width: 640px) {
1198
+ .ultra-settings-topbar {
1199
+ padding: 16px 16px 8px;
1200
+ }
1201
+ .ultra-settings-config-list {
1202
+ padding: 8px 16px 40px;
1203
+ }
1204
+ .ultra-settings-config-section {
1205
+ padding: 0 16px 40px;
1206
+ }
1207
+ .ultra-settings-config-header {
1208
+ padding: 20px 16px 12px;
1209
+ margin: 0 -16px 20px;
1210
+ }
1211
+ }
1212
+
1213
+ /* ══════════════════════════════════════════
1214
+ RTL OVERRIDES
1215
+ ══════════════════════════════════════════
1216
+ CSS logical properties handle most LTR<>RTL
1217
+ mirroring automatically. The rules below cover
1218
+ transform and background-position values that
1219
+ logical properties cannot express.
1220
+ ══════════════════════════════════════════ */
1221
+
1222
+ /* Detail panel: slides in from the inline-end edge */
1223
+ [dir="rtl"] .ultra-settings-detail-panel { transform: translateX(-100%); }
1224
+ [dir="rtl"] .ultra-settings-panel-bg.open ~ .ultra-settings-detail-panel,
1225
+ [dir="rtl"] .ultra-settings-detail-panel.open { transform: translateX(0); }
1226
+
1227
+ /* SuperSettings panel: slides in from the inline-end edge */
1228
+ [dir="rtl"] .ultra-settings-ss-panel { transform: translateX(-100%); }
1229
+ [dir="rtl"] .ultra-settings-ss-panel-bg.open ~ .ultra-settings-ss-panel,
1230
+ [dir="rtl"] .ultra-settings-ss-panel.open { transform: translateX(0); }
1231
+
1232
+ /* Select dropdown arrow */
1233
+ [dir="rtl"] select.ultra-settings-ss-input { background-position: left 10px center; }