jekyll-theme-zer0 0.17.0 → 0.18.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +74 -0
- data/README.md +1 -1
- data/_includes/components/cookie-consent.html +81 -9
- data/_includes/components/js-cdn.html +4 -1
- data/_includes/components/mermaid.html +260 -14
- data/_includes/components/search-modal.html +56 -0
- data/_includes/core/branding.html +12 -13
- data/_includes/core/head.html +1 -0
- data/_includes/core/header.html +38 -11
- data/_includes/navigation/navbar.html +31 -0
- data/_layouts/landing.html +21 -21
- data/_layouts/root.html +3 -0
- data/_sass/core/code-copy.scss +45 -6
- data/_sass/custom.scss +620 -1
- data/assets/js/code-copy.js +79 -13
- data/assets/js/modules/navigation/keyboard.js +9 -2
- data/assets/js/search-modal.js +239 -0
- data/assets/js/ui-enhancements.js +164 -0
- data/scripts/init_setup.sh +544 -0
- data/scripts/test-notebook-conversion.sh +105 -0
- metadata +11 -6
data/_sass/custom.scss
CHANGED
|
@@ -231,6 +231,21 @@ img {
|
|
|
231
231
|
background-color: var(--bs-body-bg);
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
+
#navbar .navbar-main {
|
|
235
|
+
align-items: center;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
#navbar .site-title-text,
|
|
239
|
+
#navbar .site-subtitle-text {
|
|
240
|
+
display: inline-block;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
#navbar .nav-search-button {
|
|
244
|
+
display: inline-flex;
|
|
245
|
+
align-items: center;
|
|
246
|
+
gap: 0.25rem;
|
|
247
|
+
}
|
|
248
|
+
|
|
234
249
|
// Hidden state - slides up out of view
|
|
235
250
|
// Using higher specificity to override Bootstrap's fixed-top
|
|
236
251
|
#navbar.navbar-hidden {
|
|
@@ -244,6 +259,73 @@ img {
|
|
|
244
259
|
}
|
|
245
260
|
}
|
|
246
261
|
|
|
262
|
+
@media (max-width: 991.98px) {
|
|
263
|
+
#navbar .navbar-main {
|
|
264
|
+
display: flex;
|
|
265
|
+
align-items: center;
|
|
266
|
+
justify-content: space-between;
|
|
267
|
+
gap: 0.5rem;
|
|
268
|
+
padding-left: 0.5rem;
|
|
269
|
+
padding-right: 0.5rem;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
#navbar .navbar-brand-group {
|
|
273
|
+
flex: 1 1 auto;
|
|
274
|
+
min-width: 0;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
#navbar .site-title .nav-link {
|
|
278
|
+
padding: 0;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
#navbar .site-title-text {
|
|
282
|
+
max-width: 45vw;
|
|
283
|
+
white-space: nowrap;
|
|
284
|
+
overflow: hidden;
|
|
285
|
+
text-overflow: ellipsis;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
#navbar .navbar-brand img {
|
|
289
|
+
width: 28px;
|
|
290
|
+
height: 28px;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
#navbar .navbar-toggler {
|
|
294
|
+
width: 2.5rem;
|
|
295
|
+
height: 2.5rem;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
#navbar .nav-search-button {
|
|
299
|
+
width: 2.5rem;
|
|
300
|
+
height: 2.5rem;
|
|
301
|
+
padding: 0;
|
|
302
|
+
justify-content: center;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.search-modal .modal-content {
|
|
307
|
+
border-radius: 0.75rem;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.search-modal .input-group-text {
|
|
311
|
+
background-color: var(--bs-tertiary-bg);
|
|
312
|
+
border-color: var(--bs-border-color);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.search-modal kbd {
|
|
316
|
+
background-color: var(--bs-tertiary-bg);
|
|
317
|
+
color: var(--bs-body-color);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.search-modal .search-results {
|
|
321
|
+
max-height: 50vh;
|
|
322
|
+
overflow-y: auto;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.search-modal .list-group-item {
|
|
326
|
+
border-color: var(--bs-border-color-translucent);
|
|
327
|
+
}
|
|
328
|
+
|
|
247
329
|
$enable-cssgrid: true;
|
|
248
330
|
$enable-grid-classes: false;
|
|
249
331
|
|
|
@@ -376,4 +458,541 @@ $enable-grid-classes: false;
|
|
|
376
458
|
}
|
|
377
459
|
.folder {
|
|
378
460
|
cursor: pointer;
|
|
379
|
-
}
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
// ==============================================================================
|
|
464
|
+
// UI/UX ENHANCEMENTS - Modern, polished interactions
|
|
465
|
+
// ==============================================================================
|
|
466
|
+
|
|
467
|
+
// Hero Section Enhancements
|
|
468
|
+
.bg-primary {
|
|
469
|
+
position: relative;
|
|
470
|
+
overflow: hidden;
|
|
471
|
+
|
|
472
|
+
&::before {
|
|
473
|
+
content: '';
|
|
474
|
+
position: absolute;
|
|
475
|
+
top: 0;
|
|
476
|
+
left: 0;
|
|
477
|
+
right: 0;
|
|
478
|
+
bottom: 0;
|
|
479
|
+
background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 100%);
|
|
480
|
+
pointer-events: none;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Hero content animations
|
|
485
|
+
.bg-primary .container-xl {
|
|
486
|
+
animation: fadeInUp 0.8s ease-out;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
@keyframes fadeInUp {
|
|
490
|
+
from {
|
|
491
|
+
opacity: 0;
|
|
492
|
+
transform: translateY(30px);
|
|
493
|
+
}
|
|
494
|
+
to {
|
|
495
|
+
opacity: 1;
|
|
496
|
+
transform: translateY(0);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Enhanced Button Styles
|
|
501
|
+
.btn {
|
|
502
|
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
503
|
+
position: relative;
|
|
504
|
+
overflow: hidden;
|
|
505
|
+
|
|
506
|
+
&::before {
|
|
507
|
+
content: '';
|
|
508
|
+
position: absolute;
|
|
509
|
+
top: 50%;
|
|
510
|
+
left: 50%;
|
|
511
|
+
width: 0;
|
|
512
|
+
height: 0;
|
|
513
|
+
border-radius: 50%;
|
|
514
|
+
background: rgba(255, 255, 255, 0.2);
|
|
515
|
+
transform: translate(-50%, -50%);
|
|
516
|
+
transition: width 0.6s, height 0.6s;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
&:hover::before {
|
|
520
|
+
width: 300px;
|
|
521
|
+
height: 300px;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
&:hover {
|
|
525
|
+
transform: translateY(-2px);
|
|
526
|
+
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
&:active {
|
|
530
|
+
transform: translateY(0);
|
|
531
|
+
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
&.btn-lg {
|
|
535
|
+
padding: 0.75rem 1.5rem;
|
|
536
|
+
font-size: 1.125rem;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.btn-outline-light:hover {
|
|
541
|
+
background-color: rgba(255, 255, 255, 0.95);
|
|
542
|
+
color: var(--bs-primary);
|
|
543
|
+
border-color: rgba(255, 255, 255, 0.95);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.btn-light:hover {
|
|
547
|
+
background-color: rgba(255, 255, 255, 0.9);
|
|
548
|
+
transform: translateY(-2px);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// Enhanced Card Styles
|
|
552
|
+
.card {
|
|
553
|
+
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
554
|
+
border: 1px solid rgba(0, 0, 0, 0.08);
|
|
555
|
+
|
|
556
|
+
&:hover {
|
|
557
|
+
transform: translateY(-8px);
|
|
558
|
+
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
|
|
559
|
+
border-color: rgba(var(--bs-primary-rgb), 0.2);
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
.card-header {
|
|
563
|
+
transition: all 0.3s ease;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
&:hover .card-header {
|
|
567
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// Feature Cards - Icon Animation
|
|
572
|
+
.card-body {
|
|
573
|
+
.rounded-circle {
|
|
574
|
+
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
i {
|
|
578
|
+
transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
.card:hover .rounded-circle {
|
|
583
|
+
transform: scale(1.1) rotate(5deg);
|
|
584
|
+
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
.card:hover .rounded-circle i {
|
|
588
|
+
transform: scale(1.2);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// Code Block Enhancements
|
|
592
|
+
pre {
|
|
593
|
+
position: relative;
|
|
594
|
+
transition: all 0.3s ease;
|
|
595
|
+
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
596
|
+
|
|
597
|
+
&:hover {
|
|
598
|
+
border-color: rgba(var(--bs-primary-rgb), 0.3);
|
|
599
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
code {
|
|
603
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;
|
|
604
|
+
font-size: 0.875rem;
|
|
605
|
+
line-height: 1.6;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
// Quick Links Bar Enhancements
|
|
610
|
+
.bg-dark {
|
|
611
|
+
.btn-outline-light {
|
|
612
|
+
transition: all 0.3s ease;
|
|
613
|
+
border-width: 2px;
|
|
614
|
+
|
|
615
|
+
&:hover {
|
|
616
|
+
background-color: rgba(255, 255, 255, 0.95);
|
|
617
|
+
color: var(--bs-dark);
|
|
618
|
+
transform: translateY(-2px);
|
|
619
|
+
box-shadow: 0 4px 8px rgba(255, 255, 255, 0.2);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
// Smooth Scroll Enhancement
|
|
625
|
+
html {
|
|
626
|
+
scroll-behavior: smooth;
|
|
627
|
+
scroll-padding-top: 80px; // Account for fixed navbar
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
// Section Spacing Improvements
|
|
631
|
+
section,
|
|
632
|
+
.py-5 {
|
|
633
|
+
scroll-margin-top: 80px;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// Landing Page Quick Links Animation
|
|
637
|
+
.bg-dark {
|
|
638
|
+
animation: slideDown 0.6s ease-out;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
@keyframes slideDown {
|
|
642
|
+
from {
|
|
643
|
+
opacity: 0;
|
|
644
|
+
transform: translateY(-20px);
|
|
645
|
+
}
|
|
646
|
+
to {
|
|
647
|
+
opacity: 1;
|
|
648
|
+
transform: translateY(0);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// Feature Section Cards Stagger Animation
|
|
653
|
+
.bg-body-tertiary .row.g-4 > * {
|
|
654
|
+
animation: fadeInUp 0.6s ease-out backwards;
|
|
655
|
+
|
|
656
|
+
&:nth-child(1) { animation-delay: 0.1s; }
|
|
657
|
+
&:nth-child(2) { animation-delay: 0.2s; }
|
|
658
|
+
&:nth-child(3) { animation-delay: 0.3s; }
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// Installation Cards Enhancement
|
|
662
|
+
#get-started .card {
|
|
663
|
+
border-top: 3px solid transparent;
|
|
664
|
+
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
665
|
+
|
|
666
|
+
&:hover {
|
|
667
|
+
border-top-color: var(--bs-primary);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
&.card-header.bg-primary ~ .card-body {
|
|
671
|
+
border-top-color: var(--bs-primary);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
&.card-header.bg-info ~ .card-body {
|
|
675
|
+
border-top-color: var(--bs-info);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
&.card-header.bg-secondary ~ .card-body {
|
|
679
|
+
border-top-color: var(--bs-secondary);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
// Mobile Responsiveness Improvements
|
|
684
|
+
@media (max-width: 768px) {
|
|
685
|
+
.bg-primary .display-4 {
|
|
686
|
+
font-size: 2rem;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
.bg-primary .lead {
|
|
690
|
+
font-size: 1rem;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.btn-lg {
|
|
694
|
+
padding: 0.625rem 1.25rem;
|
|
695
|
+
font-size: 1rem;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
.card {
|
|
699
|
+
margin-bottom: 1rem;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
// Reduce hover effects on mobile for better performance
|
|
703
|
+
.card:hover {
|
|
704
|
+
transform: translateY(-4px);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
.btn:hover {
|
|
708
|
+
transform: none;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// Loading State for Images
|
|
713
|
+
img {
|
|
714
|
+
transition: opacity 0.3s ease;
|
|
715
|
+
|
|
716
|
+
&[loading="lazy"] {
|
|
717
|
+
opacity: 0;
|
|
718
|
+
|
|
719
|
+
&.loaded {
|
|
720
|
+
opacity: 1;
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
// Focus States for Accessibility
|
|
726
|
+
.btn:focus-visible,
|
|
727
|
+
.card:focus-visible,
|
|
728
|
+
a:focus-visible {
|
|
729
|
+
outline: 3px solid rgba(var(--bs-primary-rgb), 0.5);
|
|
730
|
+
outline-offset: 2px;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
// Reduce Motion for Users Who Prefer It
|
|
734
|
+
@media (prefers-reduced-motion: reduce) {
|
|
735
|
+
*,
|
|
736
|
+
*::before,
|
|
737
|
+
*::after {
|
|
738
|
+
animation-duration: 0.01ms !important;
|
|
739
|
+
animation-iteration-count: 1 !important;
|
|
740
|
+
transition-duration: 0.01ms !important;
|
|
741
|
+
scroll-behavior: auto !important;
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
// Table Enhancements
|
|
746
|
+
.table {
|
|
747
|
+
transition: all 0.3s ease;
|
|
748
|
+
|
|
749
|
+
tbody tr {
|
|
750
|
+
transition: background-color 0.2s ease;
|
|
751
|
+
|
|
752
|
+
&:hover {
|
|
753
|
+
background-color: rgba(var(--bs-primary-rgb), 0.05);
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
// Badge Enhancements
|
|
759
|
+
.badge {
|
|
760
|
+
transition: all 0.3s ease;
|
|
761
|
+
|
|
762
|
+
&:hover {
|
|
763
|
+
transform: scale(1.05);
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
// Link Enhancements
|
|
768
|
+
a:not(.btn) {
|
|
769
|
+
transition: color 0.2s ease;
|
|
770
|
+
text-decoration: none;
|
|
771
|
+
|
|
772
|
+
&:hover {
|
|
773
|
+
text-decoration: underline;
|
|
774
|
+
text-underline-offset: 3px;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
// Container Enhancements
|
|
779
|
+
.container-xl {
|
|
780
|
+
position: relative;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
// Hero Image Animation
|
|
784
|
+
.bg-primary img {
|
|
785
|
+
animation: fadeInRight 1s ease-out 0.3s backwards;
|
|
786
|
+
filter: drop-shadow(0 10px 30px rgba(0, 0, 0, 0.3));
|
|
787
|
+
transition: transform 0.3s ease;
|
|
788
|
+
|
|
789
|
+
&:hover {
|
|
790
|
+
transform: scale(1.02);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
@keyframes fadeInRight {
|
|
795
|
+
from {
|
|
796
|
+
opacity: 0;
|
|
797
|
+
transform: translateX(30px);
|
|
798
|
+
}
|
|
799
|
+
to {
|
|
800
|
+
opacity: 1;
|
|
801
|
+
transform: translateX(0);
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// Improved Shadow Utilities
|
|
806
|
+
.shadow-sm {
|
|
807
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08) !important;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
.shadow {
|
|
811
|
+
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.12) !important;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
.shadow-lg {
|
|
815
|
+
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15) !important;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
// Button Ripple Effect
|
|
819
|
+
.btn {
|
|
820
|
+
position: relative;
|
|
821
|
+
overflow: hidden;
|
|
822
|
+
|
|
823
|
+
.ripple {
|
|
824
|
+
position: absolute;
|
|
825
|
+
border-radius: 50%;
|
|
826
|
+
background: rgba(255, 255, 255, 0.6);
|
|
827
|
+
transform: scale(0);
|
|
828
|
+
animation: ripple-animation 0.6s ease-out;
|
|
829
|
+
pointer-events: none;
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
@keyframes ripple-animation {
|
|
834
|
+
to {
|
|
835
|
+
transform: scale(4);
|
|
836
|
+
opacity: 0;
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
// Mobile Navigation Enhancements
|
|
841
|
+
@media (max-width: 991.98px) {
|
|
842
|
+
.navbar-collapse {
|
|
843
|
+
background-color: var(--bs-body-bg);
|
|
844
|
+
border-radius: 0.5rem;
|
|
845
|
+
margin-top: 1rem;
|
|
846
|
+
padding: 1rem;
|
|
847
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
.navbar-nav .nav-link {
|
|
851
|
+
padding: 0.75rem 1rem;
|
|
852
|
+
border-radius: 0.375rem;
|
|
853
|
+
transition: all 0.2s ease;
|
|
854
|
+
|
|
855
|
+
&:hover {
|
|
856
|
+
background-color: rgba(var(--bs-primary-rgb), 0.1);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
// Improved Mobile Hero Section
|
|
862
|
+
@media (max-width: 768px) {
|
|
863
|
+
.bg-primary {
|
|
864
|
+
padding: 2rem 0 !important;
|
|
865
|
+
|
|
866
|
+
.display-4 {
|
|
867
|
+
font-size: 1.75rem;
|
|
868
|
+
line-height: 1.3;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
.lead {
|
|
872
|
+
font-size: 0.95rem;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
.btn-lg {
|
|
876
|
+
width: 100%;
|
|
877
|
+
margin-bottom: 0.5rem;
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
// Better card spacing on mobile
|
|
882
|
+
.row.g-4 > * {
|
|
883
|
+
margin-bottom: 1rem;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
// Improved code block readability on mobile
|
|
887
|
+
pre {
|
|
888
|
+
font-size: 0.8rem;
|
|
889
|
+
padding: 0.75rem;
|
|
890
|
+
overflow-x: auto;
|
|
891
|
+
-webkit-overflow-scrolling: touch;
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
// Touch-friendly tap targets
|
|
896
|
+
@media (hover: none) and (pointer: coarse) {
|
|
897
|
+
.btn,
|
|
898
|
+
.card,
|
|
899
|
+
a {
|
|
900
|
+
min-height: 44px; // iOS HIG recommendation
|
|
901
|
+
min-width: 44px;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
// Disable hover effects on touch devices
|
|
905
|
+
.card:hover {
|
|
906
|
+
transform: none;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
.btn:hover {
|
|
910
|
+
transform: none;
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
// Improved focus visibility for keyboard navigation
|
|
915
|
+
*:focus-visible {
|
|
916
|
+
outline: 2px solid var(--bs-primary);
|
|
917
|
+
outline-offset: 2px;
|
|
918
|
+
border-radius: 0.25rem;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// Enhanced active link states
|
|
922
|
+
.nav-link.active,
|
|
923
|
+
.btn.active {
|
|
924
|
+
position: relative;
|
|
925
|
+
|
|
926
|
+
&::after {
|
|
927
|
+
content: '';
|
|
928
|
+
position: absolute;
|
|
929
|
+
bottom: 0;
|
|
930
|
+
left: 50%;
|
|
931
|
+
transform: translateX(-50%);
|
|
932
|
+
width: 80%;
|
|
933
|
+
height: 2px;
|
|
934
|
+
background-color: currentColor;
|
|
935
|
+
border-radius: 2px;
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
// Better table responsiveness
|
|
940
|
+
@media (max-width: 768px) {
|
|
941
|
+
.table-responsive {
|
|
942
|
+
border-radius: 0.5rem;
|
|
943
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
.table {
|
|
947
|
+
font-size: 0.875rem;
|
|
948
|
+
|
|
949
|
+
th, td {
|
|
950
|
+
padding: 0.5rem;
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
// Improved badge styling
|
|
956
|
+
.badge {
|
|
957
|
+
font-weight: 500;
|
|
958
|
+
letter-spacing: 0.025em;
|
|
959
|
+
padding: 0.35em 0.65em;
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
// Enhanced form controls
|
|
963
|
+
.form-control:focus,
|
|
964
|
+
.form-select:focus {
|
|
965
|
+
border-color: var(--bs-primary);
|
|
966
|
+
box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.25);
|
|
967
|
+
transform: translateY(-1px);
|
|
968
|
+
transition: all 0.2s ease;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
// Loading skeleton for better perceived performance
|
|
972
|
+
.skeleton {
|
|
973
|
+
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
974
|
+
background-size: 200% 100%;
|
|
975
|
+
animation: loading 1.5s ease-in-out infinite;
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
@keyframes loading {
|
|
979
|
+
0% { background-position: 200% 0; }
|
|
980
|
+
100% { background-position: -200% 0; }
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
// Print optimizations
|
|
984
|
+
@media print {
|
|
985
|
+
.btn,
|
|
986
|
+
.card:hover,
|
|
987
|
+
.navbar,
|
|
988
|
+
.footer {
|
|
989
|
+
box-shadow: none !important;
|
|
990
|
+
transform: none !important;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
a[href^="#"]::after {
|
|
994
|
+
content: " (" attr(href) ")";
|
|
995
|
+
font-size: 0.8em;
|
|
996
|
+
color: #666;
|
|
997
|
+
}
|
|
998
|
+
}
|