@vojtaholik/create-static-kit 1.0.7 → 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.
- package/package.json +6 -37
- package/src/index.ts +41 -0
- package/template/blocks/feature-grid.block.html +28 -0
- package/template/blocks/feature-grid.block.ts +32 -0
- package/template/blocks/gen/feature-grid.render.ts +92 -0
- package/template/blocks/gen/hero.render.ts +79 -0
- package/template/blocks/gen/index.ts +4 -0
- package/template/blocks/gen/latest-posts.render.ts +114 -0
- package/template/blocks/gen/text-section.render.ts +69 -0
- package/template/blocks/hero.block.html +31 -0
- package/template/blocks/hero.block.ts +40 -0
- package/template/blocks/index.ts +31 -0
- package/template/blocks/latest-posts.block.html +38 -0
- package/template/blocks/latest-posts.block.ts +45 -0
- package/template/blocks/text-section.block.html +18 -0
- package/template/blocks/text-section.block.ts +25 -0
- package/template/cms-blocks.ts +197 -0
- package/template/package.json +21 -0
- package/template/public/css/styles.css +589 -0
- package/template/public/js/dev-overlay.js +366 -0
- package/template/public/js/index.js +35 -0
- package/template/public/sprite.svg +6 -0
- package/template/public/svg/magic-wand.svg +4 -0
- package/template/site/pages/about.page.ts +91 -0
- package/template/site/pages/base.html +38 -0
- package/template/site/pages/index.page.ts +107 -0
- package/template/site/pages/index.ts +16 -0
- package/template/static-kit.config.ts +10 -0
- package/template/tsconfig.json +23 -0
- package/bin/create-static-kit.js +0 -3
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -488
- package/templates/default/.cursor/rules/configuration.mdc +0 -20
- package/templates/default/.cursor/rules/figma-integration.mdc +0 -22
- package/templates/default/.cursor/rules/html-components.mdc +0 -24
- package/templates/default/.cursor/rules/html-pages.mdc +0 -22
- package/templates/default/.cursor/rules/inline-tailwind-to-bem-with-apply-directive.mdc +0 -218
- package/templates/default/.cursor/rules/project-overview.mdc +0 -30
- package/templates/default/.cursor/rules/public-assets.mdc +0 -22
- package/templates/default/.cursor/rules/scss-styles.mdc +0 -22
- package/templates/default/.cursor/rules/svg-icons.mdc +0 -22
- package/templates/default/.cursor/rules/typescript-js.mdc +0 -23
- package/templates/default/public/favicon.ico +0 -1
- package/templates/default/src/components/button.html +0 -1
- package/templates/default/src/components/feature-card.html +0 -8
- package/templates/default/src/components/footer.html +0 -5
- package/templates/default/src/components/navigation.html +0 -11
- package/templates/default/src/icons/ui/star.svg +0 -3
- package/templates/default/src/js/index.ts +0 -28
- package/templates/default/src/pages/about.html +0 -24
- package/templates/default/src/pages/index.html +0 -23
- package/templates/default/src/styles/main.scss +0 -210
- package/templates/default/tsconfig.json +0 -19
- package/templates/minimal/.cursor/rules/configuration.mdc +0 -20
- package/templates/minimal/.cursor/rules/figma-integration.mdc +0 -22
- package/templates/minimal/.cursor/rules/html-components.mdc +0 -24
- package/templates/minimal/.cursor/rules/html-pages.mdc +0 -22
- package/templates/minimal/.cursor/rules/inline-tailwind-to-bem-with-apply-directive.mdc +0 -218
- package/templates/minimal/.cursor/rules/project-overview.mdc +0 -30
- package/templates/minimal/.cursor/rules/public-assets.mdc +0 -22
- package/templates/minimal/.cursor/rules/scss-styles.mdc +0 -22
- package/templates/minimal/.cursor/rules/svg-icons.mdc +0 -22
- package/templates/minimal/.cursor/rules/typescript-js.mdc +0 -23
- package/templates/minimal/public/favicon.ico +0 -1
- package/templates/minimal/src/components/footer.html +0 -3
- package/templates/minimal/src/components/header.html +0 -6
- package/templates/minimal/src/js/index.ts +0 -9
- package/templates/minimal/src/pages/index.html +0 -15
- package/templates/minimal/src/styles/main.scss +0 -77
- package/templates/minimal/tsconfig.json +0 -19
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Convert inline Tailwind CSS utility classes to BEM-compliant @apply directives in CSS files
|
|
3
|
-
globs: ["**/*"]
|
|
4
|
-
alwaysApply: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Tailwind CSS v4 @apply Conversion Specialist
|
|
8
|
-
|
|
9
|
-
You are a Tailwind CSS v4 expert focused on converting inline utility classes to `@apply` directives in CSS files.
|
|
10
|
-
|
|
11
|
-
## Core Rules
|
|
12
|
-
|
|
13
|
-
### Tailwind CSS v4 Context
|
|
14
|
-
|
|
15
|
-
- Always use `@import "tailwindcss";` syntax (not the old v3 @tailwind directives)
|
|
16
|
-
- Understand that v4 uses CSS-first configuration and native CSS features
|
|
17
|
-
- Recognize that @apply works the same but the import syntax has changed
|
|
18
|
-
|
|
19
|
-
### @apply Conversion Guidelines
|
|
20
|
-
|
|
21
|
-
#### MANDATORY CONVERSION RULE
|
|
22
|
-
|
|
23
|
-
**ALWAYS convert inline utility classes to @apply when asked.** No exceptions, no questions, no debate about whether it's "worth it". If the user asks for conversion, you fucking do it.
|
|
24
|
-
|
|
25
|
-
#### BEM Naming Convention
|
|
26
|
-
|
|
27
|
-
**ALWAYS use BEM (Block Element Modifier) methodology for class names:**
|
|
28
|
-
|
|
29
|
-
- **Block**: `.card`, `.button`, `.navbar`
|
|
30
|
-
- **Element**: `.card__title`, `.card__content`, `.button__icon`
|
|
31
|
-
- **Modifier**: `.card--primary`, `.button--large`, `.navbar--mobile`
|
|
32
|
-
|
|
33
|
-
#### BEM Examples
|
|
34
|
-
|
|
35
|
-
```css
|
|
36
|
-
/* Block */
|
|
37
|
-
.card {
|
|
38
|
-
@apply bg-white rounded-lg shadow-md p-6;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/* Element */
|
|
42
|
-
.card__header {
|
|
43
|
-
@apply border-b border-gray-200 pb-4 mb-4;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.card__title {
|
|
47
|
-
@apply text-xl font-semibold text-gray-900;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.card__content {
|
|
51
|
-
@apply text-gray-600 leading-relaxed;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/* Modifier */
|
|
55
|
-
.card--primary {
|
|
56
|
-
@apply border-l-4 border-blue-500;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.card--error {
|
|
60
|
-
@apply border-l-4 border-red-500 bg-red-50;
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
#### Conversion Rules
|
|
65
|
-
|
|
66
|
-
- **User request = immediate conversion** (no questioning)
|
|
67
|
-
- Convert ANY utility classes when user requests it
|
|
68
|
-
- Create BEM-compliant class names that describe component structure
|
|
69
|
-
- Group related properties logically in @apply statements
|
|
70
|
-
- Preserve responsive/state variants when complex
|
|
71
|
-
|
|
72
|
-
#### Conversion Process
|
|
73
|
-
|
|
74
|
-
1. **Identify the component structure**: Determine Block, Elements, and Modifiers
|
|
75
|
-
2. **Create BEM class names**: Use semantic names that describe purpose and hierarchy
|
|
76
|
-
3. **Group logically**: Organize related properties together in @apply statements
|
|
77
|
-
4. **Preserve responsive/state variants**: Keep complex variants inline if needed
|
|
78
|
-
|
|
79
|
-
#### Best Practices
|
|
80
|
-
|
|
81
|
-
```css
|
|
82
|
-
/* ✅ Good: BEM naming with logical grouping */
|
|
83
|
-
.card {
|
|
84
|
-
@apply bg-white rounded-lg shadow-md;
|
|
85
|
-
@apply p-6 border border-gray-200;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.card--primary {
|
|
89
|
-
@apply border-l-4 border-blue-500;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.button {
|
|
93
|
-
@apply text-white font-medium px-4 py-2 rounded-md;
|
|
94
|
-
@apply transition-colors duration-200;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.button--primary {
|
|
98
|
-
@apply bg-blue-500 hover:bg-blue-600;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.button__icon {
|
|
102
|
-
@apply mr-2 w-4 h-4;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/* ❌ Bad: Non-BEM naming */
|
|
106
|
-
.blue-rounded {
|
|
107
|
-
@apply bg-blue-500 rounded-md;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/* ❌ Bad: Non-semantic naming */
|
|
111
|
-
.margin-top {
|
|
112
|
-
@apply mt-4;
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
#### Handling Complex Cases
|
|
117
|
-
|
|
118
|
-
- **Responsive variants**: Keep complex responsive logic inline, abstract base styles
|
|
119
|
-
- **State variants**: Group base styles in @apply, keep interactive states inline when complex
|
|
120
|
-
- **Component variants**: Create separate classes for different component states
|
|
121
|
-
|
|
122
|
-
#### File Organization
|
|
123
|
-
|
|
124
|
-
- Place @apply styles in the same file as the `@import "tailwindcss";`
|
|
125
|
-
- Group related component styles together
|
|
126
|
-
- Use comments to organize sections
|
|
127
|
-
- Follow this structure:
|
|
128
|
-
|
|
129
|
-
```css
|
|
130
|
-
@import "tailwindcss";
|
|
131
|
-
|
|
132
|
-
/* Base component styles */
|
|
133
|
-
.card {
|
|
134
|
-
/* ... */
|
|
135
|
-
}
|
|
136
|
-
.button {
|
|
137
|
-
/* ... */
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/* Layout components */
|
|
141
|
-
.container {
|
|
142
|
-
/* ... */
|
|
143
|
-
}
|
|
144
|
-
.grid-layout {
|
|
145
|
-
/* ... */
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/* Utility combinations */
|
|
149
|
-
.form-input {
|
|
150
|
-
/* ... */
|
|
151
|
-
}
|
|
152
|
-
.error-text {
|
|
153
|
-
/* ... */
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Conversion Examples
|
|
158
|
-
|
|
159
|
-
#### Before (inline classes):
|
|
160
|
-
|
|
161
|
-
```html
|
|
162
|
-
<div
|
|
163
|
-
class="bg-white rounded-lg shadow-md p-6 border border-gray-200 hover:shadow-lg transition-shadow"
|
|
164
|
-
>
|
|
165
|
-
<h2 class="text-xl font-semibold text-gray-900 mb-4">Card Title</h2>
|
|
166
|
-
<p class="text-gray-600 leading-relaxed">Card content</p>
|
|
167
|
-
</div>
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
#### After (with @apply and BEM):
|
|
171
|
-
|
|
172
|
-
```css
|
|
173
|
-
.card {
|
|
174
|
-
@apply bg-white rounded-lg shadow-md p-6 border border-gray-200;
|
|
175
|
-
@apply hover:shadow-lg transition-shadow;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.card__title {
|
|
179
|
-
@apply text-xl font-semibold text-gray-900 mb-4;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.card__content {
|
|
183
|
-
@apply text-gray-600 leading-relaxed;
|
|
184
|
-
}
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
```html
|
|
188
|
-
<div class="card">
|
|
189
|
-
<h2 class="card__title">Card Title</h2>
|
|
190
|
-
<p class="card__content">Card content</p>
|
|
191
|
-
</div>
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### Action Instructions
|
|
195
|
-
|
|
196
|
-
When converting (MANDATORY when asked):
|
|
197
|
-
|
|
198
|
-
1. **Analyze the HTML/JSX** for component structure and hierarchy
|
|
199
|
-
2. **Create BEM class names** following Block\_\_Element--Modifier pattern
|
|
200
|
-
3. **Show the CSS @apply implementation** with proper BEM organization
|
|
201
|
-
4. **Provide the updated HTML** with new BEM class names
|
|
202
|
-
5. **Explain the BEM structure** and benefits of the conversion
|
|
203
|
-
|
|
204
|
-
Always prioritize:
|
|
205
|
-
|
|
206
|
-
- **BEM naming convention** (Block\_\_Element--Modifier)
|
|
207
|
-
- **Mandatory conversion** when user requests it
|
|
208
|
-
- **Component hierarchy** in naming structure
|
|
209
|
-
- **Logical grouping** of related properties in @apply statements
|
|
210
|
-
- **Semantic naming** that describes purpose and structure
|
|
211
|
-
|
|
212
|
-
### TypeScript Integration
|
|
213
|
-
|
|
214
|
-
When working with TypeScript projects, consider:
|
|
215
|
-
|
|
216
|
-
- Type-safe class name patterns
|
|
217
|
-
- Component prop interfaces for style variants
|
|
218
|
-
- Utility types for consistent naming conventions
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Static Kit project overview and general guidelines
|
|
3
|
-
globs: ["**/*"]
|
|
4
|
-
alwaysApply: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Static Kit Framework
|
|
8
|
-
|
|
9
|
-
Static site framework with TypeScript, SCSS, and HTML imports. Integrated with Figma MCP for design-to-dev workflow.
|
|
10
|
-
|
|
11
|
-
## Core Principles
|
|
12
|
-
|
|
13
|
-
- Use `@components/` prefix for imports, not relative paths
|
|
14
|
-
- Follow lowercase kebab-case naming for files
|
|
15
|
-
- Keep modules isolated and modular
|
|
16
|
-
- Maintain clean separation between pages, components, and styles
|
|
17
|
-
|
|
18
|
-
## Git Conventions
|
|
19
|
-
|
|
20
|
-
### Commit Message Conventions
|
|
21
|
-
|
|
22
|
-
- `feat: new component/page`
|
|
23
|
-
- `style: scss changes`
|
|
24
|
-
- `fix: bugfix`
|
|
25
|
-
- `design-sync: figma-linked update`
|
|
26
|
-
|
|
27
|
-
### Ignored Files
|
|
28
|
-
|
|
29
|
-
- `dist/` - Build output
|
|
30
|
-
- `static-kit.local.json` - Local configuration overrides
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Public assets organization and handling
|
|
3
|
-
globs: ["public/**/*"]
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Public Assets
|
|
8
|
-
|
|
9
|
-
Static assets copied directly to dist/ with no processing. Organize into logical folders.
|
|
10
|
-
|
|
11
|
-
## Organization
|
|
12
|
-
|
|
13
|
-
- `public/images/` - Image assets
|
|
14
|
-
- `public/fonts/` - Font files
|
|
15
|
-
- `public/` - Other static assets
|
|
16
|
-
|
|
17
|
-
## Guidelines
|
|
18
|
-
|
|
19
|
-
- Assets are copied as-is to dist/
|
|
20
|
-
- No build-time processing
|
|
21
|
-
- Organize into meaningful subdirectories
|
|
22
|
-
- Reference in development as `/<filename>` (no 'public' prefix needed)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: SCSS styling conventions and import structure
|
|
3
|
-
globs: ["src/styles/**/*.scss"]
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# SCSS Styles
|
|
8
|
-
|
|
9
|
-
SCSS entrypoint is `src/styles/main.scss`. Component styles should be imported into main.scss.
|
|
10
|
-
|
|
11
|
-
## Import Structure
|
|
12
|
-
|
|
13
|
-
```scss
|
|
14
|
-
@import "./components/button.scss";
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Guidelines
|
|
18
|
-
|
|
19
|
-
- Main entrypoint: `src/styles/main.scss`
|
|
20
|
-
- Import component styles into main.scss
|
|
21
|
-
- Follow modular SCSS architecture
|
|
22
|
-
- Keep component styles organized and focused
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: SVG icon naming and sprite conventions
|
|
3
|
-
globs: ["src/icons/**/*.svg"]
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# SVG Icons
|
|
8
|
-
|
|
9
|
-
SVG icons should use lowercase-kebab-case naming. Folder structure defines sprite ID namespace.
|
|
10
|
-
|
|
11
|
-
## Naming Convention
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
src/icons/ui/arrow.svg → <use href="/sprite.svg#ui-arrow"></use>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Guidelines
|
|
18
|
-
|
|
19
|
-
- Use lowercase kebab-case for icon names
|
|
20
|
-
- Folder structure creates namespace (ui/, social/, etc.)
|
|
21
|
-
- Icons are compiled into sprite.svg
|
|
22
|
-
- Reference using sprite ID format: `namespace-iconname`
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: TypeScript and JavaScript module conventions
|
|
3
|
-
globs: ["src/js/**/*.ts", "src/js/**/*.js"]
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# TypeScript/JavaScript Modules
|
|
8
|
-
|
|
9
|
-
Component-specific scripts go in `src/js/components/`. Keep modules isolated with no bundler-only imports.
|
|
10
|
-
|
|
11
|
-
## File Organization
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
src/js/components/modal.ts
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Guidelines
|
|
18
|
-
|
|
19
|
-
- Place component scripts in `src/js/components/`
|
|
20
|
-
- Keep modules isolated and modular
|
|
21
|
-
- Avoid bundler-only patterns
|
|
22
|
-
- Use effective TypeScript for library-style code
|
|
23
|
-
- Maintain clean module boundaries
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# Empty favicon placeholder
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<a href="/about" class="button button--primary">Get Started</a>
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<div class="feature-card">
|
|
2
|
-
<div class="feature-card__icon">
|
|
3
|
-
<!-- SVG icon would go here -->
|
|
4
|
-
<div class="feature-placeholder">🚀</div>
|
|
5
|
-
</div>
|
|
6
|
-
<h3>Fast & Modern</h3>
|
|
7
|
-
<p>Built with Vite for lightning-fast development and optimized production builds.</p>
|
|
8
|
-
</div>
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path d="M12 2L15.09 8.26L22 9.27L17 14.14L18.18 21.02L12 17.77L5.82 21.02L7 14.14L2 9.27L8.91 8.26L12 2Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
-
</svg>
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// Main JavaScript entry point
|
|
2
|
-
console.log("Static Kit is ready! 🚀");
|
|
3
|
-
|
|
4
|
-
// Example: Add smooth scrolling for anchor links
|
|
5
|
-
document.addEventListener("DOMContentLoaded", () => {
|
|
6
|
-
// Add click handlers for navigation links
|
|
7
|
-
const navLinks = document.querySelectorAll('.nav-links a');
|
|
8
|
-
|
|
9
|
-
navLinks.forEach(link => {
|
|
10
|
-
link.addEventListener('click', () => {
|
|
11
|
-
console.log(`Navigating to: ${link.getAttribute('href')}`);
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
// Example: Add some interactivity to feature cards
|
|
16
|
-
const featureCards = document.querySelectorAll('.feature-card');
|
|
17
|
-
|
|
18
|
-
featureCards.forEach(card => {
|
|
19
|
-
const htmlCard = card as HTMLElement;
|
|
20
|
-
htmlCard.addEventListener('mouseenter', () => {
|
|
21
|
-
htmlCard.style.transform = 'translateY(-4px)';
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
htmlCard.addEventListener('mouseleave', () => {
|
|
25
|
-
htmlCard.style.transform = 'translateY(0)';
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<!-- @import: @components/navigation.html -->
|
|
2
|
-
|
|
3
|
-
<main class="container">
|
|
4
|
-
<h1>About Static Kit</h1>
|
|
5
|
-
|
|
6
|
-
<section>
|
|
7
|
-
<p>Static Kit is a modern static site generator that combines the simplicity of HTML with the power of modern build tools.</p>
|
|
8
|
-
|
|
9
|
-
<h2>Why Static Kit?</h2>
|
|
10
|
-
<ul>
|
|
11
|
-
<li>Zero configuration - just start building</li>
|
|
12
|
-
<li>Component-driven development</li>
|
|
13
|
-
<li>Modern developer experience</li>
|
|
14
|
-
<li>Deployable anywhere</li>
|
|
15
|
-
</ul>
|
|
16
|
-
</section>
|
|
17
|
-
|
|
18
|
-
<section>
|
|
19
|
-
<h2>Built With</h2>
|
|
20
|
-
<p>Static Kit uses Vite, TypeScript, and SCSS under the hood to provide a fast and modern development experience.</p>
|
|
21
|
-
</section>
|
|
22
|
-
</main>
|
|
23
|
-
|
|
24
|
-
<!-- @import: @components/footer.html -->
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<!-- @import: @components/navigation.html -->
|
|
2
|
-
|
|
3
|
-
<section class="hero">
|
|
4
|
-
<div class="hero-content">
|
|
5
|
-
<h1>Welcome to Static Kit</h1>
|
|
6
|
-
<p>A simple, no-bullshit static site framework with TypeScript, SCSS, and HTML imports.</p>
|
|
7
|
-
|
|
8
|
-
<!-- @import: @components/button.html -->
|
|
9
|
-
</div>
|
|
10
|
-
</section>
|
|
11
|
-
|
|
12
|
-
<section class="features">
|
|
13
|
-
<div class="container">
|
|
14
|
-
<h2>Features</h2>
|
|
15
|
-
<div class="feature-grid">
|
|
16
|
-
<!-- @import: @components/feature-card.html -->
|
|
17
|
-
<!-- @import: @components/feature-card.html -->
|
|
18
|
-
<!-- @import: @components/feature-card.html -->
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
21
|
-
</section>
|
|
22
|
-
|
|
23
|
-
<!-- @import: @components/footer.html -->
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
// Modern CSS Reset
|
|
2
|
-
*, *::before, *::after {
|
|
3
|
-
box-sizing: border-box;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
* {
|
|
7
|
-
margin: 0;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
body {
|
|
11
|
-
line-height: 1.5;
|
|
12
|
-
-webkit-font-smoothing: antialiased;
|
|
13
|
-
font-family: system-ui, sans-serif;
|
|
14
|
-
color: #1f2937;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
img, picture, video, canvas, svg {
|
|
18
|
-
display: block;
|
|
19
|
-
max-width: 100%;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Utilities
|
|
23
|
-
.container {
|
|
24
|
-
max-width: 1200px;
|
|
25
|
-
margin: 0 auto;
|
|
26
|
-
padding: 0 1rem;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// Header & Navigation
|
|
30
|
-
.header {
|
|
31
|
-
background: #ffffff;
|
|
32
|
-
border-bottom: 1px solid #e5e7eb;
|
|
33
|
-
position: sticky;
|
|
34
|
-
top: 0;
|
|
35
|
-
z-index: 100;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.nav {
|
|
39
|
-
display: flex;
|
|
40
|
-
justify-content: space-between;
|
|
41
|
-
align-items: center;
|
|
42
|
-
padding: 1rem;
|
|
43
|
-
max-width: 1200px;
|
|
44
|
-
margin: 0 auto;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.nav-brand a {
|
|
48
|
-
font-weight: 700;
|
|
49
|
-
font-size: 1.25rem;
|
|
50
|
-
text-decoration: none;
|
|
51
|
-
color: #0066cc;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.nav-links {
|
|
55
|
-
display: flex;
|
|
56
|
-
gap: 2rem;
|
|
57
|
-
|
|
58
|
-
a {
|
|
59
|
-
text-decoration: none;
|
|
60
|
-
color: #6b7280;
|
|
61
|
-
font-weight: 500;
|
|
62
|
-
transition: color 0.2s;
|
|
63
|
-
|
|
64
|
-
&:hover {
|
|
65
|
-
color: #0066cc;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Hero Section
|
|
71
|
-
.hero {
|
|
72
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
73
|
-
color: white;
|
|
74
|
-
padding: 4rem 1rem;
|
|
75
|
-
text-align: center;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
.hero-content {
|
|
79
|
-
max-width: 600px;
|
|
80
|
-
margin: 0 auto;
|
|
81
|
-
|
|
82
|
-
h1 {
|
|
83
|
-
font-size: 3rem;
|
|
84
|
-
font-weight: 700;
|
|
85
|
-
margin-bottom: 1rem;
|
|
86
|
-
line-height: 1.2;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
p {
|
|
90
|
-
font-size: 1.25rem;
|
|
91
|
-
margin-bottom: 2rem;
|
|
92
|
-
opacity: 0.9;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Button Component
|
|
97
|
-
.button {
|
|
98
|
-
display: inline-block;
|
|
99
|
-
padding: 0.75rem 2rem;
|
|
100
|
-
font-weight: 600;
|
|
101
|
-
text-decoration: none;
|
|
102
|
-
border-radius: 0.5rem;
|
|
103
|
-
transition: all 0.2s;
|
|
104
|
-
cursor: pointer;
|
|
105
|
-
border: none;
|
|
106
|
-
|
|
107
|
-
&--primary {
|
|
108
|
-
background: #ffffff;
|
|
109
|
-
color: #0066cc;
|
|
110
|
-
|
|
111
|
-
&:hover {
|
|
112
|
-
background: #f8f9fa;
|
|
113
|
-
transform: translateY(-1px);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Features Section
|
|
119
|
-
.features {
|
|
120
|
-
padding: 4rem 1rem;
|
|
121
|
-
background: #f9fafb;
|
|
122
|
-
|
|
123
|
-
h2 {
|
|
124
|
-
text-align: center;
|
|
125
|
-
font-size: 2.5rem;
|
|
126
|
-
margin-bottom: 3rem;
|
|
127
|
-
color: #1f2937;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.feature-grid {
|
|
132
|
-
display: grid;
|
|
133
|
-
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
134
|
-
gap: 2rem;
|
|
135
|
-
max-width: 1000px;
|
|
136
|
-
margin: 0 auto;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.feature-card {
|
|
140
|
-
background: white;
|
|
141
|
-
padding: 2rem;
|
|
142
|
-
border-radius: 0.75rem;
|
|
143
|
-
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
|
|
144
|
-
text-align: center;
|
|
145
|
-
|
|
146
|
-
&__icon {
|
|
147
|
-
margin-bottom: 1rem;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
.feature-placeholder {
|
|
151
|
-
font-size: 3rem;
|
|
152
|
-
margin-bottom: 1rem;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
h3 {
|
|
156
|
-
font-size: 1.25rem;
|
|
157
|
-
font-weight: 600;
|
|
158
|
-
margin-bottom: 1rem;
|
|
159
|
-
color: #1f2937;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
p {
|
|
163
|
-
color: #6b7280;
|
|
164
|
-
line-height: 1.6;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// Main Content
|
|
169
|
-
main {
|
|
170
|
-
padding: 3rem 1rem;
|
|
171
|
-
|
|
172
|
-
h1 {
|
|
173
|
-
font-size: 2.5rem;
|
|
174
|
-
margin-bottom: 2rem;
|
|
175
|
-
color: #1f2937;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
h2 {
|
|
179
|
-
font-size: 1.875rem;
|
|
180
|
-
margin: 2rem 0 1rem;
|
|
181
|
-
color: #374151;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
section {
|
|
185
|
-
margin-bottom: 2rem;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
ul {
|
|
189
|
-
padding-left: 1.5rem;
|
|
190
|
-
|
|
191
|
-
li {
|
|
192
|
-
margin-bottom: 0.5rem;
|
|
193
|
-
color: #4b5563;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
p {
|
|
198
|
-
margin-bottom: 1rem;
|
|
199
|
-
color: #4b5563;
|
|
200
|
-
line-height: 1.7;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Footer
|
|
205
|
-
.footer {
|
|
206
|
-
background: #1f2937;
|
|
207
|
-
color: #9ca3af;
|
|
208
|
-
padding: 2rem 1rem;
|
|
209
|
-
text-align: center;
|
|
210
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"useDefineForClassFields": true,
|
|
5
|
-
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
-
"module": "ESNext",
|
|
7
|
-
"skipLibCheck": true,
|
|
8
|
-
"moduleResolution": "bundler",
|
|
9
|
-
"allowImportingTsExtensions": true,
|
|
10
|
-
"resolveJsonModule": true,
|
|
11
|
-
"isolatedModules": true,
|
|
12
|
-
"noEmit": true,
|
|
13
|
-
"strict": true,
|
|
14
|
-
"noUnusedLocals": true,
|
|
15
|
-
"noUnusedParameters": true,
|
|
16
|
-
"noFallthroughCasesInSwitch": true
|
|
17
|
-
},
|
|
18
|
-
"include": ["src"]
|
|
19
|
-
}
|