ultra_settings 2.8.1 → 2.9.1

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -2
  3. data/README.md +40 -1
  4. data/VERSION +1 -1
  5. data/app/AGENTS.md +7 -0
  6. data/app/_config_description.html.erb +22 -25
  7. data/app/_config_list.html.erb +2 -14
  8. data/app/_data_source.html.erb +43 -29
  9. data/app/application.css +1019 -340
  10. data/app/application.js +825 -90
  11. data/app/application_vars.css.erb +136 -91
  12. data/app/configuration.html.erb +59 -51
  13. data/app/index.html.erb +164 -20
  14. data/app/layout.css +81 -16
  15. data/app/layout.html.erb +67 -5
  16. data/app/layout_vars.css.erb +29 -5
  17. data/app/locales/ar.json +71 -0
  18. data/app/locales/cs.json +71 -0
  19. data/app/locales/da.json +71 -0
  20. data/app/locales/de.json +71 -0
  21. data/app/locales/el.json +71 -0
  22. data/app/locales/en.json +85 -0
  23. data/app/locales/es.json +71 -0
  24. data/app/locales/fa.json +71 -0
  25. data/app/locales/fr.json +71 -0
  26. data/app/locales/gd.json +71 -0
  27. data/app/locales/he.json +71 -0
  28. data/app/locales/hi.json +71 -0
  29. data/app/locales/it.json +71 -0
  30. data/app/locales/ja.json +71 -0
  31. data/app/locales/ko.json +71 -0
  32. data/app/locales/lt.json +71 -0
  33. data/app/locales/nb.json +71 -0
  34. data/app/locales/nl.json +71 -0
  35. data/app/locales/pl.json +71 -0
  36. data/app/locales/pt-br.json +71 -0
  37. data/app/locales/pt.json +71 -0
  38. data/app/locales/ru.json +71 -0
  39. data/app/locales/sv.json +71 -0
  40. data/app/locales/ta.json +71 -0
  41. data/app/locales/tr.json +71 -0
  42. data/app/locales/uk.json +71 -0
  43. data/app/locales/ur.json +71 -0
  44. data/app/locales/vi.json +71 -0
  45. data/app/locales/zh-cn.json +71 -0
  46. data/app/locales/zh-tw.json +71 -0
  47. data/lib/ultra_settings/application_view.rb +21 -3
  48. data/lib/ultra_settings/coerce.rb +0 -6
  49. data/lib/ultra_settings/config_helper.rb +4 -4
  50. data/lib/ultra_settings/configuration.rb +14 -4
  51. data/lib/ultra_settings/configuration_view.rb +114 -92
  52. data/lib/ultra_settings/mini_i18n.rb +110 -0
  53. data/lib/ultra_settings/rack_app.rb +51 -1
  54. data/lib/ultra_settings/version.rb +1 -1
  55. data/lib/ultra_settings/web_view.rb +33 -2
  56. data/lib/ultra_settings.rb +56 -22
  57. data/ultra_settings.gemspec +1 -0
  58. metadata +33 -3
  59. data/AGENTS.md +0 -191
  60. data/app/_select_menu.html.erb +0 -53
data/app/application.css CHANGED
@@ -1,299 +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;
39
+ }
40
+
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;
21
50
  }
22
51
 
23
- .ultra-settings-config-file-path {
24
- font-family: monospace;
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 {
37
- display: flex;
38
- flex-direction: column;
39
- gap: 1.75rem;
70
+ .ultra-settings-search-wrap input:focus {
71
+ border-color: var(--accent);
72
+ box-shadow: 0 0 0 2px var(--accent-glow);
40
73
  }
41
74
 
42
- .ultra-settings-fields svg {
43
- vertical-align: middle;
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;
44
92
  }
45
93
 
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;
94
+ .ultra-settings-search-clear svg {
95
+ width: 14px;
96
+ height: 14px;
51
97
  }
52
98
 
53
- .ultra-settings-field-header {
99
+ .ultra-settings-search-clear:hover {
100
+ background: var(--bg-code);
101
+ color: var(--text-secondary);
102
+ }
103
+
104
+ .ultra-settings-search-clear.visible {
54
105
  display: flex;
55
- justify-content: space-between;
56
- 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);
60
106
  }
61
107
 
62
- .ultra-settings-field-name {
108
+ /* ══════════════════════════════════════════
109
+ LANGUAGE MENU (in footer)
110
+ ══════════════════════════════════════════ */
111
+ .ultra-settings-language-menu {
112
+ position: relative;
113
+ display: block;
114
+ flex-shrink: 0;
115
+ }
116
+
117
+ .ultra-settings-language-menu > summary {
118
+ list-style: none;
119
+ }
120
+
121
+ .ultra-settings-language-menu > summary::-webkit-details-marker {
122
+ display: none;
123
+ }
124
+
125
+ .ultra-settings-language-trigger {
63
126
  display: flex;
64
127
  align-items: center;
65
- gap: 0.5rem;
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;
66
141
  }
67
142
 
68
- .ultra-settings-field-name code {
69
- font-family: monospace;
70
- font-size: 1rem;
71
- font-weight: 600;
72
- color: var(--code-color);
143
+ .ultra-settings-language-trigger:hover {
144
+ border-color: var(--accent);
145
+ color: var(--text-primary);
73
146
  }
74
147
 
75
- .ultra-settings-field-type {
76
- font-size: 0.875rem;
77
- font-weight: 600;
78
- color: var(--type-color);
79
- text-transform: uppercase;
80
- letter-spacing: 0.025em;
148
+ .ultra-settings-language-trigger:focus-visible {
149
+ outline: 2px solid var(--accent);
150
+ outline-offset: 2px;
81
151
  }
82
152
 
83
- .ultra-settings-field-badge {
84
- display: inline-block;
85
- padding: 0.125rem 0.5rem;
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;
86
172
  font-size: 0.75rem;
173
+ color: inherit;
87
174
  font-weight: 500;
88
- text-transform: uppercase;
89
- letter-spacing: 0.025em;
90
- border-radius: 0.25rem;
175
+ white-space: nowrap;
176
+ overflow: hidden;
177
+ text-overflow: ellipsis;
91
178
  }
92
179
 
93
- .ultra-settings-badge-secret {
94
- background-color: var(--secret-badge-bg-color);
95
- color: var(--secret-badge-text-color);
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;
96
186
  }
97
187
 
98
- .ultra-settings-badge-static {
99
- background-color: var(--static-badge-bg-color);
100
- color: var(--static-badge-text-color);
188
+ .ultra-settings-language-trigger-caret svg {
189
+ width: 100%;
190
+ height: 100%;
101
191
  }
102
192
 
103
- .ultra-settings-field-value {
104
- padding: 1rem;
105
- background-color: var(--value-bg-color);
106
- border-bottom: 1px solid var(--field-border-color);
193
+ .ultra-settings-language-menu[open] .ultra-settings-language-trigger {
194
+ border-color: var(--accent);
195
+ color: var(--text-primary);
107
196
  }
108
197
 
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);
198
+ .ultra-settings-language-menu[open] .ultra-settings-language-trigger-caret {
199
+ opacity: 0.8;
200
+ transform: rotate(180deg);
118
201
  }
119
202
 
120
- .ultra-settings-nil-value {
121
- font-style: italic;
122
- color: var(--nil-color);
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;
123
224
  }
124
225
 
125
- .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;
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;
133
236
  }
134
237
 
135
- .ultra-settings-field-description svg {
136
- margin-top: 0.125rem;
238
+ .ultra-settings-language-option {
239
+ width: 100%;
240
+ display: flex;
241
+ align-items: center;
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;
137
253
  }
138
254
 
139
- .ultra-settings-description-text {
255
+ .ultra-settings-language-option-name {
140
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;
141
264
  }
142
265
 
143
- .ultra-settings-field-sources {
144
- padding: 0.5rem;
266
+ .ultra-settings-language-option:hover,
267
+ .ultra-settings-language-option:focus-visible {
268
+ background: var(--bg-code);
145
269
  }
146
270
 
147
- .ultra-settings-source {
148
- display: flex;
149
- align-items: center;
150
- justify-content: space-between;
151
- padding: 0.5rem 0.75rem;
152
- margin-bottom: 0.25rem;
153
- border-radius: 0.25rem;
154
- background-color: var(--source-bg-color);
155
- border: 1px solid var(--source-border-color);
156
- transition: all 0.2s ease;
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;
157
279
  }
158
280
 
159
- .ultra-settings-source-active {
160
- background-color: var(--source-active-bg-color);
161
- border-color: var(--source-active-border-color);
281
+ .ultra-settings-language-option-check svg {
282
+ width: 100%;
283
+ height: 100%;
162
284
  }
163
285
 
164
- .ultra-settings-source-type {
165
- font-size: 0.875rem;
166
- font-weight: 500;
167
- color: var(--source-type-color);
168
- text-transform: uppercase;
169
- letter-spacing: 0.025em;
170
- min-width: 120px;
286
+ .ultra-settings-language-option.is-active {
287
+ background: var(--accent-light);
171
288
  }
172
289
 
173
- .ultra-settings-source-value-container {
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;
174
320
  display: flex;
175
- align-items: center;
176
- gap: 0.5rem;
177
- flex: 1;
178
- margin: 0 0.75rem;
321
+ flex-direction: column;
322
+ gap: 8px;
179
323
  }
180
324
 
181
- .ultra-settings-source-value {
182
- font-family: monospace;
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 {
346
+ font-size: 1rem;
347
+ font-weight: 600;
348
+ color: var(--text-primary);
349
+ letter-spacing: -0.01em;
350
+ }
351
+
352
+ .ultra-settings-config-list-desc {
183
353
  font-size: 0.875rem;
184
- color: var(--source-value-color);
185
- font-weight: 550;
186
- word-break: break-all;
354
+ color: var(--text-secondary);
355
+ margin-top: 4px;
356
+ line-height: 1.5;
187
357
  }
188
358
 
189
- .ultra-settings-source-indicator {
359
+ .ultra-settings-config-list-count {
190
360
  font-size: 0.75rem;
191
- font-weight: 600;
192
- color: var(--source-indicator-color);
193
- text-transform: uppercase;
194
- letter-spacing: 0.025em;
361
+ color: var(--text-tertiary);
362
+ margin-top: 6px;
363
+ display: inline-block;
195
364
  }
196
365
 
197
- .ultra-settings-source-indicator::before {
198
- content: "● ";
199
- font-size: 1rem;
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;
200
380
  }
201
381
 
202
- .ultra-settings-source-overridden {
203
- background-color: var(--source-overridden-bg-color);
204
- border-color: var(--source-overridden-border-color);
382
+ /* ══════════════════════════════════════════
383
+ CONFIG SECTIONS
384
+ ══════════════════════════════════════════ */
385
+ .ultra-settings-config-section {
386
+ padding: 0;
387
+ max-width: 940px;
205
388
  }
206
389
 
207
- .ultra-settings-source-overridden .ultra-settings-source-type {
208
- color: var(--source-overridden-type-color);
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);
209
397
  }
210
398
 
211
- .ultra-settings-source-overridden .ultra-settings-source-value-container .ultra-settings-source-value {
212
- color: var(--source-overridden-value-color);
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;
213
407
  }
214
408
 
215
- .ultra-settings-source-override {
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);
216
429
  font-size: 0.75rem;
217
- font-weight: 600;
218
- color: var(--source-overridden-warning-color);
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 {
219
444
  display: flex;
220
- align-items: center;
221
- gap: 0.25rem;
445
+ flex-direction: column;
446
+ gap: 12px;
222
447
  }
223
448
 
224
- .ultra-settings-source-override svg {
225
- flex-shrink: 0;
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;
226
456
  }
227
457
 
228
- .ultra-settings-source-override-text {
229
- text-transform: uppercase;
230
- letter-spacing: 0.025em;
458
+ .ultra-settings-field-card:hover {
459
+ box-shadow: var(--shadow-sm);
231
460
  }
232
461
 
233
- .ultra-settings-icon-info {
234
- color: var(--info-color);
235
- cursor: pointer;
236
- padding: 0.25rem;
237
- border-radius: 0.25rem;
238
- transition: all 0.15s ease;
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 {
239
479
  display: inline-flex;
240
480
  align-items: center;
241
- justify-content: center;
481
+ gap: 5px;
242
482
  }
243
483
 
244
- .ultra-settings-icon-info:hover {
245
- background-color: var(--source-bg-color);
246
- transform: scale(1.15);
484
+ .ultra-settings-type-dot {
485
+ width: 8px;
486
+ height: 8px;
487
+ border-radius: 2px;
488
+ flex-shrink: 0;
247
489
  }
248
490
 
249
- .ultra-settings-icon-info:active {
250
- transform: scale(1.05);
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);
251
505
  }
252
506
 
253
- .ultra-settings-icon-not-set {
254
- color: var(--warning-color);
255
- cursor: pointer;
256
- padding: 0.25rem;
257
- border-radius: 0.25rem;
258
- transition: all 0.15s ease;
507
+ .ultra-settings-badge {
259
508
  display: inline-flex;
260
509
  align-items: center;
261
- justify-content: center;
510
+ gap: 4px;
511
+ padding: 2px 8px;
512
+ border-radius: 4px;
513
+ font-size: 0.625rem;
514
+ font-weight: 700;
515
+ text-transform: uppercase;
516
+ letter-spacing: 0.05em;
517
+ line-height: 1.6;
262
518
  }
263
519
 
264
- .ultra-settings-icon-not-set:hover {
265
- background-color: var(--source-bg-color);
266
- transform: scale(1.15);
520
+ .ultra-settings-badge svg { width: 10px; height: 10px; }
521
+
522
+ .ultra-settings-badge-secret {
523
+ background: var(--badge-secret-bg);
524
+ color: var(--badge-secret-text);
525
+ border: 1px solid var(--badge-secret-border);
267
526
  }
268
527
 
269
- .ultra-settings-icon-not-set:active {
270
- transform: scale(1.05);
528
+ .ultra-settings-badge-static {
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%;
271
538
  }
272
539
 
273
- .ultra-settings-icon-secret {
274
- color: var(--disabled-color);
540
+ .ultra-settings-field-value {
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;
275
553
  cursor: pointer;
276
- padding: 0.25rem;
277
- border-radius: 0.25rem;
278
- transition: all 0.15s ease;
279
- display: inline-flex;
554
+ display: block;
555
+ transition: all 0.12s ease;
556
+ }
557
+
558
+ .ultra-settings-field-value:hover {
559
+ border-color: var(--accent);
560
+ background: var(--accent-light);
561
+ }
562
+
563
+ .ultra-settings-field-value.nil {
564
+ color: var(--text-tertiary);
565
+ font-style: italic;
566
+ }
567
+
568
+ /* Description */
569
+ .ultra-settings-field-description {
570
+ padding: 0 18px 14px 18px;
571
+ font-size: 0.875rem;
572
+ color: var(--text-secondary);
573
+ line-height: 1.6;
574
+ }
575
+
576
+ /* Sources — Compact rows */
577
+ .ultra-settings-field-sources {
578
+ border-top: 1px solid var(--border-light);
579
+ padding: 0;
580
+ }
581
+
582
+ .ultra-settings-source-row {
583
+ display: flex;
280
584
  align-items: center;
281
- justify-content: center;
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;
282
590
  }
283
591
 
284
- .ultra-settings-icon-secret:hover {
285
- background-color: var(--source-bg-color);
286
- transform: scale(1.15);
592
+ .ultra-settings-source-row:last-child { border-bottom: none; }
593
+
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;
601
+ text-transform: uppercase;
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);
609
+ }
610
+
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); }
615
+
616
+ .ultra-settings-source-key {
617
+ font-family: var(--font-mono);
618
+ font-size: 0.75rem;
619
+ color: var(--text-secondary);
620
+ white-space: nowrap;
621
+ overflow: hidden;
622
+ text-overflow: ellipsis;
623
+ min-width: 0;
624
+ }
625
+
626
+ .ultra-settings-source-eq { color: var(--text-tertiary); font-size: 0.75rem; flex-shrink: 0; }
627
+
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;
287
636
  }
288
637
 
289
- .ultra-settings-icon-secret:active {
290
- transform: scale(1.05);
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; }
640
+
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;
291
647
  }
292
648
 
649
+ .ultra-settings-sb-active { color: var(--active-color); }
650
+ .ultra-settings-sb-overridden { color: var(--overridden-color); }
651
+
293
652
  .ultra-settings-edit-link {
294
- color: var(--edit-link-color);
653
+ color: var(--accent);
295
654
  text-decoration: none;
296
- margin-left: 0.5rem;
655
+ margin-inline-start: 0.5rem;
297
656
  opacity: 0.7;
298
657
  transition: opacity 0.2s ease;
299
658
  display: inline-flex;
@@ -304,251 +663,571 @@ code.ultra-settings-field-data-value {
304
663
  opacity: 1;
305
664
  }
306
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
+ ══════════════════════════════════════════ */
307
759
  .ultra-settings-dialog {
308
760
  min-width: 24rem;
309
761
  max-width: 90vw;
310
762
  padding: 0;
311
763
  border: none;
312
- border-radius: 0.5rem;
313
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
764
+ border-radius: 10px;
765
+ box-shadow: var(--shadow-lg);
314
766
  animation: ultra-settings-dialog-show 0.2s ease-out;
767
+ background: var(--bg-card);
315
768
  }
316
769
 
317
770
  .ultra-settings-dialog::backdrop {
318
- background-color: rgba(0, 0, 0, 0.5);
771
+ background-color: var(--bg-overlay);
319
772
  animation: ultra-settings-backdrop-show 0.2s ease-out;
320
773
  }
321
774
 
322
775
  @keyframes ultra-settings-dialog-show {
323
- from {
324
- opacity: 0;
325
- transform: scale(0.95) translateY(-10px);
326
- }
327
- to {
328
- opacity: 1;
329
- transform: scale(1) translateY(0);
330
- }
776
+ from { opacity: 0; transform: scale(0.95) translateY(-10px); }
777
+ to { opacity: 1; transform: scale(1) translateY(0); }
331
778
  }
332
779
 
333
780
  @keyframes ultra-settings-backdrop-show {
334
- from {
335
- opacity: 0;
336
- }
337
- to {
338
- opacity: 1;
339
- }
781
+ from { opacity: 0; }
782
+ to { opacity: 1; }
340
783
  }
341
784
 
342
785
  .ultra-settings-dialog-header {
343
786
  padding: 1rem 1.25rem;
344
- background-color: var(--field-header-bg-color);
345
- color: var(--field-header-text-color);
346
- font-size: 1rem;
347
787
  display: flex;
348
788
  align-items: center;
349
- border-bottom: 1px solid var(--field-border-color);
789
+ border-bottom: 1px solid var(--border-light);
350
790
  }
351
791
 
352
792
  .ultra-settings-dialog-title {
353
793
  flex: 1;
794
+ font-family: var(--font-mono);
354
795
  font-weight: 600;
355
- font-size: 1.125rem;
796
+ font-size: 1rem;
797
+ color: var(--text-primary);
356
798
  }
357
799
 
358
800
  .ultra-settings-dialog-close {
359
- border: none;
360
- background: none;
361
- 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;
362
805
  cursor: pointer;
363
- padding: 0.25rem;
364
- border-radius: 0.25rem;
365
806
  display: flex;
366
807
  align-items: center;
367
808
  justify-content: center;
368
- transition: background-color 0.15s ease;
369
- margin-left: 0.5rem;
809
+ color: var(--text-tertiary);
810
+ transition: all 0.1s ease;
370
811
  }
371
812
 
372
813
  .ultra-settings-dialog-close:hover {
373
- background-color: var(--source-bg-color);
814
+ background: var(--bg-code);
815
+ color: var(--text-secondary);
374
816
  }
375
817
 
376
- .ultra-settings-dialog-close:active {
377
- transform: scale(0.95);
378
- }
818
+ .ultra-settings-dialog-close svg { width: 15px; height: 15px; }
379
819
 
380
820
  .ultra-settings-dialog-body {
381
- padding: 1.5rem;
382
- background-color: var(--background-color);
383
- color: var(--text-color);
821
+ padding: 24px;
384
822
  max-height: 60vh;
385
823
  overflow-y: auto;
386
824
  }
387
825
 
388
- .ultra-settings-dialog-body .ultra-settings-field-data-value {
826
+ .ultra-settings-dialog-body .ultra-settings-dialog-value {
389
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;
390
835
  word-break: break-all;
391
836
  white-space: pre-wrap;
392
- font-size: 0.9375rem;
393
- line-height: 1.6;
394
- padding: 0.75rem 1rem;
837
+ line-height: 1.7;
395
838
  }
396
839
 
397
- /* Dropdown Styles */
398
- .ultra-settings-dropdown {
399
- position: relative;
400
- display: inline-block;
401
- width: 100%;
402
- max-width: 400px;
403
- }
404
840
 
405
- .ultra-settings-dropdown-button {
406
- width: 100%;
407
- text-align: left;
408
- padding: 0.5rem 1rem;
409
- font-size: 1.25rem;
410
- font-weight: 500;
411
- background-color: var(--form-control-bg-color);
412
- color: var(--form-control-color);
413
- border: 1px solid var(--form-control-border-color);
414
- border-radius: 0.375rem;
841
+ /* ══════════════════════════════════════════
842
+ SUPER SETTINGS EDIT PANEL (slide-out)
843
+ ══════════════════════════════════════════ */
844
+ .ultra-settings-ss-edit-btn {
845
+ background: none;
846
+ border: none;
415
847
  cursor: pointer;
416
- display: flex;
417
- justify-content: space-between;
848
+ padding: 2px 4px;
849
+ color: var(--accent);
850
+ border-radius: 4px;
851
+ display: inline-flex;
418
852
  align-items: center;
853
+ transition: background 0.15s, color 0.15s;
419
854
  }
420
855
 
421
- .ultra-settings-dropdown-button::after {
422
- content: "";
423
- display: inline-block;
424
- width: 0;
425
- height: 0;
426
- margin-left: 0.5rem;
427
- vertical-align: middle;
428
- border-top: 4px solid;
429
- border-right: 4px solid transparent;
430
- border-left: 4px solid transparent;
856
+ .ultra-settings-ss-edit-btn:hover {
857
+ background: var(--accent);
858
+ color: #fff;
431
859
  }
432
860
 
433
- .ultra-settings-dropdown-menu {
434
- position: absolute;
435
- top: 100%;
436
- left: 0;
437
- z-index: 1000;
861
+ .ultra-settings-ss-panel-bg {
438
862
  display: none;
439
- min-width: 100%;
440
- padding: 0.5rem 0;
441
- margin: 0.125rem 0 0;
442
- font-size: 1rem;
443
- color: var(--text-color);
444
- text-align: left;
445
- list-style: none;
446
- background-color: var(--form-control-bg-color);
447
- background-clip: padding-box;
448
- border: 1px solid var(--form-control-border-color);
449
- border-radius: 0.375rem;
450
- 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);
451
883
  }
452
884
 
453
- .ultra-settings-search-container {
454
- padding: 0.5rem 1rem;
455
- 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; }
456
892
  }
457
893
 
458
- #config-search {
459
- width: 100%;
460
- 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);
461
916
  font-size: 0.875rem;
462
- line-height: 1.5;
463
- color: var(--form-control-color);
464
- background-color: var(--value-bg-color);
465
- background-clip: padding-box;
466
- border: 1px solid var(--form-control-border-color);
467
- 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;
468
949
  box-sizing: border-box;
469
950
  }
470
951
 
471
- .ultra-settings-dropdown-list {
472
- list-style: none;
473
- padding: 0;
474
- margin: 0;
475
- max-height: 300px;
476
- 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;
477
970
  }
478
971
 
479
- .ultra-settings-dropdown-item {
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;
985
+ }
986
+
987
+ .ultra-settings-ss-datetime-row {
480
988
  display: flex;
481
- align-items: center;
482
- padding: 0.5rem 1rem;
483
- clear: both;
484
- font-weight: 400;
485
- color: var(--form-control-color);
486
- 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);
487
1000
  white-space: nowrap;
488
- background-color: transparent;
489
- border: 0;
490
- cursor: pointer;
1001
+ align-self: center;
491
1002
  }
492
1003
 
493
- .ultra-settings-dropdown-item:hover {
494
- 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;
495
1011
  }
496
1012
 
497
- .ultra-settings-check-icon {
498
- width: 1.5rem;
499
- display: inline-block;
500
- text-align: center;
501
- font-weight: bold;
1013
+ .ultra-settings-ss-checkbox-label input[type="checkbox"] {
1014
+ width: 16px;
1015
+ height: 16px;
1016
+ accent-color: var(--accent);
502
1017
  }
503
1018
 
504
- .ultra-settings-dropdown-item.selected .ultra-settings-check-icon::before {
505
- 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;
506
1027
  }
507
1028
 
508
- .ultra-settings-title {
1029
+ .ultra-settings-ss-error-list {
509
1030
  margin: 0;
510
- font-size: 1.25rem;
511
- font-weight: 500;
512
- color: var(--text-color);
1031
+ padding-left: 1.2em;
1032
+ list-style: disc;
513
1033
  }
514
1034
 
515
- /* Configuration List Styles */
516
- .ultra-settings-configuration-list {
517
- display: grid;
518
- grid-template-columns: repeat(auto-fill, minmax(max(300px, 30%), 1fr));
519
- gap: 1.5rem;
520
- margin-top: 1.5rem;
1035
+ .ultra-settings-ss-actions {
1036
+ display: flex;
1037
+ justify-content: flex-end;
1038
+ gap: 8px;
1039
+ padding-top: 4px;
521
1040
  }
522
1041
 
523
- .ultra-settings-configuration-summary {
524
- background-color: var(--field-bg-color);
525
- border: 1px solid var(--field-border-color);
526
- border-radius: 0.5rem;
527
- padding: 1.5rem;
528
- transition: transform 0.2s ease, box-shadow 0.2s ease;
529
- 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);
530
1051
  }
531
1052
 
532
- .ultra-settings-configuration-summary:hover {
533
- transform: translateY(-2px);
534
- 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);
535
1056
  }
536
1057
 
537
- .ultra-settings-configuration-title {
538
- display: block;
539
- font-size: 1.25rem;
540
- font-weight: 600;
541
- 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);
542
1096
  text-decoration: none;
543
- margin-bottom: 0.75rem;
1097
+ cursor: pointer;
1098
+ transition: opacity 0.15s;
544
1099
  }
545
1100
 
546
- .ultra-settings-configuration-title:hover {
1101
+ .ultra-settings-ss-history-link:hover {
547
1102
  text-decoration: underline;
1103
+ opacity: 0.85;
548
1104
  }
549
1105
 
550
- .ultra-settings-configuration-summary p {
551
- margin: 0;
552
- 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;
553
1118
  line-height: 1.5;
554
- }
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; }