@nsnanocat/preference-panes 0.8.0 → 0.9.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.
@@ -1,12 +1,12 @@
1
1
  /* 分组列表沿用 Bilibili 设置页的行结构,样式限定在面板内。
2
2
  * Grouped rows follow the Bilibili settings layout, scoped to the panel. */
3
3
  .pp-panel {
4
- --pp-text: #18191c;
5
- --pp-background: #f6f7f8;
6
- --pp-surface: #fff;
7
- --pp-border: #e3e5e7;
8
- --pp-muted: #9499a0;
9
- --pp-accent: #fb7299;
4
+ --pp-text: var(--text1);
5
+ --pp-background: var(--bg2);
6
+ --pp-surface: var(--bg1);
7
+ --pp-border: var(--line_regular);
8
+ --pp-muted: var(--text3);
9
+ --pp-accent: var(--brand_pink);
10
10
  font:
11
11
  15px / 1.5 -apple-system,
12
12
  BlinkMacSystemFont,
@@ -67,7 +67,7 @@
67
67
  width: 44px;
68
68
  flex: none;
69
69
  }
70
- .pp-panel button {
70
+ .pp-panel button:not(.v-toggle) {
71
71
  font: inherit;
72
72
  cursor: pointer;
73
73
  border: 0;
@@ -106,64 +106,15 @@
106
106
  }
107
107
  }
108
108
  .pp-fields,
109
- .pp-choice-page {
109
+ .pp-choice-page,
110
+ .pp-cache-page {
110
111
  position: absolute;
111
112
  inset: 0;
112
113
  overflow: auto;
113
- padding: 12px max(16px, calc((100% - 688px) / 2)) calc(28px + env(safe-area-inset-bottom));
114
+ padding: 12px max(16px, calc((100% - 688px) / 2)) calc(28px + env(safe-area-inset-bottom) + var(--pp-keyboard-height, 0px));
115
+ scroll-padding-bottom: var(--pp-keyboard-height, 0px);
114
116
  background: var(--pp-background);
115
117
  }
116
- .pp-panel .form-group {
117
- margin: 0 0 12px;
118
- }
119
- .pp-panel .form-group__title {
120
- font-size: 12px;
121
- line-height: 17px;
122
- font-weight: 400;
123
- color: var(--pp-muted);
124
- padding-left: 12px;
125
- margin: 12px 0 6px;
126
- }
127
- .pp-panel .form-group__row {
128
- border-radius: 8px;
129
- overflow: hidden;
130
- background: var(--pp-surface);
131
- }
132
- .pp-panel .form-row {
133
- position: relative;
134
- display: flex;
135
- align-items: center;
136
- width: 100%;
137
- min-height: 46px;
138
- padding: 12px;
139
- border: 0;
140
- border-bottom: 1px solid var(--pp-border);
141
- background: var(--pp-surface);
142
- gap: 12px;
143
- }
144
- .pp-panel .form-row:last-child {
145
- border-bottom: 0;
146
- }
147
- .pp-panel .form-row__text {
148
- flex: 1;
149
- min-width: 0;
150
- margin: 0;
151
- display: flex;
152
- flex-direction: column;
153
- }
154
- .pp-panel .form-row__title {
155
- font-size: 15px;
156
- line-height: 22px;
157
- color: var(--pp-text);
158
- text-align: left;
159
- }
160
- .pp-panel .form-row__subtitle {
161
- font-size: 12px;
162
- line-height: 18px;
163
- color: var(--pp-muted);
164
- overflow-wrap: anywhere;
165
- margin-top: 2px;
166
- }
167
118
  .pp-choice-link {
168
119
  display: flex;
169
120
  align-items: center;
@@ -191,60 +142,29 @@
191
142
  font-size: 22px;
192
143
  flex: none;
193
144
  }
194
- .pp-input {
195
- font: inherit;
196
- color: var(--pp-text);
197
- background: var(--pp-surface);
198
- border: 1px solid var(--pp-border);
199
- border-radius: 6px;
200
- padding: 8px;
201
- min-width: 0;
202
- max-width: 45%;
145
+ .pp-editor {
146
+ flex: none;
203
147
  width: 45%;
148
+ min-width: 0;
204
149
  }
205
- select.pp-input {
206
- text-overflow: ellipsis;
207
- font-size: 13px;
150
+ .pp-search {
151
+ width: 100%;
152
+ margin-bottom: 12px;
208
153
  }
209
154
  .pp-panel .pp-multiline {
210
155
  display: block;
211
156
  }
212
- .pp-multiline .pp-input {
213
- max-width: 100%;
157
+ .pp-multiline .pp-editor {
214
158
  width: 100%;
215
159
  margin-top: 10px;
216
160
  }
217
- .pp-switch {
218
- appearance: none;
219
- -webkit-appearance: none;
220
- position: relative;
221
- flex: none;
222
- width: 32px;
223
- height: 20px;
224
- max-width: none;
161
+ .pp-panel [hidden] {
162
+ display: none !important;
163
+ }
164
+ .pp-panel .v-toggle {
225
165
  border: 0;
226
- border-radius: 15px;
227
166
  padding: 0;
228
- background: #c9ccd0;
229
- cursor: pointer;
230
- transition: background 0.2s;
231
- }
232
- .pp-switch::before {
233
- content: "";
234
- position: absolute;
235
- top: 3px;
236
- left: 3px;
237
- width: 14px;
238
- height: 14px;
239
- border-radius: 50%;
240
- background: white;
241
- transition: transform 0.2s;
242
- }
243
- .pp-switch:checked {
244
- background: var(--pp-accent);
245
- }
246
- .pp-switch:checked::before {
247
- transform: translateX(12px);
167
+ flex: none;
248
168
  }
249
169
  .pp-choice {
250
170
  justify-content: space-between;
@@ -283,27 +203,13 @@ select.pp-input {
283
203
  color: inherit;
284
204
  text-decoration: underline;
285
205
  }
286
- .pp-maintenance {
287
- margin-top: 24px;
288
- }
289
- .pp-actions {
290
- display: flex;
291
- flex-wrap: wrap;
292
- gap: 8px;
293
- }
294
- .pp-actions button,
295
206
  .pp-error button {
296
207
  min-height: 44px;
297
208
  padding: 8px 12px;
298
209
  border-radius: 6px;
299
210
  background: var(--pp-surface);
300
211
  }
301
- .pp-panel .pp-danger {
302
- color: #e45656;
303
- }
304
212
  .pp-cache {
305
- max-height: 320px;
306
- overflow: auto;
307
213
  white-space: pre-wrap;
308
214
  overflow-wrap: anywhere;
309
215
  }
@@ -328,29 +234,3 @@ select.pp-input {
328
234
  outline: 2px solid var(--pp-accent);
329
235
  outline-offset: -2px;
330
236
  }
331
- @media (prefers-color-scheme: dark) {
332
- .pp-panel {
333
- --pp-text: #e3e5e7;
334
- --pp-background: #17181a;
335
- --pp-surface: #232427;
336
- --pp-border: #343538;
337
- }
338
- }
339
- :root[data-theme="dark"] .pp-panel {
340
- --pp-text: #e3e5e7;
341
- --pp-background: #17181a;
342
- --pp-surface: #232427;
343
- --pp-border: #343538;
344
- }
345
- :root[data-theme="light"] .pp-panel {
346
- --pp-text: #18191c;
347
- --pp-background: #f6f7f8;
348
- --pp-surface: #fff;
349
- --pp-border: #e3e5e7;
350
- }
351
- @media (prefers-reduced-motion: reduce) {
352
- .pp-panel .pp-switch,
353
- .pp-panel .pp-switch::before {
354
- transition: none;
355
- }
356
- }
@@ -1,5 +1,6 @@
1
+ import { ActionMenu } from "./ActionMenu.mjs";
1
2
  import { createPreferencesClient } from "./client.mjs";
2
- import { errorView, icon, element as node, resourceURL } from "./components.mjs";
3
+ import { errorView, fieldControl, icon, element as node, requestConfirmation, resourceURL } from "./components.mjs";
3
4
  import { Navigation } from "./Navigation.mjs";
4
5
 
5
6
  /**
@@ -20,6 +21,15 @@ export function mountPanel(root, catalog) {
20
21
  back.setAttribute("aria-label", "返回");
21
22
  back.type = "button";
22
23
  const heading = node("h1", "pp-title", title);
24
+ const handlers = new Map();
25
+ const menuItems = [
26
+ { id: "viewCaches", label: "查看缓存" },
27
+ { id: "clearCaches", label: "清空缓存", destructive: true },
28
+ { id: "reset", label: "重置模块", destructive: true },
29
+ ];
30
+ const menu = new ActionMenu(id => runAction(id));
31
+ const trailing = node("span", "pp-nav-spacer");
32
+ trailing.append(menu.element);
23
33
  const brand = node("div", "pp-brand");
24
34
  const logo = node("span", "pp-brand-icon");
25
35
  logo.setAttribute("aria-hidden", "true");
@@ -30,20 +40,26 @@ export function mountPanel(root, catalog) {
30
40
  const toast = node("div", "pp-toast");
31
41
  toast.setAttribute("role", "status");
32
42
  toast.hidden = true;
33
- header.append(back, brand, node("span", "pp-nav-spacer"));
43
+ header.append(back, brand, trailing);
34
44
  shell.append(header, viewport, toast);
35
45
  root.append(shell);
36
46
  // 嵌入模式向宿主发布导航状态,宿主不读取或修改模块内部 DOM。
37
47
  // Embedded mode publishes navigation state without host reads or mutations of the module DOM.
38
48
  const publishNavigation = () => {
49
+ const actions = handlers.size ? menuItems : [];
50
+ menu.update(actions, saving);
39
51
  const frame = window.frameElement;
40
52
  if (!frame?.dataset.preferencePanes) return;
41
53
  frame.dispatchEvent(
42
54
  new frame.ownerDocument.defaultView.CustomEvent("preferencepanes:change", {
43
- detail: { title: heading.textContent, module: catalog.module.module, busy: saving, canGoBack: !back.disabled },
55
+ detail: { title: heading.textContent, module: catalog.module.module, busy: saving, canGoBack: !back.disabled, actions },
44
56
  }),
45
57
  );
46
58
  };
59
+ const onAction = event => {
60
+ if (!saving && handlers.has(event.detail)) runAction(event.detail);
61
+ };
62
+ window.frameElement?.addEventListener("preferencepanes:action", onAction);
47
63
  let timer,
48
64
  navigation,
49
65
  generation = 0,
@@ -83,6 +99,19 @@ export function mountPanel(root, catalog) {
83
99
  }, 2400);
84
100
  };
85
101
  const client = createPreferencesClient({ catalog, notify });
102
+ /**
103
+ * 两种菜单入口共用异步错误处理,包含宿主确认框错误。
104
+ * Share async error handling between both menus, including host-dialog errors.
105
+ * @param {string} id 操作标识 / Action identifier.
106
+ * @returns {Promise<void>} 操作已处理 / Action handled.
107
+ */
108
+ async function runAction(id) {
109
+ try {
110
+ await handlers.get(id)();
111
+ } catch (error) {
112
+ notify({ kind: "error", message: error.message });
113
+ }
114
+ }
86
115
  /**
87
116
  * 打开模块并忽略已过期的异步结果。
88
117
  * Open a module and ignore stale asynchronous results.
@@ -114,6 +143,14 @@ export function mountPanel(root, catalog) {
114
143
  const { definition, values } = client.snapshot(active);
115
144
  heading.textContent = definition.metadata?.name || active;
116
145
  const view = node("section", "pp-fields");
146
+ const search = node("input", "");
147
+ search.type = "search";
148
+ search.placeholder = "搜索设置项";
149
+ search.setAttribute("aria-label", "搜索设置");
150
+ const searchField = fieldControl(search);
151
+ searchField.classList.add("pp-search");
152
+ view.append(searchField);
153
+ const searchRows = [];
117
154
  /**
118
155
  * 挂载后执行的多行高度更新
119
156
  * Textarea sizing callbacks run after mounting.
@@ -188,7 +225,7 @@ export function mountPanel(root, catalog) {
188
225
  const match = /^\[([^\]]+)\]\s*(.*)$/.exec(field.name);
189
226
  const group = match?.[1] ?? "通用";
190
227
  if (!groups.has(group)) {
191
- const section = node("section", "form-group");
228
+ const section = node("section", "form-group form-group--has-title");
192
229
  const rows = node("div", "form-group__row");
193
230
  section.append(node("h2", "form-group__title", group), rows);
194
231
  groups.set(group, rows);
@@ -216,7 +253,7 @@ export function mountPanel(root, catalog) {
216
253
  let eventName = "change";
217
254
  switch (true) {
218
255
  case Boolean(field.options) && field.type !== "array": {
219
- const select = node("select", "pp-input");
256
+ const select = node("select", "");
220
257
  select.setAttribute("aria-label", field.name);
221
258
  field.options.forEach((option, index) => {
222
259
  const item = node("option", "", option.label);
@@ -226,7 +263,7 @@ export function mountPanel(root, catalog) {
226
263
  write = value => {
227
264
  select.selectedIndex = field.options.findIndex(option => option.key === value);
228
265
  };
229
- row.append(select);
266
+ row.append(fieldControl(select));
230
267
  read = () => field.options[select.selectedIndex]?.key;
231
268
  break;
232
269
  }
@@ -272,9 +309,27 @@ export function mountPanel(root, catalog) {
272
309
  };
273
310
  break;
274
311
  }
312
+ case field.type === "boolean": {
313
+ const toggle = node("button", "v-toggle v-toggle--small form-row__toggle");
314
+ toggle.type = "button";
315
+ toggle.setAttribute("role", "switch");
316
+ toggle.setAttribute("aria-label", field.name);
317
+ toggle.append(node("span", "v-toggle__circle"));
318
+ write = value => {
319
+ toggle.setAttribute("aria-checked", String(value === true));
320
+ toggle.classList.toggle("v-toggle--closed", value !== true);
321
+ };
322
+ read = () => toggle.getAttribute("aria-checked") === "true";
323
+ toggle.onclick = () => {
324
+ write(!read());
325
+ toggle.dispatchEvent(new window.Event("change", { bubbles: true }));
326
+ };
327
+ row.append(toggle);
328
+ break;
329
+ }
275
330
  default: {
276
331
  const multiline = field.control === "textarea" || field.type === "array";
277
- const input = node(multiline ? "textarea" : "input", "pp-input");
332
+ const input = node(multiline ? "textarea" : "input", "");
278
333
  if (multiline) row.classList.add("pp-multiline");
279
334
  input.setAttribute("aria-label", field.name);
280
335
  if (field.placeholder) input.placeholder = field.placeholder;
@@ -296,33 +351,23 @@ export function mountPanel(root, catalog) {
296
351
  input.addEventListener("input", grow);
297
352
  growingInputs.push(grow);
298
353
  }
299
- if (field.type === "boolean") {
300
- input.type = "checkbox";
301
- input.classList.add("pp-switch");
302
- input.setAttribute("role", "switch");
303
- write = value => {
304
- input.checked = value === true;
305
- };
306
- read = () => input.checked;
307
- } else {
308
- eventName = "input";
309
- if (!multiline) input.type = field.type === "number" ? "number" : "text";
310
- write = value => {
311
- input.value = field.type === "array" ? JSON.stringify(value ?? []) : (value ?? "");
312
- grow();
313
- };
314
- read = () => {
315
- switch (field.type) {
316
- case "array":
317
- return JSON.parse(input.value);
318
- case "number":
319
- return input.value === "" ? Number.NaN : Number(input.value);
320
- default:
321
- return input.value;
322
- }
323
- };
324
- }
325
- row.append(input);
354
+ eventName = "input";
355
+ if (!multiline) input.type = field.type === "number" ? "number" : "text";
356
+ write = value => {
357
+ input.value = field.type === "array" ? JSON.stringify(value ?? []) : (value ?? "");
358
+ grow();
359
+ };
360
+ read = () => {
361
+ switch (field.type) {
362
+ case "array":
363
+ return JSON.parse(input.value);
364
+ case "number":
365
+ return input.value === "" ? Number.NaN : Number(input.value);
366
+ default:
367
+ return input.value;
368
+ }
369
+ };
370
+ row.append(fieldControl(input, multiline));
326
371
  break;
327
372
  }
328
373
  }
@@ -352,18 +397,25 @@ export function mountPanel(root, catalog) {
352
397
  });
353
398
  if (eventName === "input") inputContainer.addEventListener("compositionend", event => event.target.dispatchEvent(new window.Event("input", { bubbles: true })));
354
399
  groups.get(group).append(row);
400
+ searchRows.push({ row, text: [field.name, field.key, field.description, ...(field.options ?? []).map(option => option.label)].join(" ").toLocaleLowerCase() });
355
401
  }
356
- const maintenance = node("section", "pp-maintenance");
357
- maintenance.append(node("h2", "pp-title", "模块数据"));
358
- const actions = node("div", "pp-actions");
359
- const cacheView = node("button", "", "查看 Caches");
360
- const cacheClear = node("button", "", "清空 Caches");
361
- const reset = node("button", "pp-danger", "重置模块");
402
+ const empty = node("p", "pp-description", "没有匹配的设置项");
403
+ empty.hidden = true;
404
+ empty.setAttribute("role", "status");
405
+ view.append(empty);
406
+ search.oninput = () => {
407
+ const words = search.value.trim().toLocaleLowerCase().split(/\s+/);
408
+ for (const { row, text } of searchRows) row.hidden = !words.every(word => text.includes(word));
409
+ for (const rows of groups.values()) rows.parentElement.hidden = [...rows.children].every(row => row.hidden);
410
+ empty.hidden = searchRows.some(({ row }) => !row.hidden);
411
+ };
412
+ const cachePage = node("section", "pp-cache-page");
362
413
  const output = node("pre", "pp-cache");
363
- output.hidden = true;
414
+ output.textContent = "暂无缓存";
364
415
  output.setAttribute("aria-label", "Caches 内容");
365
- for (const button of [cacheView, cacheClear, reset]) button.type = "button";
366
- cacheView.onclick = () => {
416
+ cachePage.append(output);
417
+ editors.set("$caches", { node: cachePage, title: "缓存" });
418
+ handlers.set("viewCaches", () => {
367
419
  if (saving) return;
368
420
  let value;
369
421
  return perform(
@@ -377,29 +429,25 @@ export function mountPanel(root, catalog) {
377
429
  },
378
430
  () => {
379
431
  output.textContent = value === undefined ? "暂无缓存" : JSON.stringify(value, null, 2);
380
- output.hidden = false;
381
- cacheView.textContent = "刷新 Caches";
432
+ navigation.open("$caches");
382
433
  },
383
434
  );
384
- };
385
- cacheClear.onclick = () => {
435
+ });
436
+ handlers.set("clearCaches", async () => {
386
437
  if (saving) return;
387
- if (!window.confirm(`清空 ${active} 的全部 Caches?`)) return;
438
+ if (!(await requestConfirmation(window, `清空 ${active} 的全部 Caches?`)) || destroyed || saving) return;
388
439
  return perform(
389
440
  () => client.clearCaches(active),
390
441
  () => {
391
442
  output.textContent = "暂无缓存";
392
443
  },
393
444
  );
394
- };
395
- reset.onclick = () => {
445
+ });
446
+ handlers.set("reset", async () => {
396
447
  if (saving) return;
397
- if (!window.confirm(`重置 ${active}?这将删除该模块的 Settings、Caches 和其它持久化数据。`)) return;
448
+ if (!(await requestConfirmation(window, `重置 ${active}?这将删除该模块的 Settings、Caches 和其它持久化数据。`)) || destroyed || saving) return;
398
449
  return perform(() => client.reset(active), controls);
399
- };
400
- actions.append(cacheView, cacheClear, reset);
401
- maintenance.append(actions, output);
402
- view.append(maintenance);
450
+ });
403
451
  navigation?.destroy();
404
452
  navigation = new Navigation(viewport, view, key => editors.get(key)?.node);
405
453
  navigation.addEventListener("change", updateNavigation);
@@ -425,6 +473,8 @@ export function mountPanel(root, catalog) {
425
473
  */
426
474
  destroy() {
427
475
  destroyed = true;
476
+ menu.destroy();
477
+ window.frameElement?.removeEventListener("preferencepanes:action", onAction);
428
478
  navigation?.destroy();
429
479
  generation++;
430
480
  if (active && !saving) client.leave(active);
@@ -0,0 +1,7 @@
1
+ @charset "UTF-8";
2
+ /*!
3
+ * @bilibili/b-style(v4.0.1)
4
+ * @file: b-style.min.css
5
+ * 一套帮助快速交作业的样式库,支持css、less、sass和stylus。
6
+ */
7
+ :root{--b_brand_pink:var(--brand_pink, #FF6699);--b_brand_pink_thin:var(--brand_pink_thin, #FFECF1);--b_brand_blue:var(--brand_blue, #00AEEC);--b_brand_blue_thin:var(--brand_blue_thin, #DFF6FD);--b_stress_red:var(--stress_red, #F85A54);--b_stress_red_thin:var(--stress_red_thin, #FEECEA);--b_success_green:var(--success_green, #2AC864);--b_success_green_thin:var(--success_green_thin, #E4F8EA);--b_operate_orange:var(--operate_orange, #FF7F24);--b_operate_orange_thin:var(--operate_orange_thin, #FFF0E3);--b_pay_yellow:var(--pay_yellow, #FFB027);--b_pay_yellow_thin:var(--pay_yellow_thin, #FFF6E4);--b_bg1:var(--bg1, #FFFFFF);--b_bg2:var(--bg2, #F6F7F8);--b_bg3:var(--bg3, #F1F2F3);--b_bg1_float:var(--bg1_float, #FFFFFF);--b_bg2_float:var(--bg2_float, #F1F2F3);--b_bg3_float:var(--bg3_float, #F1F2F3);--b_graph_bg_thin_float:var(--graph_bg_thin_float, #F6F7F8);--b_graph_bg_regular_float:var(--graph_bg_regular_float, #F1F2F3);--b_text_white:var(--text_white, #FFFFFF);--b_text1:var(--text1, #18191C);--b_text2:var(--text2, #61666D);--b_text3:var(--text3, #9499A0);--b_text4:var(--text4, #C9CCD0);--b_text_link:var(--text_link, #00699D);--b_text_notice:var(--text_notice, #FA9600);--b_line_light:var(--line_light, #F1F2F3);--b_line_regular:var(--line_regular, #E3E5E7);--b_line_bold:var(--line_bold, #C9CCD0);--b_graph_white:var(--graph_white, #FFFFFF);--b_graph_bg_bright:var(--graph_bg_bright, #FFFFFF);--b_graph_bg_thin:var(--graph_bg_thin, #F6F7F8);--b_graph_bg_regular:var(--graph_bg_regular, #F1F2F3);--b_graph_bg_thick:var(--graph_bg_thick, #E3E5E7);--b_graph_weak:var(--graph_weak, #C9CCD0);--b_graph_medium:var(--graph_medium, #9499A0);--b_graph_bold:var(--graph_bold, #61666D);--b_graph_icon:var(--graph_icon, #61666D);--b_shadow:var(--shadow, #000000);--b_text_black:#000000;--bg_cover:rgba(0, 0, 0, 0.25);--xs:5px;--sm:10px;--md:15px;--lg:20px;--xl:25px;--xxl:30px;--br_xs:550px;--br_sm:800px;--br_md:1050px;--br_lg:1300px;--br_xl:1550px;--fs_1:20px;--fs_2:18px;--fs_3:16px;--fs_4:14px;--fs_5:12px;--fs_6:10px;--lh_xs:1;--lh_sm:1.25;--lh_md:1.5;--lh_lg:1.75;--lh_xl:2;--fs_sm_plus:1px;--fs_lg_plus:10px;--b_gutter:16px;--b_gutter_sm:10px;--b_gutter_md:20px;--b_gutter_lg:30px;--b_radius:4px;--b_radius_sm:3px;--b_radius_md:8px;--b_radius_lg:12px;--box_shadow:0 1px 4px rgba(0, 0, 0, 0.2);--box_shadow_sm:0 2px 6px rgba(0, 0, 0, 0.2);--box_shadow_md:0 3px 8px rgba(0, 0, 0, 0.2);--box_shadow_lg:0 4px 10px rgba(0, 0, 0, 0.2);--b_wp_mb:480px;--b_border:1px solid var(--b_line_regular);--b_ft_family:-apple-system,BlinkMacSystemFont,Helvetica Neue,Helvetica,Arial,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif}.hide{display:none!important}.show{display:block!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.float_none{float:none!important}.float_left{float:left!important}.float_right{float:right!important}.clearfix::after,.clearfix::before{content:"";display:table}.clearfix::after{clear:both}.list_style_none{list-style:none!important}.pe_none{pointer-events:none!important}.pe_auto{pointer-events:auto!important}.cs_auto{cursor:auto!important}.cs_none{cursor:none!important}.cs_default{cursor:default!important}.cs_pointer{cursor:pointer!important}.cs_not_allowed{cursor:not-allowed!important}.u_select_auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.u_select_none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.u_select_all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.u_drag_auto{-webkit-user-drag:auto!important}.u_drag_none{-webkit-user-drag:none!important}.u_drag_element{-webkit-user-drag:element!important}.opacity_0{opacity:0!important}.opacity_1{opacity:1!important}.opacity_d25{opacity:.25!important}.opacity_d50{opacity:.5!important}.opacity_d75{opacity:.75!important}.box_shadow{-webkit-box-shadow:var(--box_shadow)!important;box-shadow:var(--box_shadow)!important}.box_shadow_sm{-webkit-box-shadow:var(--box_shadow_sm)!important;box-shadow:var(--box_shadow_sm)!important}.box_shadow_md{-webkit-box-shadow:var(--box_shadow_md)!important;box-shadow:var(--box_shadow_md)!important}.box_shadow_lg{-webkit-box-shadow:var(--box_shadow_lg)!important;box-shadow:var(--box_shadow_lg)!important}.box_shadow_none{-webkit-box-shadow:none!important;box-shadow:none!important}.outline_none{outline:0!important}.object_fit_cover{-o-object-fit:cover!important;object-fit:cover!important}.object_fit_contain{-o-object-fit:contain!important;object-fit:contain!important}.object_fit_fill{-o-object-fit:fill!important;object-fit:fill!important}.object_fit_none{-o-object-fit:none!important;object-fit:none!important}.object_fit_initial{-o-object-fit:initial!important;object-fit:initial!important}.b_full_page{width:100vw;height:100vh;overflow:auto;-webkit-overflow-scrolling:touch}.b_wrapper_mb{width:100%;max-width:var(--b_wp_mb);margin:0 auto}.b_wrapper{width:100vw;padding:0 var(--md)}.b_wrapper_sm{width:100vw;padding:0 var(--sm)}.b_ft_family{font-family:var(--b_ft_family)!important}.bd_0,.bd_none{border:none!important}.bt_0,.bt_none{border-top:none!important}.br_0,.br_none{border-right:none!important}.bb_0,.bb_none{border-bottom:none!important}.bl_0,.bl_none{border-left:none!important}.bd_1{border:var(--b_border)!important}.bt_1{border-top:var(--b_border)!important}.br_1{border-right:var(--b_border)!important}.bb_1{border-bottom:var(--b_border)!important}.bl_1{border-left:var(--b_border)!important}.bw_1{border-width:1px!important}.bw_2{border-width:2px!important}.bw_3{border-width:3px!important}.bw_4{border-width:4px!important}.bw_5{border-width:5px!important}.bc_brand_pink{border-color:var(--b_brand_pink)!important}.bc_brand_blue{border-color:var(--b_brand_blue)!important}.bc_stress_red{border-color:var(--b_stress_red)!important}.bc_success_green{border-color:var(--b_success_green)!important}.bc_operate_orange{border-color:var(--b_operate_orange)!important}.bc_pay_yellow{border-color:var(--b_pay_yellow)!important}.bc_line_light{border-color:var(--b_line_light)!important}.bc_line_regular{border-color:var(--b_line_regular)!important}.bc_line_bold{border-color:var(--b_line_bold)!important}.bc_light{border-color:var(--b_bg1)}.bc_dark{border-color:var(--b_shadow)}.bc_transparent{border-color:transparent!important}.bs_solid{border-style:solid!important}.bs_dashed{border-style:dashed!important}.bs_dotted{border-style:dotted!important}.bs_double{border-style:double!important}.bd_radius{border-radius:var(--b_radius)!important}.bd_radius_0{border-radius:0!important}.bd_radius_sm{border-radius:var(--b_radius_sm)!important}.bd_radius_md{border-radius:var(--b_radius_md)!important}.bd_radius_lg{border-radius:var(--b_radius_lg)!important}.bd_radius_50{border-radius:50%!important}.b_text{color:var(--b_text1);line-height:var(--lh_sm)}.b_text:not(h1,h2,h3,h4,h5,h6){margin:var(--sm) 0;font-size:var(--fs_4);font-weight:400}h1.b_text,h2.b_text,h3.b_text,h4.b_text,h5.b_text,h6.b_text{margin:var(--md) 0 var(--sm);font-weight:700}h1.b_text{font-size:var(--fs_1)}h2.b_text{font-size:var(--fs_2)}h3.b_text{font-size:var(--fs_3)}h4.b_text{font-size:var(--fs_4)}h5.b_text{font-size:var(--fs_5)}h6.b_text{font-size:var(--fs_6)}.brand_pink{color:var(--b_brand_pink)!important}.brand_blue{color:var(--b_brand_blue)!important}.stress_red{color:var(--b_stress_red)!important}.success_green{color:var(--b_success_green)!important}.operate_orange{color:var(--b_operate_orange)!important}.pay_yellow{color:var(--b_pay_yellow)!important}.brand_pink_thin{color:var(--b_brand_pink_thin)!important}.brand_blue_thin{color:var(--b_brand_blue_thin)!important}.stress_red_thin{color:var(--b_stress_red_thin)!important}.success_green_thin{color:var(--b_success_green_thin)!important}.operate_orange_thin{color:var(--b_operate_orange_thin)!important}.pay_yellow_thin{color:var(--b_pay_yellow_thin)!important}.text_white{color:var(--b_text_white)!important}.text_black{color:var(--b_text_black)!important}.text1{color:var(--b_text1)!important}.text2{color:var(--b_text2)!important}.text3{color:var(--b_text3)!important}.text4{color:var(--b_text4)!important}.text_link{color:var(--b_text_link)!important}.text_notice{color:var(--b_text_notice)!important}.graph_white{color:var(--b_graph_white)!important}.graph_weak{color:var(--b_graph_weak)!important}.graph_medium{color:var(--b_graph_medium)!important}.graph_bold{color:var(--b_graph_bold)!important}.graph_icon{color:var(--b_graph_icon)!important}.co_light{color:var(--b_text_white)!important}.co_dark{color:var(--b_text_black)!important}.co_transparent{color:transparent!important}.bg_brand_pink{background:var(--b_brand_pink)!important}.bg_brand_blue{background:var(--b_brand_blue)!important}.bg_stress_red{background:var(--b_stress_red)!important}.bg_success_green{background:var(--b_success_green)!important}.bg_operate_orange{background:var(--b_operate_orange)!important}.bg_pay_yellow{background:var(--b_pay_yellow)!important}.bg_brand_pink_thin{background:var(--b_brand_pink_thin)!important}.bg_brand_blue_thin{background:var(--b_brand_blue_thin)!important}.bg_stress_red_thin{background:var(--b_stress_red_thin)!important}.bg_success_green_thin{background:var(--b_success_green_thin)!important}.bg_operate_orange_thin{background:var(--b_operate_orange_thin)!important}.bg_pay_yellow_thin{background:var(--b_pay_yellow_thin)!important}.bg_bg1{background:var(--b_bg1)!important}.bg_bg2{background:var(--b_bg2)!important}.bg_bg3{background:var(--b_bg3)!important}.bg_bg1_float{background:var(--b_bg1_float)!important}.bg_bg2_float{background:var(--b_bg2_float)!important}.bg_bg3_float{background:var(--b_bg3_float)!important}.bg_graph_bg_bright{background:var(--b_graph_bg_bright)!important}.bg_graph_bg_thin{background:var(--b_graph_bg_thin)!important}.bg_graph_bg_regular{background:var(--b_graph_bg_regular)!important}.bg_graph_bg_thick{background:var(--b_graph_bg_thick)!important}.bg_light{background:var(--b_bg1)!important}.bg_dark{background:var(--b_shadow)!important}.bg_cover{background:var(--bg_cover)!important}.bg_transparent{background:0 0!important}.d_block{display:block!important}.d_inline{display:inline!important}.d_inline_block{display:inline-block!important}.d_flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d_inline_flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d_table{display:table!important}.d_table_row{display:table-row!important}.d_table_cell{display:table-cell!important}.flex_row,.flex_start{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex_center{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex_end{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex_between{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex_around{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.flex_col,.flex_col_start{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex_col_center{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex_col_end{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex_col_between{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex_col_around{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex_inline{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.flex_wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex_nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex_auto{-webkit-box-flex:1!important;-ms-flex:auto!important;flex:auto!important}.flex_shrink_0{-ms-flex-negative:0!important;flex-shrink:0!important}.row_reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.col_reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.wrap_reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify_start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify_center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify_end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify_between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify_around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.items_stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.items_start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.items_center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.items_end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.items_baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.content_stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.content_start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.content_center{-ms-flex-line-pack:center!important;align-content:center!important}.content_end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.content_between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.content_around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.self_stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.self_auto{-ms-flex-item-align:auto!important;align-self:auto!important}.self_start{-ms-flex-item-align:start!important;align-self:flex-start!important}.self_center{-ms-flex-item-align:center!important;align-self:center!important}.self_end{-ms-flex-item-align:end!important;align-self:flex-end!important}.self_baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.order_0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order_n1{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order_1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order_2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order_3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order_4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order_5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order_6{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.order_7{-webkit-box-ordinal-group:8!important;-ms-flex-order:7!important;order:7!important}.order_8{-webkit-box-ordinal-group:9!important;-ms-flex-order:8!important;order:8!important}.order_9{-webkit-box-ordinal-group:10!important;-ms-flex-order:9!important;order:9!important}.order_10{-webkit-box-ordinal-group:11!important;-ms-flex-order:10!important;order:10!important}.order_11{-webkit-box-ordinal-group:12!important;-ms-flex-order:11!important;order:11!important}.order_12{-webkit-box-ordinal-group:13!important;-ms-flex-order:12!important;order:12!important}.ov_visible{overflow:visible!important}.ov_hidden{overflow:hidden!important}.ov_hidden_x{overflow-x:hidden!important}.ov_hidden_y{overflow-y:hidden!important}.ov_auto{overflow:auto!important;-webkit-overflow-scrolling:touch}.ov_auto_x{overflow-x:auto!important;-webkit-overflow-scrolling:touch}.ov_auto_y{overflow-y:auto!important;-webkit-overflow-scrolling:touch}.ov_scroll{overflow:scroll!important;-webkit-overflow-scrolling:touch}.ov_scroll_x{overflow-x:scroll!important;-webkit-overflow-scrolling:touch}.ov_scroll_y{overflow-y:scroll!important;-webkit-overflow-scrolling:touch}.ov_overlay{overflow:overlay!important}.ov_overlay_x{overflow-x:overlay!important}.ov_overlay_y{overflow-y:overlay!important}.p_static{position:static!important}.p_relative{position:relative!important}.p_absolute{position:absolute!important}.p_fixed{position:fixed!important}.p_sticky{position:sticky!important}.p_center{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.p_center_x{position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.p_center_y{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.p_middle{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.p_middle_x{position:absolute;left:0;right:0;margin-left:auto;margin-right:auto}.p_middle_y{position:absolute;top:0;bottom:0;margin-top:auto;margin-bottom:auto}.p_cover{position:absolute;top:0;left:0;width:100%;height:100%}.p_cover_fixed{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.z_index_auto{z-index:auto!important}.z_index_1{z-index:1!important}.z_index_n1{z-index:-1!important}.z_index_999{z-index:999!important}.xy_auto{top:auto!important;right:auto!important;bottom:auto!important;left:auto!important}.xy_0{top:0!important;right:0!important;bottom:0!important;left:0!important}.x_auto{left:auto!important;right:auto!important}.x_0{left:0!important;right:0!important}.y_auto{top:auto!important;bottom:auto!important}.y_0{top:0!important;bottom:0!important}.t_auto{top:auto!important}.t_0{top:0!important}.t_xs{top:var(--xs)!important}.t_sm{top:var(--sm)!important}.t_md{top:var(--md)!important}.t_lg{top:var(--lg)!important}.t_xl{top:var(--xl)!important}.t_xxl{top:var(--xxl)!important}.t_1{top:1px!important}.t_2{top:2px!important}.t_3{top:3px!important}.t_4{top:4px!important}.t_5{top:5px!important}.t_50{top:50%!important}.t_n1{top:-1px!important}.t_n2{top:-2px!important}.t_n3{top:-3px!important}.t_n4{top:-4px!important}.t_n5{top:-5px!important}.t_n50{top:-50%!important}.r_auto{right:auto!important}.r_0{right:0!important}.r_xs{right:var(--xs)!important}.r_sm{right:var(--sm)!important}.r_md{right:var(--md)!important}.r_lg{right:var(--lg)!important}.r_xl{right:var(--xl)!important}.r_xxl{right:var(--xxl)!important}.r_1{right:1px!important}.r_2{right:2px!important}.r_3{right:3px!important}.r_4{right:4px!important}.r_5{right:5px!important}.r_50{right:50%!important}.r_n1{right:-1px!important}.r_n2{right:-2px!important}.r_n3{right:-3px!important}.r_n4{right:-4px!important}.r_n5{right:-5px!important}.r_n50{right:-50%!important}.b_auto{bottom:auto!important}.b_0{bottom:0!important}.b_xs{bottom:var(--xs)!important}.b_sm{bottom:var(--sm)!important}.b_md{bottom:var(--md)!important}.b_lg{bottom:var(--lg)!important}.b_xl{bottom:var(--xl)!important}.b_xxl{bottom:var(--xxl)!important}.b_1{bottom:1px!important}.b_2{bottom:2px!important}.b_3{bottom:3px!important}.b_4{bottom:4px!important}.b_5{bottom:5px!important}.b_50{bottom:50%!important}.b_n1{bottom:-1px!important}.b_n2{bottom:-2px!important}.b_n3{bottom:-3px!important}.b_n4{bottom:-4px!important}.b_n5{bottom:-5px!important}.b_n50{bottom:-50%!important}.l_auto{left:auto!important}.l_0{left:0!important}.l_xs{left:var(--xs)!important}.l_sm{left:var(--sm)!important}.l_md{left:var(--md)!important}.l_lg{left:var(--lg)!important}.l_xl{left:var(--xl)!important}.l_xxl{left:var(--xxl)!important}.l_1{left:1px!important}.l_2{left:2px!important}.l_3{left:3px!important}.l_4{left:4px!important}.l_5{left:5px!important}.l_50{left:50%!important}.l_n1{left:-1px!important}.l_n2{left:-2px!important}.l_n3{left:-3px!important}.l_n4{left:-4px!important}.l_n5{left:-5px!important}.l_n50{left:-50%!important}.w_auto{width:auto!important}.w_0{width:0!important}.w_xs{width:var(--xs)!important}.w_sm{width:var(--sm)!important}.w_md{width:var(--md)!important}.w_lg{width:var(--lg)!important}.w_xl{width:var(--xl)!important}.w_xxl{width:var(--xxl)!important}.w_25{width:25%!important}.w_50{width:50%!important}.w_75{width:75%!important}.w_100{width:100%!important}.w_br_xs{width:var(--br_xs)!important}.w_br_sm{width:var(--br_sm)!important}.w_br_md{width:var(--br_md)!important}.w_br_lg{width:var(--br_lg)!important}.w_br_xl{width:var(--br_xl)!important}.w_25vw{width:25vw!important}.w_50vw{width:50vw!important}.w_75vw{width:75vw!important}.w_100vw{width:100vw!important}.min_w_100{min-width:100%!important}.min_w_100vw{min-width:100vw!important}.min_w_br_xs{min-width:var(--br_xs)!important}.min_w_br_sm{min-width:var(--br_sm)!important}.min_w_br_md{min-width:var(--br_md)!important}.min_w_br_lg{min-width:var(--br_lg)!important}.min_w_br_xl{min-width:var(--br_xl)!important}.max_w_100{max-width:100%!important}.max_w_100vw{max-width:100vw!important}.max_w_br_xs{max-width:var(--br_xs)!important}.max_w_br_sm{max-width:var(--br_sm)!important}.max_w_br_md{max-width:var(--br_md)!important}.max_w_br_lg{max-width:var(--br_lg)!important}.max_w_br_xl{max-width:var(--br_xl)!important}.h_auto{height:auto!important}.h_0{height:0!important}.h_xs{height:var(--xs)!important}.h_sm{height:var(--sm)!important}.h_md{height:var(--md)!important}.h_lg{height:var(--lg)!important}.h_xl{height:var(--xl)!important}.h_xxl{height:var(--xxl)!important}.h_25{height:25%!important}.h_50{height:50%!important}.h_75{height:75%!important}.h_100{height:100%!important}.h_25vh{height:25vh!important}.h_50vh{height:50vh!important}.h_75vh{height:75vh!important}.h_100vh{height:100vh!important}.min_h_100{min-height:100%!important}.min_h_100vh{min-height:100vh!important}.max_h_100{max-height:100%!important}.max_h_100vh{max-height:100vh!important}.mg_0_auto{margin:0 auto!important}.mg_auto{margin:auto!important}.mx_auto{margin-left:auto!important;margin-right:auto!important}.my_auto{margin-top:auto!important;margin-bottom:auto!important}.mg_0{margin:0!important}.mg_xs{margin:var(--xs)!important}.mg_sm{margin:var(--sm)!important}.mg_md{margin:var(--md)!important}.mg_lg{margin:var(--lg)!important}.mg_xl{margin:var(--xl)!important}.mg_xxl{margin:var(--xxl)!important}.mx_0{margin-left:0!important;margin-right:0!important}.mx_xs{margin-left:var(--xs)!important;margin-right:var(--xs)!important}.mx_sm{margin-left:var(--sm)!important;margin-right:var(--sm)!important}.mx_md{margin-left:var(--md)!important;margin-right:var(--md)!important}.mx_lg{margin-left:var(--lg)!important;margin-right:var(--lg)!important}.mx_xl{margin-left:var(--xl)!important;margin-right:var(--xl)!important}.mx_xxl{margin-left:var(--xxl)!important;margin-right:var(--xxl)!important}.my_0{margin-top:0!important;margin-bottom:0!important}.my_xs{margin-top:var(--xs)!important;margin-bottom:var(--xs)!important}.my_sm{margin-top:var(--sm)!important;margin-bottom:var(--sm)!important}.my_md{margin-top:var(--md)!important;margin-bottom:var(--md)!important}.my_lg{margin-top:var(--lg)!important;margin-bottom:var(--lg)!important}.my_xl{margin-top:var(--xl)!important;margin-bottom:var(--xl)!important}.my_xxl{margin-top:var(--xxl)!important;margin-bottom:var(--xxl)!important}.mt_auto{margin-top:auto!important}.mt_0{margin-top:0!important}.mt_xs{margin-top:var(--xs)!important}.mt_sm{margin-top:var(--sm)!important}.mt_md{margin-top:var(--md)!important}.mt_lg{margin-top:var(--lg)!important}.mt_xl{margin-top:var(--xl)!important}.mt_xxl{margin-top:var(--xxl)!important}.mt_1{margin-top:1px!important}.mt_2{margin-top:2px!important}.mt_3{margin-top:3px!important}.mt_4{margin-top:4px!important}.mt_n1{margin-top:-1px!important}.mt_n2{margin-top:-2px!important}.mt_n3{margin-top:-3px!important}.mt_n4{margin-top:-4px!important}.mt_nxs{margin-top:calc(var(--xs) * -1)!important}.mt_nsm{margin-top:calc(var(--sm) * -1)!important}.mt_nmd{margin-top:calc(var(--md) * -1)!important}.mt_nlg{margin-top:calc(var(--lg) * -1)!important}.mt_nxl{margin-top:calc(var(--xl) * -1)!important}.mt_nxxl{margin-top:calc(var(--xxl) * -1)!important}.mr_auto{margin-right:auto!important}.mr_0{margin-right:0!important}.mr_xs{margin-right:var(--xs)!important}.mr_sm{margin-right:var(--sm)!important}.mr_md{margin-right:var(--md)!important}.mr_lg{margin-right:var(--lg)!important}.mr_xl{margin-right:var(--xl)!important}.mr_xxl{margin-right:var(--xxl)!important}.mr_1{margin-right:1px!important}.mr_2{margin-right:2px!important}.mr_3{margin-right:3px!important}.mr_4{margin-right:4px!important}.mr_n1{margin-right:-1px!important}.mr_n2{margin-right:-2px!important}.mr_n3{margin-right:-3px!important}.mr_n4{margin-right:-4px!important}.mr_nxs{margin-right:calc(var(--xs) * -1)!important}.mr_nsm{margin-right:calc(var(--sm) * -1)!important}.mr_nmd{margin-right:calc(var(--md) * -1)!important}.mr_nlg{margin-right:calc(var(--lg) * -1)!important}.mr_nxl{margin-right:calc(var(--xl) * -1)!important}.mr_nxxl{margin-right:calc(var(--xxl) * -1)!important}.mb_auto{margin-bottom:auto!important}.mb_0{margin-bottom:0!important}.mb_xs{margin-bottom:var(--xs)!important}.mb_sm{margin-bottom:var(--sm)!important}.mb_md{margin-bottom:var(--md)!important}.mb_lg{margin-bottom:var(--lg)!important}.mb_xl{margin-bottom:var(--xl)!important}.mb_xxl{margin-bottom:var(--xxl)!important}.mb_1{margin-bottom:1px!important}.mb_2{margin-bottom:2px!important}.mb_3{margin-bottom:3px!important}.mb_4{margin-bottom:4px!important}.mb_n1{margin-bottom:-1px!important}.mb_n2{margin-bottom:-2px!important}.mb_n3{margin-bottom:-3px!important}.mb_n4{margin-bottom:-4px!important}.mb_nxs{margin-bottom:calc(var(--xs) * -1)!important}.mb_nsm{margin-bottom:calc(var(--sm) * -1)!important}.mb_nmd{margin-bottom:calc(var(--md) * -1)!important}.mb_nlg{margin-bottom:calc(var(--lg) * -1)!important}.mb_nxl{margin-bottom:calc(var(--xl) * -1)!important}.mb_nxxl{margin-bottom:calc(var(--xxl) * -1)!important}.ml_auto{margin-left:auto!important}.ml_0{margin-left:0!important}.ml_xs{margin-left:var(--xs)!important}.ml_sm{margin-left:var(--sm)!important}.ml_md{margin-left:var(--md)!important}.ml_lg{margin-left:var(--lg)!important}.ml_xl{margin-left:var(--xl)!important}.ml_xxl{margin-left:var(--xxl)!important}.ml_1{margin-left:1px!important}.ml_2{margin-left:2px!important}.ml_3{margin-left:3px!important}.ml_4{margin-left:4px!important}.ml_n1{margin-left:-1px!important}.ml_n2{margin-left:-2px!important}.ml_n3{margin-left:-3px!important}.ml_n4{margin-left:-4px!important}.ml_nxs{margin-left:calc(var(--xs) * -1)!important}.ml_nsm{margin-left:calc(var(--sm) * -1)!important}.ml_nmd{margin-left:calc(var(--md) * -1)!important}.ml_nlg{margin-left:calc(var(--lg) * -1)!important}.ml_nxl{margin-left:calc(var(--xl) * -1)!important}.ml_nxxl{margin-left:calc(var(--xxl) * -1)!important}.pd_0{padding:0!important}.pd_xs{padding:var(--xs)!important}.pd_sm{padding:var(--sm)!important}.pd_md{padding:var(--md)!important}.pd_lg{padding:var(--lg)!important}.pd_xl{padding:var(--xl)!important}.pd_xxl{padding:var(--xxl)!important}.px_0{padding-left:0!important;padding-right:0!important}.px_xs{padding-left:var(--xs)!important;padding-right:var(--xs)!important}.px_sm{padding-left:var(--sm)!important;padding-right:var(--sm)!important}.px_md{padding-left:var(--md)!important;padding-right:var(--md)!important}.px_lg{padding-left:var(--lg)!important;padding-right:var(--lg)!important}.px_xl{padding-left:var(--xl)!important;padding-right:var(--xl)!important}.px_xxl{padding-left:var(--xxl)!important;padding-right:var(--xxl)!important}.py_0{padding-top:0!important;padding-bottom:0!important}.py_xs{padding-top:var(--xs)!important;padding-bottom:var(--xs)!important}.py_sm{padding-top:var(--sm)!important;padding-bottom:var(--sm)!important}.py_md{padding-top:var(--md)!important;padding-bottom:var(--md)!important}.py_lg{padding-top:var(--lg)!important;padding-bottom:var(--lg)!important}.py_xl{padding-top:var(--xl)!important;padding-bottom:var(--xl)!important}.py_xxl{padding-top:var(--xxl)!important;padding-bottom:var(--xxl)!important}.pt_0{padding-top:0!important}.pt_xs{padding-top:var(--xs)!important}.pt_sm{padding-top:var(--sm)!important}.pt_md{padding-top:var(--md)!important}.pt_lg{padding-top:var(--lg)!important}.pt_xl{padding-top:var(--xl)!important}.pt_xxl{padding-top:var(--xxl)!important}.pt_1{padding-top:1px!important}.pt_2{padding-top:2px!important}.pt_3{padding-top:3px!important}.pt_4{padding-top:4px!important}.pr_0{padding-right:0!important}.pr_xs{padding-right:var(--xs)!important}.pr_sm{padding-right:var(--sm)!important}.pr_md{padding-right:var(--md)!important}.pr_lg{padding-right:var(--lg)!important}.pr_xl{padding-right:var(--xl)!important}.pr_xxl{padding-right:var(--xxl)!important}.pr_1{padding-right:1px!important}.pr_2{padding-right:2px!important}.pr_3{padding-right:3px!important}.pr_4{padding-right:4px!important}.pb_0{padding-bottom:0!important}.pb_xs{padding-bottom:var(--xs)!important}.pb_sm{padding-bottom:var(--sm)!important}.pb_md{padding-bottom:var(--md)!important}.pb_lg{padding-bottom:var(--lg)!important}.pb_xl{padding-bottom:var(--xl)!important}.pb_xxl{padding-bottom:var(--xxl)!important}.pb_1{padding-bottom:1px!important}.pb_2{padding-bottom:2px!important}.pb_3{padding-bottom:3px!important}.pb_4{padding-bottom:4px!important}.pl_0{padding-left:0!important}.pl_xs{padding-left:var(--xs)!important}.pl_sm{padding-left:var(--sm)!important}.pl_md{padding-left:var(--md)!important}.pl_lg{padding-left:var(--lg)!important}.pl_xl{padding-left:var(--xl)!important}.pl_xxl{padding-left:var(--xxl)!important}.pl_1{padding-left:1px!important}.pl_2{padding-left:2px!important}.pl_3{padding-left:3px!important}.pl_4{padding-left:4px!important}.text_center{text-align:center!important}.text_right{text-align:right!important}.text_left{text-align:left!important}.text_justify{text-align:justify!important}.text_dec_none{text-decoration:none!important}.text_underline{text-decoration:underline}.text_through{text-decoration:line-through}.text_italic{font-style:italic}.text_lowercase{text-transform:lowercase}.text_uppercase{text-transform:uppercase}.text_capitalize{text-transform:capitalize}.hover_blue:hover{color:var(--b_brand_blue)!important}.hover_pink:hover{color:var(--b_brand_pink)!important}.hover_underline:hover{text-decoration:underline!important}.text_nowrap{white-space:nowrap!important}.text_wrap{white-space:normal!important}.text_break{word-break:break-all!important;word-wrap:break-word!important}.text_ellipsis{max-width:100%;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.text_ellipsis_2l{max-width:100%;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;line-clamp:2;-webkit-line-clamp:2;-webkit-box-orient:vertical}.text_ellipsis_3l{max-width:100%;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;line-clamp:3;-webkit-line-clamp:3;-webkit-box-orient:vertical}.fw_300{font-weight:300!important}.fw_400{font-weight:400!important}.fw_700{font-weight:700!important}.fw_bold{font-weight:700!important}.fw_border{font-weight:bolder!important}.fw_lighter{font-weight:lighter!important}.lh_xs{line-height:var(--lh_xs)!important}.lh_sm{line-height:var(--lh_sm)!important}.lh_md{line-height:var(--lh_md)!important}.lh_lg{line-height:var(--lh_lg)!important}.lh_xl{line-height:var(--lh_xl)!important}.fs_1{font-size:var(--fs_1)!important}.fs_2{font-size:var(--fs_2)!important}.fs_3{font-size:var(--fs_3)!important}.fs_4{font-size:var(--fs_4)!important}.fs_5{font-size:var(--fs_5)!important}.fs_6{font-size:var(--fs_6)!important}.fs_1x,.fs_sm1{font-size:calc(var(--fs_1) + var(--fs_sm_plus))!important}.fs_2x,.fs_sm2{font-size:calc(var(--fs_2) + var(--fs_sm_plus))!important}.fs_3x,.fs_sm3{font-size:calc(var(--fs_3) + var(--fs_sm_plus))!important}.fs_4x,.fs_sm4{font-size:calc(var(--fs_4) + var(--fs_sm_plus))!important}.fs_5x,.fs_sm5{font-size:calc(var(--fs_5) + var(--fs_sm_plus))!important}.fs_6x,.fs_sm6{font-size:calc(var(--fs_6) + var(--fs_sm_plus))!important}.fs_1xx,.fs_lg1{font-size:calc(var(--fs_1) + var(--fs_lg_plus))!important}.fs_2xx,.fs_lg2{font-size:calc(var(--fs_2) + var(--fs_lg_plus))!important}.fs_3xx,.fs_lg3{font-size:calc(var(--fs_3) + var(--fs_lg_plus))!important}.fs_4xx,.fs_lg4{font-size:calc(var(--fs_4) + var(--fs_lg_plus))!important}.fs_5xx,.fs_lg5{font-size:calc(var(--fs_5) + var(--fs_lg_plus))!important}.fs_6xx,.fs_lg6{font-size:calc(var(--fs_6) + var(--fs_lg_plus))!important}.transform_none{-webkit-transform:none!important;transform:none!important}.translateX_50{-webkit-transform:translateX(50%)!important;transform:translateX(50%)!important}.translateY_50{-webkit-transform:translateY(50%)!important;transform:translateY(50%)!important}.translateX_n50{-webkit-transform:translateX(-50%)!important;transform:translateX(-50%)!important}.translateY_n50{-webkit-transform:translateY(-50%)!important;transform:translateY(-50%)!important}.rotate_45{-webkit-transform:rotate(45deg)!important;transform:rotate(45deg)!important}.rotate_90{-webkit-transform:rotate(90deg)!important;transform:rotate(90deg)!important}.rotate_180{-webkit-transform:rotate(180deg)!important;transform:rotate(180deg)!important}.rotate_360{-webkit-transform:rotate(360deg)!important;transform:rotate(360deg)!important}.rotate_n45{-webkit-transform:rotate(-45deg)!important;transform:rotate(-45deg)!important}.rotate_n90{-webkit-transform:rotate(-90deg)!important;transform:rotate(-90deg)!important}.rotate_n180{-webkit-transform:rotate(-180deg)!important;transform:rotate(-180deg)!important}.rotate_n360{-webkit-transform:rotate(-360deg)!important;transform:rotate(-360deg)!important}.scale_sm{-webkit-transform:scale(1.05)!important;transform:scale(1.05)!important}.scale_md{-webkit-transform:scale(1.1)!important;transform:scale(1.1)!important}.scale_lg{-webkit-transform:scale(1.15)!important;transform:scale(1.15)!important}.scale_nsm{-webkit-transform:scale(.95)!important;transform:scale(.95)!important}.scale_nmd{-webkit-transform:scale(.9)!important;transform:scale(.9)!important}.scale_nlg{-webkit-transform:scale(.85)!important;transform:scale(.85)!important}.ts_none{-webkit-transition:all 0 ease 0!important;transition:all 0 ease 0!important}.ts_all{-webkit-transition:all .5s!important;transition:all .5s!important}.ts_all_fast{-webkit-transition:all .2s!important;transition:all .2s!important}.ts_all_slow{-webkit-transition:all .8s!important;transition:all .8s!important}.tf_ease{-webkit-transition-timing-function:ease!important;transition-timing-function:ease!important}.tf_linear{-webkit-transition-timing-function:linear!important;transition-timing-function:linear!important}.tf_ease_in{-webkit-transition-timing-function:ease-in!important;transition-timing-function:ease-in!important}.tf_ease_out{-webkit-transition-timing-function:ease-out!important;transition-timing-function:ease-out!important}.tf_ease_in_out{-webkit-transition-timing-function:ease-in-out!important;transition-timing-function:ease-in-out!important}.v_align_top{vertical-align:top!important}.v_align_middle{vertical-align:middle!important}.v_align_bottom{vertical-align:bottom!important}.v_align_baseline{vertical-align:baseline!important}.v_align_tt{vertical-align:text-top!important}.v_align_tb{vertical-align:text-bottom!important}