create-atsdc-stack 1.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.
@@ -0,0 +1,141 @@
1
+ // OpenProps - CSS design tokens
2
+ @use 'open-props/style' as *;
3
+ @use 'open-props/normalize' as *;
4
+
5
+ @use './reset' as *;
6
+ @use './variables/globals' as *;
7
+ @use './variables/mixins' as *;
8
+
9
+ // Global styles
10
+ :root {
11
+ // CSS custom properties for runtime theming
12
+ --color-primary: #{$primary-color};
13
+ --color-primary-hover: #{$primary-hover};
14
+ --color-secondary: #{$secondary-color};
15
+ --color-accent: #{$accent-color};
16
+ --color-text-primary: #{$text-primary};
17
+ --color-text-secondary: #{$text-secondary};
18
+ --color-bg-primary: #{$bg-primary};
19
+ --color-bg-secondary: #{$bg-secondary};
20
+ }
21
+
22
+ html {
23
+ font-family: $font-family-base;
24
+ font-size: 16px;
25
+ color: $text-primary;
26
+ background-color: $bg-primary;
27
+ @include smooth-scroll;
28
+ }
29
+
30
+ body {
31
+ overflow-x: hidden;
32
+ }
33
+
34
+ // Typography
35
+ h1 {
36
+ @include heading-1;
37
+ margin-bottom: $spacing-large;
38
+ }
39
+
40
+ h2 {
41
+ @include heading-2;
42
+ margin-bottom: $spacing-medium;
43
+ }
44
+
45
+ h3 {
46
+ @include heading-3;
47
+ margin-bottom: $spacing-medium;
48
+ }
49
+
50
+ p {
51
+ margin-bottom: $spacing-medium;
52
+ line-height: $line-height-relaxed;
53
+ color: $text-secondary;
54
+ }
55
+
56
+ // Links
57
+ a {
58
+ color: $primary-color;
59
+ transition: color $transition-fast;
60
+
61
+ &:hover {
62
+ color: $primary-hover;
63
+ }
64
+
65
+ @include focus-visible;
66
+ }
67
+
68
+ // Utility classes
69
+ .container {
70
+ @include container;
71
+ }
72
+
73
+ .flex-center {
74
+ @include flex-center;
75
+ }
76
+
77
+ .flex-between {
78
+ @include flex-between;
79
+ }
80
+
81
+ .flex-column {
82
+ @include flex-column;
83
+ }
84
+
85
+ .card {
86
+ @include card;
87
+ }
88
+
89
+ .sr-only {
90
+ @include visually-hidden;
91
+ }
92
+
93
+ // Spacing utilities
94
+ .mt-small { margin-top: $spacing-small; }
95
+ .mt-medium { margin-top: $spacing-medium; }
96
+ .mt-large { margin-top: $spacing-large; }
97
+ .mt-extra-large { margin-top: $spacing-extra-large; }
98
+
99
+ .mb-small { margin-bottom: $spacing-small; }
100
+ .mb-medium { margin-bottom: $spacing-medium; }
101
+ .mb-large { margin-bottom: $spacing-large; }
102
+ .mb-extra-large { margin-bottom: $spacing-extra-large; }
103
+
104
+ .pt-small { padding-top: $spacing-small; }
105
+ .pt-medium { padding-top: $spacing-medium; }
106
+ .pt-large { padding-top: $spacing-large; }
107
+ .pt-extra-large { padding-top: $spacing-extra-large; }
108
+
109
+ .pb-small { padding-bottom: $spacing-small; }
110
+ .pb-medium { padding-bottom: $spacing-medium; }
111
+ .pb-large { padding-bottom: $spacing-large; }
112
+ .pb-extra-large { padding-bottom: $spacing-extra-large; }
113
+
114
+ // Text utilities
115
+ .text-center {
116
+ text-align: center;
117
+ }
118
+
119
+ .text-primary {
120
+ color: $text-primary;
121
+ }
122
+
123
+ .text-secondary {
124
+ color: $text-secondary;
125
+ }
126
+
127
+ .text-light {
128
+ color: $text-light;
129
+ }
130
+
131
+ .truncate {
132
+ @include truncate;
133
+ }
134
+
135
+ .line-clamp-2 {
136
+ @include line-clamp(2);
137
+ }
138
+
139
+ .line-clamp-3 {
140
+ @include line-clamp(3);
141
+ }
@@ -0,0 +1,80 @@
1
+ @use '../variables/globals' as *;
2
+ @use '../variables/mixins' as *;
3
+
4
+ // Home page styles
5
+ .home {
6
+ padding: $spacing-3x-large 0;
7
+
8
+ &__header {
9
+ text-align: center;
10
+ margin-bottom: $spacing-3x-large;
11
+ }
12
+
13
+ &__title {
14
+ @include heading-1;
15
+ margin-inline: auto;
16
+ margin-bottom: $spacing-medium;
17
+ background: linear-gradient(135deg, $primary-color 0%, $secondary-color 100%);
18
+ -webkit-background-clip: text;
19
+ -webkit-text-fill-color: transparent;
20
+ background-clip: text;
21
+ }
22
+
23
+ &__subtitle {
24
+ font-size: $font-size-large;
25
+ color: $text-secondary;
26
+ max-width: 600px;
27
+ margin: 0 auto;
28
+
29
+ @include desktop {
30
+ font-size: $font-size-extra-large;
31
+ }
32
+ }
33
+
34
+ &__features {
35
+ display: grid;
36
+ grid-template-columns: 1fr;
37
+ gap: $spacing-large;
38
+ margin-bottom: $spacing-3x-large;
39
+
40
+ @include tablet {
41
+ grid-template-columns: repeat(2, 1fr);
42
+ }
43
+
44
+ @include wide {
45
+ grid-template-columns: repeat(3, 1fr);
46
+ }
47
+ }
48
+
49
+ &__feature {
50
+ h3 {
51
+ font-size: $font-size-extra-large;
52
+ font-weight: $font-weight-semibold;
53
+ margin-bottom: $spacing-small;
54
+ color: $text-primary;
55
+ }
56
+
57
+ p {
58
+ font-size: $font-size-base;
59
+ color: $text-secondary;
60
+ margin-bottom: 0;
61
+ }
62
+ }
63
+
64
+ &__cta {
65
+ text-align: center;
66
+ padding: $spacing-3x-large 0;
67
+ border-top: 1px solid $border-color;
68
+
69
+ h2 {
70
+ @include heading-2;
71
+ margin-bottom: $spacing-extra-large;
72
+ }
73
+ }
74
+
75
+ &__cta-buttons {
76
+ @include flex-center;
77
+ gap: $spacing-large;
78
+ flex-wrap: wrap;
79
+ }
80
+ }
@@ -0,0 +1,83 @@
1
+ /* Modern CSS Reset */
2
+
3
+ *,
4
+ *::before,
5
+ *::after {
6
+ box-sizing: border-box;
7
+ margin: 0;
8
+ padding: 0;
9
+ }
10
+
11
+ html {
12
+ -webkit-text-size-adjust: 100%;
13
+ -moz-text-size-adjust: 100%;
14
+ text-size-adjust: 100%;
15
+ -webkit-font-smoothing: antialiased;
16
+ -moz-osx-font-smoothing: grayscale;
17
+ }
18
+
19
+ body {
20
+ min-height: 100vh;
21
+ text-rendering: optimizeSpeed;
22
+ line-height: 1.5;
23
+ }
24
+
25
+ h1,
26
+ h2,
27
+ h3,
28
+ h4,
29
+ h5,
30
+ h6 {
31
+ font-size: inherit;
32
+ font-weight: inherit;
33
+ }
34
+
35
+ ul,
36
+ ol {
37
+ list-style: none;
38
+ }
39
+
40
+ img,
41
+ picture,
42
+ video,
43
+ canvas,
44
+ svg {
45
+ display: block;
46
+ max-width: 100%;
47
+ height: auto;
48
+ }
49
+
50
+ input,
51
+ button,
52
+ textarea,
53
+ select {
54
+ font: inherit;
55
+ color: inherit;
56
+ }
57
+
58
+ button {
59
+ background: none;
60
+ border: none;
61
+ cursor: pointer;
62
+ }
63
+
64
+ a {
65
+ color: inherit;
66
+ text-decoration: none;
67
+ }
68
+
69
+ table {
70
+ border-collapse: collapse;
71
+ border-spacing: 0;
72
+ }
73
+
74
+ @media (prefers-reduced-motion: reduce) {
75
+ *,
76
+ *::before,
77
+ *::after {
78
+ animation-duration: 0.01ms !important;
79
+ animation-iteration-count: 1 !important;
80
+ transition-duration: 0.01ms !important;
81
+ scroll-behavior: auto !important;
82
+ }
83
+ }
@@ -0,0 +1,96 @@
1
+ // Color palette
2
+ $primary-color: #4f46e5;
3
+ $primary-hover: #4338ca;
4
+ $secondary-color: #06b6d4;
5
+ $accent-color: #f59e0b;
6
+
7
+ // Text colors
8
+ $text-primary: #1f2937;
9
+ $text-secondary: #6b7280;
10
+ $text-light: #9ca3af;
11
+ $text-inverse: #ffffff;
12
+
13
+ // Background colors
14
+ $bg-primary: #ffffff;
15
+ $bg-secondary: #f9fafb;
16
+ $bg-tertiary: #f3f4f6;
17
+ $bg-dark: #111827;
18
+
19
+ // Border colors
20
+ $border-color: #e5e7eb;
21
+ $border-focus: #4f46e5;
22
+
23
+ // Status colors
24
+ $success-color: #10b981;
25
+ $warning-color: #f59e0b;
26
+ $error-color: #ef4444;
27
+ $info-color: #3b82f6;
28
+
29
+ // Spacing scale (using OpenProps size tokens)
30
+ $spacing-extra-small: var(--size-2); // 0.5rem
31
+ $spacing-small: var(--size-3); // 1rem
32
+ $spacing-medium: var(--size-4); // 1.25rem
33
+ $spacing-large: var(--size-5); // 1.5rem
34
+ $spacing-extra-large: var(--size-6); // 1.75rem
35
+ $spacing-2x-large: var(--size-8); // 3rem
36
+ $spacing-3x-large: var(--size-10); // 4rem
37
+
38
+ // Typography
39
+ $font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
40
+ $font-family-mono: 'Fira Code', 'Consolas', 'Monaco', 'Courier New', monospace;
41
+
42
+ // Font sizes (using OpenProps font-size tokens)
43
+ $font-size-extra-small: var(--font-size-0); // 0.75rem
44
+ $font-size-small: var(--font-size-1); // 0.875rem
45
+ $font-size-base: var(--font-size-2); // 1rem
46
+ $font-size-large: var(--font-size-3); // 1.125rem
47
+ $font-size-extra-large: var(--font-size-4); // 1.25rem
48
+ $font-size-2x-large: var(--font-size-5); // 1.5rem
49
+ $font-size-3x-large: var(--font-size-6); // 1.875rem
50
+ $font-size-4x-large: var(--font-size-7); // 2.25rem
51
+
52
+ // Font weights (using OpenProps font-weight tokens)
53
+ $font-weight-normal: var(--font-weight-4); // 400
54
+ $font-weight-medium: var(--font-weight-5); // 500
55
+ $font-weight-semibold: var(--font-weight-6); // 600
56
+ $font-weight-bold: var(--font-weight-7); // 700
57
+
58
+ // Line heights (using OpenProps lineheight tokens)
59
+ $line-height-tight: var(--font-lineheight-0); // 1.25
60
+ $line-height-normal: var(--font-lineheight-3);// 1.5
61
+ $line-height-relaxed: var(--font-lineheight-4);// 1.75
62
+
63
+ // Border radius (using OpenProps radius tokens)
64
+ $radius-small: var(--radius-2); // 0.25rem
65
+ $radius-medium: var(--radius-3); // 0.5rem
66
+ $radius-large: var(--radius-4); // 1rem
67
+ $radius-extra-large: var(--radius-5); // 1.5rem
68
+ $radius-2x-large: var(--radius-6); // 2rem
69
+ $radius-full: var(--radius-round); // 9999px
70
+
71
+ // Shadows (using OpenProps shadow tokens)
72
+ $shadow-small: var(--shadow-2); // Subtle shadow
73
+ $shadow-medium: var(--shadow-3); // Medium shadow
74
+ $shadow-large: var(--shadow-4); // Large shadow
75
+ $shadow-extra-large: var(--shadow-6); // Extra large shadow
76
+
77
+ // Transitions (using OpenProps easing tokens)
78
+ $transition-fast: var(--ease-1); // Fast spring easing
79
+ $transition-base: var(--ease-3); // Standard easing
80
+ $transition-slow: var(--ease-4); // Slow easing
81
+
82
+ // Breakpoints
83
+ $breakpoint-tablet: 640px;
84
+ $breakpoint-desktop: 768px;
85
+ $breakpoint-wide: 1024px;
86
+ $breakpoint-extra-wide: 1280px;
87
+ $breakpoint-ultra-wide: 1536px;
88
+
89
+ // Z-index scale
90
+ $z-dropdown: 1000;
91
+ $z-sticky: 1020;
92
+ $z-fixed: 1030;
93
+ $z-modal-backdrop: 1040;
94
+ $z-modal: 1050;
95
+ $z-popover: 1060;
96
+ $z-tooltip: 1070;
@@ -0,0 +1,238 @@
1
+ @use './globals' as *;
2
+
3
+ // NOTE: All mixins below use variables from globals.scss which are now powered by OpenProps design tokens
4
+ // This provides consistent spacing, typography, shadows, and other design primitives throughout the app
5
+
6
+ // Responsive breakpoint mixins
7
+ @mixin tablet {
8
+ @media (min-width: $breakpoint-tablet) {
9
+ @content;
10
+ }
11
+ }
12
+
13
+ @mixin desktop {
14
+ @media (min-width: $breakpoint-desktop) {
15
+ @content;
16
+ }
17
+ }
18
+
19
+ @mixin wide {
20
+ @media (min-width: $breakpoint-wide) {
21
+ @content;
22
+ }
23
+ }
24
+
25
+ @mixin extra-wide {
26
+ @media (min-width: $breakpoint-extra-wide) {
27
+ @content;
28
+ }
29
+ }
30
+
31
+ @mixin ultra-wide {
32
+ @media (min-width: $breakpoint-ultra-wide) {
33
+ @content;
34
+ }
35
+ }
36
+
37
+ // Flexbox utilities
38
+ @mixin flex-center {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: center;
42
+ }
43
+
44
+ @mixin flex-between {
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: space-between;
48
+ }
49
+
50
+ @mixin flex-column {
51
+ display: flex;
52
+ flex-direction: column;
53
+ }
54
+
55
+ // Button mixin
56
+ @mixin button-base {
57
+ display: inline-flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ padding: $spacing-small $spacing-large;
61
+ font-family: $font-family-base;
62
+ font-size: $font-size-base;
63
+ font-weight: $font-weight-medium;
64
+ line-height: $line-height-normal;
65
+ border: none;
66
+ border-radius: $radius-medium;
67
+ cursor: pointer;
68
+ transition: all $transition-base;
69
+ text-decoration: none;
70
+ white-space: nowrap;
71
+
72
+ &:disabled {
73
+ opacity: 0.5;
74
+ cursor: not-allowed;
75
+ }
76
+
77
+ &:focus-visible {
78
+ outline: 2px solid $border-focus;
79
+ outline-offset: 2px;
80
+ }
81
+ }
82
+
83
+ @mixin button-primary {
84
+ @include button-base;
85
+ background-color: $primary-color;
86
+ color: $text-inverse;
87
+
88
+ &:hover:not(:disabled) {
89
+ background-color: $primary-hover;
90
+ }
91
+ }
92
+
93
+ @mixin button-secondary {
94
+ @include button-base;
95
+ background-color: transparent;
96
+ color: $primary-color;
97
+ border: 1px solid $border-color;
98
+
99
+ &:hover:not(:disabled) {
100
+ background-color: $bg-secondary;
101
+ }
102
+ }
103
+
104
+ // Card mixin
105
+ @mixin card {
106
+ background-color: $bg-primary;
107
+ border: 1px solid $border-color;
108
+ border-radius: $radius-large;
109
+ padding: $spacing-extra-large;
110
+ box-shadow: $shadow-small;
111
+ transition: box-shadow $transition-base;
112
+
113
+ &:hover {
114
+ box-shadow: $shadow-medium;
115
+ }
116
+ }
117
+
118
+ // Input mixin
119
+ @mixin input-base {
120
+ width: 100%;
121
+ padding: $spacing-small $spacing-medium;
122
+ font-family: $font-family-base;
123
+ font-size: $font-size-base;
124
+ line-height: $line-height-normal;
125
+ color: $text-primary;
126
+ background-color: $bg-primary;
127
+ border: 1px solid $border-color;
128
+ border-radius: $radius-medium;
129
+ transition: border-color $transition-fast;
130
+
131
+ &:focus {
132
+ outline: none;
133
+ border-color: $border-focus;
134
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
135
+ }
136
+
137
+ &::placeholder {
138
+ color: $text-light;
139
+ }
140
+
141
+ &:disabled {
142
+ background-color: $bg-tertiary;
143
+ cursor: not-allowed;
144
+ }
145
+ }
146
+
147
+ // Container mixin
148
+ @mixin container {
149
+ width: 100%;
150
+ max-width: $breakpoint-extra-wide;
151
+ margin-left: auto;
152
+ margin-right: auto;
153
+ padding-left: $spacing-medium;
154
+ padding-right: $spacing-medium;
155
+
156
+ @include wide {
157
+ padding-left: $spacing-extra-large;
158
+ padding-right: $spacing-extra-large;
159
+ }
160
+ }
161
+
162
+ // Typography mixins
163
+ @mixin heading-1 {
164
+ font-size: $font-size-3x-large;
165
+ font-weight: $font-weight-bold;
166
+ line-height: $line-height-tight;
167
+ color: $text-primary;
168
+
169
+ @include desktop {
170
+ font-size: $font-size-4x-large;
171
+ }
172
+ }
173
+
174
+ @mixin heading-2 {
175
+ font-size: $font-size-2x-large;
176
+ font-weight: $font-weight-bold;
177
+ line-height: $line-height-tight;
178
+ color: $text-primary;
179
+
180
+ @include desktop {
181
+ font-size: $font-size-3x-large;
182
+ }
183
+ }
184
+
185
+ @mixin heading-3 {
186
+ font-size: $font-size-extra-large;
187
+ font-weight: $font-weight-semibold;
188
+ line-height: $line-height-tight;
189
+ color: $text-primary;
190
+
191
+ @include desktop {
192
+ font-size: $font-size-2x-large;
193
+ }
194
+ }
195
+
196
+ // Truncate text
197
+ @mixin truncate {
198
+ overflow: hidden;
199
+ text-overflow: ellipsis;
200
+ white-space: nowrap;
201
+ }
202
+
203
+ // Multi-line truncate
204
+ @mixin line-clamp($lines: 2) {
205
+ display: -webkit-box;
206
+ -webkit-line-clamp: $lines;
207
+ -webkit-box-orient: vertical;
208
+ overflow: hidden;
209
+ }
210
+
211
+ // Visually hidden (accessible)
212
+ @mixin visually-hidden {
213
+ position: absolute;
214
+ width: 1px;
215
+ height: 1px;
216
+ padding: 0;
217
+ margin: -1px;
218
+ overflow: hidden;
219
+ clip: rect(0, 0, 0, 0);
220
+ white-space: nowrap;
221
+ border-width: 0;
222
+ }
223
+
224
+ // Focus visible outline
225
+ @mixin focus-visible {
226
+ &:focus-visible {
227
+ outline: 2px solid $border-focus;
228
+ outline-offset: 2px;
229
+ }
230
+ }
231
+
232
+ // Smooth scrolling
233
+ @mixin smooth-scroll {
234
+ scroll-behavior: smooth;
235
+ @supports(-webkit-overflow-scrolling: touch) {
236
+ -webkit-overflow-scrolling: touch;
237
+ }
238
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict",
3
+ "compilerOptions": {
4
+ "target": "ES2022",
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "lib": [
8
+ "ES2022",
9
+ "DOM",
10
+ "DOM.Iterable"
11
+ ],
12
+ "jsx": "react-jsx",
13
+ "jsxImportSource": "react",
14
+ "strict": true,
15
+ "esModuleInterop": true,
16
+ "skipLibCheck": true,
17
+ "forceConsistentCasingInFileNames": true,
18
+ "resolveJsonModule": true,
19
+ "isolatedModules": true,
20
+ "allowJs": true,
21
+ "baseUrl": ".",
22
+ "paths": {
23
+ "@/*": [
24
+ "src/*"
25
+ ],
26
+ "@db/*": [
27
+ "src/db/*"
28
+ ],
29
+ "@styles/*": [
30
+ "src/styles/*"
31
+ ],
32
+ "@components/*": [
33
+ "src/components/*"
34
+ ]
35
+ }
36
+ },
37
+ "include": [
38
+ "src/**/*",
39
+ ".astro/**/*"
40
+ ],
41
+ "exclude": [
42
+ "node_modules",
43
+ "dist"
44
+ ]
45
+ }