cubed-cli 0.1.0 → 0.1.2

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/README.md CHANGED
@@ -7,5 +7,5 @@ Cubed is a CLI tool that scaffolds systematic styling with the Cube CSS methodol
7
7
  # useage
8
8
 
9
9
  ```shell
10
- npx cubed create
10
+ npx cubed-cli create
11
11
  ```
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -14,24 +47,62 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
47
  Object.defineProperty(exports, "__esModule", { value: true });
15
48
  exports.create = void 0;
16
49
  const commander_1 = require("commander");
17
- const prompts_1 = __importDefault(require("@clack/prompts"));
50
+ const p = __importStar(require("@clack/prompts"));
51
+ const common_1 = require("../utils/common");
52
+ const fs = __importStar(require("node:fs"));
53
+ const node_path_1 = __importDefault(require("node:path"));
18
54
  exports.create = new commander_1.Command("create")
19
55
  .description("scaffolds a new project")
20
- .action(() => __awaiter(void 0, void 0, void 0, function* () {
21
- const { directory } = yield prompts_1.default.group({
22
- directory: () => {
23
- const defaultPath = "./";
24
- return prompts_1.default.text({
25
- message: "Where would you like to place this project?",
26
- placeholder: `(hit Enter to use '${defaultPath}')`,
27
- defaultValue: defaultPath,
28
- });
29
- },
30
- }, {
31
- onCancel: () => {
32
- prompts_1.default.cancel("operation cancelled");
33
- process.exit(0);
34
- },
56
+ .action(() => {
57
+ (0, common_1.runCommand)(() => __awaiter(void 0, void 0, void 0, function* () {
58
+ const { directory } = yield createProject();
59
+ // In the future, here is where additional steps can be introduced.
60
+ // TODO: detect if the base dirs are already created
61
+ // TODO: use a spinner and highlighting to indicate what is happening
62
+ // TODO: how to cleanup files if something fails mid process
63
+ const templatesPath = node_path_1.default.join(__dirname, "../templates");
64
+ copyTemplateFiles(templatesPath, directory);
65
+ }));
66
+ });
67
+ function makeDirs() {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ yield p.text({ message: "making dirs" });
35
70
  });
36
- console.log(`Destination directory: ${directory}`);
37
- }));
71
+ }
72
+ // recursively generate base directories and files
73
+ function copyTemplateFiles(sourcePath, destPath) {
74
+ const entries = fs.readdirSync(sourcePath);
75
+ entries.forEach((entry) => {
76
+ const sourceEntryPath = node_path_1.default.join(sourcePath, entry);
77
+ const relativeEntryPath = node_path_1.default.relative(node_path_1.default.join(__dirname, "../templates"), sourceEntryPath);
78
+ if ((0, common_1.isDir)(sourceEntryPath)) {
79
+ // Recursively process subdirectories
80
+ copyTemplateFiles(sourceEntryPath, destPath);
81
+ }
82
+ else {
83
+ // Copy file
84
+ const content = (0, common_1.readFile)(node_path_1.default.join(__dirname, "../templates"), relativeEntryPath);
85
+ (0, common_1.writeFile)(destPath, relativeEntryPath, content);
86
+ }
87
+ });
88
+ }
89
+ function createProject() {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ const { directory } = yield p.group({
92
+ directory: () => {
93
+ const defaultPath = "./styles";
94
+ return p.text({
95
+ message: "Where would you like to generate the styles?",
96
+ placeholder: `(hit Enter to use '${defaultPath}')`,
97
+ defaultValue: defaultPath,
98
+ });
99
+ },
100
+ }, {
101
+ onCancel: () => {
102
+ p.cancel("operation cancelled");
103
+ process.exit(0);
104
+ },
105
+ });
106
+ return { directory };
107
+ });
108
+ }
package/dist/index.js CHANGED
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const package_json_1 = __importDefault(require("../package.json"));
3
7
  const commander_1 = require("commander");
4
8
  const create_1 = require("./commands/create");
5
- commander_1.program.name("cubed").version("0.1.0");
9
+ // adds a gap of spacing between the executing command and the output
10
+ console.log();
11
+ commander_1.program.name("cubed-cli").version(package_json_1.default.version);
6
12
  commander_1.program.addCommand(create_1.create);
7
13
  commander_1.program.parse();
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ fs.cpSync('src/templates', 'dist/templates', { recursive: true });
38
+ console.log('✓ Templates copied');
File without changes
@@ -0,0 +1,373 @@
1
+ /*
2
+ Global styles
3
+
4
+ Low-specificity, global styles that apply to the whole
5
+ project: https://cube.fyi/css.html
6
+ */
7
+
8
+ body {
9
+ /* color: var(--text-color); */
10
+ color: var(--color-dark);
11
+ /* background: var(--background); */
12
+ background: var(--color-light);
13
+ font-size: var(--text-step-1);
14
+ font-family: var(--font-base);
15
+ line-height: var(--leading-standard);
16
+ font-size-adjust: from-font;
17
+ }
18
+
19
+ :is(h1, h2, h3, h4) {
20
+ line-height: var(--leading-fine);
21
+ text-wrap: balance;
22
+ font-family: var(--font-heading);
23
+ }
24
+
25
+ :is(h1, h2, h3, h4):where(
26
+ [class*="text-step-8"],
27
+ [class*="text-step-9"],
28
+ [class*="text-step-10"]
29
+ ) {
30
+ line-height: var(--leading-micro);
31
+ font-weight: var(--font-black);
32
+ }
33
+
34
+ h1 {
35
+ font-size: var(--text-step-6);
36
+ max-width: 20ch;
37
+ }
38
+
39
+ h2 {
40
+ font-size: var(--text-step-5);
41
+ max-width: 35ch;
42
+ }
43
+
44
+ h3 {
45
+ font-size: var(--text-step-4);
46
+ max-width: 35ch;
47
+ }
48
+
49
+ :is(h4, h5, h6) {
50
+ font-size: var(--text-step-3);
51
+ }
52
+
53
+ small {
54
+ font-size: var(--text-step-0);
55
+ }
56
+
57
+ ins {
58
+ text-decoration: none;
59
+ background: var(--color-primary);
60
+ color: var(--color-dark);
61
+ padding-inline: 0.3em;
62
+ }
63
+
64
+ :is(code, kbd, samp) {
65
+ font-family: var(--font-mono);
66
+ padding: 0.2em 0.2em 0.05em 0.2em;
67
+ hyphens: none;
68
+ tab-size: 2;
69
+ text-align: left;
70
+ word-spacing: normal;
71
+ word-break: normal;
72
+ word-wrap: normal;
73
+ box-decoration-break: clone;
74
+ }
75
+
76
+ /* This is quite a new property, so we want code styles to at least, not be huge or tiny */
77
+ @supports not (font-size-adjust: from-font) {
78
+ :is(code, kbd, samp) {
79
+ font-size: 0.8em;
80
+ }
81
+ }
82
+
83
+ pre:has(code) {
84
+ width: max-content;
85
+ max-width: 100%;
86
+ overflow-x: auto;
87
+ }
88
+
89
+ pre code {
90
+ border: none;
91
+ background: none;
92
+ padding: 0;
93
+ }
94
+
95
+ kbd {
96
+ border: 1px solid;
97
+ padding-block-end: 0.1em;
98
+ }
99
+
100
+ var {
101
+ font-style: normal;
102
+ font-weight: var(--font-medium);
103
+ }
104
+
105
+ q {
106
+ font-style: italic;
107
+ }
108
+
109
+ ul:not(.navigation, .list-override) {
110
+ padding-inline-start: 1.7ch;
111
+ list-style-type: disc;
112
+ }
113
+
114
+ ul:not(.navigation, .list-override) > li {
115
+ padding-inline-start: var(--space-xs);
116
+ }
117
+
118
+ :is(ol, ul):not(.navigation, .list-override) li + * {
119
+ margin-block-start: var(--space-3xs);
120
+ }
121
+
122
+ ul ::marker {
123
+ font-size: 0.8lh;
124
+ }
125
+
126
+ ol ::marker {
127
+ font-size: 1em;
128
+ font-weight: var(--font-bold);
129
+ }
130
+
131
+ /* Lists with classes and roles will be out of standard flow, so remove the default spacing */
132
+ [role="list"][class],
133
+ [role="tablist"][class] {
134
+ margin-block: 0;
135
+ padding: 0;
136
+ }
137
+
138
+ dt {
139
+ font-weight: var(--font-medium);
140
+ }
141
+
142
+ dt + dd {
143
+ margin-block-start: var(--space-xs);
144
+ }
145
+
146
+ dd + dt {
147
+ margin-block-start: var(--space-s);
148
+ }
149
+
150
+ dd {
151
+ margin-inline-start: 1.5ch;
152
+ }
153
+
154
+ blockquote {
155
+ display: inline-block;
156
+ margin-inline: var(--space-s);
157
+ padding: var(--space-m);
158
+ color: var(--background);
159
+ background-color: var(--text-color);
160
+ }
161
+
162
+ blockquote footer {
163
+ margin-block-start: var(--space-xs);
164
+ color: var(--color-primary);
165
+ font-size: var(--text-step-0);
166
+ }
167
+
168
+ blockquote q {
169
+ font-style: normal;
170
+ }
171
+
172
+ :is(video, iframe[src*="youtube"], iframe[src*="vimeo"]) {
173
+ display: block;
174
+ width: 100%;
175
+ height: auto;
176
+ aspect-ratio: 16/9;
177
+ }
178
+
179
+ img {
180
+ height: auto;
181
+ max-width: 100%;
182
+ display: block;
183
+ }
184
+
185
+ figcaption {
186
+ padding-block-start: 0.5em;
187
+ font-size: var(--text-step-0);
188
+ font-family: monospace;
189
+ }
190
+
191
+ table {
192
+ border: var(--stroke);
193
+ border-collapse: collapse;
194
+ width: 100%;
195
+ }
196
+
197
+ th {
198
+ text-align: left;
199
+ font-weight: var(--font-bold);
200
+ line-height: var(--leading-fine);
201
+ }
202
+
203
+ thead th {
204
+ padding-block: var(--space-s);
205
+ }
206
+
207
+ td,
208
+ th {
209
+ padding: var(--space-xs) var(--space-s);
210
+ }
211
+
212
+ th:not(:only-of-type) {
213
+ border-block-end: var(--stroke);
214
+ }
215
+
216
+ th:only-of-type {
217
+ border-inline-end: var(--stroke);
218
+ }
219
+
220
+ :is(th, td) ~ :is(th, td) {
221
+ border-inline-start: var(--stroke);
222
+ }
223
+
224
+ tr + tr :is(th, td) {
225
+ border-block-start: var(--stroke);
226
+ }
227
+
228
+ caption {
229
+ caption-side: bottom;
230
+ margin-block-start: var(--space-s);
231
+ }
232
+
233
+ a:not([class]):hover {
234
+ text-underline-offset: 0.2lh;
235
+ }
236
+
237
+ :is(h1, h2, h3, h4) a:not([class]) {
238
+ text-decoration-thickness: 0.1ex;
239
+ text-underline-offset: 0.2ex;
240
+ }
241
+
242
+ :is(h1, h2, h3, h4) a:not([class]):hover {
243
+ text-underline-offset: 0.3ex;
244
+ }
245
+
246
+ :focus {
247
+ outline: none;
248
+ }
249
+
250
+ :focus-visible {
251
+ outline: 2px solid var(--focus-color, currentColor);
252
+ outline-offset: var(--focus-offset, 0.2lh);
253
+ }
254
+
255
+ /* Firefox is the only browser that doesn't outline the whole element unless you make it display: inline-block. That in itself causes multiple flow issues so we can detect it, using its own vendor prefix and reduce focus offset
256
+ */
257
+ @supports (-moz-appearance: none) {
258
+ :root {
259
+ --focus-offset: 0.08em;
260
+ }
261
+ }
262
+
263
+ :target {
264
+ scroll-margin-block: 5lh;
265
+ }
266
+
267
+ ::selection {
268
+ color: var(--color-light);
269
+ background: var(--color-dark);
270
+ }
271
+
272
+ hr {
273
+ border: none;
274
+ border-block-start: var(--hr-stroke, var(--stroke));
275
+ margin-block: var(--flow-space, var(--space-xl));
276
+ }
277
+
278
+ svg:not([class]) {
279
+ width: auto;
280
+ height: 1lh;
281
+ }
282
+
283
+ svg {
284
+ flex-shrink: 0;
285
+ }
286
+
287
+ svg[role="img"][width][height] {
288
+ width: revert;
289
+ height: revert;
290
+ background: var(--color-light);
291
+ padding: var(--space-xs);
292
+ }
293
+
294
+ /* There's a .flow composition, but this prevents forms from having to have that applied where markup is harder to control in certain systems. It still uses the --flow-space variables though to make managing space easier */
295
+ form > * + * {
296
+ margin-top: var(--flow-space, 1rem);
297
+ }
298
+
299
+ :is(input, select, textarea) {
300
+ accent-color: var(--color-primary);
301
+ }
302
+
303
+ :is(
304
+ input:not([type="checkbox"], [type="radio"], [type="color"]),
305
+ select,
306
+ textarea
307
+ ) {
308
+ padding: 0.5em 0.8em;
309
+ border-radius: var(--radius-s);
310
+ border: var(--stroke-solid);
311
+ background: var(--color-dark-glare);
312
+ color: var(--color-light);
313
+ width: 100%;
314
+
315
+ &::placeholder {
316
+ color: var(--color-mid);
317
+ }
318
+ }
319
+
320
+ label {
321
+ line-height: var(--leading-fine);
322
+ font-weight: var(--font-medium);
323
+ }
324
+
325
+ label::after {
326
+ content: "\A";
327
+ white-space: pre;
328
+ }
329
+
330
+ /* Usually label wraps checkbox and radio buttons, so we give ourselves more layout and text-flow control with flex */
331
+ label:has(input) {
332
+ display: flex;
333
+ align-items: baseline;
334
+ gap: var(--space-s);
335
+ font-weight: var(--font-normal);
336
+ }
337
+
338
+ label:has(input) + label:has(input) {
339
+ --flow-space: var(--space-s-m);
340
+ }
341
+
342
+ /* Slightly adjusts the vertical position of the check/radio */
343
+ label:has(input) input {
344
+ transform: translateY(-0.1ex);
345
+ }
346
+
347
+ input:disabled {
348
+ background: var(--color-mid);
349
+ }
350
+
351
+ input:disabled,
352
+ label input:disabled + * {
353
+ cursor: not-allowed;
354
+ }
355
+
356
+ fieldset {
357
+ border: var(--stroke);
358
+ padding: var(--space-s);
359
+ }
360
+
361
+ legend {
362
+ font-weight: var(--font-medium);
363
+ padding-inline: var(--space-xs);
364
+ }
365
+
366
+ summary {
367
+ font-weight: var(--font-bold);
368
+ cursor: pointer;
369
+ }
370
+
371
+ details[open] summary {
372
+ margin-block-end: var(--space-s);
373
+ }
@@ -0,0 +1,91 @@
1
+ /* Modern reset: https://piccalil.li/blog/a-more-modern-css-reset/ */
2
+
3
+ /* Box sizing rules */
4
+ *,
5
+ *::before,
6
+ *::after {
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ /* Prevent font size inflation */
11
+ html {
12
+ -moz-text-size-adjust: none;
13
+ -webkit-text-size-adjust: none;
14
+ text-size-adjust: none;
15
+ }
16
+
17
+ /* Remove default margin in favour of better control in authored CSS */
18
+ body,
19
+ h1,
20
+ h2,
21
+ h3,
22
+ h4,
23
+ p,
24
+ figure,
25
+ blockquote,
26
+ dl,
27
+ dd {
28
+ margin-block: 0;
29
+ }
30
+
31
+ /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
32
+ ul[role="list"],
33
+ ol[role="list"] {
34
+ list-style: none;
35
+ }
36
+
37
+ /* Set core body defaults */
38
+ body {
39
+ min-height: 100vh;
40
+ line-height: 1.5;
41
+ }
42
+
43
+ /* Set shorter line heights on headings and interactive elements */
44
+ h1,
45
+ h2,
46
+ h3,
47
+ h4,
48
+ button,
49
+ input,
50
+ label {
51
+ line-height: 1.1;
52
+ }
53
+
54
+ /* Balance text wrapping on headings */
55
+ h1,
56
+ h2,
57
+ h3,
58
+ h4 {
59
+ text-wrap: balance;
60
+ }
61
+
62
+ /* A elements that don't have a class get default styles */
63
+ a:not([class]) {
64
+ text-decoration-skip-ink: auto;
65
+ color: currentColor;
66
+ }
67
+
68
+ /* Make images easier to work with */
69
+ img,
70
+ picture {
71
+ max-width: 100%;
72
+ display: block;
73
+ }
74
+
75
+ /* Inherit fonts for inputs and buttons */
76
+ input,
77
+ button,
78
+ textarea,
79
+ select {
80
+ font: inherit;
81
+ }
82
+
83
+ /* Make sure textareas without a rows attribute are not tiny */
84
+ textarea:not([rows]) {
85
+ min-height: 10em;
86
+ }
87
+
88
+ /* Anything that has been anchored to should have extra scroll margin */
89
+ :target {
90
+ scroll-margin-block: 5ex;
91
+ }
@@ -0,0 +1,36 @@
1
+ :root {
2
+ /* spacing */
3
+ /* https://utopia.fyi/space/calculator/?c=360,18,1.2,1240,20,1.25,8,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12 */
4
+ --space-3xs: clamp(0.3125rem, 0.3125rem + 0vw, 0.3125rem);
5
+ --space-2xs: clamp(0.5625rem, 0.5369rem + 0.1136vw, 0.625rem);
6
+ --space-xs: clamp(0.875rem, 0.8494rem + 0.1136vw, 0.9375rem);
7
+ --space-s: clamp(1.125rem, 1.0739rem + 0.2273vw, 1.25rem);
8
+ --space-m: clamp(1.6875rem, 1.6108rem + 0.3409vw, 1.875rem);
9
+ --space-l: clamp(2.25rem, 2.1477rem + 0.4545vw, 2.5rem);
10
+ --space-xl: clamp(3.375rem, 3.2216rem + 0.6818vw, 3.75rem);
11
+ --space-2xl: clamp(4.5rem, 4.2955rem + 0.9091vw, 5rem);
12
+ --space-3xl: clamp(6.75rem, 6.4432rem + 1.3636vw, 7.5rem);
13
+
14
+ /* One-up pairs */
15
+ --space-3xs-2xs: clamp(0.3125rem, 0.1847rem + 0.5682vw, 0.625rem);
16
+ --space-2xs-xs: clamp(0.5625rem, 0.4091rem + 0.6818vw, 0.9375rem);
17
+ --space-xs-s: clamp(0.875rem, 0.7216rem + 0.6818vw, 1.25rem);
18
+ --space-s-m: clamp(1.125rem, 0.8182rem + 1.3636vw, 1.875rem);
19
+ --space-m-l: clamp(1.6875rem, 1.3551rem + 1.4773vw, 2.5rem);
20
+ --space-l-xl: clamp(2.25rem, 1.6364rem + 2.7273vw, 3.75rem);
21
+ --space-xl-2xl: clamp(3.375rem, 2.7102rem + 2.9545vw, 5rem);
22
+ --space-2xl-3xl: clamp(4.5rem, 3.2727rem + 5.4545vw, 7.5rem);
23
+
24
+ /* Custom pairs */
25
+ --space-s-l: clamp(1.125rem, 0.5625rem + 2.5vw, 2.5rem);
26
+
27
+ --gutter: var(--space-xl-2xl);
28
+
29
+ --leading-micro: 0.85;
30
+ --leading-flat: 1;
31
+ --leading-fine: 1.2;
32
+ --leading-standard: 1.4;
33
+ --leading-loose: 1.7;
34
+
35
+ --measure: 60ch;
36
+ }
@@ -0,0 +1,17 @@
1
+ /* typography sizes */
2
+ :root {
3
+ /* https://utopia.fyi/type/calculator?c=360,18,1.2,1240,20,1.25,10,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12 */
4
+ --text-step--2: clamp(0.7813rem, 0.7736rem + 0.0341vw, 0.8rem);
5
+ --text-step--1: clamp(0.9375rem, 0.9119rem + 0.1136vw, 1rem);
6
+ --text-step-0: clamp(1.125rem, 1.0739rem + 0.2273vw, 1.25rem);
7
+ --text-step-1: clamp(1.35rem, 1.2631rem + 0.3864vw, 1.5625rem);
8
+ --text-step-2: clamp(1.62rem, 1.4837rem + 0.6057vw, 1.9531rem);
9
+ --text-step-3: clamp(1.944rem, 1.7405rem + 0.9044vw, 2.4414rem);
10
+ --text-step-4: clamp(2.3328rem, 2.0387rem + 1.3072vw, 3.0518rem);
11
+ --text-step-5: clamp(2.7994rem, 2.384rem + 1.8461vw, 3.8147rem);
12
+ --text-step-6: clamp(3.3592rem, 2.7828rem + 2.5621vw, 4.7684rem);
13
+ --text-step-7: clamp(4.0311rem, 3.2418rem + 3.508vw, 5.9605rem);
14
+ --text-step-8: clamp(4.8373rem, 3.7682rem + 4.7514vw, 7.4506rem);
15
+ --text-step-9: clamp(5.8048rem, 4.3695rem + 6.379vw, 9.3132rem);
16
+ --text-step-10: clamp(6.9657rem, 5.0529rem + 8.5015vw, 11.6415rem);
17
+ }