zan-layer 1.0.4 → 1.0.7
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/README.md +353 -194
- package/lib/index.css +1 -1
- package/lib/zan-layer.js +475 -436
- package/lib/zan-layer.umd.js +1 -1
- package/package.json +1 -1
- package/types/component/Notifiy.vue.d.ts +1 -0
- package/types/component/ZanLayer.vue.d.ts +1 -1
- package/types/utils/index.d.ts +1 -0
package/README.md
CHANGED
|
@@ -1,197 +1,356 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- 🎛️ **完整API** - open、close、msg、confirm、load、drawer、notify、photos、prompt
|
|
16
|
-
|
|
17
|
-
## 📦 安装
|
|
18
|
-
|
|
19
|
-
```bash
|
|
1
|
+
# zan-layer
|
|
2
|
+
|
|
3
|
+
Vue 3 弹层组件库,提供函数式弹层 API 和组件能力,适合中后台常见的消息、确认框、页面层、抽屉、通知、图片预览和输入层。
|
|
4
|
+
|
|
5
|
+
## 适用范围
|
|
6
|
+
|
|
7
|
+
- 通用确认框、消息、加载层
|
|
8
|
+
- 需要承载 Vue 组件内容的页面层 / 抽屉
|
|
9
|
+
- 图片预览、通知消息、输入弹层
|
|
10
|
+
- 希望用统一 API 管理打开、关闭、最大化、最小化、恢复等动作
|
|
11
|
+
|
|
12
|
+
## 安装
|
|
13
|
+
|
|
14
|
+
```bash
|
|
20
15
|
npm install zan-layer
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
样式需要显式引入:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import 'zan-layer/lib/index.css'
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 快速开始
|
|
25
|
+
|
|
26
|
+
### 全局安装
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { createApp } from 'vue'
|
|
29
30
|
import ZanLayer from 'zan-layer'
|
|
30
31
|
import 'zan-layer/lib/index.css'
|
|
31
|
-
|
|
32
|
-
const app = createApp(App)
|
|
33
|
-
app.use(ZanLayer)
|
|
34
|
-
app.mount('#app')
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
32
|
+
|
|
33
|
+
const app = createApp(App)
|
|
34
|
+
app.use(ZanLayer)
|
|
35
|
+
app.mount('#app')
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
安装后:
|
|
39
|
+
|
|
40
|
+
- 注册组件:`<ZanLayer />`
|
|
41
|
+
- 挂载全局方法:`app.config.globalProperties.$layer`
|
|
42
|
+
- 可直接导入函数式 API:`import { layer, zanLayer } from 'zan-layer'`
|
|
43
|
+
|
|
44
|
+
### 直接使用函数式 API
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import { layer } from 'zan-layer'
|
|
48
|
+
|
|
49
|
+
layer.msg('操作成功')
|
|
50
|
+
|
|
51
|
+
layer.confirm('确定要删除吗?', {
|
|
52
|
+
yes: (id: string) => {
|
|
53
|
+
console.log('confirmed')
|
|
54
|
+
layer.close(id)
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 导出内容
|
|
60
|
+
|
|
61
|
+
包对外提供:
|
|
62
|
+
|
|
63
|
+
- 默认导出:`ZanLayerPlugin`
|
|
64
|
+
- 命名导出:`layer`
|
|
65
|
+
- 命名导出:`zanLayer`,与 `layer` 等价
|
|
66
|
+
- 命名导出:`ZanLayer`
|
|
67
|
+
- 类型导出:`LayerProps`、`BtnType`、`ImgListType` 等
|
|
68
|
+
|
|
69
|
+
## 常用方法
|
|
70
|
+
|
|
71
|
+
### `layer.open(options)`
|
|
72
|
+
|
|
73
|
+
通用页面层入口,几乎所有复杂弹层场景都从这里开始。
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
const id = layer.open({
|
|
77
|
+
type: 'page',
|
|
78
|
+
title: '编辑商品',
|
|
79
|
+
content: '这里可以放字符串、VNode 或返回 VNode 的函数',
|
|
80
|
+
area: ['720px', '560px'],
|
|
81
|
+
shadeClose: false,
|
|
82
|
+
maxmin: true,
|
|
83
|
+
resize: true
|
|
84
|
+
})
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### `layer.msg(message, options?)`
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
layer.msg('保存成功', {
|
|
91
|
+
icon: 1,
|
|
92
|
+
time: 2000
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### `layer.confirm(message, options?)`
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
layer.confirm('确定提交吗?', {
|
|
100
|
+
yes: (id: string) => {
|
|
101
|
+
submit()
|
|
102
|
+
layer.close(id)
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### `layer.load(type?, options?)`
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
const loadingId = layer.load(0, {
|
|
111
|
+
shade: true,
|
|
112
|
+
shadeOpacity: '0.3'
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
layer.close(loadingId)
|
|
117
|
+
}, 1500)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### `layer.drawer(options)`
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
layer.drawer({
|
|
124
|
+
title: '筛选条件',
|
|
125
|
+
content: '这里是抽屉内容',
|
|
126
|
+
offset: 'r',
|
|
127
|
+
area: ['420px', '100%']
|
|
128
|
+
})
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### `layer.notify(options)`
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
layer.notify({
|
|
135
|
+
title: '新消息',
|
|
136
|
+
content: '订单已完成支付',
|
|
137
|
+
icon: 1,
|
|
138
|
+
offset: 'rt',
|
|
139
|
+
time: 3000
|
|
140
|
+
})
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### `layer.photos(options)`
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
layer.photos({
|
|
147
|
+
imgList: [
|
|
148
|
+
{ src: '/img/1.jpg', alt: '图片1' },
|
|
149
|
+
{ src: '/img/2.jpg', alt: '图片2' }
|
|
150
|
+
],
|
|
151
|
+
startIndex: 0
|
|
152
|
+
})
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### `layer.prompt(options)`
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
layer.prompt({
|
|
159
|
+
title: '请输入备注',
|
|
160
|
+
formType: 'textarea',
|
|
161
|
+
value: '默认内容',
|
|
162
|
+
maxLength: 100,
|
|
163
|
+
yes: (id: string, value: string) => {
|
|
164
|
+
console.log(value)
|
|
165
|
+
layer.close(id)
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## `LayerProps` 核心字段
|
|
171
|
+
|
|
172
|
+
最常用字段如下:
|
|
173
|
+
|
|
174
|
+
| 字段 | 说明 |
|
|
175
|
+
| --- | --- |
|
|
176
|
+
| `type` | 弹层类型,支持数字和字符串别名 |
|
|
177
|
+
| `title` | 标题,可传字符串、VNode、返回 VNode 的函数,传 `false` 可隐藏 |
|
|
178
|
+
| `footer` | 底部区域内容 |
|
|
179
|
+
| `content` | 主体内容,支持字符串、VNode、函数 |
|
|
180
|
+
| `area` | 宽高,如 `'560px'` 或 `['720px', '560px']` |
|
|
181
|
+
| `offset` | 位置,如 `'r'`、`'rt'`、`'auto'` 或坐标数组 |
|
|
182
|
+
| `shade` | 是否显示遮罩 |
|
|
183
|
+
| `shadeClose` | 点击遮罩是否关闭 |
|
|
184
|
+
| `shadeOpacity` | 遮罩透明度 |
|
|
185
|
+
| `move` | 是否允许拖拽 |
|
|
186
|
+
| `resize` | 是否允许右下角拉伸 |
|
|
187
|
+
| `maxmin` | 是否显示最大化/最小化按钮 |
|
|
188
|
+
| `closeBtn` | 是否显示关闭按钮 |
|
|
189
|
+
| `btn` | 自定义底部按钮 |
|
|
190
|
+
| `btnAlign` | 底部按钮对齐方式 |
|
|
191
|
+
| `anim` | 入场动画 |
|
|
192
|
+
| `isOutAnim` | 是否启用退场动画 |
|
|
193
|
+
| `icon` | 消息/通知图标 |
|
|
194
|
+
| `time` | 自动关闭时间,毫秒 |
|
|
195
|
+
| `zIndex` | 层级 |
|
|
196
|
+
| `appContext` | 函数式渲染时复用宿主 Vue app 上下文 |
|
|
197
|
+
|
|
198
|
+
## 弹层类型
|
|
199
|
+
|
|
200
|
+
`type` 支持数字和字符串两套写法:
|
|
201
|
+
|
|
202
|
+
- `0` / `'dialog'`
|
|
203
|
+
- `1` / `'page'`
|
|
204
|
+
- `2` / `'iframe'`
|
|
205
|
+
- `3` / `'loading'`
|
|
206
|
+
- `4` / `'drawer'`
|
|
207
|
+
- `5` / `'photos'`
|
|
208
|
+
- `6` / `'notify'`
|
|
209
|
+
- `7` / `'prompt'`
|
|
210
|
+
|
|
211
|
+
## 在 Vue 组件中承载真实组件内容
|
|
212
|
+
|
|
213
|
+
这是中后台里最常见的用法。`content` 推荐直接传 VNode,且把 `appContext` 一起带上,避免丢失注入、全局组件或 UI 库上下文。
|
|
214
|
+
|
|
215
|
+
```ts
|
|
216
|
+
import { getCurrentInstance, h } from 'vue'
|
|
217
|
+
import { layer } from 'zan-layer'
|
|
218
|
+
import EditForm from './EditForm.vue'
|
|
219
|
+
|
|
220
|
+
const instance = getCurrentInstance()
|
|
221
|
+
|
|
222
|
+
layer.open({
|
|
223
|
+
type: 'page',
|
|
224
|
+
title: '编辑商品',
|
|
225
|
+
area: ['880px', '620px'],
|
|
226
|
+
resize: true,
|
|
227
|
+
maxmin: true,
|
|
228
|
+
appContext: instance?.appContext,
|
|
229
|
+
content: h(EditForm, {
|
|
230
|
+
productId: 1001
|
|
231
|
+
})
|
|
232
|
+
})
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
如果你需要在关闭时拿到实例 ID,推荐先接住 `open()` 返回值:
|
|
236
|
+
|
|
237
|
+
```ts
|
|
238
|
+
const layerId = layer.open({
|
|
239
|
+
title: '详情',
|
|
240
|
+
appContext: instance?.appContext,
|
|
241
|
+
content: h(DetailPanel, {
|
|
242
|
+
onClose: () => layer.close(layerId)
|
|
243
|
+
})
|
|
244
|
+
})
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## 自定义按钮
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
layer.open({
|
|
251
|
+
title: '批量操作',
|
|
252
|
+
content: '确认执行吗?',
|
|
253
|
+
btnAlign: 'r',
|
|
254
|
+
btn: [
|
|
255
|
+
{
|
|
256
|
+
text: '取消',
|
|
257
|
+
callback: id => layer.close(id)
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
text: '确认',
|
|
261
|
+
type: 'primary',
|
|
262
|
+
callback: id => {
|
|
263
|
+
runAction()
|
|
264
|
+
layer.close(id)
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
})
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
`BtnType` 支持:
|
|
272
|
+
|
|
273
|
+
- `text`
|
|
274
|
+
- `type`
|
|
275
|
+
- `style`
|
|
276
|
+
- `class`
|
|
277
|
+
- `disabled`
|
|
278
|
+
- `callback`
|
|
279
|
+
|
|
280
|
+
## 生命周期和交互回调
|
|
281
|
+
|
|
282
|
+
### 常用业务回调
|
|
283
|
+
|
|
284
|
+
- `success`
|
|
285
|
+
- `end`
|
|
286
|
+
- `yes`
|
|
287
|
+
- `beforeClose`
|
|
288
|
+
- `close`
|
|
289
|
+
|
|
290
|
+
### 拖拽 / 缩放回调
|
|
291
|
+
|
|
292
|
+
- `moveStart`
|
|
293
|
+
- `moving`
|
|
294
|
+
- `moveEnd`
|
|
295
|
+
- `resizeStart`
|
|
296
|
+
- `resizing`
|
|
297
|
+
- `resizeEnd`
|
|
298
|
+
|
|
299
|
+
示例:
|
|
300
|
+
|
|
301
|
+
```ts
|
|
302
|
+
layer.open({
|
|
303
|
+
title: '可拖拽窗口',
|
|
304
|
+
content: '拖动后记录位置',
|
|
305
|
+
move: true,
|
|
306
|
+
resize: true,
|
|
307
|
+
moveEnd: (id, options) => {
|
|
308
|
+
console.log(id, options.left, options.top)
|
|
309
|
+
},
|
|
310
|
+
resizeEnd: (id, options) => {
|
|
311
|
+
console.log(id, options.width, options.height)
|
|
312
|
+
}
|
|
313
|
+
})
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## 控制方法
|
|
317
|
+
|
|
318
|
+
打开后可通过实例 ID 做控制:
|
|
319
|
+
|
|
320
|
+
- `layer.close(id)`
|
|
321
|
+
- `layer.closeAll()`
|
|
322
|
+
- `layer.reset(id)`
|
|
323
|
+
- `layer.min(id)`
|
|
324
|
+
- `layer.full(id)`
|
|
325
|
+
- `layer.revert(id)`
|
|
326
|
+
|
|
327
|
+
## 安装选项
|
|
328
|
+
|
|
329
|
+
插件安装时支持传入自定义 `zIndex`:
|
|
330
|
+
|
|
331
|
+
```ts
|
|
332
|
+
app.use(ZanLayer, {
|
|
333
|
+
zIndex: 3000
|
|
334
|
+
})
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## 使用建议
|
|
338
|
+
|
|
339
|
+
- 页面层、抽屉、复杂表单弹层优先走 `layer.open()` / `layer.drawer()`
|
|
340
|
+
- 函数式打开 Vue 组件时,优先传 `appContext`
|
|
341
|
+
- 通知和消息属于短生命周期,不要把复杂交互塞进 `notify` / `msg`
|
|
342
|
+
- 如果你有统一视觉规范,建议在宿主项目里覆盖 `layerClasses` 或 `contentClass`
|
|
343
|
+
|
|
344
|
+
## 边界与限制
|
|
345
|
+
|
|
346
|
+
- 当前主打浏览器端函数式弹层,不是 SSR 优先组件
|
|
347
|
+
- `content` 是字符串时只做内容渲染,不会自动编译成 Vue 模板
|
|
348
|
+
- 需要复杂表单、表格、图表内容时,推荐传真实 VNode,而不是大段 HTML 字符串
|
|
349
|
+
|
|
350
|
+
## 开发命令
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
npm run dev
|
|
354
|
+
npm run build
|
|
355
|
+
npm run acceptance:smoke
|
|
356
|
+
```
|
package/lib/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.zan-icon-btn[data-v-8d683fcb]{position:relative;width:20px;height:20px;display:inline-block;cursor:pointer;color:#333;font-style:normal;text-align:center;padding:2px}.zan-icon-btn[data-v-8d683fcb]:hover{color:var(--global-primary-color)}.zan-tooltip[data-v-8d683fcb]{position:absolute;bottom:-32px;left:50%;transform:translate(-50%);padding:4px 8px;background-color:#000000bf;color:#fff;font-size:12px;white-space:nowrap;border-radius:4px;pointer-events:none;opacity:0;transition:opacity .3s;z-index:9999}.zan-tooltip[data-v-8d683fcb]:before{content:"";position:absolute;top:-4px;left:50%;transform:translate(-50%);width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(0,0,0,.75)}.zan-icon-btn:hover .zan-tooltip[data-v-8d683fcb]{opacity:1}.zan-icon-min[data-v-8d683fcb]:before{content:"";position:absolute;bottom:8px;left:0;width:16px;height:2px;text-align:center;background-color:currentColor}.zan-icon-max[data-v-8d683fcb]:before{content:"";position:absolute;top:4px;left:4px;width:12px;height:12px;border:2px solid currentColor}.zan-icon-full[data-v-8d683fcb]:before{content:"";position:absolute;top:4px;left:4px;width:12px;height:12px;border:2px solid currentColor}.zan-icon-restore[data-v-8d683fcb]:before{content:"";position:absolute;top:4px;left:4px;width:10px;height:10px;border:2px solid currentColor}.zan-icon-restore[data-v-8d683fcb]:after{content:"";position:absolute;top:6px;left:6px;width:10px;height:10px;border:2px solid currentColor;background:#fff}.zan-icon-close-btn[data-v-8d683fcb]:before,.zan-icon-close-btn[data-v-8d683fcb]:after{content:"";position:absolute;top:50%;left:50%;width:16px;height:2px;background-color:currentColor}.zan-icon-close-btn[data-v-8d683fcb]:before{transform:translate(-50%,-50%) rotate(45deg)}.zan-icon-close-btn[data-v-8d683fcb]:after{transform:translate(-50%,-50%) rotate(-45deg)}.zan-layer-close2[data-v-8d683fcb]:before,.zan-layer-close2[data-v-8d683fcb]:after{width:16px;height:2px}:root{--global-primary-color: #16baaa;--global-border-radius: 2px}.zan-layer-imgbar,.zan-layer-imgtit a,.zan-layer-tab .zan-layer-title span,.zan-layer-title{text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;user-select:none}.zan-layer,.zan-layer-shade{position:absolute;pointer-events:auto}.zan-layer-shade{top:0;left:0;width:100%;height:100%;background-color:#000}.zan-layer{top:0;left:0;display:flex;flex-direction:column;box-shadow:1px 1px 50px #0000004d;background-color:#fff;border-radius:var(--global-border-radius);padding:0;margin:0;will-change:transform,width,height;transform:translateZ(0);backface-visibility:hidden}.zan-layer-close{position:absolute}.zan-layer-content{position:relative;flex:1 1 auto}.zan-layer-dialog .zan-layer-content,.zan-layer-page .zan-layer-content{min-width:200px;min-height:100px}.zan-layer-border{border:1px solid #eeeeee;box-shadow:1px 1px 5px #0003}.zan-layer-btn a,.zan-layer-dialog .zan-layer-ico,.zan-layer-setwin a{display:inline-block;vertical-align:top}.zan-layer-resize{z-index:999999999;position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.zan-layer-resizing,.zan-layer-resizing *,.zan-layer-moving,.zan-layer-moving *{pointer-events:none}.zan-layer-anim{animation-fill-mode:both;animation-duration:.3s}.zan-layer-drawer-anim{animation-duration:.3s;animation-timing-function:cubic-bezier(.7,.3,.1,1)}@keyframes zan-layer-rl{0%{transform:translate3d(100%,0,0);opacity:1}to{transform:translateZ(0);opacity:1}}.zan-layer-anim-rl{animation-name:zan-layer-rl}@keyframes zan-layer-rl-close{0%{transform:translateZ(0)}to{transform:translate3d(100%,0,0)}}.zan-layer-anim-rl-close{animation-name:zan-layer-rl-close}@keyframes zan-layer-lr{0%{transform:translate3d(-100%,0,0);opacity:1}to{transform:translateZ(0);opacity:1}}.zan-layer-anim-lr{animation-name:zan-layer-lr}@keyframes zan-layer-lr-close{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0)}}.zan-layer-anim-lr-close{animation-name:zan-layer-lr-close}@keyframes zan-layer-tb{0%{transform:translate3d(0,-100%,0);opacity:1;animation-timing-function:cubic-bezier(.7,.3,.1,1)}to{transform:translateZ(0);opacity:1;animation-timing-function:cubic-bezier(.7,.3,.1,1)}}.zan-layer-anim-tb{animation-name:zan-layer-tb}@keyframes zan-layer-tb-close{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0)}}.zan-layer-anim-tb-close{animation-name:zan-layer-tb-close}@keyframes zan-layer-bt{0%{transform:translate3d(0,100%,0);opacity:1}to{transform:translateZ(0);opacity:1}}.zan-layer-anim-bt{animation-name:zan-layer-bt}@keyframes zan-layer-bt-close{0%{transform:translateZ(0)}to{transform:translate3d(0,100%,0)}}.zan-layer-anim-bt-close{animation-name:zan-layer-bt-close}@keyframes zan-layer-bounceIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.zan-layer-anim-00{animation-name:zan-layer-bounceIn}@keyframes zan-layer-zoomInDown{0%{opacity:0;transform:scale(.1) translateY(-2000px);animation-timing-function:ease-in-out}60%{opacity:1;transform:scale(.475) translateY(60px);animation-timing-function:ease-out}}.zan-layer-anim-01{animation-name:zan-layer-zoomInDown}@keyframes zan-layer-fadeInUpBig{0%{opacity:0;transform:translateY(2000px)}to{opacity:1;transform:translateY(0)}}.zan-layer-anim-02{animation-name:zan-layer-fadeInUpBig}@keyframes zan-layer-zoomInLeft{0%{opacity:0;transform:scale(.1) translate(-2000px);animation-timing-function:ease-in-out}60%{opacity:1;transform:scale(.475) translate(48px);animation-timing-function:ease-out}}.zan-layer-anim-03{animation-name:zan-layer-zoomInLeft}@keyframes zan-layer-rollIn{0%{opacity:0;transform:translate(-100%) rotate(-120deg)}to{opacity:1;transform:translate(0) rotate(0)}}.zan-layer-anim-04{animation-name:zan-layer-rollIn}@keyframes zan-layer-fadeIn{0%{opacity:0}to{opacity:1}}.zan-layer-anim-05{animation-name:zan-layer-fadeIn}@keyframes zan-layer-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-10px)}20%,40%,60%,80%{transform:translate(10px)}}.zan-layer-anim-06{animation-name:zan-layer-shake}.zan-layer-title{padding:0 100px 0 5px;height:36px;line-height:36px;border-bottom:1px solid #f0f0f0;font-size:14px;color:#333;overflow:hidden;border-radius:2px 2px 0 0;flex-shrink:0}.zan-layer-setwin{position:absolute;right:5px;top:5px;font-size:0;line-height:initial;display:flex;align-items:center;gap:5px}.zan-layer-setwin a{position:relative;width:16px;height:16px;margin-left:0;font-size:12px}.zan-layer-setwin i{position:relative;width:16px;height:16px;margin-left:0;font-size:16px;color:#333;cursor:pointer;transition:color .3s}.zan-layer-setwin i:hover{color:var(--global-primary-color)}.zan-layer-btn{text-align:right;padding:0 5px 5px;pointer-events:auto}.zan-layer-btn a{height:28px;line-height:28px;padding:0 5px;border-radius:var(--global-border-radius);border:1px solid #dedede;background-color:#fff;cursor:pointer;color:#333;font-weight:400;margin-left:5px}.zan-layer-btn-disabled{border-color:#eee!important;background-color:#fbfbfb!important;color:#d2d2d2!important;cursor:not-allowed!important}.zan-layer-btn .zan-layer-btn0{border-color:var(--global-primary-color);background-color:var(--global-primary-color);color:#fff}.zan-layer-btn-l{text-align:left}.zan-layer-btn-c{text-align:center}.zan-layer-dialog{min-width:300px}.zan-layer-dialog .zan-layer-content{position:relative;padding:5px;line-height:22px;word-break:break-all;overflow:hidden;font-size:13px;overflow-x:hidden;overflow-y:auto;color:#333}.zan-layer-msg{min-width:180px;border:1px solid rgba(220,220,220,.5);box-shadow:2px 0 8px #1d232908}.zan-layer-msg .zan-layer-content{padding:10px;text-align:center;line-height:22px;font-size:13px}.zan-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:#0009;color:#fff;border:none}.zan-layer-hui .zan-layer-content{padding:5px;text-align:center;color:#fff}.zan-layer-dialog .zan-layer-padding{padding:5px 5px 5px 50px;text-align:left}.zan-layer-drawer{border-radius:0}.zan-layer-drawer .zan-layer-content,.zan-layer-page .zan-layer-content{position:relative;overflow:auto;padding:5px;color:#333;font-size:13px;line-height:1.5}.zan-layer-drawer .zan-layer-btn,.zan-layer-iframe .zan-layer-btn,.zan-layer-page .zan-layer-btn{padding-top:5px}.zan-layer-iframe iframe{display:block;width:100%;height:100%}.zan-layer-loading{border-radius:100%;background:#000000b3;box-shadow:none;border:none}.zan-layer-loading .zan-layer-content{background:transparent;display:flex;align-items:center;justify-content:center;position:relative;min-width:auto;min-height:auto}.zan-layer-loading0{padding:15px}.zan-layer-loading0 .zan-layer-content{width:60px;height:24px;padding:0}.zan-layer-loading0 .zan-layer-content:after{content:"";position:absolute;width:60px;height:24px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjAiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCA2MCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBmaWxsPSIjZmZmIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI0Ij48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiBkdXI9IjFzIiB2YWx1ZXM9IjA7MTswIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49IjAiLz48L2NpcmNsZT48Y2lyY2xlIGN4PSIzMCIgY3k9IjEyIiByPSI0Ij48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiBkdXI9IjFzIiB2YWx1ZXM9IjA7MTswIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49IjAuMzMzIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iNDgiIGN5PSIxMiIgcj0iNCI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgZHVyPSIxcyIgdmFsdWVzPSIwOzE7MCIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSIwLjY2NiIvPjwvY2lyY2xlPjwvc3ZnPg==) no-repeat center;background-size:contain}.zan-layer-loading1{padding:20px}.zan-layer-loading1 .zan-layer-content{width:40px;height:40px;padding:0}.zan-layer-loading1 .zan-layer-content:after{content:"";position:absolute;width:32px;height:32px;border:3px solid #fff;border-top-color:transparent;border-radius:50%;animation:zan-spin 1s linear infinite}.zan-layer-loading2{padding:20px}.zan-layer-loading2 .zan-layer-content{width:40px;height:40px;padding:0}.zan-layer-loading2 .zan-layer-content:after{content:"";position:absolute;width:32px;height:32px;border:4px solid;border-color:#fff transparent #fff transparent;border-radius:50%;animation:zan-spin 1.2s linear infinite}@keyframes zan-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.zan-layer-photos{background:#000000e6;box-shadow:none;border:none}.zan-layer-photos .zan-layer-content{overflow:hidden;text-align:center;background:transparent}.zan-layer-photos .zan-layer-phimg img{position:relative;width:100%;height:100%;display:inline-block;vertical-align:top;object-fit:contain}.zan-layer-imgnext,.zan-layer-imgprev{position:fixed;top:50%;width:40px;height:60px;margin-top:-30px;outline:0;font-size:40px;color:#fff;text-align:center;line-height:60px;cursor:pointer;text-decoration:none}.zan-layer-imgprev{left:30px}.zan-layer-imgnext{right:30px}.zan-layer-imgbar{position:fixed;left:0;right:0;bottom:0;width:100%;min-height:40px;height:auto;line-height:40px;background-color:#02000059;color:#fff;overflow:hidden;font-size:0;opacity:0;transition:all 1s ease-in-out;display:flex;flex-wrap:wrap;justify-content:center}.zan-layer-imgtit *{display:inline-block;vertical-align:top;font-size:12px}.zan-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.zan-layer-imgtit em{padding-left:5px;font-style:normal}.zan-layer-imgbar .thumb-row{width:100%;display:flex;justify-content:center;align-self:center}.zan-layer-imgbar .thumb-box{width:100px;height:100px;margin:0;display:inline-flex;align-items:center;justify-content:center;position:relative}.zan-layer-imgbar .thumb-box-border{position:absolute;top:0;transition:all .2s ease-in-out;width:100px;height:100px;border:1px solid #5fb878;box-sizing:border-box}.zan-layer-imgbar img{max-width:100%;max-height:100%;object-fit:contain}@keyframes zan-layer-bounceOut{to{opacity:0;transform:scale(.7)}30%{transform:scale(1.05)}0%{transform:scale(1)}}.zan-layer-anim-close{animation-name:zan-layer-bounceOut;animation-fill-mode:both;animation-duration:.2s}.zan-layer-notifiy{border:none;box-shadow:none}.zan-layer-notifiy-wrapper{padding:5px 10px 5px 5px;box-sizing:border-box;background-color:#fff;overflow:hidden;border-radius:4px;border:1px solid #ebeef5;box-shadow:0 2px 8px #0000001a;min-width:280px;max-width:380px;transition:opacity .3s,transform .3s}.zan-layer-notifiy-wrapper .title{font-weight:600;font-size:14px;color:#303133;margin:0;display:flex;align-items:center;gap:8px;line-height:1.4}.zan-layer-notifiy-wrapper .content{font-size:13px;line-height:1.5;margin:8px 0 0;color:#606266;word-break:break-word}.zan-layer-notifiy-wrapper .content img{max-width:100%}.zan-icon-close{cursor:pointer;width:20px;height:20px;position:absolute;top:10px;right:10px;color:#909399;font-style:normal;font-size:16px;line-height:20px;transition:color .3s;display:flex;align-items:center;justify-content:center}.zan-icon-close svg{width:20px;height:20px}.zan-icon-close:hover{color:#333}.zan-layer-notifiy-transition{transition:top .3s ease-in-out,opacity .3s ease-in-out}.zan-layer-notifiy-wrapper .title .zan-icon{display:inline-block;position:inherit;margin:0;transform:scale(1);height:24px!important;width:24px!important;line-height:24px;font-size:16px;flex-shrink:0}.zan-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:50%;text-align:center;line-height:1;font-style:normal;font-size:26px;font-weight:700;flex-shrink:0}.zan-icon-ico1{background-color:#67c23a;color:#fff}.zan-icon-ico1:before{content:"✓"}.zan-icon-ico2{background-color:#f56c6c;color:#fff}.zan-icon-ico2:before{content:"✕"}.zan-icon-ico3{background-color:#e6a23c;color:#fff}.zan-icon-ico3:before{content:"?"}.zan-icon-ico4{background-color:#409eff;color:#fff}.zan-icon-ico4:before{content:"ℹ"}.zan-icon-ico5{background-color:#e6a23c;color:#fff}.zan-icon-ico5:before{content:"☹"}.zan-icon-ico6{background-color:#67c23a;color:#fff}.zan-icon-ico6:before{content:"☺"}.zan-icon-ico7{background-color:#f56c6c;color:#fff}.zan-icon-ico7:before{content:"!"}.zan-icon-ico16{background:transparent}.zan-input,.zan-textarea{width:100%;padding:5px;border:1px solid #ddd;border-radius:var(--global-border-radius);font-size:13px;outline:none;box-sizing:border-box;font-family:inherit}.zan-input:focus,.zan-textarea:focus{border-color:var(--global-primary-color)}.zan-textarea{min-height:80px;resize:vertical;line-height:1.5}.zan-layer-dialog .zan-input,.zan-layer-dialog .zan-textarea{margin-top:8px}.zan-layer-dialog .zan-layer-content>.zan-input,.zan-layer-dialog .zan-layer-content>.zan-textarea{display:block;width:100%}.zan-layer-dialog .zan-layer-content .zan-input,.zan-layer-dialog .zan-layer-content .zan-textarea{width:100%}.zan-layer-msg .zan-icon{margin-right:10px;vertical-align:middle}.zan-layer-msg .zan-layer-content{display:flex;align-items:center;justify-content:center;padding:10px;min-height:48px}.zan-layer-dialog .zan-layer-padding .zan-icon{position:absolute;left:10px;top:10px}.zan-layer.zan-layer-min{z-index:99999}.zan-layer.zan-layer-min .zan-layer-title{cursor:default;-webkit-user-select:none;user-select:none}.zan-layer.zan-layer-min:hover{box-shadow:0 2px 8px #0000004d}.zan-layer.zan-layer-tips{background:transparent!important;box-shadow:none!important;border:none!important;padding:0!important}.zan-layer.zan-layer-tips .zan-layer-content{padding:0!important;min-width:auto!important;min-height:auto!important;background:transparent!important;overflow:visible!important}
|
|
1
|
+
.zan-icon-btn[data-v-a2b66c03]{position:relative;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--zan-layer-header-icon-color, #333);font-style:normal;text-align:center;padding:2px;border-radius:4px;transition:color .2s ease,background-color .2s ease}.zan-icon-btn[data-v-a2b66c03]:hover{color:var(--zan-layer-header-icon-hover-color, var(--global-primary-color, #2563eb));background-color:var(--zan-layer-header-icon-hover-bg, transparent)}.zan-tooltip[data-v-a2b66c03]{position:absolute;bottom:-32px;left:50%;transform:translate(-50%);padding:4px 8px;background-color:#000000bf;color:#fff;font-size:12px;white-space:nowrap;border-radius:4px;pointer-events:none;opacity:0;transition:opacity .3s;z-index:9999}.zan-tooltip[data-v-a2b66c03]:before{content:"";position:absolute;top:-4px;left:50%;transform:translate(-50%);width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(0,0,0,.75)}.zan-icon-btn:hover .zan-tooltip[data-v-a2b66c03]{opacity:1}.zan-icon-min[data-v-a2b66c03]:before{content:"";position:absolute;bottom:8px;left:0;width:16px;height:2px;text-align:center;background-color:currentColor}.zan-icon-max[data-v-a2b66c03]:before{content:"";position:absolute;top:4px;left:4px;width:12px;height:12px;border:2px solid currentColor}.zan-icon-full[data-v-a2b66c03]:before{content:"";position:absolute;top:4px;left:4px;width:12px;height:12px;border:2px solid currentColor}.zan-icon-restore[data-v-a2b66c03]:before{content:"";position:absolute;top:4px;left:4px;width:10px;height:10px;border:2px solid currentColor}.zan-icon-restore[data-v-a2b66c03]:after{content:"";position:absolute;top:6px;left:6px;width:10px;height:10px;border:2px solid currentColor;background:var(--zan-layer-surface-color, white)}.zan-icon-close-btn[data-v-a2b66c03]:before,.zan-icon-close-btn[data-v-a2b66c03]:after{content:"";position:absolute;top:50%;left:50%;width:16px;height:2px;background-color:currentColor}.zan-icon-close-btn[data-v-a2b66c03]:before{transform:translate(-50%,-50%) rotate(45deg)}.zan-icon-close-btn[data-v-a2b66c03]:after{transform:translate(-50%,-50%) rotate(-45deg)}.zan-layer-close2[data-v-a2b66c03]:before,.zan-layer-close2[data-v-a2b66c03]:after{width:16px;height:2px}:root{--global-primary-color: rgb(var(--primary-color, 22 186 170));--global-border-radius: 2px;--zan-layer-surface-color: rgb(var(--container-bg-color, 255 255 255));--zan-layer-text-color: rgb(var(--base-text-color, 51 51 51));--zan-layer-muted-text-color: rgba(var(--base-text-color, 51 51 51), .72);--zan-layer-subtle-text-color: rgba(var(--base-text-color, 51 51 51), .58);--zan-layer-border-color: rgba(var(--base-text-color, 51 51 51), .08);--zan-layer-title-border-color: rgba(var(--base-text-color, 51 51 51), .08);--zan-layer-button-border-color: rgba(var(--base-text-color, 51 51 51), .12);--zan-layer-button-bg: rgba(var(--base-text-color, 51 51 51), .04);--zan-layer-button-text: rgb(var(--base-text-color, 51 51 51));--zan-layer-button-disabled-border-color: rgba(var(--base-text-color, 51 51 51), .08);--zan-layer-button-disabled-bg: rgba(var(--base-text-color, 51 51 51), .03);--zan-layer-button-disabled-text: rgba(var(--base-text-color, 51 51 51), .36);--zan-layer-input-bg: rgba(var(--base-text-color, 51 51 51), .04);--zan-layer-input-border-color: rgba(var(--base-text-color, 51 51 51), .12);--zan-layer-notify-bg: rgb(var(--container-bg-color, 255 255 255));--zan-layer-notify-border-color: rgba(var(--base-text-color, 51 51 51), .08);--zan-layer-notify-title-color: rgb(var(--base-text-color, 48 49 51));--zan-layer-notify-content-color: rgba(var(--base-text-color, 51 51 51), .72);--zan-layer-header-icon-color: rgba(var(--base-text-color, 51 51 51), .68);--zan-layer-header-icon-hover-color: rgb(var(--primary-color, 22 186 170));--zan-layer-header-icon-hover-bg: rgba(var(--primary-color, 22 186 170), .12);--zan-layer-notify-close-color: rgba(var(--base-text-color, 51 51 51), .62);--zan-layer-notify-close-hover-color: rgb(var(--primary-color, 22 186 170));--zan-layer-loading-panel-bg: rgba(15, 23, 42, .84);--zan-layer-loading-indicator-color: #fff;--zan-layer-loading-indicator-muted: rgba(255, 255, 255, .32)}.zan-layer-imgbar,.zan-layer-imgtit a,.zan-layer-tab .zan-layer-title span,.zan-layer-title{text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;user-select:none}.zan-layer,.zan-layer-shade{position:absolute;pointer-events:auto}.zan-layer-shade{top:0;left:0;width:100%;height:100%;background-color:#000}.zan-layer{top:0;left:0;display:flex;flex-direction:column;box-shadow:1px 1px 50px #0000004d;background-color:var(--zan-layer-surface-color);border-radius:var(--global-border-radius);padding:0;margin:0;color:var(--zan-layer-text-color);will-change:transform,width,height;transform:translateZ(0);backface-visibility:hidden}.zan-layer-close{position:absolute}.zan-layer-content{position:relative;flex:1 1 auto}.zan-layer-dialog .zan-layer-content,.zan-layer-page .zan-layer-content{min-width:200px;min-height:100px}.zan-layer-border{border:1px solid var(--zan-layer-border-color);box-shadow:1px 1px 5px #0003}.zan-layer-btn a,.zan-layer-dialog .zan-layer-ico,.zan-layer-setwin a{display:inline-block;vertical-align:top}.zan-layer-resize{z-index:999999999;position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.zan-layer-resizing,.zan-layer-resizing *,.zan-layer-moving,.zan-layer-moving *{pointer-events:none}.zan-layer-anim{animation-fill-mode:both;animation-duration:.3s}.zan-layer-drawer-anim{animation-duration:.3s;animation-timing-function:cubic-bezier(.7,.3,.1,1)}@keyframes zan-layer-rl{0%{transform:translate3d(100%,0,0);opacity:1}to{transform:translateZ(0);opacity:1}}.zan-layer-anim-rl{animation-name:zan-layer-rl}@keyframes zan-layer-rl-close{0%{transform:translateZ(0)}to{transform:translate3d(100%,0,0)}}.zan-layer-anim-rl-close{animation-name:zan-layer-rl-close}@keyframes zan-layer-lr{0%{transform:translate3d(-100%,0,0);opacity:1}to{transform:translateZ(0);opacity:1}}.zan-layer-anim-lr{animation-name:zan-layer-lr}@keyframes zan-layer-lr-close{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0)}}.zan-layer-anim-lr-close{animation-name:zan-layer-lr-close}@keyframes zan-layer-tb{0%{transform:translate3d(0,-100%,0);opacity:1;animation-timing-function:cubic-bezier(.7,.3,.1,1)}to{transform:translateZ(0);opacity:1;animation-timing-function:cubic-bezier(.7,.3,.1,1)}}.zan-layer-anim-tb{animation-name:zan-layer-tb}@keyframes zan-layer-tb-close{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0)}}.zan-layer-anim-tb-close{animation-name:zan-layer-tb-close}@keyframes zan-layer-bt{0%{transform:translate3d(0,100%,0);opacity:1}to{transform:translateZ(0);opacity:1}}.zan-layer-anim-bt{animation-name:zan-layer-bt}@keyframes zan-layer-bt-close{0%{transform:translateZ(0)}to{transform:translate3d(0,100%,0)}}.zan-layer-anim-bt-close{animation-name:zan-layer-bt-close}@keyframes zan-layer-bounceIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.zan-layer-anim-00{animation-name:zan-layer-bounceIn}@keyframes zan-layer-zoomInDown{0%{opacity:0;transform:scale(.1) translateY(-2000px);animation-timing-function:ease-in-out}60%{opacity:1;transform:scale(.475) translateY(60px);animation-timing-function:ease-out}}.zan-layer-anim-01{animation-name:zan-layer-zoomInDown}@keyframes zan-layer-fadeInUpBig{0%{opacity:0;transform:translateY(2000px)}to{opacity:1;transform:translateY(0)}}.zan-layer-anim-02{animation-name:zan-layer-fadeInUpBig}@keyframes zan-layer-zoomInLeft{0%{opacity:0;transform:scale(.1) translate(-2000px);animation-timing-function:ease-in-out}60%{opacity:1;transform:scale(.475) translate(48px);animation-timing-function:ease-out}}.zan-layer-anim-03{animation-name:zan-layer-zoomInLeft}@keyframes zan-layer-rollIn{0%{opacity:0;transform:translate(-100%) rotate(-120deg)}to{opacity:1;transform:translate(0) rotate(0)}}.zan-layer-anim-04{animation-name:zan-layer-rollIn}@keyframes zan-layer-fadeIn{0%{opacity:0}to{opacity:1}}.zan-layer-anim-05{animation-name:zan-layer-fadeIn}@keyframes zan-layer-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-10px)}20%,40%,60%,80%{transform:translate(10px)}}.zan-layer-anim-06{animation-name:zan-layer-shake}.zan-layer-title{padding:0 100px 0 5px;height:36px;line-height:36px;border-bottom:1px solid var(--zan-layer-title-border-color);font-size:14px;color:var(--zan-layer-text-color);overflow:hidden;border-radius:2px 2px 0 0;flex-shrink:0}.zan-layer-setwin{position:absolute;right:5px;top:5px;font-size:0;line-height:initial;display:flex;align-items:center;gap:5px}.zan-layer-setwin a{position:relative;width:16px;height:16px;margin-left:0;font-size:12px}.zan-layer-setwin i{position:relative;width:16px;height:16px;margin-left:0;font-size:16px;color:var(--zan-layer-header-icon-color);cursor:pointer;transition:color .3s,background-color .3s}.zan-layer-setwin i:hover{color:var(--zan-layer-header-icon-hover-color);background-color:var(--zan-layer-header-icon-hover-bg)}.zan-layer-btn{text-align:right;padding:0 5px 5px;pointer-events:auto}.zan-layer-btn a{height:28px;line-height:28px;padding:0 5px;border-radius:var(--global-border-radius);border:1px solid var(--zan-layer-button-border-color);background-color:var(--zan-layer-button-bg);cursor:pointer;color:var(--zan-layer-button-text);font-weight:400;margin-left:5px}.zan-layer-btn-disabled{border-color:var(--zan-layer-button-disabled-border-color)!important;background-color:var(--zan-layer-button-disabled-bg)!important;color:var(--zan-layer-button-disabled-text)!important;cursor:not-allowed!important}.zan-layer-btn .zan-layer-btn0{border-color:var(--global-primary-color);background-color:var(--global-primary-color);color:#fff}.zan-layer-btn-l{text-align:left}.zan-layer-btn-c{text-align:center}.zan-layer-dialog{min-width:300px}.zan-layer-dialog .zan-layer-content{position:relative;padding:5px;line-height:22px;word-break:break-all;overflow:hidden;font-size:13px;overflow-x:hidden;overflow-y:auto;color:var(--zan-layer-text-color)}.zan-layer-msg{min-width:180px;border:1px solid rgba(220,220,220,.5);box-shadow:2px 0 8px #1d232908}.zan-layer-msg .zan-layer-content{padding:10px;text-align:center;line-height:22px;font-size:13px}.zan-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:#0009;color:#fff;border:none}.zan-layer-hui .zan-layer-content{padding:5px;text-align:center;color:#fff}.zan-layer-dialog .zan-layer-padding{padding:5px 5px 5px 50px;text-align:left}.zan-layer-drawer{border-radius:0}.zan-layer-drawer .zan-layer-content,.zan-layer-page .zan-layer-content{position:relative;overflow:auto;padding:5px;color:var(--zan-layer-text-color);font-size:13px;line-height:1.5}.zan-layer-drawer .zan-layer-btn,.zan-layer-iframe .zan-layer-btn,.zan-layer-page .zan-layer-btn{padding-top:5px}.zan-layer-iframe iframe{display:block;width:100%;height:100%}.zan-layer-loading{border-radius:16px;background:var(--zan-layer-loading-panel-bg);box-shadow:none;border:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.zan-layer-loading .zan-layer-content{background:transparent;display:flex;align-items:center;justify-content:center;position:relative;min-width:auto;min-height:auto;overflow:visible}.zan-layer-content.zan-layer-loading0{padding:18px 20px}.zan-layer-content.zan-layer-loading0{width:12px;height:12px;min-width:12px;min-height:12px;padding:0;border-radius:50%;background:var(--zan-layer-loading-indicator-color);animation:zan-loading-dot-center 1s ease-in-out infinite}.zan-layer-content.zan-layer-loading0:before,.zan-layer-content.zan-layer-loading0:after{content:"";position:absolute;top:0;width:12px;height:12px;border-radius:50%;background:var(--zan-layer-loading-indicator-color)}.zan-layer-content.zan-layer-loading0:before{left:-18px;animation:zan-loading-dot-side 1s ease-in-out infinite}.zan-layer-content.zan-layer-loading0:after{right:-18px;animation:zan-loading-dot-side 1s ease-in-out .5s infinite}.zan-layer-content.zan-layer-loading1{padding:20px}.zan-layer-content.zan-layer-loading1{width:36px;height:36px;min-width:36px;min-height:36px;padding:0}.zan-layer-content.zan-layer-loading1:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:3px solid var(--zan-layer-loading-indicator-muted);border-top-color:var(--zan-layer-loading-indicator-color);border-radius:50%;animation:zan-spin 1s linear infinite}.zan-layer-content.zan-layer-loading2{padding:20px}.zan-layer-content.zan-layer-loading2{width:42px;height:42px;min-width:42px;min-height:42px;padding:0}.zan-layer-content.zan-layer-loading2:before,.zan-layer-content.zan-layer-loading2:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%}.zan-layer-content.zan-layer-loading2:before{border:3px solid var(--zan-layer-loading-indicator-muted);animation:zan-loading-pulse 1.4s ease-in-out infinite}.zan-layer-content.zan-layer-loading2:after{top:4px;right:4px;bottom:4px;left:4px;border:3px solid;border-color:var(--zan-layer-loading-indicator-color) transparent var(--zan-layer-loading-indicator-color) transparent;border-radius:50%;animation:zan-spin 1.2s linear infinite}@keyframes zan-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes zan-loading-dot-center{0%,to{transform:scale(.72);opacity:.5}50%{transform:scale(1);opacity:1}}@keyframes zan-loading-dot-side{0%,to{transform:scale(.58);opacity:.35}50%{transform:scale(.9);opacity:.9}}@keyframes zan-loading-pulse{0%,to{transform:scale(.88);opacity:.45}50%{transform:scale(1);opacity:.9}}.zan-layer-photos{background:#000000e6;box-shadow:none;border:none}.zan-layer-photos .zan-layer-content{overflow:hidden;text-align:center;background:transparent}.zan-layer-photos .zan-layer-phimg img{position:relative;width:100%;height:100%;display:inline-block;vertical-align:top;object-fit:contain}.zan-layer-imgnext,.zan-layer-imgprev{position:fixed;top:50%;width:40px;height:60px;margin-top:-30px;outline:0;font-size:40px;color:#fff;text-align:center;line-height:60px;cursor:pointer;text-decoration:none}.zan-layer-imgprev{left:30px}.zan-layer-imgnext{right:30px}.zan-layer-imgbar{position:fixed;left:0;right:0;bottom:0;width:100%;min-height:40px;height:auto;line-height:40px;background-color:#02000059;color:#fff;overflow:hidden;font-size:0;opacity:0;transition:all 1s ease-in-out;display:flex;flex-wrap:wrap;justify-content:center}.zan-layer-imgtit *{display:inline-block;vertical-align:top;font-size:12px}.zan-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.zan-layer-imgtit em{padding-left:5px;font-style:normal}.zan-layer-imgbar .thumb-row{width:100%;display:flex;justify-content:center;align-self:center}.zan-layer-imgbar .thumb-box{width:100px;height:100px;margin:0;display:inline-flex;align-items:center;justify-content:center;position:relative}.zan-layer-imgbar .thumb-box-border{position:absolute;top:0;transition:all .2s ease-in-out;width:100px;height:100px;border:1px solid #5fb878;box-sizing:border-box}.zan-layer-imgbar img{max-width:100%;max-height:100%;object-fit:contain}@keyframes zan-layer-bounceOut{to{opacity:0;transform:scale(.7)}30%{transform:scale(1.05)}0%{transform:scale(1)}}.zan-layer-anim-close{animation-name:zan-layer-bounceOut;animation-fill-mode:both;animation-duration:.2s}.zan-layer-notifiy{border:none;box-shadow:none}.zan-layer-notifiy-wrapper{padding:5px 10px 5px 5px;box-sizing:border-box;background-color:var(--zan-layer-notify-bg);overflow:hidden;border-radius:4px;border:1px solid var(--zan-layer-notify-border-color);box-shadow:0 2px 8px #0000001a;min-width:280px;max-width:380px;transition:opacity .3s,transform .3s}.zan-layer-notifiy-wrapper .title{font-weight:600;font-size:14px;color:var(--zan-layer-notify-title-color);margin:0;display:flex;align-items:center;gap:8px;line-height:1.4}.zan-layer-notifiy-wrapper .content{font-size:13px;line-height:1.5;margin:8px 0 0;color:var(--zan-layer-notify-content-color);word-break:break-word}.zan-layer-notifiy-wrapper .content img{max-width:100%}.zan-icon-close{cursor:pointer;width:20px;height:20px;position:absolute;top:10px;right:10px;color:var(--zan-layer-notify-close-color);font-style:normal;font-size:16px;line-height:20px;transition:color .3s;display:flex;align-items:center;justify-content:center}.zan-icon-close svg{width:20px;height:20px}.zan-icon-close:hover{color:var(--zan-layer-notify-close-hover-color)}.zan-layer-notifiy-transition{transition:top .3s ease-in-out,opacity .3s ease-in-out}.zan-layer-notifiy-wrapper .title .zan-icon{display:inline-block;position:inherit;margin:0;transform:scale(1);height:24px!important;width:24px!important;line-height:24px;font-size:16px;flex-shrink:0}.zan-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:50%;text-align:center;line-height:1;font-style:normal;font-size:26px;font-weight:700;flex-shrink:0}.zan-icon-ico1{background-color:#67c23a;color:#fff}.zan-icon-ico1:before{content:"✓"}.zan-icon-ico2{background-color:#f56c6c;color:#fff}.zan-icon-ico2:before{content:"✕"}.zan-icon-ico3{background-color:#e6a23c;color:#fff}.zan-icon-ico3:before{content:"?"}.zan-icon-ico4{background-color:#409eff;color:#fff}.zan-icon-ico4:before{content:"ℹ"}.zan-icon-ico5{background-color:#e6a23c;color:#fff}.zan-icon-ico5:before{content:"☹"}.zan-icon-ico6{background-color:#67c23a;color:#fff}.zan-icon-ico6:before{content:"☺"}.zan-icon-ico7{background-color:#f56c6c;color:#fff}.zan-icon-ico7:before{content:"!"}.zan-icon-ico16{background:transparent}.zan-input,.zan-textarea{width:100%;padding:5px;border:1px solid var(--zan-layer-input-border-color);border-radius:var(--global-border-radius);font-size:13px;outline:none;box-sizing:border-box;font-family:inherit;background-color:var(--zan-layer-input-bg);color:var(--zan-layer-text-color)}.zan-input:focus,.zan-textarea:focus{border-color:var(--global-primary-color)}.zan-textarea{min-height:80px;resize:vertical;line-height:1.5}.zan-layer-dialog .zan-input,.zan-layer-dialog .zan-textarea{margin-top:8px}.zan-layer-dialog .zan-layer-content>.zan-input,.zan-layer-dialog .zan-layer-content>.zan-textarea{display:block;width:100%}.zan-layer-dialog .zan-layer-content .zan-input,.zan-layer-dialog .zan-layer-content .zan-textarea{width:100%}.zan-layer-msg .zan-icon{margin-right:10px;vertical-align:middle}.zan-layer-msg .zan-layer-content{display:flex;align-items:center;justify-content:center;padding:10px;min-height:48px}.zan-layer-dialog .zan-layer-padding .zan-icon{position:absolute;left:10px;top:10px}.zan-layer.zan-layer-min{z-index:99999}.zan-layer.zan-layer-min .zan-layer-title{cursor:default;-webkit-user-select:none;user-select:none}.zan-layer.zan-layer-min:hover{box-shadow:0 2px 8px #0000004d}.zan-layer.zan-layer-tips{background:transparent!important;box-shadow:none!important;border:none!important;padding:0!important}.zan-layer.zan-layer-tips .zan-layer-content{padding:0!important;min-width:auto!important;min-height:auto!important;background:transparent!important;overflow:visible!important}
|