@zvndev/darkmown 0.19.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 +25 -0
- package/README.md +115 -5
- package/docs/spec-alignment.md +16 -3
- package/package.json +22 -4
- 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/builder.js +20 -14
- package/src/cli.js +216 -77
- package/src/compiler/body.js +457 -0
- package/src/compiler/context.js +160 -0
- package/src/compiler/directives.js +1345 -0
- package/src/compiler/format.js +244 -0
- package/src/compiler/frontmatter.js +117 -0
- package/src/compiler/includes.js +116 -0
- package/src/compiler/index.js +22 -0
- package/src/compiler/interpolation.js +223 -0
- package/src/compiler/loops.js +715 -0
- package/src/compiler/markdown.js +242 -0
- package/src/compiler/page.js +267 -0
- package/src/compiler/predicates.js +314 -0
- package/src/compiler.js +26 -2932
- package/src/dev.js +3 -1
- package/src/headers.js +8 -4
- package/src/index.js +22 -0
- package/src/router.js +3 -1
- package/src/runtime.js +168 -14
- package/src/scaffold.js +158 -131
- package/src/skin.js +11 -2
- package/site/_/og.png +0 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/* ===================================================================
|
|
2
|
+
Folio — a boutique storefront. Warm editorial luxe.
|
|
3
|
+
|
|
4
|
+
Sits on top of /base.wd (tokens, type, dark mode, .card/.btn/.tag).
|
|
5
|
+
The DISTINCT identity: a refined terracotta accent, a tight 2-column
|
|
6
|
+
product grid beside a sticky cart rail, compact uniform cards with a
|
|
7
|
+
soft emoji chip, and a filled brand "Add" button.
|
|
8
|
+
Shared by /folio/ and /folio/cart/ via `@include ./style.wd`.
|
|
9
|
+
=================================================================== */
|
|
10
|
+
|
|
11
|
+
/* The brand accent — scoped to the app wrapper so it never leaks into
|
|
12
|
+
the rest of the site. Dark mode lifts it to a warmer, brighter clay. */
|
|
13
|
+
.app-folio
|
|
14
|
+
--brand #b8462e
|
|
15
|
+
--brand-deep #97331f
|
|
16
|
+
--brand-soft #f8ece5
|
|
17
|
+
--brand-tint #fbf3ee
|
|
18
|
+
--shelf #fcf9f4
|
|
19
|
+
|
|
20
|
+
@media (prefers-color-scheme: dark)
|
|
21
|
+
.app-folio
|
|
22
|
+
--brand #e88a6f
|
|
23
|
+
--brand-deep #f2a78f
|
|
24
|
+
--brand-soft #2c1d16
|
|
25
|
+
--brand-tint #221710
|
|
26
|
+
--shelf #18130e
|
|
27
|
+
|
|
28
|
+
.app-folio
|
|
29
|
+
padding-top 1rem
|
|
30
|
+
|
|
31
|
+
/* ── Storefront header / hero ───────────────────────────────────── */
|
|
32
|
+
|
|
33
|
+
.shop-head
|
|
34
|
+
display flex
|
|
35
|
+
flex-wrap wrap
|
|
36
|
+
align-items flex-end
|
|
37
|
+
justify-content space-between
|
|
38
|
+
gap 1.25rem 2rem
|
|
39
|
+
padding 2.25rem 0 1.75rem
|
|
40
|
+
border-bottom 1px solid $line
|
|
41
|
+
|
|
42
|
+
.shop-mark
|
|
43
|
+
max-width 44ch
|
|
44
|
+
|
|
45
|
+
.shop-eyebrow
|
|
46
|
+
display inline-block
|
|
47
|
+
text-transform uppercase
|
|
48
|
+
letter-spacing .22em
|
|
49
|
+
font-size .72rem
|
|
50
|
+
font-weight 600
|
|
51
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
52
|
+
color var(--brand)
|
|
53
|
+
margin 0 0 .55rem
|
|
54
|
+
|
|
55
|
+
.shop-name
|
|
56
|
+
font-size clamp(2.75rem, 7vw, 4.75rem)
|
|
57
|
+
line-height .92
|
|
58
|
+
letter-spacing -.03em
|
|
59
|
+
margin 0
|
|
60
|
+
font-weight 600
|
|
61
|
+
|
|
62
|
+
.shop-name em
|
|
63
|
+
font-style italic
|
|
64
|
+
color var(--brand)
|
|
65
|
+
|
|
66
|
+
.shop-tagline
|
|
67
|
+
font-size 1.08rem
|
|
68
|
+
color $ink-soft
|
|
69
|
+
margin .85rem 0 0
|
|
70
|
+
max-width 42ch
|
|
71
|
+
|
|
72
|
+
/* ── Layout: catalog + sticky cart rail ─────────────────────────── */
|
|
73
|
+
|
|
74
|
+
.shop-layout
|
|
75
|
+
display grid
|
|
76
|
+
grid-template-columns 1fr 300px
|
|
77
|
+
gap 2rem
|
|
78
|
+
align-items start
|
|
79
|
+
margin-top 2rem
|
|
80
|
+
|
|
81
|
+
.shop-main
|
|
82
|
+
min-width 0
|
|
83
|
+
|
|
84
|
+
@media (max-width: 900px)
|
|
85
|
+
.shop-layout
|
|
86
|
+
grid-template-columns 1fr
|
|
87
|
+
gap 1.5rem
|
|
88
|
+
|
|
89
|
+
/* ── Search field (a :bind input) ───────────────────────────────── */
|
|
90
|
+
|
|
91
|
+
.shop-search input[data-wd-bind-input]
|
|
92
|
+
width 100%
|
|
93
|
+
box-sizing border-box
|
|
94
|
+
font-family inherit
|
|
95
|
+
font-size 1.02rem
|
|
96
|
+
padding .8rem 1.1rem
|
|
97
|
+
border 1px solid $line
|
|
98
|
+
radius 999px
|
|
99
|
+
bg $panel
|
|
100
|
+
color $ink
|
|
101
|
+
margin .1rem 0 .35rem
|
|
102
|
+
transition border-color .15s ease, box-shadow .15s ease
|
|
103
|
+
|
|
104
|
+
.shop-search input[data-wd-bind-input]:focus
|
|
105
|
+
outline none
|
|
106
|
+
border-color var(--brand)
|
|
107
|
+
box-shadow 0 0 0 3px var(--brand-soft)
|
|
108
|
+
|
|
109
|
+
.shop-search input[data-wd-bind-input]::placeholder
|
|
110
|
+
color $faint
|
|
111
|
+
|
|
112
|
+
.shop-hint
|
|
113
|
+
font-size .82rem
|
|
114
|
+
color $muted
|
|
115
|
+
font-style italic
|
|
116
|
+
margin .1rem 0 0
|
|
117
|
+
|
|
118
|
+
/* ── Catalog grid ────────────────────────────────────────────────
|
|
119
|
+
The reactive @loop renders rows into a `<div data-wd-loop-out>`, so the
|
|
120
|
+
grid lives on that out container (its direct children are the cards). */
|
|
121
|
+
|
|
122
|
+
.catalog
|
|
123
|
+
margin 1.5rem 0 0
|
|
124
|
+
|
|
125
|
+
.catalog [data-wd-loop-out]
|
|
126
|
+
display grid
|
|
127
|
+
grid-template-columns repeat(2, 1fr)
|
|
128
|
+
gap 1rem
|
|
129
|
+
|
|
130
|
+
@media (max-width: 620px)
|
|
131
|
+
.catalog [data-wd-loop-out]
|
|
132
|
+
grid-template-columns 1fr
|
|
133
|
+
|
|
134
|
+
/* ── Product card ─────────────────────────────────────────────────
|
|
135
|
+
Compact and uniform: a small emoji chip top-left, the name + tag,
|
|
136
|
+
a one-line blurb, then a price/Add footer pinned to the bottom. */
|
|
137
|
+
|
|
138
|
+
.product
|
|
139
|
+
position relative
|
|
140
|
+
display flex
|
|
141
|
+
flex-direction column
|
|
142
|
+
gap .7rem
|
|
143
|
+
padding 1.1rem 1.15rem 1.15rem
|
|
144
|
+
height 100%
|
|
145
|
+
box-sizing border-box
|
|
146
|
+
border 1px solid $line
|
|
147
|
+
radius $radius
|
|
148
|
+
bg $panel
|
|
149
|
+
box-shadow 0 1px 2px rgba(28,24,20,.04)
|
|
150
|
+
transition transform .16s ease, box-shadow .16s ease, border-color .16s ease
|
|
151
|
+
|
|
152
|
+
.product:hover
|
|
153
|
+
transform translateY(-2px)
|
|
154
|
+
border-color var(--brand)
|
|
155
|
+
box-shadow 0 16px 34px -22px rgba(28,24,20,.45)
|
|
156
|
+
|
|
157
|
+
/* Prose inside the card containers renders as <p>; strip its margins so
|
|
158
|
+
the compact layout holds (the chip is a tight 48px box). */
|
|
159
|
+
.product .chip p, .product .pname p, .product .tag p, .product .blurb p, .product .price p
|
|
160
|
+
margin 0
|
|
161
|
+
max-width none
|
|
162
|
+
|
|
163
|
+
/* The emoji chip — a small soft-tinted rounded square holding the emoji. */
|
|
164
|
+
.product .chip
|
|
165
|
+
display flex
|
|
166
|
+
align-items center
|
|
167
|
+
justify-content center
|
|
168
|
+
width 48px
|
|
169
|
+
height 48px
|
|
170
|
+
font-size 1.65rem
|
|
171
|
+
line-height 1
|
|
172
|
+
radius 14px
|
|
173
|
+
background var(--brand-tint)
|
|
174
|
+
border 1px solid $line-soft
|
|
175
|
+
flex-shrink 0
|
|
176
|
+
|
|
177
|
+
.product .body
|
|
178
|
+
display flex
|
|
179
|
+
flex-direction column
|
|
180
|
+
gap .4rem
|
|
181
|
+
flex 1
|
|
182
|
+
min-width 0
|
|
183
|
+
|
|
184
|
+
.product .pname
|
|
185
|
+
font-size 1.18rem
|
|
186
|
+
line-height 1.18
|
|
187
|
+
letter-spacing -.015em
|
|
188
|
+
margin 0
|
|
189
|
+
font-weight 600
|
|
190
|
+
|
|
191
|
+
.product .body .tag
|
|
192
|
+
align-self flex-start
|
|
193
|
+
margin 0
|
|
194
|
+
background var(--brand-soft)
|
|
195
|
+
color var(--brand-deep)
|
|
196
|
+
|
|
197
|
+
.product .blurb
|
|
198
|
+
font-size .86rem
|
|
199
|
+
color $ink-soft
|
|
200
|
+
line-height 1.45
|
|
201
|
+
margin .1rem 0 0
|
|
202
|
+
flex 1
|
|
203
|
+
display -webkit-box
|
|
204
|
+
-webkit-line-clamp 2
|
|
205
|
+
-webkit-box-orient vertical
|
|
206
|
+
overflow hidden
|
|
207
|
+
|
|
208
|
+
.product .foot
|
|
209
|
+
display flex
|
|
210
|
+
align-items center
|
|
211
|
+
justify-content space-between
|
|
212
|
+
gap .6rem
|
|
213
|
+
margin-top .55rem
|
|
214
|
+
padding-top .8rem
|
|
215
|
+
border-top 1px solid $line-soft
|
|
216
|
+
|
|
217
|
+
.product .price
|
|
218
|
+
font-size 1.3rem
|
|
219
|
+
font-weight 650
|
|
220
|
+
letter-spacing -.02em
|
|
221
|
+
color $ink
|
|
222
|
+
margin 0
|
|
223
|
+
|
|
224
|
+
/* The "Add" button — filled brand terracotta, white, fully rounded.
|
|
225
|
+
The `:button` directive emits a bare <button data-wd-action>, so we
|
|
226
|
+
target it by attribute (same pattern as the cart's remove button). */
|
|
227
|
+
.product .foot button[data-wd-action]
|
|
228
|
+
border 0
|
|
229
|
+
margin 0
|
|
230
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
231
|
+
font-size .85rem
|
|
232
|
+
font-weight 600
|
|
233
|
+
letter-spacing .01em
|
|
234
|
+
padding .5rem 1.1rem
|
|
235
|
+
radius 999px
|
|
236
|
+
bg var(--brand)
|
|
237
|
+
color #fff
|
|
238
|
+
cursor pointer
|
|
239
|
+
flex-shrink 0
|
|
240
|
+
transition background .14s ease, transform .12s ease, box-shadow .12s ease
|
|
241
|
+
|
|
242
|
+
.product .foot button[data-wd-action]:hover
|
|
243
|
+
bg var(--brand-deep)
|
|
244
|
+
transform translateY(-1px)
|
|
245
|
+
box-shadow 0 8px 16px -8px rgba(184,70,46,.5)
|
|
246
|
+
|
|
247
|
+
.product .foot button[data-wd-action]:active
|
|
248
|
+
transform translateY(0)
|
|
249
|
+
|
|
250
|
+
/* Empty / no-matches state — spans the whole grid row. */
|
|
251
|
+
.catalog-empty
|
|
252
|
+
grid-column 1 / -1
|
|
253
|
+
padding 2.25rem 1.5rem
|
|
254
|
+
text-align center
|
|
255
|
+
border 1px dashed $line
|
|
256
|
+
radius $radius
|
|
257
|
+
bg $paper-2
|
|
258
|
+
color $muted
|
|
259
|
+
|
|
260
|
+
.catalog-empty p
|
|
261
|
+
margin .3rem auto
|
|
262
|
+
max-width none
|
|
263
|
+
|
|
264
|
+
/* ── Sticky cart rail (catalog page) — same card treatment ──────── */
|
|
265
|
+
|
|
266
|
+
.cart-rail
|
|
267
|
+
position sticky
|
|
268
|
+
top 1.25rem
|
|
269
|
+
border 1px solid $line
|
|
270
|
+
radius $radius
|
|
271
|
+
bg $panel
|
|
272
|
+
padding 1.25rem 1.25rem 1.35rem
|
|
273
|
+
box-shadow 0 1px 2px rgba(28,24,20,.04)
|
|
274
|
+
|
|
275
|
+
.cart-rail .rail-eyebrow
|
|
276
|
+
display flex
|
|
277
|
+
align-items center
|
|
278
|
+
justify-content space-between
|
|
279
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
280
|
+
font-size .7rem
|
|
281
|
+
font-weight 600
|
|
282
|
+
text-transform uppercase
|
|
283
|
+
letter-spacing .12em
|
|
284
|
+
color $muted
|
|
285
|
+
margin 0 0 .15rem
|
|
286
|
+
|
|
287
|
+
.cart-rail .rail-count
|
|
288
|
+
font-size 2.85rem
|
|
289
|
+
line-height 1
|
|
290
|
+
letter-spacing -.03em
|
|
291
|
+
color var(--brand)
|
|
292
|
+
margin .1rem 0 0
|
|
293
|
+
font-weight 650
|
|
294
|
+
|
|
295
|
+
.cart-rail .rail-sub
|
|
296
|
+
font-size .88rem
|
|
297
|
+
color $ink-soft
|
|
298
|
+
margin .5rem 0 1rem
|
|
299
|
+
|
|
300
|
+
.cart-rail .rail-link
|
|
301
|
+
display flex
|
|
302
|
+
align-items center
|
|
303
|
+
justify-content center
|
|
304
|
+
gap .4rem
|
|
305
|
+
width 100%
|
|
306
|
+
box-sizing border-box
|
|
307
|
+
margin 0
|
|
308
|
+
padding .75rem 1rem
|
|
309
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
310
|
+
font-size .92rem
|
|
311
|
+
font-weight 600
|
|
312
|
+
text-decoration none
|
|
313
|
+
radius 999px
|
|
314
|
+
bg var(--brand)
|
|
315
|
+
color #fff
|
|
316
|
+
border 1px solid var(--brand)
|
|
317
|
+
transition background .14s ease, transform .12s ease, box-shadow .12s ease
|
|
318
|
+
|
|
319
|
+
.cart-rail .rail-link:hover
|
|
320
|
+
bg var(--brand-deep)
|
|
321
|
+
color #fff
|
|
322
|
+
transform translateY(-1px)
|
|
323
|
+
box-shadow 0 8px 16px -8px rgba(184,70,46,.5)
|
|
324
|
+
|
|
325
|
+
.cart-rail .rail-note
|
|
326
|
+
margin 1rem 0 0
|
|
327
|
+
border-top 1px solid $line-soft
|
|
328
|
+
padding-top .9rem
|
|
329
|
+
font-size .8rem
|
|
330
|
+
color $muted
|
|
331
|
+
font-style italic
|
|
332
|
+
line-height 1.5
|
|
333
|
+
|
|
334
|
+
/* ── Persistence ribbon ─────────────────────────────────────────── */
|
|
335
|
+
|
|
336
|
+
.persist-note
|
|
337
|
+
display flex
|
|
338
|
+
gap .7rem
|
|
339
|
+
align-items flex-start
|
|
340
|
+
margin 1.75rem 0 0
|
|
341
|
+
padding 1rem 1.2rem
|
|
342
|
+
border 1px solid $line
|
|
343
|
+
border-left 3px solid var(--brand)
|
|
344
|
+
radius $radius-sm
|
|
345
|
+
bg var(--brand-soft)
|
|
346
|
+
color $ink-soft
|
|
347
|
+
font-size .9rem
|
|
348
|
+
|
|
349
|
+
.persist-note .dot
|
|
350
|
+
font-size 1.05rem
|
|
351
|
+
line-height 1.5
|
|
352
|
+
color var(--brand)
|
|
353
|
+
|
|
354
|
+
/* ── Footer cross-link strip ────────────────────────────────────── */
|
|
355
|
+
|
|
356
|
+
.folio-foot
|
|
357
|
+
display flex
|
|
358
|
+
flex-wrap wrap
|
|
359
|
+
align-items center
|
|
360
|
+
justify-content space-between
|
|
361
|
+
gap 1rem
|
|
362
|
+
margin 3rem 0 0
|
|
363
|
+
padding-top 1.5rem
|
|
364
|
+
border-top 1px solid $line
|
|
365
|
+
font-size .92rem
|
|
366
|
+
color $muted
|
|
367
|
+
|
|
368
|
+
.folio-foot a
|
|
369
|
+
color var(--brand)
|
|
370
|
+
font-weight 600
|
|
371
|
+
text-decoration none
|
|
372
|
+
|
|
373
|
+
.folio-foot a:hover
|
|
374
|
+
color var(--brand-deep)
|
|
375
|
+
text-decoration underline
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- Folio — shared style carrier.
|
|
2
|
+
|
|
3
|
+
Both the catalog (/folio/) and the cart (/folio/cart/) `@include ./style.wd`
|
|
4
|
+
so the boutique look lives in exactly one place. This file renders no markup;
|
|
5
|
+
including it pulls in style.skin (the warm editorial-luxe layer that sits on
|
|
6
|
+
top of the base design system from /base.wd). -->
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/* Folio cart / checkout page — thin layer over style.skin and /base.wd.
|
|
2
|
+
Holds the line-item rows, the two-column cart layout, and the checkout
|
|
3
|
+
form + receipt styling. */
|
|
4
|
+
|
|
5
|
+
/* ── Two-column: line items | checkout panel ────────────────────── */
|
|
6
|
+
|
|
7
|
+
.app-folio .cart-grid
|
|
8
|
+
display grid
|
|
9
|
+
grid-template-columns 1.3fr 1fr
|
|
10
|
+
gap 2rem
|
|
11
|
+
align-items start
|
|
12
|
+
margin-top 2rem
|
|
13
|
+
|
|
14
|
+
.app-folio .cart-lines h2, .app-folio .checkout-panel h2
|
|
15
|
+
margin-top 0
|
|
16
|
+
|
|
17
|
+
@media (max-width: 860px)
|
|
18
|
+
.app-folio .cart-grid
|
|
19
|
+
grid-template-columns 1fr
|
|
20
|
+
gap 2rem
|
|
21
|
+
|
|
22
|
+
/* ── A basket line — same compact card treatment as the catalog ──── */
|
|
23
|
+
|
|
24
|
+
.app-folio .line
|
|
25
|
+
display flex
|
|
26
|
+
align-items center
|
|
27
|
+
gap .9rem
|
|
28
|
+
padding .85rem 1rem
|
|
29
|
+
margin .65rem 0
|
|
30
|
+
border 1px solid $line
|
|
31
|
+
radius $radius
|
|
32
|
+
bg $panel
|
|
33
|
+
box-shadow 0 1px 2px rgba(28,24,20,.04)
|
|
34
|
+
transition border-color .14s ease, box-shadow .14s ease
|
|
35
|
+
|
|
36
|
+
.app-folio .line:hover
|
|
37
|
+
border-color var(--brand)
|
|
38
|
+
box-shadow 0 10px 24px -18px rgba(28,24,20,.45)
|
|
39
|
+
|
|
40
|
+
/* Prose inside the line containers renders as <p>; strip its margins so
|
|
41
|
+
the compact row holds (the chip is a tight 46px box). */
|
|
42
|
+
.app-folio .line .line-emoji p, .app-folio .line .line-name p, .app-folio .line .line-cat p, .app-folio .line .line-price p
|
|
43
|
+
margin 0
|
|
44
|
+
max-width none
|
|
45
|
+
|
|
46
|
+
/* The emoji chip — matches the catalog card chip exactly. */
|
|
47
|
+
.app-folio .line .line-emoji
|
|
48
|
+
font-size 1.55rem
|
|
49
|
+
line-height 1
|
|
50
|
+
width 46px
|
|
51
|
+
height 46px
|
|
52
|
+
display flex
|
|
53
|
+
align-items center
|
|
54
|
+
justify-content center
|
|
55
|
+
flex-shrink 0
|
|
56
|
+
radius 14px
|
|
57
|
+
background var(--brand-tint)
|
|
58
|
+
border 1px solid $line-soft
|
|
59
|
+
|
|
60
|
+
.app-folio .line .line-body
|
|
61
|
+
flex 1
|
|
62
|
+
min-width 0
|
|
63
|
+
|
|
64
|
+
.app-folio .line .line-name
|
|
65
|
+
font-size 1.08rem
|
|
66
|
+
font-weight 600
|
|
67
|
+
letter-spacing -.01em
|
|
68
|
+
line-height 1.2
|
|
69
|
+
margin 0
|
|
70
|
+
|
|
71
|
+
.app-folio .line .line-cat
|
|
72
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
73
|
+
font-size .68rem
|
|
74
|
+
font-weight 600
|
|
75
|
+
text-transform uppercase
|
|
76
|
+
letter-spacing .08em
|
|
77
|
+
color $muted
|
|
78
|
+
margin .2rem 0 0
|
|
79
|
+
|
|
80
|
+
.app-folio .line .line-price
|
|
81
|
+
font-size 1.15rem
|
|
82
|
+
font-weight 650
|
|
83
|
+
letter-spacing -.02em
|
|
84
|
+
color $ink
|
|
85
|
+
margin 0
|
|
86
|
+
flex-shrink 0
|
|
87
|
+
|
|
88
|
+
.app-folio .line button[data-wd-action]
|
|
89
|
+
border 1px solid $line
|
|
90
|
+
margin 0
|
|
91
|
+
flex-shrink 0
|
|
92
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
93
|
+
font-size .78rem
|
|
94
|
+
font-weight 600
|
|
95
|
+
padding .42rem .8rem
|
|
96
|
+
radius 999px
|
|
97
|
+
bg $panel
|
|
98
|
+
color $muted
|
|
99
|
+
cursor pointer
|
|
100
|
+
transition color .14s ease, border-color .14s ease, background .14s ease
|
|
101
|
+
|
|
102
|
+
.app-folio .line button[data-wd-action]:hover
|
|
103
|
+
color var(--brand)
|
|
104
|
+
border-color var(--brand)
|
|
105
|
+
background var(--brand-soft)
|
|
106
|
+
|
|
107
|
+
/* Empty basket card */
|
|
108
|
+
.app-folio .cart-blank
|
|
109
|
+
padding 2.25rem 1.5rem
|
|
110
|
+
text-align center
|
|
111
|
+
border 1px dashed $line
|
|
112
|
+
radius $radius
|
|
113
|
+
bg $paper-2
|
|
114
|
+
color $muted
|
|
115
|
+
|
|
116
|
+
.app-folio .cart-blank a
|
|
117
|
+
color var(--brand)
|
|
118
|
+
font-weight 600
|
|
119
|
+
|
|
120
|
+
/* Clear-basket action row */
|
|
121
|
+
.app-folio .cart-actions
|
|
122
|
+
display flex
|
|
123
|
+
align-items center
|
|
124
|
+
justify-content space-between
|
|
125
|
+
flex-wrap wrap
|
|
126
|
+
gap .75rem
|
|
127
|
+
margin-top 1.25rem
|
|
128
|
+
padding-top 1.1rem
|
|
129
|
+
border-top 1px solid $line-soft
|
|
130
|
+
font-size .9rem
|
|
131
|
+
color $muted
|
|
132
|
+
|
|
133
|
+
.app-folio .cart-actions button[data-wd-action]
|
|
134
|
+
border 1px solid $line
|
|
135
|
+
margin 0
|
|
136
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
137
|
+
font-size .82rem
|
|
138
|
+
font-weight 600
|
|
139
|
+
padding .55rem 1rem
|
|
140
|
+
radius 999px
|
|
141
|
+
bg $panel
|
|
142
|
+
color $ink-soft
|
|
143
|
+
cursor pointer
|
|
144
|
+
transition color .14s ease, border-color .14s ease
|
|
145
|
+
|
|
146
|
+
.app-folio .cart-actions button[data-wd-action]:hover
|
|
147
|
+
color var(--brand)
|
|
148
|
+
border-color var(--brand)
|
|
149
|
+
|
|
150
|
+
/* ── Checkout panel ─────────────────────────────────────────────── */
|
|
151
|
+
|
|
152
|
+
.app-folio .checkout-panel
|
|
153
|
+
position sticky
|
|
154
|
+
top 1.25rem
|
|
155
|
+
border 1px solid $line
|
|
156
|
+
radius $radius
|
|
157
|
+
bg $panel
|
|
158
|
+
padding 1.5rem 1.5rem 1.65rem
|
|
159
|
+
box-shadow 0 1px 2px rgba(28,24,20,.04)
|
|
160
|
+
|
|
161
|
+
.app-folio .checkout-panel p
|
|
162
|
+
font-size .92rem
|
|
163
|
+
color $ink-soft
|
|
164
|
+
|
|
165
|
+
.app-folio .checkout-panel form
|
|
166
|
+
display flex
|
|
167
|
+
flex-direction column
|
|
168
|
+
gap .75rem
|
|
169
|
+
margin 1.25rem 0 0
|
|
170
|
+
|
|
171
|
+
.app-folio .checkout-panel input, .app-folio .checkout-panel select
|
|
172
|
+
width 100%
|
|
173
|
+
box-sizing border-box
|
|
174
|
+
font-family inherit
|
|
175
|
+
font-size 1rem
|
|
176
|
+
padding .75rem .9rem
|
|
177
|
+
border 1px solid $line
|
|
178
|
+
radius $radius-sm
|
|
179
|
+
bg $paper
|
|
180
|
+
color $ink
|
|
181
|
+
margin 0
|
|
182
|
+
transition border-color .15s ease, box-shadow .15s ease
|
|
183
|
+
|
|
184
|
+
.app-folio .checkout-panel input:focus, .app-folio .checkout-panel select:focus
|
|
185
|
+
outline none
|
|
186
|
+
border-color var(--brand)
|
|
187
|
+
box-shadow 0 0 0 3px var(--brand-soft)
|
|
188
|
+
|
|
189
|
+
.app-folio .checkout-panel input::placeholder
|
|
190
|
+
color $faint
|
|
191
|
+
|
|
192
|
+
.app-folio .checkout-panel button[type="submit"]
|
|
193
|
+
border 0
|
|
194
|
+
margin .45rem 0 0
|
|
195
|
+
width 100%
|
|
196
|
+
font-family system-ui, -apple-system, "Segoe UI", Roboto, sans-serif
|
|
197
|
+
font-size 1rem
|
|
198
|
+
font-weight 600
|
|
199
|
+
letter-spacing .01em
|
|
200
|
+
padding .9rem 1rem
|
|
201
|
+
radius 999px
|
|
202
|
+
bg var(--brand)
|
|
203
|
+
color #fff
|
|
204
|
+
cursor pointer
|
|
205
|
+
transition background .14s ease, transform .12s ease, box-shadow .12s ease
|
|
206
|
+
|
|
207
|
+
.app-folio .checkout-panel button[type="submit"]:hover
|
|
208
|
+
bg var(--brand-deep)
|
|
209
|
+
transform translateY(-1px)
|
|
210
|
+
box-shadow 0 10px 20px -8px rgba(184,70,46,.5)
|
|
211
|
+
|
|
212
|
+
.app-folio .checkout-panel button[type="submit"]:active
|
|
213
|
+
transform translateY(0)
|
|
214
|
+
|
|
215
|
+
.app-folio .checkout-hint
|
|
216
|
+
margin 1.1rem 0 0
|
|
217
|
+
padding-top 1rem
|
|
218
|
+
border-top 1px solid $line-soft
|
|
219
|
+
font-size .85rem
|
|
220
|
+
color $muted
|
|
221
|
+
font-style italic
|
|
222
|
+
|
|
223
|
+
/* ── Receipt ────────────────────────────────────────────────────── */
|
|
224
|
+
|
|
225
|
+
.app-folio .receipt
|
|
226
|
+
margin 1.25rem 0 0
|
|
227
|
+
padding 1.2rem 1.3rem
|
|
228
|
+
border 1px solid var(--brand)
|
|
229
|
+
border-left 3px solid var(--brand)
|
|
230
|
+
radius $radius
|
|
231
|
+
background var(--brand-soft)
|
|
232
|
+
|
|
233
|
+
.app-folio .receipt strong
|
|
234
|
+
color var(--brand-deep)
|
|
235
|
+
|
|
236
|
+
.app-folio .receipt p
|
|
237
|
+
color $ink-soft
|
|
238
|
+
|
|
239
|
+
.app-folio .receipt .receipt-stamp
|
|
240
|
+
margin .6rem 0 0
|
|
241
|
+
font-family ui-monospace, "SF Mono", Menlo, monospace
|
|
242
|
+
font-size .76rem
|
|
243
|
+
color $muted
|
|
244
|
+
|
|
245
|
+
.app-folio .receipt-error
|
|
246
|
+
margin 1rem 0 0
|
|
247
|
+
padding 1rem 1.2rem
|
|
248
|
+
border 1px solid $line
|
|
249
|
+
border-left 3px solid $warm
|
|
250
|
+
radius $radius-sm
|
|
251
|
+
background $warm-soft
|
|
252
|
+
color $ink-soft
|
|
253
|
+
font-size .9rem
|
|
254
|
+
|
|
255
|
+
/* ── Order summary — live subtotal/tax/total via :computed sum() + | money ── */
|
|
256
|
+
.app-folio .order-summary
|
|
257
|
+
margin-top 1.25rem
|
|
258
|
+
padding 1.1rem 1.2rem
|
|
259
|
+
border 1px solid $line-soft
|
|
260
|
+
radius 14px
|
|
261
|
+
bg $panel
|
|
262
|
+
|
|
263
|
+
.app-folio .order-summary h3
|
|
264
|
+
margin 0 0 .75rem
|
|
265
|
+
font-size .78rem
|
|
266
|
+
font-weight 700
|
|
267
|
+
letter-spacing .08em
|
|
268
|
+
text-transform uppercase
|
|
269
|
+
color $muted
|
|
270
|
+
|
|
271
|
+
.app-folio .sum-row
|
|
272
|
+
display flex
|
|
273
|
+
align-items baseline
|
|
274
|
+
justify-content space-between
|
|
275
|
+
gap 1rem
|
|
276
|
+
font-size .92rem
|
|
277
|
+
color $ink-soft
|
|
278
|
+
padding .3rem 0
|
|
279
|
+
|
|
280
|
+
.app-folio .sum-row p
|
|
281
|
+
margin 0
|
|
282
|
+
|
|
283
|
+
.app-folio .sum-val
|
|
284
|
+
font-variant-numeric tabular-nums
|
|
285
|
+
color $ink
|
|
286
|
+
|
|
287
|
+
.app-folio .sum-total
|
|
288
|
+
margin-top .35rem
|
|
289
|
+
padding-top .7rem
|
|
290
|
+
border-top 1px solid $line-soft
|
|
291
|
+
font-size 1.05rem
|
|
292
|
+
color $ink
|
|
293
|
+
|
|
294
|
+
.app-folio .order-summary button[data-wd-action]
|
|
295
|
+
margin-top 1rem
|
|
296
|
+
width 100%
|
|
297
|
+
border 1px solid $line
|
|
298
|
+
font-size .82rem
|
|
299
|
+
font-weight 600
|
|
300
|
+
padding .6rem 1rem
|
|
301
|
+
radius 999px
|
|
302
|
+
bg transparent
|
|
303
|
+
color $ink-soft
|
|
304
|
+
cursor pointer
|
|
305
|
+
transition color .14s ease, border-color .14s ease
|
|
306
|
+
|
|
307
|
+
.app-folio .order-summary button[data-wd-action]:hover
|
|
308
|
+
color $ink
|
|
309
|
+
border-color $ink-soft
|