@taraskucherenko/scss-kit 0.1.38

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 (36) hide show
  1. package/package.json +21 -0
  2. package/src/atoms/_borders.scss +15 -0
  3. package/src/atoms/_flex-layout.scss +30 -0
  4. package/src/atoms/_grid-layout.scss +61 -0
  5. package/src/atoms/_index.scss +12 -0
  6. package/src/atoms/_misc.scss +64 -0
  7. package/src/atoms/_position.scss +79 -0
  8. package/src/atoms/_sizes.scss +28 -0
  9. package/src/atoms/_spacing.scss +1 -0
  10. package/src/atoms/_theme.scss +9 -0
  11. package/src/atoms/_typography.scss +64 -0
  12. package/src/base/_reset.scss +195 -0
  13. package/src/functions/_fun-colors.scss +41 -0
  14. package/src/functions/_fun-converters.scss +9 -0
  15. package/src/functions/_fun-helpers.scss +22 -0
  16. package/src/functions/_fun-images.scss +17 -0
  17. package/src/functions/_fun-sizes.scss +6 -0
  18. package/src/functions/_fun-units.scss +16 -0
  19. package/src/functions/_index.scss +6 -0
  20. package/src/main.scss +5 -0
  21. package/src/mixins/_index.scss +11 -0
  22. package/src/mixins/_mix-borders.scss +57 -0
  23. package/src/mixins/_mix-fonts.scss +12 -0
  24. package/src/mixins/_mix-grid.scss +31 -0
  25. package/src/mixins/_mix-media.scss +54 -0
  26. package/src/mixins/_mix-position.scss +66 -0
  27. package/src/mixins/_mix-pseudo.scss +57 -0
  28. package/src/mixins/_mix-sizes.scss +58 -0
  29. package/src/mixins/_mix-spacing.scss +18 -0
  30. package/src/mixins/_mix-states.scss +39 -0
  31. package/src/mixins/_mix-theme.scss +54 -0
  32. package/src/mixins/_mix-typography.scss +23 -0
  33. package/src/variables/_index.scss +3 -0
  34. package/src/variables/_var-colors.scss +94 -0
  35. package/src/variables/_var-fonts.scss +3 -0
  36. package/src/variables/_var-sizes.scss +8 -0
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@taraskucherenko/scss-kit",
3
+ "version": "0.1.38",
4
+ "description": "Foundational SCSS toolkit for scalable UI development",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://gitlab.com/teekeydev/scss-kit.git"
8
+ },
9
+ "scripts": {
10
+ "dev": " sass --no-source-map --watch src/main.scss:build/main.css --style expanded",
11
+ "build": "sass --no-source-map src/main.scss:build/main.css --style compressed"
12
+ },
13
+ "author": "Taras Kucherenko",
14
+ "license": "MIT",
15
+ "main": "src/main.scss",
16
+ "sass": "src/main.scss",
17
+ "files": ["src"],
18
+ "devDependencies": {
19
+ "sass": "^1.97.2"
20
+ }
21
+ }
@@ -0,0 +1,15 @@
1
+ @use '../mixins/mix-borders' as mb;
2
+
3
+ .round-circle, %round-circle {border-radius: 50%}
4
+ .round-full, %round-full {border-radius: 9999px}
5
+ .round-2, %round-2 {border-radius: 2px}
6
+ .round-4, %round-4 {border-radius: 4px}
7
+ .round-8, %round-8 {border-radius: 8px}
8
+ .round-12, %round-12 {border-radius: 12px}
9
+ .round-16, %round-16 {border-radius: 16px}
10
+
11
+ .divider-h, %divider-h {@include mb.divider-horizontal()}
12
+ .divider-v, %divider-v {@include mb.divider-vertical()}
13
+
14
+ .brd-transparent-1, %brd-transparent-1 {@include mb.border(_, transparent)}
15
+ .brd-current-1, %brd-current-1 {@include mb.border(_, currentColor)}
@@ -0,0 +1,30 @@
1
+ .flex, %flex {display: flex}
2
+ .inline-flex, %inline-flex {display: inline-flex}
3
+
4
+ .flex-row-reverse, %flex-row-reverse {flex-direction: row-reverse}
5
+ .flex-col, %flex-col {@extend %flex; flex-direction: column}
6
+ .flex-col-reverse, %flex-col-reverse {flex-direction: column-reverse}
7
+
8
+ .jc-start, %jc-start {justify-content: flex-start}
9
+ .jc-center, %jc-center {justify-content: center}
10
+ .jc-end, %jc-end {justify-content: flex-end}
11
+ .jc-around, %jc-around {justify-content: space-around}
12
+ .jc-between, %jc-between {justify-content: space-between}
13
+ .jc-evenly, %jc-evenly {justify-content: space-evenly}
14
+ .jc-stretch, %jc-stretch {justify-content: stretch}
15
+ .jc-normal, %jc-normal {justify-content: normal}
16
+
17
+ .ai-start, %ai-start {align-items: flex-start}
18
+ .ai-center, %ai-center {align-items: center}
19
+ .ai-end, %ai-end {align-items: flex-end}
20
+ .ai-stretch, %ai-stretch {align-items: stretch}
21
+ .ai-baseline, %ai-baseline {align-items: baseline}
22
+ .ai-normal, %ai-normal {align-items: normal}
23
+
24
+ .ais-start, %ais-start {align-self: flex-start}
25
+ .ais-center, %ais-center {align-self: center}
26
+ .ais-end, %ais-end {align-self: flex-end}
27
+ .ais-stretch, %ais-stretch {align-self: stretch}
28
+ .ais-baseline, %ais-baseline {align-self: baseline}
29
+ .ais-auto, %ais-auto {align-self: auto}
30
+ .ais-normal, %ais-normal {align-self: normal}
@@ -0,0 +1,61 @@
1
+ .grid, %grid {display: grid}
2
+ .inline-grid, %inline-grid {display: inline-grid}
3
+
4
+ .pli-start, %pli-start {place-items: start}
5
+ .pli-center, %pli-center {place-items: center}
6
+ .pli-end, %pli-end {place-items: end}
7
+ .pli-stretch, %pli-stretch {place-items: stretch}
8
+ .pli-baseline, %pli-baseline {place-items: baseline}
9
+ .pli-normal, %pli-normal {place-items: normal}
10
+
11
+ .plc-start, %plc-start {place-content: start}
12
+ .plc-center, %plc-center {place-content: center}
13
+ .plc-end, %plc-end {place-content: end}
14
+ .plc-between, %plc-between {place-content: space-between}
15
+ .plc-around, %plc-around {place-content: space-around}
16
+ .plc-evenly, %plc-evenly {place-content: space-evenly}
17
+ .plc-stretch, %plc-stretch {place-content: stretch}
18
+
19
+ .ji-start, %ji-start {justify-items: start}
20
+ .ji-center, %ji-center {justify-items: center}
21
+ .ji-end, %ji-end {justify-items: end}
22
+ .ji-stretch, %ji-stretch {justify-items: stretch}
23
+ .ji-baseline, %ji-baseline {justify-items: baseline}
24
+ .ji-normal, %ji-normal {justify-items: normal}
25
+
26
+ .grid-flow-row, %grid-flow-row {grid-auto-flow: row}
27
+ .grid-flow-col, %grid-flow-col {grid-auto-flow: column}
28
+ .grid-flow-dense, %grid-flow-dense {grid-auto-flow: dense}
29
+ .grid-flow-row-dense, %grid-flow-row-dense {grid-auto-flow: row dense}
30
+ .grid-flow-col-dense, %grid-flow-col-dense {grid-auto-flow: column dense}
31
+
32
+ /* TODO: move it to the project */
33
+ .grid-cols-2, %grid-cols-2 {grid-template-columns: repeat(2, 1fr)}
34
+ .grid-cols-3, %grid-cols-3 {grid-template-columns: repeat(3, 1fr)}
35
+ .grid-cols-4, %grid-cols-4 {grid-template-columns: repeat(4, 1fr)}
36
+ .grid-cols-6, %grid-cols-6 {grid-template-columns: repeat(6, 1fr)}
37
+ .grid-cols-12, %grid-cols-12 {grid-template-columns: repeat(12, 1fr)}
38
+
39
+ .grid-rows-2, %grid-rows-2 {grid-template-rows: repeat(2, 1fr)}
40
+ .grid-rows-3, %grid-rows-3 {grid-template-rows: repeat(3, 1fr)}
41
+ .grid-rows-4, %grid-rows-4 {grid-template-rows: repeat(4, 1fr)}
42
+
43
+ .col-span-1, %col-span-1 {grid-column: span 1}
44
+ .col-span-2, %col-span-2 {grid-column: span 2}
45
+ .col-span-3, %col-span-3 {grid-column: span 3}
46
+ .col-span-4, %col-span-4 {grid-column: span 4}
47
+ .col-span-6, %col-span-6 {grid-column: span 6}
48
+ .col-span-12, %col-span-12 {grid-column: span 12}
49
+ .col-span-full, %col-span-full {grid-column: 1 / -1}
50
+
51
+ .row-span-1, %row-span-1 {grid-row: span 1}
52
+ .row-span-2, %row-span-2 {grid-row: span 2}
53
+ .row-span-3, %row-span-3 {grid-row: span 3}
54
+ .row-span-4, %row-span-4 {grid-row: span 4}
55
+ .row-span-full, %row-span-full {grid-row: 1 / -1}
56
+
57
+ // Responsive grid with auto-fill (items wrap automatically)
58
+ .grid-auto-fill, %grid-auto-fill {grid-template-columns: repeat(auto-fill, minmax(250px, 1fr))}
59
+
60
+ // Responsive grid with auto-fit (items stretch to fill space)
61
+ .grid-auto-fit, %grid-auto-fit {grid-template-columns: repeat(auto-fit, minmax(250px, 1fr))}
@@ -0,0 +1,12 @@
1
+ @forward 'borders';
2
+ @forward 'flex-layout';
3
+ @forward 'grid-layout';
4
+ @forward 'misc';
5
+ @forward 'position';
6
+ @forward 'sizes';
7
+ @forward 'spacing';
8
+ @forward 'theme';
9
+ @forward 'typography';
10
+
11
+ .block, %block {display: block}
12
+ .hidden, %hidden {display: none}
@@ -0,0 +1,64 @@
1
+ .anim, %anim {transition: all 0.2s ease-in-out}
2
+
3
+ .bg-pos-start, %bg-pos-start {background-position: 0}
4
+ .bg-pos-cen, %bg-pos-cen {background-position: 50%}
5
+ .bg-no-repeat, %bg-no-repeat {background-repeat: no-repeat}
6
+ .bg-size-cover, %bg-size-cover {background-size: cover}
7
+ .bg-size-100p, %bg-size-100p {background-size: 100%}
8
+ .bg-cover, %bg-cover {@extend %bg-no-repeat, %bg-pos-cen; background-size: cover}
9
+ .bg-contain, %bg-contain {@extend %bg-no-repeat; background-size: contain}
10
+ .bg-cen-100p, %bg-cen-100p {@extend %bg-pos-cen, %bg-no-repeat, %bg-size-100p}
11
+
12
+ // <img>-specific properties
13
+ .img-con, %img-con {object-fit: contain}
14
+ .img-cov, %img-cov {object-fit: cover}
15
+ .img-cen, %img-cen {object-position: center}
16
+
17
+ .cur-auto, %cur-auto {cursor: auto}
18
+ .cur-move, %cur-move {cursor: move}
19
+ .cur-text, %cur-text {cursor: text}
20
+ .cur-wait, %cur-wait {cursor: wait}
21
+ .cur-help, %cur-help {cursor: help}
22
+ .cur-def, %cur-def {cursor: default}
23
+ .cur-point, %cur-point {cursor: pointer}
24
+ .cur-zoom, %cur-zoom {cursor: zoom-in}
25
+ .cur-zoom-out, %cur-zoom-out {cursor: zoom-out}
26
+ .cur-pro, %cur-pro {cursor: progress}
27
+ .cur-cross, %cur-cross {cursor: crosshair}
28
+ .cur-not, %cur-not {cursor: not-allowed}
29
+
30
+ .pe-none, %pe-none {pointer-events: none}
31
+ .pe-auto, %pe-auto {pointer-events: auto}
32
+
33
+ .opacity-0, %opacity-0 {opacity: 0}
34
+ .opacity-0x35, %opacity-0x35 {opacity: 0.35}
35
+ .opacity-0x5, %opacity-0x5 {opacity: 0.5}
36
+ .opacity-0x75, %opacity-0x75 {opacity: 0.75}
37
+ .opacity-0x95, %opacity-0x95 {opacity: 0.95}
38
+ .opacity-1, %opacity-1 {opacity: 1}
39
+
40
+ .over-hidden, %over-hidden {overflow: hidden}
41
+ .over-auto, %over-auto {overflow: auto}
42
+ .over-visible, %over-visible {overflow: visible}
43
+ .over-x-auto, %over-x-auto {overflow-x: auto; @extend %over-y-hidden}
44
+ .over-x-scroll, %over-x-scroll {overflow-x: scroll;@extend %over-y-hidden}
45
+ .over-x-hidden, %over-x-hidden {overflow-x: hidden}
46
+ .over-y-auto, %over-y-auto {overflow-y: auto; @extend %over-x-hidden}
47
+ .over-y-scroll, %over-y-scroll {overflow-y: scroll;@extend %over-x-hidden}
48
+ .over-y-hidden, %over-y-hidden {overflow-y: hidden}
49
+
50
+ .vis-hidden, %vis-hidden {visibility: hidden}
51
+ .vis-visible, %vis-visible {visibility: visible}
52
+ .vis-collapse, %vis-collapse {visibility: collapse}
53
+
54
+ .reflection-v, %reflection-v {transform: scale(1, -1)}
55
+ .reflection-h, %reflection-h {transform: scale(-1, 1)}
56
+ .reflection-vh, %reflection-vh {transform: scale(-1, -1)}
57
+
58
+ .rotate--45, %rotate--45 {transform: rotate(-45deg)}
59
+ .rotate--90, %rotate--90 {transform: rotate(-90deg)}
60
+
61
+ .aspect-square, %aspect-square {aspect-ratio: 1/1}
62
+ .aspect-4x3, %aspect-4x3 {aspect-ratio: 4/3}
63
+ .aspect-16x9, %aspect-16x9 {aspect-ratio: 16/9}
64
+ .aspect-21x9, %aspect-21x9 {aspect-ratio: 21/9}
@@ -0,0 +1,79 @@
1
+ @use '../mixins/mix-position' as mp;
2
+
3
+ .block, %block {display: block}
4
+ .inl-block, %inl-block {display: inline-block}
5
+ .hidden, %hidden {display: none}
6
+ .hidden-imp, %hidden-imp {display: none !important}
7
+
8
+ .static, %static {position: static}
9
+ .relative, %relative {position: relative}
10
+ .absolute, %absolute {position: absolute}
11
+ .fixed, %fixed {position: fixed}
12
+ .sticky, %sticky {position: -webkit-sticky;position: sticky}
13
+
14
+ %top-0 {top: 0}
15
+ %rig-0 {right: 0}
16
+ %bot-0 {bottom: 0}
17
+ %lef-0 {left: 0}
18
+ %top-100p {top: 100%}
19
+ %rig-100p {right: 100%}
20
+ %bot-100p {bottom: 100%}
21
+ %lef-100p {left: 100%}
22
+
23
+ %fit-hor {@extend %rig-0, %lef-0}
24
+ %fit-ver {@extend %top-0, %bot-0}
25
+ %fit {@extend %fit-hor, %fit-ver}
26
+
27
+ %top-rig-0 {@extend %top-0, %rig-0}
28
+ %top-lef-0 {@extend %top-0, %lef-0}
29
+ %bot-rig-0 {@extend %bot-0, %rig-0}
30
+ %bot-lef-0 {@extend %bot-0, %lef-0}
31
+
32
+ .abs-t, %abs-t {@extend %absolute, %top-0}
33
+ .abs-t-100p, %abs-t-100p {@extend %absolute, %top-100p}
34
+ .abs-t-l, %abs-t-l {@extend %absolute, %top-lef-0}
35
+ .abs-t-r, %abs-t-r {@extend %absolute, %top-rig-0}
36
+ .abs-b, %abs-b {@extend %absolute, %bot-0}
37
+ .abs-b-100p, %abs-b-100p {@extend %absolute, %bot-100p}
38
+ .abs-b-l, %abs-b-l {@extend %absolute, %bot-lef-0}
39
+ .abs-b-r, %abs-b-r {@extend %absolute, %bot-rig-0}
40
+ .abs-l, %abs-l {@extend %absolute, %lef-0}
41
+ .abs-r, %abs-r {@extend %absolute, %rig-0}
42
+ .abs-fit, %abs-fit {@extend %absolute, %fit}
43
+ .abs-center, %abs-center {@extend %absolute;@include mp.pos-center}
44
+ .abs-center-x, %abs-center-x {@extend %absolute;@include mp.pos-center-x}
45
+ .abs-center-y, %abs-center-y {@extend %absolute;@include mp.pos-center-y}
46
+
47
+ .fix-t, %fix-t {@extend %fixed, %top-0}
48
+ .fix-t-l, %fix-t-l {@extend %fixed, %top-lef-0}
49
+ .fix-t-r, %fix-t-r {@extend %fixed, %top-rig-0}
50
+ .fix-b, %fix-b {@extend %fixed, %bot-0}
51
+ .fix-b-l, %fix-b-l {@extend %fixed, %bot-lef-0}
52
+ .fix-b-r, %fix-b-r {@extend %fixed, %bot-rig-0}
53
+ .fix-l, %fix-l {@extend %fixed, %lef-0}
54
+ .fix-r, %fix-r {@extend %fixed, %rig-0}
55
+ .fix-fit, %fix-fit {@extend %fixed, %fit}
56
+ .fix-center, %fix-center {@extend %fixed;@include mp.pos-center}
57
+ .fix-center-x, %fix-center-x {@extend %fixed;@include mp.pos-center-x}
58
+ .fix-center-y, %fix-center-y {@extend %fixed;@include mp.pos-center-y}
59
+
60
+ .z-ind-background, %z-ind-background {z-index: -2}
61
+ .z-ind-backward, %z-ind-backward {z-index: -1}
62
+ .z-ind-0, %z-ind-0 {z-index: 0}
63
+ .z-ind-1, %z-ind-1 {z-index: 1}
64
+ .z-ind-2, %z-ind-2 {z-index: 2}
65
+ .z-ind-3, %z-ind-3 {z-index: 3}
66
+ .z-ind-select, %z-ind-select {z-index: var(--z-ind-select)} // 50
67
+ .z-ind-tooltip, %z-ind-tooltip {z-index: 75}
68
+ .z-ind-high, %z-ind-high {z-index: 100}
69
+ .z-ind-overlay, %z-ind-overlay {z-index: 500}
70
+ .z-ind-modal, %z-ind-modal {z-index: 2000}
71
+
72
+ // TODO: Implement Details --> summary construct
73
+ %hidden-show {
74
+ &:hover {
75
+ z-index: calc(var(--z-ind-select) + 1);
76
+
77
+ %hidden {display: block}
78
+ }
79
+ }
@@ -0,0 +1,28 @@
1
+ @use '../mixins/mix-sizes' as ms;
2
+
3
+ .maw-content, %maw-content {max-width: var(--max-width)}
4
+ .maw-full, %maw-full {max-width: 100%}
5
+
6
+ .miw-narrow, %miw-narrow {min-width: var(--min-width)}
7
+ .miw-full, %miw-full {min-width: 100%}
8
+
9
+ .w-none, %w-none {width: 0}
10
+ .w-full, %w-full {width: 100%}
11
+ .w-auto, %w-auto {width: auto}
12
+ .w-narrow, %w-narrow {width: var(--min-width)}
13
+ .w-100vw, %w-100vw {width: 100vw}
14
+
15
+ .mah-full, %mah-full {max-height: 100%}
16
+
17
+ .h-none, %h-none {height: 0}
18
+ .h-full, %h-full {height: 100%}
19
+ .h-auto, %h-auto {height: auto}
20
+
21
+ .mih-100vh, %mih-100vh {@include ms.mih-vh(100)}
22
+ .mah-100vh, %mah-100vh {@include ms.mah-vh(100)}
23
+ .h-100vh, %h-100vh {@include ms.h-vh(100)}
24
+
25
+ .full-sz-max, %full-sz-max {@extend %maw-full, %mah-full}
26
+ .full-sz-auto, %full-sz-auto {@extend %w-auto, %h-auto}
27
+ .full-sz, %full-sz {@extend %w-full, %h-full}
28
+ .full-sz-0, %full-sz-0 {@extend %w-none, %h-none}
@@ -0,0 +1 @@
1
+ .cen-by-mar, %cen-by-mar {margin-right: auto;margin-left: auto}
@@ -0,0 +1,9 @@
1
+ .bg-transparent, %bg-transparent {background-color: transparent}
2
+ .bg-current, %bg-current {background-color: currentColor}
3
+ .bg-black, %bg-black {background-color: var(--col-black)}
4
+ .bg-white, %bg-white {background-color: var(--col-white)}
5
+
6
+ .fg-current, %fg-current {color: currentColor}
7
+ .fg-inherit, %fg-inherit {color: inherit}
8
+ .fg-black, %fg-black {color: var(--col-black)}
9
+ .fg-white, %fg-white {color: var(--col-white)}
@@ -0,0 +1,64 @@
1
+ .font-none, %font-none {font-size: 0}
2
+
3
+ .line-h-0, %line-h-0 {line-height: 0}
4
+ .line-h-0x75, %line-h-0x75 {line-height: 0.75}
5
+ .line-h-1, %line-h-1 {line-height: 1}
6
+ .line-h-1x2, %line-h-1x2 {line-height: 1.2}
7
+ .line-h-1x3, %line-h-1x3 {line-height: 1.3}
8
+ .line-h-1x4, %line-h-1x4 {line-height: 1.4}
9
+ .line-h-1x5, %line-h-1x5 {line-height: 1.5}
10
+ .line-h-1x6, %line-h-1x6 {line-height: 1.6}
11
+
12
+ .fw-thin, %fw-thin {font-weight: 100}
13
+ .fw-extra-light, %fw-extra-light {font-weight: 200}
14
+ .fw-light, %fw-light {font-weight: 300}
15
+ .fw-regular, %fw-regular {font-weight: 400}
16
+ .fw-medium, %fw-medium {font-weight: 500}
17
+ .fw-semi-bold, %fw-semi-bold {font-weight: 600}
18
+ .fw-bold, %fw-bold {font-weight: 700}
19
+ .fw-extra-bold, %fw-extra-bold {font-weight: 800}
20
+ .fw-black, %fw-black {font-weight: 900}
21
+
22
+ .text-start, %text-start {text-align: start}
23
+ .text-end, %text-end {text-align: end}
24
+ .text-left, %text-left {text-align: left}
25
+ .text-center, %text-center {text-align: center}
26
+ .text-right, %text-right {text-align: right}
27
+ .text-justify, %text-justify {text-align: justify}
28
+
29
+ .font-normal, %font-normal {font-style: normal}
30
+ .font-italic, %font-italic {font-style: italic}
31
+ .font-oblique, %font-oblique {font-style: oblique}
32
+
33
+ .dec-none, %dec-none {text-decoration: none}
34
+ .dec-over, %dec-over {text-decoration: overline}
35
+ .dec-under, %dec-under {text-decoration: underline}
36
+ .dec-strike, %dec-strike {text-decoration: line-through}
37
+
38
+ .dec-und-hov-none, %dec-und-hov-none {
39
+ @extend %dec-under;
40
+ &:hover {@extend %dec-none}
41
+ }
42
+ .dec-none-hov-und, %dec-none-hov-und {
43
+ @extend %dec-none;
44
+ &:hover {@extend %dec-under}
45
+ }
46
+
47
+ .trans-none, %trans-none {text-transform: none}
48
+ .trans-upper, %trans-upper {text-transform: uppercase}
49
+ .trans-lower, %trans-lower {text-transform: lowercase}
50
+ .trans-cap, %trans-cap {text-transform: capitalize}
51
+
52
+ .ow-word, %ow-word {overflow-wrap: break-word}
53
+ .ow-any, %ow-any {overflow-wrap: anywhere}
54
+
55
+ .wb-all, %wb-all {word-break: break-all}
56
+ .wb-word, %wb-word {word-break: break-word}
57
+ .wb-keep, %wb-keep {word-break: keep-all}
58
+
59
+ .ws-normal, %ws-normal {white-space: normal}
60
+ .ws-nowrap, %ws-nowrap {white-space: nowrap}
61
+ .ws-pre, %ws-pre {white-space: pre}
62
+ .ws-pre-wrap, %ws-pre-wrap {white-space: pre-wrap}
63
+ .ws-pre-line, %ws-pre-line {white-space: pre-line}
64
+ .ws-break, %ws-break {white-space: break-spaces}
@@ -0,0 +1,195 @@
1
+ @use '../variables' as var;
2
+ @use '../mixins' as mix;
3
+
4
+ :root {
5
+ --col-white: #FFFFFF;
6
+ --col-black: #000000;
7
+
8
+ --max-width: #{var.$page-width-max + px};
9
+ --min-width: #{var.$page-width-min + px};
10
+ }
11
+
12
+ *, ::before, ::after {
13
+ box-sizing: border-box;
14
+ margin: 0;
15
+ padding: 0;
16
+ }
17
+
18
+ html {
19
+ font-size: 16px;
20
+ line-height: 1.2;
21
+ min-width: var(--min-width);
22
+ width: 100%;
23
+ height: 100%;
24
+ -webkit-text-size-adjust: 100%;
25
+ tab-size: 4;
26
+
27
+ @include mix.dir-rtl {
28
+ direction: rtl;
29
+ text-align: right;
30
+ }
31
+ }
32
+
33
+ body {
34
+ width: 100%;
35
+ height: 100%;
36
+ font-synthesis: none;
37
+ text-rendering: optimizeLegibility;
38
+ -webkit-font-smoothing: antialiased;
39
+ -moz-osx-font-smoothing: grayscale;
40
+ }
41
+
42
+ h1, h2, h3, h4, h5, h6 {
43
+ font-weight: 700;
44
+ font-size: inherit;
45
+ line-height: 1.2;
46
+ }
47
+
48
+ b, strong, optgroup {font-weight: 700}
49
+
50
+ dfn, em, i {font-style: italic}
51
+
52
+ small {font-size: 80%}
53
+
54
+ sub, sup {
55
+ font-size: 80%;
56
+ vertical-align: baseline;
57
+ line-height: 0;
58
+ position: relative;
59
+ }
60
+
61
+ sup {top: -0.25em}
62
+ sub {bottom: -0.25em}
63
+
64
+ code, kbd, pre, samp {
65
+ font-family: monospace;
66
+ font-size: 1em;
67
+ }
68
+
69
+ pre {overflow: auto}
70
+
71
+ mark {
72
+ background-color: #FFFF00;
73
+ color: var(--col-black);
74
+ }
75
+
76
+ q::before, q::after {content: ''}
77
+
78
+ img, video, svg, canvas {
79
+ max-width: 100%;
80
+ height: auto;
81
+ }
82
+
83
+ svg:not([fill]) {fill: currentColor}
84
+
85
+ audio {display: inline-block}
86
+
87
+ audio:not([controls]) {
88
+ display: none;
89
+ height: 0;
90
+ }
91
+
92
+ iframe, abbr, acronym, img {
93
+ border: 0;
94
+ outline: 0;
95
+ }
96
+
97
+ button, input, optgroup, select, textarea {
98
+ color: inherit;
99
+ font: inherit;
100
+ margin: 0;
101
+ }
102
+
103
+ button, input {overflow: visible}
104
+ button, select {text-transform: none}
105
+ input {line-height: 1}
106
+ textarea {overflow: auto; resize: none}
107
+
108
+ input, input:focus,
109
+ button, textarea,
110
+ select, a:focus {
111
+ outline: 0;
112
+ border: 0;
113
+ }
114
+
115
+ button,
116
+ input[type='button'],
117
+ input[type='reset'],
118
+ input[type='submit'] {
119
+ cursor: pointer;
120
+ -webkit-appearance: button;
121
+ }
122
+
123
+ button:disabled,
124
+ input:disabled,
125
+ select:disabled,
126
+ textarea:disabled {
127
+ cursor: no-drop;
128
+ opacity: 0.75;
129
+ }
130
+
131
+ :focus-visible {
132
+ outline: 2px solid #0096CC;
133
+ outline-offset: 2px;
134
+ }
135
+
136
+ :focus:not(:focus-visible) {outline: none}
137
+
138
+ input[type='number']::-webkit-inner-spin-button,
139
+ input[type='number']::-webkit-outer-spin-button {height: auto}
140
+
141
+ input[type='search'] {
142
+ -webkit-appearance: textfield;
143
+ outline-offset: -2px;
144
+ }
145
+
146
+ input[type='search']::-webkit-search-cancel-button,
147
+ input[type='search']::-webkit-search-decoration {-webkit-appearance: none}
148
+
149
+ ::-webkit-file-upload-button {
150
+ -webkit-appearance: button;
151
+ color: inherit;
152
+ }
153
+
154
+ figure {margin: 0}
155
+
156
+ fieldset {
157
+ border: 1px solid gray;
158
+ padding: 0.25rem 0.75rem;
159
+ }
160
+
161
+ legend {
162
+ border: 0;
163
+ color: inherit;
164
+ display: table;
165
+ word-spacing: normal;
166
+ max-width: 100%;
167
+ }
168
+
169
+ hr {
170
+ box-sizing: content-box;
171
+ height: 0;
172
+ overflow: visible;
173
+ border: 0;
174
+ border-top: 1px solid currentColor;
175
+ }
176
+
177
+ a {
178
+ cursor: pointer;
179
+ text-decoration: none;
180
+ color: inherit;
181
+ }
182
+
183
+ ul, ol {
184
+ list-style: none;
185
+ margin: 0;
186
+ padding: 0;
187
+ }
188
+
189
+ table {
190
+ border-collapse: collapse;
191
+ border-spacing: 0;
192
+ table-layout: fixed;
193
+ }
194
+
195
+ [hidden], template {display: none}
@@ -0,0 +1,41 @@
1
+ @use 'sass:string';
2
+
3
+ /// Generates oklch() color string
4
+ /// @param {Number} $l - Lightness (0-100% or 0-1)
5
+ /// @param {Number} $c - Chroma (0-0.4 typical range)
6
+ /// @param {Number} $h - Hue (0-360)
7
+ /// @param {Number} $alpha - Alpha (0-1)
8
+ /// @return {String} oklch() CSS string
9
+ @function oklch($l, $c, $h, $alpha: 1) {
10
+ // Нормалізуємо lightness до % якщо потрібно
11
+ @if $l > 1 {
12
+ $l: $l * 1%;
13
+ } @else if unitless($l) {
14
+ $l: $l * 100%;
15
+ }
16
+
17
+ @if $alpha == 1 {
18
+ @return string.unquote('oklch(#{$l} #{$c} #{$h})');
19
+ } @else {
20
+ @return string.unquote('oklch(#{$l} #{$c} #{$h} / #{$alpha})');
21
+ }
22
+ }
23
+
24
+ /// Generates oklab() color string
25
+ /// @param {Number} $l - Lightness (0-100% or 0-1)
26
+ /// @param {Number} $a - a-axis (-0.4 to 0.4)
27
+ /// @param {Number} $b - b-axis (-0.4 to 0.4)
28
+ /// @param {Number} $alpha - Alpha (0-1)
29
+ @function oklab($l, $a, $b, $alpha: 1) {
30
+ @if $l > 1 {
31
+ $l: $l * 1%;
32
+ } @else if unitless($l) {
33
+ $l: $l * 100%;
34
+ }
35
+
36
+ @if $alpha == 1 {
37
+ @return string.unquote('oklab(#{$l} #{$a} #{$b})');
38
+ } @else {
39
+ @return string.unquote('oklab(#{$l} #{$a} #{$b} / #{$alpha})');
40
+ }
41
+ }
@@ -0,0 +1,9 @@
1
+ @use 'sass:math';
2
+
3
+ /// Converts pixels to rem
4
+ /// @param {Number} $px - Pixel value
5
+ /// @param {Number} $base - Base font size (default: 16)
6
+ /// @return {Number} Rem value
7
+ @function px-to-rem($px, $base: 16) {
8
+ @return math.div($px, $base) * 1rem;
9
+ }
@@ -0,0 +1,22 @@
1
+ @use 'sass:string';
2
+
3
+ /// Returns !important flag or null
4
+ /// @param {Boolean} $val - Whether to add !important
5
+ /// @return {String|Null} !important or null
6
+ @function important($val) {
7
+ @if $val {
8
+ @return string.unquote('!important');
9
+ } @else {
10
+ @return null;
11
+ }
12
+ }
13
+
14
+ /// Converts numeric values to CSS class-safe strings
15
+ /// Example: 1.5 → "1x5", 2.25 → "2x25"
16
+ /// @param {Number} $val - Numeric value
17
+ /// @param {String} $separator - Separator character (default: 'x')
18
+ /// @return {String} Class-safe string
19
+ @function num-to-class($val, $separator: 'x') {
20
+ $str: inspect($val);
21
+ @return string.replace($str, '.', $separator);
22
+ }