create-weapp-vite 2.3.4 → 2.3.5

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.
Files changed (81) hide show
  1. package/README.md +5 -3
  2. package/dist/cli.js +36 -31
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +1 -1
  5. package/dist/{src-2teZ_6MA.js → src-Tx4viskG.js} +20 -8
  6. package/package.json +1 -1
  7. package/templates/default/eslint.config.js +1 -1
  8. package/templates/default/package.json +1 -0
  9. package/templates/default/src/app.scss +1 -0
  10. package/templates/default/src/components/HelloWorld/HelloWorld.scss +10 -10
  11. package/templates/default/src/pages/index/index.scss +1 -0
  12. package/templates/lib/eslint.config.js +1 -1
  13. package/templates/lib/package.json +2 -1
  14. package/templates/lib/src/app.scss +1 -0
  15. package/templates/lib/src/components/HelloWorld/HelloWorld.scss +10 -10
  16. package/templates/lib/src/components/sfc-setup/index.vue +8 -8
  17. package/templates/plugin/.editorconfig +9 -0
  18. package/templates/plugin/README.md +35 -0
  19. package/templates/plugin/eslint.config.js +6 -0
  20. package/templates/plugin/gitignore +36 -0
  21. package/templates/plugin/package.json +45 -0
  22. package/templates/plugin/plugin/components/hello-component/index.vue +174 -0
  23. package/templates/plugin/plugin/components/native-meter/index.json +6 -0
  24. package/templates/plugin/plugin/components/native-meter/index.scss +51 -0
  25. package/templates/plugin/plugin/components/native-meter/index.ts +28 -0
  26. package/templates/plugin/plugin/components/native-meter/index.wxml +12 -0
  27. package/templates/plugin/plugin/index.ts +16 -0
  28. package/templates/plugin/plugin/pages/hello-page/index.vue +332 -0
  29. package/templates/plugin/plugin/pages/native-playground/index.json +7 -0
  30. package/templates/plugin/plugin/pages/native-playground/index.scss +81 -0
  31. package/templates/plugin/plugin/pages/native-playground/index.ts +20 -0
  32. package/templates/plugin/plugin/pages/native-playground/index.wxml +30 -0
  33. package/templates/plugin/plugin/plugin.json +11 -0
  34. package/templates/plugin/plugin/utils/showcase.ts +102 -0
  35. package/templates/plugin/project.config.json +48 -0
  36. package/templates/plugin/project.private.config.json +8 -0
  37. package/templates/plugin/shared/shared-data.ts +12 -0
  38. package/templates/plugin/src/app.json +11 -0
  39. package/templates/plugin/src/app.ts +5 -0
  40. package/templates/plugin/src/pages/index/index.json +6 -0
  41. package/templates/plugin/src/pages/index/index.ts +46 -0
  42. package/templates/plugin/src/pages/index/index.wxml +46 -0
  43. package/templates/plugin/src/pages/index/index.wxss +113 -0
  44. package/templates/plugin/src/sitemap.json +7 -0
  45. package/templates/plugin/stylelint.config.js +5 -0
  46. package/templates/plugin/tsconfig.json +17 -0
  47. package/templates/plugin/weapp-vite.config.ts +23 -0
  48. package/templates/tailwindcss/eslint.config.js +4 -1
  49. package/templates/tailwindcss/package.json +3 -2
  50. package/templates/tailwindcss/postcss.config.js +1 -2
  51. package/templates/tailwindcss/src/app.css +2 -0
  52. package/templates/tailwindcss/src/pages/index/index.scss +1 -0
  53. package/templates/tailwindcss/src/pages/profile/index.scss +1 -0
  54. package/templates/tailwindcss/tailwind.config.ts +0 -5
  55. package/templates/tailwindcss/weapp-vite.config.ts +2 -0
  56. package/templates/tdesign/eslint.config.js +4 -1
  57. package/templates/tdesign/package.json +3 -2
  58. package/templates/tdesign/postcss.config.js +1 -2
  59. package/templates/tdesign/src/app.css +2 -0
  60. package/templates/tdesign/src/pages/index/index.scss +1 -0
  61. package/templates/tdesign/tailwind.config.ts +0 -5
  62. package/templates/tdesign/weapp-vite.config.ts +2 -0
  63. package/templates/vant/eslint.config.js +4 -1
  64. package/templates/vant/package.json +3 -2
  65. package/templates/vant/postcss.config.js +1 -2
  66. package/templates/vant/src/app.css +2 -0
  67. package/templates/vant/src/pages/index/index.scss +1 -0
  68. package/templates/vant/tailwind.config.ts +0 -5
  69. package/templates/vant/weapp-vite.config.ts +2 -0
  70. package/templates/wevu/eslint.config.js +1 -1
  71. package/templates/wevu/package.json +1 -0
  72. package/templates/wevu-tdesign/eslint.config.js +13 -1
  73. package/templates/wevu-tdesign/package.json +3 -2
  74. package/templates/wevu-tdesign/postcss.config.js +1 -2
  75. package/templates/wevu-tdesign/src/app.css +7 -0
  76. package/templates/wevu-tdesign/src/app.vue +1 -10
  77. package/templates/wevu-tdesign/tailwind.config.ts +0 -5
  78. package/templates/wevu-tdesign/weapp-vite.config.ts +1 -0
  79. package/templates/tailwindcss/src/app.scss +0 -3
  80. package/templates/tdesign/src/app.scss +0 -3
  81. package/templates/vant/src/app.scss +0 -3
@@ -0,0 +1,174 @@
1
+ <script setup lang="ts">
2
+ import type { PluginFeatureCard } from '../../utils/showcase'
3
+ import { computed } from 'wevu'
4
+
5
+ const props = defineProps<{
6
+ entries?: PluginFeatureCard[]
7
+ note?: string
8
+ title?: string
9
+ }>()
10
+
11
+ defineComponentJson({
12
+ component: true,
13
+ styleIsolation: 'apply-shared',
14
+ })
15
+
16
+ const safeEntries = computed(() => props.entries ?? [])
17
+ </script>
18
+
19
+ <template>
20
+ <view class="showcase-card">
21
+ <view class="showcase-card__head">
22
+ <view>
23
+ <text class="showcase-card__eyebrow">
24
+ plugin public component
25
+ </text>
26
+ <text class="showcase-card__title">
27
+ {{ props.title || '插件公开 Vue SFC 组件' }}
28
+ </text>
29
+ </view>
30
+ <text class="showcase-card__count">
31
+ {{ safeEntries.length }} items
32
+ </text>
33
+ </view>
34
+
35
+ <text v-if="props.note" class="showcase-card__note">
36
+ {{ props.note }}
37
+ </text>
38
+
39
+ <view class="showcase-card__list">
40
+ <view
41
+ v-for="entry in safeEntries"
42
+ :key="entry.id"
43
+ class="showcase-card__item"
44
+ >
45
+ <view class="showcase-card__item-head">
46
+ <text class="showcase-card__item-title">
47
+ {{ entry.title }}
48
+ </text>
49
+ <text class="showcase-card__badge">
50
+ {{ entry.kindLabel }}
51
+ </text>
52
+ </view>
53
+ <text class="showcase-card__item-summary">
54
+ {{ entry.summary }}
55
+ </text>
56
+ <view class="showcase-card__score-row">
57
+ <text class="showcase-card__score-label">
58
+ 完成度
59
+ </text>
60
+ <text class="showcase-card__score-value">
61
+ {{ entry.score }}%
62
+ </text>
63
+ </view>
64
+ </view>
65
+ </view>
66
+ </view>
67
+ </template>
68
+
69
+ <style lang="scss">
70
+ .showcase-card {
71
+ padding: 28rpx;
72
+ margin-top: 24rpx;
73
+ background: linear-gradient(180deg, #fff 0%, #f6f8fc 100%);
74
+ border-radius: 28rpx;
75
+ box-shadow: 0 14rpx 30rpx rgb(63 78 107 / 10%);
76
+
77
+ &__head {
78
+ display: flex;
79
+ gap: 20rpx;
80
+ align-items: flex-start;
81
+ justify-content: space-between;
82
+ }
83
+
84
+ &__eyebrow,
85
+ &__count,
86
+ &__score-label {
87
+ font-size: 22rpx;
88
+ color: #6b778d;
89
+ }
90
+
91
+ &__eyebrow,
92
+ &__title,
93
+ &__note,
94
+ &__item-summary,
95
+ &__item-title,
96
+ &__score-row {
97
+ display: block;
98
+ }
99
+
100
+ &__eyebrow {
101
+ text-transform: uppercase;
102
+ letter-spacing: 2rpx;
103
+ }
104
+
105
+ &__title {
106
+ margin-top: 10rpx;
107
+ font-size: 32rpx;
108
+ font-weight: 700;
109
+ line-height: 1.35;
110
+ color: #1c2e4b;
111
+ }
112
+
113
+ &__note {
114
+ margin-top: 16rpx;
115
+ font-size: 24rpx;
116
+ line-height: 1.7;
117
+ color: #52627f;
118
+ }
119
+
120
+ &__list {
121
+ display: grid;
122
+ gap: 16rpx;
123
+ margin-top: 20rpx;
124
+ }
125
+
126
+ &__item {
127
+ padding: 22rpx;
128
+ background: rgb(255 255 255 / 92%);
129
+ border: 2rpx solid #e7edf8;
130
+ border-radius: 22rpx;
131
+ }
132
+
133
+ &__item-head,
134
+ &__score-row {
135
+ display: flex;
136
+ gap: 16rpx;
137
+ align-items: center;
138
+ justify-content: space-between;
139
+ }
140
+
141
+ &__item-title {
142
+ flex: 1;
143
+ font-size: 28rpx;
144
+ font-weight: 600;
145
+ line-height: 1.45;
146
+ color: #20324d;
147
+ }
148
+
149
+ &__badge {
150
+ padding: 8rpx 16rpx;
151
+ font-size: 22rpx;
152
+ color: #fff;
153
+ background: #203d70;
154
+ border-radius: 999rpx;
155
+ }
156
+
157
+ &__item-summary {
158
+ margin-top: 12rpx;
159
+ font-size: 24rpx;
160
+ line-height: 1.65;
161
+ color: #5c6d89;
162
+ }
163
+
164
+ &__score-row {
165
+ margin-top: 14rpx;
166
+ }
167
+
168
+ &__score-value {
169
+ font-size: 24rpx;
170
+ font-weight: 700;
171
+ color: #1e4f8d;
172
+ }
173
+ }
174
+ </style>
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://vite.icebreaker.top/component.json",
3
+ "component": true,
4
+ "styleIsolation": "apply-shared",
5
+ "usingComponents": {}
6
+ }
@@ -0,0 +1,51 @@
1
+ .native-meter {
2
+ padding: 20rpx;
3
+ margin-top: 12rpx;
4
+ background: linear-gradient(180deg, #fcfdff 0%, #f1f6ff 100%);
5
+ border: 2rpx solid #dfebff;
6
+ border-radius: 22rpx;
7
+
8
+ &__head {
9
+ display: flex;
10
+ gap: 12rpx;
11
+ align-items: center;
12
+ justify-content: space-between;
13
+ }
14
+
15
+ &__label {
16
+ font-size: 24rpx;
17
+ font-weight: 600;
18
+ color: #233a5e;
19
+ }
20
+
21
+ &__value {
22
+ font-size: 23rpx;
23
+ color: #5f6a80;
24
+ }
25
+
26
+ &__track {
27
+ height: 16rpx;
28
+ margin-top: 14rpx;
29
+ overflow: hidden;
30
+ background: #deebff;
31
+ border-radius: 999rpx;
32
+ }
33
+
34
+ &__bar {
35
+ height: 100%;
36
+ border-radius: 999rpx;
37
+ transition: width 0.25s ease;
38
+ }
39
+
40
+ &__bar--neutral {
41
+ background: linear-gradient(90deg, #5f7cff, #4d63dd);
42
+ }
43
+
44
+ &__bar--success {
45
+ background: linear-gradient(90deg, #0d9488, #22c55e);
46
+ }
47
+
48
+ &__bar--danger {
49
+ background: linear-gradient(90deg, #dc2626, #f97316);
50
+ }
51
+ }
@@ -0,0 +1,28 @@
1
+ import type { InferNativeProps, NativeComponent, NativePropType } from 'wevu'
2
+
3
+ type NativeMeterTone = 'neutral' | 'success' | 'danger'
4
+
5
+ const nativeMeterProperties = {
6
+ label: {
7
+ type: String,
8
+ value: '',
9
+ },
10
+ value: {
11
+ type: Number,
12
+ value: 0,
13
+ },
14
+ tone: {
15
+ type: String as NativePropType<NativeMeterTone>,
16
+ value: 'neutral',
17
+ },
18
+ }
19
+
20
+ type NativeMeterProps = InferNativeProps<typeof nativeMeterProperties>
21
+
22
+ Component({
23
+ properties: nativeMeterProperties,
24
+ })
25
+
26
+ const nativeMeter = {} as NativeComponent<NativeMeterProps>
27
+
28
+ export default nativeMeter
@@ -0,0 +1,12 @@
1
+ <view class="native-meter">
2
+ <view class="native-meter__head">
3
+ <text class="native-meter__label">{{label || '插件原生 TS + SCSS 组件'}}</text>
4
+ <text class="native-meter__value">{{value}}%</text>
5
+ </view>
6
+ <view class="native-meter__track">
7
+ <view
8
+ class="native-meter__bar native-meter__bar--{{tone}}"
9
+ style="width: {{value > 100 ? 100 : value < 0 ? 0 : value}}%;"
10
+ />
11
+ </view>
12
+ </view>
@@ -0,0 +1,16 @@
1
+ import { getSharedLoadMessage, SHARED_ANSWER } from '@/shared/shared-data'
2
+ import { getPluginShowcaseSummary, getFeatureCards as getShowcaseCards } from './utils/showcase'
3
+
4
+ export function sayHello() {
5
+ return getSharedLoadMessage('plugin')
6
+ }
7
+
8
+ export const answer = SHARED_ANSWER
9
+
10
+ export function getShowcaseSummary() {
11
+ return getPluginShowcaseSummary()
12
+ }
13
+
14
+ export function getFeatureCards() {
15
+ return getShowcaseCards()
16
+ }
@@ -0,0 +1,332 @@
1
+ <script setup lang="ts">
2
+ import { ref } from 'wevu'
3
+ import { getFeatureCardsByKind, getFeatureKindLabel, getPluginShowcaseSummary, getScoreTone } from '../../utils/showcase'
4
+
5
+ type KindFilter = 'all' | 'vue-sfc' | 'native-ts' | 'scss'
6
+
7
+ const currentKind = ref<KindFilter>('all')
8
+ const score = ref(94)
9
+ const cards = ref(getFeatureCardsByKind('all'))
10
+ const summary = getPluginShowcaseSummary()
11
+ const meterTone = ref(getScoreTone(score.value))
12
+
13
+ definePageJson({
14
+ navigationBarTitleText: '插件 Vue SFC 能力页',
15
+ })
16
+
17
+ const filterOptions = [
18
+ { id: 'all' as KindFilter, label: '全部' },
19
+ { id: 'vue-sfc' as KindFilter, label: getFeatureKindLabel('vue-sfc') },
20
+ { id: 'native-ts' as KindFilter, label: getFeatureKindLabel('native-ts') },
21
+ { id: 'scss' as KindFilter, label: getFeatureKindLabel('scss') },
22
+ ]
23
+
24
+ function selectKind(kind: KindFilter) {
25
+ currentKind.value = kind
26
+ cards.value = getFeatureCardsByKind(kind)
27
+ }
28
+
29
+ function pulseScore() {
30
+ score.value = score.value >= 96 ? 78 : score.value + 6
31
+ meterTone.value = getScoreTone(score.value)
32
+ }
33
+ </script>
34
+
35
+ <template>
36
+ <view class="page">
37
+ <view class="hero">
38
+ <text class="hero__eyebrow">
39
+ plugin vue sfc
40
+ </text>
41
+ <text class="hero__title">
42
+ 插件页直接使用 Vue SFC
43
+ </text>
44
+ <text class="hero__desc">
45
+ 当前页面由 `.vue` 入口产出,同时组合插件内的原生 TS 组件与公开 Vue SFC 组件。
46
+ </text>
47
+ </view>
48
+
49
+ <view class="toolbar">
50
+ <view
51
+ v-for="option in filterOptions"
52
+ :key="option.id"
53
+ class="toolbar__chip"
54
+ :class="currentKind === option.id ? 'toolbar__chip--active' : ''"
55
+ @tap="selectKind(option.id)"
56
+ >
57
+ <text>{{ option.label }}</text>
58
+ </view>
59
+ </view>
60
+
61
+ <view class="overview">
62
+ <text class="overview__title">
63
+ 插件 Vue 页内的数据渲染
64
+ </text>
65
+ <text class="overview__summary">
66
+ {{ summary }}
67
+ </text>
68
+
69
+ <view
70
+ v-for="card in cards"
71
+ :key="card.id"
72
+ class="overview__item"
73
+ >
74
+ <view class="overview__item-head">
75
+ <text class="overview__item-title">
76
+ {{ card.title }}
77
+ </text>
78
+ <text class="overview__badge">
79
+ {{ card.kindLabel }}
80
+ </text>
81
+ </view>
82
+ <text class="overview__item-summary">
83
+ {{ card.summary }}
84
+ </text>
85
+ <text class="overview__item-score">
86
+ 完成度 {{ card.score }}%
87
+ </text>
88
+ </view>
89
+ </view>
90
+
91
+ <view class="panel">
92
+ <text class="panel__title">
93
+ 当前页内的响应式评分条
94
+ </text>
95
+ <view class="meter">
96
+ <view class="meter__head">
97
+ <text class="meter__label">
98
+ Vue SFC Page Score
99
+ </text>
100
+ <text class="meter__value">
101
+ {{ score }}%
102
+ </text>
103
+ </view>
104
+ <view class="meter__track">
105
+ <view
106
+ class="meter__bar"
107
+ :class="`meter__bar--${meterTone}`"
108
+ :style="`width: ${score}%`"
109
+ />
110
+ </view>
111
+ </view>
112
+ <button class="panel__button" @tap="pulseScore">
113
+ 切换页面内评分
114
+ </button>
115
+ </view>
116
+ </view>
117
+ </template>
118
+
119
+ <style lang="scss">
120
+ page {
121
+ min-height: 100%;
122
+ background:
123
+ radial-gradient(circle at top left, rgb(82 188 255 / 20%), transparent 28%),
124
+ linear-gradient(180deg, #eff5ff 0%, #f7fbff 100%);
125
+ }
126
+
127
+ .page {
128
+ padding: 28rpx 24rpx 40rpx;
129
+ }
130
+
131
+ .hero,
132
+ .panel {
133
+ border-radius: 28rpx;
134
+ }
135
+
136
+ .hero {
137
+ padding: 34rpx 32rpx;
138
+ color: #fff;
139
+ background: linear-gradient(135deg, #16315c 0%, #25549c 54%, #34a0a4 100%);
140
+ box-shadow: 0 18rpx 42rpx rgb(31 71 130 / 18%);
141
+
142
+ &__eyebrow,
143
+ &__title,
144
+ &__desc {
145
+ display: block;
146
+ }
147
+
148
+ &__eyebrow {
149
+ font-size: 22rpx;
150
+ text-transform: uppercase;
151
+ letter-spacing: 4rpx;
152
+ opacity: 0.74;
153
+ }
154
+
155
+ &__title {
156
+ margin-top: 12rpx;
157
+ font-size: 40rpx;
158
+ font-weight: 700;
159
+ }
160
+
161
+ &__desc {
162
+ margin-top: 16rpx;
163
+ font-size: 25rpx;
164
+ line-height: 1.75;
165
+ opacity: 0.92;
166
+ }
167
+ }
168
+
169
+ .toolbar {
170
+ display: flex;
171
+ flex-wrap: wrap;
172
+ gap: 14rpx;
173
+ margin-top: 22rpx;
174
+
175
+ &__chip {
176
+ padding: 14rpx 20rpx;
177
+ font-size: 24rpx;
178
+ color: #35527f;
179
+ background: rgb(255 255 255 / 85%);
180
+ border-radius: 999rpx;
181
+ box-shadow: 0 8rpx 18rpx rgb(70 103 157 / 8%);
182
+ }
183
+
184
+ &__chip--active {
185
+ color: #fff;
186
+ background: #214781;
187
+ }
188
+ }
189
+
190
+ .panel {
191
+ padding: 28rpx;
192
+ margin-top: 24rpx;
193
+ background: rgb(255 255 255 / 88%);
194
+ box-shadow: 0 14rpx 28rpx rgb(74 103 146 / 10%);
195
+
196
+ &__title {
197
+ display: block;
198
+ margin-bottom: 12rpx;
199
+ font-size: 30rpx;
200
+ font-weight: 600;
201
+ color: #17335a;
202
+ }
203
+
204
+ &__button {
205
+ margin-top: 18rpx;
206
+ font-size: 26rpx;
207
+ color: #fff;
208
+ background: #1d4f91;
209
+ border-radius: 999rpx;
210
+ }
211
+ }
212
+
213
+ .overview {
214
+ padding: 28rpx;
215
+ margin-top: 24rpx;
216
+ background: rgb(255 255 255 / 92%);
217
+ border-radius: 28rpx;
218
+ box-shadow: 0 12rpx 28rpx rgb(69 96 137 / 10%);
219
+
220
+ &__title,
221
+ &__summary,
222
+ &__item-title,
223
+ &__item-summary,
224
+ &__item-score {
225
+ display: block;
226
+ }
227
+
228
+ &__title {
229
+ font-size: 30rpx;
230
+ font-weight: 600;
231
+ color: #18355f;
232
+ }
233
+
234
+ &__summary {
235
+ margin-top: 12rpx;
236
+ font-size: 24rpx;
237
+ line-height: 1.7;
238
+ color: #566883;
239
+ }
240
+
241
+ &__item {
242
+ padding: 22rpx;
243
+ margin-top: 18rpx;
244
+ background: #fff;
245
+ border: 2rpx solid #e6edf9;
246
+ border-radius: 22rpx;
247
+ }
248
+
249
+ &__item-head {
250
+ display: flex;
251
+ gap: 16rpx;
252
+ align-items: center;
253
+ justify-content: space-between;
254
+ }
255
+
256
+ &__item-title {
257
+ flex: 1;
258
+ font-size: 28rpx;
259
+ font-weight: 600;
260
+ color: #1f314c;
261
+ }
262
+
263
+ &__badge {
264
+ padding: 8rpx 16rpx;
265
+ font-size: 22rpx;
266
+ color: #fff;
267
+ background: #244b87;
268
+ border-radius: 999rpx;
269
+ }
270
+
271
+ &__item-summary {
272
+ margin-top: 12rpx;
273
+ font-size: 24rpx;
274
+ line-height: 1.65;
275
+ color: #5c6d89;
276
+ }
277
+
278
+ &__item-score {
279
+ margin-top: 12rpx;
280
+ font-size: 23rpx;
281
+ font-weight: 600;
282
+ color: #23508d;
283
+ }
284
+ }
285
+
286
+ .meter {
287
+ margin-top: 10rpx;
288
+
289
+ &__head {
290
+ display: flex;
291
+ gap: 16rpx;
292
+ align-items: center;
293
+ justify-content: space-between;
294
+ }
295
+
296
+ &__label,
297
+ &__value {
298
+ font-size: 24rpx;
299
+ color: #21416e;
300
+ }
301
+
302
+ &__value {
303
+ font-weight: 700;
304
+ }
305
+
306
+ &__track {
307
+ height: 16rpx;
308
+ margin-top: 16rpx;
309
+ overflow: hidden;
310
+ background: #dce8fb;
311
+ border-radius: 999rpx;
312
+ }
313
+
314
+ &__bar {
315
+ height: 100%;
316
+ border-radius: 999rpx;
317
+ transition: width 0.25s ease;
318
+ }
319
+
320
+ &__bar--neutral {
321
+ background: linear-gradient(90deg, #5f7cff, #4d63dd);
322
+ }
323
+
324
+ &__bar--success {
325
+ background: linear-gradient(90deg, #0d9488, #22c55e);
326
+ }
327
+
328
+ &__bar--danger {
329
+ background: linear-gradient(90deg, #dc2626, #f97316);
330
+ }
331
+ }
332
+ </style>
@@ -0,0 +1,7 @@
1
+ {
2
+ "navigationBarTitleText": "插件原生 TS 页",
3
+ "usingComponents": {
4
+ "hello-showcase": "../../components/hello-component/index",
5
+ "native-meter": "../../components/native-meter/index"
6
+ }
7
+ }
@@ -0,0 +1,81 @@
1
+ page {
2
+ min-height: 100%;
3
+ background:
4
+ radial-gradient(circle at top right, rgb(255 189 89 / 18%), transparent 26%),
5
+ linear-gradient(180deg, #fff8ec 0%, #fffdf7 100%);
6
+ }
7
+
8
+ .page {
9
+ padding: 28rpx 24rpx 40rpx;
10
+ }
11
+
12
+ .hero,
13
+ .panel {
14
+ border-radius: 28rpx;
15
+ }
16
+
17
+ .hero {
18
+ padding: 34rpx 32rpx;
19
+ color: #fff;
20
+ background: linear-gradient(135deg, #54401f 0%, #8b5a24 55%, #d18c2e 100%);
21
+
22
+ &__eyebrow,
23
+ &__title,
24
+ &__desc {
25
+ display: block;
26
+ }
27
+
28
+ &__eyebrow {
29
+ font-size: 22rpx;
30
+ text-transform: uppercase;
31
+ letter-spacing: 4rpx;
32
+ opacity: 0.74;
33
+ }
34
+
35
+ &__title {
36
+ margin-top: 12rpx;
37
+ font-size: 40rpx;
38
+ font-weight: 700;
39
+ }
40
+
41
+ &__desc {
42
+ margin-top: 16rpx;
43
+ font-size: 25rpx;
44
+ line-height: 1.7;
45
+ opacity: 0.9;
46
+ }
47
+ }
48
+
49
+ .panel {
50
+ padding: 28rpx;
51
+ margin-top: 24rpx;
52
+ background: rgb(255 255 255 / 92%);
53
+ box-shadow: 0 14rpx 30rpx rgb(123 93 38 / 10%);
54
+
55
+ &__title,
56
+ &__line {
57
+ display: block;
58
+ }
59
+
60
+ &__title {
61
+ margin-bottom: 12rpx;
62
+ font-size: 30rpx;
63
+ font-weight: 600;
64
+ color: #61401c;
65
+ }
66
+
67
+ &__line {
68
+ margin-top: 8rpx;
69
+ font-size: 25rpx;
70
+ line-height: 1.7;
71
+ color: #6f5537;
72
+ }
73
+
74
+ &__button {
75
+ margin-top: 18rpx;
76
+ font-size: 26rpx;
77
+ color: #fff;
78
+ background: #8a5721;
79
+ border-radius: 999rpx;
80
+ }
81
+ }