@nuvoui/core 0.2.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.
Files changed (48) hide show
  1. package/README.md +19 -0
  2. package/dist/dark.css +1 -0
  3. package/dist/index.css +1 -0
  4. package/dist/index.css.map +1 -0
  5. package/dist/index.html +15 -0
  6. package/dist/light.css +1 -0
  7. package/dist/main.css +1 -0
  8. package/dist/main.js +1 -0
  9. package/package.json +43 -0
  10. package/src/js/main.js +1 -0
  11. package/src/styles/_global.scss +3 -0
  12. package/src/styles/base/_base.scss +75 -0
  13. package/src/styles/base/_reset.scss +92 -0
  14. package/src/styles/components/_alert.scss +0 -0
  15. package/src/styles/components/_avatar.scss +0 -0
  16. package/src/styles/components/_badge.scss +0 -0
  17. package/src/styles/components/_breadcrumb.scss +0 -0
  18. package/src/styles/components/_button.scss +247 -0
  19. package/src/styles/components/_calendar.scss +0 -0
  20. package/src/styles/components/_card.scss +0 -0
  21. package/src/styles/components/_checkbox.scss +23 -0
  22. package/src/styles/components/_dropdown.scss +0 -0
  23. package/src/styles/components/_form.scss +157 -0
  24. package/src/styles/components/_modal.scss +0 -0
  25. package/src/styles/components/_navbar.scss +125 -0
  26. package/src/styles/components/_pagination.scss +0 -0
  27. package/src/styles/components/_progress.scss +0 -0
  28. package/src/styles/components/_radio.scss +0 -0
  29. package/src/styles/components/_sidebar.scss +0 -0
  30. package/src/styles/components/_table.scss +0 -0
  31. package/src/styles/components/_tabs.scss +0 -0
  32. package/src/styles/components/_tooltip.scss +0 -0
  33. package/src/styles/index.scss +34 -0
  34. package/src/styles/layouts/_container.scss +49 -0
  35. package/src/styles/layouts/_flex.scss +138 -0
  36. package/src/styles/layouts/_grid.scss +147 -0
  37. package/src/styles/themes/_dark.scss +26 -0
  38. package/src/styles/themes/_light.scss +23 -0
  39. package/src/styles/themes/_theme.scss +136 -0
  40. package/src/styles/utilities/_animations.scss +135 -0
  41. package/src/styles/utilities/_colors.scss +158 -0
  42. package/src/styles/utilities/_functions.scss +59 -0
  43. package/src/styles/utilities/_position.scss +97 -0
  44. package/src/styles/utilities/_shadows.scss +107 -0
  45. package/src/styles/utilities/_spacing.scss +109 -0
  46. package/src/styles/utilities/_tooltips.scss +213 -0
  47. package/src/styles/utilities/_typography.scss +108 -0
  48. package/src/styles/utilities/_variables.scss +70 -0
@@ -0,0 +1,125 @@
1
+ // _navbar.scss
2
+
3
+ @use '../utilities/variables' as *;
4
+ @use '../utilities/shadows' as *;
5
+ @use '../layouts/container' as Container;
6
+ @use '../layouts/flex' as Flex;
7
+ @use '../layouts/grid' as Grid;
8
+
9
+ :root {
10
+ --shadow-color: 255, 0, 0;
11
+ }
12
+
13
+ .navbar {
14
+
15
+ @include Flex.between;
16
+ @include Container.container-flex;
17
+
18
+ // @include Grid.grid-flow-row;
19
+ // @include Grid.grid-flow-col;
20
+ // @include Grid.grid-cols(2);
21
+ // @include Container.container-grid;
22
+
23
+ & {
24
+ @include Flex.align-center;
25
+ // @include shadow('md', 'colored');
26
+
27
+ background-color: var(--nav-bg);
28
+
29
+ &:hover {
30
+ @include shadow('lg', 'dark');
31
+ }
32
+
33
+ .logo {
34
+ img {
35
+ max-height: 40px;
36
+ width: auto;
37
+ }
38
+ }
39
+
40
+ .menu {
41
+ @include Flex.flex;
42
+ list-style: none;
43
+ margin: 0;
44
+ padding: 0;
45
+
46
+ li {
47
+ position: relative;
48
+
49
+ a {
50
+ display: block;
51
+ padding: 1rem;
52
+ text-decoration: none;
53
+ color: var(--nav-text);
54
+ transition: background-color 0.2s ease-in-out;
55
+
56
+ &:hover {
57
+ background-color: var(--nav-hover);
58
+ }
59
+ }
60
+
61
+ // Dropdown styles
62
+ &:hover>.submenu {
63
+ display: block;
64
+ visibility: visible;
65
+ opacity: 1;
66
+ pointer-events: auto; // Re-enable interactions
67
+ }
68
+ }
69
+ }
70
+
71
+ .submenu {
72
+ background-color: white;
73
+ display: block;
74
+ visibility: hidden; // Use visibility instead of display
75
+ pointer-events: none; // Prevents interaction when hidden
76
+ opacity: 0;
77
+
78
+ position: absolute;
79
+ top: 100%;
80
+ left: 0;
81
+ min-width: 200px;
82
+ list-style: none;
83
+ margin: 0;
84
+ padding: 0;
85
+ background-color: var(--nav-bg);
86
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
87
+
88
+ // Animation
89
+ transition:
90
+ opacity 0.2s ease-in-out,
91
+ visibility 0.2s ease-in-out;
92
+
93
+ li {
94
+ a {
95
+ padding: 0.75rem 1rem;
96
+ }
97
+ }
98
+
99
+ // Nested dropdowns
100
+ .submenu {
101
+ top: 0;
102
+ left: 100%;
103
+ }
104
+ }
105
+
106
+ @media (max-width: 768px) {
107
+ flex-direction: column;
108
+
109
+ .menu {
110
+ flex-direction: column;
111
+ width: 100%;
112
+
113
+ .submenu {
114
+ position: static;
115
+ display: none;
116
+ width: 100%;
117
+
118
+ li a {
119
+ padding-left: 2rem;
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,34 @@
1
+ // Forward all modules for external use
2
+ @forward 'utilities/variables';
3
+ @forward './global';
4
+
5
+ // Base styles
6
+ @forward 'base/reset';
7
+ @forward 'base/base';
8
+
9
+ // Utilities
10
+ @forward 'utilities/animations';
11
+ @forward 'utilities/colors';
12
+ @forward 'utilities/position';
13
+ @forward 'utilities/shadows';
14
+ @forward 'utilities/spacing';
15
+ @forward 'utilities/typography';
16
+ @forward 'utilities/tooltips';
17
+
18
+ // Layouts
19
+ @forward 'layouts/container';
20
+ @forward 'layouts/flex';
21
+ @forward 'layouts/grid';
22
+
23
+ // Themes
24
+ @forward 'themes/light';
25
+ @forward 'themes/dark';
26
+ @forward 'themes/theme';
27
+
28
+ // Components
29
+ @forward 'components/button';
30
+ @forward 'components/navbar';
31
+ @forward 'components/form';
32
+
33
+ // Local usage
34
+ @use './global' as *;
@@ -0,0 +1,49 @@
1
+ @use 'sass:map';
2
+ @use '../utilities/variables' as *;
3
+
4
+ // Container mixins
5
+ @mixin container-base {
6
+ width: 100%;
7
+ margin-left: auto;
8
+ margin-right: auto;
9
+ padding-left: 1rem;
10
+ padding-right: 1rem;
11
+ }
12
+
13
+ @mixin container {
14
+ @include container-base;
15
+ & {
16
+ @each $breakpoint, $width in $container-max-widths {
17
+ @media (min-width: map.get($breakpoints, $breakpoint)) {
18
+ max-width: $width;
19
+ }
20
+ }
21
+ }
22
+ }
23
+
24
+ @mixin container-flex {
25
+ display: flex;
26
+ @include container;
27
+ }
28
+
29
+ @mixin container-grid {
30
+ display: grid;
31
+ @include container;
32
+ }
33
+
34
+ // Container classes
35
+ .container {
36
+ @include container;
37
+ }
38
+
39
+ .container-flex {
40
+ @include container-flex;
41
+ }
42
+
43
+ .container-grid {
44
+ @include container-grid;
45
+ }
46
+
47
+ .container-fluid {
48
+ @include container-base;
49
+ }
@@ -0,0 +1,138 @@
1
+ @use 'sass:math';
2
+ @use '../utilities/variables' as *;
3
+
4
+ // Flex Container Mixins
5
+ @mixin flex {display: flex;}
6
+ @mixin flex-inline {display: inline-flex;}
7
+
8
+ // Direction Mixins
9
+ @mixin row {flex-direction: row;}
10
+ @mixin row-reverse {flex-direction: row-reverse;}
11
+ @mixin col {flex-direction: column;}
12
+ @mixin col-reverse {flex-direction: column-reverse;}
13
+
14
+ // Wrap Mixins
15
+ @mixin wrap {flex-wrap: wrap;}
16
+ @mixin nowrap {flex-wrap: nowrap;}
17
+ @mixin wrap-reverse {flex-wrap: wrap-reverse;}
18
+
19
+ // Main Axis Alignment Mixins
20
+ @mixin start {justify-content: flex-start;}
21
+ @mixin end {justify-content: flex-end;}
22
+ @mixin center {justify-content: center;}
23
+ @mixin between {justify-content: space-between;}
24
+ @mixin around {justify-content: space-around;}
25
+ @mixin evenly {justify-content: space-evenly;}
26
+
27
+ // Cross Axis Alignment Mixins
28
+ @mixin align-start {align-items: flex-start;}
29
+ @mixin align-end {align-items: flex-end;}
30
+ @mixin align-center {align-items: center;}
31
+ @mixin align-stretch {align-items: stretch;}
32
+ @mixin align-baseline {align-items: baseline;}
33
+
34
+ // Self Alignment Mixins
35
+ @mixin self-auto {align-self: auto;}
36
+ @mixin self-start {align-self: flex-start;}
37
+ @mixin self-end {align-self: flex-end;}
38
+ @mixin self-center {align-self: center;}
39
+ @mixin self-stretch {align-self: stretch;}
40
+
41
+ // Flex Child Mixins
42
+ @mixin w-full {flex: 0 0 100%;}
43
+ @mixin w-auto {flex: 1 1 auto;}
44
+
45
+ // Base flex container
46
+ .flex {
47
+ display: flex;
48
+
49
+ // Direction modifiers
50
+ &.row { flex-direction: row; }
51
+ &.row-reverse { flex-direction: row-reverse; }
52
+ &.col { flex-direction: column; }
53
+ &.col-reverse { flex-direction: column-reverse; }
54
+
55
+ // Wrap modifiers
56
+ &.wrap { flex-wrap: wrap; }
57
+ &.nowrap { flex-wrap: nowrap; }
58
+ &.wrap-reverse { flex-wrap: wrap-reverse; }
59
+
60
+ // Justify modifiers
61
+ &.start { justify-content: flex-start; }
62
+ &.end { justify-content: flex-end; }
63
+ &.center { justify-content: center; }
64
+ &.between { justify-content: space-between; }
65
+ &.around { justify-content: space-around; }
66
+ &.evenly { justify-content: space-evenly; }
67
+
68
+ // Align modifiers
69
+ &.items-start { align-items: flex-start; }
70
+ &.items-end { align-items: flex-end; }
71
+ &.items-center { align-items: center; }
72
+ &.items-baseline { align-items: baseline; }
73
+ &.items-stretch { align-items: stretch; }
74
+
75
+ // Gap modifiers
76
+ @for $i from 0 through 8 {
77
+ &.gap-#{$i} { gap: #{$i * 0.25}rem; }
78
+ }
79
+
80
+ // Child flex items (using column count)
81
+ > .w-auto { flex: 1 1 auto; }
82
+ > .w-full { flex: 0 0 100%; }
83
+
84
+ @for $i from 1 through $column-count {
85
+ > .w-#{$i} {
86
+ flex: 0 0 math.percentage( math.div($i, $column-count));
87
+ }
88
+ }
89
+ }
90
+
91
+
92
+ // Responsive variants
93
+ @each $breakpoint, $width in $breakpoints {
94
+ @media (min-width: $width) {
95
+ .#{$breakpoint}\: {
96
+ // Direction
97
+ &row { flex-direction: row; }
98
+ &row-reverse { flex-direction: row-reverse; }
99
+ &col { flex-direction: column; }
100
+ &col-reverse { flex-direction: column-reverse; }
101
+
102
+ // Wrap
103
+ &wrap { flex-wrap: wrap; }
104
+ &nowrap { flex-wrap: nowrap; }
105
+ &wrap-reverse { flex-wrap: wrap-reverse; }
106
+
107
+ // Justify
108
+ &start { justify-content: flex-start; }
109
+ &end { justify-content: flex-end; }
110
+ &center { justify-content: center; }
111
+ &between { justify-content: space-between; }
112
+ &around { justify-content: space-around; }
113
+ &evenly { justify-content: space-evenly; }
114
+
115
+ // Align
116
+ &items-start { align-items: flex-start; }
117
+ &items-end { align-items: flex-end; }
118
+ &items-center { align-items: center; }
119
+ &items-baseline { align-items: baseline; }
120
+ &items-stretch { align-items: stretch; }
121
+
122
+ // Width (using column count)
123
+ &w-auto { flex: 1 1 auto; }
124
+ &w-full { flex: 0 0 100%; }
125
+
126
+ @for $i from 1 through $column-count {
127
+ &w-#{$i} {
128
+ flex: 0 0 math.percentage(math.div($i, $column-count));
129
+ }
130
+ }
131
+
132
+ // Gap
133
+ @for $i from 0 through 8 {
134
+ &gap-#{$i} { gap: #{$i * 0.25}rem; }
135
+ }
136
+ }
137
+ }
138
+ }
@@ -0,0 +1,147 @@
1
+ @use '../utilities/variables' as *;
2
+
3
+ // Grid Container Mixins
4
+ @mixin grid {
5
+ display: grid;
6
+ }
7
+
8
+ @mixin grid-inline {
9
+ display: inline-grid;
10
+ }
11
+
12
+ // Grid Template Mixins
13
+ @mixin grid-cols($count) {
14
+ grid-template-columns: repeat($count, minmax(0, 1fr));
15
+ }
16
+
17
+ @mixin grid-rows($count) {
18
+ grid-template-rows: repeat($count, minmax(0, 1fr));
19
+ }
20
+
21
+ // Auto-fit/fill Mixins
22
+ @mixin grid-auto-fit($min-width) {
23
+ grid-template-columns: repeat(auto-fit, minmax($min-width, 1fr));
24
+ }
25
+
26
+ @mixin grid-auto-fill($min-width) {
27
+ grid-template-columns: repeat(auto-fill, minmax($min-width, 1fr));
28
+ }
29
+
30
+ // Grid Flow Mixins
31
+ @mixin grid-flow-row { grid-auto-flow: row; }
32
+ @mixin grid-flow-col { grid-auto-flow: column; }
33
+ @mixin grid-flow-dense { grid-auto-flow: dense; }
34
+
35
+ // Grid Alignment Mixins
36
+ @mixin justify-items($value) {
37
+ justify-items: $value;
38
+ }
39
+
40
+ @mixin align-items($value) {
41
+ align-items: $value;
42
+ }
43
+
44
+ @mixin place-items($value) {
45
+ place-items: $value;
46
+ }
47
+
48
+ // Grid Item Placement Mixins
49
+ @mixin col-span($span) {
50
+ grid-column: span $span / span $span;
51
+ }
52
+
53
+ @mixin row-span($span) {
54
+ grid-row: span $span / span $span;
55
+ }
56
+
57
+ @mixin col-start($start) {
58
+ grid-column-start: $start;
59
+ }
60
+
61
+ @mixin col-end($end) {
62
+ grid-column-end: $end;
63
+ }
64
+
65
+ @mixin row-start($start) {
66
+ grid-row-start: $start;
67
+ }
68
+
69
+ @mixin row-end($end) {
70
+ grid-row-end: $end;
71
+ }
72
+
73
+ // Classes
74
+ .grid { @include grid; }
75
+ .grid.inline { @include grid-inline; }
76
+
77
+ // Grid Template Classes
78
+ @for $i from 1 through $column-count {
79
+ .grid.cols-#{$i} { @include grid-cols($i); }
80
+ .grid.rows-#{$i} { @include grid-rows($i); }
81
+
82
+ // Responsive grid columns
83
+ @each $breakpoint, $width in $breakpoints {
84
+ @media (min-width: $width) {
85
+ .grid.#{$breakpoint}\:cols-#{$i} {
86
+ @include grid-cols($i);
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+
93
+
94
+ // Generate Column Span Classes with Responsive Variants
95
+ @for $i from 1 through $column-count {
96
+ .col-span-#{$i} {
97
+ @include col-span($i);
98
+ }
99
+
100
+ @each $breakpoint, $width in $breakpoints {
101
+ @media (min-width: $width) {
102
+ .#{$breakpoint}\:col-span-#{$i} {
103
+ @include col-span($i);
104
+ }
105
+ }
106
+ }
107
+ }
108
+
109
+
110
+ // Auto-fit/fill Classes
111
+ @each $breakpoint, $width in $column-widths {
112
+ .grid.auto-fit-#{$breakpoint} { @include grid-auto-fit($width); }
113
+ .grid.auto-fill-#{$breakpoint} { @include grid-auto-fill($width); }
114
+ }
115
+
116
+ // Flow Classes
117
+ .grid.flow-row { @include grid-flow-row; }
118
+ .grid.flow-col { @include grid-flow-col; }
119
+ .grid.flow-dense { @include grid-flow-dense; }
120
+
121
+ // Alignment Classes
122
+ $alignments: (
123
+ 'start': start,
124
+ 'end': end,
125
+ 'center': center,
126
+ 'stretch': stretch
127
+ );
128
+
129
+ @each $name, $value in $alignments {
130
+ .justify-items-#{$name} { justify-items: $value; }
131
+ .align-items-#{$name} { align-items: $value; }
132
+ .place-items-#{$name} { place-items: $value; }
133
+
134
+ @each $breakpoint, $width in $breakpoints {
135
+ @media (min-width: $width) {
136
+ .#{$breakpoint}\:justify-items-#{$name} {
137
+ justify-items: $value;
138
+ }
139
+ .#{$breakpoint}\:align-items-#{$name} {
140
+ align-items: $value;
141
+ }
142
+ .#{$breakpoint}\:place-items-#{$name} {
143
+ place-items: $value;
144
+ }
145
+ }
146
+ }
147
+ }
@@ -0,0 +1,26 @@
1
+ @use 'sass:color';
2
+ @use 'sass:map';
3
+ @use './theme' as *;
4
+ @use '../utilities/variables' as *;
5
+
6
+ [data-theme="dark"] {
7
+ // ... other dark theme variables ...
8
+ @include generate-theme-colors('dark');
9
+
10
+ --font-family-heading: var(--font-family-base);
11
+ $base-dark-color: map.get($colors, 'dark');
12
+
13
+ --input-bg: #{color.scale($base-dark-color, $lightness: -20%)};
14
+
15
+ // --text-primary: #{map.get($colors, 'light')};
16
+ // --link-color: #{color.scale(map.get($colors, 'primary'), $lightness: 10%)};
17
+ // --link-hover-color: #{color.scale(map.get($colors, 'primary'), $lightness: 20%)};
18
+
19
+
20
+ // --nav-bg: #{map.get($colors, 'dark')};
21
+ // // --nav-hover: #{color.scale(map.get($colors, 'light'), $lightness: -10%)};
22
+ // --nav-hover: black;
23
+ // --nav-text: #{map.get($colors, 'white')};
24
+
25
+
26
+ }
@@ -0,0 +1,23 @@
1
+ @use 'sass:color';
2
+ @use 'sass:map';
3
+ @use './theme' as *;
4
+ @use '../utilities/variables' as *;
5
+
6
+ [data-theme="light"] {
7
+ // ... other light theme variables ...
8
+ @include generate-theme-colors('light');
9
+
10
+ $base-dark-color: map.get($colors, 'light');
11
+
12
+ --input-bg: #{color.scale($base-dark-color, $lightness: 20%)};
13
+
14
+ // --font-family-heading: var(--font-family-base);
15
+ // --text-primary: #{map.get($colors, 'dark')};
16
+ // --link-color: #{map.get($colors, 'primary')};
17
+ // --link-hover-color: #{color.scale(map.get($colors, 'primary'), $lightness: -10%)};
18
+
19
+ // --nav-bg: #{map.get($colors, 'light')};
20
+ // // --nav-hover: #{color.scale(map.get($colors, 'light'), $lightness: -10%)};
21
+ // --nav-hover: white;
22
+ // --nav-text: #{map.get($colors, 'dark')};
23
+ }
@@ -0,0 +1,136 @@
1
+ // _theme.scss
2
+ @use 'sass:color';
3
+ @use 'sass:map';
4
+ @use '../utilities/variables' as *;
5
+
6
+
7
+ // Color variations percentage
8
+ $color-variations: (
9
+ 'lighter': 15%,
10
+ 'light': 10%,
11
+ 'dark': -10%,
12
+ 'darker': -15%
13
+ );
14
+
15
+ $opacity-levels: (
16
+ '10': 0.1,
17
+ '25': 0.25,
18
+ '50': 0.5,
19
+ '75': 0.75
20
+ );
21
+
22
+
23
+ @function theme-color($color-name, $variant: 'base') {
24
+ @return var(--#{$color-name}#{if($variant == 'base', '', '-' + $variant)});
25
+ }
26
+
27
+ @mixin generate-theme-colors($theme) {
28
+ @each $name, $color in $colors {
29
+ // Base color
30
+ --#{$name}: #{$color};
31
+ --#{$name}-rgb: #{color.channel($color, 'red')}, #{color.channel($color, 'green')}, #{color.channel($color, 'blue')};
32
+
33
+ // Variations
34
+ @each $variant, $percentage in $color-variations {
35
+ --#{$name}-#{$variant}: #{if($theme == 'light',
36
+ color.scale($color, $lightness: $percentage),
37
+ color.scale($color, $lightness: $percentage * -1)
38
+ )};
39
+ }
40
+
41
+ // Opacity variations
42
+ @each $level, $opacity in $opacity-levels {
43
+ --#{$name}-#{$level}: #{rgba($color, $opacity)};
44
+ }
45
+
46
+ // State variations
47
+ --#{$name}-hover: var(--#{$name}-#{if($theme == 'light', 'dark', 'light')});
48
+ --#{$name}-active: var(--#{$name}-#{if($theme == 'light', 'darker', 'lighter')});
49
+ --#{$name}-disabled: var(--#{$name}-50);
50
+ }
51
+
52
+ // Background & Border
53
+ @if $theme == 'light' {
54
+ --bg-primary: var(--light);
55
+ --bg-secondary: #{color.scale(map.get($colors, 'light'), $lightness: -5%)};
56
+ --bg-tertiary: #{color.scale(map.get($colors, 'light'), $lightness: -10%)};
57
+ --border-color: #{rgba(map.get($colors, 'dark'), 0.1)};
58
+ --border-color-dark: #{rgba(map.get($colors, 'dark'), 0.2)};
59
+ } @else {
60
+ --bg-primary: var(--dark);
61
+ --bg-secondary: #{color.scale(map.get($colors, 'dark'), $lightness: 5%)};
62
+ --bg-tertiary: #{color.scale(map.get($colors, 'dark'), $lightness: 10%)};
63
+ --border-color: #{rgba(map.get($colors, 'light'), 0.07)};
64
+ --border-color-dark: #{rgba(map.get($colors, 'light'), 0.15)};
65
+ }
66
+
67
+
68
+ // Text Colors
69
+ @if $theme == 'light' {
70
+ --text-primary: var(--dark);
71
+ --text-secondary: #{rgba(map.get($colors, 'dark'), 0.7)};
72
+ --text-tertiary: #{rgba(map.get($colors, 'dark'), 0.5)};
73
+ --text-disabled: #{rgba(map.get($colors, 'dark'), 0.3)};
74
+ --text-inverse: var(--light);
75
+ } @else {
76
+ --text-primary: var(--light);
77
+ --text-secondary: #{rgba(map.get($colors, 'light'), 0.7)};
78
+ --text-tertiary: #{rgba(map.get($colors, 'light'), 0.5)};
79
+ --text-disabled: #{rgba(map.get($colors, 'light'), 0.3)};
80
+ --text-inverse: var(--dark);
81
+ }
82
+
83
+
84
+ // Link Colors
85
+ --link-color: var(--primary);
86
+ --link-hover-color: #{color.scale(map.get($colors, 'primary'), $lightness: if($theme == 'light', -10%, 10%))};
87
+ --link-active-color: #{color.scale(map.get($colors, 'primary'), $lightness: if($theme == 'light', -20%, 20%))};
88
+ --link-visited-color: #{color.scale(map.get($colors, 'primary'), $saturation: -20%)};
89
+
90
+ // Navigation
91
+ --nav-bg: var(--bg-primary);
92
+ --nav-hover: var(--bg-secondary);
93
+ --nav-active: var(--bg-tertiary);
94
+ --nav-text: var(--text-primary);
95
+ --nav-text-hover: var(--primary);
96
+ --nav-border: var(--border-color);
97
+
98
+ // Tooltip
99
+ --tooltip-bg: var(--dark);
100
+ --tooltip-text: var(--light);
101
+ --tooltip-shadow-color: rgba(0,0,0,0.4);
102
+ --microtip-transition-duration: 0.518s;
103
+ --microtip-transition-delay: .2s;
104
+ --microtip-transition-easing: cubic-bezier(0.16, 1, 0.9, 1);
105
+ --microtip-font-size: 0.875rem;
106
+ --microtip-font-weight: 300;
107
+ --microtip-text-transform: none;
108
+
109
+ // Shadow
110
+ // --shadow-color: #{if($theme == 'light', '0,0,0', '255,255,255')};
111
+ // --shadow-opacity: #{if($theme == 'light', 0.1, 0.5)};
112
+ }
113
+
114
+ /**
115
+ .btn-primary {
116
+ background-color: theme-color('primary');
117
+
118
+ &:hover {
119
+ background-color: theme-color('primary', 'hover');
120
+ }
121
+
122
+ &:disabled {
123
+ background-color: theme-color('primary', 'disabled');
124
+ }
125
+ }
126
+
127
+ .form-input {
128
+ border-color: var(--border-color);
129
+ color: var(--text-primary);
130
+
131
+ &:focus {
132
+ border-color: theme-color('primary');
133
+ box-shadow: 0 0 0 4px theme-color('primary', '25');
134
+ }
135
+ }
136
+ */