@medcore-ua/concrete-css 1.0.0 → 1.2.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.
Files changed (39) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +11 -11
  3. package/dist/concrete.css +10219 -0
  4. package/dist/concrete.css.map +1 -0
  5. package/dist/concrete.js +89 -0
  6. package/dist/concrete.min.css +5 -0
  7. package/dist/concrete.min.css.map +1 -0
  8. package/package.json +8 -8
  9. package/scss/abstracts/_mixins.scss +48 -11
  10. package/scss/abstracts/_tokens.scss +14 -2
  11. package/scss/components/_accordion.scss +92 -0
  12. package/scss/components/_article.scss +57 -0
  13. package/scss/components/_aside.scss +33 -0
  14. package/scss/components/_badge.scss +52 -0
  15. package/scss/components/_buttons.scss +54 -0
  16. package/scss/components/_card.scss +54 -0
  17. package/scss/components/_category.scss +22 -0
  18. package/scss/components/_feature.scss +26 -0
  19. package/scss/components/_footer.scss +35 -0
  20. package/scss/components/_forms.scss +45 -0
  21. package/scss/components/_grid.scss +48 -0
  22. package/scss/components/_header.scss +78 -0
  23. package/scss/components/_hero.scss +134 -0
  24. package/scss/components/_index.scss +29 -0
  25. package/scss/components/_info-block.scss +42 -0
  26. package/scss/components/_layout.scss +73 -0
  27. package/scss/components/_list.scss +58 -0
  28. package/scss/components/_map.scss +20 -0
  29. package/scss/components/_nav.scss +131 -0
  30. package/scss/components/_page.scss +39 -0
  31. package/scss/components/_panel.scss +53 -0
  32. package/scss/components/_pill.scss +38 -0
  33. package/scss/components/_profile-card.scss +55 -0
  34. package/scss/components/_schedule.scss +28 -0
  35. package/scss/components/_table.scss +50 -0
  36. package/scss/components/_utilities.scss +62 -0
  37. package/scss/main.scss +3 -5
  38. package/scss/utilities/_api.scss +20 -1
  39. package/scss/utilities/_core.scss +21 -5
@@ -0,0 +1,78 @@
1
+ // =============================================================================
2
+ // HEADER
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}header {
10
+ border-bottom: map.get($border-widths, '4') solid $color-black;
11
+ background: $color-white;
12
+ position: sticky;
13
+ top: 0;
14
+ z-index: 1000;
15
+ width: 100%;
16
+ }
17
+
18
+ .#{$prefix}header-inner {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ padding: 0.75rem map.get($page-gutter, 'sm');
23
+ max-width: map.get($max-widths, '6xl');
24
+ margin: 0 auto;
25
+ gap: 1rem;
26
+ flex-wrap: nowrap;
27
+
28
+ @media (min-width: 768px) {
29
+ padding: 0.75rem map.get($page-gutter, 'md');
30
+ }
31
+
32
+ @media (min-width: 1200px) {
33
+ padding: 0.75rem map.get($page-gutter, 'lg');
34
+ }
35
+ }
36
+
37
+ .#{$prefix}logo-block {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 0.75rem;
41
+ flex: 0 0 auto;
42
+ margin-right: auto;
43
+ min-width: 0;
44
+ }
45
+
46
+ .#{$prefix}logo-mark {
47
+ width: 40px;
48
+ height: 40px;
49
+ min-width: 40px;
50
+ border: map.get($border-widths, '4') solid $color-black;
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: center;
54
+ font-weight: 900;
55
+ font-size: 1rem;
56
+ background: $color-gray-100;
57
+ flex-shrink: 0;
58
+ text-decoration: none;
59
+ }
60
+
61
+ .#{$prefix}logo-text {
62
+ text-transform: uppercase;
63
+ font-size: 0.7rem;
64
+ line-height: 1.3;
65
+ white-space: normal;
66
+ overflow: hidden;
67
+ max-width: 220px;
68
+
69
+ @media (max-width: 380px) {
70
+ .#{$prefix}logo-text__subtitle {
71
+ display: none;
72
+ }
73
+ }
74
+ }
75
+
76
+ .#{$prefix}logo-text__title {
77
+ font-weight: 900;
78
+ }
@@ -0,0 +1,134 @@
1
+ // =============================================================================
2
+ // HERO
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}hero {
10
+ border-bottom: map.get($border-widths, '4') solid $color-black;
11
+ background: $color-gray-100;
12
+ position: relative;
13
+ z-index: 1;
14
+ }
15
+
16
+ .#{$prefix}hero-inner {
17
+ display: grid;
18
+ gap: 1.5rem;
19
+ padding: 1.75rem 0 2rem;
20
+ min-width: 0;
21
+
22
+ @media (min-width: 720px) {
23
+ grid-template-columns: minmax(0, 3fr) minmax(260px, 2.3fr);
24
+ align-items: stretch;
25
+ }
26
+
27
+ @media (min-width: 1200px) {
28
+ grid-template-columns: minmax(0, 4fr) minmax(320px, 2fr);
29
+ gap: 2.5rem;
30
+ }
31
+ }
32
+
33
+ .#{$prefix}hero-inner > * {
34
+ min-width: 0;
35
+ }
36
+
37
+ .#{$prefix}hero__kicker {
38
+ text-transform: uppercase;
39
+ font-size: 0.7rem;
40
+ letter-spacing: 0.14em;
41
+ margin-bottom: 0.75rem;
42
+ color: inherit;
43
+ }
44
+
45
+ .#{$prefix}hero__title {
46
+ font-size: clamp(1.5rem, 5vw, 2.8rem);
47
+ line-height: 1.1;
48
+ text-transform: uppercase;
49
+ margin-bottom: 0.75rem;
50
+ font-weight: 900;
51
+ }
52
+
53
+ .#{$prefix}hero__subtitle {
54
+ font-size: 0.9rem;
55
+ max-width: 32rem;
56
+ margin-bottom: 1.2rem;
57
+ line-height: 1.5;
58
+ }
59
+
60
+ .#{$prefix}hero__actions {
61
+ display: flex;
62
+ flex-wrap: wrap;
63
+ gap: 0.6rem;
64
+ margin-bottom: 1.25rem;
65
+ }
66
+
67
+ .#{$prefix}hero__meta {
68
+ font-size: 0.7rem;
69
+ text-transform: uppercase;
70
+ width: 100%;
71
+ letter-spacing: 0.1em;
72
+ }
73
+
74
+ .#{$prefix}hero__meta-item {
75
+ border-top: map.get($border-widths, '1') solid $color-black;
76
+ padding: 0.35rem 0;
77
+ display: flex;
78
+ justify-content: space-between;
79
+ gap: 1rem;
80
+ flex-wrap: wrap;
81
+ }
82
+
83
+ .#{$prefix}hero__meta-label {
84
+ opacity: 0.7;
85
+ }
86
+
87
+ .#{$prefix}hero__meta-value {
88
+ font-weight: 700;
89
+ text-align: right;
90
+
91
+ @media (max-width: 360px) {
92
+ text-align: left;
93
+ width: 100%;
94
+ }
95
+ }
96
+
97
+ .#{$prefix}hero__image {
98
+ border: map.get($border-widths, '4') solid $color-black;
99
+ background: $color-white;
100
+ padding: 0.8rem;
101
+ display: grid;
102
+ grid-template-rows: auto 1fr;
103
+ gap: 0.7rem;
104
+ min-width: 0;
105
+ }
106
+
107
+ .#{$prefix}hero__image-label {
108
+ text-transform: uppercase;
109
+ font-size: 0.7rem;
110
+ letter-spacing: 0.08em;
111
+ border-bottom: map.get($border-widths, '1') solid $color-black;
112
+ padding-bottom: 0.35rem;
113
+ margin-bottom: 0.5rem;
114
+ }
115
+
116
+ .#{$prefix}hero__image-placeholder {
117
+ border: map.get($border-widths, '2') solid $color-black;
118
+ background: repeating-linear-gradient(-45deg, #fff 0, #fff 6px, #e0e0e0 6px, #e0e0e0 12px);
119
+ min-height: 180px;
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ text-transform: uppercase;
124
+ font-size: 0.75rem;
125
+ text-align: center;
126
+ padding: 0.7rem;
127
+ }
128
+
129
+ .#{$prefix}hero__image-caption {
130
+ border-top: map.get($border-widths, '1') solid $color-black;
131
+ padding-top: 0.35rem;
132
+ font-size: 0.7rem;
133
+ opacity: 0.8;
134
+ }
@@ -0,0 +1,29 @@
1
+ // =============================================================================
2
+ // COMPONENTS INDEX
3
+ // =============================================================================
4
+
5
+ @use 'buttons';
6
+ @use 'badge';
7
+ @use 'card';
8
+ @use 'layout';
9
+ @use 'forms';
10
+ @use 'header';
11
+ @use 'nav';
12
+ @use 'hero';
13
+ @use 'footer';
14
+ @use 'grid';
15
+ @use 'list';
16
+ @use 'pill';
17
+ @use 'aside';
18
+ @use 'panel';
19
+ @use 'table';
20
+ @use 'accordion';
21
+ @use 'article';
22
+ @use 'feature';
23
+ @use 'map';
24
+ @use 'page';
25
+ @use 'category';
26
+ @use 'profile-card';
27
+ @use 'info-block';
28
+ @use 'schedule';
29
+ @use 'utilities';
@@ -0,0 +1,42 @@
1
+ // =============================================================================
2
+ // INFO BLOCK
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}info-block {
10
+ border: map.get($border-widths, '2') solid $color-black;
11
+ background: $color-white;
12
+ padding: 0.9rem;
13
+ min-width: 0;
14
+ }
15
+
16
+ .#{$prefix}info-block__title {
17
+ text-transform: uppercase;
18
+ font-size: 0.75rem;
19
+ padding-bottom: 0.35rem;
20
+ margin-bottom: 0.4rem;
21
+ border-bottom: map.get($border-widths, '1') solid $color-black;
22
+ }
23
+
24
+ .#{$prefix}info-item {
25
+ display: flex;
26
+ flex-direction: column;
27
+ gap: 0.35rem;
28
+ margin-bottom: 0.75rem;
29
+ font-size: 0.85rem;
30
+ }
31
+
32
+ .#{$prefix}info-item__label {
33
+ text-transform: uppercase;
34
+ font-size: 0.7rem;
35
+ letter-spacing: 0.08em;
36
+ opacity: 0.9;
37
+ }
38
+
39
+ .#{$prefix}info-item__value {
40
+ font-size: 0.85rem;
41
+ line-height: 1.4;
42
+ }
@@ -0,0 +1,73 @@
1
+ // =============================================================================
2
+ // SECTION & CONTAINER
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}section {
10
+ border-bottom: map.get($border-widths, '4') solid $color-black;
11
+ position: relative;
12
+ z-index: 1;
13
+ padding: 1.75rem 0 2rem;
14
+ }
15
+
16
+ .#{$prefix}section--thin {
17
+ border-bottom-width: map.get($border-widths, '2');
18
+ }
19
+
20
+ .#{$prefix}section--none {
21
+ border-bottom: none;
22
+ }
23
+
24
+ .#{$prefix}container {
25
+ max-width: map.get($max-widths, '6xl');
26
+ margin: 0 auto;
27
+ padding: 0 map.get($page-gutter, 'sm');
28
+ width: 100%;
29
+
30
+ @media (min-width: 768px) {
31
+ padding: 0 map.get($page-gutter, 'md');
32
+ }
33
+
34
+ @media (min-width: 1200px) {
35
+ padding: 0 map.get($page-gutter, 'lg');
36
+ }
37
+ }
38
+
39
+ .#{$prefix}section-inner {
40
+ padding: 1.5rem 0 1.8rem;
41
+ }
42
+
43
+ .#{$prefix}section__header {
44
+ display: flex;
45
+ flex-direction: column;
46
+ gap: 0.4rem;
47
+ margin-bottom: 1.1rem;
48
+ min-width: 0;
49
+ }
50
+
51
+ .#{$prefix}section__eyebrow {
52
+ text-transform: uppercase;
53
+ font-size: 0.7rem;
54
+ letter-spacing: 0.12em;
55
+ }
56
+
57
+ .#{$prefix}section__title {
58
+ font-size: clamp(1.5rem, 5vw, 2.8rem);
59
+ text-transform: uppercase;
60
+ line-height: 1.1;
61
+ font-weight: 900;
62
+ }
63
+
64
+ .#{$prefix}section__title--compact {
65
+ font-size: 1.1rem;
66
+ line-height: 1.3;
67
+ }
68
+
69
+ .#{$prefix}section__description {
70
+ font-size: 0.85rem;
71
+ max-width: 32rem;
72
+ line-height: 1.5;
73
+ }
@@ -0,0 +1,58 @@
1
+ // =============================================================================
2
+ // LIST
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}list-item {
10
+ border-bottom: map.get($border-widths, '1') solid $color-black;
11
+ padding: 0.55rem 0.7rem;
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: 0.1rem;
15
+ font-size: 0.8rem;
16
+
17
+ &:last-child {
18
+ border-bottom: none;
19
+ }
20
+ }
21
+
22
+ .#{$prefix}list-item__name {
23
+ text-transform: uppercase;
24
+ font-weight: 700;
25
+ }
26
+
27
+ .#{$prefix}list-item__meta {
28
+ font-size: 0.7rem;
29
+ opacity: 0.8;
30
+ }
31
+
32
+ .#{$prefix}list-item__status {
33
+ font-size: 0.7rem;
34
+ font-weight: 700;
35
+ margin-top: 0.2rem;
36
+ }
37
+
38
+ .#{$prefix}fact-list {
39
+ list-style: none;
40
+ margin: 0.5rem 0 0;
41
+ padding: 0;
42
+ font-size: 0.8rem;
43
+ }
44
+
45
+ .#{$prefix}fact-list li {
46
+ border-top: map.get($border-widths, '1') solid $color-black;
47
+ padding: 0.25rem 0;
48
+ display: flex;
49
+ justify-content: space-between;
50
+ gap: 0.5rem;
51
+ flex-wrap: wrap;
52
+ font-size: 0.8rem;
53
+ }
54
+
55
+ .#{$prefix}fact-list__value {
56
+ font-weight: 700;
57
+ text-align: right;
58
+ }
@@ -0,0 +1,20 @@
1
+ // =============================================================================
2
+ // MAP
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}map-box {
10
+ border: map.get($border-widths, '2') solid $color-black;
11
+ background: linear-gradient(90deg, #fff 0, $color-gray-200 14px, #fff 28px);
12
+ min-height: 200px;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ font-size: 0.75rem;
17
+ text-transform: uppercase;
18
+ text-align: center;
19
+ padding: 1rem;
20
+ }
@@ -0,0 +1,131 @@
1
+ // =============================================================================
2
+ // NAVIGATION
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}nav-toggle {
10
+ border: map.get($border-widths, '2') solid $color-black;
11
+ background: transparent;
12
+ padding: 0.3rem 0.5rem;
13
+ font-family: inherit;
14
+ text-transform: uppercase;
15
+ font-size: 0.7rem;
16
+ letter-spacing: 0.12em;
17
+ display: inline-flex;
18
+ align-items: center;
19
+ gap: 0.4rem;
20
+ cursor: pointer;
21
+ flex-shrink: 0;
22
+ white-space: nowrap;
23
+
24
+ @media (min-width: 850px) {
25
+ display: none;
26
+ }
27
+ }
28
+
29
+ .#{$prefix}nav-toggle span {
30
+ display: block;
31
+ width: 16px;
32
+ height: 2px;
33
+ border: map.get($border-widths, '1') solid $color-black;
34
+ position: relative;
35
+ }
36
+
37
+ .#{$prefix}nav-toggle span::before,
38
+ .#{$prefix}nav-toggle span::after {
39
+ content: "";
40
+ position: absolute;
41
+ left: -2px;
42
+ right: -2px;
43
+ height: 2px;
44
+ border: map.get($border-widths, '1') solid $color-black;
45
+ }
46
+
47
+ .#{$prefix}nav-toggle span::before {
48
+ top: -5px;
49
+ }
50
+
51
+ .#{$prefix}nav-toggle span::after {
52
+ bottom: -5px;
53
+ }
54
+
55
+ .#{$prefix}nav {
56
+ display: none;
57
+ position: absolute;
58
+ top: 100%;
59
+ left: 0;
60
+ width: 100%;
61
+ background: $color-white;
62
+ border-bottom: map.get($border-widths, '4') solid $color-black;
63
+ padding: 1rem map.get($page-gutter, 'sm');
64
+ z-index: 999;
65
+
66
+ @media (min-width: 768px) {
67
+ padding: 1rem map.get($page-gutter, 'md');
68
+ }
69
+
70
+ @media (min-width: 1200px) {
71
+ padding: 1rem map.get($page-gutter, 'lg');
72
+ }
73
+ }
74
+
75
+ .#{$prefix}nav.open {
76
+ display: block;
77
+ }
78
+
79
+ @media (min-width: 850px) {
80
+ .#{$prefix}nav-toggle {
81
+ display: none;
82
+ }
83
+
84
+ .#{$prefix}nav {
85
+ display: block !important;
86
+ position: static;
87
+ width: auto;
88
+ border: none;
89
+ padding: 0;
90
+ background: transparent;
91
+ flex: 1 1 auto;
92
+ margin-left: 1.5rem;
93
+ }
94
+ }
95
+
96
+ .#{$prefix}nav-list {
97
+ list-style: none;
98
+ margin: 0;
99
+ padding: 0;
100
+ display: flex;
101
+ flex-direction: column;
102
+ gap: 0.5rem;
103
+
104
+ @media (min-width: 850px) {
105
+ flex-direction: row;
106
+ flex-wrap: wrap;
107
+ justify-content: flex-end;
108
+ text-align: right;
109
+ align-items: center;
110
+ gap: 0.4rem 1.5rem;
111
+ }
112
+ }
113
+
114
+ .#{$prefix}nav-link {
115
+ text-transform: uppercase;
116
+ font-size: 0.72rem;
117
+ letter-spacing: 0.12em;
118
+ text-decoration: none;
119
+ border-bottom: 2px solid transparent;
120
+ display: inline-block;
121
+ padding: 0.15rem 0;
122
+
123
+ &:hover {
124
+ border-bottom-color: $color-black;
125
+ }
126
+
127
+ @media (min-width: 850px) {
128
+ font-size: 0.72rem;
129
+ white-space: nowrap;
130
+ }
131
+ }
@@ -0,0 +1,39 @@
1
+ // =============================================================================
2
+ // PAGE LAYOUT
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}page {
10
+ min-height: 100vh;
11
+ display: flex;
12
+ flex-direction: column;
13
+ width: 100%;
14
+ }
15
+
16
+ .#{$prefix}top-strip {
17
+ border-bottom: map.get($border-widths, '2') solid $color-black;
18
+ padding: 0.4rem map.get($page-gutter, 'sm');
19
+ background: $color-white;
20
+ text-transform: uppercase;
21
+ font-size: 0.7rem;
22
+ letter-spacing: 0.08em;
23
+ display: flex;
24
+ justify-content: space-between;
25
+ gap: 0.5rem;
26
+ flex-wrap: wrap;
27
+
28
+ @media (min-width: 768px) {
29
+ padding: 0.4rem map.get($page-gutter, 'md');
30
+ }
31
+
32
+ @media (min-width: 1200px) {
33
+ padding: 0.4rem map.get($page-gutter, 'lg');
34
+ }
35
+ }
36
+
37
+ .#{$prefix}top-strip__emergency {
38
+ font-weight: 900;
39
+ }
@@ -0,0 +1,53 @@
1
+ // =============================================================================
2
+ // PANEL
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}panel {
10
+ border: map.get($border-widths, '2') solid $color-black;
11
+ background: $color-white;
12
+ padding: 0.9rem;
13
+ }
14
+
15
+ .#{$prefix}panel--thick {
16
+ border-width: map.get($border-widths, '4');
17
+ }
18
+
19
+ .#{$prefix}panel--thin {
20
+ border-width: map.get($border-widths, '1');
21
+ }
22
+
23
+ .#{$prefix}panel__header {
24
+ font-size: 0.7rem;
25
+ text-transform: uppercase;
26
+ letter-spacing: 0.12em;
27
+ border-bottom: map.get($border-widths, '1') solid $color-black;
28
+ padding-bottom: 0.35rem;
29
+ margin-bottom: 0.5rem;
30
+ }
31
+
32
+ .#{$prefix}panel__title {
33
+ font-size: 1rem;
34
+ font-weight: 900;
35
+ text-transform: uppercase;
36
+ margin-bottom: 0.5rem;
37
+ line-height: 1.3;
38
+ border-bottom: map.get($border-widths, '1') solid $color-black;
39
+ padding-bottom: 0.4rem;
40
+ }
41
+
42
+ .#{$prefix}panel__content {
43
+ font-size: 0.85rem;
44
+ line-height: 1.5;
45
+ }
46
+
47
+ .#{$prefix}panel__content p {
48
+ margin: 0 0 0.8rem 0;
49
+ }
50
+
51
+ .#{$prefix}panel__content strong {
52
+ font-weight: 700;
53
+ }
@@ -0,0 +1,38 @@
1
+ // =============================================================================
2
+ // PILL
3
+ // =============================================================================
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables' as *;
7
+ @use '../abstracts/tokens' as *;
8
+
9
+ .#{$prefix}pill-row {
10
+ display: flex;
11
+ flex-wrap: wrap;
12
+ gap: 0.35rem;
13
+ margin-bottom: 0.5rem;
14
+ }
15
+
16
+ .#{$prefix}pill {
17
+ border: map.get($border-widths, '1') solid $color-black;
18
+ padding: 0.15rem 0.5rem;
19
+ text-transform: uppercase;
20
+ font-size: 0.7rem;
21
+ background: $color-white;
22
+ display: inline-block;
23
+ }
24
+
25
+ .#{$prefix}tag {
26
+ border: map.get($border-widths, '1') solid $color-black;
27
+ padding: 0.05rem 0.4rem;
28
+ font-size: 0.65rem;
29
+ text-transform: uppercase;
30
+ display: inline-block;
31
+ margin-right: 0.25rem;
32
+ }
33
+
34
+ .#{$prefix}tags {
35
+ display: flex;
36
+ flex-wrap: wrap;
37
+ gap: 0.25rem;
38
+ }