@zvndev/darkmown 0.20.0 → 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.
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +13 -0
- package/README.md +115 -5
- package/docs/spec-alignment.md +16 -3
- package/package.json +3 -3
- package/site/_/base.skin +372 -0
- package/site/_/base.wd +4 -0
- package/site/_/footer.wd +14 -0
- package/site/_/metrics.json +13 -0
- package/site/_/nav.skin +35 -12
- package/site/_/nav.wd +8 -10
- package/site/_/products.json +10 -0
- package/site/pages/app.wd +1 -1
- package/site/pages/carousel/index.js +82 -0
- package/site/pages/carousel/index.skin +185 -0
- package/site/pages/carousel/index.wd +109 -0
- package/site/pages/carousel/slide-1.jpg +0 -0
- package/site/pages/carousel/slide-2.jpg +0 -0
- package/site/pages/carousel/slide-3.jpg +0 -0
- package/site/pages/carousel/slide-4.jpg +0 -0
- package/site/pages/carousel/slide-5.jpg +0 -0
- package/site/pages/compass/index.skin +247 -0
- package/site/pages/compass/index.wd +194 -0
- package/site/pages/docs/index.skin +48 -28
- package/site/pages/docs/index.wd +71 -5
- package/site/pages/folio/-style.skin +375 -0
- package/site/pages/folio/-style.wd +6 -0
- package/site/pages/folio/cart.skin +309 -0
- package/site/pages/folio/cart.wd +201 -0
- package/site/pages/folio/index.skin +24 -0
- package/site/pages/folio/index.wd +167 -0
- package/site/pages/forge/index.skin +676 -0
- package/site/pages/forge/index.wd +330 -0
- package/site/pages/index.skin +135 -144
- package/site/pages/index.wd +17 -5
- package/site/pages/ledger/index.skin +257 -0
- package/site/pages/ledger/index.wd +174 -0
- package/site/pages/media/clip-poster.jpg +0 -0
- package/site/pages/media/clip.mp4 +0 -0
- package/site/pages/media/index.skin +82 -0
- package/site/pages/media/index.wd +84 -0
- package/site/pages/media/tone.mp3 +0 -0
- package/site/pages/pulse/index.skin +434 -0
- package/site/pages/pulse/index.wd +178 -0
- package/site/pages/showcase/index.skin +130 -0
- package/site/pages/showcase/index.wd +168 -0
- package/src/compiler/body.js +26 -1
- package/src/compiler/context.js +1 -1
- package/src/compiler/directives.js +199 -3
- package/src/compiler/format.js +244 -0
- package/src/compiler/interpolation.js +35 -1
- package/src/compiler/loops.js +95 -24
- package/src/compiler/markdown.js +16 -7
- package/src/compiler/predicates.js +35 -2
- package/src/headers.js +5 -0
- package/src/runtime.js +168 -14
- package/src/skin.js +9 -1
|
@@ -0,0 +1,676 @@
|
|
|
1
|
+
/* ===================================================================
|
|
2
|
+
Forge — interactive plan / pricing configurator.
|
|
3
|
+
A confident, modern SaaS identity layered ON TOP of /base.skin
|
|
4
|
+
(tokens + .card + .source-reveal). Vivid violet brand, big rounded
|
|
5
|
+
cards, a gradient price that dominates the rail, and selectable
|
|
6
|
+
tier / feature cards whose ON state is unmistakable.
|
|
7
|
+
|
|
8
|
+
IMPORTANT: the :button / :submit directives emit *bare* <button>
|
|
9
|
+
elements (no .btn class), so every interactive element here is
|
|
10
|
+
styled by targeting `button` directly inside its container — not
|
|
11
|
+
`.btn`. That mismatch is why the old buttons fell back to ugly
|
|
12
|
+
browser defaults; this file fixes it.
|
|
13
|
+
|
|
14
|
+
Everything is scoped to .app-forge so it never leaks into the
|
|
15
|
+
shared design system. The accent lives in one token — --brand —
|
|
16
|
+
with a dark-mode override, so light and dark both stay premium.
|
|
17
|
+
=================================================================== */
|
|
18
|
+
|
|
19
|
+
.app-forge
|
|
20
|
+
--brand #6d5ae6
|
|
21
|
+
--brand-deep #5a47d6
|
|
22
|
+
--brand-ink #4636b8
|
|
23
|
+
--brand-soft #f1eefe
|
|
24
|
+
--brand-tint #f7f5ff
|
|
25
|
+
--brand-line #e0dafc
|
|
26
|
+
--brand-grad linear-gradient(135deg, #7d6bff 0%, #6d5ae6 45%, #8b5cf6 100%)
|
|
27
|
+
--brand-glow rgba(109, 90, 230, .28)
|
|
28
|
+
--brand-shadow rgba(80, 60, 200, .35)
|
|
29
|
+
--on-bg #ffffff
|
|
30
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif
|
|
31
|
+
|
|
32
|
+
@media (prefers-color-scheme: dark)
|
|
33
|
+
.app-forge
|
|
34
|
+
--brand #9b8bff
|
|
35
|
+
--brand-deep #b3a6ff
|
|
36
|
+
--brand-ink #cfc6ff
|
|
37
|
+
--brand-soft #1d1830
|
|
38
|
+
--brand-tint #181426
|
|
39
|
+
--brand-line #2c2548
|
|
40
|
+
--brand-grad linear-gradient(135deg, #a594ff 0%, #9b8bff 45%, #b78bff 100%)
|
|
41
|
+
--brand-glow rgba(155, 139, 255, .32)
|
|
42
|
+
--brand-shadow rgba(120, 100, 255, .4)
|
|
43
|
+
--on-bg #1a1626
|
|
44
|
+
|
|
45
|
+
/* Confident sans headings, tighter than the serif default. */
|
|
46
|
+
.app-forge h1, .app-forge h2, .app-forge h3
|
|
47
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif
|
|
48
|
+
letter-spacing -.02em
|
|
49
|
+
|
|
50
|
+
.app-forge .eyebrow
|
|
51
|
+
color $brand
|
|
52
|
+
|
|
53
|
+
.app-forge a
|
|
54
|
+
color $brand-deep
|
|
55
|
+
|
|
56
|
+
/* ── Shared button reset for this app ───────────────────────────────
|
|
57
|
+
:button emits a bare <button> — give every one of them the pill
|
|
58
|
+
foundation here, then specialize per zone below. */
|
|
59
|
+
.app-forge button
|
|
60
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif
|
|
61
|
+
font-size .95rem
|
|
62
|
+
font-weight 600
|
|
63
|
+
line-height 1
|
|
64
|
+
display inline-flex
|
|
65
|
+
align-items center
|
|
66
|
+
justify-content center
|
|
67
|
+
gap .45rem
|
|
68
|
+
cursor pointer
|
|
69
|
+
border 1.5px solid transparent
|
|
70
|
+
radius 12px
|
|
71
|
+
padding .8rem 1.15rem
|
|
72
|
+
transition transform .14s ease, box-shadow .18s ease, background .18s ease, border-color .18s ease, color .18s ease
|
|
73
|
+
-webkit-tap-highlight-color transparent
|
|
74
|
+
|
|
75
|
+
.app-forge button:active
|
|
76
|
+
transform translateY(1px) scale(.99)
|
|
77
|
+
|
|
78
|
+
.app-forge button:focus-visible
|
|
79
|
+
outline none
|
|
80
|
+
box-shadow 0 0 0 4px $brand-glow
|
|
81
|
+
|
|
82
|
+
/* ── Hero ───────────────────────────────────────────────────────── */
|
|
83
|
+
|
|
84
|
+
.forge-hero
|
|
85
|
+
text-align center
|
|
86
|
+
max-width 760px
|
|
87
|
+
margin 0 auto
|
|
88
|
+
padding 1rem 0 .5rem
|
|
89
|
+
|
|
90
|
+
.forge-hero h1
|
|
91
|
+
font-size clamp(2.7rem, 6.5vw, 4.5rem)
|
|
92
|
+
font-weight 760
|
|
93
|
+
margin .25rem 0 .5rem
|
|
94
|
+
line-height 1.02
|
|
95
|
+
background var(--brand-grad)
|
|
96
|
+
-webkit-background-clip text
|
|
97
|
+
background-clip text
|
|
98
|
+
color transparent
|
|
99
|
+
|
|
100
|
+
.forge-hero p
|
|
101
|
+
margin-left auto
|
|
102
|
+
margin-right auto
|
|
103
|
+
color $ink-soft
|
|
104
|
+
font-size 1.14rem
|
|
105
|
+
|
|
106
|
+
.forge-trust
|
|
107
|
+
display flex
|
|
108
|
+
flex-wrap wrap
|
|
109
|
+
gap .5rem .65rem
|
|
110
|
+
justify-content center
|
|
111
|
+
margin 1.5rem 0 .5rem
|
|
112
|
+
|
|
113
|
+
.forge-trust-item
|
|
114
|
+
display inline-flex
|
|
115
|
+
align-items center
|
|
116
|
+
gap .4rem
|
|
117
|
+
font-size .82rem
|
|
118
|
+
font-weight 600
|
|
119
|
+
color $ink-soft
|
|
120
|
+
padding .42rem .9rem
|
|
121
|
+
background $panel
|
|
122
|
+
border 1px solid $brand-line
|
|
123
|
+
radius 999px
|
|
124
|
+
|
|
125
|
+
.forge-trust-item::before
|
|
126
|
+
content "✓"
|
|
127
|
+
color $brand
|
|
128
|
+
font-weight 800
|
|
129
|
+
|
|
130
|
+
/* ── Layout: build column + sticky summary rail ─────────────────── */
|
|
131
|
+
|
|
132
|
+
.forge-layout
|
|
133
|
+
display grid
|
|
134
|
+
grid-template-columns minmax(0, 1fr) 360px
|
|
135
|
+
gap 2.25rem
|
|
136
|
+
align-items start
|
|
137
|
+
margin-top 3rem
|
|
138
|
+
|
|
139
|
+
@media (max-width: 900px)
|
|
140
|
+
.forge-layout
|
|
141
|
+
grid-template-columns 1fr
|
|
142
|
+
|
|
143
|
+
.forge-build h2
|
|
144
|
+
font-size 1.55rem
|
|
145
|
+
margin 2.8rem 0 1.1rem
|
|
146
|
+
font-weight 720
|
|
147
|
+
display flex
|
|
148
|
+
align-items center
|
|
149
|
+
gap .65rem
|
|
150
|
+
|
|
151
|
+
.forge-build h2:first-of-type
|
|
152
|
+
margin-top 0
|
|
153
|
+
|
|
154
|
+
/* Step number chip drawn from the "N · " prefix is left in the text;
|
|
155
|
+
give the heading a subtle brand underline accent instead. */
|
|
156
|
+
.forge-build h2::after
|
|
157
|
+
content ""
|
|
158
|
+
flex 1
|
|
159
|
+
height 1px
|
|
160
|
+
background linear-gradient(90deg, $brand-line, transparent)
|
|
161
|
+
|
|
162
|
+
/* ── Tier selector ──────────────────────────────────────────────── */
|
|
163
|
+
|
|
164
|
+
.tier-grid
|
|
165
|
+
display grid
|
|
166
|
+
grid-template-columns repeat(3, 1fr)
|
|
167
|
+
gap 1rem
|
|
168
|
+
|
|
169
|
+
@media (max-width: 620px)
|
|
170
|
+
.tier-grid
|
|
171
|
+
grid-template-columns 1fr
|
|
172
|
+
|
|
173
|
+
.app-forge .tier
|
|
174
|
+
position relative
|
|
175
|
+
border 1.5px solid $line
|
|
176
|
+
radius 20px
|
|
177
|
+
padding 1.5rem 1.4rem
|
|
178
|
+
background $panel
|
|
179
|
+
box-shadow 0 1px 2px rgba(28,24,20,.04)
|
|
180
|
+
transition border-color .18s ease, box-shadow .2s ease, transform .18s ease, background .2s ease
|
|
181
|
+
cursor default
|
|
182
|
+
overflow hidden
|
|
183
|
+
|
|
184
|
+
.app-forge .tier:hover
|
|
185
|
+
border-color $brand-line
|
|
186
|
+
transform translateY(-2px)
|
|
187
|
+
box-shadow 0 16px 36px -24px $brand-shadow
|
|
188
|
+
|
|
189
|
+
.app-forge .tier h3
|
|
190
|
+
margin 0 0 .4rem
|
|
191
|
+
font-size 1.2rem
|
|
192
|
+
|
|
193
|
+
.app-forge .tier p
|
|
194
|
+
font-size .92rem
|
|
195
|
+
color $muted
|
|
196
|
+
margin .5rem 0 1.2rem
|
|
197
|
+
|
|
198
|
+
.app-forge .tier p:first-of-type
|
|
199
|
+
color $ink
|
|
200
|
+
margin-bottom .85rem
|
|
201
|
+
|
|
202
|
+
.app-forge .tier p strong
|
|
203
|
+
font-size 1.55rem
|
|
204
|
+
font-weight 760
|
|
205
|
+
color $ink
|
|
206
|
+
letter-spacing -.02em
|
|
207
|
+
|
|
208
|
+
/* Default (unselected) select button — bold outline, brand text. */
|
|
209
|
+
.app-forge .tier button
|
|
210
|
+
width 100%
|
|
211
|
+
margin 0
|
|
212
|
+
background $panel
|
|
213
|
+
border-color $brand-line
|
|
214
|
+
color $brand-deep
|
|
215
|
+
|
|
216
|
+
.app-forge .tier button:hover
|
|
217
|
+
border-color $brand
|
|
218
|
+
background $brand-tint
|
|
219
|
+
transform translateY(-1px)
|
|
220
|
+
|
|
221
|
+
/* Active tier — driven by `.on when base == N`. Filled, lifted, ringed. */
|
|
222
|
+
.app-forge .tier.on
|
|
223
|
+
border-color $brand
|
|
224
|
+
background $brand-tint
|
|
225
|
+
box-shadow 0 0 0 2px $brand, 0 22px 44px -22px $brand-shadow
|
|
226
|
+
transform translateY(-3px)
|
|
227
|
+
|
|
228
|
+
.app-forge .tier.on h3
|
|
229
|
+
color $brand-ink
|
|
230
|
+
|
|
231
|
+
/* The active tier's button becomes a solid gradient primary. */
|
|
232
|
+
.app-forge .tier.on button
|
|
233
|
+
background var(--brand-grad)
|
|
234
|
+
border-color transparent
|
|
235
|
+
color #fff
|
|
236
|
+
box-shadow 0 10px 24px -10px $brand-shadow
|
|
237
|
+
|
|
238
|
+
.app-forge .tier.on button:hover
|
|
239
|
+
filter brightness(1.06)
|
|
240
|
+
transform translateY(-1px)
|
|
241
|
+
|
|
242
|
+
/* "Current" badge in the corner of the active card. */
|
|
243
|
+
.tier-active
|
|
244
|
+
position absolute
|
|
245
|
+
top 1rem
|
|
246
|
+
right 1rem
|
|
247
|
+
font-size .64rem
|
|
248
|
+
font-weight 800
|
|
249
|
+
text-transform uppercase
|
|
250
|
+
letter-spacing .08em
|
|
251
|
+
color #fff
|
|
252
|
+
background var(--brand-grad)
|
|
253
|
+
padding .3rem .6rem
|
|
254
|
+
radius 999px
|
|
255
|
+
box-shadow 0 6px 16px -8px $brand-shadow
|
|
256
|
+
|
|
257
|
+
.tier-active p
|
|
258
|
+
margin 0
|
|
259
|
+
|
|
260
|
+
/* ── Seats stepper ──────────────────────────────────────────────── */
|
|
261
|
+
|
|
262
|
+
.app-forge .seats-card
|
|
263
|
+
display flex
|
|
264
|
+
flex-wrap wrap
|
|
265
|
+
align-items center
|
|
266
|
+
justify-content space-between
|
|
267
|
+
gap 1rem
|
|
268
|
+
border 1.5px solid $brand-line
|
|
269
|
+
radius 18px
|
|
270
|
+
padding 1.4rem 1.5rem
|
|
271
|
+
background linear-gradient(180deg, $brand-tint, $panel 70%)
|
|
272
|
+
|
|
273
|
+
.seat-stepper
|
|
274
|
+
display inline-flex
|
|
275
|
+
align-items center
|
|
276
|
+
gap .85rem
|
|
277
|
+
background $panel
|
|
278
|
+
border 1.5px solid $brand-line
|
|
279
|
+
radius 999px
|
|
280
|
+
padding .4rem
|
|
281
|
+
|
|
282
|
+
/* Round, brand-tinted +/- pills with a number between them. */
|
|
283
|
+
.app-forge .seat-stepper button
|
|
284
|
+
margin 0
|
|
285
|
+
width 2.85rem
|
|
286
|
+
height 2.85rem
|
|
287
|
+
padding 0
|
|
288
|
+
font-size 1.5rem
|
|
289
|
+
font-weight 500
|
|
290
|
+
radius 999px
|
|
291
|
+
background var(--brand-grad)
|
|
292
|
+
border-color transparent
|
|
293
|
+
color #fff
|
|
294
|
+
box-shadow 0 6px 16px -8px $brand-shadow
|
|
295
|
+
|
|
296
|
+
.app-forge .seat-stepper button:hover
|
|
297
|
+
filter brightness(1.08)
|
|
298
|
+
transform translateY(-1px)
|
|
299
|
+
box-shadow 0 12px 24px -10px $brand-shadow
|
|
300
|
+
|
|
301
|
+
.seat-count
|
|
302
|
+
min-width 6.5rem
|
|
303
|
+
text-align center
|
|
304
|
+
font-size 1rem
|
|
305
|
+
color $ink-soft
|
|
306
|
+
|
|
307
|
+
.seat-count strong
|
|
308
|
+
display block
|
|
309
|
+
font-size 1.7rem
|
|
310
|
+
font-weight 780
|
|
311
|
+
color $brand-deep
|
|
312
|
+
letter-spacing -.02em
|
|
313
|
+
line-height 1.1
|
|
314
|
+
|
|
315
|
+
.seat-meta
|
|
316
|
+
font-size .98rem
|
|
317
|
+
color $ink-soft
|
|
318
|
+
|
|
319
|
+
.seat-meta strong
|
|
320
|
+
color $brand-deep
|
|
321
|
+
font-weight 700
|
|
322
|
+
|
|
323
|
+
.seat-hint
|
|
324
|
+
flex-basis 100%
|
|
325
|
+
margin-top .5rem
|
|
326
|
+
font-size .85rem
|
|
327
|
+
color $muted
|
|
328
|
+
padding-top .8rem
|
|
329
|
+
border-top 1px dashed $brand-line
|
|
330
|
+
|
|
331
|
+
/* ── Feature toggles — the key fix ──────────────────────────────── */
|
|
332
|
+
|
|
333
|
+
.feature-grid
|
|
334
|
+
display grid
|
|
335
|
+
gap 1rem
|
|
336
|
+
|
|
337
|
+
.app-forge .feature
|
|
338
|
+
position relative
|
|
339
|
+
border 1.5px solid $line
|
|
340
|
+
radius 18px
|
|
341
|
+
padding 1.4rem 1.5rem
|
|
342
|
+
background $panel
|
|
343
|
+
box-shadow 0 1px 2px rgba(28,24,20,.04)
|
|
344
|
+
transition border-color .18s ease, box-shadow .2s ease, background .2s ease, transform .18s ease
|
|
345
|
+
|
|
346
|
+
.app-forge .feature:hover
|
|
347
|
+
border-color $brand-line
|
|
348
|
+
transform translateY(-1px)
|
|
349
|
+
|
|
350
|
+
.feature-head
|
|
351
|
+
display flex
|
|
352
|
+
align-items center
|
|
353
|
+
justify-content space-between
|
|
354
|
+
gap 1rem
|
|
355
|
+
|
|
356
|
+
.app-forge .feature-head h3
|
|
357
|
+
margin 0
|
|
358
|
+
font-size 1.12rem
|
|
359
|
+
display flex
|
|
360
|
+
align-items center
|
|
361
|
+
gap .55rem
|
|
362
|
+
|
|
363
|
+
.feature-head strong
|
|
364
|
+
font-size 1rem
|
|
365
|
+
font-weight 700
|
|
366
|
+
color $brand-deep
|
|
367
|
+
white-space nowrap
|
|
368
|
+
background $brand-soft
|
|
369
|
+
border 1px solid $brand-line
|
|
370
|
+
padding .25rem .6rem
|
|
371
|
+
radius 999px
|
|
372
|
+
|
|
373
|
+
.app-forge .feature p
|
|
374
|
+
margin .6rem 0 1.1rem
|
|
375
|
+
font-size .92rem
|
|
376
|
+
color $muted
|
|
377
|
+
|
|
378
|
+
/* OFF state — outline "Add +" button on a plain card. */
|
|
379
|
+
.app-forge .feature button
|
|
380
|
+
margin 0
|
|
381
|
+
background $panel
|
|
382
|
+
border-color $brand-line
|
|
383
|
+
color $brand-deep
|
|
384
|
+
|
|
385
|
+
.app-forge .feature button:hover
|
|
386
|
+
border-color $brand
|
|
387
|
+
background $brand-tint
|
|
388
|
+
transform translateY(-1px)
|
|
389
|
+
|
|
390
|
+
/* ON state — `.on when <flag>`: brand ring + tint, unmistakable. */
|
|
391
|
+
.app-forge .feature.on
|
|
392
|
+
border-color $brand
|
|
393
|
+
background $brand-tint
|
|
394
|
+
box-shadow 0 0 0 2px $brand, 0 18px 40px -24px $brand-shadow
|
|
395
|
+
|
|
396
|
+
/* A check dot appears before the title when the feature is on. */
|
|
397
|
+
.app-forge .feature.on .feature-head h3::before
|
|
398
|
+
content "✓"
|
|
399
|
+
display inline-flex
|
|
400
|
+
align-items center
|
|
401
|
+
justify-content center
|
|
402
|
+
width 1.35rem
|
|
403
|
+
height 1.35rem
|
|
404
|
+
font-size .8rem
|
|
405
|
+
font-weight 900
|
|
406
|
+
color #fff
|
|
407
|
+
background var(--brand-grad)
|
|
408
|
+
radius 999px
|
|
409
|
+
box-shadow 0 4px 12px -4px $brand-shadow
|
|
410
|
+
|
|
411
|
+
/* When ON, the "Remove" button is the filled "Added" affordance. */
|
|
412
|
+
.app-forge .feature.on button
|
|
413
|
+
background var(--brand-grad)
|
|
414
|
+
border-color transparent
|
|
415
|
+
color #fff
|
|
416
|
+
box-shadow 0 10px 24px -12px $brand-shadow
|
|
417
|
+
|
|
418
|
+
.app-forge .feature.on button:hover
|
|
419
|
+
filter brightness(1.06)
|
|
420
|
+
border-color transparent
|
|
421
|
+
background var(--brand-grad)
|
|
422
|
+
transform translateY(-1px)
|
|
423
|
+
|
|
424
|
+
/* The "On — counted in your total" badge above the button. */
|
|
425
|
+
.feature-state
|
|
426
|
+
display inline-flex
|
|
427
|
+
align-items center
|
|
428
|
+
gap .45rem
|
|
429
|
+
font-size .76rem
|
|
430
|
+
font-weight 800
|
|
431
|
+
text-transform uppercase
|
|
432
|
+
letter-spacing .05em
|
|
433
|
+
color $brand-deep
|
|
434
|
+
margin-bottom .8rem
|
|
435
|
+
background $brand-soft
|
|
436
|
+
border 1px solid $brand-line
|
|
437
|
+
padding .35rem .7rem
|
|
438
|
+
radius 999px
|
|
439
|
+
|
|
440
|
+
.feature-state.is-on::before
|
|
441
|
+
content ""
|
|
442
|
+
width .5rem
|
|
443
|
+
height .5rem
|
|
444
|
+
radius 999px
|
|
445
|
+
background $brand
|
|
446
|
+
box-shadow 0 0 0 3px $brand-glow
|
|
447
|
+
|
|
448
|
+
/* ── Upsell hints ───────────────────────────────────────────────── */
|
|
449
|
+
|
|
450
|
+
.forge-hints
|
|
451
|
+
display grid
|
|
452
|
+
gap .6rem
|
|
453
|
+
margin-top 1.4rem
|
|
454
|
+
|
|
455
|
+
.hint
|
|
456
|
+
font-size .9rem
|
|
457
|
+
line-height 1.5
|
|
458
|
+
padding .9rem 1.1rem
|
|
459
|
+
radius 14px
|
|
460
|
+
border 1px solid $line
|
|
461
|
+
border-left 3px solid $muted
|
|
462
|
+
background $panel
|
|
463
|
+
color $ink-soft
|
|
464
|
+
|
|
465
|
+
.hint strong
|
|
466
|
+
color $ink
|
|
467
|
+
|
|
468
|
+
.hint-suggest
|
|
469
|
+
border-left-color $brand
|
|
470
|
+
background $brand-soft
|
|
471
|
+
|
|
472
|
+
.hint-suggest strong
|
|
473
|
+
color $brand-deep
|
|
474
|
+
|
|
475
|
+
.hint-good
|
|
476
|
+
border-left-color #1f9d6b
|
|
477
|
+
background rgba(31, 157, 107, .08)
|
|
478
|
+
|
|
479
|
+
.hint-unlock
|
|
480
|
+
border-left-color $gold
|
|
481
|
+
background rgba(182, 130, 43, .1)
|
|
482
|
+
|
|
483
|
+
.hint-unlock strong
|
|
484
|
+
color $gold
|
|
485
|
+
|
|
486
|
+
/* ── Sticky summary rail ────────────────────────────────────────── */
|
|
487
|
+
|
|
488
|
+
.forge-summary
|
|
489
|
+
position sticky
|
|
490
|
+
top 1.5rem
|
|
491
|
+
|
|
492
|
+
.summary-card
|
|
493
|
+
border 1.5px solid $brand-line
|
|
494
|
+
radius 24px
|
|
495
|
+
padding 1.6rem 1.6rem 1.5rem
|
|
496
|
+
background $panel
|
|
497
|
+
box-shadow 0 24px 60px -34px $brand-shadow, 0 1px 2px rgba(28,24,20,.05)
|
|
498
|
+
|
|
499
|
+
.summary-card h3
|
|
500
|
+
margin 0 0 .35rem
|
|
501
|
+
font-size .78rem
|
|
502
|
+
text-transform uppercase
|
|
503
|
+
letter-spacing .12em
|
|
504
|
+
color $muted
|
|
505
|
+
font-weight 800
|
|
506
|
+
|
|
507
|
+
/* The price block — a big gradient number that dominates the rail. */
|
|
508
|
+
.price-block
|
|
509
|
+
display flex
|
|
510
|
+
align-items baseline
|
|
511
|
+
flex-wrap wrap
|
|
512
|
+
gap .35rem
|
|
513
|
+
margin .5rem 0 1.2rem
|
|
514
|
+
|
|
515
|
+
.price-now
|
|
516
|
+
font-size clamp(3rem, 9vw, 4rem)
|
|
517
|
+
font-weight 820
|
|
518
|
+
line-height 1
|
|
519
|
+
letter-spacing -.04em
|
|
520
|
+
background var(--brand-grad)
|
|
521
|
+
-webkit-background-clip text
|
|
522
|
+
background-clip text
|
|
523
|
+
color transparent
|
|
524
|
+
|
|
525
|
+
.price-now strong
|
|
526
|
+
font-weight 820
|
|
527
|
+
color inherit
|
|
528
|
+
|
|
529
|
+
.price-unit
|
|
530
|
+
font-size .95rem
|
|
531
|
+
color $muted
|
|
532
|
+
font-weight 600
|
|
533
|
+
|
|
534
|
+
.summary-lines
|
|
535
|
+
display grid
|
|
536
|
+
gap .6rem
|
|
537
|
+
padding 1.1rem 0
|
|
538
|
+
border-top 1px solid $line
|
|
539
|
+
border-bottom 1px solid $line
|
|
540
|
+
|
|
541
|
+
.summary-line
|
|
542
|
+
display flex
|
|
543
|
+
justify-content space-between
|
|
544
|
+
font-size .92rem
|
|
545
|
+
color $ink-soft
|
|
546
|
+
|
|
547
|
+
.annual-block
|
|
548
|
+
margin 1.1rem 0
|
|
549
|
+
font-size .9rem
|
|
550
|
+
line-height 1.55
|
|
551
|
+
color $ink-soft
|
|
552
|
+
padding .9rem 1rem
|
|
553
|
+
background $brand-soft
|
|
554
|
+
border 1px solid $brand-line
|
|
555
|
+
radius 14px
|
|
556
|
+
|
|
557
|
+
.annual-block strong
|
|
558
|
+
color $brand-deep
|
|
559
|
+
font-weight 750
|
|
560
|
+
|
|
561
|
+
.summary-cta
|
|
562
|
+
margin .5rem 0 .9rem
|
|
563
|
+
|
|
564
|
+
/* Reset = quiet ghost button. */
|
|
565
|
+
.app-forge .summary-cta button
|
|
566
|
+
width 100%
|
|
567
|
+
margin 0
|
|
568
|
+
background transparent
|
|
569
|
+
border-color $line
|
|
570
|
+
color $muted
|
|
571
|
+
font-weight 650
|
|
572
|
+
|
|
573
|
+
.app-forge .summary-cta button:hover
|
|
574
|
+
border-color $brand
|
|
575
|
+
color $brand-deep
|
|
576
|
+
background $brand-tint
|
|
577
|
+
|
|
578
|
+
.summary-card p
|
|
579
|
+
font-size .8rem
|
|
580
|
+
color $muted
|
|
581
|
+
margin .2rem 0 0
|
|
582
|
+
max-width none
|
|
583
|
+
|
|
584
|
+
/* ── Checkout ───────────────────────────────────────────────────── */
|
|
585
|
+
|
|
586
|
+
.checkout-card
|
|
587
|
+
border 1.5px solid $brand-line
|
|
588
|
+
radius 24px
|
|
589
|
+
padding 1.8rem
|
|
590
|
+
background linear-gradient(165deg, $brand-soft, $panel 65%)
|
|
591
|
+
max-width 560px
|
|
592
|
+
margin-top 1rem
|
|
593
|
+
box-shadow 0 20px 50px -32px $brand-shadow
|
|
594
|
+
|
|
595
|
+
.app-forge .checkout-card form
|
|
596
|
+
display flex
|
|
597
|
+
flex-direction column
|
|
598
|
+
gap .25rem
|
|
599
|
+
|
|
600
|
+
.app-forge .checkout-card input
|
|
601
|
+
font-size 1rem
|
|
602
|
+
padding .85rem .95rem
|
|
603
|
+
border 1.5px solid $brand-line
|
|
604
|
+
background $panel
|
|
605
|
+
color $ink
|
|
606
|
+
radius 14px
|
|
607
|
+
width 100%
|
|
608
|
+
margin .35rem 0
|
|
609
|
+
transition border-color .15s ease, box-shadow .15s ease
|
|
610
|
+
|
|
611
|
+
.app-forge .checkout-card input:focus
|
|
612
|
+
outline none
|
|
613
|
+
border-color $brand
|
|
614
|
+
box-shadow 0 0 0 4px $brand-glow
|
|
615
|
+
|
|
616
|
+
/* Strong, filled "Start trial" submit. */
|
|
617
|
+
.app-forge .checkout-card button
|
|
618
|
+
margin .7rem 0 0
|
|
619
|
+
width 100%
|
|
620
|
+
padding .95rem 1.2rem
|
|
621
|
+
font-size 1.02rem
|
|
622
|
+
font-weight 700
|
|
623
|
+
background var(--brand-grad)
|
|
624
|
+
border-color transparent
|
|
625
|
+
color #fff
|
|
626
|
+
radius 14px
|
|
627
|
+
box-shadow 0 14px 32px -14px $brand-shadow
|
|
628
|
+
|
|
629
|
+
.app-forge .checkout-card button:hover
|
|
630
|
+
filter brightness(1.06)
|
|
631
|
+
transform translateY(-2px)
|
|
632
|
+
box-shadow 0 20px 40px -16px $brand-shadow
|
|
633
|
+
|
|
634
|
+
.checkout-note
|
|
635
|
+
margin-top 1rem
|
|
636
|
+
font-size .88rem
|
|
637
|
+
color $ink-soft
|
|
638
|
+
|
|
639
|
+
.checkout-note strong
|
|
640
|
+
color $brand-deep
|
|
641
|
+
|
|
642
|
+
.receipt
|
|
643
|
+
margin-top 1.1rem
|
|
644
|
+
padding 1.3rem 1.4rem
|
|
645
|
+
border 1.5px solid $brand
|
|
646
|
+
background $brand-tint
|
|
647
|
+
radius 18px
|
|
648
|
+
box-shadow 0 0 0 2px $brand-glow
|
|
649
|
+
|
|
650
|
+
.receipt h3
|
|
651
|
+
margin 0 0 .4rem
|
|
652
|
+
font-size 1.2rem
|
|
653
|
+
color $brand-ink
|
|
654
|
+
|
|
655
|
+
.receipt p
|
|
656
|
+
margin .2rem 0
|
|
657
|
+
font-size .95rem
|
|
658
|
+
color $ink-soft
|
|
659
|
+
|
|
660
|
+
.receipt strong
|
|
661
|
+
color $brand-deep
|
|
662
|
+
font-weight 700
|
|
663
|
+
|
|
664
|
+
.checkout-error
|
|
665
|
+
margin-top 1rem
|
|
666
|
+
padding .9rem 1.1rem
|
|
667
|
+
radius 14px
|
|
668
|
+
border 1px solid $warm
|
|
669
|
+
border-left 3px solid $warm
|
|
670
|
+
background $warm-soft
|
|
671
|
+
color $warm
|
|
672
|
+
font-size .9rem
|
|
673
|
+
|
|
674
|
+
/* Source-reveal sits inside the violet wrapper — keep its summary on-brand. */
|
|
675
|
+
.app-forge .source-reveal summary
|
|
676
|
+
color $brand-deep
|