]> BookStack Code Mirror - bookstack/blob - resources/sass/_components.scss
5486d61128827c87a96e7a5b46ca8e6be05a56b3
[bookstack] / resources / sass / _components.scss
1 @use "sass:math";
2
3 @use "mixins";
4 @use "vars";
5
6
7 // System wide notifications
8 .notification {
9   position: fixed;
10   top: 0;
11   right: 0;
12   margin: vars.$xl;
13   padding: vars.$m vars.$l;
14   background-color: #FFF;
15   @include mixins.lightDark(background-color, #fff, #444);
16   border-radius: 4px;
17   border-inline-start: 6px solid currentColor;
18   box-shadow: vars.$bs-large;
19   z-index: 999999;
20   cursor: pointer;
21   max-width: 360px;
22   transition: transform ease-in-out 280ms;
23   transform: translateX(580px);
24   display: grid;
25   grid-template-columns: 42px 1fr 12px;
26   color: #444;
27   font-weight: 700;
28   span, svg {
29     vertical-align: middle;
30     justify-self: center;
31     align-self: center;
32   }
33   svg {
34     width: 2.8rem;
35     height: 2.8rem;
36     padding-inline-end: vars.$s;
37     fill: currentColor;
38   }
39   .dismiss {
40     margin-top: -8px;
41     svg {
42       height: 1.0rem;
43       @include mixins.lightDark(color, #444, #888);
44     }
45   }
46   span {
47     vertical-align: middle;
48     line-height: 1.3;
49     @include mixins.whenDark {
50       color: #BBB;
51     }
52   }
53   &.pos {
54     color: var(--color-positive);
55   }
56   &.neg {
57     color: var(--color-negative);
58   }
59   &.warning {
60     color: var(--color-warning);
61   }
62   &.showing {
63     transform: translateX(0);
64   }
65   &.showing:hover {
66     transform: translate3d(0, -2px, 0);
67   }
68 }
69
70 .chapter-contents-toggle {
71   cursor: pointer;
72   margin: 0;
73   transition: all ease-in-out 180ms;
74   user-select: none;
75   svg[data-icon="caret-right"] {
76     margin-inline-end: 0;
77     font-size: 1rem;
78     transition: all ease-in-out 180ms;
79     transform: rotate(0deg);
80     transform-origin: 50% 50%;
81   }
82   &.open svg[data-icon="caret-right"] {
83     transform: rotate(90deg);
84   }
85   svg[data-icon="caret-right"] + * {
86     margin-inline-start: vars.$xxs;
87   }
88 }
89
90 [overlay], .popup-background {
91   @include mixins.lightDark(background-color, rgba(0, 0, 0, 0.333), rgba(0, 0, 0, 0.6));
92   position: fixed;
93   z-index: 95536;
94   width: 100%;
95   height: 100%;
96   min-width: 100%;
97   min-height: 100%;
98   top: 0;
99   left: 0;
100   right: 0;
101   bottom: 0;
102   align-items: center;
103   justify-content: center;
104   display: none;
105 }
106
107 .popup-body-wrap {
108   display: flex;
109 }
110
111 .popup-body {
112   @include mixins.lightDark(background-color, #fff, #333);
113   max-height: 90%;
114   max-width: 1200px;
115   width: 90%;
116   height: auto;
117   margin: 2% auto;
118   border-radius: 4px;
119   box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.3);
120   overflow: hidden;
121   z-index: 999;
122   display: flex;
123   flex-direction: column;
124   position: relative;
125   &.small {
126     margin: 2% auto;
127     width: 800px;
128     max-width: 90%;
129   }
130   &.very-small {
131     margin: 2% auto;
132     width: 600px;
133     max-width: 90%;
134   }
135   &:before {
136     display: flex;
137     align-self: flex-start;
138   }
139   .popup-content {
140     overflow-y: auto;
141   }
142   &:focus {
143     outline: 0;
144   }
145 }
146
147 .popup-header button, .popup-footer button {
148   margin: 0;
149   border-radius: 0;
150   box-shadow: none;
151   color: #FFF;
152   padding: vars.$xs vars.$m;
153   cursor: pointer;
154 }
155
156 .popup-header button:not(.popup-header-close) {
157   font-size: 0.8rem;
158 }
159
160 .popup-header button:hover {
161     background-color: rgba(255, 255, 255, 0.1);
162 }
163
164 .popup-footer {
165   justify-content: end;
166   background-color: var(--color-primary-light);
167   min-height: 41px;
168   button {
169     padding: 10px vars.$m;
170   }
171 }
172
173 .popup-header-close {
174   border: 0;
175   color: #FFF;
176   font-size: 16px;
177   cursor: pointer;
178   svg {
179     margin-right: 0;
180   }
181 }
182
183 .popup-header, .popup-footer {
184   display: flex;
185   position: relative;
186   height: 40px;
187   flex: 0;
188   .popup-title {
189     color: #FFF;
190     margin-inline-end: auto;
191     padding: 8px vars.$m;
192   }
193   &.flex-container-row {
194     display: flex !important;
195   }
196 }
197 body.flexbox-support #entity-selector-wrap .popup-body .form-group {
198   height: 444px;
199   min-height: 444px;
200 }
201 #entity-selector-wrap .popup-body .form-group {
202   margin: 0;
203 }
204 .popup-body .entity-selector-container {
205   flex: 1;
206 }
207
208 .dropzone-overlay {
209   position: absolute;
210   display: flex;
211   justify-content: center;
212   align-items: center;
213   font-size: 1.333rem;
214   width: 98%;
215   height: 98%;
216   left: 1%;
217   top: 1%;
218   border-radius: 4px;
219   border: 1px dashed var(--color-primary);
220   font-style: italic;
221   box-sizing: content-box;
222   background-clip: padding-box;
223   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23a9a9a9' fill-opacity='0.52' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E");
224   background-color: var(--color-primary);
225   color: #FFF;
226   opacity: .8;
227   z-index: 9;
228   pointer-events: none;
229   animation: dzAnimIn 240ms ease-in-out;
230 }
231
232 .dropzone-landing-area {
233   background-color: var(--color-primary-light);
234   padding: vars.$m vars.$l;
235   width: 100%;
236   border: 1px dashed var(--color-primary);
237   color: var(--color-primary);
238   border-radius: 4px;
239 }
240
241 @keyframes dzAnimIn {
242   0% {
243     opacity: 0;
244     transform: scale(.7);
245   }
246   60% {
247     transform: scale(1.1);
248   }
249   100% {
250     transform: scale(1);
251     opacity: .8;
252   }
253 }
254
255 @keyframes dzFileItemIn {
256   0% {
257     opacity: .5;
258     transform: translateY(28px);
259   }
260   100% {
261     opacity: 1;
262     transform: translateY(0);
263   }
264 }
265 @keyframes dzFileItemOut {
266   0% {
267     opacity: 1;
268     transform: translateY(0);
269   }
270   100% {
271     opacity: .5;
272     transform: translateY(28px);
273   }
274 }
275
276 .dropzone-file-item {
277   width: 260px;
278   height: 80px;
279   position: relative;
280   display: flex;
281   margin: 1rem;
282   flex-direction: row;
283   @include mixins.lightDark(background, #FFF, #444);
284   box-shadow: vars.$bs-large;
285   border-radius: 4px;
286   overflow: hidden;
287   padding-bottom: 3px;
288   animation: dzFileItemIn ease-in-out 240ms;
289   transition: transform ease-in-out 120ms, box-shadow ease-in-out 120ms;
290   cursor: pointer;
291   &:hover {
292     transform: translateY(-3px);
293     box-shadow: 0 3px 8px 1px rgba(22, 22, 22, 0.2);
294   }
295 }
296 .dropzone-file-item.dismiss {
297   animation: dzFileItemOut ease-in-out 240ms;
298 }
299 .dropzone-file-item .loading-container {
300   text-align: start !important;
301   margin: 0;
302 }
303 .dropzone-file-item-image-wrap {
304   width: 80px;
305   position: relative;
306   background-color: var(--color-primary-light);
307   img {
308     object-fit: cover;
309     width: 100%;
310     height: 100%;
311     opacity: .8;
312   }
313 }
314 .dropzone-file-item-text-wrap {
315   flex: 1;
316   display: block;
317   padding: 1rem;
318   overflow: auto;
319 }
320 .dropzone-file-item-progress {
321   position: absolute;
322   bottom: 0;
323   left: 0;
324   font-size: 0;
325   height: 3px;
326   background-color: var(--color-primary);
327   transition: width ease-in-out 240ms;
328 }
329 .dropzone-file-item-label {
330   line-height: 1.2;
331   margin-bottom: .2rem;
332 }
333 .dropzone-file-item-label,
334 .dropzone-file-item-status {
335   align-items: center;
336   font-size: .8rem;
337   font-weight: 700;
338 }
339 .dropzone-file-item-status[data-status] {
340   display: flex;
341   font-size: .6rem;
342   font-weight: 500;
343   line-height: 1.2;
344 }
345 .dropzone-file-item-status[data-status="success"] {
346   color: var(--color-positive);
347 }
348 .dropzone-file-item-status[data-status="error"] {
349   color: var(--color-negative);
350 }
351 .dropzone-file-item-status[data-status] + .dropzone-file-item-label {
352   display: none;
353 }
354
355 .image-manager-body {
356   min-height: 70vh;
357 }
358 .image-manager-filter-bar {
359   position: sticky;
360   top: 0;
361   z-index: 5;
362   @include mixins.lightDark(background-color, rgba(255, 255, 255, 0.85), rgba(80, 80, 80, 0.85));
363 }
364 .image-manager-filter-bar-bg {
365   position: absolute;
366   left: 0;
367   top: 0;
368   width: 100%;
369   height: 100%;
370   opacity: .15;
371   z-index: -1;
372 }
373
374 .image-manager-filters {
375   box-shadow: vars.$bs-med;
376   border-radius: 4px;
377   overflow: hidden;
378   border-bottom: 0 !important;
379   @include mixins.whenDark {
380     border: 1px solid #000 !important;
381   }
382   button {
383     line-height: 0;
384     @include mixins.lightDark(background-color, #FFF, #333);
385   }
386   svg {
387     margin: 0;
388   }
389 }
390
391 .image-manager-list {
392   padding: 3px;
393   display: grid;
394   grid-template-columns: repeat( auto-fill, minmax(max(140px, 17%), 1fr) );
395   gap: 3px;
396   z-index: 3;
397   > div {
398     aspect-ratio: 1;
399   }
400 }
401
402 .image-manager-list .image {
403   display: block;
404   position: relative;
405   border-radius: 0;
406   margin: 0;
407   width: 100%;
408   text-align: start;
409   padding: 0;
410   cursor: pointer;
411   aspect-ratio: 1;
412   @include mixins.lightDark(border-color, #ddd, #000);
413   transition: all linear 80ms;
414   overflow: hidden;
415   &.selected {
416     background-color: var(--color-primary-light);
417     outline: currentColor 3px solid;
418     border-radius: 3px;
419     transform: scale3d(0.95, 0.95, 0.95);
420   }
421   img {
422     width: 100%;
423     max-width: 100%;
424     display: block;
425     object-fit: cover;
426     height: auto;
427   }
428   .image-meta {
429     opacity: 0;
430     position: absolute;
431     width: 100%;
432     bottom: 0;
433     left: 0;
434     color: #EEE;
435     background-color: rgba(0, 0, 0, 0.7);
436     font-size: 10px;
437     padding: 3px 4px;
438     pointer-events: none;
439     transition: opacity ease-in-out 80ms;
440     span {
441       display: block;
442     }
443   }
444   &.selected .image-meta,
445   &:hover .image-meta,
446   &:focus .image-meta {
447     opacity: 1;
448   }
449   @include mixins.smaller-than(vars.$bp-m) {
450     .image-meta {
451       display: none;
452     }
453   }
454 }
455
456 .image-manager .load-more {
457   text-align: center;
458   padding: vars.$s vars.$m;
459   clear: both;
460   .loading-container {
461     margin: 0;
462   }
463 }
464
465 .image-manager .loading-container {
466   text-align: center;
467 }
468
469 .image-manager-list .image-manager-list-warning {
470   grid-column: 1 / -1;
471   aspect-ratio: auto;
472 }
473
474 .image-manager-warning {
475   @include mixins.lightDark(background, #FFF, #333);
476   color: var(--color-warning);
477   font-weight: bold;
478   border-inline: 3px solid var(--color-warning);
479 }
480
481 .image-manager-sidebar {
482   width: 300px;
483   margin: 0 auto;
484   overflow-y: auto;
485   overflow-x: hidden;
486   border-inline-start: 1px solid #DDD;
487   @include mixins.lightDark(border-color, #ddd, #000);
488   .inner {
489     min-height: auto;
490     padding: vars.$m;
491   }
492   .image-manager-viewer img {
493     max-width: 100%;
494     max-height: 180px;
495     display: block;
496     margin: 0 auto vars.$m auto;
497     box-shadow: 0 1px 21px 1px rgba(76, 76, 76, 0.3);
498   }
499   .image-manager-viewer {
500     height: 196px;
501     display: flex;
502     align-items: center;
503     justify-content: center;
504     a {
505       display: inline-block;
506     }
507   }
508 }
509 @include mixins.smaller-than(vars.$bp-m) {
510   .image-manager-sidebar {
511     border-inline-start: 0;
512   }
513 }
514
515 .image-manager-content {
516   display: flex;
517   flex-direction: column;
518   flex: 1;
519   overflow-y: scroll;
520   .container {
521     width: 100%;
522   }
523   .full-tab {
524     text-align: center;
525   }
526 }
527
528 .tab-container.bordered [role="tablist"] button[role="tab"] {
529   border-inline-end: 1px solid #DDD;
530   @include mixins.lightDark(border-inline-end-color, #DDD, #000);
531   &:last-child {
532     border-inline-end: none;
533   }
534 }
535
536 .tab-container [role="tablist"] {
537   display: flex;
538   align-items: end;
539   justify-items: start;
540   text-align: start;
541   border-bottom: 1px solid #DDD;
542   @include mixins.lightDark(border-color, #ddd, #444);
543   margin-bottom: vars.$m;
544 }
545
546 .tab-container [role="tablist"] button[role="tab"] {
547   display: inline-block;
548   padding: vars.$s;
549   @include mixins.lightDark(color, rgba(0, 0, 0, .5), rgba(255, 255, 255, .5));
550   cursor: pointer;
551   border-bottom: 2px solid transparent;
552   margin-bottom: -1px;
553   &[aria-selected="true"] {
554     color: var(--color-link) !important;
555     border-bottom-color: var(--color-link) !important;
556     outline: 0 !important;
557   }
558   &:hover, &:focus {
559     @include mixins.lightDark(color, rgba(0, 0, 0, .8), rgba(255, 255, 255, .8));
560     @include mixins.lightDark(border-bottom-color,  rgba(0, 0, 0, .2), rgba(255, 255, 255, .2));
561   }
562   &:focus {
563     outline: 1px dotted var(--color-primary);
564     outline-offset: -2px;
565   }
566 }
567 .tab-container [role="tablist"].controls-card {
568   margin-bottom: 0;
569   border-bottom: 0;
570   padding: 0 vars.$xs;
571 }
572
573 .image-picker .none {
574   display: none;
575 }
576
577 .code-editor .CodeMirror {
578   height: auto;
579   min-height: 50vh;
580   border-bottom: 0;
581 }
582
583 .code-editor .lang-options {
584   overflow-y: scroll;
585   flex-basis: 200px;
586   flex-grow: 1;
587 }
588
589 .code-editor .lang-options button {
590   display: block;
591   padding: vars.$xs vars.$m;
592   border-bottom: 1px solid;
593   @include mixins.lightDark(color, #333, #AAA);
594   @include mixins.lightDark(border-bottom-color, #EEE, #000);
595   cursor: pointer;
596   width: 100%;
597   text-align: left;
598   font-family: var(--font-code);
599   font-size: 0.7rem;
600   padding-left: 24px + vars.$xs;
601   &:hover, &.active {
602     background-color: var(--color-primary-light);
603     color: var(--color-primary);
604   }
605 }
606
607 .code-editor button.lang-option-favorite-toggle {
608   position: absolute;
609   top: 0;
610   left: 0;
611   width: 28px;
612   font-size: 1rem;
613   border: 0;
614   line-height: 1;
615   padding: 2px;
616   z-index: 2;
617   height: 100%;
618   text-align: center;
619   color: var(--color-primary);
620   svg {
621     margin: 0;
622   }
623 }
624
625 .code-editor button[data-favourite="true"] ~ .action-favourite,
626 .code-editor button[data-favourite="false"] ~ .action-unfavourite {
627   display: none;
628 }
629
630 .code-editor .action-favourite {
631   opacity: 0.5;
632 }
633 .code-editor button:hover ~ .action-favourite {
634   opacity: 1;
635 }
636
637 .code-editor label {
638   background-color: var(--color-primary-light);
639   width: 100%;
640   color: var(--color-primary);
641   padding: vars.$xxs vars.$s;
642   margin-bottom: 0;
643 }
644
645 .code-editor-language-list {
646   position: relative;
647   width: 160px;
648   z-index: 2;
649   align-items: stretch;
650 }
651
652 .code-editor-language-list input {
653   border-radius: 0;
654   border: 0;
655   border-bottom: 1px solid #DDD;
656   padding: vars.$xs vars.$s;
657   height: auto;
658 }
659
660 .code-editor-main {
661   flex: 1;
662   min-width: 0;
663   .cm-editor {
664     margin-bottom: 0;
665     z-index: 1;
666     max-width: 100%;
667     width: 100%;
668   }
669 }
670
671 .code-editor-body-wrap {
672   height: 80vh;
673 }
674
675 @include mixins.smaller-than(vars.$bp-s) {
676   .code-editor .lang-options {
677     display: none;
678   }
679   .code-editor-body-wrap {
680     flex-direction: column;
681   }
682   .code-editor-language-list, .code-editor-language-list input {
683     width: 100%;
684   }
685 }
686
687 .comments-container {
688   padding-inline: vars.$xl;
689   @include mixins.smaller-than(vars.$bp-m) {
690     padding-inline: vars.$xs;
691   }
692 }
693 .comment-box {
694   border-radius: 4px;
695   border: 1px solid #DDD;
696   @include mixins.lightDark(border-color, #ddd, #000);
697   @include mixins.lightDark(background-color, #FFF, #222);
698   .content {
699     font-size: 0.666em;
700     padding: vars.$xs vars.$s;
701     p, ul, ol {
702       font-size: vars.$fs-m;
703       margin: .5em 0;
704     }
705   }
706   .actions {
707     opacity: 0;
708     transition: opacity ease-in-out 120ms;
709   }
710   &:hover .actions, &:focus-within .actions {
711     opacity: 1;
712   }
713   .actions button:focus {
714     outline: 1px dotted var(--color-primary);
715   }
716   @include mixins.smaller-than(vars.$bp-m) {
717     .actions {
718       opacity: 1;
719     }
720   }
721 }
722
723 .comment-box .header {
724   border-bottom: 1px solid #DDD;
725   padding: vars.$xs vars.$s;
726   @include mixins.lightDark(border-color, #DDD, #000);
727   a {
728     color: inherit;
729   }
730   .text-muted {
731     color: #999;
732   }
733   .meta a, .meta span {
734     white-space: nowrap;
735   }
736   .right-meta .text-muted {
737     opacity: .8;
738   }
739 }
740
741 .comment-thread-indicator {
742   border-inline-start: 3px dotted #DDD;
743   @include mixins.lightDark(border-color, #DDD, #444);
744   margin-inline-start: vars.$xs;
745   width: vars.$l;
746   height: calc(100% - vars.$m);
747 }
748
749 .comment-reference-indicator-wrap a {
750   float: left;
751   margin-top: vars.$xs;
752   font-size: 12px;
753   display: inline-block;
754   font-weight: bold;
755   position: relative;
756   border-radius: 4px;
757   overflow: hidden;
758   padding: 2px 6px 2px 0;
759   margin-inline-end: vars.$xs;
760   color: var(--color-link);
761   span {
762     display: none;
763   }
764   &.outdated span {
765     display: inline;
766   }
767   &.outdated.missing {
768     color: var(--color-warning);
769     pointer-events: none;
770   }
771   svg {
772     width: 24px;
773     margin-inline-end: 0;
774   }
775   &:after {
776     background-color: currentColor;
777     content: '';
778     width: 100%;
779     height: 100%;
780     position: absolute;
781     left: 0;
782     top: 0;
783     opacity: 0.15;
784   }
785 }
786
787 .comment-branch .comment-box {
788   margin-bottom: vars.$m;
789 }
790
791 .comment-branch .comment-branch .comment-branch .comment-branch .comment-thread-indicator {
792   display: none;
793 }
794
795 .comment-reply {
796   display: none;
797   margin: 0 !important;
798   margin-bottom: -(vars.$xxs) !important;
799 }
800
801 .comment-branch .comment-branch .comment-branch .comment-branch .comment-reply {
802   display: block;
803 }
804
805 .comment-container-compact .comment-box {
806   margin-bottom: vars.$xs;
807   .meta {
808     font-size: 0.8rem;
809   }
810   .header {
811     padding: vars.$xs;
812   }
813   .right-meta {
814     display: none;
815   }
816   .content {
817     padding: vars.$xs vars.$s;
818   }
819 }
820 .comment-container-compact .comment-thread-indicator {
821   width: vars.$m;
822 }
823
824 .comment-container-super-compact .comment-box {
825   .meta {
826     font-size: 12px;
827   }
828   .avatar {
829     width: 18px;
830     margin-inline-end: 2px !important;
831   }
832   .content {
833     padding: vars.$xxs vars.$s;
834     line-height: 1.2;
835   }
836   .content p {
837     font-size: 12px;
838   }
839 }
840
841 .comment-container-super-compact .comment-thread-indicator {
842   width: (vars.$xs + 3px);
843   margin-inline-start: 3px;
844 }
845
846 #tag-manager .drag-card {
847   max-width: 500px;
848 }
849
850 .template-item {
851   cursor: pointer;
852   position: relative;
853   &:hover, .template-item-actions button:hover {
854     background-color: #F2F2F2;
855   }
856   .template-item-actions {
857     position: absolute;
858     top: 0;
859     inset-inline-end: 0;
860     width: 50px;
861     height: 100%;
862     display: flex;
863     flex-direction: column;
864     border-inline-start: 1px solid;
865     @include mixins.lightDark(border-color, #ddd, #000);
866   }
867   .template-item-actions button {
868     cursor: pointer;
869     flex: 1;
870     @include mixins.lightDark(background-color, #FFF, #222);
871     border: 0;
872     border-top: 1px solid;
873     @include mixins.lightDark(border-color, #DDD, #000);
874   }
875   .template-item-actions button svg {
876     margin: 0;
877   }
878   .template-item-actions button:first-child {
879     border-top: 0;
880   }
881 }
882
883
884 .dropdown-search {
885   position: relative;
886 }
887 .dropdown-search-toggle-breadcrumb {
888   border: 1px solid transparent;
889   border-radius: 4px;
890   line-height: normal;
891   padding: vars.$xs;
892   &:hover {
893     border-color: #DDD;
894   }
895   .svg-icon {
896     margin-inline-end: 0;
897   }
898 }
899 .dropdown-search-toggle-select {
900   display: flex;
901   gap: vars.$s;
902   line-height: normal;
903   .svg-icon {
904     height: 26px;
905     width: 26px;
906     margin: 0;
907   }
908   .avatar {
909     height: 22px;
910     width: 22px;
911   }
912   .avatar + span {
913     max-width: 100%;
914     overflow: hidden;
915     text-overflow: ellipsis;
916     white-space: nowrap;
917   }
918   .dropdown-search-toggle-caret {
919     font-size: 1.15rem;
920   }
921 }
922 .dropdown-search-toggle-select-label {
923   min-width: 0;
924   white-space: nowrap;
925 }
926 .dropdown-search-toggle-select-caret {
927   line-height: 0;
928   margin-left: auto;
929   margin-top: -2px;
930   display: flex;
931   align-items: center;
932 }
933
934 .dropdown-search-dropdown {
935   box-shadow: vars.$bs-med;
936   overflow: hidden;
937   min-height: 100px;
938   width: 240px;
939   display: none;
940   position: absolute;
941   z-index: 80;
942   right: 0;
943   top: 0;
944   margin-top: vars.$m;
945   @include mixins.rtl {
946     right: auto;
947     left: -(vars.$m);
948   }
949   .dropdown-search-search .svg-icon {
950     position: absolute;
951     left: vars.$s;
952     @include mixins.rtl {
953       right: vars.$s;
954       left: auto;
955     }
956     top: 11px;
957     fill: #888;
958     pointer-events: none;
959   }
960   .dropdown-search-list {
961     max-height: 400px;
962     overflow-y: scroll;
963     text-align: start;
964   }
965   .dropdown-search-item {
966     padding: vars.$s vars.$m;
967     &:hover,&:focus {
968       background-color: #F2F2F2;
969       text-decoration: none;
970     }
971   }
972   input, input:focus {
973     padding-inline-start: vars.$xl;
974     border-radius: 0;
975     border: 0;
976     border-bottom: 1px solid #DDD;
977   }
978   input:focus {
979     outline: 0;
980   }
981 }
982
983 @include mixins.smaller-than(vars.$bp-l) {
984   .dropdown-search-dropdown {
985     inset-inline: vars.$m auto;
986   }
987   .dropdown-search-dropdown .dropdown-search-list {
988     max-height: 240px;
989   }
990 }
991
992 .item-list {
993   box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
994 }
995 .item-list-row {
996   border: 1.5px solid;
997   @include mixins.lightDark(border-color, #E2E2E2, #444);
998   border-bottom-width: 0;
999   label {
1000     padding-bottom: 0;
1001   }
1002   &:hover {
1003     @include mixins.lightDark(background-color, #F6F6F6, #333);
1004   }
1005 }
1006 .item-list-row:first-child {
1007   border-radius: 4px 4px 0 0;
1008 }
1009 .item-list-row:last-child {
1010   border-radius: 0 0 4px 4px;
1011   border-bottom-width: 1.5px;
1012 }
1013 .item-list-row:first-child:last-child {
1014   border-radius: 4px;
1015 }
1016 .item-list-row-toggle-all {
1017   visibility: hidden;
1018 }
1019 .item-list-row:hover .item-list-row-toggle-all {
1020   visibility: visible;
1021 }
1022
1023 .status-indicator-active, .status-indicator-inactive {
1024   width: 8px;
1025   height: 8px;
1026   border-radius: 50%;
1027   display: inline-block;
1028 }
1029 .status-indicator-active {
1030   background-color: var(--color-positive);
1031 }
1032 .status-indicator-inactive {
1033   background-color: var(--color-negative);
1034 }
1035
1036 .shortcut-container {
1037   background-color: rgba(0, 0, 0, 0.25);
1038   pointer-events: none;
1039   position: fixed;
1040   left: 0;
1041   top: 0;
1042   width: 100%;
1043   height: 100%;
1044   z-index: 99;
1045 }
1046 .shortcut-linkage {
1047   position: fixed;
1048   box-shadow: 0 0 4px 0 #FFF;
1049   border-radius: 3px;
1050 }
1051 .shortcut-hint {
1052   position: fixed;
1053   padding: vars.$xxs vars.$xxs;
1054   font-size: .85rem;
1055   font-weight: 700;
1056   line-height: 1;
1057   background-color: #eee;
1058   border-radius: 3px;
1059   border: 1px solid #b4b4b4;
1060   box-shadow: 0 1px 1px rgba(0, 0, 0, .2), 0 2px 0 0 rgba(255, 255, 255, .7) inset;
1061   color: #333;
1062 }
1063
1064 // Back to top link
1065 $btt-size: 40px;
1066 .back-to-top {
1067   background-color: var(--color-primary);
1068   position: fixed;
1069   bottom: vars.$m;
1070   right: vars.$l;
1071   padding: 5px 7px;
1072   cursor: pointer;
1073   color: #FFF;
1074   fill: #FFF;
1075   svg {
1076     width: math.div($btt-size, 1.5);
1077     height: math.div($btt-size, 1.5);
1078     margin-inline-end: 4px;
1079   }
1080   width: $btt-size;
1081   height: $btt-size;
1082   border-radius: $btt-size;
1083   transition: all ease-in-out 180ms;
1084   opacity: 0;
1085   z-index: 999;
1086   overflow: hidden;
1087   &:hover {
1088     width: $btt-size*3.4;
1089     opacity: 1 !important;
1090   }
1091   .inner {
1092     width: $btt-size*3.4;
1093   }
1094   span {
1095     position: relative;
1096     vertical-align: top;
1097     line-height: 2;
1098   }
1099 }
1100
1101 // Sortable scroll boxes
1102 .scroll-box {
1103   list-style: none;
1104   padding: 0;
1105   margin: 0;
1106   max-height: 280px;
1107   overflow-y: scroll;
1108   border: 1px solid;
1109   @include mixins.lightDark(border-color, #DDD, #000);
1110   border-radius: 3px;
1111   min-height: 20px;
1112   @include mixins.lightDark(background-color, #EEE, #000);
1113 }
1114 .scroll-box-item {
1115   border-bottom: 1px solid;
1116   border-top: 1px solid;
1117   @include mixins.lightDark(border-color, #DDD, #000);
1118   margin-top: -1px;
1119   @include mixins.lightDark(background-color, #FFF, #222);
1120   display: flex;
1121   align-items: flex-start;
1122   padding: 1px;
1123   &:last-child {
1124     border-bottom: 0;
1125   }
1126   &:hover {
1127     cursor: pointer;
1128     @include mixins.lightDark(background-color, #f8f8f8, #333);
1129   }
1130   &.items-center {
1131     align-items: center;
1132   }
1133   .handle {
1134     color: #AAA;
1135     cursor: grab;
1136   }
1137   button {
1138     opacity: .6;
1139     line-height: 1;
1140   }
1141   .handle svg {
1142     margin: 0;
1143   }
1144   > * {
1145     padding: vars.$xs vars.$m;
1146   }
1147   .handle + * {
1148     padding-left: 0;
1149   }
1150   &:hover .handle {
1151     @include mixins.lightDark(color, #444, #FFF);
1152   }
1153   &:hover button {
1154     opacity: 1;
1155   }
1156   a:hover {
1157     text-decoration: none;
1158   }
1159 }
1160
1161 input.scroll-box-search, .scroll-box-header-item {
1162   font-size: 0.8rem;
1163   border: 1px solid;
1164   @include mixins.lightDark(border-color, #DDD, #000);
1165   @include mixins.lightDark(background-color, #FFF, #222);
1166   margin-bottom: -1px;
1167   border-radius: 3px 3px 0 0;
1168   width: 100%;
1169   max-width: 100%;
1170   height: auto;
1171   line-height: 1.4;
1172   color: #666;
1173 }
1174
1175 .scroll-box-search + .scroll-box,
1176 .scroll-box-header-item + .scroll-box {
1177   border-radius: 0 0 3px 3px;
1178 }
1179
1180 .scroll-box.configured-option-list [data-action="add"] {
1181   display: none;
1182 }
1183 .scroll-box.available-option-list [data-action="remove"],
1184 .scroll-box.available-option-list [data-action="move_up"],
1185 .scroll-box.available-option-list [data-action="move_down"],
1186 {
1187   display: none;
1188 }
1189
1190 .scroll-box > li.empty-state {
1191   display: none;
1192 }
1193 .scroll-box > li.empty-state:last-child {
1194   display: list-item;
1195 }