jobdone-shared-files 0.0.1-beta.5 → 0.0.1-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/package.json +2 -2
  2. package/style/scss/Bootstrap/_accordion.scss +158 -0
  3. package/style/scss/Bootstrap/_alert.scss +68 -0
  4. package/style/scss/Bootstrap/_badge.scss +38 -0
  5. package/style/scss/Bootstrap/_breadcrumb.scss +40 -0
  6. package/style/scss/Bootstrap/_button-group.scss +142 -0
  7. package/style/scss/Bootstrap/_buttons.scss +207 -0
  8. package/style/scss/Bootstrap/_card.scss +238 -0
  9. package/style/scss/Bootstrap/_carousel.scss +238 -0
  10. package/style/scss/Bootstrap/_close.scss +61 -0
  11. package/style/scss/Bootstrap/_containers.scss +41 -0
  12. package/style/scss/Bootstrap/_dropdown.scss +250 -0
  13. package/style/scss/Bootstrap/_forms.scss +9 -0
  14. package/style/scss/Bootstrap/_grid.scss +33 -0
  15. package/style/scss/Bootstrap/_helpers.scss +10 -0
  16. package/style/scss/Bootstrap/_images.scss +42 -0
  17. package/style/scss/Bootstrap/_list-group.scss +204 -0
  18. package/style/scss/Bootstrap/_maps.scss +121 -0
  19. package/style/scss/Bootstrap/_modal.scss +237 -0
  20. package/style/scss/Bootstrap/_nav.scss +172 -0
  21. package/style/scss/Bootstrap/_navbar.scss +286 -0
  22. package/style/scss/Bootstrap/_offcanvas.scss +146 -0
  23. package/style/scss/Bootstrap/_pagination.scss +109 -0
  24. package/style/scss/Bootstrap/_placeholders.scss +51 -0
  25. package/style/scss/Bootstrap/_popover.scss +196 -0
  26. package/style/scss/Bootstrap/_progress.scss +68 -0
  27. package/style/scss/Bootstrap/_reboot.scss +610 -0
  28. package/style/scss/Bootstrap/_root.scss +195 -0
  29. package/style/scss/Bootstrap/_spinners.scss +85 -0
  30. package/style/scss/Bootstrap/_tables.scss +164 -0
  31. package/style/scss/Bootstrap/_toasts.scss +73 -0
  32. package/style/scss/Bootstrap/_tooltip.scss +120 -0
  33. package/style/scss/Bootstrap/_transitions.scss +27 -0
  34. package/style/scss/Bootstrap/_type.scss +106 -0
  35. package/style/scss/Bootstrap/_utilities.scss +748 -0
  36. package/style/scss/Bootstrap/_variables-dark.scss +70 -0
  37. package/style/scss/Bootstrap/_variables.scss +1703 -0
  38. package/style/scss/Bootstrap/bootstrap-grid.scss +66 -0
  39. package/style/scss/Bootstrap/bootstrap-reboot.scss +10 -0
  40. package/style/scss/Bootstrap/bootstrap-utilities.scss +19 -0
  41. package/style/scss/Bootstrap/bootstrap.scss +52 -0
  42. package/style/scss/Bootstrap/forms/_floating-labels.scss +90 -0
  43. package/style/scss/Bootstrap/forms/_form-check.scss +188 -0
  44. package/style/scss/Bootstrap/forms/_form-control.scss +201 -0
  45. package/style/scss/Bootstrap/forms/_form-range.scss +91 -0
  46. package/style/scss/Bootstrap/forms/_form-select.scss +81 -0
  47. package/style/scss/Bootstrap/forms/_form-text.scss +11 -0
  48. package/style/scss/Bootstrap/forms/_input-group.scss +132 -0
  49. package/style/scss/Bootstrap/forms/_labels.scss +36 -0
  50. package/style/scss/Bootstrap/forms/_validation.scss +12 -0
  51. package/style/scss/Bootstrap/helpers/_clearfix.scss +3 -0
  52. package/style/scss/Bootstrap/helpers/_color-bg.scss +10 -0
  53. package/style/scss/Bootstrap/helpers/_colored-links.scss +12 -0
  54. package/style/scss/Bootstrap/helpers/_position.scss +36 -0
  55. package/style/scss/Bootstrap/helpers/_ratio.scss +26 -0
  56. package/style/scss/Bootstrap/helpers/_stacks.scss +15 -0
  57. package/style/scss/Bootstrap/helpers/_stretched-link.scss +15 -0
  58. package/style/scss/Bootstrap/helpers/_text-truncation.scss +7 -0
  59. package/style/scss/Bootstrap/helpers/_visually-hidden.scss +8 -0
  60. package/style/scss/Bootstrap/helpers/_vr.scss +8 -0
  61. package/style/scss/Bootstrap/utilities/_api.scss +47 -0
  62. package/style/scss/Layout/LayoutBase.scss +939 -0
  63. package/style/scss/Layout/LayoutProject.scss +124 -0
  64. package/style/scss/Layout/LayoutSinglePage.scss +14 -0
  65. package/style/scss/Layout/LayoutTwoColumn.scss +56 -0
@@ -0,0 +1,939 @@
1
+ // ====================================
2
+ // Plugin
3
+ // ====================================
4
+
5
+ // Custom Bootstrap
6
+ @import "../Bootstrap/functions";
7
+ @import "../Settings/bs-variables";
8
+ @import "../Bootstrap/bootstrap.scss";
9
+
10
+
11
+ // ====================================
12
+ // Helpers
13
+ // ====================================
14
+
15
+ // Mixins
16
+ @import "../Settings/Mixins";
17
+
18
+
19
+ // ====================================
20
+ // Custom Style
21
+ // ====================================
22
+
23
+ @import "../Settings/color-mode";
24
+ @import "../Settings/custom-variables";
25
+
26
+
27
+ @mixin gradient-bg(){
28
+ &:before{
29
+ content: "";
30
+ display: block;
31
+ @include position-center();
32
+ z-index: 0;
33
+ background: $gradient-blue-light;
34
+ pointer-events: none;
35
+ transition: $transition-base;
36
+ }
37
+ }
38
+
39
+ @mixin gradient-bg-hover-to-show($opacity: 1){
40
+ @include gradient-bg();
41
+ &:before{ opacity: 0; }
42
+ &:hover:before{ opacity: $opacity; }
43
+ }
44
+
45
+ // general ------------------------------------------
46
+ [v-cloak]{
47
+ display: none !important;
48
+ }
49
+
50
+ body,
51
+ .overflow-auto, .overflow-scroll,
52
+ .overflow-y-auto, .overflow-y-scroll,
53
+ .offcanvas-body, textarea{
54
+ @include scrollbar();
55
+ }
56
+
57
+ .overflow-x-auto, .overflow-x-scroll, .scrollbar-sm, .table-responsive{
58
+ @include scrollbar();
59
+ --scrollbar-width: 6px;
60
+ overflow-x: auto;
61
+ -webkit-overflow-scrolling: touch;
62
+ }
63
+
64
+ .scrollbar-gutter-stable{
65
+ // Safari 暫不支援
66
+ scrollbar-gutter: stable;
67
+ }
68
+
69
+ body{
70
+ background-color: var(--gray-200);
71
+ --maz-color-primary: var(--bs-primary);
72
+ --maz-color-secondary: var(--bs-secondary);
73
+ --maz-color-info: var(--bs-info);
74
+ --maz-color-success: var(--bs-success);
75
+ --maz-color-warning: var(--bs-warning);
76
+ --maz-color-danger: var(--bs-danger);
77
+ --maz-color-bg: var(--bs-body-bg);
78
+ --maz-color-text: var(--bs-body-color);
79
+ --maz-color-muted: var(--bs-secondary-color);
80
+ }
81
+
82
+ ul, ol{
83
+ &.list-reset{
84
+ list-style-type: none;
85
+ padding-left: 0;
86
+ }
87
+ }
88
+ // general ------------------------------------------
89
+
90
+
91
+ // text / link ------------------------------------------
92
+ a{
93
+ text-decoration: none;
94
+ // 如果需要底線使用 <u></u> tag
95
+ transition: $transition-base;
96
+ &.a-reset-color{
97
+ color: inherit;
98
+ }
99
+ &.a-hover-gradient{
100
+ position: relative;
101
+ @include gradient-bg-hover-to-show();
102
+ }
103
+ }
104
+
105
+ .text-link{
106
+ color: var(--bs-link-color);
107
+ &:hover{
108
+ color: var(--bs-link-hover-color);
109
+ }
110
+ }
111
+
112
+ .text-overflow{
113
+ @include text-overflow();
114
+ }
115
+
116
+ @for $i from 1 through 5 {
117
+ .text-line-clamp-#{$i} {
118
+ @include text-line-clamp(#{$i});
119
+ }
120
+ }
121
+
122
+ @for $i from 1 through 5 {
123
+ .letter-spacing-#{$i} {
124
+ letter-spacing: #{$i}px;
125
+ }
126
+ }
127
+
128
+ // text / link ------------------------------------------
129
+
130
+
131
+
132
+ // badge outline ------------------------------------------
133
+
134
+ @each $color, $value in $colors {
135
+ .badge-outline-#{$color}{
136
+ color: $value;
137
+ border: $border-width solid rgba($value, .5);
138
+ background-color: rgba($value, .1);
139
+ }
140
+ }
141
+
142
+ // badge outline ------------------------------------------
143
+
144
+
145
+
146
+ // checkbox / radio ------------------------------------------
147
+
148
+ .check-label{
149
+ cursor: pointer;
150
+ &, &:before, span{
151
+ vertical-align: middle;
152
+ transition: $transition-base;
153
+ }
154
+ &:before{
155
+ content: "check_box_outline_blank";
156
+ display: inline-block;
157
+ margin-right: .1em;
158
+ color: var(--gray-500);
159
+ font-family: 'Material Icons';
160
+ font-size: 120%;
161
+ line-height: inherit;
162
+ white-space: nowrap;
163
+ -webkit-font-feature-settings: 'liga';
164
+ -webkit-font-smoothing: antialiased;
165
+ }
166
+ &:not(.badge):hover{
167
+ &, &:before, span{
168
+ color: $primary;
169
+ }
170
+ }
171
+ }
172
+
173
+ .check-group{
174
+ position: relative;
175
+ display: inline-block;
176
+ vertical-align: middle;
177
+ &:not(:last-child){
178
+ margin-right: 1em;
179
+ }
180
+ > input[type="checkbox"], > input[type="radio"]{
181
+ position: absolute;
182
+ opacity: 0;
183
+ pointer-events: none;
184
+ &:checked ~ .check-label:before{
185
+ color: $primary;
186
+ }
187
+ // disabled style
188
+ &:disabled ~ .check-label{
189
+ cursor: not-allowed;
190
+ span, &:hover span,
191
+ &:before, &:hover &:before{
192
+ color: var(--gray-500);
193
+ }
194
+ }
195
+ &:checked:disabled ~ .check-label{
196
+ &:before, &:hover &:before{
197
+ color: var(--gray-600);
198
+ }
199
+ }
200
+ }
201
+ > input[type="checkbox"] ~ .check-label:before{ content: "check_box_outline_blank"; }
202
+ > input[type="radio"] ~ .check-label:before{ content: "radio_button_unchecked"; }
203
+ > input[type="checkbox"]:checked ~ .check-label:before{ content: "check_box"; }
204
+ > input[type="radio"]:checked ~ .check-label:before{ content: "radio_button_checked"; }
205
+ }
206
+ // checkbox / radio ------------------------------------------
207
+
208
+ // star ------------------------------------------
209
+ .check-star-group{
210
+ > input[type="checkbox"], > input[type="radio"]{
211
+ ~ .check-label:before{
212
+ content: "star_border";
213
+ font-size: 1.5em;
214
+ }
215
+ ~ .check-label:hover:before{
216
+ color: $warning;
217
+ }
218
+ &:checked ~ .check-label:before{
219
+ content: "star";
220
+ color: $warning;
221
+ }
222
+ }
223
+ }
224
+ // star ------------------------------------------
225
+
226
+
227
+ // switch ------------------------------------------
228
+
229
+ :root{
230
+ --switch-w: 24px;
231
+ --switch-h: 12px;
232
+ --switch-padding: 2px;
233
+ --switch-ball-size: calc( var(--switch-h) - var(--switch-padding)*2);
234
+
235
+ }
236
+ .check-switch-group{
237
+ // reset
238
+ .check-label:before{ content: ""; }
239
+ .check-label .switch-item{
240
+ position: relative;
241
+ display: inline-block;
242
+ width: var(--switch-w);
243
+ height: var(--switch-h);
244
+ border-radius: var(--switch-h);
245
+ background-color: var(--gray-500);
246
+ vertical-align: middle;
247
+ &, &:before{
248
+ transition: $transition-base;
249
+ }
250
+ &:before{
251
+ content: "";
252
+ position: absolute;
253
+ top: 0;
254
+ left: var(--switch-padding);
255
+ bottom: 0;
256
+ margin: auto;
257
+ @include size(var(--switch-ball-size));
258
+ border-radius: 50%;
259
+ background-color: $white;
260
+ }
261
+ }
262
+ > input[type="checkbox"], > input[type="radio"]{
263
+ // reset
264
+ ~ .check-label:before{ content: ""; }
265
+ &:checked ~ .check-label:before{ content: ""; }
266
+
267
+ &:not(:disabled) ~ .check-label:hover .switch-item:before{
268
+ will-change: left;
269
+ }
270
+
271
+ &:checked ~ .check-label .switch-item:before{
272
+ left: calc( var(--switch-w) - var(--switch-padding) - var(--switch-ball-size));
273
+ }
274
+
275
+ // disabled style
276
+ &:disabled ~ .check-label .switch-item{
277
+ background-color: var(--gray-400);
278
+ }
279
+ &:checked:disabled ~ .check-label .switch-item{
280
+ background-color: var(--gray-600);
281
+ }
282
+ }
283
+ &-md{
284
+ --switch-w: 30px;
285
+ --switch-h: 15px;
286
+ --switch-padding: 3px;
287
+ --switch-ball-size: calc( var(--switch-h) - var(--switch-padding)*2);
288
+ }
289
+ &-lg{
290
+ --switch-w: 36px;
291
+ --switch-h: 18px;
292
+ --switch-padding: 3px;
293
+ --switch-ball-size: calc( var(--switch-h) - var(--switch-padding)*2);
294
+ }
295
+ &-with-description{
296
+ .switch-item{
297
+ margin-top: .35em;
298
+ }
299
+ .check-label{
300
+ display: flex;
301
+ }
302
+ }
303
+ &-display .check-label{
304
+ cursor: auto;
305
+ }
306
+ }
307
+ @each $color, $value in $colors {
308
+ .check-switch-group.check-switch-group-#{$color}{
309
+ &:hover .check-label .switch-item{
310
+ background-color: rgba($value, .5);
311
+ }
312
+ > input[type="checkbox"], > input[type="radio"]{
313
+ &:checked:not(:disabled) ~ .check-label .switch-item{
314
+ background-color: $value;
315
+ }
316
+ }
317
+ &.check-switch-group-display{
318
+ pointer-events: none;
319
+ }
320
+ &.check-switch-group-display.active .check-label .switch-item{
321
+ background-color: $value;
322
+ &:before{
323
+ left: calc( var(--switch-w) - var(--switch-padding) - var(--switch-ball-size));
324
+ }
325
+ }
326
+ }
327
+ }
328
+
329
+ // badge 版本
330
+ .check-label.badge{
331
+ --bs-badge-padding-x: 1em;
332
+ --bs-badge-padding-y: 0.5em;
333
+ --bs-badge-font-size: var(--bs-body-font-size);
334
+ --bs-badge-font-weight: --bs-body-font-weight;
335
+ }
336
+ .check-switch-group.check-switch-group{
337
+ input:not(:checked) ~ .check-label.badge{
338
+ background-color: var(--gray-100);
339
+ border-color: var(--gray-300);
340
+ span{
341
+ color: var(--gray-500);
342
+ }
343
+ }
344
+ input:not(:checked):disabled ~ .check-label.badge{
345
+ &:hover{
346
+ background-color: var(--gray-100);
347
+ border-color: var(--gray-300);
348
+ }
349
+ &:hover span, span{
350
+ color: var(--gray-400);
351
+ }
352
+ }
353
+ input:checked ~ .check-label.badge{
354
+ &:hover span, span{
355
+ color: currentColor;
356
+ }
357
+ .switch-item{
358
+ background-color: currentColor;
359
+ }
360
+ }
361
+ }
362
+ @each $color, $value in $colors {
363
+ .check-switch-group.check-switch-group-#{$color}{
364
+ input:not(:disabled):not(:checked) ~ .check-label.badge:hover{
365
+ background-color: rgba($value, .05);
366
+ border-color: rgba($value, .25);
367
+ .switch-item{
368
+ background-color: rgba($value, .5);
369
+ }
370
+ span{
371
+ color: rgba($value, .75);
372
+ }
373
+ }
374
+ }
375
+ }
376
+ // switch ------------------------------------------
377
+
378
+
379
+
380
+
381
+ // table ------------------------------------------
382
+ th, td{
383
+ transition: $transition-base;
384
+ }
385
+ .table > .thead-default:not(caption) > * > *{
386
+ font-size: $font-size-sm;
387
+ background-color: var(--gray-200);
388
+ letter-spacing: 0.5px;
389
+ }
390
+
391
+ // firefox 暫不支援
392
+ .table tr:has(.dropdown-delete:hover){
393
+ th:not([scope="col"]), td:not([scope="col"]){
394
+ --bs-table-accent-bg: transparent;
395
+ --bs-table-bg: transparent;
396
+ background-color: $table-danger-bg;
397
+ color: var(--bs-danger);
398
+ }
399
+ }
400
+
401
+ // table ------------------------------------------
402
+
403
+
404
+
405
+ // icon ------------------------------------------
406
+ .text-with-icon > *{
407
+ vertical-align: middle;
408
+ }
409
+
410
+ .material-icons{
411
+ $icon-sizes: 14, 18, 24, 28, 32;
412
+
413
+ font-size: 24px;
414
+ @each $size in $icon-sizes{
415
+ &.icon-#{$size} { font-size: #{$size}px; }
416
+ }
417
+ }
418
+ // icon ------------------------------------------
419
+
420
+
421
+ // button ------------------------------------------
422
+ .btn > *{
423
+ vertical-align: middle;
424
+ }
425
+
426
+ .btn-round-effect{
427
+ position: relative;
428
+ display: inline-flex;
429
+ align-items: center;
430
+ justify-content: center;
431
+ @include size(2em);
432
+ padding: 0;
433
+ text-decoration: none;
434
+ *{
435
+ z-index: 2;
436
+ }
437
+ &:before{
438
+ content: "";
439
+ display: block;
440
+ @include position-center();
441
+ border-radius: 50%;
442
+ background-color: var(--bs-link-color);
443
+ z-index: 1;
444
+ opacity: 0;
445
+ transform: scale(0);
446
+ transition: $transition-base;
447
+ }
448
+ &:hover:before{
449
+ opacity: .1;
450
+ transform: scale(1);
451
+ }
452
+ }
453
+
454
+ // @property --rotate {
455
+ // syntax: "<angle>";
456
+ // initial-value: 132deg;
457
+ // inherits: false;
458
+ // }
459
+
460
+ @keyframes gradient-position {
461
+ 0% {
462
+ transform: translateX(0);
463
+ }
464
+ 50% {
465
+ transform: translateX(-50%);
466
+ }
467
+ 100% {
468
+ transform: translateX(0);
469
+ }
470
+ }
471
+ .btn-gradient-effect{
472
+ --bs-btn-color: #fff;
473
+ --bs-btn-hover-color: #fff;
474
+ --bs-btn-active-color: #fff;
475
+
476
+ position: relative;
477
+ overflow: hidden;
478
+ border: 0;
479
+
480
+ &:before{
481
+ content: "";
482
+ display: block;
483
+ position: absolute;
484
+ top: 0; left: 0;
485
+ width: 200%; height: 100%;
486
+ background: linear-gradient(110deg, $cyan 0%, $purple 50%, $cyan 100%);
487
+ animation: gradient-position 3s ease-in-out infinite;
488
+ animation-fill-mode: both;
489
+ z-index: 1;
490
+ transition: $transition-base;
491
+ }
492
+ &, &:hover, &:hover:active{
493
+ background-color: $primary;
494
+ }
495
+ &:hover:before{
496
+ opacity: .4;
497
+ }
498
+ &:focus{
499
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.25);
500
+ }
501
+ > *{
502
+ position: relative;
503
+ z-index: 2;
504
+ }
505
+ }
506
+ // button ------------------------------------------
507
+
508
+
509
+ // input ------------------------------------------
510
+ .form-group{
511
+ > label, .form-label{
512
+ margin-bottom: 0.25rem;
513
+ color: var(--gray-500);
514
+ font-size: $font-size-sm;
515
+ font-weight: $font-weight-bold;
516
+ }
517
+ }
518
+
519
+ .form-group-frame{
520
+ padding: 1rem;
521
+ border-bottom: $border-width solid $border-color;
522
+ }
523
+ // input ------------------------------------------
524
+
525
+
526
+ // image ------------------------------------------
527
+ .thumbnail-content{
528
+ $thumbnail-sizes: 32, 50, 100, 150;
529
+
530
+ @include size(50px);
531
+ background-color: $white;
532
+ background-position: 50% 50%;
533
+ background-size: cover;
534
+ border: $border-width solid var(--#{$prefix}border-color);
535
+ border-radius: 50%;
536
+ overflow: hidden;
537
+ @each $size in $thumbnail-sizes{
538
+ &.thumbnail-#{$size} { @include solid-size(#{$size}px); }
539
+ }
540
+ &.thumbnail-rwd{
541
+ @include rwd-square(100%);
542
+ }
543
+ }
544
+ // image ------------------------------------------
545
+
546
+
547
+ // dropdown ------------------------------------------
548
+ .dropdown-menu{
549
+ box-shadow: $box-shadow;
550
+ }
551
+ .dropdown-delete{
552
+ color: $danger;
553
+ &:hover{
554
+ --bs-dropdown-link-hover-bg: var(--bs-danger);
555
+ background-color: $danger;
556
+ }
557
+ }
558
+ .dropdown-menu{
559
+ --scrollbar-width: 8px;
560
+ --scrollbar-hover-color: rgba(var(--bs-link-color-rgb), 0.5);
561
+ overflow: auto;
562
+ overscroll-behavior: contain;
563
+ @include scrollbar();
564
+ }
565
+ // dropdown ------------------------------------------
566
+
567
+
568
+ // modal ------------------------------------------
569
+ .modal{
570
+ backdrop-filter: blur(2px);
571
+ }
572
+
573
+ .modal-md{
574
+ min-width: 650px;
575
+ }
576
+ // modal ------------------------------------------
577
+
578
+
579
+ // offcanvas ------------------------------------------
580
+ .offcanvas{
581
+ &-md-size{
582
+ --bs-offcanvas-width: 550px;
583
+ }
584
+ &-lg-size{
585
+ --bs-offcanvas-width: 800px;
586
+ }
587
+ &-xl-size{
588
+ --bs-offcanvas-width: 1000px;
589
+ }
590
+ }
591
+ // offcanvas ------------------------------------------
592
+
593
+
594
+ // navbar ------------------------------------------
595
+ $navbar-h: 60px;
596
+ .navbar-main{
597
+ &, .btn.btn-normal, .navbar-line-item {
598
+ min-height: $navbar-h;
599
+ }
600
+ .btn.btn-normal{
601
+ @include flex-center();
602
+ border-radius: 0;
603
+ color: var(--bs-nav-link-color);
604
+ &:hover{
605
+ color: var(--bs-link-color);
606
+ background-color: $primary-bg-light;
607
+ }
608
+ }
609
+ .btn-square{
610
+ @include size($navbar-h);
611
+ }
612
+ }
613
+ // navbar ------------------------------------------
614
+
615
+
616
+ // 側邊的清單 ------------------------------------------
617
+
618
+ $list-highlight-border-w: .4rem;
619
+
620
+ @mixin list-group-active(){
621
+ font-weight: $font-weight-medium;
622
+ border-left-color: currentColor;
623
+ --bs-list-group-active-color: var(--bs-link-color);
624
+ --bs-list-group-active-bg: transparent;
625
+ @include gradient-bg();
626
+ }
627
+
628
+ .list-group{
629
+ overflow: hidden;
630
+ > li{
631
+ position: relative;
632
+ }
633
+ .material-icon-more{
634
+ transition: $transition-base;
635
+ }
636
+ }
637
+
638
+ // 一般選單 style
639
+ $list-item-padding-x: 1rem;
640
+
641
+ .list-group-aside{
642
+ border-radius: 0;
643
+ .list-group-item{
644
+ display: flex;
645
+ align-items: center;
646
+ padding: .8rem $list-item-padding-x;
647
+ border-right: 0;
648
+ border-color: transparent;
649
+ border-left: $list-highlight-border-w solid transparent;
650
+ background-color: var(--bs-body-bg);
651
+ cursor: pointer;
652
+ transition: $transition-base;
653
+ &:before{ content: ""; }
654
+ &.active{
655
+ @include list-group-active();
656
+ }
657
+ &:not(.active):hover{
658
+ border-top-color: var(--bs-body-bg);
659
+ border-bottom-color: rgba(var(--bs-link-color-rgb), .1);
660
+ border-left-color: $primary-sub-highlight;
661
+ --bs-list-group-action-hover-color: rgba(var(--bs-link-color-rgb), .8);
662
+ --bs-list-group-action-hover-bg: transparent;
663
+ @include gradient-bg-hover-to-show(.7);
664
+ }
665
+ &:hover .material-icon-more{
666
+ color: var(--bs-link-color);
667
+ }
668
+ }
669
+ }
670
+
671
+ // 子選單 style
672
+ .child-body, .child-container{
673
+ width: 100%;
674
+ }
675
+ .child-body{
676
+ background: var(--gray-100);
677
+ }
678
+ .child-container{
679
+ border-left: $list-highlight-border-w solid var(--gray-400);
680
+ }
681
+ .child-list-head{
682
+ padding: .25rem $list-item-padding-x;
683
+ color: var(--gray-500);
684
+ background-color: var(--gray-200);
685
+ font-weight: $font-weight-bold;
686
+ border-bottom: $border-width solid var(--gray-400);
687
+ }
688
+ a.child-list-item{
689
+ position: relative;
690
+ display: block;
691
+ padding: .5rem $list-item-padding-x;
692
+ font-size: $font-size-sm;
693
+
694
+ &:hover{
695
+ color: var(--bs-link-color);
696
+ }
697
+ &.active{
698
+ color: var(--bs-link-color);
699
+ @include gradient-bg();
700
+ }
701
+ &.disabled, &:disabled{
702
+ color: var(--bs-list-group-disabled-color);
703
+ pointer-events: none;
704
+ }
705
+ @include gradient-bg-hover-to-show(.7);
706
+ }
707
+
708
+
709
+ // 子選單開合
710
+ // https://stackoverflow.com/questions/3508605/how-can-i-transition-height-0-to-height-auto-using-css
711
+ $list-toogle-speed: .35s;
712
+ $list-toogle-in-background: $list-toogle-speed linear;
713
+
714
+ .list-group-haschild:hover ~ .child-body{
715
+ &:after{ will-change: height, max-height; }
716
+ > .child-container { will-change: max-height, margin-bottom; }
717
+ }
718
+
719
+ .child-body{
720
+ position: relative;
721
+ display: flex;
722
+ overflow: hidden;
723
+ &:after { content: ''; }
724
+ // 關閉 -----------------
725
+ &:after{
726
+ height: 0;
727
+ max-height: 50px;
728
+ transition: height $list-toogle-in-background;
729
+ }
730
+ > .child-container {
731
+ margin-bottom: -2000px;
732
+ visibility: hidden;
733
+ max-height: 0;
734
+ transition: margin-bottom $list-toogle-speed cubic-bezier(1, 0, 1, 1),
735
+ visibility 0s $list-toogle-speed,
736
+ max-height 0s $list-toogle-speed;
737
+ }
738
+ // 關閉 -----------------
739
+ }
740
+
741
+ .list-group-haschild-input:checked{
742
+ ~ .list-group-item{
743
+ @include list-group-active();
744
+ .material-icon-more{
745
+ transform: rotate(-180deg);
746
+ }
747
+ }
748
+ ~ .child-body{
749
+ // 打開 -----------------
750
+ &:after {
751
+ height: 50px;
752
+ transition: height $list-toogle-in-background,
753
+ max-height 0s $list-toogle-in-background;
754
+ max-height: 0px;
755
+ }
756
+ > .child-container{
757
+ transition: margin-bottom $list-toogle-speed cubic-bezier(0, 0, 0, 1);
758
+ margin-bottom: 0;
759
+ visibility: visible;
760
+ max-height: 1000000px;
761
+ }
762
+ // 打開 -----------------
763
+ }
764
+ }
765
+
766
+ // 側邊的清單 ------------------------------------------
767
+
768
+
769
+
770
+ // navbar ------------------------------------------
771
+ .nav-link.active{
772
+ font-weight: $font-weight-bold;
773
+ }
774
+ // navbar ------------------------------------------
775
+
776
+
777
+ // 有底線的 tab bar ------------------------------------------
778
+ .navbar-line{
779
+ &:hover .navbar-line-item{
780
+ &:before { will-change: width, left; }
781
+ ~ .navbar-line-item:before{ will-change: left; }
782
+ }
783
+ // LG 版本 (底線較粗)
784
+ &.navbar-line-lg .navbar-line-item:before{
785
+ border-bottom-width: 4px;
786
+ }
787
+ }
788
+
789
+ a.navbar-line-item{
790
+ --bs-link-color-rgb: 100, 122, 241;
791
+ }
792
+ .navbar-line-item{
793
+ position: relative;
794
+ @include flex-center();
795
+ --bs-navbar-nav-link-padding-x: 1.5rem;
796
+ color: var(--bs-nav-link-color);
797
+ &:before{
798
+ content: "";
799
+ position: absolute;
800
+ top: 0;
801
+ left: 100%;
802
+ width: 0;
803
+ height: 100%;
804
+ border-bottom: 2px solid var(--bs-link-color);
805
+ transition: $transition-base;
806
+ pointer-events: none;
807
+ z-index: 1;
808
+ }
809
+ &:hover{
810
+ background: $primary-bg-light;
811
+ &:before {
812
+ width: 100%;
813
+ left: 0;
814
+ }
815
+ ~ .navbar-line-item:before{
816
+ left: 0;
817
+ }
818
+ }
819
+ &:not(.active):hover:before{
820
+ border-color: $primary-sub-highlight;
821
+ }
822
+ &.active:before{
823
+ width: 100%;
824
+ left: 0;
825
+ }
826
+ }
827
+ // dropdown 版本
828
+ .navbar-line-item.dropdown{
829
+ padding: 0;
830
+ padding-left: 0 !important;
831
+ padding-right: 0 !important;
832
+ // (firefox 暫不支援)
833
+ &:has(.dropdown-toggle[aria-expanded="true"]){
834
+ background: $primary-bg-light;
835
+ &:before{
836
+ width: 100%;
837
+ left: 0;
838
+ border-bottom-color: $primary-sub-highlight;
839
+ }
840
+ }
841
+ &:not(.active) .dropdown-link{
842
+ color: var(--bs-nav-link-color);
843
+ }
844
+ .dropdown-link{
845
+ @include flex-center();
846
+ height: 100%;
847
+ padding: var(--bs-nav-link-padding-y) var(--bs-navbar-nav-link-padding-x);
848
+ }
849
+ .dropdown-toggle[aria-expanded="true"]{
850
+ color: $primary;
851
+ }
852
+ }
853
+
854
+
855
+ .navbar[data-bs-theme="dark"]{
856
+ .navbar-line-item.dropdown:not(.active) .dropdown-link{
857
+ color: lighten($primary, 15%);
858
+ }
859
+ .navbar-nav .show > .nav-link, .navbar-nav .nav-link.active{
860
+ &, a{
861
+ color: $white;
862
+ }
863
+ }
864
+ .navbar-line-item:before{
865
+ border-bottom-color: lighten($primary, 15%);
866
+ }
867
+ .navbar-line-item.dropdown:not(.active) .dropdown-link,
868
+ .navbar-line-item:before{
869
+ opacity: .9;
870
+ }
871
+ }
872
+ // 有底線的 tab bar ------------------------------------------
873
+
874
+
875
+
876
+ // 固定寬度 ------------------------------------------
877
+ .w-33{
878
+ width: 33.33%;
879
+ }
880
+ .w-66{
881
+ width: 66.66%;
882
+ }
883
+ @for $i from 1 through 10 {
884
+ .w-#{$i}rem {
885
+ width: #{$i}rem;
886
+ }
887
+ }
888
+
889
+ // 固定寬度 ------------------------------------------
890
+
891
+
892
+
893
+ // 無內容物 UI ------------------------------------------
894
+ .no-content{
895
+ padding-top: 10rem;
896
+ .content-img > .material-icons, p{
897
+ opacity: .7;
898
+ }
899
+ .content-img > .material-icons{
900
+ font-size: 7rem;
901
+ opacity: .5;
902
+ }
903
+ p{
904
+ font-size: 1.25rem;
905
+ }
906
+ }
907
+ // 無內容物 UI ------------------------------------------
908
+
909
+
910
+
911
+ // 暫定:螢幕寬度小於 992px 不可使用 ------------------------------------------
912
+ .mobile-forbidden{
913
+ display: none;
914
+ }
915
+ @media (max-width: 992px) {
916
+ body{
917
+ overflow: hidden;
918
+ }
919
+ .mobile-forbidden{
920
+ position: fixed;
921
+ top: 0;
922
+ left: 0;
923
+ right: 0;
924
+ bottom: 0;
925
+ margin: auto;
926
+ @include flex-center();
927
+ flex-direction: column;
928
+ padding: 2rem;
929
+ font-size: $font-size-lg;
930
+ text-align: center;
931
+ color: var(--gray-500);
932
+ background: $white $gradient-blue-light;
933
+ z-index: $zindex-max;
934
+ img {
935
+ width: 20rem;
936
+ }
937
+ }
938
+ }
939
+ // 暫定:螢幕寬度小於 992px 不可使用 ------------------------------------------