@jackuait/blok 0.4.3-beta.3 → 0.4.3-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/blok.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { B as s, v as a } from "./chunks/blok-BmjQP37u.mjs";
2
- import { D as A } from "./chunks/inline-tool-convert-CreNXc4T.mjs";
1
+ import { B as s, v as a } from "./chunks/blok-CC3asvLc.mjs";
2
+ import { D as A } from "./chunks/inline-tool-convert-DtMsnFGn.mjs";
3
3
  export {
4
4
  s as Blok,
5
5
  A as DATA_ATTR,
@@ -9,7 +9,7 @@ var Ne = (a, t, e) => t in a ? No(a, t, { enumerable: !0, configurable: !0, writ
9
9
  for (var e of Et(t))
10
10
  Pe.call(t, e) && Ne(a, e, t[e]);
11
11
  return a;
12
- }, _ = (a, t) => Ro(a, Po(t));
12
+ }, H = (a, t) => Ro(a, Po(t));
13
13
  var Yt = (a, t) => {
14
14
  var e = {};
15
15
  for (var o in a)
@@ -19,7 +19,7 @@ var Yt = (a, t) => {
19
19
  t.indexOf(o) < 0 && Pe.call(a, o) && (e[o] = a[o]);
20
20
  return e;
21
21
  };
22
- import { i as N, g as Ho, a as f, b as be, c as E, l as I, S as y, d as Fo, e as _o, D as m, t as C, f as $, h as co, P as O, j as Ht, k as j, m as A, n as wt, o as ht, p as ho, q as J, T as jt, r as Ft, s as v, I as zo, u as Uo, v as ct, w as oe, x as Ko, y as Wo, z as $o, A as uo, B as Yo, C as po, E as fo, F as jo, G as Xo, H as Vo, J as qo, K as Go, L as ke, M as He, N as Zo, O as Fe, Q as _e, R as Jo, U as Qo, V as ts, W as es, X as os, Y as se, Z as _t, _ as ss, $ as ns, a0 as is, a1 as ze, a2 as rs, a3 as as, a4 as ls, a5 as cs, a6 as ds, a7 as hs, a8 as us } from "./inline-tool-convert-CreNXc4T.mjs";
22
+ import { i as N, g as Ho, a as f, b as be, c as E, l as I, S as y, d as Fo, e as _o, D as m, t as C, f as $, h as co, P as O, j as Ht, k as j, m as A, n as wt, o as ht, p as ho, q as J, T as jt, r as Ft, s as v, I as zo, u as Uo, v as ct, w as oe, x as Ko, y as Wo, z as $o, A as uo, B as Yo, C as po, E as fo, F as jo, G as Xo, H as Vo, J as qo, K as Go, L as ke, M as He, N as Zo, O as Fe, Q as _e, R as Jo, U as Qo, V as ts, W as es, X as os, Y as se, Z as _t, _ as ss, $ as ns, a0 as is, a1 as ze, a2 as rs, a3 as as, a4 as ls, a5 as cs, a6 as ds, a7 as hs, a8 as us } from "./inline-tool-convert-DtMsnFGn.mjs";
23
23
  function ps(a) {
24
24
  return a && a.__esModule && Object.prototype.hasOwnProperty.call(a, "default") ? a.default : a;
25
25
  }
@@ -1458,7 +1458,7 @@ class As {
1458
1458
  * @returns {Promise<NotifierModule>} loaded notifier module
1459
1459
  */
1460
1460
  loadNotifierModule() {
1461
- return this.notifierModule !== null ? Promise.resolve(this.notifierModule) : (this.loadingPromise === null && (this.loadingPromise = import("./index-TdePW2Yb.mjs").then((t) => {
1461
+ return this.notifierModule !== null ? Promise.resolve(this.notifierModule) : (this.loadingPromise === null && (this.loadingPromise = import("./index-qoZny9Yh.mjs").then((t) => {
1462
1462
  const e = t;
1463
1463
  if (!this.isNotifierModule(e))
1464
1464
  throw new Error('notifier module does not expose a "show" method.');
@@ -1625,7 +1625,7 @@ function Os() {
1625
1625
  var Ns = Os();
1626
1626
  const Rs = /* @__PURE__ */ ps(Ns), Ps = /^\s*(?:javascript\s*:|data\s*:\s*text\s*\/\s*html)/i, Hs = /\s*(?:href|src)\s*=\s*(?:"\s*(?:javascript\s*:|data\s*:\s*text\s*\/\s*html)[^"]*"|'\s*(?:javascript\s*:|data\s*:\s*text\s*\/\s*html)[^']*|(?:javascript\s*:|data\s*:\s*text\s*\/\s*html)[^ \t\r\n>]*)/gi, ve = (a, t, e = {}) => a.map((o) => {
1627
1627
  const s = E(t) ? t(o.tool) : t, n = s != null ? s : {};
1628
- return A(n) && N(n) && N(e) ? o : _(B({}, o), {
1628
+ return A(n) && N(n) && N(e) ? o : H(B({}, o), {
1629
1629
  data: we(o.data, n, e)
1630
1630
  });
1631
1631
  }), q = (a, t = {}) => {
@@ -2978,7 +2978,7 @@ class G extends xe {
2978
2978
  const o = (i = e == null ? void 0 : e.wrapperTag) != null ? i : "div", s = document.createElement(o);
2979
2979
  return o === "button" && s.setAttribute("type", "button"), s.className = this.getContainerClass(), s.setAttribute(m.popoverItem, ""), s.setAttribute("data-blok-testid", "popover-item"), t.name && s.setAttribute("data-blok-item-name", t.name), t.dataset && Object.entries(t.dataset).forEach(([d, h]) => {
2980
2980
  s.setAttribute(`data-${d}`, h);
2981
- }), t.isDisabled && s.setAttribute(m.disabled, "true"), this.isActive && s.setAttribute(m.popoverItemActive, "true"), this.hasChildren && s.setAttribute(m.hasChildren, "true"), this.createContentElements(s, t, e), t.hint !== void 0 && ((r = e == null ? void 0 : e.hint) == null ? void 0 : r.enabled) !== !1 && t.hint !== void 0 && this.addHint(s, _(B({}, t.hint), {
2981
+ }), t.isDisabled && s.setAttribute(m.disabled, "true"), this.isActive && s.setAttribute(m.popoverItemActive, "true"), this.hasChildren && s.setAttribute(m.hasChildren, "true"), this.createContentElements(s, t, e), t.hint !== void 0 && ((r = e == null ? void 0 : e.hint) == null ? void 0 : r.enabled) !== !1 && t.hint !== void 0 && this.addHint(s, H(B({}, t.hint), {
2982
2982
  position: ((l = e == null ? void 0 : e.hint) == null ? void 0 : l.position) || "right",
2983
2983
  alignment: ((c = e == null ? void 0 : e.hint) == null ? void 0 : c.alignment) || "center"
2984
2984
  })), s;
@@ -3083,7 +3083,7 @@ class G extends xe {
3083
3083
  enableConfirmationMode(t) {
3084
3084
  if (this.nodes.root === null)
3085
3085
  return;
3086
- const e = _(B(B({}, this.params), t), {
3086
+ const e = H(B(B({}, this.params), t), {
3087
3087
  confirmation: "confirmation" in t ? t.confirmation : void 0
3088
3088
  });
3089
3089
  this.setConfirmation(e), this.confirmationState = t, this.enableSpecialHoverAndFocusBehavior();
@@ -3335,7 +3335,7 @@ class St extends xe {
3335
3335
  return o.className = C(
3336
3336
  Gt.root,
3337
3337
  this.isInline && Ye.root
3338
- ), o.setAttribute(m.popoverItemHtml, ""), o.setAttribute("data-blok-testid", "popover-item-html"), t.name && o.setAttribute("data-blok-item-name", t.name), o.appendChild(t.element), t.hint !== void 0 && ((s = e == null ? void 0 : e.hint) == null ? void 0 : s.enabled) !== !1 && this.addHint(o, _(B({}, t.hint), {
3338
+ ), o.setAttribute(m.popoverItemHtml, ""), o.setAttribute("data-blok-testid", "popover-item-html"), t.name && o.setAttribute("data-blok-item-name", t.name), o.appendChild(t.element), t.hint !== void 0 && ((s = e == null ? void 0 : e.hint) == null ? void 0 : s.enabled) !== !1 && this.addHint(o, H(B({}, t.hint), {
3339
3339
  position: ((n = e == null ? void 0 : e.hint) == null ? void 0 : n.position) || "right",
3340
3340
  alignment: ((i = e == null ? void 0 : e.hint) == null ? void 0 : i.alignment) || "center"
3341
3341
  })), o;
@@ -3953,7 +3953,7 @@ class je extends ft {
3953
3953
  ]
3954
3954
  });
3955
3955
  super(
3956
- _(B({}, t), {
3956
+ H(B({}, t), {
3957
3957
  flipper: o
3958
3958
  }),
3959
3959
  {
@@ -4836,7 +4836,7 @@ class Cn {
4836
4836
  return (this.registeredShortcuts.get(t) || []).find(({ name: s }) => s === e);
4837
4837
  }
4838
4838
  }
4839
- const F = new Cn();
4839
+ const _ = new Cn();
4840
4840
  var Nt = /* @__PURE__ */ ((a) => (a.Opened = "toolbox-opened", a.Closed = "toolbox-closed", a.BlockAdded = "toolbox-block-added", a))(Nt || {});
4841
4841
  class In extends Ct {
4842
4842
  /**
@@ -5009,7 +5009,7 @@ class In extends Ct {
5009
5009
  * @param {string} shortcut - shortcut according to the ShortcutData Module format
5010
5010
  */
5011
5011
  enableShortcutForTool(t, e) {
5012
- F.add({
5012
+ _.add({
5013
5013
  name: e,
5014
5014
  on: this.api.ui.nodes.redactor,
5015
5015
  handler: async (o) => {
@@ -5033,7 +5033,7 @@ class In extends Ct {
5033
5033
  removeAllShortcuts() {
5034
5034
  this.toolsToBeDisplayed.forEach((t) => {
5035
5035
  const e = t.shortcut;
5036
- e && F.remove(this.api.ui.nodes.redactor, e);
5036
+ e && _.remove(this.api.ui.nodes.redactor, e);
5037
5037
  });
5038
5038
  }
5039
5039
  /**
@@ -5839,14 +5839,14 @@ class An extends T {
5839
5839
  if (t instanceof HTMLElement)
5840
5840
  return i;
5841
5841
  if (t.type === O.Html)
5842
- return i.push(_(B(B({}, r), t), {
5842
+ return i.push(H(B(B({}, r), t), {
5843
5843
  type: O.Html
5844
5844
  })), i;
5845
5845
  if (t.type === O.Separator)
5846
5846
  return i.push({
5847
5847
  type: O.Separator
5848
5848
  }), i;
5849
- const l = _(B(B({}, r), t), {
5849
+ const l = H(B(B({}, r), t), {
5850
5850
  type: O.Default
5851
5851
  });
5852
5852
  return i.push(l), "children" in l && n && i.push({
@@ -5933,7 +5933,7 @@ class An extends T {
5933
5933
  */
5934
5934
  enableShortcuts(t, e) {
5935
5935
  const o = this.registeredShortcuts.get(t);
5936
- o !== e && (this.isShortcutTakenByAnotherTool(t, e) || (o !== void 0 && (F.remove(document, o), this.registeredShortcuts.delete(t)), F.add({
5936
+ o !== e && (this.isShortcutTakenByAnotherTool(t, e) || (o !== void 0 && (_.remove(document, o), this.registeredShortcuts.delete(t)), _.add({
5937
5937
  name: e,
5938
5938
  handler: (s) => {
5939
5939
  const { currentBlock: n } = this.Blok.BlockManager;
@@ -6354,14 +6354,11 @@ class Pn extends T {
6354
6354
  * Uses lightweight i18n for English, loads i18next only for other locales.
6355
6355
  */
6356
6356
  async prepare() {
6357
- var o, s;
6357
+ var o;
6358
6358
  const t = this.config.i18n;
6359
- if (this.applyDefaultLocale(t == null ? void 0 : t.defaultLocale), (t == null ? void 0 : t.messages) !== void 0) {
6360
- this.lightweightI18n.setDictionary(t.messages), this.usingI18next = !1, this.updateConfigDirection((o = t.direction) != null ? o : "ltr");
6361
- return;
6362
- }
6359
+ this.applyDefaultLocale(t == null ? void 0 : t.defaultLocale);
6363
6360
  const e = t == null ? void 0 : t.locale;
6364
- e === void 0 || e === "auto" ? await this.detectAndSetLocale() : await this.setLocale(e), this.updateConfigDirection((s = t == null ? void 0 : t.direction) != null ? s : this.getDirection());
6361
+ e === void 0 || e === "auto" ? await this.detectAndSetLocale() : await this.setLocale(e), (t == null ? void 0 : t.messages) !== void 0 && this.setDictionary(t.messages), this.updateConfigDirection((o = t == null ? void 0 : t.direction) != null ? o : this.getDirection());
6365
6362
  }
6366
6363
  /**
6367
6364
  * Dynamically load i18next when needed for non-English locales
@@ -6369,7 +6366,7 @@ class Pn extends T {
6369
6366
  async ensureI18nextLoaded(t, e) {
6370
6367
  if (this.i18nextWrapper !== null)
6371
6368
  return;
6372
- const { loadI18next: o } = await import("./i18next-loader-DjtwmuRK.mjs");
6369
+ const { loadI18next: o } = await import("./i18next-loader-DESAFQPB.mjs");
6373
6370
  this.i18nextWrapper = await o(t, e);
6374
6371
  }
6375
6372
  /**
@@ -8117,13 +8114,13 @@ class Gn extends T {
8117
8114
  */
8118
8115
  setupKeyboardShortcuts() {
8119
8116
  setTimeout(() => {
8120
- ["CMD+SHIFT+UP", "CMD+SHIFT+DOWN"].forEach((e) => F.remove(document, e)), F.add({
8117
+ ["CMD+SHIFT+UP", "CMD+SHIFT+DOWN"].forEach((e) => _.remove(document, e)), _.add({
8121
8118
  name: "CMD+SHIFT+UP",
8122
8119
  on: document,
8123
8120
  handler: (e) => {
8124
8121
  this.shouldHandleShortcut(e) && (e.preventDefault(), this.moveCurrentBlockUp());
8125
8122
  }
8126
- }), this.registeredShortcuts.push("CMD+SHIFT+UP"), F.add({
8123
+ }), this.registeredShortcuts.push("CMD+SHIFT+UP"), _.add({
8127
8124
  name: "CMD+SHIFT+DOWN",
8128
8125
  on: document,
8129
8126
  handler: (e) => {
@@ -8149,7 +8146,7 @@ class Gn extends T {
8149
8146
  */
8150
8147
  async destroy() {
8151
8148
  for (const t of this.registeredShortcuts)
8152
- F.remove(document, t);
8149
+ _.remove(document, t);
8153
8150
  this.registeredShortcuts = [], await Promise.all(this.blocks.map((t) => t.destroy()));
8154
8151
  }
8155
8152
  /**
@@ -8310,7 +8307,7 @@ class Zn extends T {
8310
8307
  * to select all and copy them
8311
8308
  */
8312
8309
  prepare() {
8313
- this.selection = new y(), F.add({
8310
+ this.selection = new y(), _.add({
8314
8311
  name: "CMD+A",
8315
8312
  handler: (t) => {
8316
8313
  const { BlockManager: e, ReadOnly: o } = this.Blok;
@@ -8485,7 +8482,7 @@ class Zn extends T {
8485
8482
  * De-registers Shortcut CMD+A
8486
8483
  */
8487
8484
  destroy() {
8488
- F.remove(this.Blok.UI.nodes.redactor, "CMD+A");
8485
+ _.remove(this.Blok.UI.nodes.redactor, "CMD+A");
8489
8486
  }
8490
8487
  /**
8491
8488
  * First CMD+A selects all input content by native behaviour,
@@ -10538,7 +10535,7 @@ const ii = (a) => a.some((t) => t.items !== void 0 && t.items.length > 0), ri =
10538
10535
  const r = s.data, l = ci(r, s.tunes);
10539
10536
  t.push(...l);
10540
10537
  } else
10541
- t.push(_(B({}, s), {
10538
+ t.push(H(B({}, s), {
10542
10539
  id: n
10543
10540
  }));
10544
10541
  }
@@ -10729,7 +10726,7 @@ class ki extends T {
10729
10726
  isValid: !1
10730
10727
  };
10731
10728
  const n = await t.validate(s.data);
10732
- return _(B({}, s), {
10729
+ return H(B({}, s), {
10733
10730
  isValid: n,
10734
10731
  parentId: t.parentId,
10735
10732
  contentIds: t.contentIds
@@ -10802,7 +10799,7 @@ class ki extends T {
10802
10799
  ), i = t.map((r) => B({}, r));
10803
10800
  return s.forEach(({ index: r }, l) => {
10804
10801
  const c = n[l];
10805
- i[r] = _(B({}, i[r]), {
10802
+ i[r] = H(B({}, i[r]), {
10806
10803
  data: c.data
10807
10804
  });
10808
10805
  }), i;
@@ -10839,7 +10836,7 @@ class ki extends T {
10839
10836
  if (N(e))
10840
10837
  return;
10841
10838
  const o = t.preservedTunes;
10842
- return _(B({
10839
+ return H(B({
10843
10840
  id: t.id,
10844
10841
  tool: t.name,
10845
10842
  data: e
@@ -10949,46 +10946,46 @@ class wi extends Se {
10949
10946
  });
10950
10947
  }
10951
10948
  }
10952
- class H extends Map {
10949
+ class F extends Map {
10953
10950
  /**
10954
10951
  * Returns Block Tools collection
10955
10952
  */
10956
10953
  get blockTools() {
10957
10954
  const t = Array.from(this.entries()).filter(([, e]) => e.isBlock());
10958
- return new H(t);
10955
+ return new F(t);
10959
10956
  }
10960
10957
  /**
10961
10958
  * Returns Inline Tools collection
10962
10959
  */
10963
10960
  get inlineTools() {
10964
10961
  const t = Array.from(this.entries()).filter(([, e]) => e.isInline());
10965
- return new H(t);
10962
+ return new F(t);
10966
10963
  }
10967
10964
  /**
10968
10965
  * Returns Block Tunes collection
10969
10966
  */
10970
10967
  get blockTunes() {
10971
10968
  const t = Array.from(this.entries()).filter(([, e]) => e.isTune());
10972
- return new H(t);
10969
+ return new F(t);
10973
10970
  }
10974
10971
  /**
10975
10972
  * Returns internal Tools collection
10976
10973
  */
10977
10974
  get internalTools() {
10978
10975
  const t = Array.from(this.entries()).filter(([, e]) => e.isInternal);
10979
- return new H(t);
10976
+ return new F(t);
10980
10977
  }
10981
10978
  /**
10982
10979
  * Returns Tools collection provided by user
10983
10980
  */
10984
10981
  get externalTools() {
10985
10982
  const t = Array.from(this.entries()).filter(([, e]) => !e.isInternal);
10986
- return new H(t);
10983
+ return new F(t);
10987
10984
  }
10988
10985
  }
10989
10986
  class yi extends Se {
10990
10987
  constructor() {
10991
- super(...arguments), this.type = dt.Block, this.inlineTools = new H(), this.tunes = new H();
10988
+ super(...arguments), this.type = dt.Block, this.inlineTools = new F(), this.tunes = new F();
10992
10989
  }
10993
10990
  /**
10994
10991
  * Creates new Tool instance
@@ -11139,20 +11136,42 @@ class Bi {
11139
11136
  * @param name - tool name
11140
11137
  */
11141
11138
  get(t) {
11142
- const r = this.config[t], { class: e, isInternal: o = !1 } = r, s = Yt(r, ["class", "isInternal"]), n = e;
11139
+ const l = this.config[t], { class: e, isInternal: o = !1 } = l, s = Yt(l, ["class", "isInternal"]), n = e;
11143
11140
  if (n === void 0)
11144
11141
  throw new Error(`Tool "${t}" does not provide a class.`);
11145
- const i = this.getConstructor(n);
11142
+ const i = this.getConstructor(n), r = this.createToolApi(t);
11146
11143
  return new i({
11147
11144
  name: t,
11148
11145
  constructable: n,
11149
11146
  config: s,
11150
- api: this.api.methods,
11147
+ api: r,
11151
11148
  isDefault: t === this.blokConfig.defaultBlock,
11152
11149
  defaultPlaceholder: this.blokConfig.placeholder,
11153
11150
  isInternal: o
11154
11151
  });
11155
11152
  }
11153
+ /**
11154
+ * Creates a tool-specific API with namespaced i18n.
11155
+ *
11156
+ * EditorJS tools expect `api.i18n.t('key')` to automatically look up
11157
+ * `tools.{toolName}.key`. This wrapper provides that behavior while
11158
+ * falling back to direct key lookup for Blok internal tools that use
11159
+ * fully-qualified keys like `tools.stub.error`.
11160
+ *
11161
+ * @param toolName - Name of the tool
11162
+ * @returns API object with tool-namespaced i18n
11163
+ */
11164
+ createToolApi(t) {
11165
+ const e = this.api.methods, o = `tools.${t}`, s = {
11166
+ t: (n) => {
11167
+ const i = `${o}.${n}`, r = e.i18n.t(i);
11168
+ return r !== i ? r : e.i18n.t(n);
11169
+ }
11170
+ };
11171
+ return H(B({}, e), {
11172
+ i18n: s
11173
+ });
11174
+ }
11156
11175
  /**
11157
11176
  * Find appropriate Tool object constructor for Tool constructable
11158
11177
  * @param constructable - Tools constructable
@@ -11203,7 +11222,7 @@ const ee = (a) => {
11203
11222
  };
11204
11223
  class xi extends T {
11205
11224
  constructor() {
11206
- super(...arguments), this.stubTool = "stub", this.factory = null, this.toolsAvailable = new H(), this.toolsUnavailable = new H(), this.inlineToolsSanitizeConfigCache = null;
11225
+ super(...arguments), this.stubTool = "stub", this.factory = null, this.toolsAvailable = new F(), this.toolsUnavailable = new F(), this.inlineToolsSanitizeConfigCache = null;
11207
11226
  }
11208
11227
  /**
11209
11228
  * Returns available Tools
@@ -11432,7 +11451,7 @@ class xi extends T {
11432
11451
  ...Array.from(o.entries()),
11433
11452
  ...Array.from(this.blockTunes.internalTools.entries())
11434
11453
  ];
11435
- e.tunes = new H(s);
11454
+ e.tunes = new F(s);
11436
11455
  return;
11437
11456
  }
11438
11457
  if (Array.isArray(this.config.tunes)) {
@@ -11440,10 +11459,10 @@ class xi extends T {
11440
11459
  ...Array.from(o.entries()),
11441
11460
  ...Array.from(this.blockTunes.internalTools.entries())
11442
11461
  ];
11443
- e.tunes = new H(s);
11462
+ e.tunes = new F(s);
11444
11463
  return;
11445
11464
  }
11446
- e.tunes = new H(
11465
+ e.tunes = new F(
11447
11466
  Array.from(this.blockTunes.internalTools.entries())
11448
11467
  );
11449
11468
  }
@@ -11516,7 +11535,7 @@ class xi extends T {
11516
11535
  }
11517
11536
  e.push([o, s]);
11518
11537
  }
11519
- return new H(e);
11538
+ return new F(e);
11520
11539
  }
11521
11540
  /**
11522
11541
  * Builds block tunes collection for provided tune names, skipping unavailable ones.
@@ -11533,7 +11552,7 @@ class xi extends T {
11533
11552
  }
11534
11553
  e.push([o, s]);
11535
11554
  }
11536
- return new H(e);
11555
+ return new F(e);
11537
11556
  }
11538
11557
  }
11539
11558
  const Ti = `*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:PT Mono,Menlo,Monaco,Consolas,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:651px){.\\!container{max-width:651px!important}.container{max-width:651px}}@media(min-width:768px){.\\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\\!container{max-width:1536px!important}.container{max-width:1536px}}.blok-block{padding:3px 2px}.blok-block::-webkit-input-placeholder{line-height:1.5!important}.blok-inline-tool-button{display:flex;height:100%;width:1.75rem;cursor:pointer;align-items:center;justify-content:center;border-radius:.25rem;border-width:0px;background-color:transparent;padding:0;line-height:1.5;--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.blok-inline-tool-button--active{background-color:#388ae51a;--tw-text-opacity: 1;color:rgb(56 138 229 / var(--tw-text-opacity, 1))}.blok-input{width:100%;border-radius:3px;border-width:1px;--tw-border-opacity: 1;border-color:rgb(239 240 241 / var(--tw-border-opacity, 1));padding:.625rem .75rem;--tw-shadow: inset 0 1px 2px 0 rgba(35, 44, 72, .06);--tw-shadow-colored: inset 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline:2px solid transparent;outline-offset:2px}.blok-input[data-blok-placeholder]:before{pointer-events:none;position:static!important;display:inline-block;width:0px;content:var(--tw-content);white-space:nowrap}.blok-loader{position:relative;border-width:1px;--tw-border-opacity: 1;border-color:rgb(239 240 241 / var(--tw-border-opacity, 1))}.blok-loader:before{position:absolute;left:50%;top:50%;margin-left:-11px;margin-top:-11px;height:18px;content:var(--tw-content);width:18px}@keyframes rotation{0%{content:var(--tw-content);transform:rotate(0)}to{content:var(--tw-content);transform:rotate(360deg)}}.blok-loader:before{animation:rotation 1.2s infinite linear;border-radius:9999px;border-width:2px;border-color:rgb(239 240 241 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-left-color:rgb(56 138 229 / var(--tw-border-opacity, 1));--tw-content: "";content:var(--tw-content)}.blok-button{cursor:pointer;border-radius:3px;border-width:1px;--tw-border-opacity: 1;border-color:rgb(239 240 241 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:13px;text-align:center;font-size:14.9px;--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1));--tw-shadow: 0 2px 2px 0 rgba(18, 30, 57, .04);--tw-shadow-colored: 0 2px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.blok-button:hover{--tw-bg-opacity: 1;background-color:rgb(251 252 254 / var(--tw-bg-opacity, 1));--tw-shadow: 0 1px 3px 0 rgba(18, 30, 57, .08);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.blok-button svg{margin-right:.2em;margin-top:-.125rem;height:1.25rem}.blok-settings-button{margin:0;display:inline-flex;min-height:26px;min-width:26px;cursor:pointer;align-items:center;justify-content:center;border-radius:3px;border-width:0px;background-color:transparent;vertical-align:bottom;color:inherit;outline:2px solid transparent;outline-offset:2px}@media(max-width:650px){.blok-settings-button{height:36px;width:36px;border-radius:.5rem}}@media(hover:hover){.blok-settings-button:hover{--tw-bg-opacity: 1;background-color:rgb(239 242 245 / var(--tw-bg-opacity, 1))}}.blok-settings-button svg{height:auto;width:auto}@media(max-width:650px){.blok-settings-button svg{height:28px;width:28px}}.blok-settings-button--active{--tw-text-opacity: 1;color:rgb(56 138 229 / var(--tw-text-opacity, 1))}.blok-settings-button--focused{background-color:#22baff14;--tw-shadow: inset 0 0 0 1px rgba(7, 161, 227, .08);--tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@keyframes buttonClicked{0%{transform:scale3d(.95,.95,.95)}60%{transform:scale3d(1.02,1.02,1.02)}80%,to{transform:scaleZ(1)}}.blok-settings-button--focused-animated{animation:buttonClicked .75s cubic-bezier(.215,.61,.355,1) forwards}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-\\[auto_var\\(--offset\\)_calc\\(var\\(--offset\\)\\+env\\(safe-area-inset-bottom\\)\\)_var\\(--offset\\)\\]{inset:auto var(--offset) calc(var(--offset) + env(safe-area-inset-bottom)) var(--offset)}.bottom-0{bottom:0}.bottom-5{bottom:1.25rem}.left-0{left:0}.left-5{left:1.25rem}.left-\\[var\\(--popover-left\\)\\]{left:var(--popover-left)}.left-auto{left:auto}.right-0{right:0}.right-\\[15px\\]{right:15px}.right-full{right:100%}.top-0{top:0}.top-\\[7px\\]{top:7px}.top-\\[var\\(--popover-top\\)\\]{top:var(--popover-top)}.top-auto{top:auto}.z-0{z-index:0}.z-\\[10000\\]{z-index:10000}.z-\\[1\\]{z-index:1}.z-\\[2\\]{z-index:2}.z-\\[3\\]{z-index:3}.z-\\[4\\]{z-index:4}.z-overlay{z-index:999}.\\!m-0{margin:0!important}.-m-px{margin:-1px}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.my-2\\.5{margin-top:.625rem;margin-bottom:.625rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-\\[-0\\.5em\\]{margin-top:-.5em;margin-bottom:-.5em}.\\!mr-0{margin-right:0!important}.\\!mr-2{margin-right:.5rem!important}.mb-1{margin-bottom:.25rem}.mb-1\\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-\\[30px\\]{margin-bottom:30px}.mb-px{margin-bottom:1px}.ml-3\\.5{margin-left:.875rem}.mr-2{margin-right:.5rem}.mr-auto{margin-right:auto}.mt-1{margin-top:.25rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\\[15px\\]{margin-top:15px}.mt-\\[2px\\]{margin-top:2px}.mt-\\[3px\\]{margin-top:3px}.mt-\\[5px\\]{margin-top:5px}.box-border{box-sizing:border-box}.\\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.\\!hidden{display:none!important}.hidden{display:none}.h-2\\.5{height:.625rem}.h-4{height:1rem}.h-9{height:2.25rem}.h-\\[26px\\]{height:26px}.h-\\[50px\\]{height:50px}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-toolbox-btn{height:26px}.max-h-0{max-height:0px}.max-h-\\[var\\(--max-height\\)\\]{max-height:var(--max-height)}.max-h-none{max-height:none}.w-2\\.5{width:.625rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-9{width:2.25rem}.w-\\[230px\\]{width:230px}.w-\\[26px\\]{width:26px}.w-\\[var\\(--width\\)\\]{width:var(--width)}.w-auto{width:auto}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-toolbox-btn{width:26px}.min-w-0{min-width:0px}.min-w-\\[calc\\(100\\%-theme\\(\\'spacing\\.6\\'\\)-10px\\)\\]{min-width:calc(100% - 1.5rem - 10px)}.min-w-\\[calc\\(100\\%-var\\(--offset\\)\\*2\\)\\]{min-width:calc(100% - var(--offset) * 2)}.min-w-\\[var\\(--width\\)\\]{min-width:var(--width)}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-\\[1100px\\]{max-width:1100px}.max-w-\\[130px\\]{max-width:130px}.max-w-content{max-width:650px}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-\\[5px\\]{--tw-translate-x: -5px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\\[5px\\]{--tw-translate-y: -5px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[5px\\]{--tw-translate-x: 5px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\\[5px\\]{--tw-translate-y: 5px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}@keyframes panelShowingMobile{0%{opacity:0;transform:translateY(14px) scale(.98)}70%{opacity:1;transform:translateY(-4px)}to{transform:translateY(0)}}.animate-\\[panelShowingMobile_250ms_ease\\]{animation:panelShowingMobile .25s ease}@keyframes panelShowing{0%{opacity:0;transform:translateY(-8px) scale(.9)}70%{opacity:1;transform:translateY(2px)}to{transform:translateY(0)}}.animate-\\[panelShowing_100ms_ease\\]{animation:panelShowing .1s ease}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fade-in .3s ease forwards}.animate-none{animation:none}@keyframes notifyBounceIn{0%{opacity:0;transform:scale(.3)}50%{opacity:1;transform:scale(1.05)}70%{transform:scale(.9)}to{transform:scale(1)}}.animate-notify-bounce-in{animation:notifyBounceIn .6s 1}@keyframes wobble{0%{transform:translateZ(0)}15%{transform:translate3d(-9%,0,0)}30%{transform:translate3d(9%,0,0)}45%{transform:translate3d(-4%,0,0)}60%{transform:translate3d(4%,0,0)}75%{transform:translate3d(-1%,0,0)}to{transform:translateZ(0)}}.animate-wobble{animation:wobble .4s}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-\\[auto_auto_1fr\\]{grid-template-columns:auto auto 1fr}.grid-rows-\\[auto\\]{grid-template-rows:auto}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\\[10px\\]{border-radius:10px}.rounded-\\[3px\\]{border-radius:3px}.rounded-\\[4px\\]{border-radius:4px}.rounded-\\[5px\\]{border-radius:5px}.rounded-\\[7px\\]{border-radius:7px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-\\[\\#e8e8eb\\]{--tw-border-opacity: 1;border-color:rgb(232 232 235 / var(--tw-border-opacity, 1))}.border-\\[rgba\\(226\\,226\\,229\\,0\\.2\\)\\],.border-\\[rgba\\(226\\,226\\,229\\,0\\.20\\)\\]{border-color:#e2e2e533}.border-line-gray,.border-popover-border{--tw-border-opacity: 1;border-color:rgb(239 240 241 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.\\!bg-\\[\\#fafffe\\]{--tw-bg-opacity: 1 !important;background-color:rgb(250 255 254 / var(--tw-bg-opacity, 1))!important}.\\!bg-\\[\\#fffbfb\\]{--tw-bg-opacity: 1 !important;background-color:rgb(255 251 251 / var(--tw-bg-opacity, 1))!important}.\\!bg-item-confirm-bg{--tw-bg-opacity: 1 !important;background-color:rgb(226 74 74 / var(--tw-bg-opacity, 1))!important}.\\!bg-item-focus-bg{background-color:#22baff14!important}.bg-\\[\\#34c992\\]{--tw-bg-opacity: 1;background-color:rgb(52 201 146 / var(--tw-bg-opacity, 1))}.bg-\\[\\#F8F8F8\\]{--tw-bg-opacity: 1;background-color:rgb(248 248 248 / var(--tw-bg-opacity, 1))}.bg-\\[\\#eff1f4\\]{--tw-bg-opacity: 1;background-color:rgb(239 241 244 / var(--tw-bg-opacity, 1))}.bg-\\[\\#f2f5f7\\]{--tw-bg-opacity: 1;background-color:rgb(242 245 247 / var(--tw-bg-opacity, 1))}.bg-\\[\\#f7f7f7\\]{--tw-bg-opacity: 1;background-color:rgb(247 247 247 / var(--tw-bg-opacity, 1))}.bg-bg-light{--tw-bg-opacity: 1;background-color:rgb(239 242 245 / var(--tw-bg-opacity, 1))}.bg-dark{--tw-bg-opacity: 1;background-color:rgb(29 32 43 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-item-hover-bg{--tw-bg-opacity: 1;background-color:rgb(248 248 248 / var(--tw-bg-opacity, 1))}.bg-popover-bg{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-popover-border{--tw-bg-opacity: 1;background-color:rgb(239 240 241 / var(--tw-bg-opacity, 1))}.bg-selection{--tw-bg-opacity: 1;background-color:rgb(225 242 255 / var(--tw-bg-opacity, 1))}.bg-selection-highlight{background-color:#2eaadc33}.bg-tooltip-bg{--tw-bg-opacity: 1;background-color:rgb(29 32 43 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-0{padding:0}.p-0\\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-\\[3px\\]{padding:3px}.p-\\[5px\\]{padding:5px}.p-\\[var\\(--item-padding\\)\\]{padding:var(--item-padding)}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\\[18px\\]{padding-left:18px;padding-right:18px}.px-\\[2px\\]{padding-left:2px;padding-right:2px}.px-\\[30px\\]{padding-left:30px;padding-right:30px}.px-\\[3px\\]{padding-left:3px;padding-right:3px}.py-0{padding-top:0;padding-bottom:0}.py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-\\[0\\.5em\\]{padding-top:.5em;padding-bottom:.5em}.py-\\[13px\\]{padding-top:13px;padding-bottom:13px}.py-\\[3px\\]{padding-top:3px;padding-bottom:3px}.py-\\[5px\\]{padding-top:5px;padding-bottom:5px}.pl-0\\.5{padding-left:.125rem}.pr-1\\.5{padding-right:.375rem}.pr-\\[5px\\]{padding-right:5px}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.font-\\[-apple-system\\,BlinkMacSystemFont\\,\\"Segoe_UI\\"\\,\\"Roboto\\"\\,\\"Oxygen\\"\\,\\"Ubuntu\\"\\,\\"Cantarell\\"\\,\\"Fira_Sans\\"\\,\\"Droid_Sans\\"\\,\\"Helvetica_Neue\\"\\,sans-serif\\]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.font-\\[inherit\\]{font-family:inherit}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\\[13px\\]{font-size:13px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.italic{font-style:italic}.\\!leading-\\[1\\.3\\]{line-height:1.3!important}.leading-5{line-height:1.25rem}.leading-\\[1\\.4em\\]{line-height:1.4em}.leading-\\[1\\.6em\\]{line-height:1.6em}.leading-\\[1em\\]{line-height:1em}.leading-\\[22px\\]{line-height:22px}.leading-\\[50px\\]{line-height:50px}.leading-relaxed{line-height:1.625}.-tracking-widest{letter-spacing:-.1em}.tracking-\\[0\\.02em\\]{letter-spacing:.02em}.\\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity, 1))!important}.text-\\[\\#656b7c\\]{--tw-text-opacity: 1;color:rgb(101 107 124 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-dark{--tw-text-opacity: 1;color:rgb(29 32 43 / var(--tw-text-opacity, 1))}.text-gray-text{--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-text-primary{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-text-secondary{--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.text-tooltip-font{--tw-text-opacity: 1;color:rgb(205 209 224 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-current{accent-color:currentColor}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\\[0_11px_17px_0_rgba\\(23\\,32\\,61\\,0\\.13\\)\\]{--tw-shadow: 0 11px 17px 0 rgba(23,32,61,.13);--tw-shadow-colored: 0 11px 17px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\\[0_1px_1px_0_rgba\\(18\\,49\\,35\\,0\\.05\\)\\]{--tw-shadow: 0 1px 1px 0 rgba(18,49,35,.05);--tw-shadow-colored: 0 1px 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\\[0_2px_1px_0_rgba\\(16\\,19\\,29\\,0\\)\\]{--tw-shadow: 0 2px 1px 0 rgba(16,19,29,0);--tw-shadow-colored: 0 2px 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\\[0_3px_15px_-3px_theme\\(colors\\.popover-shadow\\)\\]{--tw-shadow: 0 3px 15px -3px rgba(13, 20, 33, .1);--tw-shadow-colored: 0 3px 15px -3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-tooltip{--tw-shadow: 0 8px 12px 0 rgba(29, 32, 43, .17), 0 4px 5px -3px rgba(5, 6, 12, .49);--tw-shadow-colored: 0 8px 12px 0 var(--tw-shadow-color), 0 4px 5px -3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-\\[120ms\\]{transition-duration:.12s}.duration-\\[250ms\\]{transition-duration:.25s}.duration-\\[50ms\\,70ms\\]{transition-duration:50ms,70ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.will-change-\\[opacity\\,left\\,top\\]{will-change:opacity,left,top}.will-change-\\[opacity\\,top\\,left\\]{will-change:opacity,top,left}.will-change-\\[opacity\\,top\\]{will-change:opacity,top}.will-change-\\[opacity\\]{will-change:opacity}.\\[clip\\:rect\\(0\\,0\\,0\\,0\\)\\]{clip:rect(0,0,0,0)}.\\[direction\\:rtl\\]{direction:rtl}[data-blok-navigation-focused=true]{margin-left:auto;margin-right:auto;width:650px;max-width:100%;border-radius:.375rem;background-color:#22baff14}@media(hover:hover){[data-blok-item-name=delete]:hover{--tw-text-opacity: 1;color:rgb(226 74 74 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}}[data-drop-indicator]{position:relative}[data-drop-indicator]:before{pointer-events:none;position:absolute;z-index:10;height:.375rem;width:100%;max-width:650px;--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.125rem;--tw-bg-opacity: 1;background-color:rgb(212 227 252 / var(--tw-bg-opacity, 1));--tw-content: "";content:var(--tw-content);left:calc(50% + var(--drop-indicator-depth, 0) * 12px);max-width:calc(650px - var(--drop-indicator-depth, 0) * 24px)}[data-drop-indicator=bottom]:before{bottom:0;--tw-translate-y: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}[data-drop-indicator=top]:before{top:0;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}[data-blok-dragging-multi=true] [data-blok-selected=true]{opacity:.4;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}[data-blok-selected=true] [data-blok-element-content]:has([data-list-style]){background-color:transparent}[data-blok-selected=true] [data-list-style] [role=listitem]{border-radius:4px;--tw-bg-opacity: 1;background-color:rgb(225 242 255 / var(--tw-bg-opacity, 1))}[data-blok-selected=true] [data-list-style] [role=listitem] [contenteditable]{-webkit-user-select:none;-moz-user-select:none;user-select:none}.placeholder\\:font-medium::-moz-placeholder{font-weight:500}.placeholder\\:font-medium::placeholder{font-weight:500}.placeholder\\:text-\\[\\#656b7c\\]::-moz-placeholder{--tw-text-opacity: 1;color:rgb(101 107 124 / var(--tw-text-opacity, 1))}.placeholder\\:text-\\[\\#656b7c\\]::placeholder{--tw-text-opacity: 1;color:rgb(101 107 124 / var(--tw-text-opacity, 1))}.placeholder\\:text-gray-text::-moz-placeholder{--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.placeholder\\:text-gray-text::placeholder{--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.before\\:absolute:before{content:var(--tw-content);position:absolute}.before\\:inset-0:before{content:var(--tw-content);inset:0}.before\\:left-0:before{content:var(--tw-content);left:0}.before\\:left-\\[9px\\]:before{content:var(--tw-content);left:9px}.before\\:top-0:before{content:var(--tw-content);top:0}.before\\:top-\\[5px\\]:before{content:var(--tw-content);top:5px}.before\\:-z-10:before{content:var(--tw-content);z-index:-10}.before\\:m-\\[3px\\]:before{content:var(--tw-content);margin:3px}.before\\:block:before{content:var(--tw-content);display:block}.before\\:h-3:before{content:var(--tw-content);height:.75rem}.before\\:h-\\[calc\\(100\\%-6px\\)\\]:before{content:var(--tw-content);height:calc(100% - 6px)}.before\\:w-0\\.5:before{content:var(--tw-content);width:.125rem}.before\\:w-\\[3px\\]:before{content:var(--tw-content);width:3px}.before\\:rotate-\\[-45deg\\]:before{content:var(--tw-content);--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\\:rounded-\\[5px\\]:before{content:var(--tw-content);border-radius:5px}.before\\:rounded-lg:before{content:var(--tw-content);border-radius:.5rem}.before\\:\\!bg-\\[\\#41ffb1\\]:before{content:var(--tw-content);--tw-bg-opacity: 1 !important;background-color:rgb(65 255 177 / var(--tw-bg-opacity, 1))!important}.before\\:\\!bg-\\[\\#fb5d5d\\]:before{content:var(--tw-content);--tw-bg-opacity: 1 !important;background-color:rgb(251 93 93 / var(--tw-bg-opacity, 1))!important}.before\\:bg-\\[\\#575d67\\]:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(87 93 103 / var(--tw-bg-opacity, 1))}.before\\:bg-tooltip-bg:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(29 32 43 / var(--tw-bg-opacity, 1))}.before\\:bg-transparent:before{content:var(--tw-content);background-color:transparent}.before\\:content-\\[\\"\\"\\]:before{--tw-content: "";content:var(--tw-content)}.before\\:content-\\[\\\\\\'\\\\\\'\\]:before{--tw-content: \\'\\';content:var(--tw-content)}.after\\:absolute:after{content:var(--tw-content);position:absolute}.after\\:left-\\[9px\\]:after{content:var(--tw-content);left:9px}.after\\:top-\\[5px\\]:after{content:var(--tw-content);top:5px}.after\\:mx-3:after{content:var(--tw-content);margin-left:.75rem;margin-right:.75rem}.after\\:h-3:after{content:var(--tw-content);height:.75rem}.after\\:w-0\\.5:after{content:var(--tw-content);width:.125rem}.after\\:rotate-45:after{content:var(--tw-content);--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\\:bg-\\[\\#575d67\\]:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(87 93 103 / var(--tw-bg-opacity, 1))}.after\\:text-\\[\\#ddd\\]:after{content:var(--tw-content);--tw-text-opacity: 1;color:rgb(221 221 221 / var(--tw-text-opacity, 1))}.after\\:content-\\[\\"\\"\\]:after{--tw-content: "";content:var(--tw-content)}.after\\:content-\\[\\'\\|\\'\\]:after{--tw-content: "|";content:var(--tw-content)}.first\\:mt-0:first-child{margin-top:0}.last\\:ml-2\\.5:last-child{margin-left:.625rem}.empty\\:before\\:pointer-events-none:empty:before{content:var(--tw-content);pointer-events:none}.empty\\:before\\:cursor-text:empty:before{content:var(--tw-content);cursor:text}.empty\\:before\\:text-gray-text:empty:before{content:var(--tw-content);--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.empty\\:before\\:content-\\[attr\\(data-blok-placeholder\\)\\]:empty:before{--tw-content: attr(data-blok-placeholder);content:var(--tw-content)}.empty\\:before\\:content-\\[attr\\(data-blok-placeholder-active\\)\\]:empty:before{--tw-content: attr(data-blok-placeholder-active);content:var(--tw-content)}.empty\\:before\\:content-\\[attr\\(data-placeholder\\)\\]:empty:before{--tw-content: attr(data-placeholder);content:var(--tw-content)}.hover\\:bg-\\[\\#2db583\\]:hover{--tw-bg-opacity: 1;background-color:rgb(45 181 131 / var(--tw-bg-opacity, 1))}.hover\\:bg-\\[\\#e0e4eb\\]:hover{--tw-bg-opacity: 1;background-color:rgb(224 228 235 / var(--tw-bg-opacity, 1))}.hover\\:bg-\\[\\#e9ecee\\]:hover{--tw-bg-opacity: 1;background-color:rgb(233 236 238 / var(--tw-bg-opacity, 1))}.hover\\:opacity-100:hover{opacity:1}.focus\\:placeholder\\:text-\\[rgba\\(101\\,107\\,124\\,0\\.3\\)\\]:focus::-moz-placeholder{color:#656b7c4d}.focus\\:placeholder\\:text-\\[rgba\\(101\\,107\\,124\\,0\\.3\\)\\]:focus::placeholder{color:#656b7c4d}.empty\\:focus\\:before\\:pointer-events-none:focus:empty:before{content:var(--tw-content);pointer-events:none}.empty\\:focus\\:before\\:cursor-text:focus:empty:before{content:var(--tw-content);cursor:text}.empty\\:focus\\:before\\:text-gray-text:focus:empty:before{content:var(--tw-content);--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.empty\\:focus\\:before\\:content-\\[attr\\(data-blok-placeholder-active\\)\\]:focus:empty:before{--tw-content: attr(data-blok-placeholder-active);content:var(--tw-content)}.active\\:cursor-grabbing:active{cursor:grabbing}.group[data-blok-dragging=true] .group-data-\\[blok-dragging\\=true\\]\\:pointer-events-none{pointer-events:none}.group[data-blok-rtl=true] .group-data-\\[blok-rtl\\=true\\]\\:left-\\[calc\\(-1\\*theme\\(width\\.toolbox-btn\\)\\)\\]{left:-26px}.group[data-blok-rtl=true] .group-data-\\[blok-rtl\\=true\\]\\:left-auto{left:auto}.group[data-blok-rtl=true] .group-data-\\[blok-rtl\\=true\\]\\:right-\\[calc\\(-1\\*theme\\(width\\.toolbox-btn\\)\\)\\]{right:-26px}.group[data-blok-rtl=true] .group-data-\\[blok-rtl\\=true\\]\\:right-auto{right:auto}.group[data-blok-dragging=true] .group-data-\\[blok-dragging\\=true\\]\\:cursor-grabbing{cursor:grabbing}@media(max-width:650px){.mobile\\:absolute{position:absolute}.mobile\\:right-auto{right:auto}.mobile\\:z-\\[2\\]{z-index:2}.mobile\\:hidden{display:none}.mobile\\:h-toolbox-btn-mobile{height:36px}.mobile\\:w-toolbox-btn-mobile{width:36px}.mobile\\:rounded-\\[6px\\]{border-radius:6px}.mobile\\:border{border-width:1px}.mobile\\:border-\\[\\#e8e8eb\\]{--tw-border-opacity: 1;border-color:rgb(232 232 235 / var(--tw-border-opacity, 1))}.mobile\\:bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.mobile\\:p-1{padding:.25rem}.mobile\\:text-\\[15px\\]{font-size:15px}.mobile\\:font-medium{font-weight:500}.mobile\\:shadow-overlay-pane{--tw-shadow: 0 3px 15px -3px rgba(13, 20, 33, .13);--tw-shadow-colored: 0 3px 15px -3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-blok-rtl=true] .mobile\\:group-data-\\[blok-rtl\\=true\\]\\:ml-0{margin-left:0}.group[data-blok-rtl=true] .mobile\\:group-data-\\[blok-rtl\\=true\\]\\:mr-auto{margin-right:auto}.group[data-blok-rtl=true] .mobile\\:group-data-\\[blok-rtl\\=true\\]\\:pl-\\[10px\\]{padding-left:10px}.group[data-blok-rtl=true] .mobile\\:group-data-\\[blok-rtl\\=true\\]\\:pr-0{padding-right:0}}@media(min-width:651px){.not-mobile\\:w-6{width:1.5rem}.group[data-blok-narrow=true][data-blok-rtl=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:group-data-\\[blok-rtl\\=true\\]\\:left-0{left:0}.group[data-blok-narrow=true][data-blok-rtl=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:group-data-\\[blok-rtl\\=true\\]\\:left-\\[-5px\\]{left:-5px}.group[data-blok-narrow=true][data-blok-rtl=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:group-data-\\[blok-rtl\\=true\\]\\:left-\\[calc\\(-1\\*theme\\(spacing\\.narrow-mode-right-padding\\)-5px\\)\\]{left:-55px}.group[data-blok-narrow=true][data-blok-rtl=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:group-data-\\[blok-rtl\\=true\\]\\:right-\\[5px\\]{right:5px}.group[data-blok-narrow=true][data-blok-rtl=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:group-data-\\[blok-rtl\\=true\\]\\:right-auto{right:auto}.group[data-blok-narrow=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:left-\\[5px\\]{left:5px}.group[data-blok-narrow=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:right-\\[calc\\(-1\\*theme\\(spacing\\.narrow-mode-right-padding\\)-5px\\)\\]{right:-55px}.group[data-blok-narrow=true][data-blok-rtl=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:group-data-\\[blok-rtl\\=true\\]\\:ml-\\[theme\\(spacing\\.narrow-mode-right-padding\\)\\]{margin-left:50px}.group[data-blok-narrow=true][data-blok-rtl=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:group-data-\\[blok-rtl\\=true\\]\\:mr-0{margin-right:0}.group[data-blok-narrow=true] .not-mobile\\:group-data-\\[blok-narrow\\=true\\]\\:mr-\\[theme\\(spacing\\.narrow-mode-right-padding\\)\\]{margin-right:50px}}@media(hover:hover){.can-hover\\:hover\\:cursor-grab:hover{cursor:grab}.can-hover\\:hover\\:cursor-pointer:hover{cursor:pointer}.can-hover\\:hover\\:bg-bg-light:hover{--tw-bg-opacity: 1;background-color:rgb(239 242 245 / var(--tw-bg-opacity, 1))}.can-hover\\:hover\\:bg-item-hover-bg:hover{--tw-bg-opacity: 1;background-color:rgb(248 248 248 / var(--tw-bg-opacity, 1))}.group[data-blok-toolbox-opened=true] .group-data-\\[blok-toolbox-opened\\=true\\]\\:can-hover\\:hover\\:cursor-pointer:hover{cursor:pointer}}.\\[\\&\\>p\\:first-of-type\\]\\:mt-0>p:first-of-type{margin-top:0}.\\[\\&\\>p\\:last-of-type\\]\\:mb-0>p:last-of-type{margin-bottom:0}.\\[\\&\\[data-blok-dragging\\=true\\]\\]\\:cursor-grabbing[data-blok-dragging=true]{cursor:grabbing}.\\[\\&\\[data-blok-empty\\=true\\]\\]\\:before\\:pointer-events-none[data-blok-empty=true]:before{content:var(--tw-content);pointer-events:none}.\\[\\&\\[data-blok-empty\\=true\\]\\]\\:before\\:cursor-text[data-blok-empty=true]:before{content:var(--tw-content);cursor:text}.\\[\\&\\[data-blok-empty\\=true\\]\\]\\:before\\:text-gray-text[data-blok-empty=true]:before{content:var(--tw-content);--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.\\[\\&\\[data-blok-empty\\=true\\]\\]\\:before\\:content-\\[attr\\(data-blok-placeholder\\)\\][data-blok-empty=true]:before{--tw-content: attr(data-blok-placeholder);content:var(--tw-content)}.\\[\\&\\[data-blok-empty\\=true\\]\\]\\:before\\:content-\\[attr\\(data-placeholder\\)\\][data-blok-empty=true]:before{--tw-content: attr(data-placeholder);content:var(--tw-content)}.\\[\\&\\[data-blok-focused\\=\\"true\\"\\]\\]\\:bg-item-focus-bg[data-blok-focused=true]{background-color:#22baff14}.\\[\\&\\[data-blok-force-hover\\]\\]\\:cursor-pointer[data-blok-force-hover]{cursor:pointer}.\\[\\&\\[data-blok-force-hover\\]\\]\\:bg-item-hover-bg[data-blok-force-hover]{--tw-bg-opacity: 1;background-color:rgb(248 248 248 / var(--tw-bg-opacity, 1))}.\\[\\&\\[data-blok-popover-item-active\\]\\]\\:bg-icon-active-bg[data-blok-popover-item-active]{background-color:#388ae51a}.\\[\\&\\[data-blok-popover-item-active\\]\\]\\:text-icon-active-text[data-blok-popover-item-active]{--tw-text-opacity: 1;color:rgb(56 138 229 / var(--tw-text-opacity, 1))}.\\[\\&\\[data-blok-popover-item-no-hover\\]\\]\\:cursor-default[data-blok-popover-item-no-hover]{cursor:default}.\\[\\&\\[data-blok-popover-item-no-hover\\]\\]\\:hover\\:bg-transparent:hover[data-blok-popover-item-no-hover]{background-color:transparent}.\\[\\&\\[data-blok-toolbox-opened\\=true\\]_\\[contentEditable\\=true\\]\\[data-blok-placeholder\\]\\:focus\\]\\:before\\:\\!opacity-0[data-blok-toolbox-opened=true] [contentEditable=true][data-blok-placeholder]:focus:before{content:var(--tw-content);opacity:0!important}.\\[\\&\\[data-empty\\=true\\]\\:focus\\]\\:before\\:pointer-events-none[data-empty=true]:focus:before{content:var(--tw-content);pointer-events:none}.\\[\\&\\[data-empty\\=true\\]\\:focus\\]\\:before\\:cursor-text[data-empty=true]:focus:before{content:var(--tw-content);cursor:text}.\\[\\&\\[data-empty\\=true\\]\\:focus\\]\\:before\\:text-gray-text[data-empty=true]:focus:before{content:var(--tw-content);--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.\\[\\&\\[data-empty\\=true\\]\\:focus\\]\\:before\\:content-\\[attr\\(data-blok-placeholder-active\\)\\][data-empty=true]:focus:before{--tw-content: attr(data-blok-placeholder-active);content:var(--tw-content)}.\\[\\&\\[data-empty\\=true\\]\\]\\:before\\:pointer-events-none[data-empty=true]:before{content:var(--tw-content);pointer-events:none}.\\[\\&\\[data-empty\\=true\\]\\]\\:before\\:cursor-text[data-empty=true]:before{content:var(--tw-content);cursor:text}.\\[\\&\\[data-empty\\=true\\]\\]\\:before\\:text-gray-text[data-empty=true]:before{content:var(--tw-content);--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}.\\[\\&\\[data-empty\\=true\\]\\]\\:before\\:content-\\[attr\\(data-blok-placeholder-active\\)\\][data-empty=true]:before{--tw-content: attr(data-blok-placeholder-active);content:var(--tw-content)}.\\[\\&_\\:\\:selection\\]\\:bg-selection-inline ::-moz-selection{--tw-bg-opacity: 1;background-color:rgb(212 236 255 / var(--tw-bg-opacity, 1))}.\\[\\&_\\:\\:selection\\]\\:bg-selection-inline ::selection{--tw-bg-opacity: 1;background-color:rgb(212 236 255 / var(--tw-bg-opacity, 1))}.\\[\\&_\\[contenteditable\\]\\:empty\\]\\:after\\:content-\\[\\"\\\\\\\\feff_\\"\\] [contenteditable]:empty:after{--tw-content: "\\\\feff ";content:var(--tw-content)}.\\[\\&_\\[contenteditable\\]\\]\\:select-none [contenteditable]{-webkit-user-select:none;-moz-user-select:none;user-select:none}.\\[\\&_\\[data-blok-tool\\=stub\\]\\]\\:opacity-55 [data-blok-tool=stub]{opacity:.55}.\\[\\&_\\[hidden\\]\\]\\:\\!hidden [hidden]{display:none!important}.\\[\\&_a\\]\\:cursor-pointer a{cursor:pointer}.\\[\\&_a\\]\\:text-link a{--tw-text-opacity: 1;color:rgb(56 138 229 / var(--tw-text-opacity, 1))}.\\[\\&_a\\]\\:underline a{text-decoration-line:underline}.\\[\\&_b\\]\\:font-bold b{font-weight:700}.\\[\\&_div\\]\\:\\!m-0 div{margin:0!important}.\\[\\&_div\\]\\:\\!p-0 div{padding:0!important}.\\[\\&_i\\]\\:italic i{font-style:italic}.\\[\\&_img\\]\\:opacity-55 img{opacity:.55}.\\[\\&_p\\]\\:\\!m-0 p{margin:0!important}.\\[\\&_p\\]\\:\\!p-0 p{padding:0!important}.\\[\\&_path\\]\\:stroke-current path{stroke:currentColor}.\\[\\&_svg\\]\\:block svg{display:block}.\\[\\&_svg\\]\\:size-icon svg{width:20px;height:20px}.\\[\\&_svg\\]\\:h-6 svg{height:1.5rem}.\\[\\&_svg\\]\\:h-7 svg{height:1.75rem}.\\[\\&_svg\\]\\:h-icon svg{height:20px}.\\[\\&_svg\\]\\:max-h-full svg{max-height:100%}.\\[\\&_svg\\]\\:w-6 svg{width:1.5rem}.\\[\\&_svg\\]\\:w-7 svg{width:1.75rem}.\\[\\&_svg\\]\\:w-icon svg{width:20px}.\\[\\&_svg\\]\\:text-gray-text svg{--tw-text-opacity: 1;color:rgb(112 118 132 / var(--tw-text-opacity, 1))}@media(max-width:650px){.mobile\\:\\[\\&_svg\\]\\:h-icon-mobile svg{height:28px}.mobile\\:\\[\\&_svg\\]\\:w-icon-mobile svg{width:28px}}`;
@@ -12121,19 +12140,19 @@ const Ci = 30, Ii = 200, Ei = 100, rt = class rt extends T {
12121
12140
  if (!t)
12122
12141
  return;
12123
12142
  const e = this.globalUndoRedo ? document : t;
12124
- ["CMD+Z", "CMD+SHIFT+Z", "CMD+Y"].forEach((i) => F.remove(e, i)), F.add({
12143
+ ["CMD+Z", "CMD+SHIFT+Z", "CMD+Y"].forEach((i) => _.remove(e, i)), _.add({
12125
12144
  name: "CMD+Z",
12126
12145
  on: e,
12127
12146
  handler: (i) => {
12128
12147
  this.shouldHandleShortcut(i) && (i.preventDefault(), this.undo());
12129
12148
  }
12130
- }), this.registeredShortcuts.push({ name: "CMD+Z", element: e }), F.add({
12149
+ }), this.registeredShortcuts.push({ name: "CMD+Z", element: e }), _.add({
12131
12150
  name: "CMD+SHIFT+Z",
12132
12151
  on: e,
12133
12152
  handler: (i) => {
12134
12153
  this.shouldHandleShortcut(i) && (i.preventDefault(), this.redo());
12135
12154
  }
12136
- }), this.registeredShortcuts.push({ name: "CMD+SHIFT+Z", element: e }), F.add({
12155
+ }), this.registeredShortcuts.push({ name: "CMD+SHIFT+Z", element: e }), _.add({
12137
12156
  name: "CMD+Y",
12138
12157
  on: e,
12139
12158
  handler: (i) => {
@@ -12511,7 +12530,7 @@ const Ci = 30, Ii = 200, Ei = 100, rt = class rt extends T {
12511
12530
  destroy() {
12512
12531
  this.clearDebounce();
12513
12532
  for (const { name: t, element: e } of this.registeredShortcuts)
12514
- F.remove(e, t);
12533
+ _.remove(e, t);
12515
12534
  this.registeredShortcuts = [], rt.activeInstance === this && (rt.activeInstance = null), this.undoStack = [], this.redoStack = [], this.initialStateCaptured = !1;
12516
12535
  }
12517
12536
  };
@@ -12713,8 +12732,8 @@ class Mi {
12713
12732
  };
12714
12733
  if (A(t)) {
12715
12734
  const e = t, o = e.config;
12716
- return _(B({}, e), {
12717
- config: _(B({}, A(o) ? o : {}), {
12735
+ return H(B({}, e), {
12736
+ config: H(B({}, A(o) ? o : {}), {
12718
12737
  preserveBlank: !0
12719
12738
  })
12720
12739
  });
@@ -1,4 +1,4 @@
1
- import { e as i } from "./blok-BmjQP37u.mjs";
1
+ import { e as i } from "./blok-CC3asvLc.mjs";
2
2
  const l = async (e, r) => {
3
3
  const n = (await import("./i18next-CugVlwWp.mjs")).default.createInstance(), s = {
4
4
  lng: e,
@@ -1,4 +1,4 @@
1
- import { t as f, q as i } from "./inline-tool-convert-CreNXc4T.mjs";
1
+ import { t as f, q as i } from "./inline-tool-convert-DtMsnFGn.mjs";
2
2
  const a = {
3
3
  wrapper: i(
4
4
  "fixed z-[2] bottom-5 left-5",
@@ -18,7 +18,7 @@ let nt = (o = 21) => {
18
18
  return t;
19
19
  };
20
20
  var ot = /* @__PURE__ */ ((o) => (o.VERBOSE = "VERBOSE", o.INFO = "INFO", o.WARN = "WARN", o.ERROR = "ERROR", o))(ot || {});
21
- const rt = () => "0.4.3-beta.3", Ct = {
21
+ const rt = () => "0.4.3-beta.5", Ct = {
22
22
  BACKSPACE: 8,
23
23
  TAB: 9,
24
24
  ENTER: 13,
package/dist/full.mjs CHANGED
@@ -10,10 +10,10 @@ var e = (a, l, o) => l in a ? n(a, l, { enumerable: !0, configurable: !0, writab
10
10
  d.call(l, o) && e(a, o, l[o]);
11
11
  return a;
12
12
  }, r = (a, l) => t(a, c(l));
13
- import { B as v, v as A } from "./chunks/blok-BmjQP37u.mjs";
13
+ import { B as v, v as A } from "./chunks/blok-CC3asvLc.mjs";
14
14
  import { List as p, Header as f, Paragraph as I, Link as k, Italic as u, Bold as B } from "./tools.mjs";
15
15
  import { defaultBlockTools as H, defaultInlineTools as P } from "./tools.mjs";
16
- import { D as _ } from "./chunks/inline-tool-convert-CreNXc4T.mjs";
16
+ import { D as _ } from "./chunks/inline-tool-convert-DtMsnFGn.mjs";
17
17
  const m = {
18
18
  paragraph: {
19
19
  class: I,
package/dist/tools.mjs CHANGED
@@ -10,8 +10,8 @@ var U = (f, t, e) => t in f ? nt(f, t, { enumerable: !0, configurable: !0, writa
10
10
  it.call(t, e) && U(f, e, t[e]);
11
11
  return f;
12
12
  }, P = (f, t) => rt(f, st(t));
13
- import { t as L, D as g, a9 as et, aa as at, ab as lt, ac as ct, ad as dt, ae as ut, af as ht, ag as ft, ah as pt, ai as G, aj as j, ak as $, f as A, al as gt, am as mt, S as H, P as Et, an as Tt, l as Ct, J as At } from "./chunks/inline-tool-convert-CreNXc4T.mjs";
14
- import { a0 as Ot } from "./chunks/inline-tool-convert-CreNXc4T.mjs";
13
+ import { t as L, D as g, a9 as et, aa as at, ab as lt, ac as ct, ad as dt, ae as ut, af as ht, ag as ft, ah as pt, ai as G, aj as j, ak as $, f as A, al as gt, am as mt, S as H, P as Et, an as Tt, l as Ct, J as At } from "./chunks/inline-tool-convert-DtMsnFGn.mjs";
14
+ import { a0 as Ot } from "./chunks/inline-tool-convert-DtMsnFGn.mjs";
15
15
  const W = [
16
16
  "empty:before:pointer-events-none",
17
17
  "empty:before:text-gray-text",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jackuait/blok",
3
- "version": "0.4.3-beta.3",
3
+ "version": "0.4.3-beta.5",
4
4
  "description": "Blok — headless, highly extensible rich text editor built for developers who need to implement a block-based editing experience (similar to Notion) without building it from scratch",
5
5
  "module": "dist/blok.mjs",
6
6
  "types": "./types/index.d.ts",
@@ -204,17 +204,7 @@ export class I18n extends Module {
204
204
  // Set default locale if configured
205
205
  this.applyDefaultLocale(i18nConfig?.defaultLocale);
206
206
 
207
- // Handle custom messages (highest priority)
208
- if (i18nConfig?.messages !== undefined) {
209
- // For custom messages, use lightweight implementation with overrides
210
- this.lightweightI18n.setDictionary(i18nConfig.messages);
211
- this.usingI18next = false;
212
- // Set direction from config or default to 'ltr' for custom messages
213
- this.updateConfigDirection(i18nConfig.direction ?? 'ltr');
214
-
215
- return;
216
- }
217
-
207
+ // Load base translations first
218
208
  const requestedLocale = i18nConfig?.locale;
219
209
 
220
210
  if (requestedLocale === undefined || requestedLocale === 'auto') {
@@ -223,6 +213,11 @@ export class I18n extends Module {
223
213
  await this.setLocale(requestedLocale);
224
214
  }
225
215
 
216
+ // Merge custom messages on top of base translations (if provided)
217
+ if (i18nConfig?.messages !== undefined) {
218
+ this.setDictionary(i18nConfig.messages);
219
+ }
220
+
226
221
  // Update config.i18n.direction so other modules can access it via isRtl getter
227
222
  this.updateConfigDirection(i18nConfig?.direction ?? this.getDirection());
228
223
  }
@@ -5,6 +5,7 @@ import { BlockTuneAdapter } from './tune';
5
5
  import { BlockToolAdapter } from './block';
6
6
  import type { API as ApiModule } from '../modules/api';
7
7
  import type { BlokConfig } from '../../../types/configs';
8
+ import type { API as ApiMethods, I18n } from '../../../types';
8
9
 
9
10
  type ToolConstructor = typeof InlineToolAdapter | typeof BlockToolAdapter | typeof BlockTuneAdapter;
10
11
 
@@ -56,18 +57,65 @@ export class ToolsFactory {
56
57
  }
57
58
 
58
59
  const Constructor = this.getConstructor(constructable);
60
+ const toolApi = this.createToolApi(name);
59
61
 
60
62
  return new Constructor({
61
63
  name,
62
64
  constructable,
63
65
  config,
64
- api: this.api.methods,
66
+ api: toolApi,
65
67
  isDefault: name === this.blokConfig.defaultBlock,
66
68
  defaultPlaceholder: this.blokConfig.placeholder,
67
69
  isInternal,
68
70
  });
69
71
  }
70
72
 
73
+ /**
74
+ * Creates a tool-specific API with namespaced i18n.
75
+ *
76
+ * EditorJS tools expect `api.i18n.t('key')` to automatically look up
77
+ * `tools.{toolName}.key`. This wrapper provides that behavior while
78
+ * falling back to direct key lookup for Blok internal tools that use
79
+ * fully-qualified keys like `tools.stub.error`.
80
+ *
81
+ * @param toolName - Name of the tool
82
+ * @returns API object with tool-namespaced i18n
83
+ */
84
+ private createToolApi(toolName: string): ApiMethods {
85
+ const baseApi = this.api.methods;
86
+ const namespace = `tools.${toolName}`;
87
+
88
+ const namespacedI18n: I18n = {
89
+ t: (dictKey: string): string => {
90
+ /**
91
+ * Try namespaced key first for EditorJS compatibility.
92
+ * External tools call t('Add row') expecting lookup of 'tools.table.Add row'.
93
+ */
94
+ const namespacedKey = `${namespace}.${dictKey}`;
95
+ const namespacedResult = baseApi.i18n.t(namespacedKey);
96
+
97
+ /**
98
+ * If translation found (result differs from key), use it.
99
+ * When translation is missing, I18n.t() returns the key unchanged.
100
+ */
101
+ if (namespacedResult !== namespacedKey) {
102
+ return namespacedResult;
103
+ }
104
+
105
+ /**
106
+ * Fall back to direct key lookup for Blok internal tools.
107
+ * Internal tools use fully-qualified keys like 'tools.stub.error'.
108
+ */
109
+ return baseApi.i18n.t(dictKey);
110
+ },
111
+ };
112
+
113
+ return {
114
+ ...baseApi,
115
+ i18n: namespacedI18n,
116
+ };
117
+ }
118
+
71
119
  /**
72
120
  * Find appropriate Tool object constructor for Tool constructable
73
121
  * @param constructable - Tools constructable