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.
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
+ }