]> BookStack Code Mirror - bookstack/blob - resources/sass/_components.scss
Comments: Styled content comments & improved interaction
[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-branch .comment-box {
750   margin-bottom: vars.$m;
751 }
752
753 .comment-branch .comment-branch .comment-branch .comment-branch .comment-thread-indicator {
754   display: none;
755 }
756
757 .comment-reply {
758   display: none;
759   margin: 0 !important;
760   margin-bottom: -(vars.$xxs) !important;
761 }
762
763 .comment-branch .comment-branch .comment-branch .comment-branch .comment-reply {
764   display: block;
765 }
766
767 .comment-container-compact .comment-box {
768   margin-bottom: vars.$xs;
769   .meta {
770     font-size: 0.8rem;
771   }
772   .header {
773     padding: vars.$xs;
774   }
775   .right-meta {
776     display: none;
777   }
778   .content {
779     padding: vars.$xs vars.$s;
780   }
781 }
782 .comment-container-compact .comment-thread-indicator {
783   width: vars.$m;
784 }
785
786 .comment-container-super-compact .comment-box {
787   .meta {
788     font-size: 12px;
789   }
790   .avatar {
791     width: 18px;
792     margin-inline-end: 2px !important;
793   }
794   .content {
795     padding: vars.$xxs vars.$s;
796     line-height: 1.2;
797   }
798   .content p {
799     font-size: 12px;
800   }
801 }
802
803 .comment-container-super-compact .comment-thread-indicator {
804   width: (vars.$xs + 3px);
805   margin-inline-start: 3px;
806 }
807
808 #tag-manager .drag-card {
809   max-width: 500px;
810 }
811
812 .template-item {
813   cursor: pointer;
814   position: relative;
815   &:hover, .template-item-actions button:hover {
816     background-color: #F2F2F2;
817   }
818   .template-item-actions {
819     position: absolute;
820     top: 0;
821     inset-inline-end: 0;
822     width: 50px;
823     height: 100%;
824     display: flex;
825     flex-direction: column;
826     border-inline-start: 1px solid;
827     @include mixins.lightDark(border-color, #ddd, #000);
828   }
829   .template-item-actions button {
830     cursor: pointer;
831     flex: 1;
832     @include mixins.lightDark(background-color, #FFF, #222);
833     border: 0;
834     border-top: 1px solid;
835     @include mixins.lightDark(border-color, #DDD, #000);
836   }
837   .template-item-actions button svg {
838     margin: 0;
839   }
840   .template-item-actions button:first-child {
841     border-top: 0;
842   }
843 }
844
845
846 .dropdown-search {
847   position: relative;
848 }
849 .dropdown-search-toggle-breadcrumb {
850   border: 1px solid transparent;
851   border-radius: 4px;
852   line-height: normal;
853   padding: vars.$xs;
854   &:hover {
855     border-color: #DDD;
856   }
857   .svg-icon {
858     margin-inline-end: 0;
859   }
860 }
861 .dropdown-search-toggle-select {
862   display: flex;
863   gap: vars.$s;
864   line-height: normal;
865   .svg-icon {
866     height: 26px;
867     width: 26px;
868     margin: 0;
869   }
870   .avatar {
871     height: 22px;
872     width: 22px;
873   }
874   .avatar + span {
875     max-width: 100%;
876     overflow: hidden;
877     text-overflow: ellipsis;
878     white-space: nowrap;
879   }
880   .dropdown-search-toggle-caret {
881     font-size: 1.15rem;
882   }
883 }
884 .dropdown-search-toggle-select-label {
885   min-width: 0;
886   white-space: nowrap;
887 }
888 .dropdown-search-toggle-select-caret {
889   line-height: 0;
890   margin-left: auto;
891   margin-top: -2px;
892   display: flex;
893   align-items: center;
894 }
895
896 .dropdown-search-dropdown {
897   box-shadow: vars.$bs-med;
898   overflow: hidden;
899   min-height: 100px;
900   width: 240px;
901   display: none;
902   position: absolute;
903   z-index: 80;
904   right: 0;
905   top: 0;
906   margin-top: vars.$m;
907   @include mixins.rtl {
908     right: auto;
909     left: -(vars.$m);
910   }
911   .dropdown-search-search .svg-icon {
912     position: absolute;
913     left: vars.$s;
914     @include mixins.rtl {
915       right: vars.$s;
916       left: auto;
917     }
918     top: 11px;
919     fill: #888;
920     pointer-events: none;
921   }
922   .dropdown-search-list {
923     max-height: 400px;
924     overflow-y: scroll;
925     text-align: start;
926   }
927   .dropdown-search-item {
928     padding: vars.$s vars.$m;
929     &:hover,&:focus {
930       background-color: #F2F2F2;
931       text-decoration: none;
932     }
933   }
934   input, input:focus {
935     padding-inline-start: vars.$xl;
936     border-radius: 0;
937     border: 0;
938     border-bottom: 1px solid #DDD;
939   }
940   input:focus {
941     outline: 0;
942   }
943 }
944
945 @include mixins.smaller-than(vars.$bp-l) {
946   .dropdown-search-dropdown {
947     inset-inline: vars.$m auto;
948   }
949   .dropdown-search-dropdown .dropdown-search-list {
950     max-height: 240px;
951   }
952 }
953
954 .item-list {
955   box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
956 }
957 .item-list-row {
958   border: 1.5px solid;
959   @include mixins.lightDark(border-color, #E2E2E2, #444);
960   border-bottom-width: 0;
961   label {
962     padding-bottom: 0;
963   }
964   &:hover {
965     @include mixins.lightDark(background-color, #F6F6F6, #333);
966   }
967 }
968 .item-list-row:first-child {
969   border-radius: 4px 4px 0 0;
970 }
971 .item-list-row:last-child {
972   border-radius: 0 0 4px 4px;
973   border-bottom-width: 1.5px;
974 }
975 .item-list-row:first-child:last-child {
976   border-radius: 4px;
977 }
978 .item-list-row-toggle-all {
979   visibility: hidden;
980 }
981 .item-list-row:hover .item-list-row-toggle-all {
982   visibility: visible;
983 }
984
985 .status-indicator-active, .status-indicator-inactive {
986   width: 8px;
987   height: 8px;
988   border-radius: 50%;
989   display: inline-block;
990 }
991 .status-indicator-active {
992   background-color: var(--color-positive);
993 }
994 .status-indicator-inactive {
995   background-color: var(--color-negative);
996 }
997
998 .shortcut-container {
999   background-color: rgba(0, 0, 0, 0.25);
1000   pointer-events: none;
1001   position: fixed;
1002   left: 0;
1003   top: 0;
1004   width: 100%;
1005   height: 100%;
1006   z-index: 99;
1007 }
1008 .shortcut-linkage {
1009   position: fixed;
1010   box-shadow: 0 0 4px 0 #FFF;
1011   border-radius: 3px;
1012 }
1013 .shortcut-hint {
1014   position: fixed;
1015   padding: vars.$xxs vars.$xxs;
1016   font-size: .85rem;
1017   font-weight: 700;
1018   line-height: 1;
1019   background-color: #eee;
1020   border-radius: 3px;
1021   border: 1px solid #b4b4b4;
1022   box-shadow: 0 1px 1px rgba(0, 0, 0, .2), 0 2px 0 0 rgba(255, 255, 255, .7) inset;
1023   color: #333;
1024 }
1025
1026 // Back to top link
1027 $btt-size: 40px;
1028 .back-to-top {
1029   background-color: var(--color-primary);
1030   position: fixed;
1031   bottom: vars.$m;
1032   right: vars.$l;
1033   padding: 5px 7px;
1034   cursor: pointer;
1035   color: #FFF;
1036   fill: #FFF;
1037   svg {
1038     width: math.div($btt-size, 1.5);
1039     height: math.div($btt-size, 1.5);
1040     margin-inline-end: 4px;
1041   }
1042   width: $btt-size;
1043   height: $btt-size;
1044   border-radius: $btt-size;
1045   transition: all ease-in-out 180ms;
1046   opacity: 0;
1047   z-index: 999;
1048   overflow: hidden;
1049   &:hover {
1050     width: $btt-size*3.4;
1051     opacity: 1 !important;
1052   }
1053   .inner {
1054     width: $btt-size*3.4;
1055   }
1056   span {
1057     position: relative;
1058     vertical-align: top;
1059     line-height: 2;
1060   }
1061 }
1062
1063 // Sortable scroll boxes
1064 .scroll-box {
1065   list-style: none;
1066   padding: 0;
1067   margin: 0;
1068   max-height: 280px;
1069   overflow-y: scroll;
1070   border: 1px solid;
1071   @include mixins.lightDark(border-color, #DDD, #000);
1072   border-radius: 3px;
1073   min-height: 20px;
1074   @include mixins.lightDark(background-color, #EEE, #000);
1075 }
1076 .scroll-box-item {
1077   border-bottom: 1px solid;
1078   border-top: 1px solid;
1079   @include mixins.lightDark(border-color, #DDD, #000);
1080   margin-top: -1px;
1081   @include mixins.lightDark(background-color, #FFF, #222);
1082   display: flex;
1083   align-items: flex-start;
1084   padding: 1px;
1085   &:last-child {
1086     border-bottom: 0;
1087   }
1088   &:hover {
1089     cursor: pointer;
1090     @include mixins.lightDark(background-color, #f8f8f8, #333);
1091   }
1092   &.items-center {
1093     align-items: center;
1094   }
1095   .handle {
1096     color: #AAA;
1097     cursor: grab;
1098   }
1099   button {
1100     opacity: .6;
1101     line-height: 1;
1102   }
1103   .handle svg {
1104     margin: 0;
1105   }
1106   > * {
1107     padding: vars.$xs vars.$m;
1108   }
1109   .handle + * {
1110     padding-left: 0;
1111   }
1112   &:hover .handle {
1113     @include mixins.lightDark(color, #444, #FFF);
1114   }
1115   &:hover button {
1116     opacity: 1;
1117   }
1118   a:hover {
1119     text-decoration: none;
1120   }
1121 }
1122
1123 input.scroll-box-search, .scroll-box-header-item {
1124   font-size: 0.8rem;
1125   border: 1px solid;
1126   @include mixins.lightDark(border-color, #DDD, #000);
1127   @include mixins.lightDark(background-color, #FFF, #222);
1128   margin-bottom: -1px;
1129   border-radius: 3px 3px 0 0;
1130   width: 100%;
1131   max-width: 100%;
1132   height: auto;
1133   line-height: 1.4;
1134   color: #666;
1135 }
1136
1137 .scroll-box-search + .scroll-box,
1138 .scroll-box-header-item + .scroll-box {
1139   border-radius: 0 0 3px 3px;
1140 }
1141
1142 .scroll-box.configured-option-list [data-action="add"] {
1143   display: none;
1144 }
1145 .scroll-box.available-option-list [data-action="remove"],
1146 .scroll-box.available-option-list [data-action="move_up"],
1147 .scroll-box.available-option-list [data-action="move_down"],
1148 {
1149   display: none;
1150 }
1151
1152 .scroll-box > li.empty-state {
1153   display: none;
1154 }
1155 .scroll-box > li.empty-state:last-child {
1156   display: list-item;
1157 }