@opendesign-plus/components 0.0.1-rc.16

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 (168) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -0
  2. package/dist/chunk-OElCookieNotice.es.js +281 -0
  3. package/dist/components/OBanner.vue.d.ts +2 -0
  4. package/dist/components/OCookieNotice.vue.d.ts +16 -0
  5. package/dist/components/OFooter.vue.d.ts +25 -0
  6. package/dist/components/OHeader.vue.d.ts +23 -0
  7. package/dist/components/OHeaderMoblie.vue.d.ts +33 -0
  8. package/dist/components/OHeaderSearch.vue.d.ts +692 -0
  9. package/dist/components/OHeaderUser.vue.d.ts +40 -0
  10. package/dist/components/OPlusConfigProvider.vue.d.ts +23 -0
  11. package/dist/components/OSection.vue.d.ts +37 -0
  12. package/dist/components/OSourceCode.vue.d.ts +20 -0
  13. package/dist/components/OThemeSwitcher.vue.d.ts +28 -0
  14. package/dist/components/element-plus/OElCookieNotice.vue.d.ts +31 -0
  15. package/dist/components/element-plus/index.d.ts +2 -0
  16. package/dist/components/events/OEventsApply.vue.d.ts +16 -0
  17. package/dist/components/events/OEventsCalendar.vue.d.ts +5 -0
  18. package/dist/components/events/OEventsList.vue.d.ts +26 -0
  19. package/dist/components/events/config.d.ts +26 -0
  20. package/dist/components/events/index.d.ts +78 -0
  21. package/dist/components/events/types.d.ts +66 -0
  22. package/dist/components/events/utils.d.ts +7 -0
  23. package/dist/components.cjs.js +3 -0
  24. package/dist/components.css +1 -0
  25. package/dist/components.element.cjs.js +1 -0
  26. package/dist/components.element.es.js +4 -0
  27. package/dist/components.es.js +3509 -0
  28. package/dist/index.d.ts +18 -0
  29. package/docs/design.md +27 -0
  30. package/docs/design_banner.md +41 -0
  31. package/docs/design_section.md +27 -0
  32. package/npmcachae/_cacache/content-v2/sha512/bd/56/25079ffb18446953f88fc063c3d6eaf7191772851b8477c118f113b920a7f357b67b9006181af58c9f68b0059b899ad0f2c86fe0a6490958d138cb063afd +1 -0
  33. package/npmcachae/_cacache/index-v5/d8/49/af4c6bb8f580edbd7b6e18db381844403e5f689a9849c5ffcdd2dd95d735 +3 -0
  34. package/npmcachae/_logs/2026-03-17T09_38_12_009Z-debug-0.log +157 -0
  35. package/npmcachae/_logs/2026-03-17T09_38_14_370Z-debug-0.log +157 -0
  36. package/npmcachae/_logs/2026-03-17T09_38_16_516Z-debug-0.log +157 -0
  37. package/npmcachae/_logs/2026-03-17T09_38_18_616Z-debug-0.log +157 -0
  38. package/npmcachae/_logs/2026-03-17T09_38_20_859Z-debug-0.log +157 -0
  39. package/npmcachae/_logs/2026-03-17T09_38_23_182Z-debug-0.log +157 -0
  40. package/npmcachae/_logs/2026-03-17T09_38_25_452Z-debug-0.log +157 -0
  41. package/npmcachae/_logs/2026-03-17T09_38_27_865Z-debug-0.log +157 -0
  42. package/npmcachae/_logs/2026-03-17T09_38_30_082Z-debug-0.log +157 -0
  43. package/npmcachae/_logs/2026-03-17T09_38_32_219Z-debug-0.log +157 -0
  44. package/npmcachae/_logs/2026-03-17T09_38_34_308Z-debug-0.log +157 -0
  45. package/npmcachae/_update-notifier-last-checked +0 -0
  46. package/package.json +53 -0
  47. package/scripts/generate-components-index.js +100 -0
  48. package/src/assets/events/city/default-cover.png +0 -0
  49. package/src/assets/events/city//344/270/212/346/265/267.png +0 -0
  50. package/src/assets/events/city//345/214/227/344/272/254.png +0 -0
  51. package/src/assets/events/city//345/215/227/344/272/254.png +0 -0
  52. package/src/assets/events/city//345/244/251/346/264/245.png +0 -0
  53. package/src/assets/events/city//345/271/277/345/267/236.png +0 -0
  54. package/src/assets/events/city//346/210/220/351/203/275.png +0 -0
  55. package/src/assets/events/city//346/227/240/351/224/241.png +0 -0
  56. package/src/assets/events/city//346/235/255/345/267/236.png +0 -0
  57. package/src/assets/events/city//346/255/246/346/261/211.png +0 -0
  58. package/src/assets/events/city//346/267/261/345/234/2631.png +0 -0
  59. package/src/assets/events/city//346/267/261/345/234/2632.png +0 -0
  60. package/src/assets/events/city//350/213/217/345/267/236.png +0 -0
  61. package/src/assets/events/city//350/245/277/345/256/211.png +0 -0
  62. package/src/assets/events/city//351/203/221/345/267/236.png +0 -0
  63. package/src/assets/events/svg-icons/icon-checked.svg +3 -0
  64. package/src/assets/events/svg-icons/icon-competition.svg +7 -0
  65. package/src/assets/events/svg-icons/icon-events.svg +4 -0
  66. package/src/assets/events/svg-icons/icon-release.svg +4 -0
  67. package/src/assets/events/svg-icons/icon-summit.svg +4 -0
  68. package/src/assets/svg-icons/icon-arrow-left.svg +3 -0
  69. package/src/assets/svg-icons/icon-avatar-line.svg +3 -0
  70. package/src/assets/svg-icons/icon-caret-left.svg +3 -0
  71. package/src/assets/svg-icons/icon-caret-right.svg +3 -0
  72. package/src/assets/svg-icons/icon-chevron-down.svg +3 -0
  73. package/src/assets/svg-icons/icon-chevron-right.svg +3 -0
  74. package/src/assets/svg-icons/icon-close.svg +3 -0
  75. package/src/assets/svg-icons/icon-delete.svg +3 -0
  76. package/src/assets/svg-icons/icon-header-back.svg +3 -0
  77. package/src/assets/svg-icons/icon-header-delete.svg +3 -0
  78. package/src/assets/svg-icons/icon-header-menu.svg +3 -0
  79. package/src/assets/svg-icons/icon-header-person.svg +3 -0
  80. package/src/assets/svg-icons/icon-header-search.svg +4 -0
  81. package/src/assets/svg-icons/icon-locale.svg +3 -0
  82. package/src/assets/svg-icons/icon-log-off.svg +3 -0
  83. package/src/assets/svg-icons/icon-message.svg +3 -0
  84. package/src/assets/svg-icons/icon-moon.svg +3 -0
  85. package/src/assets/svg-icons/icon-outlink.svg +3 -0
  86. package/src/assets/svg-icons/icon-overview.svg +3 -0
  87. package/src/assets/svg-icons/icon-setting.svg +3 -0
  88. package/src/assets/svg-icons/icon-sun.svg +3 -0
  89. package/src/components/OBanner.vue +390 -0
  90. package/src/components/OCookieNotice.vue +423 -0
  91. package/src/components/OFooter.vue +566 -0
  92. package/src/components/OHeader.vue +97 -0
  93. package/src/components/OHeaderMoblie.vue +149 -0
  94. package/src/components/OHeaderSearch.vue +601 -0
  95. package/src/components/OHeaderUser.vue +304 -0
  96. package/src/components/OPlusConfigProvider.vue +32 -0
  97. package/src/components/OSection.vue +178 -0
  98. package/src/components/OSourceCode.vue +153 -0
  99. package/src/components/OThemeSwitcher.vue +108 -0
  100. package/src/components/common/AppAvatar.vue +83 -0
  101. package/src/components/common/ClientOnlyWrapper.ts +21 -0
  102. package/src/components/common/ContentWrapper.vue +85 -0
  103. package/src/components/common/HeaderEulerNav.vue +1118 -0
  104. package/src/components/common/HeaderNavMoblie.vue +344 -0
  105. package/src/components/common/HeaderUbmcNav.vue +597 -0
  106. package/src/components/element-plus/OElCookieNotice.vue +412 -0
  107. package/src/components/element-plus/index.ts +3 -0
  108. package/src/components/events/OEventsApply.vue +487 -0
  109. package/src/components/events/OEventsCalendar.vue +611 -0
  110. package/src/components/events/OEventsList.vue +402 -0
  111. package/src/components/events/config.ts +47 -0
  112. package/src/components/events/index.ts +23 -0
  113. package/src/components/events/npmcachae/_cacache/content-v2/sha512/2c/4f/a4140bfbf374a43f7dfe71880c051f79149cd259fb1a154fb692802c7489ef2317b737e7e690a627714ba19317971f29051b3798c246297b425a626a5b7a +1 -0
  114. package/src/components/events/npmcachae/_cacache/index-v5/8e/86/70dc69f1b1592fe14da10d2516ddfaa609af0cd9054a6ebde664acc6ab12 +2 -0
  115. package/src/components/events/npmcachae/_logs/2026-03-25T09_58_33_134Z-debug-0.log +105 -0
  116. package/src/components/events/npmcachae/_update-notifier-last-checked +0 -0
  117. package/src/components/events/types.ts +80 -0
  118. package/src/components/events/utils.ts +9 -0
  119. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/3e/17/1865217b9acb9f4921c53a09b5c76587cd2ab748beb2699ff6cfb1341d73b1aa56ed91ffc5ab2c9c9b3fbe626103b35d9a79ff29ff6b8cbb8d89755fe1a2 +1 -0
  120. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/a6/15/47bb7552ec9248079e839a5feecc1742d4de19524fdf041cf581701cf4760a5025106036145e279ba193b07c8fa5b07ae3d75f1b6032f0cb2219115b6167 +1 -0
  121. package/src/components/meeting/npmcachae/_cacache/content-v2/sha512/d1/4c/133b32e09c97101a27a07cc4432f94e470cff02d120d21babcea77c3f5cd436793516dc1a8e282ee1a568f923c148b1a48f4a43233462a530d35e8b41c67 +1 -0
  122. package/src/components/meeting/npmcachae/_cacache/index-v5/54/0d/a4909047714a0a7198bb9bd37020992464e47c79a791889919b84d90aab0 +3 -0
  123. package/src/components/meeting/npmcachae/_cacache/index-v5/8e/2b/21a79778e2ac08cf5663baf83cb35f951995a496007eb2e2f7fba54021a4 +3 -0
  124. package/src/components/meeting/npmcachae/_cacache/index-v5/eb/a0/b70c8132e5b57a0f1e129b8cc941796420a9c147c0baa680710083740898 +2 -0
  125. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_54_955Z-debug-0.log +277 -0
  126. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_03_57_842Z-debug-0.log +277 -0
  127. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_00_016Z-debug-0.log +277 -0
  128. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_02_191Z-debug-0.log +277 -0
  129. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_04_425Z-debug-0.log +277 -0
  130. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_06_642Z-debug-0.log +277 -0
  131. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_04_08_826Z-debug-0.log +277 -0
  132. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_36_140Z-debug-0.log +433 -0
  133. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_39_573Z-debug-0.log +433 -0
  134. package/src/components/meeting/npmcachae/_logs/2026-03-20T07_25_42_134Z-debug-0.log +212 -0
  135. package/src/components/meeting/npmcachae/_update-notifier-last-checked +0 -0
  136. package/src/draft/Banner.vue +265 -0
  137. package/src/draft/ButtonCards.vue +106 -0
  138. package/src/draft/Feature.vue +134 -0
  139. package/src/draft/Footer.vue +512 -0
  140. package/src/draft/HorizontalAnchor.vue +165 -0
  141. package/src/draft/ItemSwiper.vue +133 -0
  142. package/src/draft/Logo.vue +141 -0
  143. package/src/draft/LogoCard.vue +75 -0
  144. package/src/draft/LogoV2.vue +19 -0
  145. package/src/draft/MainCard.vue +38 -0
  146. package/src/draft/MultiCard.vue +95 -0
  147. package/src/draft/MultiIconCard.vue +74 -0
  148. package/src/draft/OInfoCard.vue +176 -0
  149. package/src/draft/Process.vue +81 -0
  150. package/src/draft/Section.vue +167 -0
  151. package/src/draft/SingleTabCard.vue +85 -0
  152. package/src/draft/SliderCard.vue +110 -0
  153. package/src/env.d.ts +1 -0
  154. package/src/i18n/en.ts +20 -0
  155. package/src/i18n/index.ts +42 -0
  156. package/src/i18n/zh.ts +14 -0
  157. package/src/index.ts +46 -0
  158. package/src/npmcachae/_cacache/content-v2/sha512/bd/56/25079ffb18446953f88fc063c3d6eaf7191772851b8477c118f113b920a7f357b67b9006181af58c9f68b0059b899ad0f2c86fe0a6490958d138cb063afd +1 -0
  159. package/src/npmcachae/_cacache/index-v5/d8/49/af4c6bb8f580edbd7b6e18db381844403e5f689a9849c5ffcdd2dd95d735 +3 -0
  160. package/src/npmcachae/_logs/2026-03-17T10_53_33_398Z-debug-0.log +156 -0
  161. package/src/npmcachae/_logs/2026-03-17T10_53_35_464Z-debug-0.log +156 -0
  162. package/src/npmcachae/_logs/2026-03-17T10_53_37_852Z-debug-0.log +156 -0
  163. package/src/npmcachae/_update-notifier-last-checked +0 -0
  164. package/src/shared/provide.ts +6 -0
  165. package/src/shims-vue-dompurify-html.d.ts +17 -0
  166. package/src/vue.d.ts +10 -0
  167. package/tsconfig.json +33 -0
  168. package/vite.config.ts +102 -0
@@ -0,0 +1,487 @@
1
+ <script setup lang="ts">
2
+ import { OIcon } from '@opensig/opendesign';
3
+ import IconChecked from '~icons/events/icon-checked.svg';
4
+ import { type EventsApplyPropsT } from './types.ts';
5
+ import { buildVueDompurifyHTMLDirective } from 'vue-dompurify-html';
6
+ import { useTheme } from '@opendesign-plus/composables';
7
+
8
+ const { isDark } = useTheme();
9
+ // 局部注册 v-dompurify-html 指令
10
+ const vDompurifyHtml = buildVueDompurifyHTMLDirective();
11
+
12
+ defineProps<EventsApplyPropsT>();
13
+ </script>
14
+
15
+ <template>
16
+ <div class="o-events-apply">
17
+ <div class="events-apply-grid">
18
+ <template v-for="(step, idx) in steps" :key="idx">
19
+ <!-- 移动端序号(grid第1列) -->
20
+ <div class="timeline-number">
21
+ <div class="number-circle">{{ idx + 1 }}</div>
22
+ </div>
23
+
24
+ <!-- 卡片内容(grid第2列或桌面端正常位置) -->
25
+ <div class="step-item" :class="`step-${idx + 1} ${isDark ? 'is-dark' : ''}`" :style="{}">
26
+ <div class="step-title">
27
+ <div class="step-idx">{{ idx + 1 }}</div>
28
+ <span>{{ step.title }}</span>
29
+ </div>
30
+ <div class="step-desc">
31
+ <div v-if="step.desc" v-dompurify-html="step.desc"></div>
32
+ <slot :name="`step${idx + 1}`"></slot>
33
+ <div class="desc-list-wrapper">
34
+ <div class="desc-list-title" v-if="step.listTitle">{{ step.listTitle }}</div>
35
+ <div class="desc-list-content">
36
+ <div class="desc-list-item" v-for="(item, itemIdx) in step.list" :key="itemIdx">
37
+ <div class="desc-list-item-title">
38
+ <OIcon>
39
+ <IconChecked />
40
+ </OIcon>
41
+ <span>{{ item.title }}</span>
42
+ </div>
43
+ <div class="desc-list-item-desc">{{ item.desc }}</div>
44
+ </div>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ <div
49
+ v-if="step.img"
50
+ class="img-wrapper"
51
+ :style="{
52
+ backgroundImage: `url(${step.img})`,
53
+ }"
54
+ ></div>
55
+ <div
56
+ v-if="step.imgPhone"
57
+ class="img-wrapper-phone"
58
+ :style="{
59
+ backgroundImage: `url(${step.imgPhone})`,
60
+ }"
61
+ ></div>
62
+ </div>
63
+ </template>
64
+ </div>
65
+ </div>
66
+ </template>
67
+
68
+ <style lang="scss">
69
+ .o-events-apply {
70
+ width: 100%;
71
+ // 移动端时间线序号
72
+ .timeline-number {
73
+ display: none; // 桌面端隐藏
74
+ @include respond-to('<=pad_v') {
75
+ display: flex;
76
+ align-items: flex-start;
77
+ padding-top: var(--o-gap-3); // 与 step-title 的 padding 对齐
78
+ position: relative;
79
+ grid-column: 1; // 固定在第1列
80
+
81
+ .number-circle {
82
+ width: 24px;
83
+ height: 24px;
84
+ border-radius: 50%;
85
+ background-color: var(--o-color-primary1);
86
+ color: #fff;
87
+ font-size: 12px;
88
+ line-height: 24px;
89
+ text-align: center;
90
+ font-weight: 400;
91
+ position: relative;
92
+ z-index: 1;
93
+ }
94
+
95
+ // 连接线(伪元素)
96
+ &::after {
97
+ content: '';
98
+ position: absolute;
99
+ left: 11px; // 圆圈中心 (24px / 2 - 1px = 11px)
100
+ top: 44px; // number-circle 下方
101
+ width: 1px;
102
+ --height: var(--o-gap-6);
103
+ height: calc(100% + var(--height) - 40px); // 延伸到下一个元素
104
+ background-color: var(--o-color-control4);
105
+ @include respond-to('laptop') {
106
+ --height: var(--o-gap-5);
107
+ }
108
+ @include respond-to('pad_h') {
109
+ --height: var(--o-gap-4);
110
+ }
111
+ @include respond-to('pad_v') {
112
+ --height: var(--o-gap-5);
113
+ }
114
+ @include respond-to('phone') {
115
+ --height: var(--o-gap-5);
116
+ }
117
+ }
118
+
119
+ // 最后一个序号不显示连接线(倒数第2个子元素,因为最后一个是step-item)
120
+ &:nth-last-child(2)::after {
121
+ display: none;
122
+ }
123
+ }
124
+ }
125
+
126
+ .events-apply-grid {
127
+ display: grid;
128
+ grid-template-columns: repeat(3, 1fr); // 桌面端:3列
129
+ grid-template-rows: repeat(3, auto); // 桌面端:3行
130
+ gap: var(--o-gap-6);
131
+
132
+ @include respond-to('laptop') {
133
+ gap: var(--o-gap-5);
134
+ }
135
+ @include respond-to('pad_h') {
136
+ gap: var(--o-gap-4);
137
+ }
138
+ @include respond-to('pad_v') {
139
+ gap: var(--o-gap-5);
140
+ }
141
+ @include respond-to('phone') {
142
+ gap: var(--o-gap-5);
143
+ }
144
+
145
+ // 移动端:2列布局(序号列 + 内容列)
146
+ @include respond-to('<=pad_v') {
147
+ grid-template-columns: auto 1fr; // 第1列自适应,第2列占满
148
+ grid-template-rows: auto; // 行数自动
149
+ gap: 0 var(--o-gap-3); // 列间距12px,行间距0
150
+ row-gap: var(--o-gap-6); // 行间距
151
+
152
+ @include respond-to('laptop') {
153
+ row-gap: var(--o-gap-5);
154
+ }
155
+ @include respond-to('pad_h') {
156
+ row-gap: var(--o-gap-4);
157
+ }
158
+ @include respond-to('pad_v') {
159
+ row-gap: var(--o-gap-5);
160
+ }
161
+ @include respond-to('phone') {
162
+ row-gap: var(--o-gap-5);
163
+ }
164
+ }
165
+
166
+ .step-item {
167
+ background: var(--o-color-fill2);
168
+ border-radius: var(--o-radius-xs);
169
+ display: flex;
170
+ flex-direction: column; // 垂直排列子元素
171
+ --idx-size: 20px;
172
+ --idx-gap: var(--o-gap-3);
173
+ @include respond-to('laptop') {
174
+ --idx-gap: var(--o-gap-2);
175
+ }
176
+ @include respond-to('pad_h') {
177
+ --idx-gap: var(--o-gap-2);
178
+ }
179
+ // 移动端:强制在第2列显示
180
+ @include respond-to('<=pad_v') {
181
+ grid-column: 2 !important;
182
+ grid-row: auto !important;
183
+ }
184
+
185
+ .step-title {
186
+ font-weight: 600;
187
+ color: var(--o-color-info1);
188
+ margin-bottom: var(--o-gap-4);
189
+ padding: var(--o-gap-5) var(--o-gap-6) 0 var(--o-gap-6);
190
+ display: flex;
191
+ align-items: center;
192
+ @include h2;
193
+ @include respond-to('laptop') {
194
+ margin-bottom: var(--o-gap-3);
195
+ padding: var(--o-gap-4) var(--o-gap-5) 0 var(--o-gap-5);
196
+ }
197
+ @include respond-to('pad_h') {
198
+ margin-bottom: var(--o-gap-2);
199
+ padding: var(--o-gap-3) var(--o-gap-4) 0 var(--o-gap-4);
200
+ }
201
+ @include respond-to('pad_v') {
202
+ margin-bottom: 0;
203
+ padding: var(--o-gap-3) var(--o-gap-4);
204
+ border-bottom: 1px solid var(--o-color-control4);
205
+ @include text1;
206
+ }
207
+ @include respond-to('phone') {
208
+ margin-bottom: 0;
209
+ padding: var(--o-gap-3) var(--o-gap-4);
210
+ border-bottom: 1px solid var(--o-color-control4);
211
+ @include text1;
212
+ }
213
+
214
+ .step-idx {
215
+ margin-right: var(--idx-gap);
216
+ width: var(--idx-size);
217
+ height: var(--idx-size);
218
+ font-size: 12px;
219
+ line-height: 20px;
220
+ border-radius: 50%;
221
+ background-color: var(--o-color-primary1);
222
+ color: #fff;
223
+ text-align: center;
224
+ font-weight: 400;
225
+ @include respond-to('pad_v') {
226
+ display: none;
227
+ }
228
+ @include respond-to('phone') {
229
+ display: none;
230
+ }
231
+ }
232
+ }
233
+
234
+ .step-desc {
235
+ color: var(--o-color-info2);
236
+ padding: 0 var(--o-gap-6) var(--o-gap-4) var(--o-gap-6);
237
+ @include tip1;
238
+ @include respond-to('laptop') {
239
+ padding: 0 var(--o-gap-5) var(--o-gap-3) var(--o-gap-5);
240
+ }
241
+ @include respond-to('pad_h') {
242
+ padding: 0 var(--o-gap-4) var(--o-gap-3) var(--o-gap-4);
243
+ }
244
+ @include respond-to('pad_v') {
245
+ padding: var(--o-gap-3) var(--o-gap-4);
246
+ }
247
+ @include respond-to('phone') {
248
+ padding: var(--o-gap-3) var(--o-gap-4);
249
+ }
250
+
251
+ .desc-list-wrapper {
252
+ @include tip1;
253
+ }
254
+
255
+ .desc-list-title {
256
+ padding-left: calc(var(--idx-size) + var(--idx-gap));
257
+ @include respond-to('<=pad_v') {
258
+ display: none;
259
+ }
260
+ }
261
+
262
+ .desc-list-content {
263
+ .desc-list-item {
264
+ margin-top: var(--o-gap-1);
265
+ font-weight: 400;
266
+ }
267
+
268
+ .desc-list-item-title {
269
+ display: flex;
270
+ align-items: center;
271
+
272
+ .o-icon {
273
+ font-size: 16px;
274
+ margin-right: var(--o-gap-4);
275
+ @include respond-to('laptop') {
276
+ margin-right: var(--o-gap-3);
277
+ }
278
+ @include respond-to('pad_h') {
279
+ margin-right: var(--o-gap-2);
280
+ }
281
+ @include respond-to('pad_v') {
282
+ margin-right: var(--o-gap-2);
283
+ }
284
+ @include respond-to('phone') {
285
+ margin-right: var(--o-gap-2);
286
+ }
287
+ }
288
+
289
+ span {
290
+ font-weight: 600;
291
+ }
292
+ }
293
+
294
+ .desc-list-item-desc {
295
+ font-weight: 400;
296
+ --padding-left: var(--o-gap-4);
297
+ padding-left: calc(var(--o-gap-4) + var(--padding-left));
298
+ color: rgba(255, 255, 255, 0.8);
299
+ @include respond-to('laptop') {
300
+ --padding-left: var(--o-gap-3);
301
+ }
302
+ @include respond-to('pad_h') {
303
+ --padding-left: var(--o-gap-2);
304
+ }
305
+ @include respond-to('pad_v') {
306
+ padding-left: var(--o-gap-5);
307
+ color: var(--o-color-info2);
308
+ }
309
+ @include respond-to('phone') {
310
+ padding-left: var(--o-gap-5);
311
+ color: var(--o-color-info2);
312
+ }
313
+ }
314
+ }
315
+ }
316
+
317
+ .img-wrapper,
318
+ .img-wrapper-phone {
319
+ background-position: center bottom;
320
+ margin-top: auto; // 将元素推到父容器底部
321
+ background-size: contain;
322
+ background-repeat: no-repeat;
323
+ }
324
+
325
+ .img-wrapper {
326
+ @include respond-to('<=pad_v') {
327
+ display: none;
328
+ }
329
+ }
330
+
331
+ .img-wrapper-phone {
332
+ @include respond-to('>pad_v') {
333
+ display: none;
334
+ }
335
+ }
336
+
337
+ &.step-1 {
338
+ .step-desc {
339
+ @include respond-to('>pad_v') {
340
+ padding-bottom: 0;
341
+ }
342
+ }
343
+
344
+ .img-wrapper {
345
+ height: 130px;
346
+ }
347
+
348
+ &.is-dark {
349
+ .img-wrapper {
350
+ opacity: 0.8;
351
+ }
352
+ }
353
+ }
354
+
355
+ &.step-2 {
356
+ .step-desc {
357
+ @include respond-to('>pad_v') {
358
+ padding-bottom: 0;
359
+ }
360
+ }
361
+
362
+ .img-wrapper {
363
+ height: 136px;
364
+ }
365
+
366
+ &.is-dark {
367
+ .img-wrapper {
368
+ opacity: 0.8;
369
+ }
370
+ }
371
+ }
372
+
373
+ &.step-3 {
374
+ @include respond-to('>pad_v') {
375
+ background: linear-gradient(
376
+ 142.13deg,
377
+ color-mix(in srgb, transparent 0%, transparent) 0%,
378
+ color-mix(in srgb, rgba(var(--o-white), 0.6) 60%, transparent) 100%
379
+ ),
380
+ var(--o-color-primary1);
381
+ &.is-dark {
382
+ background: linear-gradient(
383
+ 142.13deg,
384
+ color-mix(in srgb, var(--o-color-primary1) 40%, transparent) 0%,
385
+ color-mix(in srgb, var(--o-color-primary1) 16%, transparent) 100%
386
+ ),
387
+ var(--o-color-fill2);
388
+ }
389
+ .step-idx {
390
+ background-color: #fff;
391
+ color: #000;
392
+ }
393
+ .step-title {
394
+ color: #fff;
395
+ }
396
+ .step-desc {
397
+ color: #fff;
398
+ }
399
+ }
400
+
401
+ .img-wrapper {
402
+ height: 280px;
403
+ --width: var(--o-gap-6);
404
+ width: calc(100% - var(--width) * 2);
405
+ margin-left: auto;
406
+ margin-right: auto;
407
+ @include respond-to('laptop') {
408
+ --width: var(--o-gap-5);
409
+ }
410
+ @include respond-to('pad_h') {
411
+ --width: var(--o-gap-4);
412
+ height: 220px;
413
+ }
414
+ @include respond-to('pad_v') {
415
+ --width: var(--o-gap-5);
416
+ }
417
+ @include respond-to('phone') {
418
+ --width: var(--o-gap-5);
419
+ }
420
+ }
421
+
422
+ .img-wrapper-phone {
423
+ height: 66px;
424
+ width: calc(100% - 24px);
425
+ margin: 0 12px 12px;
426
+ }
427
+ }
428
+
429
+ &.step-4 {
430
+ position: relative;
431
+ padding-right: 292px;
432
+ @include respond-to('pad_h') {
433
+ padding-right: 192px;
434
+ }
435
+ @include respond-to('<=pad_v') {
436
+ padding-right: var(--o-gap-4);
437
+ }
438
+
439
+ .img-wrapper {
440
+ width: 226px;
441
+ height: 116px;
442
+ position: absolute;
443
+ bottom: 0;
444
+ right: 0;
445
+ }
446
+
447
+ &.is-dark {
448
+ .img-wrapper {
449
+ opacity: 0.8;
450
+ }
451
+ }
452
+ }
453
+ }
454
+
455
+ // 卡片1: 第1行第1列
456
+ .step-1 {
457
+ grid-row: 1;
458
+ grid-column: 1;
459
+ }
460
+
461
+ // 卡片2: 第1行第2列
462
+ .step-2 {
463
+ grid-row: 1;
464
+ grid-column: 2;
465
+ }
466
+
467
+ // 卡片3: 跨3行,占据第3列
468
+ .step-3 {
469
+ grid-row: 1 / 4; // 从第1行到第4行(跨3行)
470
+ grid-column: 3;
471
+ }
472
+
473
+ // 卡片4: 第2行,占据第1-2列
474
+ .step-4 {
475
+ grid-row: 2;
476
+ grid-column: 1 / 3; // 从第1列到第3列(占2列)
477
+ }
478
+
479
+ // 卡片5: 第3行,占据第1-2列
480
+ .step-5 {
481
+ grid-row: 3;
482
+ grid-column: 1 / 3;
483
+ }
484
+ }
485
+ }
486
+
487
+ </style>