@prosophia/lab-techy 0.0.2 → 0.0.4

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.
@@ -0,0 +1,147 @@
1
+ .footer {
2
+ border-top: 1px solid var(--slate-200);
3
+ background-color: var(--white);
4
+ padding: 3rem 0;
5
+ }
6
+
7
+ .container {
8
+ max-width: var(--container-max);
9
+ margin: 0 auto;
10
+ padding: 0 1rem;
11
+ }
12
+
13
+ @media (min-width: 640px) {
14
+ .container {
15
+ padding: 0 1.5rem;
16
+ }
17
+ }
18
+
19
+ @media (min-width: 1024px) {
20
+ .container {
21
+ padding: 0 2rem;
22
+ }
23
+ }
24
+
25
+ .grid {
26
+ display: grid;
27
+ gap: 2rem;
28
+ }
29
+
30
+ @media (min-width: 768px) {
31
+ .grid {
32
+ grid-template-columns: 2fr 1fr 1fr;
33
+ gap: 3rem;
34
+ }
35
+ }
36
+
37
+ .brandSection {
38
+ grid-column: span 1;
39
+ }
40
+
41
+ @media (min-width: 768px) {
42
+ .brandSection {
43
+ grid-column: span 1;
44
+ }
45
+ }
46
+
47
+ .logo {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 0.75rem;
51
+ }
52
+
53
+ .logoIcon {
54
+ display: flex;
55
+ width: 2rem;
56
+ height: 2rem;
57
+ align-items: center;
58
+ justify-content: center;
59
+ border-radius: var(--radius-sm);
60
+ background-color: var(--primary);
61
+ color: var(--white);
62
+ }
63
+
64
+ .logoIcon span {
65
+ font-size: 20px;
66
+ }
67
+
68
+ .logoText {
69
+ font-size: 1.25rem;
70
+ font-weight: 700;
71
+ color: var(--slate-900);
72
+ }
73
+
74
+ .description {
75
+ margin-top: 1rem;
76
+ max-width: 24rem;
77
+ font-size: 0.875rem;
78
+ color: var(--slate-600);
79
+ line-height: 1.6;
80
+ }
81
+
82
+ .socialLinks {
83
+ display: flex;
84
+ gap: 1rem;
85
+ margin-top: 1.5rem;
86
+ }
87
+
88
+ .socialLink {
89
+ color: var(--slate-400);
90
+ transition: color var(--timing-quick) var(--ease-out-expo);
91
+ }
92
+
93
+ .socialLink:hover {
94
+ color: var(--primary);
95
+ }
96
+
97
+ .socialIcon {
98
+ width: 1.25rem;
99
+ height: 1.25rem;
100
+ }
101
+
102
+ .linksSection {
103
+ display: flex;
104
+ flex-direction: column;
105
+ }
106
+
107
+ .linksSectionTitle {
108
+ font-size: 0.875rem;
109
+ font-weight: 600;
110
+ text-transform: uppercase;
111
+ color: var(--slate-900);
112
+ margin-bottom: 1rem;
113
+ }
114
+
115
+ .linksList {
116
+ list-style: none;
117
+ display: flex;
118
+ flex-direction: column;
119
+ gap: 0.75rem;
120
+ }
121
+
122
+ .link {
123
+ font-size: 0.875rem;
124
+ color: var(--slate-600);
125
+ transition: color var(--timing-quick) var(--ease-out-expo);
126
+ }
127
+
128
+ .link:hover {
129
+ color: var(--primary);
130
+ }
131
+
132
+ .bottom {
133
+ margin-top: 3rem;
134
+ padding-top: 2rem;
135
+ border-top: 1px solid var(--slate-200);
136
+ }
137
+
138
+ .copyright {
139
+ text-align: center;
140
+ font-size: 0.875rem;
141
+ color: var(--slate-500);
142
+ }
143
+
144
+ /* Dark mode styles */
145
+ [data-theme="dark"] .logoIcon {
146
+ color: var(--slate-900);
147
+ }
@@ -0,0 +1,147 @@
1
+ .header {
2
+ position: sticky;
3
+ top: 0;
4
+ z-index: 50;
5
+ width: 100%;
6
+ border-bottom: 1px solid var(--slate-200);
7
+ background-color: rgba(246, 246, 248, 0.8);
8
+ backdrop-filter: blur(12px);
9
+ }
10
+
11
+ .container {
12
+ max-width: var(--container-max);
13
+ margin: 0 auto;
14
+ display: flex;
15
+ height: 4rem;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ padding: 0 1rem;
19
+ }
20
+
21
+ @media (min-width: 640px) {
22
+ .container {
23
+ padding: 0 1.5rem;
24
+ }
25
+ }
26
+
27
+ @media (min-width: 1024px) {
28
+ .container {
29
+ padding: 0 2rem;
30
+ }
31
+ }
32
+
33
+ .logo {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 1rem;
37
+ text-decoration: none;
38
+ }
39
+
40
+ .logoIcon {
41
+ display: flex;
42
+ width: 2rem;
43
+ height: 2rem;
44
+ align-items: center;
45
+ justify-content: center;
46
+ border-radius: var(--radius-sm);
47
+ background-color: var(--primary);
48
+ color: var(--white);
49
+ }
50
+
51
+ .logoIcon span {
52
+ font-size: 20px;
53
+ }
54
+
55
+ .logoText {
56
+ font-size: 1.125rem;
57
+ font-weight: 700;
58
+ letter-spacing: -0.025em;
59
+ color: var(--slate-900);
60
+ }
61
+
62
+ .nav {
63
+ display: none;
64
+ flex: 1;
65
+ align-items: center;
66
+ justify-content: flex-end;
67
+ gap: 2rem;
68
+ }
69
+
70
+ @media (min-width: 768px) {
71
+ .nav {
72
+ display: flex;
73
+ }
74
+ }
75
+
76
+ .navLinks {
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 1.5rem;
80
+ }
81
+
82
+ .navLink {
83
+ font-size: 0.875rem;
84
+ font-weight: 500;
85
+ color: var(--slate-600);
86
+ transition: color var(--timing-quick) var(--ease-out-expo);
87
+ }
88
+
89
+ .navLink:hover {
90
+ color: var(--primary);
91
+ }
92
+
93
+ .navLinkActive {
94
+ color: var(--primary);
95
+ font-weight: 600;
96
+ }
97
+
98
+ .ctaButton {
99
+ display: inline-flex;
100
+ height: 2.25rem;
101
+ align-items: center;
102
+ justify-content: center;
103
+ border-radius: var(--radius-lg);
104
+ background-color: var(--primary);
105
+ padding: 0 1rem;
106
+ font-size: 0.875rem;
107
+ font-weight: 700;
108
+ color: var(--white);
109
+ box-shadow: var(--shadow-sm);
110
+ transition: background-color var(--timing-quick) var(--ease-out-expo);
111
+ }
112
+
113
+ .ctaButton:hover {
114
+ background-color: var(--primary-dark);
115
+ }
116
+
117
+ .mobileActions {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: 0.5rem;
121
+ }
122
+
123
+ @media (min-width: 768px) {
124
+ .mobileActions {
125
+ display: none;
126
+ }
127
+ }
128
+
129
+ .mobileMenuBtn {
130
+ display: block;
131
+ padding: 0.5rem;
132
+ color: var(--slate-600);
133
+ }
134
+
135
+ /* Dark mode styles */
136
+ [data-theme="dark"] .header {
137
+ background-color: rgba(15, 23, 42, 0.9);
138
+ border-bottom-color: var(--slate-200);
139
+ }
140
+
141
+ [data-theme="dark"] .logoIcon {
142
+ color: var(--slate-900);
143
+ }
144
+
145
+ [data-theme="dark"] .ctaButton {
146
+ color: var(--slate-900);
147
+ }
@@ -0,0 +1,34 @@
1
+ .toggle {
2
+ display: flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ width: 2.5rem;
6
+ height: 2.5rem;
7
+ border-radius: var(--radius-full);
8
+ background-color: var(--slate-100);
9
+ color: var(--slate-600);
10
+ border: 1px solid var(--slate-200);
11
+ cursor: pointer;
12
+ transition: all var(--timing-quick) var(--ease-out-expo);
13
+ }
14
+
15
+ .toggle:hover {
16
+ background-color: var(--slate-200);
17
+ color: var(--primary);
18
+ }
19
+
20
+ .toggle span {
21
+ font-size: 1.25rem;
22
+ }
23
+
24
+ /* Dark mode styles */
25
+ [data-theme="dark"] .toggle {
26
+ background-color: var(--slate-800);
27
+ border-color: var(--slate-700);
28
+ color: var(--slate-300);
29
+ }
30
+
31
+ [data-theme="dark"] .toggle:hover {
32
+ background-color: var(--slate-700);
33
+ color: var(--primary);
34
+ }
@@ -0,0 +1,26 @@
1
+ interface SiteSettings {
2
+ labName?: string;
3
+ labNameAccent?: string;
4
+ labNameDescription?: string;
5
+ footerText?: string;
6
+ showPrivacyPolicy?: boolean;
7
+ privacyPolicyUrl?: string;
8
+ showTerms?: boolean;
9
+ termsUrl?: string;
10
+ }
11
+ interface SiteConfig {
12
+ title: string;
13
+ description: string;
14
+ url?: string;
15
+ }
16
+ interface ThemeConfig {
17
+ primaryColor?: string;
18
+ accentColor?: string;
19
+ }
20
+ interface ProsophiaConfig {
21
+ template?: string;
22
+ site: SiteConfig;
23
+ theme?: ThemeConfig;
24
+ }
25
+
26
+ export type { ProsophiaConfig as P, SiteSettings as S, ThemeConfig as T, SiteConfig as a };
@@ -0,0 +1,26 @@
1
+ interface SiteSettings {
2
+ labName?: string;
3
+ labNameAccent?: string;
4
+ labNameDescription?: string;
5
+ footerText?: string;
6
+ showPrivacyPolicy?: boolean;
7
+ privacyPolicyUrl?: string;
8
+ showTerms?: boolean;
9
+ termsUrl?: string;
10
+ }
11
+ interface SiteConfig {
12
+ title: string;
13
+ description: string;
14
+ url?: string;
15
+ }
16
+ interface ThemeConfig {
17
+ primaryColor?: string;
18
+ accentColor?: string;
19
+ }
20
+ interface ProsophiaConfig {
21
+ template?: string;
22
+ site: SiteConfig;
23
+ theme?: ThemeConfig;
24
+ }
25
+
26
+ export type { ProsophiaConfig as P, SiteSettings as S, ThemeConfig as T, SiteConfig as a };
package/dist/index.css ADDED
@@ -0,0 +1,281 @@
1
+ /* src/components/Footer.module.css */
2
+ .footer {
3
+ border-top: 1px solid var(--slate-200);
4
+ background-color: var(--white);
5
+ padding: 3rem 0;
6
+ }
7
+ .container {
8
+ max-width: var(--container-max);
9
+ margin: 0 auto;
10
+ padding: 0 1rem;
11
+ }
12
+ @media (min-width: 640px) {
13
+ .container {
14
+ padding: 0 1.5rem;
15
+ }
16
+ }
17
+ @media (min-width: 1024px) {
18
+ .container {
19
+ padding: 0 2rem;
20
+ }
21
+ }
22
+ .grid {
23
+ display: grid;
24
+ gap: 2rem;
25
+ }
26
+ @media (min-width: 768px) {
27
+ .grid {
28
+ grid-template-columns: 2fr 1fr 1fr;
29
+ gap: 3rem;
30
+ }
31
+ }
32
+ .brandSection {
33
+ grid-column: span 1;
34
+ }
35
+ @media (min-width: 768px) {
36
+ .brandSection {
37
+ grid-column: span 1;
38
+ }
39
+ }
40
+ .logo {
41
+ display: flex;
42
+ align-items: center;
43
+ gap: 0.75rem;
44
+ }
45
+ .logoIcon {
46
+ display: flex;
47
+ width: 2rem;
48
+ height: 2rem;
49
+ align-items: center;
50
+ justify-content: center;
51
+ border-radius: var(--radius-sm);
52
+ background-color: var(--primary);
53
+ color: var(--white);
54
+ }
55
+ .logoIcon span {
56
+ font-size: 20px;
57
+ }
58
+ .logoText {
59
+ font-size: 1.25rem;
60
+ font-weight: 700;
61
+ color: var(--slate-900);
62
+ }
63
+ .description {
64
+ margin-top: 1rem;
65
+ max-width: 24rem;
66
+ font-size: 0.875rem;
67
+ color: var(--slate-600);
68
+ line-height: 1.6;
69
+ }
70
+ .socialLinks {
71
+ display: flex;
72
+ gap: 1rem;
73
+ margin-top: 1.5rem;
74
+ }
75
+ .socialLink {
76
+ color: var(--slate-400);
77
+ transition: color var(--timing-quick) var(--ease-out-expo);
78
+ }
79
+ .socialLink:hover {
80
+ color: var(--primary);
81
+ }
82
+ .socialIcon {
83
+ width: 1.25rem;
84
+ height: 1.25rem;
85
+ }
86
+ .linksSection {
87
+ display: flex;
88
+ flex-direction: column;
89
+ }
90
+ .linksSectionTitle {
91
+ font-size: 0.875rem;
92
+ font-weight: 600;
93
+ text-transform: uppercase;
94
+ color: var(--slate-900);
95
+ margin-bottom: 1rem;
96
+ }
97
+ .linksList {
98
+ list-style: none;
99
+ display: flex;
100
+ flex-direction: column;
101
+ gap: 0.75rem;
102
+ }
103
+ .link {
104
+ font-size: 0.875rem;
105
+ color: var(--slate-600);
106
+ transition: color var(--timing-quick) var(--ease-out-expo);
107
+ }
108
+ .link:hover {
109
+ color: var(--primary);
110
+ }
111
+ .bottom {
112
+ margin-top: 3rem;
113
+ padding-top: 2rem;
114
+ border-top: 1px solid var(--slate-200);
115
+ }
116
+ .copyright {
117
+ text-align: center;
118
+ font-size: 0.875rem;
119
+ color: var(--slate-500);
120
+ }
121
+ [data-theme=dark] .logoIcon {
122
+ color: var(--slate-900);
123
+ }
124
+
125
+ /* src/components/Header.module.css */
126
+ .header {
127
+ position: sticky;
128
+ top: 0;
129
+ z-index: 50;
130
+ width: 100%;
131
+ border-bottom: 1px solid var(--slate-200);
132
+ background-color: rgba(246, 246, 248, 0.8);
133
+ backdrop-filter: blur(12px);
134
+ }
135
+ .container {
136
+ max-width: var(--container-max);
137
+ margin: 0 auto;
138
+ display: flex;
139
+ height: 4rem;
140
+ align-items: center;
141
+ justify-content: space-between;
142
+ padding: 0 1rem;
143
+ }
144
+ @media (min-width: 640px) {
145
+ .container {
146
+ padding: 0 1.5rem;
147
+ }
148
+ }
149
+ @media (min-width: 1024px) {
150
+ .container {
151
+ padding: 0 2rem;
152
+ }
153
+ }
154
+ .logo {
155
+ display: flex;
156
+ align-items: center;
157
+ gap: 1rem;
158
+ text-decoration: none;
159
+ }
160
+ .logoIcon {
161
+ display: flex;
162
+ width: 2rem;
163
+ height: 2rem;
164
+ align-items: center;
165
+ justify-content: center;
166
+ border-radius: var(--radius-sm);
167
+ background-color: var(--primary);
168
+ color: var(--white);
169
+ }
170
+ .logoIcon span {
171
+ font-size: 20px;
172
+ }
173
+ .logoText {
174
+ font-size: 1.125rem;
175
+ font-weight: 700;
176
+ letter-spacing: -0.025em;
177
+ color: var(--slate-900);
178
+ }
179
+ .nav {
180
+ display: none;
181
+ flex: 1;
182
+ align-items: center;
183
+ justify-content: flex-end;
184
+ gap: 2rem;
185
+ }
186
+ @media (min-width: 768px) {
187
+ .nav {
188
+ display: flex;
189
+ }
190
+ }
191
+ .navLinks {
192
+ display: flex;
193
+ align-items: center;
194
+ gap: 1.5rem;
195
+ }
196
+ .navLink {
197
+ font-size: 0.875rem;
198
+ font-weight: 500;
199
+ color: var(--slate-600);
200
+ transition: color var(--timing-quick) var(--ease-out-expo);
201
+ }
202
+ .navLink:hover {
203
+ color: var(--primary);
204
+ }
205
+ .navLinkActive {
206
+ color: var(--primary);
207
+ font-weight: 600;
208
+ }
209
+ .ctaButton {
210
+ display: inline-flex;
211
+ height: 2.25rem;
212
+ align-items: center;
213
+ justify-content: center;
214
+ border-radius: var(--radius-lg);
215
+ background-color: var(--primary);
216
+ padding: 0 1rem;
217
+ font-size: 0.875rem;
218
+ font-weight: 700;
219
+ color: var(--white);
220
+ box-shadow: var(--shadow-sm);
221
+ transition: background-color var(--timing-quick) var(--ease-out-expo);
222
+ }
223
+ .ctaButton:hover {
224
+ background-color: var(--primary-dark);
225
+ }
226
+ .mobileActions {
227
+ display: flex;
228
+ align-items: center;
229
+ gap: 0.5rem;
230
+ }
231
+ @media (min-width: 768px) {
232
+ .mobileActions {
233
+ display: none;
234
+ }
235
+ }
236
+ .mobileMenuBtn {
237
+ display: block;
238
+ padding: 0.5rem;
239
+ color: var(--slate-600);
240
+ }
241
+ [data-theme=dark] .header {
242
+ background-color: rgba(15, 23, 42, 0.9);
243
+ border-bottom-color: var(--slate-200);
244
+ }
245
+ [data-theme=dark] .logoIcon {
246
+ color: var(--slate-900);
247
+ }
248
+ [data-theme=dark] .ctaButton {
249
+ color: var(--slate-900);
250
+ }
251
+
252
+ /* src/components/ThemeToggle.module.css */
253
+ .toggle {
254
+ display: flex;
255
+ align-items: center;
256
+ justify-content: center;
257
+ width: 2.5rem;
258
+ height: 2.5rem;
259
+ border-radius: var(--radius-full);
260
+ background-color: var(--slate-100);
261
+ color: var(--slate-600);
262
+ border: 1px solid var(--slate-200);
263
+ cursor: pointer;
264
+ transition: all var(--timing-quick) var(--ease-out-expo);
265
+ }
266
+ .toggle:hover {
267
+ background-color: var(--slate-200);
268
+ color: var(--primary);
269
+ }
270
+ .toggle span {
271
+ font-size: 1.25rem;
272
+ }
273
+ [data-theme=dark] .toggle {
274
+ background-color: var(--slate-800);
275
+ border-color: var(--slate-700);
276
+ color: var(--slate-300);
277
+ }
278
+ [data-theme=dark] .toggle:hover {
279
+ background-color: var(--slate-700);
280
+ color: var(--primary);
281
+ }