this.gui 1.0.17 → 1.0.18
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/dist/style.css +1 -1
- package/dist/this-gui.es.js +727 -647
- package/dist/this-gui.umd.js +17 -17
- package/package.json +2 -1
- package/src/App.jsx +19 -43
- package/src/CreatePage.jsx +61 -0
- package/src/MDXEditor.jsx +51 -0
- package/src/PageDashboard.jsx +56 -0
- package/src/SiteBuilder.jsx +95 -26
- package/src/scripts/postinstall.js +41 -30
- package/src/stories/Atoms/Button/Button.css +259 -58
- package/src/stories/Atoms/Button/Button.jsx +8 -11
- package/src/stories/Atoms/Button/Button.stories.jsx +65 -40
- package/src/stories/Atoms/Container/Container.css +420 -39
- package/src/stories/Atoms/Container/Container.jsx +98 -36
- package/src/stories/Atoms/Container/Container.stories.jsx +120 -79
- package/src/stories/Atoms/Link/Link.css +6 -26
- package/src/stories/Atoms/Link/Link.jsx +11 -21
- package/src/themes/styles/neurons/light.css +94 -204
|
@@ -1,104 +1,145 @@
|
|
|
1
|
-
// src/stories/Atoms/Container/Container.stories.jsx
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { Container } from './Container';
|
|
4
|
-
import './Container.css';
|
|
5
3
|
|
|
6
4
|
export default {
|
|
7
5
|
title: 'Atoms/Layout/Container',
|
|
8
6
|
component: Container,
|
|
9
7
|
argTypes: {
|
|
8
|
+
size: {
|
|
9
|
+
control: { type: 'select' },
|
|
10
|
+
options: ['small', 'medium', 'large'],
|
|
11
|
+
},
|
|
10
12
|
border: {
|
|
11
|
-
control: '
|
|
12
|
-
|
|
13
|
+
control: { type: 'select' },
|
|
14
|
+
options: ['on', 'off'],
|
|
13
15
|
},
|
|
14
|
-
|
|
15
|
-
control: {
|
|
16
|
-
|
|
17
|
-
options: ['small', 'medium', 'large'],
|
|
18
|
-
},
|
|
19
|
-
description: 'Size of the container.',
|
|
16
|
+
align: {
|
|
17
|
+
control: { type: 'select' },
|
|
18
|
+
options: ['left', 'center', 'right'],
|
|
20
19
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
fluid: { control: 'boolean' },
|
|
21
|
+
padding: {
|
|
22
|
+
control: { type: 'select' },
|
|
23
|
+
options: ['sm', 'md', 'lg'],
|
|
24
24
|
},
|
|
25
|
-
|
|
26
|
-
control: '
|
|
27
|
-
|
|
25
|
+
marginTop: {
|
|
26
|
+
control: { type: 'select' },
|
|
27
|
+
options: ['sm', 'md', 'lg'],
|
|
28
28
|
},
|
|
29
|
-
|
|
30
|
-
control: {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
marginBottom: {
|
|
30
|
+
control: { type: 'select' },
|
|
31
|
+
options: ['sm', 'md', 'lg'],
|
|
32
|
+
},
|
|
33
|
+
marginLeft: {
|
|
34
|
+
control: { type: 'select' },
|
|
35
|
+
options: ['sm', 'md', 'lg'],
|
|
36
|
+
},
|
|
37
|
+
marginRight: {
|
|
38
|
+
control: { type: 'select' },
|
|
39
|
+
options: ['sm', 'md', 'lg'],
|
|
35
40
|
},
|
|
36
41
|
position: {
|
|
37
|
-
control: {
|
|
38
|
-
|
|
39
|
-
options: ['static', 'relative', 'absolute', 'fixed', 'sticky'],
|
|
40
|
-
},
|
|
41
|
-
description: 'CSS position property of the container.',
|
|
42
|
+
control: { type: 'select' },
|
|
43
|
+
options: ['relative', 'static', 'fixed', 'absolute', 'sticky'],
|
|
42
44
|
},
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
rounded: { control: 'boolean' }, // Add control for 'rounded' prop
|
|
46
|
+
borderColor: {
|
|
47
|
+
control: { type: 'select' },
|
|
48
|
+
options: [
|
|
49
|
+
'none',
|
|
50
|
+
'primary',
|
|
51
|
+
'secondary',
|
|
52
|
+
'link',
|
|
53
|
+
'focus',
|
|
54
|
+
'info',
|
|
55
|
+
'warning',
|
|
56
|
+
'alert',
|
|
57
|
+
'success',
|
|
58
|
+
'neutral',
|
|
59
|
+
'dark',
|
|
60
|
+
'classy-1',
|
|
61
|
+
'classy-2',
|
|
62
|
+
'classy-3',
|
|
63
|
+
'classy-4',
|
|
64
|
+
'classy-5',
|
|
65
|
+
'small-switch-1',
|
|
66
|
+
'small-switch-2',
|
|
67
|
+
'natural-1',
|
|
68
|
+
'natural-2',
|
|
69
|
+
'natural-3',
|
|
70
|
+
'grey-friend-1',
|
|
71
|
+
'grey-friend-2',
|
|
72
|
+
'shade-1',
|
|
73
|
+
'shade-2',
|
|
74
|
+
'shade-3',
|
|
75
|
+
'shade-4',
|
|
76
|
+
],
|
|
46
77
|
},
|
|
47
|
-
|
|
48
|
-
control: '
|
|
49
|
-
|
|
78
|
+
backgroundColor: {
|
|
79
|
+
control: { type: 'select' }, // Use 'select' control type
|
|
80
|
+
options: [
|
|
81
|
+
'none',
|
|
82
|
+
'primary',
|
|
83
|
+
'secondary',
|
|
84
|
+
'link',
|
|
85
|
+
'focus',
|
|
86
|
+
'info',
|
|
87
|
+
'warning',
|
|
88
|
+
'alert',
|
|
89
|
+
'success',
|
|
90
|
+
'neutral',
|
|
91
|
+
'dark',
|
|
92
|
+
'classy-1',
|
|
93
|
+
'classy-2',
|
|
94
|
+
'classy-3',
|
|
95
|
+
'classy-4',
|
|
96
|
+
'classy-5',
|
|
97
|
+
'small-switch-1',
|
|
98
|
+
'small-switch-2',
|
|
99
|
+
'natural-1',
|
|
100
|
+
'natural-2',
|
|
101
|
+
'natural-3',
|
|
102
|
+
'grey-friend-1',
|
|
103
|
+
'grey-friend-2',
|
|
104
|
+
'shade-1',
|
|
105
|
+
'shade-2',
|
|
106
|
+
'shade-3',
|
|
107
|
+
'shade-4',
|
|
108
|
+
],
|
|
50
109
|
},
|
|
51
110
|
},
|
|
52
111
|
};
|
|
53
112
|
|
|
54
|
-
|
|
55
|
-
* Small Container with Border and Left Alignment
|
|
56
|
-
*/
|
|
57
|
-
export const SmallWithBorderLeft = () => (
|
|
58
|
-
<Container border size="small" align="left">
|
|
59
|
-
<p>This is a small container with a border and left alignment.</p>
|
|
60
|
-
</Container>
|
|
61
|
-
);
|
|
113
|
+
const Template = (args) => <Container {...args}>Content goes here</Container>;
|
|
62
114
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
<Container fluid size="large" align="right">
|
|
77
|
-
<p>This is a large, fluid container without a border and right alignment.</p>
|
|
78
|
-
</Container>
|
|
79
|
-
);
|
|
115
|
+
export const Default = Template.bind({});
|
|
116
|
+
Default.args = {
|
|
117
|
+
size: 'medium',
|
|
118
|
+
border: 'on',
|
|
119
|
+
align: 'left',
|
|
120
|
+
fluid: false,
|
|
121
|
+
padding: 'md',
|
|
122
|
+
marginTop: 'md',
|
|
123
|
+
marginBottom: 'md',
|
|
124
|
+
marginLeft: 'md',
|
|
125
|
+
marginRight: 'md',
|
|
126
|
+
position: 'relative',
|
|
127
|
+
};
|
|
80
128
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
<p>This container is absolutely positioned.</p>
|
|
87
|
-
</Container>
|
|
88
|
-
);
|
|
129
|
+
export const Fluid = Template.bind({});
|
|
130
|
+
Fluid.args = {
|
|
131
|
+
...Default.args,
|
|
132
|
+
fluid: true,
|
|
133
|
+
};
|
|
89
134
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
135
|
+
export const Centered = Template.bind({});
|
|
136
|
+
Centered.args = {
|
|
137
|
+
...Default.args,
|
|
138
|
+
align: 'center',
|
|
139
|
+
};
|
|
94
140
|
|
|
95
|
-
export const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
rounded: false,
|
|
100
|
-
fluid: false,
|
|
101
|
-
align: 'left',
|
|
102
|
-
position: 'static',
|
|
141
|
+
export const LargePadding = Template.bind({});
|
|
142
|
+
LargePadding.args = {
|
|
143
|
+
...Default.args,
|
|
144
|
+
padding: 'lg',
|
|
103
145
|
};
|
|
104
|
-
InteractiveContainer.storyName = 'Interactive Container';
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/* src/stories/Atoms/Link/Link.css */
|
|
2
|
-
|
|
3
1
|
.link {
|
|
4
2
|
color: var(--link-color);
|
|
5
3
|
font-size: var(--font-size-base);
|
|
@@ -7,36 +5,18 @@
|
|
|
7
5
|
transition: color var(--transition-speed) ease, text-decoration var(--transition-speed) ease;
|
|
8
6
|
}
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
.link--no-underline {
|
|
15
|
-
text-decoration: none;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.link--bold {
|
|
19
|
-
font-weight: var(--font-weight-bold);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.link--external {
|
|
23
|
-
display: inline-flex;
|
|
24
|
-
align-items: center;
|
|
8
|
+
/* Hover states */
|
|
9
|
+
.link:hover {
|
|
10
|
+
color: var(--link-hover-color);
|
|
11
|
+
text-decoration: underline; /* Default hover behavior */
|
|
25
12
|
}
|
|
26
13
|
|
|
14
|
+
/* External link icon styling */
|
|
27
15
|
.link__external-icon {
|
|
28
16
|
margin-left: 0.25em;
|
|
29
17
|
font-size: 0.8em;
|
|
30
18
|
}
|
|
31
19
|
|
|
32
|
-
.link:hover {
|
|
33
|
-
color: var(--link-hover-color);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.link:hover.text-decoration {
|
|
37
|
-
text-decoration: underline;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
20
|
/* Experimental Preview Styles */
|
|
41
21
|
.link__preview {
|
|
42
22
|
position: fixed;
|
|
@@ -68,4 +48,4 @@
|
|
|
68
48
|
max-width: 90%;
|
|
69
49
|
max-height: 400px;
|
|
70
50
|
}
|
|
71
|
-
}
|
|
51
|
+
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
// src/stories/Atoms/Link/Link.jsx
|
|
2
1
|
import React, { useState } from 'react';
|
|
3
2
|
import PropTypes from 'prop-types';
|
|
4
|
-
import classNames from 'classnames';
|
|
5
3
|
import './Link.css';
|
|
6
4
|
|
|
7
5
|
export const Link = ({
|
|
8
6
|
text,
|
|
9
7
|
href,
|
|
10
|
-
underline = true,
|
|
11
|
-
bold = false,
|
|
8
|
+
underline = true, // Controls underline
|
|
9
|
+
bold = false, // Controls bold text
|
|
12
10
|
newWindow = false,
|
|
13
11
|
external = false,
|
|
14
12
|
experimentalPreview = false,
|
|
@@ -30,18 +28,19 @@ export const Link = ({
|
|
|
30
28
|
}
|
|
31
29
|
};
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
|
|
38
|
-
}
|
|
31
|
+
// Build dynamic inline styles based on props
|
|
32
|
+
const dynamicStyles = {
|
|
33
|
+
textDecoration: underline ? 'underline' : 'none',
|
|
34
|
+
fontWeight: bold ? 'bold' : 'normal',
|
|
35
|
+
...style, // Include any additional styles passed via props
|
|
36
|
+
};
|
|
39
37
|
|
|
40
38
|
return (
|
|
41
39
|
<>
|
|
42
40
|
<a
|
|
43
41
|
href={href}
|
|
44
|
-
className={
|
|
42
|
+
className={`link ${className}`} // Keep the base 'link' class for consistent styling
|
|
43
|
+
style={dynamicStyles} // Apply dynamic styles here
|
|
45
44
|
target={newWindow ? '_blank' : '_self'}
|
|
46
45
|
rel={newWindow ? 'noopener noreferrer' : undefined}
|
|
47
46
|
onMouseDown={handleMouseDown}
|
|
@@ -61,22 +60,13 @@ export const Link = ({
|
|
|
61
60
|
};
|
|
62
61
|
|
|
63
62
|
Link.propTypes = {
|
|
64
|
-
/** Text content of the link */
|
|
65
63
|
text: PropTypes.string.isRequired,
|
|
66
|
-
/** URL the link points to */
|
|
67
64
|
href: PropTypes.string.isRequired,
|
|
68
|
-
/** Whether the link is underlined */
|
|
69
65
|
underline: PropTypes.bool,
|
|
70
|
-
/** Whether the link text is bold */
|
|
71
66
|
bold: PropTypes.bool,
|
|
72
|
-
/** Whether the link opens in a new window */
|
|
73
67
|
newWindow: PropTypes.bool,
|
|
74
|
-
/** Whether the link is external */
|
|
75
68
|
external: PropTypes.bool,
|
|
76
|
-
/** Enable experimental preview on press */
|
|
77
69
|
experimentalPreview: PropTypes.bool,
|
|
78
|
-
/** Additional CSS classes */
|
|
79
70
|
className: PropTypes.string,
|
|
80
|
-
/** Inline styles */
|
|
81
71
|
style: PropTypes.object,
|
|
82
|
-
};
|
|
72
|
+
};
|
|
@@ -1,124 +1,86 @@
|
|
|
1
1
|
/* src/themes/styles/neurons/light.css */
|
|
2
2
|
/* Design Tokens (CSS Variables) */
|
|
3
3
|
:root {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
/* Background and Text */
|
|
85
|
-
--background-color: #FFFFFF; /* Pure white background */
|
|
86
|
-
--muted-text-color: #555555; /* Muted text color */
|
|
87
|
-
|
|
88
|
-
/* Link Colors */
|
|
89
|
-
--link-color: #1F877D; /* Neurons teal */
|
|
90
|
-
--link-hover-color: #555555; /* Greyish color on hover */
|
|
91
|
-
|
|
92
|
-
/* Typography */
|
|
93
|
-
--font-family: 'Roboto', sans-serif;
|
|
94
|
-
--font-size-base: 17px; /* Slightly larger base font size */
|
|
95
|
-
--font-size-small: 15px;
|
|
96
|
-
--font-size-large: 19px;
|
|
97
|
-
--line-height: 1.6;
|
|
98
|
-
--font-weight-regular: 400; /* Normal font weight */
|
|
99
|
-
--font-weight-medium: 500; /* Medium font weight */
|
|
100
|
-
--font-weight-bold: 600; /* Less heavy bold weight */
|
|
101
|
-
--font-weight-heavy: 700; /* For headings */
|
|
102
|
-
|
|
103
|
-
/* Spacing */
|
|
104
|
-
--spacing-xs: 4px;
|
|
105
|
-
--spacing-sm: 8px;
|
|
106
|
-
--spacing-md: 16px;
|
|
107
|
-
--spacing-lg: 32px;
|
|
108
|
-
|
|
109
|
-
/* Borders */
|
|
110
|
-
--border-radius: 6px; /* Slightly more rounded corners */
|
|
111
|
-
--border-width: 1px;
|
|
112
|
-
|
|
113
|
-
/* Shadows */
|
|
114
|
-
--box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
|
|
115
|
-
|
|
116
|
-
/* Transitions */
|
|
117
|
-
--transition-speed: 0.3s;
|
|
118
|
-
|
|
119
|
-
/* Z-index */
|
|
120
|
-
--z-index-modal: 1000;
|
|
121
|
-
--z-index-tooltip: 1050;
|
|
4
|
+
/* Primary Colors */
|
|
5
|
+
--primary-color: #1F877D; /* Neurons teal */
|
|
6
|
+
--primary-color-hover: #16655C; /* Darker teal for hover effects */
|
|
7
|
+
/* Secondary Colors */
|
|
8
|
+
--secondary-color: #39a182; /* Bright teal */
|
|
9
|
+
--secondary-color-hover: #00877A; /* Darker teal for hover effects */
|
|
10
|
+
/* Link Colors */
|
|
11
|
+
--link-color: #1F877D; /* Neurons teal */
|
|
12
|
+
--link-hover-color: #008699; /* Greyish color on hover */
|
|
13
|
+
--link-visited-color: #555555; /* Optional: custom color for visited links */
|
|
14
|
+
/* onFocus Color */
|
|
15
|
+
--focus-color: #1E90FF; /* Dodger Blue */
|
|
16
|
+
/* Semantic Colors */
|
|
17
|
+
--info-color: #008699; /* Light teal */
|
|
18
|
+
--info-color-hover: #008799d; /* Adjusted color for hover */
|
|
19
|
+
--warning-color: #FF6F61; /* Soft coral (Orange) */
|
|
20
|
+
--warning-color-hover: #e65b54; /* Adjusted color for hover */
|
|
21
|
+
--alert-color: #ffcc00; /* Yellow */
|
|
22
|
+
--alert-color-hover: #F1C40F; /* Adjusted color for hover */
|
|
23
|
+
--success-color: #00B4B8; /* Deep gray (Blueish) */
|
|
24
|
+
--success-color-hover: #0095991; /* Darker blueish for hover */
|
|
25
|
+
--neutral-color: #a4a4a4; /* Light gray */
|
|
26
|
+
--neutral-color-hover: #CCCCCC; /* Medium gray for hover */
|
|
27
|
+
--dark-color: #2C2C2C; /* Deep gray */
|
|
28
|
+
--dark-color-hover: #1A1A1A; /* Darker gray for hover */
|
|
29
|
+
/* Classy Palette */
|
|
30
|
+
--classy-color-1: #16655c;
|
|
31
|
+
--classy-color-2: #96b1ac;
|
|
32
|
+
--classy-color-3: #637c78;
|
|
33
|
+
--classy-color-4: #405b83;
|
|
34
|
+
--classy-color-5: #738db8;
|
|
35
|
+
/* Small Switch Palette */
|
|
36
|
+
--small-switch-color-1: #deefe6;
|
|
37
|
+
--small-switch-color-2: #4e8a6e;
|
|
38
|
+
/* Natural Palette */
|
|
39
|
+
--natural-color-1: #00aa96;
|
|
40
|
+
--natural-color-2: #e8fefa;
|
|
41
|
+
--natural-color-3: #e7fefe;
|
|
42
|
+
/* Grey Friends */
|
|
43
|
+
--grey-friend-1: #344b47;
|
|
44
|
+
--grey-friend-2: #96b1ac;
|
|
45
|
+
/* Shades */
|
|
46
|
+
--shade-1: #3b847a;
|
|
47
|
+
--shade-2: #5da59a;
|
|
48
|
+
--shade-3: #7ec7bc;
|
|
49
|
+
--shade-4: #a0eade;
|
|
50
|
+
/* Typography */
|
|
51
|
+
--font-family: 'Roboto', sans-serif;
|
|
52
|
+
--font-size-base: 16px; /* Slightly larger base font size */
|
|
53
|
+
--font-size-small: 14px;
|
|
54
|
+
--font-size-large: 19px;
|
|
55
|
+
--line-height: 1.6;
|
|
56
|
+
--font-weight-regular: 400; /* Normal font weight */
|
|
57
|
+
--font-weight-medium: 500; /* Medium font weight */
|
|
58
|
+
--font-weight-bold: 600; /* Less heavy bold weight */
|
|
59
|
+
--font-weight-heavy: 700; /* For headings */
|
|
60
|
+
/* Text Colors */
|
|
61
|
+
--text-color: #2C2C2C; /* Dark text color for contrast */
|
|
62
|
+
--text-color-inverse: #FFFFFF; /* For buttons with dark backgrounds */
|
|
63
|
+
/* Background and Text */
|
|
64
|
+
--background-color: #FFFFFF; /* Pure white background */
|
|
65
|
+
--muted-text-color: #555555; /* Muted text color */
|
|
66
|
+
/* Spacing */
|
|
67
|
+
--spacing-xs: 6px;
|
|
68
|
+
--spacing-sm: 16px;
|
|
69
|
+
--spacing-md: 34px;
|
|
70
|
+
--spacing-lg: 55px;
|
|
71
|
+
/* Borders */
|
|
72
|
+
--border-radius: 8px; /* Slightly more rounded corners */
|
|
73
|
+
--border-width: 1px;
|
|
74
|
+
/* Border Colors */
|
|
75
|
+
--border-color: #DDDDDD; /* Light border color */
|
|
76
|
+
--secondary-border-color: var(--secondary-color); /* For secondary buttons */
|
|
77
|
+
/* Shadows */
|
|
78
|
+
--box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
|
|
79
|
+
/* Transitions */
|
|
80
|
+
--transition-speed: 0.3s;
|
|
81
|
+
/* Z-index */
|
|
82
|
+
--z-index-modal: 1000;
|
|
83
|
+
--z-index-tooltip: 1050;
|
|
122
84
|
}
|
|
123
85
|
|
|
124
86
|
/* Global Reset */
|
|
@@ -156,92 +118,23 @@ p {
|
|
|
156
118
|
color: var(--text-color);
|
|
157
119
|
}
|
|
158
120
|
|
|
159
|
-
/*
|
|
160
|
-
a {
|
|
121
|
+
/* Base link styles */
|
|
122
|
+
a, .link {
|
|
161
123
|
color: var(--link-color);
|
|
162
|
-
text-decoration: none;
|
|
163
|
-
transition: color var(--transition-speed) ease;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
a:hover {
|
|
167
|
-
color: var(--link-hover-color);
|
|
168
|
-
text-decoration: underline;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
/* Forms */
|
|
173
|
-
input, textarea, select {
|
|
174
|
-
padding: var(--spacing-sm);
|
|
175
|
-
border-radius: var(--border-radius);
|
|
176
|
-
border: var(--border-width) solid var(--border-color);
|
|
177
124
|
font-size: var(--font-size-base);
|
|
178
125
|
font-family: var(--font-family);
|
|
179
|
-
|
|
180
|
-
color: var(--text-color);
|
|
181
|
-
transition: border-color var(--transition-speed) ease;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
input:focus, textarea:focus, select:focus {
|
|
185
|
-
border-color: var(--primary-color);
|
|
186
|
-
outline: none;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/* Layout */
|
|
190
|
-
.container {
|
|
191
|
-
max-width: 1200px;
|
|
192
|
-
margin: 0 auto;
|
|
193
|
-
padding: var(--spacing-md);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
.grid {
|
|
197
|
-
display: flex;
|
|
198
|
-
gap: var(--spacing-md);
|
|
199
|
-
flex-wrap: wrap;
|
|
126
|
+
transition: color var(--transition-speed) ease, text-decoration var(--transition-speed) ease;
|
|
200
127
|
}
|
|
201
128
|
|
|
202
|
-
.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/* Sidebar */
|
|
208
|
-
.sidebar {
|
|
209
|
-
background-color: #F8F8F8; /* Very light gray */
|
|
210
|
-
padding: var(--spacing-md);
|
|
211
|
-
border-right: var(--border-width) solid var(--border-color); /* Consistent border */
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.sidebar__link {
|
|
215
|
-
display: block;
|
|
216
|
-
padding: var(--spacing-sm);
|
|
217
|
-
color: var(--text-color);
|
|
218
|
-
text-decoration: none;
|
|
219
|
-
font-weight: var(--font-weight-medium);
|
|
220
|
-
transition: background-color var(--transition-speed) ease, color var(--transition-speed) ease;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
.sidebar__link:hover {
|
|
224
|
-
background-color: #EEEEEE; /* Slightly darker on hover */
|
|
225
|
-
color: var(--text-color);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/* Navbar */
|
|
229
|
-
.navbar {
|
|
230
|
-
background-color: #FFFFFF;
|
|
231
|
-
padding: var(--spacing-md);
|
|
232
|
-
border-bottom: var(--border-width) solid var(--border-color); /* Consistent border */
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
.navbar__link {
|
|
236
|
-
color: var(--link-color);
|
|
237
|
-
text-decoration: none;
|
|
238
|
-
margin-right: var(--spacing-md);
|
|
239
|
-
font-weight: var(--font-weight-medium);
|
|
240
|
-
transition: color var(--transition-speed) ease;
|
|
129
|
+
a:hover, .link:hover {
|
|
130
|
+
color: var(--link-hover-color);
|
|
131
|
+
text-decoration: underline;
|
|
241
132
|
}
|
|
242
133
|
|
|
243
|
-
|
|
244
|
-
|
|
134
|
+
/* Accessibility - global */
|
|
135
|
+
a:focus, button:focus, .link:focus {
|
|
136
|
+
outline: 2px solid var(--focus-color);
|
|
137
|
+
outline-offset: 2px;
|
|
245
138
|
}
|
|
246
139
|
|
|
247
140
|
/* Utility Classes */
|
|
@@ -251,12 +144,6 @@ input:focus, textarea:focus, select:focus {
|
|
|
251
144
|
.d-flex { display: flex; }
|
|
252
145
|
.flex-column { flex-direction: column; }
|
|
253
146
|
|
|
254
|
-
/* Accessibility */
|
|
255
|
-
a:focus, button:focus {
|
|
256
|
-
outline: 2px solid var(--primary-color);
|
|
257
|
-
outline-offset: 2px;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
147
|
@media (prefers-reduced-motion: reduce) {
|
|
261
148
|
* {
|
|
262
149
|
animation: none;
|
|
@@ -277,4 +164,7 @@ a:focus, button:focus {
|
|
|
277
164
|
.navbar {
|
|
278
165
|
padding: var(--spacing-sm);
|
|
279
166
|
}
|
|
280
|
-
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|