main
css 781 lines 15.5 KB
Raw
1 /* Settings Modal Styles */
2
3 /* Field Styles */
4 .field {
5 display: grid;
6 grid-template-columns: 55% 1fr;
7 align-items: center;
8 margin-block: 1rem;
9 padding: var(--spacing-xs) 0;
10 }
11
12 .field.field-full {
13 grid-template-columns: 1fr;
14 }
15
16 /* Field Labels */
17 .field-label {
18 display: flex;
19 flex-direction: column;
20 padding-right: 0.5em;
21 }
22
23 .field-title {
24 font-weight: bold;
25 color: var(--color-primary);
26 }
27
28 .field-description {
29 color: var(--color-text);
30 font-size: 0.875rem;
31 opacity: 0.8;
32 margin: 0.25rem 0 0.5rem 0;
33 }
34
35 /* Field Controls */
36 .field-control {
37 width: 100%;
38 display: flex;
39 align-items: center;
40 }
41
42 /* Input Styles */
43 input[type="text"],
44 input[type="password"],
45 input[type="number"],
46 textarea,
47 select {
48 width: 100%;
49 padding: 0.5rem;
50 border: 1px solid var(--color-border);
51 border-radius: 0.25rem;
52 background-color: var(--color-background);
53 color: var(--color-text);
54 font-family: "Rubik", Arial, Helvetica, sans-serif;
55 outline: none;
56 transition: all 0.3s ease;
57 }
58
59 textarea {
60 min-height: 100px;
61 font-family: 'Roboto Mono', monospace;
62 scroll-behavior: smooth;
63 resize: none;
64 background-clip: border-box;
65 }
66
67 input[type="text"]:focus,
68 input[type="number"]:focus,
69 input[type="password"]:focus,
70 textarea:focus {
71 background-color: var(--color-background);
72 filter: brightness(1.2);
73 }
74
75 .masked-text-input {
76 -webkit-text-security: disc;
77 }
78
79 .masked-text-input::placeholder {
80 -webkit-text-security: none;
81 }
82
83 .light-mode input[type="text"]:focus,
84 .light-mode input[type="number"]:focus,
85 .light-mode input[type="password"]:focus,
86 .light-mode textarea:focus {
87 filter: brightness(1.1);
88 }
89
90 /* Button Disabled State */
91 .btn-disabled,
92 .btn-ok.btn-disabled {
93 opacity: 0.5;
94 cursor: not-allowed;
95 pointer-events: none;
96 }
97
98 /* Toggle Switch Styles */
99 .toggle {
100 position: relative;
101 display: inline-block;
102 width: 60px;
103 height: 34px;
104 }
105
106 .toggle input {
107 opacity: 0;
108 width: 0;
109 height: 0;
110 }
111
112 .toggler {
113 position: absolute;
114 top: 0;
115 left: 0;
116 right: 0;
117 bottom: 0;
118 background-color: #ccc;
119 border-radius: 34px;
120 cursor: pointer;
121 transition: 0.4s;
122 }
123
124 .toggler:before {
125 content: "";
126 position: absolute;
127 height: 26px;
128 width: 26px;
129 left: 4px;
130 bottom: 4px;
131 background-color: white;
132 border-radius: 50%;
133 transition: 0.4s;
134 }
135
136 input:checked + .toggler {
137 background-color: #2196f3;
138 }
139
140 input:checked + .toggler:before {
141 transform: translateX(26px);
142 }
143
144 /* Select Styles */
145 select {
146 cursor: pointer;
147 color-scheme: dark;
148 }
149
150 .light-mode select {
151 color-scheme: light;
152 }
153
154 select:disabled {
155 background-color: var(--color-background);
156 cursor: not-allowed;
157 }
158
159 /* Settings modal shell */
160 .modal-inner.settings-modal {
161 right: auto;
162 bottom: auto;
163 z-index: 2;
164 display: flex;
165 align-items: stretch;
166 justify-content: flex-start;
167 width: min(92vw, 1180px);
168 height: min(88vh, 900px);
169 padding: 0;
170 overflow: hidden;
171 background: color-mix(in srgb, var(--color-background) 94%, #000 6%);
172 }
173
174 .modal-inner.settings-modal .modal-scroll,
175 .modal-inner.settings-modal .modal-bd,
176 .modal-inner.settings-modal .modal-bd > div[x-data],
177 .modal-inner.settings-modal .modal-bd > div[x-data] > div {
178 display: flex;
179 flex: 1 1 auto;
180 width: 100%;
181 min-width: 0;
182 min-height: 0;
183 overflow: hidden;
184 }
185
186 .modal-inner.settings-modal .modal-scroll {
187 padding: 0;
188 }
189
190 .modal-inner.settings-modal .modal-header {
191 min-height: 48px;
192 }
193
194 .settings-content {
195 display: grid;
196 grid-template-columns: 224px minmax(0, 1fr);
197 flex: 1 1 auto;
198 width: 100%;
199 min-width: 0;
200 min-height: 0;
201 overflow: hidden;
202 }
203
204 .settings-tabs-container {
205 position: sticky;
206 top: 0;
207 display: flex;
208 flex-direction: column;
209 gap: 10px;
210 align-self: stretch;
211 z-index: 2;
212 min-width: 0;
213 min-height: 0;
214 height: 100%;
215 padding: 10px 8px;
216 overflow: hidden;
217 border-right: 1px solid color-mix(in srgb, var(--color-border) 58%, transparent);
218 background: color-mix(in srgb, var(--color-panel) 44%, transparent);
219 }
220
221 .settings-search {
222 display: grid;
223 grid-template-columns: 20px minmax(0, 1fr) 24px;
224 align-items: center;
225 gap: 5px;
226 flex: 0 0 auto;
227 width: 100%;
228 min-width: 0;
229 height: 34px;
230 padding: 0 7px;
231 border: 1px solid color-mix(in srgb, var(--color-border) 42%, transparent);
232 border-radius: 7px;
233 background: color-mix(in srgb, var(--color-text) 10%, transparent);
234 color: var(--color-text-muted);
235 }
236
237 .settings-search:focus-within {
238 border-color: color-mix(in srgb, var(--color-primary) 46%, var(--color-border));
239 background: color-mix(in srgb, var(--color-text) 13%, transparent);
240 }
241
242 .settings-search .material-symbols-outlined {
243 font-size: 19px;
244 }
245
246 .settings-search input[type="search"] {
247 width: 100%;
248 min-width: 0;
249 height: 100%;
250 padding: 0;
251 border: 0;
252 outline: 0;
253 appearance: none;
254 background: transparent;
255 color: var(--color-text);
256 font: inherit;
257 font-size: 0.86rem;
258 }
259
260 .settings-search input[type="search"]::-webkit-search-decoration,
261 .settings-search input[type="search"]::-webkit-search-cancel-button,
262 .settings-search input[type="search"]::-webkit-search-results-button,
263 .settings-search input[type="search"]::-webkit-search-results-decoration {
264 display: none;
265 }
266
267 .settings-search input[type="search"]::placeholder {
268 color: var(--color-text-muted);
269 opacity: 0.9;
270 }
271
272 .settings-search-clear {
273 display: inline-grid;
274 place-items: center;
275 width: 24px;
276 height: 24px;
277 min-width: 24px;
278 padding: 0;
279 border: 0;
280 border-radius: 5px;
281 background: transparent;
282 color: var(--color-text-muted);
283 cursor: pointer;
284 }
285
286 .settings-search-clear:hover {
287 background: color-mix(in srgb, var(--color-text) 10%, transparent);
288 color: var(--color-text);
289 }
290
291 .settings-tabs {
292 display: flex;
293 flex-direction: column;
294 gap: 4px;
295 flex: 1 1 auto;
296 width: 100%;
297 min-width: 0;
298 min-height: 0;
299 max-height: 100%;
300 overflow-y: auto;
301 }
302
303 .settings-nav-group {
304 display: flex;
305 flex-direction: column;
306 gap: 3px;
307 min-width: 0;
308 }
309
310 .settings-tab {
311 display: grid;
312 grid-template-columns: 22px minmax(0, 1fr) auto;
313 align-items: center;
314 gap: 8px;
315 width: 100%;
316 min-height: 38px;
317 padding: 0 10px;
318 border: 0;
319 border-radius: 0;
320 appearance: none;
321 background: transparent;
322 color: var(--color-text);
323 cursor: pointer;
324 font: inherit;
325 font-size: 0.83rem;
326 font-weight: 560;
327 line-height: 1.1;
328 opacity: 0.68;
329 text-align: left;
330 text-decoration: none;
331 transition: color 0.16s ease, opacity 0.16s ease;
332 }
333
334 .settings-tab-meta {
335 display: inline-flex;
336 align-items: center;
337 justify-content: flex-end;
338 gap: 6px;
339 min-width: 18px;
340 }
341
342 .settings-tab-chevron {
343 transform: rotate(-90deg);
344 transition: transform 0.16s ease;
345 }
346
347 .settings-nav-group-open .settings-tab-chevron {
348 transform: rotate(0deg);
349 }
350
351 .settings-tab-label {
352 min-width: 0;
353 overflow: hidden;
354 text-overflow: ellipsis;
355 white-space: nowrap;
356 }
357
358 .settings-tab .material-symbols-outlined,
359 .settings-section-link .material-symbols-outlined {
360 color: var(--color-text-muted);
361 font-size: 18px;
362 }
363
364 .settings-tab:hover,
365 .settings-tab.active,
366 .settings-section-link:hover,
367 .settings-section-link.active {
368 opacity: 1;
369 }
370
371 .settings-tab.active,
372 .settings-section-link.active {
373 color: var(--color-text);
374 font-weight: 750;
375 }
376
377 .settings-tab.active .material-symbols-outlined,
378 .settings-section-link.active .material-symbols-outlined {
379 color: var(--color-primary);
380 }
381
382 .settings-tab-attention {
383 opacity: 1;
384 }
385
386 .settings-tab-attention .material-symbols-outlined {
387 color: #f2bf4b;
388 }
389
390 .settings-attention-dot {
391 width: 7px;
392 height: 7px;
393 flex: 0 0 auto;
394 border-radius: 999px;
395 background: #f2bf4b;
396 box-shadow: 0 0 0 3px color-mix(in srgb, #f2bf4b 18%, transparent);
397 }
398
399 .settings-section-list {
400 display: flex;
401 flex-direction: column;
402 gap: 2px;
403 min-width: 0;
404 margin: 0 0 6px 30px;
405 padding-left: 10px;
406 border-left: 1px solid color-mix(in srgb, var(--color-border) 54%, transparent);
407 }
408
409 .settings-section-link {
410 display: grid;
411 grid-template-columns: 20px minmax(0, 1fr) auto;
412 align-items: center;
413 gap: 7px;
414 min-height: 32px;
415 padding: 0 9px;
416 border: 0;
417 border-radius: 0;
418 background: transparent;
419 color: var(--color-text);
420 font-size: 0.78rem;
421 font-weight: 560;
422 line-height: 1.12;
423 opacity: 0.72;
424 text-align: left;
425 text-decoration: none;
426 transition: color 0.16s ease, opacity 0.16s ease;
427 }
428
429 .settings-section-link .material-symbols-outlined {
430 font-size: 17px;
431 }
432
433 .settings-section-link:hover,
434 .settings-section-link.active {
435 opacity: 1;
436 }
437
438 .settings-search-empty {
439 padding: 10px 9px;
440 color: var(--color-text-muted);
441 font-size: 0.8rem;
442 line-height: 1.25;
443 }
444
445 .settings-pane {
446 min-width: 0;
447 min-height: 0;
448 overflow: auto;
449 padding: 18px 22px 28px;
450 scroll-behavior: smooth;
451 }
452
453 .settings-tab-panel,
454 .settings-tab-panel > x-component,
455 .settings-tab-panel > x-component > div[x-data] {
456 min-width: 0;
457 }
458
459 .settings-pane nav {
460 display: none;
461 }
462
463 .settings-pane .section {
464 display: block;
465 width: 100%;
466 min-width: 0;
467 margin: 0 0 10px;
468 padding: 26px 0 30px;
469 scroll-margin-top: 12px;
470 overflow: visible;
471 border: 0;
472 border-top: 1px solid color-mix(in srgb, var(--color-border) 64%, transparent);
473 border-radius: 0;
474 box-sizing: border-box;
475 }
476
477 .settings-tab-panel > x-component > div[x-data] > div > .section:first-of-type,
478 .settings-tab-panel > x-component > div[x-data] > div > nav + .section {
479 padding-top: 0;
480 border-top: 0;
481 }
482
483 .settings-pane .section-title {
484 margin: 0 0 6px;
485 padding: 0;
486 border: 0;
487 color: color-mix(in srgb, var(--color-text) 88%, var(--color-primary));
488 font-size: 1.05rem;
489 font-weight: 800;
490 }
491
492 .settings-pane .section-title.settings-update-title-attention {
493 color: #f2bf4b;
494 }
495
496 .settings-pane .section-description {
497 max-width: 72ch;
498 margin: 0 0 18px;
499 color: var(--color-text);
500 font-size: 0.92rem;
501 opacity: 0.78;
502 line-height: 1.42;
503 }
504
505 .modal-inner.settings-modal .field {
506 grid-template-columns: minmax(220px, 0.9fr) minmax(260px, 1fr);
507 gap: 20px;
508 margin-block: 0;
509 padding: 12px 0;
510 }
511
512 .modal-inner.settings-modal .field + .field {
513 border-top: 1px solid color-mix(in srgb, var(--color-border) 24%, transparent);
514 }
515
516 .modal-inner.settings-modal .field-title {
517 color: color-mix(in srgb, var(--color-text) 78%, var(--color-primary));
518 font-weight: 800;
519 }
520
521 .modal-inner.settings-modal .field-description {
522 margin-bottom: 0;
523 color: var(--color-text);
524 opacity: 0.78;
525 line-height: 1.28;
526 }
527
528 .modal-inner.settings-modal .field-control {
529 gap: 8px;
530 }
531
532 .modal-inner.settings-modal input[type="text"],
533 .modal-inner.settings-modal input[type="password"],
534 .modal-inner.settings-modal input[type="number"],
535 .modal-inner.settings-modal textarea,
536 .modal-inner.settings-modal select {
537 border-color: color-mix(in srgb, var(--color-border) 70%, transparent);
538 border-radius: 7px;
539 background: color-mix(in srgb, var(--color-background) 72%, transparent);
540 }
541
542 .settings-advanced-section {
543 margin-top: 8px;
544 }
545
546 .settings-advanced-toggle {
547 display: inline-flex;
548 align-items: center;
549 gap: 5px;
550 min-height: 30px;
551 padding: 3px 0;
552 border: 0;
553 background: transparent;
554 color: var(--color-text);
555 opacity: 0.68;
556 cursor: pointer;
557 font: inherit;
558 font-size: 0.79rem;
559 font-weight: 650;
560 text-align: left;
561 }
562
563 .settings-advanced-toggle:hover {
564 opacity: 1;
565 }
566
567 .settings-advanced-toggle-icon {
568 font-size: 17px;
569 transition: transform 0.15s ease;
570 }
571
572 .settings-advanced-body {
573 margin-top: 6px;
574 padding-top: 6px;
575 }
576
577 .settings-inline-button {
578 flex: 0 0 auto;
579 }
580
581 .settings-subsection-title {
582 margin: 18px 0 4px;
583 color: var(--color-primary);
584 font-size: 0.94rem;
585 font-weight: 750;
586 }
587
588 .settings-subsection-description {
589 margin: 0 0 8px;
590 color: var(--color-text);
591 font-size: 0.85rem;
592 line-height: 1.35;
593 opacity: 0.72;
594 }
595
596 .settings-update-card {
597 display: grid;
598 grid-template-columns: auto minmax(0, 1fr) auto;
599 align-items: center;
600 gap: 14px;
601 margin: 4px 0 16px;
602 padding: 14px;
603 border: 1px solid color-mix(in srgb, var(--color-border) 72%, transparent);
604 border-radius: 7px;
605 background: color-mix(in srgb, var(--color-panel) 60%, transparent);
606 }
607
608 .settings-update-card-attention {
609 border-color: color-mix(in srgb, #f2bf4b 44%, var(--color-border));
610 background:
611 linear-gradient(
612 120deg,
613 color-mix(in srgb, #f2bf4b 16%, transparent),
614 transparent 58%
615 ),
616 color-mix(in srgb, var(--color-panel) 72%, transparent);
617 }
618
619 .settings-update-card-icon {
620 display: grid;
621 place-items: center;
622 width: 38px;
623 height: 38px;
624 border-radius: 7px;
625 background: color-mix(in srgb, var(--color-primary) 15%, transparent);
626 color: color-mix(in srgb, var(--color-text) 82%, var(--color-primary));
627 }
628
629 .settings-update-card-attention .settings-update-card-icon {
630 background: color-mix(in srgb, #f2bf4b 18%, transparent);
631 color: #f2bf4b;
632 }
633
634 .settings-update-card-copy {
635 min-width: 0;
636 }
637
638 .settings-update-card-title {
639 margin-bottom: 4px;
640 color: color-mix(in srgb, var(--color-text) 88%, var(--color-primary));
641 font-size: 0.96rem;
642 font-weight: 800;
643 }
644
645 .settings-update-card-attention .settings-update-card-title {
646 color: #f2bf4b;
647 }
648
649 .settings-update-card-message {
650 color: var(--color-text);
651 font-size: 0.86rem;
652 line-height: 1.35;
653 opacity: 0.78;
654 }
655
656 .settings-update-card-meta {
657 display: flex;
658 align-items: center;
659 flex-wrap: wrap;
660 gap: 6px;
661 margin-top: 10px;
662 }
663
664 .settings-update-card-actions {
665 display: flex;
666 align-items: center;
667 gap: 8px;
668 }
669
670 .settings-update-card-badge {
671 display: inline-flex;
672 align-items: center;
673 min-height: 24px;
674 padding: 0 9px;
675 border-radius: 999px;
676 border: 1px solid color-mix(in srgb, var(--color-border) 70%, transparent);
677 color: var(--color-text);
678 background: color-mix(in srgb, var(--color-background) 70%, transparent);
679 font-size: 0.7rem;
680 font-weight: 800;
681 line-height: 1;
682 text-transform: uppercase;
683 white-space: nowrap;
684 }
685
686 .settings-update-card-attention .settings-update-card-badge {
687 border-color: color-mix(in srgb, #f2bf4b 48%, var(--color-border));
688 color: color-mix(in srgb, #f2bf4b 84%, var(--color-text));
689 background: color-mix(in srgb, #f2bf4b 12%, transparent);
690 }
691
692 .settings-pane::-webkit-scrollbar {
693 width: 6px;
694 height: 6px;
695 }
696
697 .settings-pane::-webkit-scrollbar-track {
698 background: transparent;
699 margin: 8px 0;
700 }
701
702 .settings-pane::-webkit-scrollbar-thumb {
703 border-radius: 6px;
704 background-color: rgba(155, 155, 155, 0.5);
705 }
706
707 .settings-pane::-webkit-scrollbar-thumb:hover {
708 background-color: rgba(155, 155, 155, 0.7);
709 }
710
711 /* Responsive Design */
712 @media (max-width: 768px) {
713 .modal-inner.settings-modal .field-control {
714 width: 100%;
715 }
716
717 .modal-inner.settings-modal .field-description {
718 padding-bottom: var(--spacing-sm);
719 }
720
721 .modal-inner.settings-modal .field {
722 display: block;
723 align-items: center;
724 padding: 12px 0;
725 }
726 }
727
728 @media (max-width: 720px) {
729 .modal-inner.settings-modal {
730 width: calc(100vw - 16px);
731 height: calc(100vh - 16px);
732 max-height: calc(100vh - 16px);
733 }
734
735 .settings-content {
736 grid-template-columns: 1fr;
737 grid-template-rows: auto minmax(0, 1fr);
738 }
739
740 .settings-tabs-container {
741 position: sticky;
742 top: 0;
743 z-index: 3;
744 height: auto;
745 max-height: min(42vh, 300px);
746 padding: 7px 8px;
747 overflow: hidden;
748 border-right: 0;
749 border-bottom: 1px solid color-mix(in srgb, var(--color-border) 58%, transparent);
750 }
751
752 .settings-tabs {
753 flex-direction: column;
754 width: 100%;
755 min-width: 100%;
756 overflow-y: auto;
757 }
758
759 .settings-tab {
760 width: 100%;
761 min-width: 0;
762 padding: 0 9px;
763 }
764
765 .settings-section-list {
766 margin-left: 28px;
767 }
768
769 .settings-pane {
770 padding: 14px 16px 24px;
771 }
772
773 .settings-update-card {
774 grid-template-columns: auto minmax(0, 1fr);
775 }
776
777 .settings-update-card-actions {
778 grid-column: 1 / -1;
779 justify-content: flex-start;
780 }
781 }