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