@nabilabs/create-builder 0.1.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,209 @@
1
+ .about {
2
+ padding-top: 12vh;
3
+ }
4
+
5
+ .about__hero {
6
+ max-width: 960px;
7
+ padding-bottom: 11vh;
8
+ }
9
+
10
+ .about__hero h1 {
11
+ margin: 0;
12
+ color: #f5f9ff;
13
+ font-size: clamp(60px, 9vw, 118px);
14
+ font-weight: 780;
15
+ letter-spacing: -0.075em;
16
+ line-height: 0.88;
17
+ }
18
+
19
+ .about__hero h1 span {
20
+ display: block;
21
+ color: #4b9cff;
22
+ }
23
+
24
+ .about__lead {
25
+ max-width: 680px;
26
+ margin: 36px 0 0;
27
+ color: #91a8c8;
28
+ font-size: clamp(18px, 2vw, 22px);
29
+ line-height: 1.55;
30
+ }
31
+
32
+ code {
33
+ padding: 0.13em 0.4em;
34
+ border: 1px solid rgba(110, 166, 255, 0.13);
35
+ border-radius: 6px;
36
+ color: #a8cbff;
37
+ background: rgba(20, 65, 127, 0.3);
38
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
39
+ font-size: 0.8em;
40
+ }
41
+
42
+ .principles {
43
+ display: grid;
44
+ grid-template-columns: 1.15fr 0.85fr;
45
+ gap: 14px;
46
+ }
47
+
48
+ .principle {
49
+ min-height: 340px;
50
+ padding: 32px;
51
+ border: 1px solid rgba(128, 179, 255, 0.14);
52
+ border-radius: 22px;
53
+ background: rgba(10, 34, 70, 0.55);
54
+ box-shadow: inset 0 1px rgba(255, 255, 255, 0.03);
55
+ }
56
+
57
+ .principle--wide {
58
+ display: grid;
59
+ grid-column: 1 / -1;
60
+ grid-template-columns: 0.55fr 1.45fr;
61
+ gap: 30px;
62
+ min-height: 280px;
63
+ background:
64
+ radial-gradient(
65
+ circle at 80% 20%,
66
+ rgba(29, 111, 240, 0.22),
67
+ transparent 25rem
68
+ ),
69
+ rgba(10, 34, 70, 0.6);
70
+ }
71
+
72
+ .principle--accent {
73
+ border-color: rgba(75, 156, 255, 0.25);
74
+ background: linear-gradient(
75
+ 145deg,
76
+ rgba(25, 102, 220, 0.94),
77
+ rgba(12, 68, 159, 0.82)
78
+ );
79
+ }
80
+
81
+ .principle__index,
82
+ .principle__label {
83
+ color: #5d8dcc;
84
+ font-size: 11px;
85
+ font-weight: 780;
86
+ letter-spacing: 0.12em;
87
+ text-transform: uppercase;
88
+ }
89
+
90
+ .principle__label {
91
+ margin: 8px 0 0;
92
+ }
93
+
94
+ .principle h2 {
95
+ margin: 76px 0 14px;
96
+ color: #edf6ff;
97
+ font-size: clamp(28px, 4vw, 48px);
98
+ letter-spacing: -0.055em;
99
+ line-height: 1;
100
+ }
101
+
102
+ .principle--wide h2 {
103
+ margin-top: 4px;
104
+ }
105
+
106
+ .principle p:last-child {
107
+ max-width: 520px;
108
+ margin: 0;
109
+ color: #819abc;
110
+ font-size: 15px;
111
+ line-height: 1.65;
112
+ }
113
+
114
+ .principle--accent .principle__index,
115
+ .principle--accent .principle__label,
116
+ .principle--accent p:last-child {
117
+ color: #bcd8ff;
118
+ }
119
+
120
+ .principle--accent strong {
121
+ display: block;
122
+ margin-top: 44px;
123
+ color: white;
124
+ font-size: clamp(86px, 12vw, 150px);
125
+ font-weight: 760;
126
+ letter-spacing: -0.08em;
127
+ line-height: 0.8;
128
+ }
129
+
130
+ .principle--accent p:last-child {
131
+ margin-top: 28px;
132
+ }
133
+
134
+ .back {
135
+ display: flex;
136
+ align-items: flex-end;
137
+ justify-content: space-between;
138
+ gap: 30px;
139
+ padding: 11vh 0 10vh;
140
+ }
141
+
142
+ .back .eyebrow {
143
+ margin-bottom: 12px;
144
+ }
145
+
146
+ .back h2 {
147
+ max-width: 680px;
148
+ margin: 0;
149
+ color: #f0f6ff;
150
+ font-size: clamp(36px, 5vw, 64px);
151
+ letter-spacing: -0.055em;
152
+ line-height: 1;
153
+ }
154
+
155
+ .back > a {
156
+ display: inline-flex;
157
+ min-height: 50px;
158
+ flex: 0 0 auto;
159
+ align-items: center;
160
+ gap: 26px;
161
+ padding: 0 20px;
162
+ border: 1px solid rgba(128, 179, 255, 0.18);
163
+ border-radius: 999px;
164
+ color: #b7d2f5;
165
+ background: rgba(13, 45, 91, 0.55);
166
+ font-size: 14px;
167
+ font-weight: 720;
168
+ text-decoration: none;
169
+ transition:
170
+ transform 160ms ease,
171
+ background 160ms ease;
172
+ }
173
+
174
+ .back > a:hover {
175
+ transform: translateY(-2px);
176
+ background: rgba(20, 74, 147, 0.64);
177
+ }
178
+
179
+ @media (max-width: 760px) {
180
+ .about {
181
+ padding-top: 10vh;
182
+ }
183
+
184
+ .principles {
185
+ grid-template-columns: 1fr;
186
+ }
187
+
188
+ .principle--wide {
189
+ grid-column: auto;
190
+ grid-template-columns: 1fr;
191
+ }
192
+
193
+ .principle {
194
+ min-height: 290px;
195
+ }
196
+
197
+ .principle h2 {
198
+ margin-top: 58px;
199
+ }
200
+
201
+ .principle--wide h2 {
202
+ margin-top: 24px;
203
+ }
204
+
205
+ .back {
206
+ align-items: flex-start;
207
+ flex-direction: column;
208
+ }
209
+ }
@@ -0,0 +1,95 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <use
4
+ ref="ui/head"
5
+ title="{{projectName}} — Multi-page sample"
6
+ description="A two-page Nabi Builder starter project."
7
+ >
8
+ <link use="base.css" />
9
+ </use>
10
+
11
+ <body>
12
+ <use ref="ui/header" active="home" />
13
+
14
+ <main>
15
+ <section class="hero shell">
16
+ <div class="hero__copy">
17
+ <p class="eyebrow">02 · Multi-page</p>
18
+
19
+ <h1>
20
+ Two pages.
21
+ <span>One tiny build.</span>
22
+ </h1>
23
+
24
+ <p class="hero__intro">
25
+ Nabi turns a simple file structure into clean static routes and
26
+ resolves shared UI at build time.
27
+ </p>
28
+
29
+ <div class="hero__actions">
30
+ <a class="button button--primary" href="/about">
31
+ Explore the second page
32
+ <span aria-hidden="true">→</span>
33
+ </a>
34
+
35
+ <a class="button button--ghost" href="#routes"> See routes </a>
36
+ </div>
37
+ </div>
38
+
39
+ <div class="route-card" id="routes">
40
+ <div class="route-card__top">
41
+ <span>pages</span>
42
+ <span>routes</span>
43
+ </div>
44
+
45
+ <div class="route-row">
46
+ <code>pages/index.html</code>
47
+ <span class="route-arrow">→</span>
48
+ <strong>/</strong>
49
+ </div>
50
+
51
+ <div class="route-row">
52
+ <code>pages/about/index.html</code>
53
+ <span class="route-arrow">→</span>
54
+ <strong>/about</strong>
55
+ </div>
56
+
57
+ <div class="route-card__status">
58
+ <span class="status-dot"></span>
59
+ Static routes, zero client router
60
+ </div>
61
+ </div>
62
+ </section>
63
+
64
+ <section class="features shell" aria-label="Highlights">
65
+ <article>
66
+ <span>01</span>
67
+ <h2>File routing</h2>
68
+ <p>
69
+ The folder structure is the routing configuration. No route table is
70
+ needed for these pages.
71
+ </p>
72
+ </article>
73
+
74
+ <article>
75
+ <span>02</span>
76
+ <h2>Shared UI</h2>
77
+ <p>
78
+ Both pages use the same namespaced header and footer components.
79
+ </p>
80
+ </article>
81
+
82
+ <article>
83
+ <span>03</span>
84
+ <h2>Plain output</h2>
85
+ <p>
86
+ Components disappear at build time and leave regular HTML, CSS and
87
+ JavaScript.
88
+ </p>
89
+ </article>
90
+ </section>
91
+ </main>
92
+
93
+ <use ref="ui/footer" />
94
+ </body>
95
+ </html>
@@ -0,0 +1,257 @@
1
+ .hero {
2
+ display: grid;
3
+ grid-template-columns: minmax(0, 1.15fr) minmax(320px, 0.85fr);
4
+ align-items: center;
5
+ gap: clamp(52px, 8vw, 110px);
6
+ min-height: 650px;
7
+ padding-top: 9vh;
8
+ padding-bottom: 11vh;
9
+ }
10
+
11
+ .hero__copy {
12
+ max-width: 700px;
13
+ }
14
+
15
+ h1 {
16
+ max-width: 760px;
17
+ margin: 0;
18
+ color: #f5f9ff;
19
+ font-size: clamp(58px, 8vw, 108px);
20
+ font-weight: 780;
21
+ letter-spacing: -0.075em;
22
+ line-height: 0.9;
23
+ }
24
+
25
+ h1 span {
26
+ display: block;
27
+ color: #4b9cff;
28
+ }
29
+
30
+ .hero__intro {
31
+ max-width: 610px;
32
+ margin: 32px 0 0;
33
+ color: #91a8c8;
34
+ font-size: clamp(18px, 2vw, 22px);
35
+ line-height: 1.55;
36
+ }
37
+
38
+ .hero__actions {
39
+ display: flex;
40
+ flex-wrap: wrap;
41
+ gap: 10px;
42
+ margin-top: 34px;
43
+ }
44
+
45
+ .button {
46
+ display: inline-flex;
47
+ min-height: 48px;
48
+ align-items: center;
49
+ justify-content: center;
50
+ gap: 12px;
51
+ padding: 0 19px;
52
+ border: 1px solid transparent;
53
+ border-radius: 999px;
54
+ font-size: 14px;
55
+ font-weight: 720;
56
+ text-decoration: none;
57
+ transition:
58
+ transform 160ms ease,
59
+ border-color 160ms ease,
60
+ background 160ms ease;
61
+ }
62
+
63
+ .button:hover {
64
+ transform: translateY(-2px);
65
+ }
66
+
67
+ .button--primary {
68
+ color: white;
69
+ background: #1769e8;
70
+ box-shadow: 0 14px 34px rgba(23, 105, 232, 0.28);
71
+ }
72
+
73
+ .button--primary:hover {
74
+ background: #2879f2;
75
+ }
76
+
77
+ .button--ghost {
78
+ border-color: rgba(135, 177, 255, 0.18);
79
+ color: #b5c8e3;
80
+ background: rgba(18, 47, 88, 0.34);
81
+ }
82
+
83
+ .button--ghost:hover {
84
+ border-color: rgba(135, 177, 255, 0.34);
85
+ background: rgba(23, 65, 122, 0.48);
86
+ }
87
+
88
+ .route-card {
89
+ overflow: hidden;
90
+ border: 1px solid rgba(128, 179, 255, 0.18);
91
+ border-radius: 24px;
92
+ background: linear-gradient(
93
+ 180deg,
94
+ rgba(18, 53, 101, 0.84),
95
+ rgba(9, 29, 59, 0.8)
96
+ );
97
+ box-shadow:
98
+ 0 30px 80px rgba(0, 20, 60, 0.35),
99
+ inset 0 1px rgba(255, 255, 255, 0.04);
100
+ backdrop-filter: blur(16px);
101
+ }
102
+
103
+ .route-card__top {
104
+ display: flex;
105
+ justify-content: space-between;
106
+ padding: 15px 20px;
107
+ border-bottom: 1px solid rgba(128, 179, 255, 0.12);
108
+ color: #6184b5;
109
+ font-size: 11px;
110
+ font-weight: 750;
111
+ letter-spacing: 0.12em;
112
+ text-transform: uppercase;
113
+ }
114
+
115
+ .route-row {
116
+ display: grid;
117
+ grid-template-columns: 1fr auto auto;
118
+ align-items: center;
119
+ gap: 18px;
120
+ min-height: 74px;
121
+ padding: 0 20px;
122
+ border-bottom: 1px solid rgba(128, 179, 255, 0.1);
123
+ }
124
+
125
+ .route-row code {
126
+ overflow: hidden;
127
+ color: #acc8ed;
128
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
129
+ font-size: 12px;
130
+ text-overflow: ellipsis;
131
+ white-space: nowrap;
132
+ }
133
+
134
+ .route-row strong {
135
+ min-width: 64px;
136
+ color: #ffffff;
137
+ font-size: 14px;
138
+ text-align: right;
139
+ }
140
+
141
+ .route-arrow {
142
+ color: #3f7bc7;
143
+ }
144
+
145
+ .route-card__status {
146
+ display: flex;
147
+ align-items: center;
148
+ gap: 9px;
149
+ padding: 18px 20px;
150
+ color: #7999c3;
151
+ font-size: 12px;
152
+ }
153
+
154
+ .status-dot {
155
+ width: 7px;
156
+ height: 7px;
157
+ border-radius: 50%;
158
+ background: #38bdf8;
159
+ box-shadow: 0 0 0 5px rgba(56, 189, 248, 0.09);
160
+ }
161
+
162
+ .features {
163
+ display: grid;
164
+ grid-template-columns: repeat(3, 1fr);
165
+ border-top: 1px solid rgba(135, 177, 255, 0.12);
166
+ border-bottom: 1px solid rgba(135, 177, 255, 0.12);
167
+ }
168
+
169
+ .features article {
170
+ min-height: 260px;
171
+ padding: 34px;
172
+ border-right: 1px solid rgba(135, 177, 255, 0.12);
173
+ }
174
+
175
+ .features article:last-child {
176
+ border-right: 0;
177
+ }
178
+
179
+ .features article > span {
180
+ color: #347ddf;
181
+ font-size: 12px;
182
+ font-weight: 800;
183
+ letter-spacing: 0.1em;
184
+ }
185
+
186
+ .features h2 {
187
+ margin: 66px 0 10px;
188
+ color: #eaf3ff;
189
+ font-size: 22px;
190
+ letter-spacing: -0.035em;
191
+ }
192
+
193
+ .features p {
194
+ max-width: 290px;
195
+ margin: 0;
196
+ color: #738cad;
197
+ font-size: 14px;
198
+ line-height: 1.6;
199
+ }
200
+
201
+ @media (max-width: 840px) {
202
+ .hero {
203
+ grid-template-columns: 1fr;
204
+ min-height: auto;
205
+ padding-top: 12vh;
206
+ padding-bottom: 10vh;
207
+ }
208
+
209
+ .route-card {
210
+ max-width: 560px;
211
+ }
212
+
213
+ .features {
214
+ grid-template-columns: 1fr;
215
+ }
216
+
217
+ .features article {
218
+ min-height: auto;
219
+ border-right: 0;
220
+ border-bottom: 1px solid rgba(135, 177, 255, 0.12);
221
+ }
222
+
223
+ .features article:last-child {
224
+ border-bottom: 0;
225
+ }
226
+
227
+ .features h2 {
228
+ margin-top: 28px;
229
+ }
230
+ }
231
+
232
+ @media (max-width: 520px) {
233
+ .hero {
234
+ gap: 44px;
235
+ }
236
+
237
+ h1 {
238
+ font-size: clamp(52px, 18vw, 76px);
239
+ }
240
+
241
+ .hero__actions {
242
+ align-items: stretch;
243
+ flex-direction: column;
244
+ }
245
+
246
+ .button {
247
+ width: 100%;
248
+ }
249
+
250
+ .route-row {
251
+ grid-template-columns: minmax(0, 1fr) auto;
252
+ }
253
+
254
+ .route-arrow {
255
+ display: none;
256
+ }
257
+ }