jbx 1.7.4 → 2.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.
Files changed (4) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/index.js +209 -336
  3. package/package.json +1 -1
  4. package/style.css +136 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 2.0.0
2
+
3
+ - Drop `styled-components` and `capsize`.
4
+
1
5
  # v1.7.0
2
6
 
3
7
  - Add `touch-action: pan-y;`.
package/index.js CHANGED
@@ -1,205 +1,101 @@
1
- import React, { Fragment } from 'react';
2
-
3
- import Styled from 'styled-components';
4
- import capsize from 'capsize';
1
+ import './style.css';
5
2
 
6
- import { createGlobalStyle } from 'styled-components';
3
+ import React, { Fragment } from 'react';
7
4
 
8
5
  const SIZE = window.innerWidth > 1280 ? 16 : window.innerWidth > 640 ? 14 : 12;
9
- const BASE_SIZE = SIZE;
10
6
  const BASE_RADIUS = SIZE / 2;
11
- const SPACE = SIZE;
12
7
  const BASE_FONT_SIZE = SIZE;
13
8
 
14
- const fontMetrics = {
15
- capHeight: 1364,
16
- ascent: 1950,
17
- descent: -494,
18
- unitsPerEm: 2048
19
- };
20
-
21
- export const JBX = createGlobalStyle`
22
- html {
23
- box-sizing: border-box;
24
- }
25
- *,
26
- *:before,
27
- *:after {
28
- box-sizing: inherit;
29
- }
30
-
31
- * {
32
- padding: 0;
33
- margin: 0;
34
- position: relative;
35
- }
36
-
37
- body {
38
- touch-action: manipulation;
39
- touch-action: pan-y;
40
- }
41
-
42
- body,
43
- input,
44
- textarea {
45
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", sans-serif;
46
- }
47
-
48
- body {
49
- background: #fcfcfd;
50
- color: #000;
51
- }
52
-
53
- :root {
54
- --accent-color: ${(props) => props.accent};
55
- }
56
- `;
57
-
58
- const BaseText = Styled.div({});
59
-
60
- function textProps(capsizeConfig) {
61
- const capsizeComputed = {
62
- fontMetrics,
63
- lineGap: BASE_FONT_SIZE * 0.618,
64
- ...capsizeConfig
9
+ function Component(className, styleSrc, config = {}) {
10
+ const { element = `div`, styleProps } = config;
11
+
12
+ return function MakeComponent({ children, ...props }) {
13
+ const passProps = styleProps
14
+ ? Object.keys(props)
15
+ .filter((e) => !styleProps.includes(e))
16
+ .reduce((acc, p) => {
17
+ acc[p] = props[p];
18
+ return acc;
19
+ }, {})
20
+ : props;
21
+
22
+ return React.createElement(
23
+ element,
24
+ {
25
+ className,
26
+ style: typeof styleSrc === 'function' ? styleSrc(props) : styleSrc,
27
+ ...passProps
28
+ },
29
+ children
30
+ );
65
31
  };
66
-
67
- return capsize(capsizeComputed);
68
32
  }
69
33
 
70
- export const Container = Styled.div({
71
- maxWidth: '1080px',
72
- margin: '0 auto',
73
- padding: `${SIZE * 2.5}px ${SIZE * 1.5}px ${SIZE * 4}px`
74
- });
75
-
76
- export const Text = Styled(BaseText)({
77
- ...textProps({
78
- capHeight: BASE_FONT_SIZE
79
- })
80
- });
81
-
82
- export const SmallText = Styled(BaseText)({
83
- ...textProps({
84
- capHeight: BASE_FONT_SIZE * 0.8,
85
- lineGap: BASE_FONT_SIZE / 3
86
- })
87
- });
88
-
89
- export const ButtonContainer = Styled.button({
90
- appearance: 'none',
91
- userSelect: 'none',
92
- cursor: 'pointer',
93
- display: 'inline-block',
94
- backgroundColor: '#eee',
95
- boxShadow: '3px 3px 0 #ccc',
96
- padding: `0 ${SPACE / 2}px`,
97
- border: 'none',
98
- height: SPACE * 2.5,
99
- '&:active': {
100
- top: 1,
101
- left: 1,
102
- boxShadow: '2px 2px 0 #ccc'
103
- }
104
- });
105
-
106
- export const Button = function Button(props) {
107
- const { children, ...other } = props;
108
- return React.createElement(ButtonContainer, other, React.createElement(Text, {}, children));
109
- };
110
-
111
- export const Input = Styled.input({
112
- '-webkit-text-fill-color': '#777',
113
- opacity: 1,
114
- flex: 1,
115
- display: 'block',
116
- appearance: 'none',
117
- border: 'none',
118
- borderRadius: 0,
119
- height: SPACE * 2.5,
120
- backgroundColor: '#eee',
121
- ...textProps({
122
- capHeight: (BASE_FONT_SIZE * 3) / 3
123
- }),
124
- padding: `0 ${SPACE / 2}px`,
125
- boxShadow: `inset rgba(0, 0, 0, 0.04) 3px 3px 0, inset rgba(0, 0, 0, 0.03) 0.5px 0.5px 0`,
126
- color: '#777'
127
- });
128
-
129
- export const Range = Styled.input({
130
- flex: 1,
131
- width: '100%',
132
- appearance: 'none',
133
- backgroundColor: 'var(--accent-color)',
134
- height: SPACE,
135
- borderRadius: 0,
136
- '&::-webkit-slider-thumb': {
137
- appearance: 'none',
138
- boxShadow: 'none',
139
- borderRadius: 0,
140
- height: SPACE * 2,
141
- width: SPACE,
142
- backgroundColor: '#000',
143
- border: 'none'
144
- },
145
- '&::-moz-range-thumb': {
146
- appearance: 'none',
147
- boxShadow: 'none',
148
- borderRadius: 0,
149
- height: SPACE * 2,
150
- width: SPACE,
151
- backgroundColor: '#000',
152
- border: 'none'
153
- },
154
- '&::-webkit-slider-runnable-track': {
155
- appearance: 'none'
156
- },
157
- ':focus': {
158
- outline: 'none'
159
- }
160
- });
161
-
162
- export const HeaderH4 = Styled.h4({
163
- margin: 0,
164
-
165
- letterSpacing: -0.11,
166
- fontWeight: 700,
167
- ...textProps({
168
- capHeight: BASE_FONT_SIZE,
169
- lineGap: BASE_FONT_SIZE
170
- })
171
- });
172
- export const HeaderH3 = Styled.h3({
173
- margin: 0,
174
-
175
- letterSpacing: -0.22,
176
- fontWeight: 500,
177
- ...textProps({
178
- capHeight: BASE_FONT_SIZE * 1 * 1.25,
179
- lineGap: BASE_FONT_SIZE
180
- })
181
- });
182
- export const HeaderH2 = Styled.h2({
183
- margin: 0,
184
-
185
- letterSpacing: -0.33,
186
- fontWeight: 500,
187
- ...textProps({
188
- capHeight: BASE_FONT_SIZE * 1.5,
189
- lineGap: 12
190
- })
191
- });
192
- export const HeaderH1 = Styled.h1({
193
- letterSpacing: -1,
194
- margin: '2px 0',
195
- fontWeight: 700,
196
- ...textProps({
197
- capHeight: BASE_FONT_SIZE * 3 - 4,
198
- lineGap: BASE_FONT_SIZE
199
- })
200
- });
201
-
202
- export const MainHeader = function MainHeader({ children }) {
34
+ export const Container = Component(`jbx-container`);
35
+
36
+ export const Text = Component(`jbx-text`);
37
+
38
+ export const SmallText = Component(`jbx-small-text`);
39
+
40
+ export const Button = Component(`jbx-button`, {}, { element: 'button' });
41
+
42
+ // export const Input = Styled.input({
43
+ // '-webkit-text-fill-color': '#777',
44
+ // opacity: 1,
45
+ // flex: 1,
46
+ // display: 'block',
47
+ // appearance: 'none',
48
+ // border: 'none',
49
+ // borderRadius: 0,
50
+ // height: SPACE * 2.5,
51
+ // backgroundColor: '#eee',
52
+ // ...textProps({
53
+ // capHeight: (BASE_FONT_SIZE * 3) / 3
54
+ // }),
55
+ // padding: `0 ${SPACE / 2}px`,
56
+ // boxShadow: `inset rgba(0, 0, 0, 0.04) 3px 3px 0, inset rgba(0, 0, 0, 0.03) 0.5px 0.5px 0`,
57
+ // color: '#777'
58
+ // });
59
+
60
+ // export const Range = Styled.input({
61
+ // flex: 1,
62
+ // width: '100%',
63
+ // appearance: 'none',
64
+ // backgroundColor: 'var(--accent-color)',
65
+ // height: SPACE,
66
+ // borderRadius: 0,
67
+ // '&::-webkit-slider-thumb': {
68
+ // appearance: 'none',
69
+ // boxShadow: 'none',
70
+ // borderRadius: 0,
71
+ // height: SPACE * 2,
72
+ // width: SPACE,
73
+ // backgroundColor: '#000',
74
+ // border: 'none'
75
+ // },
76
+ // '&::-moz-range-thumb': {
77
+ // appearance: 'none',
78
+ // boxShadow: 'none',
79
+ // borderRadius: 0,
80
+ // height: SPACE * 2,
81
+ // width: SPACE,
82
+ // backgroundColor: '#000',
83
+ // border: 'none'
84
+ // },
85
+ // '&::-webkit-slider-runnable-track': {
86
+ // appearance: 'none'
87
+ // },
88
+ // ':focus': {
89
+ // outline: 'none'
90
+ // }
91
+ // });
92
+
93
+ export const HeaderH1 = Component(`jbx-h${1}`, null, { element: 'h1' });
94
+ export const HeaderH2 = Component(`jbx-h${2}`, null, { element: 'h2' });
95
+ export const HeaderH3 = Component(`jbx-h${3}`, null, { element: 'h3' });
96
+ export const HeaderH4 = Component(`jbx-h${4}`, null, { element: 'h4' });
97
+
98
+ export const MainHeader = function MainHeader({ children, style }) {
203
99
  const content = String(children).split(' ');
204
100
 
205
101
  return React.createElement(
@@ -216,7 +112,8 @@ export const MainHeader = function MainHeader({ children }) {
216
112
  width: 'auto',
217
113
  padding: '6px',
218
114
  margin: 0,
219
- backgroundColor: 'var(--accent-color)'
115
+ backgroundColor: 'var(--accent-color)',
116
+ ...style
220
117
  }
221
118
  },
222
119
  word
@@ -225,139 +122,130 @@ export const MainHeader = function MainHeader({ children }) {
225
122
  );
226
123
  };
227
124
 
228
- export const A = Styled.a({
229
- color: '#000',
230
- boxShadow: 'var(--accent-color) 0 2px 0, inset var(--accent-color) 0 -2px 0',
231
- fontWeight: 700,
232
- textDecoration: 'none',
233
- '&:hover': {
234
- color: '#34495e'
235
- }
236
- });
237
-
238
- export const Space = Styled.div({
239
- display: (props) => (props.inline ? 'inline-block' : 'block'),
240
- height: (props) => `${SPACE * props.h}px`,
241
- width: (props) => `${SPACE * props.w}px`
242
- });
243
-
244
- export const Box = Styled.div({
245
- flex: (props) => props.flex,
246
- minWidth: (props) => props.minWidth,
247
- padding: ({ padding }) => {
248
- if (!padding) return `0`;
249
-
250
- const paddingArr = [padding].flat();
251
-
252
- return paddingArr.map((paddingValue) => `${paddingValue * SPACE}px`).join(` `);
253
- },
254
-
255
- '@media (max-width: 768px)': {
256
- display: ({ hideOnSmall }) => (hideOnSmall ? 'none' : undefined)
257
- },
258
-
259
- '@media (max-width: 1080px)': {
260
- display: ({ hideOnMedium }) => (hideOnMedium ? 'none' : undefined)
261
- }
262
- });
125
+ export const A = Component(`jbx-a`, null, { element: 'a' });
263
126
 
264
- export const Inline = Styled.div({
265
- display: 'flex',
266
- flexWrap: 'wrap',
267
- marginLeft: ({ h }) => `${h * SPACE}px`,
268
- marginRight: ({ h }) => `${h * SPACE}px`,
269
- marginTop: ({ v }) => `${v * SPACE}px`,
270
- marginBottom: ({ v }) => `${v * SPACE}px`
271
- });
127
+ export const Space = Component(`jbx-space`, (props) => ({
128
+ display: props.inline ? 'inline-block' : 'block',
129
+ height: `${SIZE * props.h}px`,
130
+ width: `${SIZE * props.w}px`
131
+ }));
272
132
 
273
- export const LinkButton = Styled.a({
274
- capHeight: BASE_FONT_SIZE,
275
- color: '#3498db',
276
- cursor: 'pointer',
277
- borderRadius: 5,
278
- borderTop: '1px solid #3498db10',
279
- borderBottom: '1px solid #0000',
280
- backgroundColor: '#3498db20',
281
- height: BASE_FONT_SIZE * 2,
282
- display: 'flex',
283
- alignItems: 'center',
284
- alignContent: 'center',
285
- justifyContent: 'center',
286
- padding: 0,
287
- '&:hover': {
288
- boxShadow: `rgba(0, 0, 0, 0.1) 0 1px 1px, rgba(0, 0, 0, 0.1) 0 3px 12px`
289
- }
133
+ export const Box = Component(`jbx-box`, ({ hideOnSmall, flex, minWidth }) => {
134
+ return {
135
+ flex,
136
+ minWidth,
137
+ padding: padding
138
+ ? [padding]
139
+ .flat()
140
+ .map((paddingValue) => `${paddingValue * SIZE}px`)
141
+ .join(` `)
142
+ : null
143
+ };
290
144
  });
291
145
 
292
- export const Dropzone = Styled.div({
293
- height: '120px',
294
- flex: 1,
295
- 'max-width': '320px',
296
- display: 'flex',
297
- 'text-align': 'center',
298
- 'align-items': 'center',
299
- 'align-content': 'center',
300
- 'justify-content': 'center',
301
- 'flex-direction': 'column',
302
- border: '2px dashed #000',
303
- color: '#000',
304
- padding: '0',
305
- cursor: 'pointer',
306
- '& span': {
307
- width: '100%',
308
- cursor: 'pointer'
146
+ export const Inline = Component(`jbx-inline`, ({ v, h, gap }) => ({
147
+ marginLeft: `${h * SIZE}px`,
148
+ marginRight: `${h * SIZE}px`,
149
+ marginTop: `${v * SIZE}px`,
150
+ marginBottom: `${v * SIZE}px`,
151
+ gap: `${gap * SIZE}px`
152
+ }));
153
+
154
+ export const Stack = Component(`jbx-stack`, ({ v, h, gap }) => ({
155
+ marginLeft: `${h * SIZE}px`,
156
+ marginRight: `${h * SIZE}px`,
157
+ marginTop: `${v * SIZE}px`,
158
+ marginBottom: `${v * SIZE}px`,
159
+ gap: `${gap * SIZE}px`
160
+ }));
161
+
162
+ // export const LinkButton = Styled.a({
163
+ // capHeight: BASE_FONT_SIZE,
164
+ // color: '#3498db',
165
+ // cursor: 'pointer',
166
+ // borderRadius: 5,
167
+ // borderTop: '1px solid #3498db10',
168
+ // borderBottom: '1px solid #0000',
169
+ // backgroundColor: '#3498db20',
170
+ // height: BASE_FONT_SIZE * 2,
171
+ // display: 'flex',
172
+ // alignItems: 'center',
173
+ // alignContent: 'center',
174
+ // justifyContent: 'center',
175
+ // padding: 0,
176
+ // '&:hover': {
177
+ // boxShadow: `rgba(0, 0, 0, 0.1) 0 1px 1px, rgba(0, 0, 0, 0.1) 0 3px 12px`
178
+ // }
179
+ // });
180
+
181
+ // export const Dropzone = Styled.div({
182
+ // height: '120px',
183
+ // flex: 1,
184
+ // 'max-width': '320px',
185
+ // display: 'flex',
186
+ // 'text-align': 'center',
187
+ // 'align-items': 'center',
188
+ // 'align-content': 'center',
189
+ // 'justify-content': 'center',
190
+ // 'flex-direction': 'column',
191
+ // border: '2px dashed #000',
192
+ // color: '#000',
193
+ // padding: '0',
194
+ // cursor: 'pointer',
195
+ // '& span': {
196
+ // width: '100%',
197
+ // cursor: 'pointer'
198
+ // },
199
+ // '&:hover': {
200
+ // 'border-color': '#999'
201
+ // },
202
+ // '& input': {
203
+ // position: 'absolute',
204
+ // top: '0',
205
+ // left: '0',
206
+ // height: '100%',
207
+ // width: '100%',
208
+ // opacity: '0',
209
+ // cursor: 'pointer'
210
+ // }
211
+ // });
212
+
213
+ export const Ul = Component(
214
+ `jbx-ul`,
215
+ {
216
+ margin: 0,
217
+ padding: `0 0 0 ${BASE_FONT_SIZE / 4}px`
309
218
  },
310
- '&:hover': {
311
- 'border-color': '#999'
219
+ { element: 'ul' }
220
+ );
221
+
222
+ export const Li = Component(
223
+ `jbx-li`,
224
+ {
225
+ margin: `0 0 0 ${SIZE}px`,
226
+ padding: `${SIZE / 4}px 0`
312
227
  },
313
- '& input': {
314
- position: 'absolute',
315
- top: '0',
316
- left: '0',
317
- height: '100%',
318
- width: '100%',
319
- opacity: '0',
320
- cursor: 'pointer'
321
- }
322
- });
323
-
324
- export const Ul = Styled.ul({
325
- margin: 0,
326
- padding: `0 0 0 ${BASE_FONT_SIZE / 4}px`
327
- });
328
-
329
- export const Li = Styled.li({
330
- margin: `0 0 0 ${SIZE}px`,
331
- padding: `${SIZE / 4}px 0`
332
- });
333
-
334
- export const Tabs = Styled.div({});
335
-
336
- export const Tab = Styled.div({
337
- userSelect: 'none',
338
- padding: SIZE / 2,
339
- cursor: 'pointer',
340
- backgroundColor: (props) => (props.active ? '#000' : props.info ? '#fff' : '#ecf0f1'),
341
- color: (props) => (props.active ? '#fff' : '#000'),
342
- paddingLeft: (props) => (props.info ? 0 : undefined)
343
- });
228
+ { element: 'li' }
229
+ );
230
+
231
+ export const Tabs = Component(`jbx-tabs`);
232
+
233
+ export const Tab = Component(
234
+ `jbx-tabs--tab`,
235
+ ({ info, active }) => ({
236
+ userSelect: 'none',
237
+ cursor: 'pointer',
238
+ backgroundColor: active ? '#000' : info ? '#fff' : '#ecf0f1',
239
+ color: active ? '#fff' : '#000',
240
+ padding: SIZE / 2,
241
+ paddingLeft: info ? 0 : SIZE / 2
242
+ }),
243
+ { styleProps: ['info', 'active'] }
244
+ );
344
245
 
345
- export const CodeSnippet = Styled.pre({
346
- borderRadius: BASE_RADIUS,
347
- 'font-family': 'monaco, monospace',
348
- border: 'none',
349
- width: '100%',
350
- 'font-size': SIZE - 2,
351
- 'line-height': '1.5',
352
- padding: SIZE,
353
- background: '#ecf0f1',
354
- color: '#34495e',
355
- ':focus': {
356
- outline: 'none'
357
- }
358
- });
246
+ export const CodeSnippet = Component(`jbx-code-snippet`, null, { element: 'pre' });
359
247
 
360
- export const CheckboxHidden = Styled.div(({ checked }) => {
248
+ export const CheckboxHidden = Component(`jbx-checkbox-hidden`, ({ checked }) => {
361
249
  return {
362
250
  height: BASE_SIZE * 2 - 4,
363
251
  width: BASE_SIZE * 2 - 4,
@@ -397,8 +285,8 @@ export const Checkbox = function Checkbox({ label, checked, onChange }) {
397
285
  'svg',
398
286
  {
399
287
  xmlns: 'http://www.w3.org/2000/svg',
400
- width: 12 + BASE_SIZE,
401
- height: 12 + BASE_SIZE,
288
+ width: BASE_SIZE * 2 - 8,
289
+ height: BASE_SIZE * 2 - 8,
402
290
  fill: 'none',
403
291
  stroke: 'currentColor',
404
292
  strokeLinecap: 'round',
@@ -418,18 +306,3 @@ export const Checkbox = function Checkbox({ label, checked, onChange }) {
418
306
  ]
419
307
  );
420
308
  };
421
-
422
- export const Code = Styled.textarea({
423
- 'font-family': 'monaco, monospace',
424
- border: 'none',
425
- width: '100%',
426
- height: '256px',
427
- 'font-size': '12px',
428
- 'line-height': '1.309',
429
- padding: '16px 18px',
430
- background: '#ecf0f1',
431
- color: '#34495e',
432
- ':focus': {
433
- outline: 'none'
434
- }
435
- });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jbx",
3
- "version": "1.7.4",
3
+ "version": "2.0.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "author": "hi@javier.xyz",
package/style.css ADDED
@@ -0,0 +1,136 @@
1
+ html {
2
+ box-sizing: border-box;
3
+ }
4
+ *,
5
+ *:before,
6
+ *:after {
7
+ box-sizing: inherit;
8
+ }
9
+
10
+ :root {
11
+ --size: 16px;
12
+ --base-font-size: 24px;
13
+ --base-radius: #95a5a6;
14
+ }
15
+
16
+ * {
17
+ padding: 0;
18
+ margin: 0;
19
+ position: relative;
20
+ }
21
+
22
+ body {
23
+ touch-action: pan-y;
24
+ }
25
+
26
+ body,
27
+ input,
28
+ textarea {
29
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
30
+ }
31
+
32
+ body {
33
+ background: #fcfcfd;
34
+ color: #000;
35
+ }
36
+
37
+ /* base text */
38
+ body,
39
+ .jbx-button {
40
+ font-size: var(--base-font-size);
41
+ line-height: 1;
42
+ }
43
+
44
+ .jbx-code-snippet {
45
+ border-radius: var(--size);
46
+ font-family: monaco, monospace;
47
+ border: none;
48
+ width: 100%;
49
+ font-size: calc(var(--size) - 2px);
50
+ line-height: 1.5;
51
+ padding: var(--size);
52
+ background: #ecf0f1;
53
+ color: #34495e;
54
+ }
55
+ .jbx-code-snippet:focus {
56
+ outline: none;
57
+ }
58
+
59
+ .jbx-button {
60
+ appearance: none;
61
+ user-select: none;
62
+ cursor: pointer;
63
+ display: inline-block;
64
+ background-color: #eee;
65
+ box-shadow: 3px 3px 0 #ccc;
66
+ padding: 0 calc(var(--size) / 2);
67
+ border: none;
68
+ height: calc(var(--size) * 2.5);
69
+ }
70
+ .jbx-button:active {
71
+ top: 1;
72
+ left: 1;
73
+ box-shadow: 2px 2px 0 #ccc;
74
+ }
75
+
76
+ .jbx-a {
77
+ color: #000;
78
+ box-shadow: var(--accent-color) 0 2px 0, inset var(--accent-color) 0 -2px 0;
79
+ font-weight: 700;
80
+ text-decoration: none;
81
+ }
82
+ .jbx-a:hover {
83
+ color: '#34495e';
84
+ }
85
+
86
+ .jbx-h1,
87
+ .jbx-h2,
88
+ .jbx-h3,
89
+ .jbx-h4 {
90
+ line-height: 1;
91
+ padding: 0;
92
+ margin: 0;
93
+ font-weight: 400;
94
+ }
95
+
96
+ .jbx-h4 {
97
+ font-size: calc(var(--base-font-size));
98
+ letter-spacing: -0.11px;
99
+ }
100
+ .jbx-h3 {
101
+ font-size: calc(var(--base-font-size) * 1.25);
102
+ letter-spacing: -0.22px;
103
+ }
104
+ .jbx-h2 {
105
+ font-size: calc(var(--base-font-size) * 1.5);
106
+ letter-spacing: -0.33px;
107
+ }
108
+ .jbx-h1 {
109
+ font-size: calc(var(--base-font-size) * 2.5);
110
+ letter-spacing: -1px;
111
+ }
112
+
113
+ .jbx-small-text {
114
+ font-size: calc(var(--base-font-size) * 0.8);
115
+ line-height: calc(var(--base-font-size) * 0.6);
116
+ }
117
+
118
+ .jbx-container {
119
+ max-width: 1080px;
120
+ margin: 0 auto;
121
+ padding: calc(var(--size) * 2.5) calc(var(--size) * 1.5) calc(var(--size) * 4);
122
+ }
123
+
124
+ .jbx-inline {
125
+ flex: 1;
126
+ display: flex;
127
+ flex-wrap: wrap;
128
+ flex-direction: row;
129
+ }
130
+
131
+ .jbx-stack {
132
+ flex: 1;
133
+ display: flex;
134
+ flex-wrap: wrap;
135
+ flex-direction: column;
136
+ }