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