]> BookStack Code Mirror - bookstack/blob - resources/sass/_components.scss
Comments: Further range of content reference ux improvements
[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 .tab-container [role="tabpanel"].no-outline:focus {
573   outline: none;
574 }
575
576 .image-picker .none {
577   display: none;
578 }
579
580 .code-editor .CodeMirror {
581   height: auto;
582   min-height: 50vh;
583   border-bottom: 0;
584 }
585
586 .code-editor .lang-options {
587   overflow-y: scroll;
588   flex-basis: 200px;
589   flex-grow: 1;
590 }
591
592 .code-editor .lang-options button {
593   display: block;
594   padding: vars.$xs vars.$m;
595   border-bottom: 1px solid;
596   @include mixins.lightDark(color, #333, #AAA);
597   @include mixins.lightDark(border-bottom-color, #EEE, #000);
598   cursor: pointer;
599   width: 100%;
600   text-align: left;
601   font-family: var(--font-code);
602   font-size: 0.7rem;
603   padding-left: 24px + vars.$xs;
604   &:hover, &.active {
605     background-color: var(--color-primary-light);
606     color: var(--color-primary);
607   }
608 }
609
610 .code-editor button.lang-option-favorite-toggle {
611   position: absolute;
612   top: 0;
613   left: 0;
614   width: 28px;
615   font-size: 1rem;
616   border: 0;
617   line-height: 1;
618   padding: 2px;
619   z-index: 2;
620   height: 100%;
621   text-align: center;
622   color: var(--color-primary);
623   svg {
624     margin: 0;
625   }
626 }
627
628 .code-editor button[data-favourite="true"] ~ .action-favourite,
629 .code-editor button[data-favourite="false"] ~ .action-unfavourite {
630   display: none;
631 }
632
633 .code-editor .action-favourite {
634   opacity: 0.5;
635 }
636 .code-editor button:hover ~ .action-favourite {
637   opacity: 1;
638 }
639
640 .code-editor label {
641   background-color: var(--color-primary-light);
642   width: 100%;
643   color: var(--color-primary);
644   padding: vars.$xxs vars.$s;
645   margin-bottom: 0;
646 }
647
648 .code-editor-language-list {
649   position: relative;
650   width: 160px;
651   z-index: 2;
652   align-items: stretch;
653 }
654
655 .code-editor-language-list input {
656   border-radius: 0;
657   border: 0;
658   border-bottom: 1px solid #DDD;
659   padding: vars.$xs vars.$s;
660   height: auto;
661 }
662
663 .code-editor-main {
664   flex: 1;
665   min-width: 0;
666   .cm-editor {
667     margin-bottom: 0;
668     z-index: 1;
669     max-width: 100%;
670     width: 100%;
671   }
672 }
673
674 .code-editor-body-wrap {
675   height: 80vh;
676 }
677
678 @include mixins.smaller-than(vars.$bp-s) {
679   .code-editor .lang-options {
680     display: none;
681   }
682   .code-editor-body-wrap {
683     flex-direction: column;
684   }
685   .code-editor-language-list, .code-editor-language-list input {
686     width: 100%;
687   }
688 }
689
690 .comments-container {
691   padding-inline: vars.$xl;
692   @include mixins.smaller-than(vars.$bp-m) {
693     padding-inline: vars.$xs;
694   }
695 }
696 .comment-box {
697   border-radius: 4px;
698   border: 1px solid #DDD;
699   @include mixins.lightDark(border-color, #ddd, #000);
700   @include mixins.lightDark(background-color, #FFF, #222);
701   .content {
702     font-size: 0.666em;
703     padding: vars.$xs vars.$s;
704     p, ul, ol {
705       font-size: vars.$fs-m;
706       margin: .5em 0;
707     }
708   }
709   .actions {
710     opacity: 0;
711     transition: opacity ease-in-out 120ms;
712   }
713   &:hover .actions, &:focus-within .actions {
714     opacity: 1;
715   }
716   .actions button:focus {
717     outline: 1px dotted var(--color-primary);
718   }
719   @include mixins.smaller-than(vars.$bp-m) {
720     .actions {
721       opacity: 1;
722     }
723   }
724 }
725
726 .comment-box .header {
727   border-bottom: 1px solid #DDD;
728   padding: vars.$xs vars.$s;
729   @include mixins.lightDark(border-color, #DDD, #000);
730   a {
731     color: inherit;
732   }
733   .text-muted {
734     color: #999;
735   }
736   .meta a, .meta span {
737     white-space: nowrap;
738   }
739   .right-meta .text-muted {
740     opacity: .8;
741   }
742 }
743
744 .comment-thread-indicator {
745   border-inline-start: 3px dotted #DDD;
746   @include mixins.lightDark(border-color, #DDD, #444);
747   margin-inline-start: vars.$xs;
748   width: vars.$l;
749   height: calc(100% - vars.$m);
750 }
751
752 .comment-reference-indicator-wrap a {
753   float: left;
754   margin-top: vars.$xs;
755   font-size: 12px;
756   display: inline-block;
757   font-weight: bold;
758   position: relative;
759   border-radius: 4px;
760   overflow: hidden;
761   padding: 2px 6px 2px 0;
762   margin-inline-end: vars.$xs;
763   color: var(--color-link);
764   span {
765     display: none;
766   }
767   &.outdated span {
768     display: inline;
769   }
770   &.outdated.missing {
771     color: var(--color-warning);
772     pointer-events: none;
773   }
774   svg {
775     width: 24px;
776     margin-inline-end: 0;
777   }
778   &:after {
779     background-color: currentColor;
780     content: '';
781     width: 100%;
782     height: 100%;
783     position: absolute;
784     left: 0;
785     top: 0;
786     opacity: 0.15;
787   }
788 }
789
790 .comment-branch .comment-box {
791   margin-bottom: vars.$m;
792 }
793
794 .comment-branch .comment-branch .comment-branch .comment-branch .comment-thread-indicator {
795   display: none;
796 }
797
798 .comment-reply {
799   display: none;
800   margin: 0 !important;
801   margin-bottom: -(vars.$xxs) !important;
802 }
803
804 .comment-branch .comment-branch .comment-branch .comment-branch .comment-reply {
805   display: block;
806 }
807
808 .comment-container .empty-state {
809   display: none;
810 }
811 .comment-container:not(:has([component="page-comment"])) .empty-state {
812   display: block;
813 }
814
815 .comment-container-compact .comment-box {
816   margin-bottom: vars.$xs;
817   .meta {
818     font-size: 0.8rem;
819   }
820   .header {
821     padding: vars.$xs;
822   }
823   .right-meta {
824     display: none;
825   }
826   .content {
827     padding: vars.$xs vars.$s;
828   }
829 }
830 .comment-container-compact .comment-thread-indicator {
831   width: vars.$m;
832 }
833
834 .comment-container-super-compact .comment-box {
835   .meta {
836     font-size: 12px;
837   }
838   .avatar {
839     width: 18px;
840     margin-inline-end: 2px !important;
841   }
842   .content {
843     padding: vars.$xxs vars.$s;
844     line-height: 1.2;
845   }
846   .content p {
847     font-size: 12px;
848   }
849 }
850
851 .comment-container-super-compact .comment-thread-indicator {
852   width: (vars.$xs + 3px);
853   margin-inline-start: 3px;
854 }
855
856 #tag-manager .drag-card {
857   max-width: 500px;
858 }
859
860 .template-item {
861   cursor: pointer;
862   position: relative;
863   &:hover, .template-item-actions button:hover {
864     background-color: #F2F2F2;
865   }
866   .template-item-actions {
867     position: absolute;
868     top: 0;
869     inset-inline-end: 0;
870     width: 50px;
871     height: 100%;
872     display: flex;
873     flex-direction: column;
874     border-inline-start: 1px solid;
875     @include mixins.lightDark(border-color, #ddd, #000);
876   }
877   .template-item-actions button {
878     cursor: pointer;
879     flex: 1;
880     @include mixins.lightDark(background-color, #FFF, #222);
881     border: 0;
882     border-top: 1px solid;
883     @include mixins.lightDark(border-color, #DDD, #000);
884   }
885   .template-item-actions button svg {
886     margin: 0;
887   }
888   .template-item-actions button:first-child {
889     border-top: 0;
890   }
891 }
892
893
894 .dropdown-search {
895   position: relative;
896 }
897 .dropdown-search-toggle-breadcrumb {
898   border: 1px solid transparent;
899   border-radius: 4px;
900   line-height: normal;
901   padding: vars.$xs;
902   &:hover {
903     border-color: #DDD;
904   }
905   .svg-icon {
906     margin-inline-end: 0;
907   }
908 }
909 .dropdown-search-toggle-select {
910   display: flex;
911   gap: vars.$s;
912   line-height: normal;
913   .svg-icon {
914     height: 26px;
915     width: 26px;
916     margin: 0;
917   }
918   .avatar {
919     height: 22px;
920     width: 22px;
921   }
922   .avatar + span {
923     max-width: 100%;
924     overflow: hidden;
925     text-overflow: ellipsis;
926     white-space: nowrap;
927   }
928   .dropdown-search-toggle-caret {
929     font-size: 1.15rem;
930   }
931 }
932 .dropdown-search-toggle-select-label {
933   min-width: 0;
934   white-space: nowrap;
935 }
936 .dropdown-search-toggle-select-caret {
937   line-height: 0;
938   margin-left: auto;
939   margin-top: -2px;
940   display: flex;
941   align-items: center;
942 }
943
944 .dropdown-search-dropdown {
945   box-shadow: vars.$bs-med;
946   overflow: hidden;
947   min-height: 100px;
948   width: 240px;
949   display: none;
950   position: absolute;
951   z-index: 80;
952   right: 0;
953   top: 0;
954   margin-top: vars.$m;
955   @include mixins.rtl {
956     right: auto;
957     left: -(vars.$m);
958   }
959   .dropdown-search-search .svg-icon {
960     position: absolute;
961     left: vars.$s;
962     @include mixins.rtl {
963       right: vars.$s;
964       left: auto;
965     }
966     top: 11px;
967     fill: #888;
968     pointer-events: none;
969   }
970   .dropdown-search-list {
971     max-height: 400px;
972     overflow-y: scroll;
973     text-align: start;
974   }
975   .dropdown-search-item {
976     padding: vars.$s vars.$m;
977     &:hover,&:focus {
978       background-color: #F2F2F2;
979       text-decoration: none;
980     }
981   }
982   input, input:focus {
983     padding-inline-start: vars.$xl;
984     border-radius: 0;
985     border: 0;
986     border-bottom: 1px solid #DDD;
987   }
988   input:focus {
989     outline: 0;
990   }
991 }
992
993 @include mixins.smaller-than(vars.$bp-l) {
994   .dropdown-search-dropdown {
995     inset-inline: vars.$m auto;
996   }
997   .dropdown-search-dropdown .dropdown-search-list {
998     max-height: 240px;
999   }
1000 }
1001
1002 .item-list {
1003   box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
1004 }
1005 .item-list-row {
1006   border: 1.5px solid;
1007   @include mixins.lightDark(border-color, #E2E2E2, #444);
1008   border-bottom-width: 0;
1009   label {
1010     padding-bottom: 0;
1011   }
1012   &:hover {
1013     @include mixins.lightDark(background-color, #F6F6F6, #333);
1014   }
1015 }
1016 .item-list-row:first-child {
1017   border-radius: 4px 4px 0 0;
1018 }
1019 .item-list-row:last-child {
1020   border-radius: 0 0 4px 4px;
1021   border-bottom-width: 1.5px;
1022 }
1023 .item-list-row:first-child:last-child {
1024   border-radius: 4px;
1025 }
1026 .item-list-row-toggle-all {
1027   visibility: hidden;
1028 }
1029 .item-list-row:hover .item-list-row-toggle-all {
1030   visibility: visible;
1031 }
1032
1033 .status-indicator-active, .status-indicator-inactive {
1034   width: 8px;
1035   height: 8px;
1036   border-radius: 50%;
1037   display: inline-block;
1038 }
1039 .status-indicator-active {
1040   background-color: var(--color-positive);
1041 }
1042 .status-indicator-inactive {
1043   background-color: var(--color-negative);
1044 }
1045
1046 .shortcut-container {
1047   background-color: rgba(0, 0, 0, 0.25);
1048   pointer-events: none;
1049   position: fixed;
1050   left: 0;
1051   top: 0;
1052   width: 100%;
1053   height: 100%;
1054   z-index: 99;
1055 }
1056 .shortcut-linkage {
1057   position: fixed;
1058   box-shadow: 0 0 4px 0 #FFF;
1059   border-radius: 3px;
1060 }
1061 .shortcut-hint {
1062   position: fixed;
1063   padding: vars.$xxs vars.$xxs;
1064   font-size: .85rem;
1065   font-weight: 700;
1066   line-height: 1;
1067   background-color: #eee;
1068   border-radius: 3px;
1069   border: 1px solid #b4b4b4;
1070   box-shadow: 0 1px 1px rgba(0, 0, 0, .2), 0 2px 0 0 rgba(255, 255, 255, .7) inset;
1071   color: #333;
1072 }
1073
1074 // Back to top link
1075 $btt-size: 40px;
1076 .back-to-top {
1077   background-color: var(--color-primary);
1078   position: fixed;
1079   bottom: vars.$m;
1080   right: vars.$l;
1081   padding: 5px 7px;
1082   cursor: pointer;
1083   color: #FFF;
1084   fill: #FFF;
1085   svg {
1086     width: math.div($btt-size, 1.5);
1087     height: math.div($btt-size, 1.5);
1088     margin-inline-end: 4px;
1089   }
1090   width: $btt-size;
1091   height: $btt-size;
1092   border-radius: $btt-size;
1093   transition: all ease-in-out 180ms;
1094   opacity: 0;
1095   z-index: 999;
1096   overflow: hidden;
1097   &:hover {
1098     width: $btt-size*3.4;
1099     opacity: 1 !important;
1100   }
1101   .inner {
1102     width: $btt-size*3.4;
1103   }
1104   span {
1105     position: relative;
1106     vertical-align: top;
1107     line-height: 2;
1108   }
1109 }
1110
1111 // Sortable scroll boxes
1112 .scroll-box {
1113   list-style: none;
1114   padding: 0;
1115   margin: 0;
1116   max-height: 280px;
1117   overflow-y: scroll;
1118   border: 1px solid;
1119   @include mixins.lightDark(border-color, #DDD, #000);
1120   border-radius: 3px;
1121   min-height: 20px;
1122   @include mixins.lightDark(background-color, #EEE, #000);
1123 }
1124 .scroll-box-item {
1125   border-bottom: 1px solid;
1126   border-top: 1px solid;
1127   @include mixins.lightDark(border-color, #DDD, #000);
1128   margin-top: -1px;
1129   @include mixins.lightDark(background-color, #FFF, #222);
1130   display: flex;
1131   align-items: flex-start;
1132   padding: 1px;
1133   &:last-child {
1134     border-bottom: 0;
1135   }
1136   &:hover {
1137     cursor: pointer;
1138     @include mixins.lightDark(background-color, #f8f8f8, #333);
1139   }
1140   &.items-center {
1141     align-items: center;
1142   }
1143   .handle {
1144     color: #AAA;
1145     cursor: grab;
1146   }
1147   button {
1148     opacity: .6;
1149     line-height: 1;
1150   }
1151   .handle svg {
1152     margin: 0;
1153   }
1154   > * {
1155     padding: vars.$xs vars.$m;
1156   }
1157   .handle + * {
1158     padding-left: 0;
1159   }
1160   &:hover .handle {
1161     @include mixins.lightDark(color, #444, #FFF);
1162   }
1163   &:hover button {
1164     opacity: 1;
1165   }
1166   a:hover {
1167     text-decoration: none;
1168   }
1169 }
1170
1171 input.scroll-box-search, .scroll-box-header-item {
1172   font-size: 0.8rem;
1173   border: 1px solid;
1174   @include mixins.lightDark(border-color, #DDD, #000);
1175   @include mixins.lightDark(background-color, #FFF, #222);
1176   margin-bottom: -1px;
1177   border-radius: 3px 3px 0 0;
1178   width: 100%;
1179   max-width: 100%;
1180   height: auto;
1181   line-height: 1.4;
1182   color: #666;
1183 }
1184
1185 .scroll-box-search + .scroll-box,
1186 .scroll-box-header-item + .scroll-box {
1187   border-radius: 0 0 3px 3px;
1188 }
1189
1190 .scroll-box.configured-option-list [data-action="add"] {
1191   display: none;
1192 }
1193 .scroll-box.available-option-list [data-action="remove"],
1194 .scroll-box.available-option-list [data-action="move_up"],
1195 .scroll-box.available-option-list [data-action="move_down"],
1196 {
1197   display: none;
1198 }
1199
1200 .scroll-box > li.empty-state {
1201   display: none;
1202 }
1203 .scroll-box > li.empty-state:last-child {
1204   display: list-item;
1205 }