kedhar-ui 0.2.1 → 0.3.1

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.
@@ -44,6 +44,7 @@
44
44
  --ks-leading-tight: 1.25;
45
45
  --ks-leading-normal: 1.5;
46
46
  --ks-leading-relaxed: 1.625;
47
+ --ks-leading-body: 1.7;
47
48
 
48
49
  --ks-weight-normal: 400;
49
50
  --ks-weight-medium: 500;
@@ -110,7 +111,7 @@ body {
110
111
  padding: 0;
111
112
  font-family: var(--ks-font-sans);
112
113
  font-size: var(--ks-text-base);
113
- line-height: var(--ks-leading-normal);
114
+ line-height: var(--ks-leading-body);
114
115
  color: var(--ks-color-text);
115
116
  background-color: var(--ks-color-bg);
116
117
  -webkit-font-smoothing: antialiased;
@@ -131,6 +132,20 @@ a:hover {
131
132
  color: var(--ks-color-primary-hover);
132
133
  }
133
134
 
135
+ /* Underline animation for inline links */
136
+ .ks-link-underline {
137
+ background-image: linear-gradient(var(--ks-color-primary), var(--ks-color-primary));
138
+ background-size: 0% 2px;
139
+ background-repeat: no-repeat;
140
+ background-position: left bottom;
141
+ transition: background-size var(--ks-duration-normal) var(--ks-ease-out);
142
+ padding-bottom: 2px;
143
+ }
144
+
145
+ .ks-link-underline:hover {
146
+ background-size: 100% 2px;
147
+ }
148
+
134
149
  /* ─── Images ───────────────────────────────────────────────── */
135
150
  img {
136
151
  max-width: 100%;
@@ -333,9 +348,11 @@ pre {
333
348
  transition: transform var(--ks-duration-normal) var(--ks-ease-spring);
334
349
  }
335
350
 
336
- .dark .ks-toggle-knob svg {
337
- transform: rotate(90deg);
338
- }
351
+ /* Sun icon visible in light mode, hidden in dark mode */
352
+ .ks-toggle-knob .ks-icon-sun { display: inline; }
353
+ .ks-toggle-knob .ks-icon-moon { display: none; }
354
+ .dark .ks-toggle-knob .ks-icon-sun { display: none; }
355
+ .dark .ks-toggle-knob .ks-icon-moon { display: inline; }
339
356
 
340
357
  /* Track background halves */
341
358
  .ks-toggle-track {
@@ -354,6 +371,14 @@ pre {
354
371
  transition: color var(--ks-duration-fast) var(--ks-ease-out);
355
372
  }
356
373
 
374
+ .ks-toggle-track span svg {
375
+ stroke: currentColor;
376
+ stroke-width: 2;
377
+ stroke-linecap: round;
378
+ stroke-linejoin: round;
379
+ fill: none;
380
+ }
381
+
357
382
  .dark .ks-toggle-track span:first-child {
358
383
  color: transparent;
359
384
  }
@@ -381,6 +406,7 @@ pre {
381
406
  border: 1px solid var(--ks-color-border);
382
407
  border-radius: var(--ks-radius-lg);
383
408
  padding: var(--ks-space-6);
409
+ box-shadow: var(--ks-shadow-sm);
384
410
  transition:
385
411
  box-shadow var(--ks-duration-normal) var(--ks-ease-out),
386
412
  border-color var(--ks-duration-normal) var(--ks-ease-out),
@@ -389,8 +415,8 @@ pre {
389
415
 
390
416
  .ks-card-hover:hover {
391
417
  border-color: var(--ks-color-primary-alpha);
392
- box-shadow: var(--ks-shadow-md);
393
- transform: translateY(-2px);
418
+ box-shadow: var(--ks-shadow-lg);
419
+ transform: translateY(-3px);
394
420
  }
395
421
 
396
422
 
@@ -734,6 +760,204 @@ pre {
734
760
  border: 0;
735
761
  }
736
762
 
763
+
764
+ /* ══════════════════════════════════════════════════════════════
765
+ 11. Reveal Animations
766
+ ══════════════════════════════════════════════════════════════
767
+ Scroll-triggered reveal via IntersectionObserver + .visible class.
768
+ ══════════════════════════════════════════════════════════════ */
769
+ .ks-reveal {
770
+ opacity: 0;
771
+ transform: translateY(24px);
772
+ transition:
773
+ opacity var(--ks-duration-slow) var(--ks-ease-out),
774
+ transform var(--ks-duration-slow) var(--ks-ease-out);
775
+ }
776
+
777
+ .ks-reveal-up {
778
+ opacity: 0;
779
+ transform: translateY(40px);
780
+ transition:
781
+ opacity var(--ks-duration-slow) var(--ks-ease-out),
782
+ transform var(--ks-duration-slow) var(--ks-ease-out);
783
+ }
784
+
785
+ .ks-reveal.visible,
786
+ .ks-reveal-up.visible {
787
+ opacity: 1;
788
+ transform: translateY(0);
789
+ }
790
+
791
+ /* Stagger children */
792
+ .ks-stagger > * {
793
+ opacity: 0;
794
+ transform: translateY(20px);
795
+ transition:
796
+ opacity var(--ks-duration-slow) var(--ks-ease-out),
797
+ transform var(--ks-duration-slow) var(--ks-ease-out);
798
+ }
799
+
800
+ .ks-stagger.visible > *:nth-child(1) { transition-delay: 0ms; }
801
+ .ks-stagger.visible > *:nth-child(2) { transition-delay: 80ms; }
802
+ .ks-stagger.visible > *:nth-child(3) { transition-delay: 160ms; }
803
+ .ks-stagger.visible > *:nth-child(4) { transition-delay: 240ms; }
804
+ .ks-stagger.visible > *:nth-child(5) { transition-delay: 320ms; }
805
+ .ks-stagger.visible > *:nth-child(6) { transition-delay: 400ms; }
806
+ .ks-stagger.visible > *:nth-child(7) { transition-delay: 480ms; }
807
+ .ks-stagger.visible > *:nth-child(8) { transition-delay: 560ms; }
808
+ .ks-stagger.visible > *:nth-child(9) { transition-delay: 640ms; }
809
+ .ks-stagger.visible > *:nth-child(10) { transition-delay: 720ms; }
810
+
811
+ .ks-stagger.visible > * {
812
+ opacity: 1;
813
+ transform: translateY(0);
814
+ }
815
+
816
+
817
+ /* ══════════════════════════════════════════════════════════════
818
+ 12. Hero Section
819
+ ══════════════════════════════════════════════════════════════ */
820
+ .ks-hero {
821
+ min-height: 70vh;
822
+ display: flex;
823
+ align-items: center;
824
+ justify-content: center;
825
+ text-align: center;
826
+ padding: var(--ks-space-16) var(--ks-space-4);
827
+ position: relative;
828
+ overflow: hidden;
829
+ }
830
+
831
+ .ks-hero-gradient {
832
+ position: absolute;
833
+ inset: 0;
834
+ pointer-events: none;
835
+ z-index: 0;
836
+ }
837
+
838
+ .ks-hero-gradient::before {
839
+ content: '';
840
+ position: absolute;
841
+ top: -50%;
842
+ left: -50%;
843
+ width: 200%;
844
+ height: 200%;
845
+ background: radial-gradient(ellipse at 30% 50%, var(--ks-color-primary-alpha) 0%, transparent 60%),
846
+ radial-gradient(ellipse at 70% 50%, var(--ks-color-primary-light) 0%, transparent 50%);
847
+ opacity: 0.6;
848
+ }
849
+
850
+ .dark .ks-hero-gradient::before {
851
+ opacity: 0.3;
852
+ }
853
+
854
+ .ks-hero-content {
855
+ position: relative;
856
+ z-index: 1;
857
+ max-width: 720px;
858
+ }
859
+
860
+ .ks-hero-badge {
861
+ display: inline-flex;
862
+ align-items: center;
863
+ gap: var(--ks-space-1);
864
+ padding: var(--ks-space-1) var(--ks-space-3);
865
+ border-radius: var(--ks-radius-full);
866
+ font-size: var(--ks-text-sm);
867
+ font-weight: var(--ks-weight-medium);
868
+ color: var(--ks-color-primary);
869
+ background: var(--ks-color-primary-alpha);
870
+ margin-bottom: var(--ks-space-4);
871
+ }
872
+
873
+ .ks-hero h1 {
874
+ font-size: clamp(2rem, 5vw, 3.5rem);
875
+ font-weight: var(--ks-weight-bold);
876
+ letter-spacing: -0.03em;
877
+ line-height: 1.1;
878
+ color: var(--ks-color-text);
879
+ margin: 0 0 var(--ks-space-4);
880
+ }
881
+
882
+ .ks-hero p {
883
+ font-size: clamp(1rem, 2vw, 1.2rem);
884
+ color: var(--ks-color-text-muted);
885
+ line-height: var(--ks-leading-relaxed);
886
+ max-width: 560px;
887
+ margin: 0 auto var(--ks-space-8);
888
+ }
889
+
890
+ .ks-hero-actions {
891
+ display: flex;
892
+ gap: var(--ks-space-3);
893
+ justify-content: center;
894
+ flex-wrap: wrap;
895
+ }
896
+
897
+
898
+ /* ══════════════════════════════════════════════════════════════
899
+ 13. Section Header
900
+ ══════════════════════════════════════════════════════════════ */
901
+ .ks-section-header {
902
+ text-align: center;
903
+ margin-bottom: var(--ks-space-10);
904
+ }
905
+
906
+ .ks-section-header h2 {
907
+ font-size: var(--ks-text-3xl);
908
+ font-weight: var(--ks-weight-bold);
909
+ color: var(--ks-color-text);
910
+ letter-spacing: -0.02em;
911
+ margin: 0 0 var(--ks-space-2);
912
+ }
913
+
914
+ @media (min-width: 640px) {
915
+ .ks-section-header h2 {
916
+ font-size: var(--ks-text-4xl);
917
+ }
918
+ }
919
+
920
+ .ks-section-header p {
921
+ color: var(--ks-color-text-muted);
922
+ max-width: 480px;
923
+ margin: 0 auto;
924
+ }
925
+
926
+ .ks-section-divider {
927
+ width: 48px;
928
+ height: 3px;
929
+ border-radius: var(--ks-radius-full);
930
+ background: var(--ks-color-primary);
931
+ margin: var(--ks-space-3) auto 0;
932
+ }
933
+
934
+
935
+ /* ══════════════════════════════════════════════════════════════
936
+ 14. Button Active State
937
+ ══════════════════════════════════════════════════════════════ */
938
+ .ks-btn:active {
939
+ transform: scale(0.97);
940
+ }
941
+
942
+
943
+ /* ══════════════════════════════════════════════════════════════
944
+ 15. Nav Link Active Indicator
945
+ ══════════════════════════════════════════════════════════════ */
946
+ .ks-nav-links a.active,
947
+ .ks-nav-links a[aria-current="page"] {
948
+ color: var(--ks-color-text);
949
+ }
950
+
951
+ .ks-nav-links a.active::after,
952
+ .ks-nav-links a[aria-current="page"]::after {
953
+ content: '';
954
+ display: block;
955
+ height: 2px;
956
+ border-radius: var(--ks-radius-full);
957
+ background: var(--ks-color-primary);
958
+ margin-top: 2px;
959
+ }
960
+
737
961
  /* ══════════════════════════════════════════════════════════════
738
962
  Theme: Indigo — Portfolio site
739
963
  ══════════════════════════════════════════════════════════════ */
@@ -44,6 +44,7 @@
44
44
  --ks-leading-tight: 1.25;
45
45
  --ks-leading-normal: 1.5;
46
46
  --ks-leading-relaxed: 1.625;
47
+ --ks-leading-body: 1.7;
47
48
 
48
49
  --ks-weight-normal: 400;
49
50
  --ks-weight-medium: 500;
@@ -110,7 +111,7 @@ body {
110
111
  padding: 0;
111
112
  font-family: var(--ks-font-sans);
112
113
  font-size: var(--ks-text-base);
113
- line-height: var(--ks-leading-normal);
114
+ line-height: var(--ks-leading-body);
114
115
  color: var(--ks-color-text);
115
116
  background-color: var(--ks-color-bg);
116
117
  -webkit-font-smoothing: antialiased;
@@ -131,6 +132,20 @@ a:hover {
131
132
  color: var(--ks-color-primary-hover);
132
133
  }
133
134
 
135
+ /* Underline animation for inline links */
136
+ .ks-link-underline {
137
+ background-image: linear-gradient(var(--ks-color-primary), var(--ks-color-primary));
138
+ background-size: 0% 2px;
139
+ background-repeat: no-repeat;
140
+ background-position: left bottom;
141
+ transition: background-size var(--ks-duration-normal) var(--ks-ease-out);
142
+ padding-bottom: 2px;
143
+ }
144
+
145
+ .ks-link-underline:hover {
146
+ background-size: 100% 2px;
147
+ }
148
+
134
149
  /* ─── Images ───────────────────────────────────────────────── */
135
150
  img {
136
151
  max-width: 100%;
@@ -333,9 +348,11 @@ pre {
333
348
  transition: transform var(--ks-duration-normal) var(--ks-ease-spring);
334
349
  }
335
350
 
336
- .dark .ks-toggle-knob svg {
337
- transform: rotate(90deg);
338
- }
351
+ /* Sun icon visible in light mode, hidden in dark mode */
352
+ .ks-toggle-knob .ks-icon-sun { display: inline; }
353
+ .ks-toggle-knob .ks-icon-moon { display: none; }
354
+ .dark .ks-toggle-knob .ks-icon-sun { display: none; }
355
+ .dark .ks-toggle-knob .ks-icon-moon { display: inline; }
339
356
 
340
357
  /* Track background halves */
341
358
  .ks-toggle-track {
@@ -354,6 +371,14 @@ pre {
354
371
  transition: color var(--ks-duration-fast) var(--ks-ease-out);
355
372
  }
356
373
 
374
+ .ks-toggle-track span svg {
375
+ stroke: currentColor;
376
+ stroke-width: 2;
377
+ stroke-linecap: round;
378
+ stroke-linejoin: round;
379
+ fill: none;
380
+ }
381
+
357
382
  .dark .ks-toggle-track span:first-child {
358
383
  color: transparent;
359
384
  }
@@ -381,6 +406,7 @@ pre {
381
406
  border: 1px solid var(--ks-color-border);
382
407
  border-radius: var(--ks-radius-lg);
383
408
  padding: var(--ks-space-6);
409
+ box-shadow: var(--ks-shadow-sm);
384
410
  transition:
385
411
  box-shadow var(--ks-duration-normal) var(--ks-ease-out),
386
412
  border-color var(--ks-duration-normal) var(--ks-ease-out),
@@ -389,8 +415,8 @@ pre {
389
415
 
390
416
  .ks-card-hover:hover {
391
417
  border-color: var(--ks-color-primary-alpha);
392
- box-shadow: var(--ks-shadow-md);
393
- transform: translateY(-2px);
418
+ box-shadow: var(--ks-shadow-lg);
419
+ transform: translateY(-3px);
394
420
  }
395
421
 
396
422
 
@@ -734,6 +760,204 @@ pre {
734
760
  border: 0;
735
761
  }
736
762
 
763
+
764
+ /* ══════════════════════════════════════════════════════════════
765
+ 11. Reveal Animations
766
+ ══════════════════════════════════════════════════════════════
767
+ Scroll-triggered reveal via IntersectionObserver + .visible class.
768
+ ══════════════════════════════════════════════════════════════ */
769
+ .ks-reveal {
770
+ opacity: 0;
771
+ transform: translateY(24px);
772
+ transition:
773
+ opacity var(--ks-duration-slow) var(--ks-ease-out),
774
+ transform var(--ks-duration-slow) var(--ks-ease-out);
775
+ }
776
+
777
+ .ks-reveal-up {
778
+ opacity: 0;
779
+ transform: translateY(40px);
780
+ transition:
781
+ opacity var(--ks-duration-slow) var(--ks-ease-out),
782
+ transform var(--ks-duration-slow) var(--ks-ease-out);
783
+ }
784
+
785
+ .ks-reveal.visible,
786
+ .ks-reveal-up.visible {
787
+ opacity: 1;
788
+ transform: translateY(0);
789
+ }
790
+
791
+ /* Stagger children */
792
+ .ks-stagger > * {
793
+ opacity: 0;
794
+ transform: translateY(20px);
795
+ transition:
796
+ opacity var(--ks-duration-slow) var(--ks-ease-out),
797
+ transform var(--ks-duration-slow) var(--ks-ease-out);
798
+ }
799
+
800
+ .ks-stagger.visible > *:nth-child(1) { transition-delay: 0ms; }
801
+ .ks-stagger.visible > *:nth-child(2) { transition-delay: 80ms; }
802
+ .ks-stagger.visible > *:nth-child(3) { transition-delay: 160ms; }
803
+ .ks-stagger.visible > *:nth-child(4) { transition-delay: 240ms; }
804
+ .ks-stagger.visible > *:nth-child(5) { transition-delay: 320ms; }
805
+ .ks-stagger.visible > *:nth-child(6) { transition-delay: 400ms; }
806
+ .ks-stagger.visible > *:nth-child(7) { transition-delay: 480ms; }
807
+ .ks-stagger.visible > *:nth-child(8) { transition-delay: 560ms; }
808
+ .ks-stagger.visible > *:nth-child(9) { transition-delay: 640ms; }
809
+ .ks-stagger.visible > *:nth-child(10) { transition-delay: 720ms; }
810
+
811
+ .ks-stagger.visible > * {
812
+ opacity: 1;
813
+ transform: translateY(0);
814
+ }
815
+
816
+
817
+ /* ══════════════════════════════════════════════════════════════
818
+ 12. Hero Section
819
+ ══════════════════════════════════════════════════════════════ */
820
+ .ks-hero {
821
+ min-height: 70vh;
822
+ display: flex;
823
+ align-items: center;
824
+ justify-content: center;
825
+ text-align: center;
826
+ padding: var(--ks-space-16) var(--ks-space-4);
827
+ position: relative;
828
+ overflow: hidden;
829
+ }
830
+
831
+ .ks-hero-gradient {
832
+ position: absolute;
833
+ inset: 0;
834
+ pointer-events: none;
835
+ z-index: 0;
836
+ }
837
+
838
+ .ks-hero-gradient::before {
839
+ content: '';
840
+ position: absolute;
841
+ top: -50%;
842
+ left: -50%;
843
+ width: 200%;
844
+ height: 200%;
845
+ background: radial-gradient(ellipse at 30% 50%, var(--ks-color-primary-alpha) 0%, transparent 60%),
846
+ radial-gradient(ellipse at 70% 50%, var(--ks-color-primary-light) 0%, transparent 50%);
847
+ opacity: 0.6;
848
+ }
849
+
850
+ .dark .ks-hero-gradient::before {
851
+ opacity: 0.3;
852
+ }
853
+
854
+ .ks-hero-content {
855
+ position: relative;
856
+ z-index: 1;
857
+ max-width: 720px;
858
+ }
859
+
860
+ .ks-hero-badge {
861
+ display: inline-flex;
862
+ align-items: center;
863
+ gap: var(--ks-space-1);
864
+ padding: var(--ks-space-1) var(--ks-space-3);
865
+ border-radius: var(--ks-radius-full);
866
+ font-size: var(--ks-text-sm);
867
+ font-weight: var(--ks-weight-medium);
868
+ color: var(--ks-color-primary);
869
+ background: var(--ks-color-primary-alpha);
870
+ margin-bottom: var(--ks-space-4);
871
+ }
872
+
873
+ .ks-hero h1 {
874
+ font-size: clamp(2rem, 5vw, 3.5rem);
875
+ font-weight: var(--ks-weight-bold);
876
+ letter-spacing: -0.03em;
877
+ line-height: 1.1;
878
+ color: var(--ks-color-text);
879
+ margin: 0 0 var(--ks-space-4);
880
+ }
881
+
882
+ .ks-hero p {
883
+ font-size: clamp(1rem, 2vw, 1.2rem);
884
+ color: var(--ks-color-text-muted);
885
+ line-height: var(--ks-leading-relaxed);
886
+ max-width: 560px;
887
+ margin: 0 auto var(--ks-space-8);
888
+ }
889
+
890
+ .ks-hero-actions {
891
+ display: flex;
892
+ gap: var(--ks-space-3);
893
+ justify-content: center;
894
+ flex-wrap: wrap;
895
+ }
896
+
897
+
898
+ /* ══════════════════════════════════════════════════════════════
899
+ 13. Section Header
900
+ ══════════════════════════════════════════════════════════════ */
901
+ .ks-section-header {
902
+ text-align: center;
903
+ margin-bottom: var(--ks-space-10);
904
+ }
905
+
906
+ .ks-section-header h2 {
907
+ font-size: var(--ks-text-3xl);
908
+ font-weight: var(--ks-weight-bold);
909
+ color: var(--ks-color-text);
910
+ letter-spacing: -0.02em;
911
+ margin: 0 0 var(--ks-space-2);
912
+ }
913
+
914
+ @media (min-width: 640px) {
915
+ .ks-section-header h2 {
916
+ font-size: var(--ks-text-4xl);
917
+ }
918
+ }
919
+
920
+ .ks-section-header p {
921
+ color: var(--ks-color-text-muted);
922
+ max-width: 480px;
923
+ margin: 0 auto;
924
+ }
925
+
926
+ .ks-section-divider {
927
+ width: 48px;
928
+ height: 3px;
929
+ border-radius: var(--ks-radius-full);
930
+ background: var(--ks-color-primary);
931
+ margin: var(--ks-space-3) auto 0;
932
+ }
933
+
934
+
935
+ /* ══════════════════════════════════════════════════════════════
936
+ 14. Button Active State
937
+ ══════════════════════════════════════════════════════════════ */
938
+ .ks-btn:active {
939
+ transform: scale(0.97);
940
+ }
941
+
942
+
943
+ /* ══════════════════════════════════════════════════════════════
944
+ 15. Nav Link Active Indicator
945
+ ══════════════════════════════════════════════════════════════ */
946
+ .ks-nav-links a.active,
947
+ .ks-nav-links a[aria-current="page"] {
948
+ color: var(--ks-color-text);
949
+ }
950
+
951
+ .ks-nav-links a.active::after,
952
+ .ks-nav-links a[aria-current="page"]::after {
953
+ content: '';
954
+ display: block;
955
+ height: 2px;
956
+ border-radius: var(--ks-radius-full);
957
+ background: var(--ks-color-primary);
958
+ margin-top: 2px;
959
+ }
960
+
737
961
  /* ══════════════════════════════════════════════════════════════
738
962
  Theme: Slate — mssql-scripts site (neutral / technical)
739
963
  ══════════════════════════════════════════════════════════════ */