@razerspine/pug-ui-kit 1.0.1 → 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 (80) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +113 -20
  3. package/fonts/Roboto-Bold.woff +0 -0
  4. package/fonts/Roboto-Bold.woff2 +0 -0
  5. package/fonts/Roboto-Light.woff +0 -0
  6. package/fonts/Roboto-Light.woff2 +0 -0
  7. package/fonts/Roboto-Medium.woff +0 -0
  8. package/fonts/Roboto-Medium.woff2 +0 -0
  9. package/fonts/Roboto-Regular.woff +0 -0
  10. package/fonts/Roboto-Regular.woff2 +0 -0
  11. package/fonts/Roboto-Thin.woff +0 -0
  12. package/fonts/Roboto-Thin.woff2 +0 -0
  13. package/index.js +10 -1
  14. package/less/base/_fonts.less +46 -0
  15. package/less/base/_index.less +2 -0
  16. package/less/base/_reset.less +155 -0
  17. package/less/components/_aside.less +49 -0
  18. package/less/components/_buttons.less +156 -0
  19. package/less/components/_footer.less +25 -0
  20. package/less/components/_form-control.less +27 -0
  21. package/less/components/_form-textarea.less +7 -0
  22. package/less/components/_forms.less +76 -0
  23. package/less/components/_header.less +57 -0
  24. package/less/components/_icons.less +42 -0
  25. package/less/components/_index.less +14 -0
  26. package/less/components/_input-base.less +48 -0
  27. package/less/components/_input-checkbox.less +10 -0
  28. package/less/components/_input-radio.less +10 -0
  29. package/less/components/_main.less +32 -0
  30. package/less/components/_single-select.less +29 -0
  31. package/less/components/_table.less +45 -0
  32. package/less/layout/_grid.less +104 -0
  33. package/less/layout/_index.less +2 -0
  34. package/less/layout/_layout.less +55 -0
  35. package/less/settings/_breakpoints.less +5 -0
  36. package/less/settings/_index.less +3 -0
  37. package/less/settings/_typography.less +2 -0
  38. package/less/settings/_variables.less +16 -0
  39. package/less/themes/_dark.less +25 -0
  40. package/less/themes/_index.less +2 -0
  41. package/less/themes/_light.less +49 -0
  42. package/less/ui-kit.less +6 -0
  43. package/less/utils/_helpers.less +32 -0
  44. package/less/utils/_index.less +3 -0
  45. package/less/utils/_mixins.less +36 -0
  46. package/less/utils/_utilities.less +400 -0
  47. package/package.json +6 -1
  48. package/scss/base/_fonts.scss +46 -0
  49. package/scss/base/_index.scss +2 -0
  50. package/scss/base/_reset.scss +155 -0
  51. package/scss/components/_aside.scss +47 -0
  52. package/scss/components/_buttons.scss +158 -0
  53. package/scss/components/_footer.scss +25 -0
  54. package/scss/components/_form-control.scss +27 -0
  55. package/scss/components/_form-textarea.scss +7 -0
  56. package/scss/components/_forms.scss +75 -0
  57. package/scss/components/_header.scss +57 -0
  58. package/scss/components/_icons.scss +42 -0
  59. package/scss/components/_index.scss +14 -0
  60. package/scss/components/_input-base.scss +48 -0
  61. package/scss/components/_input-checkbox.scss +10 -0
  62. package/scss/components/_input-radio.scss +10 -0
  63. package/scss/components/_main.scss +24 -0
  64. package/scss/components/_single-select.scss +29 -0
  65. package/scss/components/_table.scss +45 -0
  66. package/scss/layout/_grid.scss +64 -0
  67. package/scss/layout/_index.scss +2 -0
  68. package/scss/layout/_layout.scss +49 -0
  69. package/scss/settings/_breakpoints.scss +7 -0
  70. package/scss/settings/_index.scss +3 -0
  71. package/scss/settings/_typography.scss +2 -0
  72. package/scss/settings/_variables.scss +16 -0
  73. package/scss/themes/_dark.scss +25 -0
  74. package/scss/themes/_index.scss +2 -0
  75. package/scss/themes/_light.scss +49 -0
  76. package/scss/ui-kit.scss +6 -0
  77. package/scss/utils/_helpers.scss +18 -0
  78. package/scss/utils/_index.scss +3 -0
  79. package/scss/utils/_mixins.scss +16 -0
  80. package/scss/utils/_utilities.scss +305 -0
package/CHANGELOG.md CHANGED
@@ -24,3 +24,35 @@ You should now update to:
24
24
  ]
25
25
  })
26
26
  ```
27
+
28
+ ## [1.1.0] - 2026-02-03
29
+ ### Added
30
+ - **Styles**: Full SCSS and LESS support for all UI components.
31
+ - **Architecture**: Added global settings, grid system, and themes (light/dark).
32
+
33
+ ## [1.2.0] - 2026-02-03
34
+ ### Added
35
+ - **Fonts**: Added local Roboto font family (Thin, Light, Regular, Medium, Bold, Black) directly into the package.
36
+ - **Variables**: Introduced $font-path (SCSS) and @font-path (LESS) variables to manage font asset resolution dynamically.
37
+ - **Styles**: Integrated @font-face declarations in base/_fonts.scss and base/_fonts.less
38
+
39
+ ### Fixed
40
+ - **Assets**: Resolved "Module not found" errors in Webpack by using tilde-prefixed paths (~) for internal asset resolution.
41
+
42
+ ### Migration Guide (Optional)
43
+ By default, the kit now looks for fonts inside the package.
44
+ If you wish to use a custom font path (e.g., a CDN or a different local folder), override the path variable before importing the kit:
45
+
46
+ #### SCSS:
47
+
48
+ ```scss
49
+ @use "@razerspine/pug-ui-kit/scss/settings" with (
50
+ $font-path: "/my-custom-path/fonts"
51
+ );
52
+ ```
53
+ #### LESS:
54
+
55
+ ```less
56
+ @font-path: "/my-custom-path/fonts";
57
+ @import "@razerspine/pug-ui-kit/less/ui-kit.less";
58
+ ```
package/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # @razerspine/pug-ui-kit
2
2
 
3
- A collection of reusable Pug mixins designed for the [Webpack Starter Monorepo](https://github.com/Razerspine/webpack-starter-monorepo).
4
-
5
- This package centralizes UI components, ensuring consistency across all templates generated by the CLI.
3
+ A professional, full-featured UI Kit for Pug (Jade) templates, including flexible mixins and complete styling support (SCSS/LESS).
4
+ Designed to work seamlessly with the [Webpack Starter Monorepo](https://github.com/Razerspine/webpack-starter-monorepo)
6
5
 
7
6
  ## 📦 Installation
8
7
 
@@ -14,44 +13,138 @@ npm install @razerspine/pug-ui-kit
14
13
 
15
14
  ## 🛠 Webpack Configuration
16
15
 
17
- To use these mixins efficiently without dealing with complex relative paths (e.g., ../../node_modules/...), configure a Webpack alias in your webpack.config.js:
16
+ ### 1. Webpack (Pug Mixins)
17
+
18
+ To avoid complex relative paths, use the includePaths provided by the package:
18
19
 
19
20
  ```js
20
- const pugMixinsPath = require('@razerspine/pug-ui-kit');
21
+ const uiKit = require('@razerspine/pug-ui-kit');
21
22
 
22
23
  module.exports = {
23
24
  // ...
24
25
  resolve: {
25
26
  alias: {
26
- // Create an alias 'pug-ui-kit' pointing to the mixins directory
27
- 'pug-ui-kit': pugMixinsPath,
27
+ // Points to the directory containing all .pug mixins
28
+ 'pug-ui-kit': uiKit.paths.mixins,
28
29
  },
29
30
  },
30
31
  };
31
32
  ```
32
- ## 🚀 Usage
33
33
 
34
- Once the alias is configured, you can include any mixin in your .pug files using the ~pug-ui-kit/ prefix:
34
+ ### 2. Styles (SCSS/LESS)
35
+ The package provides full styling for all components.
36
+ If you only need specific parts (e.g., just variables and the table), you can import them individually.
37
+
38
+ Note: Always import settings first, as other components depend on them.
39
+
40
+ #### For SCSS:
35
41
 
36
- ### Example: Button (btn.pug)
42
+ ```scss
43
+ // In your main.scss
44
+ @use "@razerspine/pug-ui-kit/scss/ui-kit" as *;
45
+ ```
46
+
47
+ #### For LESS:
37
48
 
49
+ ```less
50
+ // In your main.less
51
+ @import "@razerspine/pug-ui-kit/less/ui-kit";
38
52
  ```
53
+
54
+ ## 🚀 Usage
55
+
56
+ #### Button
57
+
58
+ ```pug
39
59
  include ~pug-ui-kit/btn.pug
40
60
 
41
- +btn('Save', 'primary', 'small', {type: 'button'})
61
+ +btn('Save', 'primary', 'small', { type: 'submit' })
42
62
  ```
43
63
 
44
- ## 📂 Available Mixins
64
+ #### Data Table (New in v1.1.0)
65
+
66
+ ```pug
67
+ include ~pug-ui-kit/data-table.pug
68
+
69
+ - const data = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
70
+
71
+ +dataTable(users, ['id', 'name'], {
72
+ showIndex: true,
73
+ labels: { name: 'Full Name' },
74
+ actions: [
75
+ {
76
+ label: 'Edit',
77
+ class: 'btn-edit',
78
+ url: (item) => `/users/edit/${item.id}`
79
+ }
80
+ ]
81
+ })
82
+ ```
83
+
84
+ #### Form Input
85
+
86
+ ```pug
87
+ include ~pug-ui-kit/form-input.pug
88
+
89
+ +formInput('text', 'name', 'Name', 'Enter your name', 'name')
90
+ ```
91
+
92
+ #### Form Textarea
93
+
94
+ ```pug
95
+ include ~pug-ui-kit/form-textarea.pug
96
+
97
+ +formTextarea('message', 'Message', 'Type your message...', 'message')
98
+ ```
99
+
100
+ #### Input Checkbox
101
+
102
+ ```pug
103
+ include ~pug-ui-kit/input-checkbox.pug
104
+
105
+ +inputCheckbox('agree', 'I agree to all terms')
106
+ ```
107
+
108
+ #### Input Radio
109
+
110
+ ```pug
111
+ include ~pug-ui-kit/input-radio.pug
112
+
113
+ .form-group
114
+ .input-group
115
+ span.form-label.w-100 Communication method
116
+ +inputRadio('contact-email', 'Email', 'contact', 'email')
117
+ +inputRadio('contact-phone', 'Phone', 'contact', 'phone')
118
+ ```
119
+
120
+ #### Single Select
121
+
122
+ ```pug
123
+ include ~pug-ui-kit/single-select.pug
124
+
125
+ +singleSelect('topic', 'Topic', [
126
+ {value:'support', text:'Support'},
127
+ {value:'feedback', text:'Feedback'},
128
+ {value:'other', text:'Other'}
129
+ ])
130
+ ```
131
+
132
+ ## 📂 Package Structure
133
+
134
+ * mixins/ - reusable Pug components.
135
+ * scss/ - complete SCSS kit (Settings, Components, Themes, Layout).
136
+ * less/ - complete LESS version for alternative workflows.
137
+ * index.js - path resolution helper.
45
138
 
46
- The package currently includes the following components:
139
+ ## 🧱 Components Included
47
140
 
48
- * btn.pug - renders a configurable button with optional icon and text.
49
- * data-table.pug - renders a flexible table from an array of objects.
50
- * form-input.pug - renders a configurable input element with optional label and placeholder.
51
- * form-textarea.pug - renders a configurable textarea element with optional label and placeholder.
52
- * input-checkbox.pug - renders a configurable checkbox with label and optional attributes.
53
- * input-radio.pug — renders a configurable radio input with label for use in radio groups.
54
- * single-select.pug - renders a configurable select element with label, options, and optional placeholder.
141
+ * btn.pug
142
+ * data-table.pug
143
+ * form-input.pug
144
+ * form-textarea.pug
145
+ * input-checkbox.pug
146
+ * input-radio.pug
147
+ * single-select.pug
55
148
 
56
149
  ## 📄 License
57
150
  This project is licensed under the ISC License.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/index.js CHANGED
@@ -1,3 +1,12 @@
1
1
  const path = require('path');
2
2
 
3
- module.exports = path.join(__dirname, 'mixins');
3
+ module.exports = {
4
+ paths: {
5
+ fonts: path.join(__dirname, 'fonts'),
6
+ scss: path.join(__dirname, 'scss'),
7
+ less: path.join(__dirname, 'less'),
8
+ mixins: path.join(__dirname, 'mixins')
9
+ },
10
+ // helper
11
+ getStylePath: (type = 'scss') => path.join(__dirname, type, `ui-kit.${type}`)
12
+ };
@@ -0,0 +1,46 @@
1
+ @import '../settings/_variables';
2
+
3
+ @font-face {
4
+ font-family: 'Roboto';
5
+ src: url('@{font-path}/Roboto-Thin.woff2') format('woff2'),
6
+ url('@{font-path}/Roboto-Thin.woff') format('woff');
7
+ font-weight: 100;
8
+ font-style: normal;
9
+ font-display: swap;
10
+ }
11
+
12
+ @font-face {
13
+ font-family: 'Roboto';
14
+ src: url('@{font-path}/Roboto-Light.woff2') format('woff2'),
15
+ url('@{font-path}/Roboto-Light.woff') format('woff');
16
+ font-weight: 300;
17
+ font-style: normal;
18
+ font-display: swap;
19
+ }
20
+
21
+ @font-face {
22
+ font-family: 'Roboto';
23
+ src: url('@{font-path}/Roboto-Regular.woff2') format('woff2'),
24
+ url('@{font-path}/Roboto-Regular.woff') format('woff');
25
+ font-weight: 400;
26
+ font-style: normal;
27
+ font-display: swap;
28
+ }
29
+
30
+ @font-face {
31
+ font-family: 'Roboto';
32
+ src: url('@{font-path}/Roboto-Medium.woff2') format('woff2'),
33
+ url('@{font-path}/Roboto-Medium.woff') format('woff');
34
+ font-weight: 500;
35
+ font-style: normal;
36
+ font-display: swap;
37
+ }
38
+
39
+ @font-face {
40
+ font-family: 'Roboto';
41
+ src: url('@{font-path}/Roboto-Bold.woff2') format('woff2'),
42
+ url("@{font-path}/Roboto-Bold.woff") format('woff');
43
+ font-weight: 700;
44
+ font-style: normal;
45
+ font-display: swap;
46
+ }
@@ -0,0 +1,2 @@
1
+ @import '_reset';
2
+ @import '_fonts';
@@ -0,0 +1,155 @@
1
+ @import '../settings/_index';
2
+ // Classic CSS reset adapted to SCSS
3
+ // Based on Meyer reset + sensible defaults (box-sizing, media, form elements)
4
+
5
+ /* Box sizing */
6
+ *, *::before, *::after {
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ /* Remove default margin/padding and set core defaults */
11
+ html, body, div, span, applet, object, iframe,
12
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
13
+ a, abbr, acronym, address, big, cite, code,
14
+ del, dfn, em, img, ins, kbd, q, s, samp,
15
+ small, strike, strong, sub, sup, tt, var,
16
+ b, u, i, center,
17
+ dl, dt, dd, ol, ul, li,
18
+ fieldset, form, label, legend,
19
+ table, caption, tbody, tfoot, thead, tr, th, td,
20
+ article, aside, canvas, details, embed,
21
+ figure, figcaption, footer, header, hgroup,
22
+ menu, nav, output, ruby, section, summary,
23
+ time, mark, audio, video {
24
+ margin: 0;
25
+ padding: 0;
26
+ border: 0;
27
+ vertical-align: baseline;
28
+ background: transparent;
29
+ font: inherit;
30
+ color: inherit;
31
+ }
32
+
33
+ /* HTML5 display-role reset for older browsers */
34
+ article, aside, details, figcaption, figure,
35
+ footer, header, hgroup, menu, nav, section {
36
+ display: block;
37
+ }
38
+
39
+ /* Base html/body */
40
+ html {
41
+ line-height: 1.15; /* better default line-height */
42
+ -webkit-text-size-adjust: 100%;
43
+ -ms-text-size-adjust: 100%;
44
+ -ms-overflow-style: scrollbar;
45
+ }
46
+
47
+ body {
48
+ width: 100%;
49
+ min-height: 100dvh;
50
+ text-rendering: optimizeLegibility;
51
+ -webkit-font-smoothing: antialiased;
52
+ -moz-osx-font-smoothing: grayscale;
53
+ }
54
+
55
+ /* Remove list styles */
56
+ ol, ul {
57
+ list-style: none;
58
+ }
59
+
60
+ /* Remove default quotes */
61
+ blockquote, q {
62
+ quotes: none;
63
+ }
64
+
65
+ blockquote::before, blockquote::after,
66
+ q::before, q::after {
67
+ content: none;
68
+ }
69
+
70
+ /* Tables */
71
+ table {
72
+ border-collapse: collapse;
73
+ border-spacing: 0;
74
+ }
75
+
76
+ /* Images and media */
77
+ img, picture, video, canvas, svg {
78
+ display: block;
79
+ max-width: 100%;
80
+ height: auto;
81
+ }
82
+
83
+ /* Links */
84
+ a {
85
+ background-color: transparent;
86
+ text-decoration: none;
87
+ color: inherit;
88
+ }
89
+
90
+ /* Forms: inputs, buttons, selects, textareas */
91
+ input, button, textarea, select {
92
+ font: inherit;
93
+ color: inherit;
94
+ background: transparent;
95
+ border: none;
96
+ outline: none;
97
+ -webkit-appearance: none;
98
+ -moz-appearance: none;
99
+ appearance: none;
100
+ box-shadow: none;
101
+ resize: vertical;
102
+ }
103
+
104
+ /* Buttons and clickable elements */
105
+ button, [type="button"], [type="submit"], [role="button"] {
106
+ cursor: pointer;
107
+ background: none;
108
+ border: none;
109
+ padding: 0;
110
+ }
111
+
112
+ /* Remove inner focus border in Firefox */
113
+ button::-moz-focus-inner {
114
+ border: 0;
115
+ padding: 0;
116
+ }
117
+
118
+ /* Fieldset and legend */
119
+ fieldset {
120
+ margin: 0;
121
+ padding: 0;
122
+ border: 0;
123
+ }
124
+
125
+ legend {
126
+ padding: 0;
127
+ }
128
+
129
+ /* Accessibility helpers */
130
+ [hidden] {
131
+ display: none !important;
132
+ }
133
+
134
+ /* Reduce motion for users who prefer it */
135
+ @media (prefers-reduced-motion: reduce) {
136
+ *, *::before, *::after {
137
+ animation-duration: 0.001ms !important;
138
+ animation-iteration-count: 1 !important;
139
+ transition-duration: 0.001ms !important;
140
+ scroll-behavior: auto !important;
141
+ }
142
+ }
143
+
144
+ /* Utility: make images and media non-draggable by default */
145
+ img, svg, video {
146
+ user-select: none;
147
+ -webkit-user-drag: none;
148
+ -webkit-user-select: none;
149
+ }
150
+
151
+ ///* Optional: set base focus outline for keyboard users (can be customized) */
152
+ //:focus {
153
+ // outline: 2px solid rgba(13, 110, 253, 0.6);
154
+ // outline-offset: 2px;
155
+ //}
@@ -0,0 +1,49 @@
1
+ @import '../settings/_index';
2
+
3
+ .aside {
4
+ grid-area: aside;
5
+ display: flex;
6
+ justify-content: flex-start;
7
+ padding: 0 @gutter;
8
+
9
+ @media screen and (min-width: @breakpoint-lg) {
10
+ padding: 0;
11
+ }
12
+ }
13
+
14
+ .navigation {
15
+ background: var(--bg-surface);
16
+ box-shadow: var(--shadow-outline);
17
+ border-radius: @border-radius;
18
+ padding: @gutter;
19
+ width: 100%;
20
+
21
+ @media screen and (min-width: @breakpoint-lg) {
22
+ padding: calc(@gutter * 2);
23
+ }
24
+ }
25
+
26
+ .list {
27
+ display: flex;
28
+ flex-direction: column;
29
+ align-items: flex-start;
30
+ justify-content: flex-start;
31
+ width: 100%;
32
+
33
+ &__item {
34
+ width: 100%;
35
+
36
+ &:hover {
37
+ .list__link {
38
+ color: var(--brand-600);
39
+ }
40
+ }
41
+ }
42
+
43
+ &__link {
44
+ color: var(--text-primary);
45
+ display: block;
46
+ width: 100%;
47
+ padding: .375rem .625rem;
48
+ }
49
+ }
@@ -0,0 +1,156 @@
1
+ @import '../settings/_index';
2
+
3
+ .btn {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: .25rem;
8
+ padding: .5rem .75rem;
9
+ border-radius: @border-radius;
10
+ border: 1px solid transparent;
11
+ font-family: @font-family;
12
+ font-weight: 500;
13
+ cursor: pointer;
14
+ text-decoration: none;
15
+ line-height: 1;
16
+ transition: background .15s ease, border-color .15s ease, color .15s ease;
17
+
18
+ &:focus {
19
+ outline: none;
20
+ box-shadow: none;
21
+ }
22
+
23
+ &--primary {
24
+ background: var(--brand-500);
25
+ color: var(--text-on-brand);
26
+ border-color: var(--brand-500);
27
+
28
+ &:not([disabled]):not(.is-disabled):hover {
29
+ background: var(--brand-700);
30
+ border-color: var(--brand-700);
31
+ }
32
+ }
33
+
34
+ &--secondary {
35
+ background: var(--slate-500);
36
+ border-color: var(--slate-500);
37
+ color: var(--text-on-brand);
38
+
39
+ &:not([disabled]):not(.is-disabled):hover {
40
+ background: var(--slate-700);
41
+ border-color: var(--slate-700);
42
+ }
43
+ }
44
+
45
+ &--outline {
46
+ background: transparent;
47
+ color: var(--brand-500);
48
+ border-color: var(--brand-500);
49
+
50
+ &:not([disabled]):not(.is-disabled):hover {
51
+ border-color: var(--brand-600);
52
+ color: var(--brand-600);
53
+ }
54
+ }
55
+
56
+ &--text {
57
+ color: var(--text-primary);
58
+
59
+ &:not([disabled]):not(.is-disabled):hover {
60
+ color: var(--text-secondary);
61
+ }
62
+
63
+ &-primary {
64
+ color: var(--brand-500);
65
+
66
+ &:not([disabled]):not(.is-disabled):hover {
67
+ color: var(--brand-600);
68
+ }
69
+ }
70
+
71
+ &-secondary {
72
+ color: var(--text-secondary);
73
+
74
+ &:not([disabled]):not(.is-disabled):hover {
75
+ color: var(--text-primary);
76
+ }
77
+ }
78
+ }
79
+
80
+ &--icon {
81
+ background: transparent;
82
+ color: var(--text-primary);
83
+ padding: 0;
84
+
85
+ &-primary {
86
+ padding: 0;
87
+ background: var(--brand-500);
88
+ color: var(--text-on-brand);
89
+ border-color: var(--brand-500);
90
+
91
+ &:not([disabled]):not(.is-disabled):hover {
92
+ background: var(--brand-700);
93
+ border-color: var(--brand-700);
94
+ }
95
+ }
96
+
97
+ &-secondary {
98
+ padding: 0;
99
+ background: var(--slate-500);
100
+ border-color: var(--slate-500);
101
+ color: var(--text-on-brand);
102
+
103
+ &:not([disabled]):not(.is-disabled):hover {
104
+ background: var(--slate-700);
105
+ border-color: var(--slate-700);
106
+ }
107
+ }
108
+
109
+ &-outline {
110
+ padding: 0;
111
+ background: transparent;
112
+ color: var(--brand-500);
113
+ border-color: var(--brand-500);
114
+
115
+ &:not([disabled]):not(.is-disabled):hover {
116
+ border-color: var(--brand-600);
117
+ color: var(--brand-600);
118
+ }
119
+ }
120
+
121
+ &-small {
122
+ width: 1.75rem;
123
+ height: 1.75rem;
124
+ }
125
+
126
+ &-medium {
127
+ width: 2.25rem;
128
+ height: 2.25rem;
129
+ }
130
+
131
+ &-large {
132
+ width: 2.625rem;
133
+ height: 2.625rem;
134
+ }
135
+ }
136
+
137
+ &--small {
138
+ padding: .375rem .625rem;
139
+ font-size: .875rem;
140
+ }
141
+
142
+ &--medium {
143
+ padding: .5rem .75rem;
144
+ font-size: 1rem;
145
+ }
146
+
147
+ &--large {
148
+ padding: .625rem 1rem;
149
+ font-size: 1.125rem;
150
+ }
151
+
152
+ &:disabled {
153
+ opacity: .6;
154
+ cursor: not-allowed;
155
+ }
156
+ }
@@ -0,0 +1,25 @@
1
+ @import '../settings/_index';
2
+
3
+ .footer {
4
+ grid-area: footer;
5
+ background-color: var(--bg-surface);
6
+ box-shadow: var(--shadow-outline);
7
+ color: var(--text-secondary);
8
+
9
+ &__container {
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ width: 100%;
14
+ max-width: @container-max;
15
+ margin: 0 auto;
16
+ padding: calc(@gutter * 2) @gutter;
17
+ gap: 10px;
18
+ }
19
+
20
+ &__text {
21
+ &--bold {
22
+ font-weight: 700;
23
+ }
24
+ }
25
+ }