@medcore-ua/concrete-css 1.0.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.
- package/LICENSE +265 -0
- package/README.md +102 -0
- package/package.json +55 -0
- package/scss/abstracts/_functions.scss +86 -0
- package/scss/abstracts/_mixins.scss +170 -0
- package/scss/abstracts/_tokens.scss +249 -0
- package/scss/abstracts/_variables.scss +53 -0
- package/scss/base/_reset.scss +100 -0
- package/scss/base/_typography.scss +71 -0
- package/scss/main.scss +39 -0
- package/scss/utilities/_api.scss +406 -0
- package/scss/utilities/_core.scss +103 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// DESIGN TOKENS
|
|
3
|
+
// The single source of truth for all framework values
|
|
4
|
+
// =============================================================================
|
|
5
|
+
|
|
6
|
+
@use 'sass:map';
|
|
7
|
+
@use 'functions' as *;
|
|
8
|
+
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// PRIMITIVE TOKENS (The Palette)
|
|
11
|
+
// Raw values that describe WHAT they are, not WHERE they're used
|
|
12
|
+
// =============================================================================
|
|
13
|
+
|
|
14
|
+
// Spacing unit (4px = 0.25rem)
|
|
15
|
+
$spacing-unit: 0.25rem !default;
|
|
16
|
+
|
|
17
|
+
// Color palette
|
|
18
|
+
$color-white: #ffffff !default;
|
|
19
|
+
$color-black: #000000 !default;
|
|
20
|
+
|
|
21
|
+
// Grays (0-900 scale)
|
|
22
|
+
$color-gray-50: #fafafa !default;
|
|
23
|
+
$color-gray-100: #f5f5f5 !default;
|
|
24
|
+
$color-gray-200: #e5e5e5 !default;
|
|
25
|
+
$color-gray-300: #d4d4d4 !default;
|
|
26
|
+
$color-gray-400: #a3a3a3 !default;
|
|
27
|
+
$color-gray-500: #737373 !default;
|
|
28
|
+
$color-gray-600: #525252 !default;
|
|
29
|
+
$color-gray-700: #404040 !default;
|
|
30
|
+
$color-gray-800: #262626 !default;
|
|
31
|
+
$color-gray-900: #171717 !default;
|
|
32
|
+
|
|
33
|
+
// Primary color scale (customizable)
|
|
34
|
+
$color-primary-50: #f0f9ff !default;
|
|
35
|
+
$color-primary-100: #e0f2fe !default;
|
|
36
|
+
$color-primary-500: #0ea5e9 !default;
|
|
37
|
+
$color-primary-600: #0284c7 !default;
|
|
38
|
+
$color-primary-900: #0c4a6e !default;
|
|
39
|
+
|
|
40
|
+
// Semantic colors
|
|
41
|
+
$color-success: #0a7f2e !default;
|
|
42
|
+
$color-warning: #f59e0b !default;
|
|
43
|
+
$color-error: #b00020 !default;
|
|
44
|
+
$color-info: #0ea5e9 !default;
|
|
45
|
+
|
|
46
|
+
// Typography
|
|
47
|
+
$font-family-mono: 'Roboto Mono', 'Courier New', monospace !default;
|
|
48
|
+
$font-family-sans: system-ui, -apple-system, sans-serif !default;
|
|
49
|
+
$font-family-serif: 'Georgia', serif !default;
|
|
50
|
+
|
|
51
|
+
// =============================================================================
|
|
52
|
+
// SPACING SCALE
|
|
53
|
+
// Based on 4px/0.25rem unit
|
|
54
|
+
// =============================================================================
|
|
55
|
+
|
|
56
|
+
$spacing: (
|
|
57
|
+
'0': 0,
|
|
58
|
+
'1': $spacing-unit, // 4px
|
|
59
|
+
'2': $spacing-unit * 2, // 8px
|
|
60
|
+
'3': $spacing-unit * 3, // 12px
|
|
61
|
+
'4': $spacing-unit * 4, // 16px
|
|
62
|
+
'5': $spacing-unit * 5, // 20px
|
|
63
|
+
'6': $spacing-unit * 6, // 24px
|
|
64
|
+
'8': $spacing-unit * 8, // 32px
|
|
65
|
+
'10': $spacing-unit * 10, // 40px
|
|
66
|
+
'12': $spacing-unit * 12, // 48px
|
|
67
|
+
'16': $spacing-unit * 16, // 64px
|
|
68
|
+
'20': $spacing-unit * 20, // 80px
|
|
69
|
+
'24': $spacing-unit * 24, // 96px
|
|
70
|
+
'32': $spacing-unit * 32, // 128px
|
|
71
|
+
'auto': auto
|
|
72
|
+
) !default;
|
|
73
|
+
|
|
74
|
+
// =============================================================================
|
|
75
|
+
// BREAKPOINTS
|
|
76
|
+
// Mobile-first responsive system
|
|
77
|
+
// =============================================================================
|
|
78
|
+
|
|
79
|
+
$breakpoints: (
|
|
80
|
+
'sm': 640px, // Small devices
|
|
81
|
+
'md': 768px, // Medium devices
|
|
82
|
+
'lg': 1024px, // Large devices
|
|
83
|
+
'xl': 1280px, // Extra large
|
|
84
|
+
'2xl': 1536px // 2X Extra large
|
|
85
|
+
) !default;
|
|
86
|
+
|
|
87
|
+
// =============================================================================
|
|
88
|
+
// COLORS MAP
|
|
89
|
+
// All available colors for utility generation
|
|
90
|
+
// =============================================================================
|
|
91
|
+
|
|
92
|
+
$colors: (
|
|
93
|
+
// Special values
|
|
94
|
+
'inherit': inherit,
|
|
95
|
+
'current': currentColor,
|
|
96
|
+
'transparent': transparent,
|
|
97
|
+
|
|
98
|
+
// Base colors
|
|
99
|
+
'white': $color-white,
|
|
100
|
+
'black': $color-black,
|
|
101
|
+
|
|
102
|
+
// Gray scale
|
|
103
|
+
'gray-50': $color-gray-50,
|
|
104
|
+
'gray-100': $color-gray-100,
|
|
105
|
+
'gray-200': $color-gray-200,
|
|
106
|
+
'gray-300': $color-gray-300,
|
|
107
|
+
'gray-400': $color-gray-400,
|
|
108
|
+
'gray-500': $color-gray-500,
|
|
109
|
+
'gray-600': $color-gray-600,
|
|
110
|
+
'gray-700': $color-gray-700,
|
|
111
|
+
'gray-800': $color-gray-800,
|
|
112
|
+
'gray-900': $color-gray-900,
|
|
113
|
+
|
|
114
|
+
// Primary colors
|
|
115
|
+
'primary-50': $color-primary-50,
|
|
116
|
+
'primary-100': $color-primary-100,
|
|
117
|
+
'primary-500': $color-primary-500,
|
|
118
|
+
'primary-600': $color-primary-600,
|
|
119
|
+
'primary-900': $color-primary-900,
|
|
120
|
+
|
|
121
|
+
// Semantic colors
|
|
122
|
+
'success': $color-success,
|
|
123
|
+
'warning': $color-warning,
|
|
124
|
+
'error': $color-error,
|
|
125
|
+
'info': $color-info
|
|
126
|
+
) !default;
|
|
127
|
+
|
|
128
|
+
// =============================================================================
|
|
129
|
+
// BORDER WIDTHS
|
|
130
|
+
// =============================================================================
|
|
131
|
+
|
|
132
|
+
$border-widths: (
|
|
133
|
+
'0': 0,
|
|
134
|
+
'1': 1px,
|
|
135
|
+
'2': 2px,
|
|
136
|
+
'4': 4px,
|
|
137
|
+
'8': 8px
|
|
138
|
+
) !default;
|
|
139
|
+
|
|
140
|
+
// =============================================================================
|
|
141
|
+
// BORDER RADIUS
|
|
142
|
+
// =============================================================================
|
|
143
|
+
|
|
144
|
+
$border-radius: (
|
|
145
|
+
'none': 0,
|
|
146
|
+
'sm': 0.125rem, // 2px
|
|
147
|
+
'base': 0.25rem, // 4px
|
|
148
|
+
'md': 0.375rem, // 6px
|
|
149
|
+
'lg': 0.5rem, // 8px
|
|
150
|
+
'xl': 0.75rem, // 12px
|
|
151
|
+
'2xl': 1rem, // 16px
|
|
152
|
+
'full': 9999px
|
|
153
|
+
) !default;
|
|
154
|
+
|
|
155
|
+
// =============================================================================
|
|
156
|
+
// OPACITY
|
|
157
|
+
// =============================================================================
|
|
158
|
+
|
|
159
|
+
$opacity: (
|
|
160
|
+
'0': 0,
|
|
161
|
+
'25': 0.25,
|
|
162
|
+
'50': 0.5,
|
|
163
|
+
'75': 0.75,
|
|
164
|
+
'100': 1
|
|
165
|
+
) !default;
|
|
166
|
+
|
|
167
|
+
// =============================================================================
|
|
168
|
+
// FONT SIZES
|
|
169
|
+
// =============================================================================
|
|
170
|
+
|
|
171
|
+
$font-sizes: (
|
|
172
|
+
'xs': 0.75rem, // 12px
|
|
173
|
+
'sm': 0.875rem, // 14px
|
|
174
|
+
'base': 1rem, // 16px
|
|
175
|
+
'lg': 1.125rem, // 18px
|
|
176
|
+
'xl': 1.25rem, // 20px
|
|
177
|
+
'2xl': 1.5rem, // 24px
|
|
178
|
+
'3xl': 1.875rem, // 30px
|
|
179
|
+
'4xl': 2.25rem, // 36px
|
|
180
|
+
'5xl': 3rem, // 48px
|
|
181
|
+
'6xl': 3.75rem // 60px
|
|
182
|
+
) !default;
|
|
183
|
+
|
|
184
|
+
// =============================================================================
|
|
185
|
+
// FONT WEIGHTS
|
|
186
|
+
// =============================================================================
|
|
187
|
+
|
|
188
|
+
$font-weights: (
|
|
189
|
+
'normal': 400,
|
|
190
|
+
'medium': 500,
|
|
191
|
+
'bold': 700,
|
|
192
|
+
'black': 900
|
|
193
|
+
) !default;
|
|
194
|
+
|
|
195
|
+
// =============================================================================
|
|
196
|
+
// LINE HEIGHTS
|
|
197
|
+
// =============================================================================
|
|
198
|
+
|
|
199
|
+
$line-heights: (
|
|
200
|
+
'none': 1,
|
|
201
|
+
'tight': 1.25,
|
|
202
|
+
'snug': 1.375,
|
|
203
|
+
'normal': 1.5,
|
|
204
|
+
'relaxed': 1.625,
|
|
205
|
+
'loose': 2
|
|
206
|
+
) !default;
|
|
207
|
+
|
|
208
|
+
// =============================================================================
|
|
209
|
+
// LETTER SPACING
|
|
210
|
+
// =============================================================================
|
|
211
|
+
|
|
212
|
+
$letter-spacing: (
|
|
213
|
+
'tighter': -0.05em,
|
|
214
|
+
'tight': -0.025em,
|
|
215
|
+
'normal': 0,
|
|
216
|
+
'wide': 0.025em,
|
|
217
|
+
'wider': 0.05em,
|
|
218
|
+
'widest': 0.1em
|
|
219
|
+
) !default;
|
|
220
|
+
|
|
221
|
+
// =============================================================================
|
|
222
|
+
// SHADOWS (Brutalist = minimal)
|
|
223
|
+
// =============================================================================
|
|
224
|
+
|
|
225
|
+
$shadows: (
|
|
226
|
+
'none': none,
|
|
227
|
+
'sm': 2px 2px 0 rgba(0, 0, 0, 1),
|
|
228
|
+
'base': 4px 4px 0 rgba(0, 0, 0, 1),
|
|
229
|
+
'lg': 6px 6px 0 rgba(0, 0, 0, 1)
|
|
230
|
+
) !default;
|
|
231
|
+
|
|
232
|
+
// =============================================================================
|
|
233
|
+
// MAX WIDTHS (Container sizes)
|
|
234
|
+
// =============================================================================
|
|
235
|
+
|
|
236
|
+
$max-widths: (
|
|
237
|
+
'xs': 20rem, // 320px
|
|
238
|
+
'sm': 24rem, // 384px
|
|
239
|
+
'md': 28rem, // 448px
|
|
240
|
+
'lg': 32rem, // 512px
|
|
241
|
+
'xl': 36rem, // 576px
|
|
242
|
+
'2xl': 42rem, // 672px
|
|
243
|
+
'3xl': 48rem, // 768px
|
|
244
|
+
'4xl': 56rem, // 896px
|
|
245
|
+
'5xl': 64rem, // 1024px
|
|
246
|
+
'6xl': 72rem, // 1152px
|
|
247
|
+
'full': 100%,
|
|
248
|
+
'screen': 100vw
|
|
249
|
+
) !default;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// GLOBAL CONFIGURATION VARIABLES
|
|
3
|
+
// Control framework behavior and features
|
|
4
|
+
// =============================================================================
|
|
5
|
+
|
|
6
|
+
// Framework prefix (empty by default, but can be set to namespace classes)
|
|
7
|
+
$prefix: '' !default;
|
|
8
|
+
|
|
9
|
+
// Enable/disable features
|
|
10
|
+
$enable-responsive: true !default;
|
|
11
|
+
$enable-hover-states: true !default;
|
|
12
|
+
$enable-focus-states: true !default;
|
|
13
|
+
$enable-negative-margins: true !default;
|
|
14
|
+
$enable-important: false !default;
|
|
15
|
+
|
|
16
|
+
// Responsive breakpoint names (must match keys in $breakpoints map)
|
|
17
|
+
$breakpoint-names: ('sm', 'md', 'lg', 'xl', '2xl') !default;
|
|
18
|
+
|
|
19
|
+
// State modifiers to generate
|
|
20
|
+
$state-modifiers: (
|
|
21
|
+
'hover',
|
|
22
|
+
'focus',
|
|
23
|
+
'active',
|
|
24
|
+
'disabled'
|
|
25
|
+
) !default;
|
|
26
|
+
|
|
27
|
+
// Direction maps for spacing utilities
|
|
28
|
+
$directions: (
|
|
29
|
+
'': '', // all sides
|
|
30
|
+
't': '-top', // top
|
|
31
|
+
'r': '-right', // right
|
|
32
|
+
'b': '-bottom', // bottom
|
|
33
|
+
'l': '-left', // left
|
|
34
|
+
'x': '-inline', // horizontal (left + right)
|
|
35
|
+
'y': '-block' // vertical (top + bottom)
|
|
36
|
+
) !default;
|
|
37
|
+
|
|
38
|
+
// CSS custom properties mode (experimental)
|
|
39
|
+
$use-css-variables: false !default;
|
|
40
|
+
|
|
41
|
+
// Z-index management
|
|
42
|
+
$z-index-levels: (
|
|
43
|
+
'behind': -1,
|
|
44
|
+
'base': 0,
|
|
45
|
+
'dropdown': 1000,
|
|
46
|
+
'sticky': 1020,
|
|
47
|
+
'fixed': 1030,
|
|
48
|
+
'modal-backdrop': 1040,
|
|
49
|
+
'modal': 1050,
|
|
50
|
+
'popover': 1060,
|
|
51
|
+
'tooltip': 1070,
|
|
52
|
+
'notification': 1080
|
|
53
|
+
) !default;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// CSS RESET
|
|
3
|
+
// Modern, minimal reset for consistent cross-browser rendering
|
|
4
|
+
// =============================================================================
|
|
5
|
+
|
|
6
|
+
// Box sizing
|
|
7
|
+
*,
|
|
8
|
+
*::before,
|
|
9
|
+
*::after {
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Remove default margins and padding
|
|
14
|
+
* {
|
|
15
|
+
margin: 0;
|
|
16
|
+
padding: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Root element
|
|
20
|
+
html {
|
|
21
|
+
-webkit-text-size-adjust: 100%;
|
|
22
|
+
-moz-tab-size: 4;
|
|
23
|
+
tab-size: 4;
|
|
24
|
+
line-height: 1.5;
|
|
25
|
+
scroll-behavior: smooth;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Body
|
|
29
|
+
body {
|
|
30
|
+
min-height: 100vh;
|
|
31
|
+
line-height: inherit;
|
|
32
|
+
-webkit-font-smoothing: antialiased;
|
|
33
|
+
-moz-osx-font-smoothing: grayscale;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Media elements
|
|
37
|
+
img,
|
|
38
|
+
picture,
|
|
39
|
+
video,
|
|
40
|
+
canvas,
|
|
41
|
+
svg {
|
|
42
|
+
display: block;
|
|
43
|
+
max-width: 100%;
|
|
44
|
+
height: auto;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Form elements
|
|
48
|
+
input,
|
|
49
|
+
button,
|
|
50
|
+
textarea,
|
|
51
|
+
select {
|
|
52
|
+
font: inherit;
|
|
53
|
+
color: inherit;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Remove button styling
|
|
57
|
+
button {
|
|
58
|
+
background: none;
|
|
59
|
+
border: none;
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Typography
|
|
64
|
+
p,
|
|
65
|
+
h1,
|
|
66
|
+
h2,
|
|
67
|
+
h3,
|
|
68
|
+
h4,
|
|
69
|
+
h5,
|
|
70
|
+
h6 {
|
|
71
|
+
overflow-wrap: break-word;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Lists
|
|
75
|
+
ol,
|
|
76
|
+
ul {
|
|
77
|
+
list-style: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Tables
|
|
81
|
+
table {
|
|
82
|
+
border-collapse: collapse;
|
|
83
|
+
border-spacing: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Links
|
|
87
|
+
a {
|
|
88
|
+
color: inherit;
|
|
89
|
+
text-decoration: inherit;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Accessibility
|
|
93
|
+
[disabled] {
|
|
94
|
+
cursor: not-allowed;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Hidden
|
|
98
|
+
[hidden] {
|
|
99
|
+
display: none !important;
|
|
100
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// TYPOGRAPHY
|
|
3
|
+
// Base typographic styles (minimal, can be overridden with utilities)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
|
|
6
|
+
@use '../abstracts/tokens' as *;
|
|
7
|
+
|
|
8
|
+
body {
|
|
9
|
+
font-family: $font-family-mono;
|
|
10
|
+
font-size: 1rem;
|
|
11
|
+
line-height: 1.5;
|
|
12
|
+
color: $color-black;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Headings (minimal styling, use utilities for full control)
|
|
16
|
+
h1, h2, h3, h4, h5, h6 {
|
|
17
|
+
font-weight: 700;
|
|
18
|
+
line-height: 1.2;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Code elements
|
|
22
|
+
code,
|
|
23
|
+
kbd,
|
|
24
|
+
samp,
|
|
25
|
+
pre {
|
|
26
|
+
font-family: $font-family-mono;
|
|
27
|
+
font-size: 0.875em;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
pre {
|
|
31
|
+
overflow-x: auto;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Inline code
|
|
35
|
+
code {
|
|
36
|
+
padding: 0.125rem 0.25rem;
|
|
37
|
+
border: 1px solid currentColor;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Strong and emphasis
|
|
41
|
+
strong,
|
|
42
|
+
b {
|
|
43
|
+
font-weight: 700;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
em,
|
|
47
|
+
i {
|
|
48
|
+
font-style: italic;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Small text
|
|
52
|
+
small {
|
|
53
|
+
font-size: 0.875em;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Subscript and superscript
|
|
57
|
+
sub,
|
|
58
|
+
sup {
|
|
59
|
+
font-size: 0.75em;
|
|
60
|
+
line-height: 0;
|
|
61
|
+
position: relative;
|
|
62
|
+
vertical-align: baseline;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
sub {
|
|
66
|
+
bottom: -0.25em;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
sup {
|
|
70
|
+
top: -0.5em;
|
|
71
|
+
}
|
package/scss/main.scss
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Concrete CSS Framework v1.0.0
|
|
3
|
+
* Copyright 2026
|
|
4
|
+
* Licensed under MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// CONFIGURATION LAYER
|
|
9
|
+
// Import all configuration, tokens, and variables first
|
|
10
|
+
// =============================================================================
|
|
11
|
+
|
|
12
|
+
@use 'abstracts/functions' as *;
|
|
13
|
+
@use 'abstracts/variables' as *;
|
|
14
|
+
@use 'abstracts/tokens' as *;
|
|
15
|
+
@use 'abstracts/mixins' as *;
|
|
16
|
+
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// BASE LAYER
|
|
19
|
+
// Reset and foundational styles
|
|
20
|
+
// =============================================================================
|
|
21
|
+
|
|
22
|
+
@use 'base/reset';
|
|
23
|
+
@use 'base/typography';
|
|
24
|
+
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// UTILITIES LAYER
|
|
27
|
+
// The core utility class generator
|
|
28
|
+
// =============================================================================
|
|
29
|
+
|
|
30
|
+
@use 'utilities/core';
|
|
31
|
+
|
|
32
|
+
// =============================================================================
|
|
33
|
+
// COMPONENTS (OPTIONAL)
|
|
34
|
+
// Uncomment to include optional pre-built components
|
|
35
|
+
// =============================================================================
|
|
36
|
+
|
|
37
|
+
// @use 'components/buttons';
|
|
38
|
+
// @use 'components/forms';
|
|
39
|
+
// @use 'components/cards';
|