@templatical/editor 0.28.0 → 0.28.1
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/{BlockPreviewCanvas-CeNJqtJ6.js → BlockPreviewCanvas-C4M7JT4x.js} +20 -13
- package/dist/{SaveBlockDialog-DPDQTGTB.js → SaveBlockDialog-KWQaS1_q.js} +1 -1
- package/dist/{SavedBlocksBrowserModal-D8a-wIRe.js → SavedBlocksBrowserModal-Cg8yP_EN.js} +1 -1
- package/dist/{SavedBlocksPanels-CmnGyJHO.js → SavedBlocksPanels-bept0JjA.js} +1 -1
- package/dist/{TestEmailModal-C69UbsNy.js → TestEmailModal-DtJabfkS.js} +2 -2
- package/dist/{TestEmailPanel-CH2dG-8A.js → TestEmailPanel-CtFxt5q7.js} +1 -1
- package/dist/bundle-stats.json +6 -6
- package/dist/cdn/chunks/{BlockPreviewCanvas-9tFXPVgi.js → BlockPreviewCanvas-BXVC8-Zj.js} +21 -14
- package/dist/cdn/chunks/BlockPreviewCanvas-BXVC8-Zj.js.map +1 -0
- package/dist/cdn/chunks/{SaveBlockDialog-DVMxZbmf.js → SaveBlockDialog-DYr5yKqy.js} +2 -2
- package/dist/cdn/chunks/{SaveBlockDialog-DVMxZbmf.js.map → SaveBlockDialog-DYr5yKqy.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-C3nfKRQg.js → SavedBlocksBrowserModal-BUJjcHkw.js} +2 -2
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-C3nfKRQg.js.map → SavedBlocksBrowserModal-BUJjcHkw.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksPanels-DVat5S7j.js → SavedBlocksPanels-DFgvmsbj.js} +2 -2
- package/dist/cdn/chunks/{SavedBlocksPanels-DVat5S7j.js.map → SavedBlocksPanels-DFgvmsbj.js.map} +1 -1
- package/dist/cdn/chunks/{TestEmailModal-CDx1Pqtx.js → TestEmailModal-DRCcdGvX.js} +3 -3
- package/dist/cdn/chunks/TestEmailModal-DRCcdGvX.js.map +1 -0
- package/dist/cdn/chunks/{TestEmailPanel--PpajGV7.js → TestEmailPanel-BZU5HX2c.js} +2 -2
- package/dist/cdn/chunks/{TestEmailPanel--PpajGV7.js.map → TestEmailPanel-BZU5HX2c.js.map} +1 -1
- package/dist/cdn/chunks/emailFrameWidth-BmFCN2dp.js.map +1 -1
- package/dist/cdn/chunks/{src-DgxiymKd.js → src-BxHH_6Yr.js} +2 -2
- package/dist/cdn/chunks/{src-DgxiymKd.js.map → src-BxHH_6Yr.js.map} +1 -1
- package/dist/cdn/chunks/useEditorCore-2ZVOY0Rh.js.map +1 -1
- package/dist/cdn/editor.css +1 -1
- package/dist/cdn/editor.js +9 -6
- package/dist/cdn/editor.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/templatical-editor.js +8 -5
- package/package.json +8 -8
- package/dist/cdn/chunks/BlockPreviewCanvas-9tFXPVgi.js.map +0 -1
- package/dist/cdn/chunks/TestEmailModal-CDx1Pqtx.js.map +0 -1
|
@@ -1074,7 +1074,7 @@ var sr = ["aria-label"], cr = {
|
|
|
1074
1074
|
"class"
|
|
1075
1075
|
]), [[I, !O(j)?.isInitialResolve.value]])], 6)], 12, sr)], 4));
|
|
1076
1076
|
}
|
|
1077
|
-
}), [["__scopeId", "data-v-
|
|
1077
|
+
}), [["__scopeId", "data-v-9bb8b409"]]), br = j({
|
|
1078
1078
|
name: "CustomBlockStylesheets",
|
|
1079
1079
|
setup() {
|
|
1080
1080
|
let e = d(mt, null);
|
|
@@ -1675,7 +1675,10 @@ var Rr = ["aria-label", "onKeydown"], zr = ["data-tooltip"], Br = ["data-tooltip
|
|
|
1675
1675
|
onInsert: O(E)
|
|
1676
1676
|
}, null, 8, ["disabled", "onInsert"])) : A("", !0)])) : A("", !0)]));
|
|
1677
1677
|
}
|
|
1678
|
-
}), ii = { class: "tpl:flex tpl:w-full tpl:flex-1 tpl:flex-col tpl:bg-[var(--tpl-bg-elevated)]" }, ai = { class: "tpl:flex tpl:flex-1 tpl:flex-col tpl:gap-3 tpl:overflow-y-auto tpl:p-4" }, oi = { class: "tpl:mb-3.5 tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]" }, si = { class: "tpl:mb-3.5" }, ci = { class: "tpl:grid tpl:grid-cols-4 tpl:gap-1 tpl:rounded-[var(--tpl-radius-sm)] tpl:p-1 tpl:bg-[var(--tpl-bg-hover)]" }, li = ["onClick"], ui = { class: "tpl:flex tpl:items-stretch" }, di = ["value"], fi = { class: "tpl:mb-3.5 tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]" }, pi = {
|
|
1678
|
+
}), ii = { class: "tpl:flex tpl:w-full tpl:flex-1 tpl:flex-col tpl:bg-[var(--tpl-bg-elevated)]" }, ai = { class: "tpl:flex tpl:flex-1 tpl:flex-col tpl:gap-3 tpl:overflow-y-auto tpl:p-4" }, oi = { class: "tpl:mb-3.5 tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]" }, si = { class: "tpl:mb-3.5" }, ci = { class: "tpl:grid tpl:grid-cols-4 tpl:gap-1 tpl:rounded-[var(--tpl-radius-sm)] tpl:p-1 tpl:bg-[var(--tpl-bg-hover)]" }, li = ["onClick"], ui = { class: "tpl:flex tpl:items-stretch" }, di = ["value"], fi = { class: "tpl:mb-3.5 tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]" }, pi = {
|
|
1679
|
+
class: "tpl:mb-3.5",
|
|
1680
|
+
"data-testid": "template-settings-background"
|
|
1681
|
+
}, mi = { class: "tpl:mb-3.5" }, hi = { class: "tpl:mb-3.5" }, gi = { class: "tpl:mb-3.5" }, _i = ["value"], vi = ["value"], yi = { class: "tpl:mb-3.5 tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]" }, bi = ["value"], xi = { class: "tpl:mt-1 tpl:text-xs tpl:leading-relaxed tpl:text-[var(--tpl-text-dim)]" }, Si = { class: "tpl:mb-3.5 tpl:flex tpl:items-center tpl:gap-2 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]" }, Ci = { class: "tpl:mt-1 tpl:flex tpl:items-start tpl:justify-between tpl:gap-2" }, wi = { class: "tpl:text-xs tpl:leading-relaxed tpl:text-[var(--tpl-text-dim)]" }, Ti = { class: "tpl:shrink-0 tpl:text-xs tpl:tabular-nums tpl:text-[var(--tpl-text-dim)]" }, Ei = { class: "tpl:rounded-[var(--tpl-radius)] tpl:border tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:p-3" }, Di = { class: "tpl:mb-2.5 tpl:flex tpl:items-center tpl:gap-1.5 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text-muted)]" }, Oi = { class: "tpl:m-0 tpl:pl-[18px] tpl:text-xs tpl:leading-relaxed tpl:text-[var(--tpl-text-dim)]" }, ki = { class: "tpl:mb-1 tpl:last:mb-0" }, Ai = { class: "tpl:mb-1 tpl:last:mb-0" }, ji = { class: "tpl:mb-1 tpl:last:mb-0" }, Mi = 150, Ni = /* @__PURE__ */ j({
|
|
1679
1682
|
__name: "TemplateSettings",
|
|
1680
1683
|
props: { settings: {} },
|
|
1681
1684
|
emits: ["update"],
|
|
@@ -5154,13 +5157,13 @@ var Rs = { class: "tpl:mb-3.5" }, zs = ["value"], Bs = ["value"], Vs = {
|
|
|
5154
5157
|
editor: u,
|
|
5155
5158
|
onError: a.config.onError,
|
|
5156
5159
|
isAvailable: a.cloud ? () => a.cloud.isSavedBlocksAvailable() : void 0
|
|
5157
|
-
}) : null, x = h(() => import("./SavedBlocksPanels-
|
|
5160
|
+
}) : null, x = h(() => import("./SavedBlocksPanels-bept0JjA.js")), E = a.config.testEmail ? Gn({
|
|
5158
5161
|
provider: a.config.testEmail,
|
|
5159
5162
|
getContent: () => u.content.value,
|
|
5160
5163
|
renderMjml: te,
|
|
5161
5164
|
onError: a.config.onError,
|
|
5162
5165
|
isAvailable: a.cloud ? () => a.cloud.isTestEmailAvailable() : void 0
|
|
5163
|
-
}) : null, D = h(() => import("./TestEmailPanel-
|
|
5166
|
+
}) : null, D = h(() => import("./TestEmailPanel-CtFxt5q7.js")), j = a.config.comments ? Rn({
|
|
5164
5167
|
provider: a.config.comments,
|
|
5165
5168
|
editor: u,
|
|
5166
5169
|
user: a.config.user,
|
|
@@ -5459,7 +5462,7 @@ function Bd() {
|
|
|
5459
5462
|
}
|
|
5460
5463
|
//#endregion
|
|
5461
5464
|
//#region \0virtual:editor-css
|
|
5462
|
-
var Vd = "@import\"https://fonts.bunny.net/css?family=geist:400,500,600\";.tpl-loading-track[data-v-c3d50014]{height:3px;width:100%;border-radius:9999px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--tpl-primary) 10%,transparent) 15%,color-mix(in srgb,var(--tpl-primary) 30%,transparent) 30%,var(--tpl-primary) 50%,color-mix(in srgb,var(--tpl-primary) 30%,transparent) 70%,color-mix(in srgb,var(--tpl-primary) 10%,transparent) 85%,transparent 100%);background-size:200% 100%;animation:tpl-loading-flow-c3d50014 3s ease-in-out infinite}@keyframes tpl-loading-flow-c3d50014{0%{background-position:100% 0}to{background-position:-100% 0}}@media(prefers-reduced-motion:reduce){.tpl-loading-track-fill[data-v-c3d50014]{animation:none;background-position:50% 0}}.tpl-block--idle[data-v-096f1d37]{outline:1.5px dashed color-mix(in srgb,var(--tpl-primary) 30%,transparent);outline-offset:-1px;transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block--idle[data-v-096f1d37]:hover{outline:1.5px solid color-mix(in srgb,var(--tpl-primary) 50%,transparent);outline-offset:-1px;box-shadow:0 0 8px color-mix(in srgb,var(--tpl-primary) 8%,transparent)}.tpl-block--picked[data-v-096f1d37]{outline:2px solid var(--tpl-primary);outline-offset:-1px;box-shadow:0 0 0 4px color-mix(in srgb,var(--tpl-primary) 18%,transparent);transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block--selected[data-v-096f1d37]{outline:2px solid color-mix(in srgb,var(--tpl-primary) 60%,transparent);outline-offset:-1px;box-shadow:0 0 12px color-mix(in srgb,var(--tpl-primary) 15%,transparent);transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block-action-btn[data-v-096f1d37]{color:var(--tpl-chrome-text-muted);background-color:transparent}.tpl-block-action-btn[data-v-096f1d37]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-chrome-text)}.tpl-block-action-btn[data-v-096f1d37]:active{transform:scale(.9)}.tpl-block-delete-btn[data-v-096f1d37]:hover{background-color:var(--tpl-danger-light);color:var(--tpl-danger)}.tpl-condition-toggle[data-v-096f1d37]:hover{background-color:var(--tpl-bg-hover)!important}.tpl-condition-toggle[data-v-096f1d37]:active{transform:scale(.9)}.tpl-block-hidden-overlay[data-v-096f1d37]{background-color:color-mix(in srgb,var(--tpl-bg) 60%,transparent)}.tpl-table-editable[data-v-963ac422] th[contenteditable],.tpl-table-editable[data-v-963ac422] td[contenteditable]{outline:none;cursor:text;min-width:calc(2 * var(--tpl-base-size))}.tpl-table-editable[data-v-963ac422] th[contenteditable]:empty:before,.tpl-table-editable[data-v-963ac422] td[contenteditable]:empty:before{content:attr(data-placeholder);color:var(--tpl-text-dim);pointer-events:none}.tpl-table-editable[data-v-963ac422] th[contenteditable]:focus,.tpl-table-editable[data-v-963ac422] td[contenteditable]:focus{outline:2px solid var(--tpl-primary);outline-offset:-2px;border-radius:1px}hex-color-picker{--hcp-width: 200px}hex-color-picker::part(hue){border-radius:var(--tpl-radius-sm, 7px)}hex-color-picker::part(saturation){border-radius:var(--tpl-radius-sm, 7px) var(--tpl-radius-sm, 7px) 0 0}.tpl-color-swatch-empty{background-color:var(--tpl-bg);background-image:linear-gradient(to top right,transparent calc(50% - .75px),var(--tpl-text-dim) calc(50% - .75px),var(--tpl-text-dim) calc(50% + .75px),transparent calc(50% + .75px))}.tpl-canvas--dark-mode[data-v-da730df5] .tpl-block-content:not(.tpl-block-content *){filter:invert(1) hue-rotate(180deg)}[data-v-da730df5] .tpl-block-content{transition:filter .3s ease}.tpl-canvas--dark-mode[data-v-da730df5] .tpl-block-content img{filter:invert(1) hue-rotate(180deg)}.tpl-pulse-fill[data-v-c289916a]{animation:tpl-field-pulse-c289916a 1s ease-out}@keyframes tpl-field-pulse-c289916a{0%{box-shadow:0 0 color-mix(in srgb,var(--tpl-warning) 30%,transparent);background-color:color-mix(in srgb,var(--tpl-warning) 6%,transparent)}40%{box-shadow:0 0 0 3px color-mix(in srgb,var(--tpl-warning) 15%,transparent);background-color:color-mix(in srgb,var(--tpl-warning) 5%,transparent)}to{box-shadow:0 0 0 0 transparent;background-color:transparent}}@media(prefers-reduced-motion:reduce){.tpl-pulse-fill[data-v-c289916a]{animation:none}}input[type=number][data-v-69591c1e]::-webkit-outer-spin-button,input[type=number][data-v-69591c1e]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-69591c1e]{-moz-appearance:textfield}.tpl-collapsible[data-v-c0ea5f03]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s cubic-bezier(.16,1,.3,1)}.tpl-collapsible--open[data-v-c0ea5f03]{grid-template-rows:1fr}.tpl-collapsible>div[data-v-c0ea5f03]{overflow:hidden}.tpl-icon-enter-active[data-v-632aa74f],.tpl-icon-leave-active[data-v-632aa74f]{transition:opacity .12s cubic-bezier(.16,1,.3,1),transform .12s cubic-bezier(.16,1,.3,1)}.tpl-icon-enter-from[data-v-632aa74f],.tpl-icon-leave-to[data-v-632aa74f]{opacity:0;transform:scale(.8)}.tpl-dark-mode-toggle[data-v-632aa74f]:hover{background-color:var(--tpl-bg-hover)}.tpl-dark-mode-toggle[data-v-632aa74f]:active{transform:scale(.92)}.tpl-icon-enter-active[data-v-eef7b2ca],.tpl-icon-leave-active[data-v-eef7b2ca]{transition:opacity .12s cubic-bezier(.16,1,.3,1),transform .12s cubic-bezier(.16,1,.3,1)}.tpl-icon-enter-from[data-v-eef7b2ca],.tpl-icon-leave-to[data-v-eef7b2ca]{opacity:0;transform:scale(.8)}.tpl-preview-toggle[data-v-eef7b2ca]:hover{background-color:var(--tpl-bg-hover)}.tpl-preview-toggle[data-v-eef7b2ca]:active{transform:scale(.92)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tpl-comet-angle:0deg;--tpl-comet-start:100%}}}@layer theme{:root,:host{--tpl-radius-sm:calc(.25 * var(--tpl-base-size));--tpl-radius-md:calc(.375 * var(--tpl-base-size));--tpl-radius-lg:calc(.5 * var(--tpl-base-size));--tpl-shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--tpl-shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--tpl-shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tpl-shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tpl-radius:calc(.25 * var(--tpl-base-size))}}.tpl\\:pointer-events-auto{pointer-events:auto}.tpl\\:pointer-events-none{pointer-events:none}.tpl\\:invisible{visibility:hidden}.tpl\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tpl\\:absolute{position:absolute}.tpl\\:fixed{position:fixed}.tpl\\:relative{position:relative}.tpl\\:sticky{position:sticky}.tpl\\:inset-0{inset:0}.tpl\\:inset-x-0{inset-inline:0}.tpl\\:inset-y-1{inset-block:calc(var(--tpl-base-size) / 4)}.tpl\\:-top-0\\.5{top:calc(calc(var(--tpl-base-size) / 4) * -.5)}.tpl\\:-top-1{top:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\\:top-0{top:0}.tpl\\:top-1{top:calc(var(--tpl-base-size) / 4)}.tpl\\:top-1\\.5{top:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:top-1\\/2{top:50%}.tpl\\:top-2{top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:top-14{top:calc(calc(var(--tpl-base-size) / 4) * 14)}.tpl\\:top-16{top:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:top-\\[104px\\]{top:104px}.tpl\\:top-full{top:100%}.tpl\\:-right-1{right:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\\:-right-2{right:calc(calc(var(--tpl-base-size) / 4) * -2)}.tpl\\:right-0{right:0}.tpl\\:right-1{right:calc(var(--tpl-base-size) / 4)}.tpl\\:right-1\\.5{right:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:right-2{right:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:right-2\\.5{right:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:right-\\[320px\\]{right:320px}.tpl\\:right-\\[360px\\]{right:360px}.tpl\\:right-\\[680px\\]{right:680px}.tpl\\:bottom-0{bottom:0}.tpl\\:bottom-1{bottom:calc(var(--tpl-base-size) / 4)}.tpl\\:bottom-10{bottom:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:bottom-full{bottom:100%}.tpl\\:-left-1{left:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\\:left-0{left:0}.tpl\\:left-1\\.5{left:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:left-1\\/2{left:50%}.tpl\\:left-2\\.5{left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:left-3{left:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:left-5{left:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:left-12{left:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:z-10{z-index:10}.tpl\\:z-40{z-index:40}.tpl\\:z-50{z-index:50}.tpl\\:z-\\[4\\]{z-index:4}.tpl\\:z-\\[5\\]{z-index:5}.tpl\\:z-\\[9999\\]{z-index:9999}.tpl\\:z-\\[10000\\]{z-index:10000}.tpl\\:m-0{margin:0}.tpl\\:m-6{margin:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:mx-0\\.5{margin-inline:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:mx-1{margin-inline:calc(var(--tpl-base-size) / 4)}.tpl\\:mx-1\\.5{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:mx-3{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:mx-4{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:mx-6{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:mx-auto{margin-inline:auto}.tpl\\:mt-0\\.5{margin-top:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:mt-1{margin-top:calc(var(--tpl-base-size) / 4)}.tpl\\:mt-1\\.5{margin-top:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:mt-2{margin-top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:mt-3{margin-top:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:mt-4{margin-top:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:\\!mb-0{margin-bottom:0!important}.tpl\\:mb-1{margin-bottom:calc(var(--tpl-base-size) / 4)}.tpl\\:mb-1\\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:mb-2{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:mb-2\\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:mb-3{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:mb-3\\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\\:mb-4{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:mb-px{margin-bottom:1px}.tpl\\:-ml-48{margin-left:calc(calc(var(--tpl-base-size) / 4) * -48)}.tpl\\:ml-0{margin-left:0}.tpl\\:ml-0\\.5{margin-left:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:ml-1{margin-left:calc(var(--tpl-base-size) / 4)}.tpl\\:ml-5{margin-left:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:ml-auto{margin-left:auto}.tpl\\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.tpl\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.tpl\\:\\!flex{display:flex!important}.tpl\\:block{display:block}.tpl\\:flex{display:flex}.tpl\\:grid{display:grid}.tpl\\:hidden{display:none}.tpl\\:inline{display:inline}.tpl\\:inline-block{display:inline-block}.tpl\\:inline-flex{display:inline-flex}.tpl\\:aspect-square{aspect-ratio:1}.tpl\\:size-1\\.5{width:calc(calc(var(--tpl-base-size) / 4) * 1.5);height:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:size-2{width:calc(calc(var(--tpl-base-size) / 4) * 2);height:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:size-3{width:calc(calc(var(--tpl-base-size) / 4) * 3);height:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:size-4{width:calc(calc(var(--tpl-base-size) / 4) * 4);height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:size-4\\.5{width:calc(calc(var(--tpl-base-size) / 4) * 4.5);height:calc(calc(var(--tpl-base-size) / 4) * 4.5)}.tpl\\:size-5{width:calc(calc(var(--tpl-base-size) / 4) * 5);height:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:size-6{width:calc(calc(var(--tpl-base-size) / 4) * 6);height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:size-7{width:calc(calc(var(--tpl-base-size) / 4) * 7);height:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:size-8{width:calc(calc(var(--tpl-base-size) / 4) * 8);height:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:size-10{width:calc(calc(var(--tpl-base-size) / 4) * 10);height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:size-16{width:calc(calc(var(--tpl-base-size) / 4) * 16);height:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:size-full{width:100%;height:100%}.tpl\\:h-0{height:0}.tpl\\:h-2\\.5{height:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:h-3{height:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:h-4{height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:h-5{height:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:h-6{height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:h-7{height:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:h-8{height:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:h-9{height:calc(calc(var(--tpl-base-size) / 4) * 9)}.tpl\\:h-10{height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:h-12{height:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:h-14{height:calc(calc(var(--tpl-base-size) / 4) * 14)}.tpl\\:h-16{height:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:h-32{height:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\\:h-44{height:calc(calc(var(--tpl-base-size) / 4) * 44)}.tpl\\:h-\\[32px\\]{height:32px}.tpl\\:h-auto{height:auto}.tpl\\:h-full{height:100%}.tpl\\:max-h-24{max-height:calc(calc(var(--tpl-base-size) / 4) * 24)}.tpl\\:max-h-32{max-height:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\\:max-h-48{max-height:calc(calc(var(--tpl-base-size) / 4) * 48)}.tpl\\:max-h-56{max-height:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\\:max-h-64{max-height:calc(calc(var(--tpl-base-size) / 4) * 64)}.tpl\\:max-h-\\[50vh\\]{max-height:50vh}.tpl\\:max-h-\\[60vh\\]{max-height:60vh}.tpl\\:max-h-\\[80\\%\\]{max-height:80%}.tpl\\:max-h-\\[80vh\\]{max-height:80vh}.tpl\\:max-h-\\[90\\%\\]{max-height:90%}.tpl\\:max-h-\\[90vh\\]{max-height:90vh}.tpl\\:max-h-full{max-height:100%}.tpl\\:min-h-0{min-height:0}.tpl\\:min-h-6{min-height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:min-h-10{min-height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:min-h-20{min-height:calc(calc(var(--tpl-base-size) / 4) * 20)}.tpl\\:min-h-\\[1\\.5em\\]{min-height:1.5em}.tpl\\:min-h-\\[1em\\]{min-height:1em}.tpl\\:min-h-\\[48px\\]{min-height:48px}.tpl\\:min-h-\\[60px\\]{min-height:60px}.tpl\\:min-h-\\[64px\\]{min-height:64px}.tpl\\:min-h-\\[68px\\]{min-height:68px}.tpl\\:min-h-\\[72px\\]{min-height:72px}.tpl\\:min-h-\\[80px\\]{min-height:80px}.tpl\\:min-h-\\[100px\\]{min-height:100px}.tpl\\:min-h-\\[120px\\]{min-height:120px}.tpl\\:min-h-\\[150px\\]{min-height:150px}.tpl\\:min-h-\\[400px\\]{min-height:400px}.tpl\\:w-1\\/2{width:50%}.tpl\\:w-1\\/3{width:33.3333%}.tpl\\:w-1\\/4{width:25%}.tpl\\:w-2\\/3{width:66.6667%}.tpl\\:w-3\\/4{width:75%}.tpl\\:w-5\\/6{width:83.3333%}.tpl\\:w-7{width:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:w-8{width:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:w-9{width:calc(calc(var(--tpl-base-size) / 4) * 9)}.tpl\\:w-10{width:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:w-12{width:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:w-16{width:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:w-20{width:calc(calc(var(--tpl-base-size) / 4) * 20)}.tpl\\:w-28{width:calc(calc(var(--tpl-base-size) / 4) * 28)}.tpl\\:w-32{width:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\\:w-36{width:calc(calc(var(--tpl-base-size) / 4) * 36)}.tpl\\:w-40{width:calc(calc(var(--tpl-base-size) / 4) * 40)}.tpl\\:w-48{width:calc(calc(var(--tpl-base-size) / 4) * 48)}.tpl\\:w-52{width:calc(calc(var(--tpl-base-size) / 4) * 52)}.tpl\\:w-56{width:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\\:w-72{width:calc(calc(var(--tpl-base-size) / 4) * 72)}.tpl\\:w-\\[280px\\]{width:280px}.tpl\\:w-\\[300px\\]{width:300px}.tpl\\:w-\\[320px\\]{width:320px}.tpl\\:w-\\[360px\\]{width:360px}.tpl\\:w-\\[400px\\]{width:400px}.tpl\\:w-\\[420px\\]{width:420px}.tpl\\:w-\\[1000px\\]{width:1000px}.tpl\\:w-\\[min\\(420px\\,92vw\\)\\]{width:min(420px,92vw)}.tpl\\:w-full{width:100%}.tpl\\:w-px{width:1px}.tpl\\:max-w-2xl{max-width:calc(42 * var(--tpl-base-size))}.tpl\\:max-w-\\[220px\\]{max-width:220px}.tpl\\:max-w-\\[240px\\]{max-width:240px}.tpl\\:max-w-\\[260px\\]{max-width:260px}.tpl\\:max-w-\\[320px\\]{max-width:320px}.tpl\\:max-w-\\[600px\\]{max-width:600px}.tpl\\:max-w-\\[calc\\(100\\%_-_2\\*var\\(--tpl-base-size\\)\\)\\]{max-width:calc(100% - 2 * var(--tpl-base-size))}.tpl\\:max-w-\\[calc\\(100vw_-_2\\*var\\(--tpl-base-size\\)\\)\\]{max-width:calc(100vw - 2 * var(--tpl-base-size))}.tpl\\:max-w-full{max-width:100%}.tpl\\:max-w-md{max-width:calc(28 * var(--tpl-base-size))}.tpl\\:max-w-sm{max-width:calc(24 * var(--tpl-base-size))}.tpl\\:min-w-0{min-width:0}.tpl\\:min-w-6{min-width:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:min-w-\\[20px\\]{min-width:20px}.tpl\\:min-w-\\[200px\\]{min-width:200px}.tpl\\:flex-1{flex:1}.tpl\\:flex-shrink-0,.tpl\\:shrink-0{flex-shrink:0}.tpl\\:origin-top-right{transform-origin:100% 0}.tpl\\:-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-x-4{--tw-translate-x:calc(calc(var(--tpl-base-size) / 4) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-y-2{--tw-translate-y:calc(calc(var(--tpl-base-size) / 4) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-y-1{--tw-translate-y:calc(var(--tpl-base-size) / 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-y-\\[-8px\\]{--tw-translate-y:-8px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:-rotate-90{rotate:-90deg}.tpl\\:rotate-0{rotate:0deg}.tpl\\:rotate-45{rotate:45deg}.tpl\\:rotate-90{rotate:90deg}.tpl\\:rotate-180{rotate:180deg}.tpl\\:animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}.tpl\\:animate-spin{animation:1s linear infinite spin}.tpl\\:cursor-default{cursor:default}.tpl\\:cursor-grab{cursor:grab}.tpl\\:cursor-help{cursor:help}.tpl\\:cursor-not-allowed{cursor:not-allowed}.tpl\\:cursor-pointer{cursor:pointer}.tpl\\:resize-none{resize:none}.tpl\\:resize-y{resize:vertical}.tpl\\:list-none{list-style-type:none}.tpl\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.tpl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.tpl\\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.tpl\\:grid-cols-\\[1fr_auto_1fr\\]{grid-template-columns:1fr auto 1fr}.tpl\\:flex-col{flex-direction:column}.tpl\\:flex-wrap{flex-wrap:wrap}.tpl\\:items-center{align-items:center}.tpl\\:items-end{align-items:flex-end}.tpl\\:items-start{align-items:flex-start}.tpl\\:items-stretch{align-items:stretch}.tpl\\:justify-between{justify-content:space-between}.tpl\\:justify-center{justify-content:center}.tpl\\:justify-end{justify-content:flex-end}.tpl\\:gap-0{gap:0}.tpl\\:gap-0\\.5{gap:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:gap-1{gap:calc(var(--tpl-base-size) / 4)}.tpl\\:gap-1\\.5{gap:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:gap-2{gap:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:gap-2\\.5{gap:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:gap-3{gap:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:gap-4{gap:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:gap-5{gap:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:gap-6{gap:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:gap-10{gap:calc(calc(var(--tpl-base-size) / 4) * 10)}:where(.tpl\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--tpl-base-size) / 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--tpl-base-size) / 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.tpl\\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(calc(var(--tpl-base-size) / 4) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(calc(var(--tpl-base-size) / 4) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.tpl\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * calc(1 - var(--tw-space-y-reverse)))}.tpl\\:gap-x-1{column-gap:calc(var(--tpl-base-size) / 4)}.tpl\\:gap-x-3{column-gap:calc(calc(var(--tpl-base-size) / 4) * 3)}:where(.tpl\\:-space-x-1\\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(calc(var(--tpl-base-size) / 4) * -1.5) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(calc(var(--tpl-base-size) / 4) * -1.5) * calc(1 - var(--tw-space-x-reverse)))}.tpl\\:gap-y-0\\.5{row-gap:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:gap-y-1\\.5{row-gap:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:self-end{align-self:flex-end}.tpl\\:self-start{align-self:flex-start}.tpl\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tpl\\:overflow-auto{overflow:auto}.tpl\\:overflow-hidden{overflow:hidden}.tpl\\:overflow-x-auto{overflow-x:auto}.tpl\\:overflow-y-auto{overflow-y:auto}.tpl\\:rounded{border-radius:calc(.25 * var(--tpl-base-size))}.tpl\\:rounded-\\[calc\\(var\\(--tpl-radius-sm\\)-2px\\)\\]{border-radius:calc(var(--tpl-radius-sm) - 2px)}.tpl\\:rounded-\\[var\\(--tpl-radius\\)\\]{border-radius:var(--tpl-radius)}.tpl\\:rounded-\\[var\\(--tpl-radius-lg\\)\\]{border-radius:var(--tpl-radius-lg)}.tpl\\:rounded-\\[var\\(--tpl-radius-md\\)\\]{border-radius:var(--tpl-radius-md)}.tpl\\:rounded-\\[var\\(--tpl-radius-sm\\)\\]{border-radius:var(--tpl-radius-sm)}.tpl\\:rounded-full{border-radius:3.40282e38px}.tpl\\:rounded-lg{border-radius:calc(.5 * var(--tpl-base-size))}.tpl\\:rounded-md{border-radius:calc(.375 * var(--tpl-base-size))}.tpl\\:rounded-sm{border-radius:calc(.25 * var(--tpl-base-size))}.tpl\\:rounded-xl{border-radius:calc(.75 * var(--tpl-base-size))}.tpl\\:rounded-l-\\[var\\(--tpl-radius-sm\\)\\]{border-top-left-radius:var(--tpl-radius-sm);border-bottom-left-radius:var(--tpl-radius-sm)}.tpl\\:rounded-tl-lg{border-top-left-radius:calc(.5 * var(--tpl-base-size))}.tpl\\:rounded-r-\\[var\\(--tpl-radius-sm\\)\\]{border-top-right-radius:var(--tpl-radius-sm);border-bottom-right-radius:var(--tpl-radius-sm)}.tpl\\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.tpl\\:border{border-style:var(--tw-border-style);border-width:1px}.tpl\\:border-0{border-style:var(--tw-border-style);border-width:0}.tpl\\:border-2{border-style:var(--tw-border-style);border-width:2px}.tpl\\:border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.tpl\\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.tpl\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.tpl\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.tpl\\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.tpl\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.tpl\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.tpl\\:border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.tpl\\:border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.tpl\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.tpl\\:border-none{--tw-border-style:none;border-style:none}.tpl\\:border-\\[var\\(--tpl-bg\\)\\]{border-color:var(--tpl-bg)}.tpl\\:border-\\[var\\(--tpl-border\\)\\]{border-color:var(--tpl-border)}.tpl\\:border-\\[var\\(--tpl-border-light\\)\\]{border-color:var(--tpl-border-light)}.tpl\\:border-\\[var\\(--tpl-danger\\)\\]{border-color:var(--tpl-danger)}.tpl\\:border-\\[var\\(--tpl-primary\\)\\]{border-color:var(--tpl-primary)}.tpl\\:border-\\[var\\(--tpl-primary-hover\\)\\]{border-color:var(--tpl-primary-hover)}.tpl\\:border-\\[var\\(--tpl-warning\\)\\]{border-color:var(--tpl-warning)}.tpl\\:border-transparent{border-color:#0000}.tpl\\:border-l-\\[var\\(--tpl-primary\\)\\]{border-left-color:var(--tpl-primary)}.tpl\\:border-l-transparent{border-left-color:#0000}.tpl\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-bg\\)_90\\%\\,transparent\\)\\]{background-color:var(--tpl-bg)}@supports (color:color-mix(in lab,red,red)){.tpl\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-bg\\)_90\\%\\,transparent\\)\\]{background-color:color-mix(in srgb,var(--tpl-bg) 90%,transparent)}}.tpl\\:bg-\\[var\\(--tpl-bg\\)\\]{background-color:var(--tpl-bg)}.tpl\\:bg-\\[var\\(--tpl-bg-active\\)\\]{background-color:var(--tpl-bg-active)}.tpl\\:bg-\\[var\\(--tpl-bg-elevated\\)\\]{background-color:var(--tpl-bg-elevated)}.tpl\\:bg-\\[var\\(--tpl-bg-hover\\)\\]{background-color:var(--tpl-bg-hover)}.tpl\\:bg-\\[var\\(--tpl-border\\)\\]{background-color:var(--tpl-border)}.tpl\\:bg-\\[var\\(--tpl-canvas-bg\\)\\]{background-color:var(--tpl-canvas-bg)}.tpl\\:bg-\\[var\\(--tpl-chrome-bg-elevated\\)\\]{background-color:var(--tpl-chrome-bg-elevated)}.tpl\\:bg-\\[var\\(--tpl-chrome-primary-light\\)\\]{background-color:var(--tpl-chrome-primary-light)}.tpl\\:bg-\\[var\\(--tpl-danger\\)\\]{background-color:var(--tpl-danger)}.tpl\\:bg-\\[var\\(--tpl-danger-light\\)\\]{background-color:var(--tpl-danger-light)}.tpl\\:bg-\\[var\\(--tpl-primary\\)\\]{background-color:var(--tpl-primary)}.tpl\\:bg-\\[var\\(--tpl-primary-light\\)\\]{background-color:var(--tpl-primary-light)}.tpl\\:bg-\\[var\\(--tpl-warning-light\\)\\]{background-color:var(--tpl-warning-light)}.tpl\\:bg-black\\/30{background-color:oklab(0% none none/.3)}.tpl\\:bg-black\\/40{background-color:oklab(0% none none/.4)}.tpl\\:bg-transparent{background-color:#0000}.tpl\\:object-contain{object-fit:contain}.tpl\\:object-cover{object-fit:cover}.tpl\\:p-0{padding:0}.tpl\\:p-0\\.5{padding:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:p-1{padding:calc(var(--tpl-base-size) / 4)}.tpl\\:p-1\\.5{padding:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:p-2{padding:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:p-3{padding:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:p-4{padding:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:p-5{padding:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:p-6{padding:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:p-8{padding:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:px-0\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:px-1{padding-inline:calc(var(--tpl-base-size) / 4)}.tpl\\:px-1\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:px-2{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:px-2\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:px-3{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:px-3\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\\:px-4{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:px-5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:px-6{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:px-8{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:px-10{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:py-0{padding-block:0}.tpl\\:py-0\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:py-1{padding-block:calc(var(--tpl-base-size) / 4)}.tpl\\:py-1\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:py-2{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:py-2\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:py-3{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:py-3\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\\:py-4{padding-block:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:py-5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:py-6{padding-block:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:py-8{padding-block:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:py-10{padding-block:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:py-12{padding-block:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:py-16{padding-block:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:py-\\[5px\\]{padding-block:5px}.tpl\\:py-\\[7px\\]{padding-block:7px}.tpl\\:py-px{padding-block:1px}.tpl\\:pt-1{padding-top:calc(var(--tpl-base-size) / 4)}.tpl\\:pt-2{padding-top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pt-2\\.5{padding-top:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:pt-3{padding-top:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pt-4{padding-top:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pr-2{padding-right:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pr-3{padding-right:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pr-4{padding-right:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pr-6{padding-right:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:pr-7{padding-right:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:pr-8{padding-right:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:pb-1{padding-bottom:calc(var(--tpl-base-size) / 4)}.tpl\\:pb-1\\.5{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:pb-2{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pb-3{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pb-4{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pl-2{padding-left:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pl-2\\.5{padding-left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:pl-3{padding-left:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pl-4{padding-left:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pl-8{padding-left:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:pl-9{padding-left:calc(calc(var(--tpl-base-size) / 4) * 9)}.tpl\\:pl-\\[18px\\]{padding-left:18px}.tpl\\:text-center{text-align:center}.tpl\\:text-left{text-align:left}.tpl\\:font-\\[inherit\\]{font-family:inherit}.tpl\\:font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.tpl\\:font-sans{font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tpl\\:text-4xl{font-size:calc(2.25 * var(--tpl-base-size));line-height:var(--tw-leading,calc(2.5 / 2.25))}.tpl\\:text-base{font-size:var(--tpl-base-size);line-height:var(--tw-leading, 1.5 )}.tpl\\:text-lg{font-size:calc(1.125 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.75 / 1.125))}.tpl\\:text-sm{font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875))}.tpl\\:text-xs{font-size:calc(.75 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1 / .75))}.tpl\\:text-\\[0\\.8em\\]{font-size:.8em}.tpl\\:text-\\[0\\.9em\\]{font-size:.9em}.tpl\\:text-\\[1em\\]{font-size:1em}.tpl\\:text-\\[8px\\]{font-size:8px}.tpl\\:text-\\[9px\\]{font-size:9px}.tpl\\:text-\\[10px\\]{font-size:10px}.tpl\\:text-\\[11px\\]{font-size:11px}.tpl\\:text-\\[12px\\]{font-size:12px}.tpl\\:text-\\[13px\\]{font-size:13px}.tpl\\:text-\\[length\\:inherit\\]{font-size:inherit}.tpl\\:leading-none{--tw-leading:1;line-height:1}.tpl\\:leading-normal{--tw-leading:1.5;line-height:1.5}.tpl\\:leading-relaxed{--tw-leading:1.625;line-height:1.625}.tpl\\:leading-snug{--tw-leading:1.375;line-height:1.375}.tpl\\:leading-tight{--tw-leading:1.25;line-height:1.25}.tpl\\:font-\\[var\\(--tpl-font-family\\)\\]{--tw-font-weight:var(--tpl-font-family);font-weight:var(--tpl-font-family)}.tpl\\:font-bold{--tw-font-weight:700;font-weight:700}.tpl\\:font-medium{--tw-font-weight:500;font-weight:500}.tpl\\:font-normal{--tw-font-weight:400;font-weight:400}.tpl\\:font-semibold{--tw-font-weight:600;font-weight:600}.tpl\\:tracking-wide{--tw-tracking:.025em;letter-spacing:.025em}.tpl\\:tracking-wider{--tw-tracking:.05em;letter-spacing:.05em}.tpl\\:break-all{word-break:break-all}.tpl\\:text-ellipsis{text-overflow:ellipsis}.tpl\\:whitespace-nowrap{white-space:nowrap}.tpl\\:whitespace-pre-wrap{white-space:pre-wrap}.tpl\\:text-\\[var\\(--tpl-bg\\)\\]{color:var(--tpl-bg)}.tpl\\:text-\\[var\\(--tpl-border\\)\\]{color:var(--tpl-border)}.tpl\\:text-\\[var\\(--tpl-border-light\\)\\]{color:var(--tpl-border-light)}.tpl\\:text-\\[var\\(--tpl-chrome-text-dim\\)\\]{color:var(--tpl-chrome-text-dim)}.tpl\\:text-\\[var\\(--tpl-chrome-text-muted\\)\\]{color:var(--tpl-chrome-text-muted)}.tpl\\:text-\\[var\\(--tpl-danger\\)\\]{color:var(--tpl-danger)}.tpl\\:text-\\[var\\(--tpl-on-primary\\)\\]{color:var(--tpl-on-primary)}.tpl\\:text-\\[var\\(--tpl-primary\\)\\]{color:var(--tpl-primary)}.tpl\\:text-\\[var\\(--tpl-primary-hover\\)\\]{color:var(--tpl-primary-hover)}.tpl\\:text-\\[var\\(--tpl-success\\)\\]{color:var(--tpl-success)}.tpl\\:text-\\[var\\(--tpl-success\\,var\\(--tpl-primary\\)\\)\\]{color:var(--tpl-success,var(--tpl-primary))}.tpl\\:text-\\[var\\(--tpl-text\\)\\]{color:var(--tpl-text)}.tpl\\:text-\\[var\\(--tpl-text-dim\\)\\]{color:var(--tpl-text-dim)}.tpl\\:text-\\[var\\(--tpl-text-muted\\)\\]{color:var(--tpl-text-muted)}.tpl\\:text-\\[var\\(--tpl-warning\\)\\]{color:var(--tpl-warning)}.tpl\\:text-white{color:#fff}.tpl\\:normal-case{text-transform:none}.tpl\\:uppercase{text-transform:uppercase}.tpl\\:italic{font-style:italic}.tpl\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tpl\\:no-underline{text-decoration-line:none}.tpl\\:underline{text-decoration-line:underline}.tpl\\:accent-\\[var\\(--tpl-primary\\)\\]{accent-color:var(--tpl-primary)}.tpl\\:opacity-0{opacity:0}.tpl\\:opacity-50{opacity:.5}.tpl\\:opacity-60{opacity:.6}.tpl\\:opacity-70{opacity:.7}.tpl\\:opacity-90{opacity:.9}.tpl\\:opacity-100{opacity:1}.tpl\\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-ring\\)\\]{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow\\)\\]{--tw-shadow:var(--tpl-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow-lg\\)\\]{--tw-shadow:var(--tpl-shadow-lg);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow-md\\)\\]{--tw-shadow:var(--tpl-shadow-md);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow-sm\\)\\]{--tw-shadow:var(--tpl-shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:ring-\\[var\\(--tpl-border\\)\\]{--tw-ring-color:var(--tpl-border)}.tpl\\:ring-\\[var\\(--tpl-primary\\)\\]{--tw-ring-color:var(--tpl-primary)}.tpl\\:ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.tpl\\:ring-offset-\\[var\\(--tpl-bg-elevated\\)\\]{--tw-ring-offset-color:var(--tpl-bg-elevated)}.tpl\\:backdrop-blur-\\[2px\\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.tpl\\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:duration-100{--tw-duration:.1s;transition-duration:.1s}.tpl\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.tpl\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.tpl\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.tpl\\:duration-\\[80ms\\]{--tw-duration:80ms;transition-duration:80ms}.tpl\\:duration-\\[120ms\\]{--tw-duration:.12s;transition-duration:.12s}.tpl\\:ease-\\[cubic-bezier\\(0\\.16\\,1\\,0\\.3\\,1\\)\\]{--tw-ease:cubic-bezier(.16,1,.3,1);transition-timing-function:cubic-bezier(.16,1,.3,1)}.tpl\\:ease-in{--tw-ease:cubic-bezier(.4, 0, 1, 1);transition-timing-function:cubic-bezier(.4,0,1,1)}.tpl\\:ease-out{--tw-ease:cubic-bezier(0, 0, .2, 1);transition-timing-function:cubic-bezier(0,0,.2,1)}.tpl\\:outline-none{--tw-outline-style:none;outline-style:none}.tpl\\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.tpl\\:group-hover\\:bg-black\\/40:is(:where(.tpl\\:group):hover *){background-color:oklab(0% none none/.4)}.tpl\\:group-hover\\:opacity-100:is(:where(.tpl\\:group):hover *){opacity:1}}.tpl\\:placeholder\\:text-\\[var\\(--tpl-text-dim\\)\\]::placeholder{color:var(--tpl-text-dim)}.tpl\\:first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.tpl\\:last\\:mb-0:last-child{margin-bottom:0}@media(hover:hover){.tpl\\:hover\\:z-10:hover{z-index:10}.tpl\\:hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:hover\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:hover\\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:hover\\:border-\\[var\\(--tpl-border\\)\\]:hover{border-color:var(--tpl-border)}.tpl\\:hover\\:border-\\[var\\(--tpl-danger\\)\\]:hover{border-color:var(--tpl-danger)}.tpl\\:hover\\:border-\\[var\\(--tpl-primary\\)\\]:hover{border-color:var(--tpl-primary)}.tpl\\:hover\\:border-\\[var\\(--tpl-text-dim\\)\\]:hover{border-color:var(--tpl-text-dim)}.tpl\\:hover\\:border-l-\\[var\\(--tpl-primary\\)\\]:hover{border-left-color:var(--tpl-primary)}.tpl\\:hover\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-text\\)_8\\%\\,transparent\\)\\]:hover{background-color:var(--tpl-text)}@supports (color:color-mix(in lab,red,red)){.tpl\\:hover\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-text\\)_8\\%\\,transparent\\)\\]:hover{background-color:color-mix(in srgb,var(--tpl-text) 8%,transparent)}}.tpl\\:hover\\:bg-\\[var\\(--tpl-bg-active\\)\\]:hover{background-color:var(--tpl-bg-active)}.tpl\\:hover\\:bg-\\[var\\(--tpl-bg-hover\\)\\]:hover{background-color:var(--tpl-bg-hover)}.tpl\\:hover\\:bg-\\[var\\(--tpl-danger-light\\)\\]:hover{background-color:var(--tpl-danger-light)}.tpl\\:hover\\:bg-\\[var\\(--tpl-primary-hover\\)\\]:hover{background-color:var(--tpl-primary-hover)}.tpl\\:hover\\:bg-\\[var\\(--tpl-primary-light\\)\\]:hover{background-color:var(--tpl-primary-light)}.tpl\\:hover\\:bg-\\[var\\(--tpl-warning-light\\)\\]:hover{background-color:var(--tpl-warning-light)}.tpl\\:hover\\:text-\\[var\\(--tpl-danger\\)\\]:hover{color:var(--tpl-danger)}.tpl\\:hover\\:text-\\[var\\(--tpl-primary\\)\\]:hover{color:var(--tpl-primary)}.tpl\\:hover\\:text-\\[var\\(--tpl-text\\)\\]:hover{color:var(--tpl-text)}.tpl\\:hover\\:underline:hover{text-decoration-line:underline}.tpl\\:hover\\:opacity-80:hover{opacity:.8}.tpl\\:hover\\:opacity-90:hover{opacity:.9}.tpl\\:hover\\:opacity-100:hover{opacity:1}.tpl\\:hover\\:shadow-\\[var\\(--tpl-shadow-md\\)\\]:hover{--tw-shadow:var(--tpl-shadow-md);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:hover\\:shadow-\\[var\\(--tpl-shadow-sm\\)\\]:hover{--tw-shadow:var(--tpl-shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.tpl\\:focus\\:border-\\[var\\(--tpl-primary\\)\\]:focus{border-color:var(--tpl-primary)}.tpl\\:focus\\:shadow-\\[0_0_0_3px_var\\(--tpl-primary-light\\)\\]:focus{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--tpl-primary-light));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:focus\\:shadow-\\[var\\(--tpl-ring\\)\\]:focus,.tpl\\:focus-visible\\:shadow-\\[var\\(--tpl-ring\\)\\]:focus-visible{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:focus-visible\\:ring-\\[var\\(--tpl-primary\\)\\]:focus-visible{--tw-ring-color:var(--tpl-primary)}.tpl\\:focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.tpl\\:focus-visible\\:ring-offset-\\[var\\(--tpl-bg-elevated\\)\\]:focus-visible{--tw-ring-offset-color:var(--tpl-bg-elevated)}.tpl\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.tpl\\:active\\:cursor-grabbing:active{cursor:grabbing}.tpl\\:active\\:bg-\\[var\\(--tpl-bg-active\\)\\]:active{background-color:var(--tpl-bg-active)}.tpl\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.tpl\\:disabled\\:opacity-30:disabled{opacity:.3}.tpl\\:disabled\\:opacity-40:disabled{opacity:.4}.tpl\\:disabled\\:opacity-50:disabled{opacity:.5}@media(hover:hover){.tpl\\:disabled\\:hover\\:bg-transparent:disabled:hover{background-color:#0000}}@layer base,components;.tpl{--tpl-base-size:var(--tpl-user-base-size,16px);--tpl-bg:var(--tpl-user-bg,oklch(99.5% .002 60));--tpl-bg-elevated:var(--tpl-user-bg-elevated,oklch(98% .004 60));--tpl-bg-hover:var(--tpl-user-bg-hover,oklch(96% .006 60));--tpl-bg-active:var(--tpl-user-bg-active,oklch(93.5% .008 60));--tpl-border:var(--tpl-user-border,oklch(92% .006 60));--tpl-border-light:var(--tpl-user-border-light,oklch(86% .01 60));--tpl-text:var(--tpl-user-text,oklch(18% .01 60));--tpl-text-muted:var(--tpl-user-text-muted,oklch(50% .015 60));--tpl-text-dim:var(--tpl-user-text-dim,oklch(68% .012 60));--tpl-primary:var(--tpl-user-primary,oklch(70% .16 55));--tpl-primary-hover:var(--tpl-user-primary-hover,oklch(63% .17 55));--tpl-primary-light:var(--tpl-user-primary-light,oklch(95% .04 55));--tpl-on-primary:var(--tpl-user-on-primary,var(--tpl-bg));--tpl-secondary:var(--tpl-user-secondary,oklch(60% .118 184.71));--tpl-secondary-hover:var(--tpl-user-secondary-hover,oklch(53.2% .105 186.39));--tpl-secondary-light:var(--tpl-user-secondary-light,oklch(93.8% .03 186.82));--tpl-success:var(--tpl-user-success,oklch(62.8% .194 155.1));--tpl-success-light:var(--tpl-user-success-light,oklch(93.6% .043 163.51));--tpl-warning:var(--tpl-user-warning,oklch(76.9% .168 70.08));--tpl-warning-light:var(--tpl-user-warning-light,oklch(95% .038 73.59));--tpl-danger:var(--tpl-user-danger,oklch(63.7% .237 25.33));--tpl-danger-light:var(--tpl-user-danger-light,oklch(93.6% .032 17.72));--tpl-canvas-bg:var(--tpl-user-canvas-bg,oklch(97.5% .003 60));--tpl-chrome-bg-elevated:var(--tpl-bg-elevated);--tpl-chrome-border-light:var(--tpl-border-light);--tpl-chrome-text:var(--tpl-text);--tpl-chrome-text-muted:var(--tpl-text-muted);--tpl-chrome-text-dim:var(--tpl-text-dim);--tpl-chrome-primary-light:var(--tpl-primary-light);--tpl-chrome-primary-hover:var(--tpl-primary-hover);--tpl-radius:var(--tpl-user-radius,10px);--tpl-radius-sm:var(--tpl-user-radius-sm,7px);--tpl-radius-lg:var(--tpl-user-radius-lg,14px);--tpl-font-family:var(--tpl-user-font-family,\"Geist\", ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");--tpl-shadow-sm:var(--tpl-user-shadow-sm,0 1px 2px #00000008);--tpl-shadow:var(--tpl-user-shadow,0 1px 2px #0000000a, 0 1px 3px #00000008);--tpl-shadow-md:var(--tpl-user-shadow-md,0 2px 8px #0000000f, 0 1px 3px #0000000a);--tpl-shadow-lg:var(--tpl-user-shadow-lg,0 4px 16px #00000014, 0 2px 6px #0000000a);--tpl-shadow-xl:var(--tpl-user-shadow-xl,0 8px 32px #0000001a, 0 4px 12px #0000000f);--tpl-overlay:var(--tpl-user-overlay,#00000080);--tpl-ring:var(--tpl-user-ring,0 0 0 3px var(--tpl-primary-light));--tpl-transition:var(--tpl-user-transition,.12s cubic-bezier(.16, 1, .3, 1))}.tpl[data-tpl-theme=dark]{--tpl-bg:var(--tpl-user-dark-bg,oklch(16% .005 60));--tpl-bg-elevated:var(--tpl-user-dark-bg-elevated,oklch(21% .006 60));--tpl-bg-hover:var(--tpl-user-dark-bg-hover,oklch(26% .007 60));--tpl-bg-active:var(--tpl-user-dark-bg-active,oklch(30% .008 60));--tpl-border:var(--tpl-user-dark-border,oklch(30% .006 60));--tpl-border-light:var(--tpl-user-dark-border-light,oklch(38% .008 60));--tpl-text:var(--tpl-user-dark-text,oklch(93% .005 60));--tpl-text-muted:var(--tpl-user-dark-text-muted,oklch(65% .01 60));--tpl-text-dim:var(--tpl-user-dark-text-dim,oklch(50% .008 60));--tpl-primary:var(--tpl-user-dark-primary,oklch(73% .15 55));--tpl-primary-hover:var(--tpl-user-dark-primary-hover,oklch(78% .14 55));--tpl-primary-light:var(--tpl-user-dark-primary-light,oklch(28% .05 55));--tpl-secondary:var(--tpl-user-dark-secondary,oklch(63% .11 184.71));--tpl-secondary-hover:var(--tpl-user-dark-secondary-hover,oklch(68% .1 186.39));--tpl-secondary-light:var(--tpl-user-dark-secondary-light,oklch(25% .03 186.82));--tpl-success:var(--tpl-user-dark-success,oklch(65% .18 155.1));--tpl-success-light:var(--tpl-user-dark-success-light,oklch(25% .04 163.51));--tpl-warning:var(--tpl-user-dark-warning,oklch(78% .16 70.08));--tpl-warning-light:var(--tpl-user-dark-warning-light,oklch(28% .04 73.59));--tpl-danger:var(--tpl-user-dark-danger,oklch(65% .22 25.33));--tpl-danger-light:var(--tpl-user-dark-danger-light,oklch(25% .04 17.72));--tpl-canvas-bg:var(--tpl-user-dark-canvas-bg,oklch(10% .003 60));--tpl-shadow-sm:var(--tpl-user-dark-shadow-sm,0 1px 2px #0003);--tpl-shadow:var(--tpl-user-dark-shadow,0 1px 2px #0000004d, 0 1px 3px #0003);--tpl-shadow-md:var(--tpl-user-dark-shadow-md,0 2px 8px #00000059, 0 1px 3px #00000040);--tpl-shadow-lg:var(--tpl-user-dark-shadow-lg,0 4px 16px #0006, 0 2px 6px #0000004d);--tpl-shadow-xl:var(--tpl-user-dark-shadow-xl,0 8px 32px #00000080, 0 4px 12px #00000059);--tpl-overlay:var(--tpl-user-dark-overlay,#000000b3);--tpl-ring:var(--tpl-user-dark-ring,0 0 0 3px var(--tpl-primary-light))}.tpl[data-tpl-theme=dark] .tpl-block-content{--tpl-bg-elevated:oklch(98% .004 60);--tpl-border-light:oklch(86% .01 60);--tpl-text:oklch(18% .01 60);--tpl-text-muted:oklch(50% .015 60);--tpl-text-dim:oklch(68% .012 60);--tpl-primary-light:oklch(95% .04 55);--tpl-primary-hover:oklch(60% .16 55);color:var(--tpl-text)}.tpl{height:100%;font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875));--tw-leading:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--tpl-bg);min-height:320px;color:var(--tpl-text);line-height:1.5;font-family:var(--tpl-font-family);flex-direction:column;display:flex}:where(.tpl) button,:where(.tpl) input,:where(.tpl) select,:where(.tpl) textarea{box-sizing:border-box;font-family:inherit}:where(.tpl) button{cursor:pointer;background:0 0;border:none;margin:0;padding:0}:where(.tpl) button:focus-visible,:where(.tpl) input:focus-visible,:where(.tpl) select:focus-visible,:where(.tpl) textarea:focus-visible{box-shadow:var(--tpl-ring);outline:none}:where(.tpl) .tpl-focus-ring-host:focus-within :is(input,select,textarea):focus-visible{box-shadow:none}.tpl ::-webkit-scrollbar{width:6px;height:6px}.tpl ::-webkit-scrollbar-track{background:0 0}.tpl ::-webkit-scrollbar-thumb{background-color:var(--tpl-border-light)}@supports (color:color-mix(in lab,red,red)){.tpl ::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--tpl-border-light) 60%,transparent)}}.tpl ::-webkit-scrollbar-thumb{border-radius:calc(.25 * var(--tpl-base-size))}.tpl ::-webkit-scrollbar-thumb:hover{background-color:var(--tpl-border-light)}@keyframes tpl-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes tpl-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tpl-popover-root{z-index:10000;position:relative}.tpl-merge-tag-label{text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}@supports (color:color-mix(in lab,red,red)){.tpl-merge-tag-label{-webkit-text-decoration-color:color-mix(in srgb,currentColor 55%,transparent);text-decoration-color:color-mix(in srgb,currentColor 55%,transparent)}}.tpl-pulse{animation:2s infinite tpl-pulse}.tpl-spinner{animation:1s linear infinite tpl-spin}@keyframes tpl-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes tpl-scale-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes tpl-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.tpl-fade-in{animation:.2s cubic-bezier(.16,1,.3,1) tpl-fade-in}.tpl-scale-in{animation:.15s cubic-bezier(.16,1,.3,1) tpl-scale-in}.tpl-shimmer{background:linear-gradient(90deg,var(--tpl-bg-hover) 25%,var(--tpl-bg-active) 50%,var(--tpl-bg-hover) 75%);background-size:200% 100%;animation:1.5s linear infinite tpl-shimmer}.tpl-preview-mode .tpl-block--idle,.tpl-preview-mode .tpl-block--idle:hover,.tpl-preview-mode .tpl-block--selected{box-shadow:none!important;outline:none!important}.tpl-preview-mode .tpl-block{cursor:default;pointer-events:none}.tpl-preview-mode .tpl-block-actions,.tpl-preview-mode .tpl-block-hidden-overlay,.tpl-preview-mode .tpl-condition-toggle,.tpl-preview-mode .tpl-comment-indicator,.tpl-preview-mode .tpl-collab-lock{display:none}.tpl-ghost{border:none!important;border-top:2px dotted var(--tpl-primary)!important;background-color:#0000!important;justify-content:center!important;align-items:center!important;width:100%!important;height:0!important;min-height:0!important;max-height:0!important;margin:12px 0!important;padding:0!important;display:flex!important;position:relative!important;overflow:visible!important}@supports (color:color-mix(in lab,red,red)){.tpl-ghost{border-top:2px dotted color-mix(in srgb,var(--tpl-primary) 50%,transparent)!important}}.tpl-ghost{box-shadow:none!important;border-radius:0!important}.tpl-ghost>*{display:none!important}.tpl-ghost:before{content:var(--tpl-drop-text,\"Drop here\");white-space:nowrap!important;color:var(--tpl-primary)!important;background-color:var(--tpl-primary)!important;padding:2px 8px!important;font-size:12px!important;font-weight:500!important;position:absolute!important;top:50%!important;left:50%!important;transform:translate(-50%,-50%)!important}@supports (color:color-mix(in lab,red,red)){.tpl-ghost:before{background-color:color-mix(in srgb,var(--tpl-primary) 15%,var(--tpl-bg))!important}}.tpl-ghost:before{border-radius:var(--tpl-radius-sm)!important;box-shadow:none!important}.tpl-canvas-empty .tpl-ghost{display:none!important}.tpl-dragging{opacity:.8;box-shadow:var(--tpl-shadow-xl)}.sortable-fallback{transition:none!important;animation:none!important}.tpl-block--lifted{outline:2px dashed var(--tpl-primary)!important;outline-offset:2px!important;box-shadow:var(--tpl-shadow-xl),0 0 0 4px var(--tpl-primary)!important}@supports (color:color-mix(in lab,red,red)){.tpl-block--lifted{box-shadow:var(--tpl-shadow-xl),0 0 0 4px color-mix(in srgb,var(--tpl-primary) 20%,transparent)!important}}.tpl-block--lifted{transition:transform .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1);transform:scale(1.01)}.tpl-sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tpl-text-toolbar-btn{width:calc(calc(var(--tpl-base-size) / 4) * 8);height:calc(calc(var(--tpl-base-size) / 4) * 8);cursor:pointer;border-radius:calc(.25 * var(--tpl-base-size));--tw-border-style:none;transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s);color:var(--tpl-text);background-color:#0000;border-style:none;justify-content:center;align-items:center;padding:0;display:flex}.tpl-text-toolbar-btn:hover{background-color:var(--tpl-bg-active)}.tpl-text-toolbar-btn--active{box-shadow:inset 0 0 0 1.5px var(--tpl-primary-hover);background-color:var(--tpl-primary)!important;color:var(--tpl-bg)!important}.tpl-text-toolbar-btn--active svg{stroke-width:2.75px}.tpl-text-content,.tpl-text-editable .tiptap{--tw-outline-style:none;outline-style:none}.tpl-text-editable{border-radius:calc(.25 * var(--tpl-base-size));border-style:var(--tw-border-style);--tw-border-style:dashed;padding:calc(calc(var(--tpl-base-size) / 4) * 2);border-style:dashed;border-width:1px;border-color:var(--tpl-primary);min-height:1.5em}.tpl-text-content p,.tpl-text-editable .tiptap p{margin:0;margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}:is(.tpl-text-content p,.tpl-text-editable .tiptap p):last-child{margin-bottom:0}.tpl-text-content ul,.tpl-text-content ol,.tpl-text-editable .tiptap ul,.tpl-text-editable .tiptap ol{margin-block:calc(calc(var(--tpl-base-size) / 4) * 2);padding-left:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl-text-content li,.tpl-text-editable .tiptap li{margin-block:calc(var(--tpl-base-size) / 4)}.tpl-text-content s,.tpl-text-editable .tiptap s{text-decoration-line:line-through}.tpl-text-content sub,.tpl-text-editable .tiptap sub{vertical-align:sub;font-size:.75em}.tpl-text-content sup,.tpl-text-editable .tiptap sup{vertical-align:super;font-size:.75em}.tpl-text-content a,.tpl-text-editable a{color:var(--tpl-doc-link-color,inherit);-webkit-text-decoration:var(--tpl-doc-link-underline,none);text-decoration:var(--tpl-doc-link-underline,none)}.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{margin-inline:calc(calc(var(--tpl-base-size) / 4) * .5);border-radius:calc(.25 * var(--tpl-base-size));padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5);padding-block:calc(calc(var(--tpl-base-size) / 4) * .5);--tw-font-weight:500;background-color:var(--tpl-primary);align-items:center;font-size:.9em;font-weight:500;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{background-color:color-mix(in srgb,var(--tpl-primary) 20%,transparent)}}.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{color:var(--tpl-primary)}.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{margin-inline:calc(calc(var(--tpl-base-size) / 4) * .5);border-radius:calc(.25 * var(--tpl-base-size));padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5);padding-block:calc(calc(var(--tpl-base-size) / 4) * .5);--tw-font-weight:700;--tw-tracking:.025em;letter-spacing:.025em;text-transform:uppercase;border:1.5px solid var(--tpl-primary);background-color:#0000;align-items:center;font-size:.8em;font-weight:700;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{border:1.5px solid color-mix(in srgb,var(--tpl-primary) 50%,transparent)}}.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{color:var(--tpl-primary)}.tpl-tooltip{position:relative}.tpl-tooltip:after{content:attr(data-tooltip);border-radius:var(--tpl-radius-sm);background-color:var(--tpl-text);color:var(--tpl-bg);white-space:normal;text-align:center;pointer-events:none;opacity:0;text-transform:none;z-index:50;width:max-content;max-width:min(320px,90vw);padding:4px 10px;font-size:12px;font-weight:500;line-height:1.4;transition:opacity .15s;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%)}.tpl-tooltip:before{content:\"\";border:4px solid #0000;border-bottom-color:var(--tpl-text);pointer-events:none;opacity:0;z-index:50;transition:opacity .15s;position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%)}.tpl-tooltip:hover:after,.tpl-tooltip:hover:before{opacity:1}.tpl.tpl-media-overlay{background-color:var(--tpl-overlay);-webkit-backdrop-filter:blur(8px);height:100%;min-height:0;color:var(--tpl-text);flex-direction:row;justify-content:center;align-items:center;display:flex}.tpl.tpl-text-toolbar{flex-direction:row;height:auto;min-height:0;display:flex}.tpl.tpl-link-dialog{background-color:var(--tpl-overlay);flex-direction:row;justify-content:center;align-items:center;height:100%;min-height:0;display:flex}.tpl-upload-zone-active{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}@property --tpl-comet-angle{syntax:\"<angle>\";inherits:false;initial-value:0deg}@property --tpl-comet-start{syntax:\"<percentage>\";inherits:false;initial-value:100%}@keyframes tpl-ai-comet{0%{--tpl-comet-angle:0deg;--tpl-comet-start:100%}1%{--tpl-comet-angle:24deg;--tpl-comet-start:88%}5%{--tpl-comet-angle:120deg;--tpl-comet-start:60%}25%{--tpl-comet-angle:600deg;--tpl-comet-start:60%}33%{--tpl-comet-angle:720deg;--tpl-comet-start:100%}to{--tpl-comet-angle:720deg;--tpl-comet-start:100%}}.tpl-ai-btn--idle{background-color:var(--tpl-primary-light);color:var(--tpl-text);box-shadow:none;z-index:0;position:relative}.tpl-ai-btn--idle:before{content:\"\";border-radius:inherit;background:conic-gradient(from var(--tpl-comet-angle),transparent 0%,transparent var(--tpl-comet-start),var(--tpl-primary) 80%,var(--tpl-primary) 90%,var(--tpl-primary) 97%,transparent 100%);padding:2px;position:absolute;inset:-2px}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--idle:before{background:conic-gradient(from var(--tpl-comet-angle),transparent 0%,transparent var(--tpl-comet-start),color-mix(in srgb,var(--tpl-primary) 40%,transparent) 80%,var(--tpl-primary) 90%,var(--tpl-primary) 97%,transparent 100%)}}.tpl-ai-btn--idle:before{z-index:-1;pointer-events:none;animation:20s linear 3s infinite tpl-ai-comet;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.tpl-ai-btn--idle:hover{background-color:var(--tpl-primary);color:var(--tpl-on-primary);transform:translateY(-1px);box-shadow:0 0 0 3px var(--tpl-primary),0 4px 16px var(--tpl-primary)!important}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--idle:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--tpl-primary) 20%,transparent),0 4px 16px color-mix(in srgb,var(--tpl-primary) 30%,transparent)!important}}.tpl-ai-btn--idle:hover:before{animation:none}.tpl-ai-btn--active{background-color:var(--tpl-primary-light);color:var(--tpl-primary-hover);border:1px solid var(--tpl-primary)}.tpl-ai-btn--active .tpl-ai-btn-icon{fill:var(--tpl-primary)}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--active .tpl-ai-btn-icon{fill:color-mix(in srgb,var(--tpl-primary) 25%,transparent)}}.tpl-ai-btn--active:hover{background-color:var(--tpl-primary-light)}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--active:hover{background-color:color-mix(in srgb,var(--tpl-primary-light) 80%,var(--tpl-primary))}}.tpl-merge-tag-delete:hover{color:var(--tpl-danger)!important}@media(prefers-reduced-motion:reduce){.tpl-pulse,.tpl-shimmer,.tpl-fade-in,.tpl-scale-in,.tpl-ai-btn--idle:before{animation:none}.tpl-shimmer{background:var(--tpl-bg-hover)}.tpl *,.tpl :before,.tpl :after{transition-duration:.01ms!important}.tpl-spinner{animation:1s linear infinite tpl-spin}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}.tpl-preview-pill-enter-active[data-v-ebc669ed]{transition:opacity .2s cubic-bezier(.16,1,.3,1),transform .2s cubic-bezier(.16,1,.3,1)}.tpl-preview-pill-leave-active[data-v-ebc669ed]{transition:opacity .15s ease-in,transform .15s ease-in}.tpl-preview-pill-enter-from[data-v-ebc669ed],.tpl-preview-pill-leave-to[data-v-ebc669ed]{opacity:0;transform:translateY(-8px) scale(.9)}.tpl-preview-pill-enter-to[data-v-ebc669ed],.tpl-preview-pill-leave-from[data-v-ebc669ed]{opacity:1;transform:translateY(0) scale(1)}.tpl-saved-block-skeleton{animation:tpl-saved-block-pulse 1.4s ease-in-out infinite}@keyframes tpl-saved-block-pulse{0%,to{opacity:1}50%{opacity:.55}}@media(prefers-reduced-motion:reduce){.tpl-saved-block-skeleton{animation:none}}.tpl-saved-block-delete-btn:hover{color:var(--tpl-danger)!important}.tpl-saved-block-rename-btn:hover{color:var(--tpl-primary)!important}.tpl-comments-slide-enter-active[data-v-40431726]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-comments-slide-leave-active[data-v-40431726]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-comments-input-wrapper[data-v-40431726]:focus-within{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-comments-send-btn[data-v-40431726]:not(:disabled):hover{transform:scale(1.05)}.tpl-comment-filter[data-v-40431726]{color:var(--tpl-text-muted);background-color:transparent}.tpl-comment-filter[data-v-40431726]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-text)}.tpl-comment-filter--active[data-v-40431726]{background-color:var(--tpl-primary-light);color:var(--tpl-primary)}.tpl-comment-action[data-v-40431726]{color:var(--tpl-text-dim);background-color:transparent}.tpl-comment-action[data-v-40431726]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-text)}.tpl-comment-delete[data-v-40431726]:hover{background-color:var(--tpl-danger-light);color:var(--tpl-danger)}.tpl-comment-card[data-v-40431726],.tpl-comment-reply-card[data-v-40431726]{border-color:var(--tpl-border);background-color:var(--tpl-bg)}.tpl-resolve-enter-active[data-v-40431726],.tpl-resolve-leave-active[data-v-40431726]{transition:opacity .3s ease,transform .3s ease}.tpl-resolve-enter-from[data-v-40431726],.tpl-resolve-leave-to[data-v-40431726]{opacity:0;transform:translateY(-4px)}.tpl-resolve-icon[data-v-40431726]{transition:color .3s ease,transform .2s ease}.tpl-resolve-icon[data-v-40431726]:active{transform:scale(1.3)}.tpl-replies-enter-active[data-v-40431726],.tpl-replies-leave-active[data-v-40431726]{transition:opacity .25s ease,transform .25s ease}.tpl-replies-enter-from[data-v-40431726],.tpl-replies-leave-to[data-v-40431726]{opacity:0;transform:translateY(-4px)}.tpl-ai-slide-enter-active[data-v-82649117]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-ai-slide-leave-active[data-v-82649117]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-ai-input-wrapper[data-v-82649117]:focus-within{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-ai-send-btn[data-v-82649117]:not(:disabled):hover{transform:scale(1.05)}.tpl-suggestion-btn[data-v-82649117]:hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-design-slide-enter-active[data-v-9a44c153]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-design-slide-leave-active[data-v-9a44c153]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-design-prompt-input[data-v-9a44c153]:focus{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-design-dropzone[data-v-9a44c153]:hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-scoring-slide-enter-active[data-v-7da30b57]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-scoring-slide-leave-active[data-v-7da30b57]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-scoring-fix-btn[data-v-7da30b57]:not(:disabled):hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-ai-feature-menu-item[data-v-bf59b787]:hover{background-color:var(--tpl-bg-hover)!important}\n/*$vite$:1*/", Hd = null;
|
|
5465
|
+
var Vd = "@import\"https://fonts.bunny.net/css?family=geist:400,500,600\";.tpl-loading-track[data-v-c3d50014]{height:3px;width:100%;border-radius:9999px;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--tpl-primary) 10%,transparent) 15%,color-mix(in srgb,var(--tpl-primary) 30%,transparent) 30%,var(--tpl-primary) 50%,color-mix(in srgb,var(--tpl-primary) 30%,transparent) 70%,color-mix(in srgb,var(--tpl-primary) 10%,transparent) 85%,transparent 100%);background-size:200% 100%;animation:tpl-loading-flow-c3d50014 3s ease-in-out infinite}@keyframes tpl-loading-flow-c3d50014{0%{background-position:100% 0}to{background-position:-100% 0}}@media(prefers-reduced-motion:reduce){.tpl-loading-track-fill[data-v-c3d50014]{animation:none;background-position:50% 0}}.tpl-block--idle[data-v-096f1d37]{outline:1.5px dashed color-mix(in srgb,var(--tpl-primary) 30%,transparent);outline-offset:-1px;transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block--idle[data-v-096f1d37]:hover{outline:1.5px solid color-mix(in srgb,var(--tpl-primary) 50%,transparent);outline-offset:-1px;box-shadow:0 0 8px color-mix(in srgb,var(--tpl-primary) 8%,transparent)}.tpl-block--picked[data-v-096f1d37]{outline:2px solid var(--tpl-primary);outline-offset:-1px;box-shadow:0 0 0 4px color-mix(in srgb,var(--tpl-primary) 18%,transparent);transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block--selected[data-v-096f1d37]{outline:2px solid color-mix(in srgb,var(--tpl-primary) 60%,transparent);outline-offset:-1px;box-shadow:0 0 12px color-mix(in srgb,var(--tpl-primary) 15%,transparent);transition:outline .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1)}.tpl-block-action-btn[data-v-096f1d37]{color:var(--tpl-chrome-text-muted);background-color:transparent}.tpl-block-action-btn[data-v-096f1d37]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-chrome-text)}.tpl-block-action-btn[data-v-096f1d37]:active{transform:scale(.9)}.tpl-block-delete-btn[data-v-096f1d37]:hover{background-color:var(--tpl-danger-light);color:var(--tpl-danger)}.tpl-condition-toggle[data-v-096f1d37]:hover{background-color:var(--tpl-bg-hover)!important}.tpl-condition-toggle[data-v-096f1d37]:active{transform:scale(.9)}.tpl-block-hidden-overlay[data-v-096f1d37]{background-color:color-mix(in srgb,var(--tpl-bg) 60%,transparent)}.tpl-table-editable[data-v-963ac422] th[contenteditable],.tpl-table-editable[data-v-963ac422] td[contenteditable]{outline:none;cursor:text;min-width:calc(2 * var(--tpl-base-size))}.tpl-table-editable[data-v-963ac422] th[contenteditable]:empty:before,.tpl-table-editable[data-v-963ac422] td[contenteditable]:empty:before{content:attr(data-placeholder);color:var(--tpl-text-dim);pointer-events:none}.tpl-table-editable[data-v-963ac422] th[contenteditable]:focus,.tpl-table-editable[data-v-963ac422] td[contenteditable]:focus{outline:2px solid var(--tpl-primary);outline-offset:-2px;border-radius:1px}hex-color-picker{--hcp-width: 200px}hex-color-picker::part(hue){border-radius:var(--tpl-radius-sm, 7px)}hex-color-picker::part(saturation){border-radius:var(--tpl-radius-sm, 7px) var(--tpl-radius-sm, 7px) 0 0}.tpl-color-swatch-empty{background-color:var(--tpl-bg);background-image:linear-gradient(to top right,transparent calc(50% - .75px),var(--tpl-text-dim) calc(50% - .75px),var(--tpl-text-dim) calc(50% + .75px),transparent calc(50% + .75px))}.tpl-canvas--dark-mode[data-v-9bb8b409] .tpl-block-content:not(.tpl-block-content *){filter:invert(1) hue-rotate(180deg)}[data-v-9bb8b409] .tpl-block-content{transition:filter .3s ease}.tpl-canvas--dark-mode[data-v-9bb8b409] .tpl-block-content img{filter:invert(1) hue-rotate(180deg)}.tpl-pulse-fill[data-v-c289916a]{animation:tpl-field-pulse-c289916a 1s ease-out}@keyframes tpl-field-pulse-c289916a{0%{box-shadow:0 0 color-mix(in srgb,var(--tpl-warning) 30%,transparent);background-color:color-mix(in srgb,var(--tpl-warning) 6%,transparent)}40%{box-shadow:0 0 0 3px color-mix(in srgb,var(--tpl-warning) 15%,transparent);background-color:color-mix(in srgb,var(--tpl-warning) 5%,transparent)}to{box-shadow:0 0 0 0 transparent;background-color:transparent}}@media(prefers-reduced-motion:reduce){.tpl-pulse-fill[data-v-c289916a]{animation:none}}input[type=number][data-v-69591c1e]::-webkit-outer-spin-button,input[type=number][data-v-69591c1e]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-69591c1e]{-moz-appearance:textfield}.tpl-collapsible[data-v-c0ea5f03]{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s cubic-bezier(.16,1,.3,1)}.tpl-collapsible--open[data-v-c0ea5f03]{grid-template-rows:1fr}.tpl-collapsible>div[data-v-c0ea5f03]{overflow:hidden}.tpl-icon-enter-active[data-v-632aa74f],.tpl-icon-leave-active[data-v-632aa74f]{transition:opacity .12s cubic-bezier(.16,1,.3,1),transform .12s cubic-bezier(.16,1,.3,1)}.tpl-icon-enter-from[data-v-632aa74f],.tpl-icon-leave-to[data-v-632aa74f]{opacity:0;transform:scale(.8)}.tpl-dark-mode-toggle[data-v-632aa74f]:hover{background-color:var(--tpl-bg-hover)}.tpl-dark-mode-toggle[data-v-632aa74f]:active{transform:scale(.92)}.tpl-icon-enter-active[data-v-eef7b2ca],.tpl-icon-leave-active[data-v-eef7b2ca]{transition:opacity .12s cubic-bezier(.16,1,.3,1),transform .12s cubic-bezier(.16,1,.3,1)}.tpl-icon-enter-from[data-v-eef7b2ca],.tpl-icon-leave-to[data-v-eef7b2ca]{opacity:0;transform:scale(.8)}.tpl-preview-toggle[data-v-eef7b2ca]:hover{background-color:var(--tpl-bg-hover)}.tpl-preview-toggle[data-v-eef7b2ca]:active{transform:scale(.92)}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tpl-comet-angle:0deg;--tpl-comet-start:100%}}}@layer theme{:root,:host{--tpl-radius-sm:calc(.25 * var(--tpl-base-size));--tpl-radius-md:calc(.375 * var(--tpl-base-size));--tpl-radius-lg:calc(.5 * var(--tpl-base-size));--tpl-shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--tpl-shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--tpl-shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tpl-shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tpl-radius:calc(.25 * var(--tpl-base-size))}}.tpl\\:pointer-events-auto{pointer-events:auto}.tpl\\:pointer-events-none{pointer-events:none}.tpl\\:invisible{visibility:hidden}.tpl\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tpl\\:absolute{position:absolute}.tpl\\:fixed{position:fixed}.tpl\\:relative{position:relative}.tpl\\:sticky{position:sticky}.tpl\\:inset-0{inset:0}.tpl\\:inset-x-0{inset-inline:0}.tpl\\:inset-y-1{inset-block:calc(var(--tpl-base-size) / 4)}.tpl\\:-top-0\\.5{top:calc(calc(var(--tpl-base-size) / 4) * -.5)}.tpl\\:-top-1{top:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\\:top-0{top:0}.tpl\\:top-1{top:calc(var(--tpl-base-size) / 4)}.tpl\\:top-1\\.5{top:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:top-1\\/2{top:50%}.tpl\\:top-2{top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:top-14{top:calc(calc(var(--tpl-base-size) / 4) * 14)}.tpl\\:top-16{top:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:top-\\[104px\\]{top:104px}.tpl\\:top-full{top:100%}.tpl\\:-right-1{right:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\\:-right-2{right:calc(calc(var(--tpl-base-size) / 4) * -2)}.tpl\\:right-0{right:0}.tpl\\:right-1{right:calc(var(--tpl-base-size) / 4)}.tpl\\:right-1\\.5{right:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:right-2{right:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:right-2\\.5{right:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:right-\\[320px\\]{right:320px}.tpl\\:right-\\[360px\\]{right:360px}.tpl\\:right-\\[680px\\]{right:680px}.tpl\\:bottom-0{bottom:0}.tpl\\:bottom-1{bottom:calc(var(--tpl-base-size) / 4)}.tpl\\:bottom-10{bottom:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:bottom-full{bottom:100%}.tpl\\:-left-1{left:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\\:left-0{left:0}.tpl\\:left-1\\.5{left:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:left-1\\/2{left:50%}.tpl\\:left-2\\.5{left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:left-3{left:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:left-5{left:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:left-12{left:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:z-10{z-index:10}.tpl\\:z-40{z-index:40}.tpl\\:z-50{z-index:50}.tpl\\:z-\\[4\\]{z-index:4}.tpl\\:z-\\[5\\]{z-index:5}.tpl\\:z-\\[9999\\]{z-index:9999}.tpl\\:z-\\[10000\\]{z-index:10000}.tpl\\:m-0{margin:0}.tpl\\:m-6{margin:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:mx-0\\.5{margin-inline:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:mx-1{margin-inline:calc(var(--tpl-base-size) / 4)}.tpl\\:mx-1\\.5{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:mx-3{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:mx-4{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:mx-6{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:mx-auto{margin-inline:auto}.tpl\\:mt-0\\.5{margin-top:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:mt-1{margin-top:calc(var(--tpl-base-size) / 4)}.tpl\\:mt-1\\.5{margin-top:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:mt-2{margin-top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:mt-3{margin-top:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:mt-4{margin-top:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:\\!mb-0{margin-bottom:0!important}.tpl\\:mb-1{margin-bottom:calc(var(--tpl-base-size) / 4)}.tpl\\:mb-1\\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:mb-2{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:mb-2\\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:mb-3{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:mb-3\\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\\:mb-4{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:mb-px{margin-bottom:1px}.tpl\\:-ml-48{margin-left:calc(calc(var(--tpl-base-size) / 4) * -48)}.tpl\\:ml-0{margin-left:0}.tpl\\:ml-0\\.5{margin-left:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:ml-1{margin-left:calc(var(--tpl-base-size) / 4)}.tpl\\:ml-5{margin-left:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:ml-auto{margin-left:auto}.tpl\\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.tpl\\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.tpl\\:\\!flex{display:flex!important}.tpl\\:block{display:block}.tpl\\:flex{display:flex}.tpl\\:grid{display:grid}.tpl\\:hidden{display:none}.tpl\\:inline{display:inline}.tpl\\:inline-block{display:inline-block}.tpl\\:inline-flex{display:inline-flex}.tpl\\:aspect-square{aspect-ratio:1}.tpl\\:size-1\\.5{width:calc(calc(var(--tpl-base-size) / 4) * 1.5);height:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:size-2{width:calc(calc(var(--tpl-base-size) / 4) * 2);height:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:size-3{width:calc(calc(var(--tpl-base-size) / 4) * 3);height:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:size-4{width:calc(calc(var(--tpl-base-size) / 4) * 4);height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:size-4\\.5{width:calc(calc(var(--tpl-base-size) / 4) * 4.5);height:calc(calc(var(--tpl-base-size) / 4) * 4.5)}.tpl\\:size-5{width:calc(calc(var(--tpl-base-size) / 4) * 5);height:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:size-6{width:calc(calc(var(--tpl-base-size) / 4) * 6);height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:size-7{width:calc(calc(var(--tpl-base-size) / 4) * 7);height:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:size-8{width:calc(calc(var(--tpl-base-size) / 4) * 8);height:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:size-10{width:calc(calc(var(--tpl-base-size) / 4) * 10);height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:size-16{width:calc(calc(var(--tpl-base-size) / 4) * 16);height:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:size-full{width:100%;height:100%}.tpl\\:h-0{height:0}.tpl\\:h-2\\.5{height:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:h-3{height:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:h-4{height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:h-5{height:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:h-6{height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:h-7{height:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:h-8{height:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:h-9{height:calc(calc(var(--tpl-base-size) / 4) * 9)}.tpl\\:h-10{height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:h-12{height:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:h-14{height:calc(calc(var(--tpl-base-size) / 4) * 14)}.tpl\\:h-16{height:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:h-32{height:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\\:h-44{height:calc(calc(var(--tpl-base-size) / 4) * 44)}.tpl\\:h-\\[32px\\]{height:32px}.tpl\\:h-auto{height:auto}.tpl\\:h-full{height:100%}.tpl\\:max-h-24{max-height:calc(calc(var(--tpl-base-size) / 4) * 24)}.tpl\\:max-h-32{max-height:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\\:max-h-48{max-height:calc(calc(var(--tpl-base-size) / 4) * 48)}.tpl\\:max-h-56{max-height:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\\:max-h-64{max-height:calc(calc(var(--tpl-base-size) / 4) * 64)}.tpl\\:max-h-\\[50vh\\]{max-height:50vh}.tpl\\:max-h-\\[60vh\\]{max-height:60vh}.tpl\\:max-h-\\[80\\%\\]{max-height:80%}.tpl\\:max-h-\\[80vh\\]{max-height:80vh}.tpl\\:max-h-\\[90\\%\\]{max-height:90%}.tpl\\:max-h-\\[90vh\\]{max-height:90vh}.tpl\\:max-h-full{max-height:100%}.tpl\\:min-h-0{min-height:0}.tpl\\:min-h-6{min-height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:min-h-10{min-height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:min-h-20{min-height:calc(calc(var(--tpl-base-size) / 4) * 20)}.tpl\\:min-h-\\[1\\.5em\\]{min-height:1.5em}.tpl\\:min-h-\\[1em\\]{min-height:1em}.tpl\\:min-h-\\[48px\\]{min-height:48px}.tpl\\:min-h-\\[60px\\]{min-height:60px}.tpl\\:min-h-\\[64px\\]{min-height:64px}.tpl\\:min-h-\\[68px\\]{min-height:68px}.tpl\\:min-h-\\[72px\\]{min-height:72px}.tpl\\:min-h-\\[80px\\]{min-height:80px}.tpl\\:min-h-\\[100px\\]{min-height:100px}.tpl\\:min-h-\\[120px\\]{min-height:120px}.tpl\\:min-h-\\[150px\\]{min-height:150px}.tpl\\:min-h-\\[400px\\]{min-height:400px}.tpl\\:w-1\\/2{width:50%}.tpl\\:w-1\\/3{width:33.3333%}.tpl\\:w-1\\/4{width:25%}.tpl\\:w-2\\/3{width:66.6667%}.tpl\\:w-3\\/4{width:75%}.tpl\\:w-5\\/6{width:83.3333%}.tpl\\:w-7{width:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:w-8{width:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:w-9{width:calc(calc(var(--tpl-base-size) / 4) * 9)}.tpl\\:w-10{width:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:w-12{width:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:w-16{width:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:w-20{width:calc(calc(var(--tpl-base-size) / 4) * 20)}.tpl\\:w-28{width:calc(calc(var(--tpl-base-size) / 4) * 28)}.tpl\\:w-32{width:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\\:w-36{width:calc(calc(var(--tpl-base-size) / 4) * 36)}.tpl\\:w-40{width:calc(calc(var(--tpl-base-size) / 4) * 40)}.tpl\\:w-48{width:calc(calc(var(--tpl-base-size) / 4) * 48)}.tpl\\:w-52{width:calc(calc(var(--tpl-base-size) / 4) * 52)}.tpl\\:w-56{width:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\\:w-72{width:calc(calc(var(--tpl-base-size) / 4) * 72)}.tpl\\:w-\\[280px\\]{width:280px}.tpl\\:w-\\[300px\\]{width:300px}.tpl\\:w-\\[320px\\]{width:320px}.tpl\\:w-\\[360px\\]{width:360px}.tpl\\:w-\\[400px\\]{width:400px}.tpl\\:w-\\[420px\\]{width:420px}.tpl\\:w-\\[1000px\\]{width:1000px}.tpl\\:w-\\[min\\(420px\\,92vw\\)\\]{width:min(420px,92vw)}.tpl\\:w-full{width:100%}.tpl\\:w-px{width:1px}.tpl\\:max-w-2xl{max-width:calc(42 * var(--tpl-base-size))}.tpl\\:max-w-3xl{max-width:calc(48 * var(--tpl-base-size))}.tpl\\:max-w-\\[220px\\]{max-width:220px}.tpl\\:max-w-\\[240px\\]{max-width:240px}.tpl\\:max-w-\\[260px\\]{max-width:260px}.tpl\\:max-w-\\[320px\\]{max-width:320px}.tpl\\:max-w-\\[600px\\]{max-width:600px}.tpl\\:max-w-\\[calc\\(100\\%_-_2\\*var\\(--tpl-base-size\\)\\)\\]{max-width:calc(100% - 2 * var(--tpl-base-size))}.tpl\\:max-w-\\[calc\\(100vw_-_2\\*var\\(--tpl-base-size\\)\\)\\]{max-width:calc(100vw - 2 * var(--tpl-base-size))}.tpl\\:max-w-full{max-width:100%}.tpl\\:max-w-md{max-width:calc(28 * var(--tpl-base-size))}.tpl\\:max-w-sm{max-width:calc(24 * var(--tpl-base-size))}.tpl\\:min-w-0{min-width:0}.tpl\\:min-w-6{min-width:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:min-w-\\[20px\\]{min-width:20px}.tpl\\:min-w-\\[200px\\]{min-width:200px}.tpl\\:flex-1{flex:1}.tpl\\:flex-shrink-0,.tpl\\:shrink-0{flex-shrink:0}.tpl\\:origin-top-right{transform-origin:100% 0}.tpl\\:-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-x-4{--tw-translate-x:calc(calc(var(--tpl-base-size) / 4) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-y-2{--tw-translate-y:calc(calc(var(--tpl-base-size) / 4) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-y-1{--tw-translate-y:calc(var(--tpl-base-size) / 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:translate-y-\\[-8px\\]{--tw-translate-y:-8px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:-rotate-90{rotate:-90deg}.tpl\\:rotate-0{rotate:0deg}.tpl\\:rotate-45{rotate:45deg}.tpl\\:rotate-90{rotate:90deg}.tpl\\:rotate-180{rotate:180deg}.tpl\\:animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}.tpl\\:animate-spin{animation:1s linear infinite spin}.tpl\\:cursor-default{cursor:default}.tpl\\:cursor-grab{cursor:grab}.tpl\\:cursor-help{cursor:help}.tpl\\:cursor-not-allowed{cursor:not-allowed}.tpl\\:cursor-pointer{cursor:pointer}.tpl\\:resize-none{resize:none}.tpl\\:resize-y{resize:vertical}.tpl\\:list-none{list-style-type:none}.tpl\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.tpl\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.tpl\\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.tpl\\:grid-cols-\\[1fr_auto_1fr\\]{grid-template-columns:1fr auto 1fr}.tpl\\:flex-col{flex-direction:column}.tpl\\:flex-wrap{flex-wrap:wrap}.tpl\\:items-center{align-items:center}.tpl\\:items-end{align-items:flex-end}.tpl\\:items-start{align-items:flex-start}.tpl\\:items-stretch{align-items:stretch}.tpl\\:justify-between{justify-content:space-between}.tpl\\:justify-center{justify-content:center}.tpl\\:justify-end{justify-content:flex-end}.tpl\\:gap-0{gap:0}.tpl\\:gap-0\\.5{gap:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:gap-1{gap:calc(var(--tpl-base-size) / 4)}.tpl\\:gap-1\\.5{gap:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:gap-2{gap:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:gap-2\\.5{gap:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:gap-3{gap:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:gap-4{gap:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:gap-5{gap:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:gap-6{gap:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:gap-10{gap:calc(calc(var(--tpl-base-size) / 4) * 10)}:where(.tpl\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--tpl-base-size) / 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--tpl-base-size) / 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.tpl\\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(calc(var(--tpl-base-size) / 4) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(calc(var(--tpl-base-size) / 4) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.tpl\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * calc(1 - var(--tw-space-y-reverse)))}.tpl\\:gap-x-1{column-gap:calc(var(--tpl-base-size) / 4)}.tpl\\:gap-x-3{column-gap:calc(calc(var(--tpl-base-size) / 4) * 3)}:where(.tpl\\:-space-x-1\\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(calc(var(--tpl-base-size) / 4) * -1.5) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(calc(var(--tpl-base-size) / 4) * -1.5) * calc(1 - var(--tw-space-x-reverse)))}.tpl\\:gap-y-0\\.5{row-gap:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:gap-y-1\\.5{row-gap:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:self-end{align-self:flex-end}.tpl\\:self-start{align-self:flex-start}.tpl\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tpl\\:overflow-auto{overflow:auto}.tpl\\:overflow-hidden{overflow:hidden}.tpl\\:overflow-x-auto{overflow-x:auto}.tpl\\:overflow-y-auto{overflow-y:auto}.tpl\\:rounded{border-radius:calc(.25 * var(--tpl-base-size))}.tpl\\:rounded-\\[calc\\(var\\(--tpl-radius-sm\\)-2px\\)\\]{border-radius:calc(var(--tpl-radius-sm) - 2px)}.tpl\\:rounded-\\[var\\(--tpl-radius\\)\\]{border-radius:var(--tpl-radius)}.tpl\\:rounded-\\[var\\(--tpl-radius-lg\\)\\]{border-radius:var(--tpl-radius-lg)}.tpl\\:rounded-\\[var\\(--tpl-radius-md\\)\\]{border-radius:var(--tpl-radius-md)}.tpl\\:rounded-\\[var\\(--tpl-radius-sm\\)\\]{border-radius:var(--tpl-radius-sm)}.tpl\\:rounded-full{border-radius:3.40282e38px}.tpl\\:rounded-lg{border-radius:calc(.5 * var(--tpl-base-size))}.tpl\\:rounded-md{border-radius:calc(.375 * var(--tpl-base-size))}.tpl\\:rounded-sm{border-radius:calc(.25 * var(--tpl-base-size))}.tpl\\:rounded-xl{border-radius:calc(.75 * var(--tpl-base-size))}.tpl\\:rounded-l-\\[var\\(--tpl-radius-sm\\)\\]{border-top-left-radius:var(--tpl-radius-sm);border-bottom-left-radius:var(--tpl-radius-sm)}.tpl\\:rounded-tl-lg{border-top-left-radius:calc(.5 * var(--tpl-base-size))}.tpl\\:rounded-r-\\[var\\(--tpl-radius-sm\\)\\]{border-top-right-radius:var(--tpl-radius-sm);border-bottom-right-radius:var(--tpl-radius-sm)}.tpl\\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.tpl\\:border{border-style:var(--tw-border-style);border-width:1px}.tpl\\:border-0{border-style:var(--tw-border-style);border-width:0}.tpl\\:border-2{border-style:var(--tw-border-style);border-width:2px}.tpl\\:border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.tpl\\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.tpl\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.tpl\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.tpl\\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.tpl\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.tpl\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.tpl\\:border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.tpl\\:border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.tpl\\:border-dashed{--tw-border-style:dashed;border-style:dashed}.tpl\\:border-none{--tw-border-style:none;border-style:none}.tpl\\:border-\\[var\\(--tpl-bg\\)\\]{border-color:var(--tpl-bg)}.tpl\\:border-\\[var\\(--tpl-border\\)\\]{border-color:var(--tpl-border)}.tpl\\:border-\\[var\\(--tpl-border-light\\)\\]{border-color:var(--tpl-border-light)}.tpl\\:border-\\[var\\(--tpl-danger\\)\\]{border-color:var(--tpl-danger)}.tpl\\:border-\\[var\\(--tpl-primary\\)\\]{border-color:var(--tpl-primary)}.tpl\\:border-\\[var\\(--tpl-primary-hover\\)\\]{border-color:var(--tpl-primary-hover)}.tpl\\:border-\\[var\\(--tpl-warning\\)\\]{border-color:var(--tpl-warning)}.tpl\\:border-transparent{border-color:#0000}.tpl\\:border-l-\\[var\\(--tpl-primary\\)\\]{border-left-color:var(--tpl-primary)}.tpl\\:border-l-transparent{border-left-color:#0000}.tpl\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-bg\\)_90\\%\\,transparent\\)\\]{background-color:var(--tpl-bg)}@supports (color:color-mix(in lab,red,red)){.tpl\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-bg\\)_90\\%\\,transparent\\)\\]{background-color:color-mix(in srgb,var(--tpl-bg) 90%,transparent)}}.tpl\\:bg-\\[var\\(--tpl-bg\\)\\]{background-color:var(--tpl-bg)}.tpl\\:bg-\\[var\\(--tpl-bg-active\\)\\]{background-color:var(--tpl-bg-active)}.tpl\\:bg-\\[var\\(--tpl-bg-elevated\\)\\]{background-color:var(--tpl-bg-elevated)}.tpl\\:bg-\\[var\\(--tpl-bg-hover\\)\\]{background-color:var(--tpl-bg-hover)}.tpl\\:bg-\\[var\\(--tpl-border\\)\\]{background-color:var(--tpl-border)}.tpl\\:bg-\\[var\\(--tpl-canvas-bg\\)\\]{background-color:var(--tpl-canvas-bg)}.tpl\\:bg-\\[var\\(--tpl-chrome-bg-elevated\\)\\]{background-color:var(--tpl-chrome-bg-elevated)}.tpl\\:bg-\\[var\\(--tpl-chrome-primary-light\\)\\]{background-color:var(--tpl-chrome-primary-light)}.tpl\\:bg-\\[var\\(--tpl-danger\\)\\]{background-color:var(--tpl-danger)}.tpl\\:bg-\\[var\\(--tpl-danger-light\\)\\]{background-color:var(--tpl-danger-light)}.tpl\\:bg-\\[var\\(--tpl-primary\\)\\]{background-color:var(--tpl-primary)}.tpl\\:bg-\\[var\\(--tpl-primary-light\\)\\]{background-color:var(--tpl-primary-light)}.tpl\\:bg-\\[var\\(--tpl-warning-light\\)\\]{background-color:var(--tpl-warning-light)}.tpl\\:bg-black\\/30{background-color:oklab(0% none none/.3)}.tpl\\:bg-black\\/40{background-color:oklab(0% none none/.4)}.tpl\\:bg-transparent{background-color:#0000}.tpl\\:object-contain{object-fit:contain}.tpl\\:object-cover{object-fit:cover}.tpl\\:p-0{padding:0}.tpl\\:p-0\\.5{padding:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:p-1{padding:calc(var(--tpl-base-size) / 4)}.tpl\\:p-1\\.5{padding:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:p-2{padding:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:p-3{padding:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:p-4{padding:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:p-5{padding:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:p-6{padding:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:p-8{padding:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:px-0\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:px-1{padding-inline:calc(var(--tpl-base-size) / 4)}.tpl\\:px-1\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:px-2{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:px-2\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:px-3{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:px-3\\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\\:px-4{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:px-5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:px-6{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:px-8{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:px-10{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:py-0{padding-block:0}.tpl\\:py-0\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\\:py-1{padding-block:calc(var(--tpl-base-size) / 4)}.tpl\\:py-1\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:py-2{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:py-2\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:py-3{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:py-3\\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\\:py-4{padding-block:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:py-5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\\:py-6{padding-block:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:py-8{padding-block:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:py-10{padding-block:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\\:py-12{padding-block:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\\:py-16{padding-block:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\\:py-\\[5px\\]{padding-block:5px}.tpl\\:py-\\[7px\\]{padding-block:7px}.tpl\\:py-px{padding-block:1px}.tpl\\:pt-1{padding-top:calc(var(--tpl-base-size) / 4)}.tpl\\:pt-2{padding-top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pt-2\\.5{padding-top:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:pt-3{padding-top:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pt-4{padding-top:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pr-2{padding-right:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pr-3{padding-right:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pr-4{padding-right:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pr-6{padding-right:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\\:pr-7{padding-right:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\\:pr-8{padding-right:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:pb-1{padding-bottom:calc(var(--tpl-base-size) / 4)}.tpl\\:pb-1\\.5{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\\:pb-2{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pb-3{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pb-4{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pl-2{padding-left:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\\:pl-2\\.5{padding-left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\\:pl-3{padding-left:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\\:pl-4{padding-left:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\\:pl-8{padding-left:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\\:pl-9{padding-left:calc(calc(var(--tpl-base-size) / 4) * 9)}.tpl\\:pl-\\[18px\\]{padding-left:18px}.tpl\\:text-center{text-align:center}.tpl\\:text-left{text-align:left}.tpl\\:font-\\[inherit\\]{font-family:inherit}.tpl\\:font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.tpl\\:font-sans{font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tpl\\:text-4xl{font-size:calc(2.25 * var(--tpl-base-size));line-height:var(--tw-leading,calc(2.5 / 2.25))}.tpl\\:text-base{font-size:var(--tpl-base-size);line-height:var(--tw-leading, 1.5 )}.tpl\\:text-lg{font-size:calc(1.125 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.75 / 1.125))}.tpl\\:text-sm{font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875))}.tpl\\:text-xs{font-size:calc(.75 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1 / .75))}.tpl\\:text-\\[0\\.8em\\]{font-size:.8em}.tpl\\:text-\\[0\\.9em\\]{font-size:.9em}.tpl\\:text-\\[1em\\]{font-size:1em}.tpl\\:text-\\[8px\\]{font-size:8px}.tpl\\:text-\\[9px\\]{font-size:9px}.tpl\\:text-\\[10px\\]{font-size:10px}.tpl\\:text-\\[11px\\]{font-size:11px}.tpl\\:text-\\[12px\\]{font-size:12px}.tpl\\:text-\\[13px\\]{font-size:13px}.tpl\\:text-\\[length\\:inherit\\]{font-size:inherit}.tpl\\:leading-none{--tw-leading:1;line-height:1}.tpl\\:leading-normal{--tw-leading:1.5;line-height:1.5}.tpl\\:leading-relaxed{--tw-leading:1.625;line-height:1.625}.tpl\\:leading-snug{--tw-leading:1.375;line-height:1.375}.tpl\\:leading-tight{--tw-leading:1.25;line-height:1.25}.tpl\\:font-\\[var\\(--tpl-font-family\\)\\]{--tw-font-weight:var(--tpl-font-family);font-weight:var(--tpl-font-family)}.tpl\\:font-bold{--tw-font-weight:700;font-weight:700}.tpl\\:font-medium{--tw-font-weight:500;font-weight:500}.tpl\\:font-normal{--tw-font-weight:400;font-weight:400}.tpl\\:font-semibold{--tw-font-weight:600;font-weight:600}.tpl\\:tracking-wide{--tw-tracking:.025em;letter-spacing:.025em}.tpl\\:tracking-wider{--tw-tracking:.05em;letter-spacing:.05em}.tpl\\:break-all{word-break:break-all}.tpl\\:text-ellipsis{text-overflow:ellipsis}.tpl\\:whitespace-nowrap{white-space:nowrap}.tpl\\:whitespace-pre-wrap{white-space:pre-wrap}.tpl\\:text-\\[var\\(--tpl-bg\\)\\]{color:var(--tpl-bg)}.tpl\\:text-\\[var\\(--tpl-border\\)\\]{color:var(--tpl-border)}.tpl\\:text-\\[var\\(--tpl-border-light\\)\\]{color:var(--tpl-border-light)}.tpl\\:text-\\[var\\(--tpl-chrome-text-dim\\)\\]{color:var(--tpl-chrome-text-dim)}.tpl\\:text-\\[var\\(--tpl-chrome-text-muted\\)\\]{color:var(--tpl-chrome-text-muted)}.tpl\\:text-\\[var\\(--tpl-danger\\)\\]{color:var(--tpl-danger)}.tpl\\:text-\\[var\\(--tpl-on-primary\\)\\]{color:var(--tpl-on-primary)}.tpl\\:text-\\[var\\(--tpl-primary\\)\\]{color:var(--tpl-primary)}.tpl\\:text-\\[var\\(--tpl-primary-hover\\)\\]{color:var(--tpl-primary-hover)}.tpl\\:text-\\[var\\(--tpl-success\\)\\]{color:var(--tpl-success)}.tpl\\:text-\\[var\\(--tpl-success\\,var\\(--tpl-primary\\)\\)\\]{color:var(--tpl-success,var(--tpl-primary))}.tpl\\:text-\\[var\\(--tpl-text\\)\\]{color:var(--tpl-text)}.tpl\\:text-\\[var\\(--tpl-text-dim\\)\\]{color:var(--tpl-text-dim)}.tpl\\:text-\\[var\\(--tpl-text-muted\\)\\]{color:var(--tpl-text-muted)}.tpl\\:text-\\[var\\(--tpl-warning\\)\\]{color:var(--tpl-warning)}.tpl\\:text-white{color:#fff}.tpl\\:normal-case{text-transform:none}.tpl\\:uppercase{text-transform:uppercase}.tpl\\:italic{font-style:italic}.tpl\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tpl\\:no-underline{text-decoration-line:none}.tpl\\:underline{text-decoration-line:underline}.tpl\\:accent-\\[var\\(--tpl-primary\\)\\]{accent-color:var(--tpl-primary)}.tpl\\:opacity-0{opacity:0}.tpl\\:opacity-50{opacity:.5}.tpl\\:opacity-60{opacity:.6}.tpl\\:opacity-70{opacity:.7}.tpl\\:opacity-90{opacity:.9}.tpl\\:opacity-100{opacity:1}.tpl\\:shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-ring\\)\\]{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow\\)\\]{--tw-shadow:var(--tpl-shadow);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow-lg\\)\\]{--tw-shadow:var(--tpl-shadow-lg);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow-md\\)\\]{--tw-shadow:var(--tpl-shadow-md);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-\\[var\\(--tpl-shadow-sm\\)\\]{--tw-shadow:var(--tpl-shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:ring-\\[var\\(--tpl-border\\)\\]{--tw-ring-color:var(--tpl-border)}.tpl\\:ring-\\[var\\(--tpl-primary\\)\\]{--tw-ring-color:var(--tpl-primary)}.tpl\\:ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.tpl\\:ring-offset-\\[var\\(--tpl-bg-elevated\\)\\]{--tw-ring-offset-color:var(--tpl-bg-elevated)}.tpl\\:backdrop-blur-\\[2px\\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.tpl\\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s)}.tpl\\:duration-100{--tw-duration:.1s;transition-duration:.1s}.tpl\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.tpl\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.tpl\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.tpl\\:duration-\\[80ms\\]{--tw-duration:80ms;transition-duration:80ms}.tpl\\:duration-\\[120ms\\]{--tw-duration:.12s;transition-duration:.12s}.tpl\\:ease-\\[cubic-bezier\\(0\\.16\\,1\\,0\\.3\\,1\\)\\]{--tw-ease:cubic-bezier(.16,1,.3,1);transition-timing-function:cubic-bezier(.16,1,.3,1)}.tpl\\:ease-in{--tw-ease:cubic-bezier(.4, 0, 1, 1);transition-timing-function:cubic-bezier(.4,0,1,1)}.tpl\\:ease-out{--tw-ease:cubic-bezier(0, 0, .2, 1);transition-timing-function:cubic-bezier(0,0,.2,1)}.tpl\\:outline-none{--tw-outline-style:none;outline-style:none}.tpl\\:select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.tpl\\:group-hover\\:bg-black\\/40:is(:where(.tpl\\:group):hover *){background-color:oklab(0% none none/.4)}.tpl\\:group-hover\\:opacity-100:is(:where(.tpl\\:group):hover *){opacity:1}}.tpl\\:placeholder\\:text-\\[var\\(--tpl-text-dim\\)\\]::placeholder{color:var(--tpl-text-dim)}.tpl\\:first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.tpl\\:last\\:mb-0:last-child{margin-bottom:0}@media(hover:hover){.tpl\\:hover\\:z-10:hover{z-index:10}.tpl\\:hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:hover\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:hover\\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.tpl\\:hover\\:border-\\[var\\(--tpl-border\\)\\]:hover{border-color:var(--tpl-border)}.tpl\\:hover\\:border-\\[var\\(--tpl-danger\\)\\]:hover{border-color:var(--tpl-danger)}.tpl\\:hover\\:border-\\[var\\(--tpl-primary\\)\\]:hover{border-color:var(--tpl-primary)}.tpl\\:hover\\:border-\\[var\\(--tpl-text-dim\\)\\]:hover{border-color:var(--tpl-text-dim)}.tpl\\:hover\\:border-l-\\[var\\(--tpl-primary\\)\\]:hover{border-left-color:var(--tpl-primary)}.tpl\\:hover\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-text\\)_8\\%\\,transparent\\)\\]:hover{background-color:var(--tpl-text)}@supports (color:color-mix(in lab,red,red)){.tpl\\:hover\\:bg-\\[color-mix\\(in_srgb\\,var\\(--tpl-text\\)_8\\%\\,transparent\\)\\]:hover{background-color:color-mix(in srgb,var(--tpl-text) 8%,transparent)}}.tpl\\:hover\\:bg-\\[var\\(--tpl-bg-active\\)\\]:hover{background-color:var(--tpl-bg-active)}.tpl\\:hover\\:bg-\\[var\\(--tpl-bg-hover\\)\\]:hover{background-color:var(--tpl-bg-hover)}.tpl\\:hover\\:bg-\\[var\\(--tpl-danger-light\\)\\]:hover{background-color:var(--tpl-danger-light)}.tpl\\:hover\\:bg-\\[var\\(--tpl-primary-hover\\)\\]:hover{background-color:var(--tpl-primary-hover)}.tpl\\:hover\\:bg-\\[var\\(--tpl-primary-light\\)\\]:hover{background-color:var(--tpl-primary-light)}.tpl\\:hover\\:bg-\\[var\\(--tpl-warning-light\\)\\]:hover{background-color:var(--tpl-warning-light)}.tpl\\:hover\\:text-\\[var\\(--tpl-danger\\)\\]:hover{color:var(--tpl-danger)}.tpl\\:hover\\:text-\\[var\\(--tpl-primary\\)\\]:hover{color:var(--tpl-primary)}.tpl\\:hover\\:text-\\[var\\(--tpl-text\\)\\]:hover{color:var(--tpl-text)}.tpl\\:hover\\:underline:hover{text-decoration-line:underline}.tpl\\:hover\\:opacity-80:hover{opacity:.8}.tpl\\:hover\\:opacity-90:hover{opacity:.9}.tpl\\:hover\\:opacity-100:hover{opacity:1}.tpl\\:hover\\:shadow-\\[var\\(--tpl-shadow-md\\)\\]:hover{--tw-shadow:var(--tpl-shadow-md);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:hover\\:shadow-\\[var\\(--tpl-shadow-sm\\)\\]:hover{--tw-shadow:var(--tpl-shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.tpl\\:focus\\:border-\\[var\\(--tpl-primary\\)\\]:focus{border-color:var(--tpl-primary)}.tpl\\:focus\\:shadow-\\[0_0_0_3px_var\\(--tpl-primary-light\\)\\]:focus{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--tpl-primary-light));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:focus\\:shadow-\\[var\\(--tpl-ring\\)\\]:focus,.tpl\\:focus-visible\\:shadow-\\[var\\(--tpl-ring\\)\\]:focus-visible{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\\:focus-visible\\:ring-\\[var\\(--tpl-primary\\)\\]:focus-visible{--tw-ring-color:var(--tpl-primary)}.tpl\\:focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.tpl\\:focus-visible\\:ring-offset-\\[var\\(--tpl-bg-elevated\\)\\]:focus-visible{--tw-ring-offset-color:var(--tpl-bg-elevated)}.tpl\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.tpl\\:active\\:cursor-grabbing:active{cursor:grabbing}.tpl\\:active\\:bg-\\[var\\(--tpl-bg-active\\)\\]:active{background-color:var(--tpl-bg-active)}.tpl\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.tpl\\:disabled\\:opacity-30:disabled{opacity:.3}.tpl\\:disabled\\:opacity-40:disabled{opacity:.4}.tpl\\:disabled\\:opacity-50:disabled{opacity:.5}@media(hover:hover){.tpl\\:disabled\\:hover\\:bg-transparent:disabled:hover{background-color:#0000}}@layer base,components;.tpl{--tpl-base-size:var(--tpl-user-base-size,16px);--tpl-bg:var(--tpl-user-bg,oklch(99.5% .002 60));--tpl-bg-elevated:var(--tpl-user-bg-elevated,oklch(98% .004 60));--tpl-bg-hover:var(--tpl-user-bg-hover,oklch(96% .006 60));--tpl-bg-active:var(--tpl-user-bg-active,oklch(93.5% .008 60));--tpl-border:var(--tpl-user-border,oklch(92% .006 60));--tpl-border-light:var(--tpl-user-border-light,oklch(86% .01 60));--tpl-text:var(--tpl-user-text,oklch(18% .01 60));--tpl-text-muted:var(--tpl-user-text-muted,oklch(50% .015 60));--tpl-text-dim:var(--tpl-user-text-dim,oklch(68% .012 60));--tpl-primary:var(--tpl-user-primary,oklch(70% .16 55));--tpl-primary-hover:var(--tpl-user-primary-hover,oklch(63% .17 55));--tpl-primary-light:var(--tpl-user-primary-light,oklch(95% .04 55));--tpl-on-primary:var(--tpl-user-on-primary,var(--tpl-bg));--tpl-secondary:var(--tpl-user-secondary,oklch(60% .118 184.71));--tpl-secondary-hover:var(--tpl-user-secondary-hover,oklch(53.2% .105 186.39));--tpl-secondary-light:var(--tpl-user-secondary-light,oklch(93.8% .03 186.82));--tpl-success:var(--tpl-user-success,oklch(62.8% .194 155.1));--tpl-success-light:var(--tpl-user-success-light,oklch(93.6% .043 163.51));--tpl-warning:var(--tpl-user-warning,oklch(76.9% .168 70.08));--tpl-warning-light:var(--tpl-user-warning-light,oklch(95% .038 73.59));--tpl-danger:var(--tpl-user-danger,oklch(63.7% .237 25.33));--tpl-danger-light:var(--tpl-user-danger-light,oklch(93.6% .032 17.72));--tpl-canvas-bg:var(--tpl-user-canvas-bg,oklch(97.5% .003 60));--tpl-chrome-bg-elevated:var(--tpl-bg-elevated);--tpl-chrome-border-light:var(--tpl-border-light);--tpl-chrome-text:var(--tpl-text);--tpl-chrome-text-muted:var(--tpl-text-muted);--tpl-chrome-text-dim:var(--tpl-text-dim);--tpl-chrome-primary-light:var(--tpl-primary-light);--tpl-chrome-primary-hover:var(--tpl-primary-hover);--tpl-radius:var(--tpl-user-radius,10px);--tpl-radius-sm:var(--tpl-user-radius-sm,7px);--tpl-radius-lg:var(--tpl-user-radius-lg,14px);--tpl-font-family:var(--tpl-user-font-family,\"Geist\", ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");--tpl-shadow-sm:var(--tpl-user-shadow-sm,0 1px 2px #00000008);--tpl-shadow:var(--tpl-user-shadow,0 1px 2px #0000000a, 0 1px 3px #00000008);--tpl-shadow-md:var(--tpl-user-shadow-md,0 2px 8px #0000000f, 0 1px 3px #0000000a);--tpl-shadow-lg:var(--tpl-user-shadow-lg,0 4px 16px #00000014, 0 2px 6px #0000000a);--tpl-shadow-xl:var(--tpl-user-shadow-xl,0 8px 32px #0000001a, 0 4px 12px #0000000f);--tpl-overlay:var(--tpl-user-overlay,#00000080);--tpl-ring:var(--tpl-user-ring,0 0 0 3px var(--tpl-primary-light));--tpl-transition:var(--tpl-user-transition,.12s cubic-bezier(.16, 1, .3, 1))}.tpl[data-tpl-theme=dark]{--tpl-bg:var(--tpl-user-dark-bg,oklch(16% .005 60));--tpl-bg-elevated:var(--tpl-user-dark-bg-elevated,oklch(21% .006 60));--tpl-bg-hover:var(--tpl-user-dark-bg-hover,oklch(26% .007 60));--tpl-bg-active:var(--tpl-user-dark-bg-active,oklch(30% .008 60));--tpl-border:var(--tpl-user-dark-border,oklch(30% .006 60));--tpl-border-light:var(--tpl-user-dark-border-light,oklch(38% .008 60));--tpl-text:var(--tpl-user-dark-text,oklch(93% .005 60));--tpl-text-muted:var(--tpl-user-dark-text-muted,oklch(65% .01 60));--tpl-text-dim:var(--tpl-user-dark-text-dim,oklch(50% .008 60));--tpl-primary:var(--tpl-user-dark-primary,oklch(73% .15 55));--tpl-primary-hover:var(--tpl-user-dark-primary-hover,oklch(78% .14 55));--tpl-primary-light:var(--tpl-user-dark-primary-light,oklch(28% .05 55));--tpl-secondary:var(--tpl-user-dark-secondary,oklch(63% .11 184.71));--tpl-secondary-hover:var(--tpl-user-dark-secondary-hover,oklch(68% .1 186.39));--tpl-secondary-light:var(--tpl-user-dark-secondary-light,oklch(25% .03 186.82));--tpl-success:var(--tpl-user-dark-success,oklch(65% .18 155.1));--tpl-success-light:var(--tpl-user-dark-success-light,oklch(25% .04 163.51));--tpl-warning:var(--tpl-user-dark-warning,oklch(78% .16 70.08));--tpl-warning-light:var(--tpl-user-dark-warning-light,oklch(28% .04 73.59));--tpl-danger:var(--tpl-user-dark-danger,oklch(65% .22 25.33));--tpl-danger-light:var(--tpl-user-dark-danger-light,oklch(25% .04 17.72));--tpl-canvas-bg:var(--tpl-user-dark-canvas-bg,oklch(10% .003 60));--tpl-shadow-sm:var(--tpl-user-dark-shadow-sm,0 1px 2px #0003);--tpl-shadow:var(--tpl-user-dark-shadow,0 1px 2px #0000004d, 0 1px 3px #0003);--tpl-shadow-md:var(--tpl-user-dark-shadow-md,0 2px 8px #00000059, 0 1px 3px #00000040);--tpl-shadow-lg:var(--tpl-user-dark-shadow-lg,0 4px 16px #0006, 0 2px 6px #0000004d);--tpl-shadow-xl:var(--tpl-user-dark-shadow-xl,0 8px 32px #00000080, 0 4px 12px #00000059);--tpl-overlay:var(--tpl-user-dark-overlay,#000000b3);--tpl-ring:var(--tpl-user-dark-ring,0 0 0 3px var(--tpl-primary-light))}.tpl[data-tpl-theme=dark] .tpl-block-content{--tpl-bg-elevated:oklch(98% .004 60);--tpl-border-light:oklch(86% .01 60);--tpl-text:oklch(18% .01 60);--tpl-text-muted:oklch(50% .015 60);--tpl-text-dim:oklch(68% .012 60);--tpl-primary-light:oklch(95% .04 55);--tpl-primary-hover:oklch(60% .16 55);color:var(--tpl-text)}.tpl{height:100%;font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875));--tw-leading:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--tpl-bg);min-height:320px;color:var(--tpl-text);line-height:1.5;font-family:var(--tpl-font-family);flex-direction:column;display:flex}:where(.tpl) button,:where(.tpl) input,:where(.tpl) select,:where(.tpl) textarea{box-sizing:border-box;font-family:inherit}:where(.tpl) button{cursor:pointer;background:0 0;border:none;margin:0;padding:0}:where(.tpl) button:focus-visible,:where(.tpl) input:focus-visible,:where(.tpl) select:focus-visible,:where(.tpl) textarea:focus-visible{box-shadow:var(--tpl-ring);outline:none}:where(.tpl) .tpl-focus-ring-host:focus-within :is(input,select,textarea):focus-visible{box-shadow:none}.tpl ::-webkit-scrollbar{width:6px;height:6px}.tpl ::-webkit-scrollbar-track{background:0 0}.tpl ::-webkit-scrollbar-thumb{background-color:var(--tpl-border-light)}@supports (color:color-mix(in lab,red,red)){.tpl ::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--tpl-border-light) 60%,transparent)}}.tpl ::-webkit-scrollbar-thumb{border-radius:calc(.25 * var(--tpl-base-size))}.tpl ::-webkit-scrollbar-thumb:hover{background-color:var(--tpl-border-light)}@keyframes tpl-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes tpl-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tpl-popover-root{z-index:10000;position:relative}.tpl-merge-tag-label{text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}@supports (color:color-mix(in lab,red,red)){.tpl-merge-tag-label{-webkit-text-decoration-color:color-mix(in srgb,currentColor 55%,transparent);text-decoration-color:color-mix(in srgb,currentColor 55%,transparent)}}.tpl-pulse{animation:2s infinite tpl-pulse}.tpl-spinner{animation:1s linear infinite tpl-spin}@keyframes tpl-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes tpl-scale-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes tpl-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.tpl-fade-in{animation:.2s cubic-bezier(.16,1,.3,1) tpl-fade-in}.tpl-scale-in{animation:.15s cubic-bezier(.16,1,.3,1) tpl-scale-in}.tpl-shimmer{background:linear-gradient(90deg,var(--tpl-bg-hover) 25%,var(--tpl-bg-active) 50%,var(--tpl-bg-hover) 75%);background-size:200% 100%;animation:1.5s linear infinite tpl-shimmer}.tpl-preview-mode .tpl-block--idle,.tpl-preview-mode .tpl-block--idle:hover,.tpl-preview-mode .tpl-block--selected{box-shadow:none!important;outline:none!important}.tpl-preview-mode .tpl-block{cursor:default;pointer-events:none}.tpl-preview-mode .tpl-block-actions,.tpl-preview-mode .tpl-block-hidden-overlay,.tpl-preview-mode .tpl-condition-toggle,.tpl-preview-mode .tpl-comment-indicator,.tpl-preview-mode .tpl-collab-lock{display:none}.tpl-ghost{border:none!important;border-top:2px dotted var(--tpl-primary)!important;background-color:#0000!important;justify-content:center!important;align-items:center!important;width:100%!important;height:0!important;min-height:0!important;max-height:0!important;margin:12px 0!important;padding:0!important;display:flex!important;position:relative!important;overflow:visible!important}@supports (color:color-mix(in lab,red,red)){.tpl-ghost{border-top:2px dotted color-mix(in srgb,var(--tpl-primary) 50%,transparent)!important}}.tpl-ghost{box-shadow:none!important;border-radius:0!important}.tpl-ghost>*{display:none!important}.tpl-ghost:before{content:var(--tpl-drop-text,\"Drop here\");white-space:nowrap!important;color:var(--tpl-primary)!important;background-color:var(--tpl-primary)!important;padding:2px 8px!important;font-size:12px!important;font-weight:500!important;position:absolute!important;top:50%!important;left:50%!important;transform:translate(-50%,-50%)!important}@supports (color:color-mix(in lab,red,red)){.tpl-ghost:before{background-color:color-mix(in srgb,var(--tpl-primary) 15%,var(--tpl-bg))!important}}.tpl-ghost:before{border-radius:var(--tpl-radius-sm)!important;box-shadow:none!important}.tpl-canvas-empty .tpl-ghost{display:none!important}.tpl-dragging{opacity:.8;box-shadow:var(--tpl-shadow-xl)}.sortable-fallback{transition:none!important;animation:none!important}.tpl-block--lifted{outline:2px dashed var(--tpl-primary)!important;outline-offset:2px!important;box-shadow:var(--tpl-shadow-xl),0 0 0 4px var(--tpl-primary)!important}@supports (color:color-mix(in lab,red,red)){.tpl-block--lifted{box-shadow:var(--tpl-shadow-xl),0 0 0 4px color-mix(in srgb,var(--tpl-primary) 20%,transparent)!important}}.tpl-block--lifted{transition:transform .15s cubic-bezier(.16,1,.3,1),box-shadow .15s cubic-bezier(.16,1,.3,1);transform:scale(1.01)}.tpl-sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tpl-text-toolbar-btn{width:calc(calc(var(--tpl-base-size) / 4) * 8);height:calc(calc(var(--tpl-base-size) / 4) * 8);cursor:pointer;border-radius:calc(.25 * var(--tpl-base-size));--tw-border-style:none;transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.16, 1, .3, 1));transition-duration:var(--tw-duration,.12s);color:var(--tpl-text);background-color:#0000;border-style:none;justify-content:center;align-items:center;padding:0;display:flex}.tpl-text-toolbar-btn:hover{background-color:var(--tpl-bg-active)}.tpl-text-toolbar-btn--active{box-shadow:inset 0 0 0 1.5px var(--tpl-primary-hover);background-color:var(--tpl-primary)!important;color:var(--tpl-bg)!important}.tpl-text-toolbar-btn--active svg{stroke-width:2.75px}.tpl-text-content,.tpl-text-editable .tiptap{--tw-outline-style:none;outline-style:none}.tpl-text-editable{border-radius:calc(.25 * var(--tpl-base-size));border-style:var(--tw-border-style);--tw-border-style:dashed;padding:calc(calc(var(--tpl-base-size) / 4) * 2);border-style:dashed;border-width:1px;border-color:var(--tpl-primary);min-height:1.5em}.tpl-text-content p,.tpl-text-editable .tiptap p{margin:0;margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}:is(.tpl-text-content p,.tpl-text-editable .tiptap p):last-child{margin-bottom:0}.tpl-text-content ul,.tpl-text-content ol,.tpl-text-editable .tiptap ul,.tpl-text-editable .tiptap ol{margin-block:calc(calc(var(--tpl-base-size) / 4) * 2);padding-left:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl-text-content li,.tpl-text-editable .tiptap li{margin-block:calc(var(--tpl-base-size) / 4)}.tpl-text-content s,.tpl-text-editable .tiptap s{text-decoration-line:line-through}.tpl-text-content sub,.tpl-text-editable .tiptap sub{vertical-align:sub;font-size:.75em}.tpl-text-content sup,.tpl-text-editable .tiptap sup{vertical-align:super;font-size:.75em}.tpl-text-content a,.tpl-text-editable a{color:var(--tpl-doc-link-color,inherit);-webkit-text-decoration:var(--tpl-doc-link-underline,none);text-decoration:var(--tpl-doc-link-underline,none)}.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{margin-inline:calc(calc(var(--tpl-base-size) / 4) * .5);border-radius:calc(.25 * var(--tpl-base-size));padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5);padding-block:calc(calc(var(--tpl-base-size) / 4) * .5);--tw-font-weight:500;background-color:var(--tpl-primary);align-items:center;font-size:.9em;font-weight:500;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{background-color:color-mix(in srgb,var(--tpl-primary) 20%,transparent)}}.tpl-text-content span[data-merge-tag],.tpl-text-editable span[data-merge-tag]{color:var(--tpl-primary)}.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{margin-inline:calc(calc(var(--tpl-base-size) / 4) * .5);border-radius:calc(.25 * var(--tpl-base-size));padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5);padding-block:calc(calc(var(--tpl-base-size) / 4) * .5);--tw-font-weight:700;--tw-tracking:.025em;letter-spacing:.025em;text-transform:uppercase;border:1.5px solid var(--tpl-primary);background-color:#0000;align-items:center;font-size:.8em;font-weight:700;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{border:1.5px solid color-mix(in srgb,var(--tpl-primary) 50%,transparent)}}.tpl-text-content span[data-logic-merge-tag],.tpl-text-editable span[data-logic-merge-tag]{color:var(--tpl-primary)}.tpl-tooltip{position:relative}.tpl-tooltip:after{content:attr(data-tooltip);border-radius:var(--tpl-radius-sm);background-color:var(--tpl-text);color:var(--tpl-bg);white-space:normal;text-align:center;pointer-events:none;opacity:0;text-transform:none;z-index:50;width:max-content;max-width:min(320px,90vw);padding:4px 10px;font-size:12px;font-weight:500;line-height:1.4;transition:opacity .15s;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%)}.tpl-tooltip:before{content:\"\";border:4px solid #0000;border-bottom-color:var(--tpl-text);pointer-events:none;opacity:0;z-index:50;transition:opacity .15s;position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%)}.tpl-tooltip:hover:after,.tpl-tooltip:hover:before{opacity:1}.tpl.tpl-media-overlay{background-color:var(--tpl-overlay);-webkit-backdrop-filter:blur(8px);height:100%;min-height:0;color:var(--tpl-text);flex-direction:row;justify-content:center;align-items:center;display:flex}.tpl.tpl-text-toolbar{flex-direction:row;height:auto;min-height:0;display:flex}.tpl.tpl-link-dialog{background-color:var(--tpl-overlay);flex-direction:row;justify-content:center;align-items:center;height:100%;min-height:0;display:flex}.tpl-upload-zone-active{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}@property --tpl-comet-angle{syntax:\"<angle>\";inherits:false;initial-value:0deg}@property --tpl-comet-start{syntax:\"<percentage>\";inherits:false;initial-value:100%}@keyframes tpl-ai-comet{0%{--tpl-comet-angle:0deg;--tpl-comet-start:100%}1%{--tpl-comet-angle:24deg;--tpl-comet-start:88%}5%{--tpl-comet-angle:120deg;--tpl-comet-start:60%}25%{--tpl-comet-angle:600deg;--tpl-comet-start:60%}33%{--tpl-comet-angle:720deg;--tpl-comet-start:100%}to{--tpl-comet-angle:720deg;--tpl-comet-start:100%}}.tpl-ai-btn--idle{background-color:var(--tpl-primary-light);color:var(--tpl-text);box-shadow:none;z-index:0;position:relative}.tpl-ai-btn--idle:before{content:\"\";border-radius:inherit;background:conic-gradient(from var(--tpl-comet-angle),transparent 0%,transparent var(--tpl-comet-start),var(--tpl-primary) 80%,var(--tpl-primary) 90%,var(--tpl-primary) 97%,transparent 100%);padding:2px;position:absolute;inset:-2px}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--idle:before{background:conic-gradient(from var(--tpl-comet-angle),transparent 0%,transparent var(--tpl-comet-start),color-mix(in srgb,var(--tpl-primary) 40%,transparent) 80%,var(--tpl-primary) 90%,var(--tpl-primary) 97%,transparent 100%)}}.tpl-ai-btn--idle:before{z-index:-1;pointer-events:none;animation:20s linear 3s infinite tpl-ai-comet;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.tpl-ai-btn--idle:hover{background-color:var(--tpl-primary);color:var(--tpl-on-primary);transform:translateY(-1px);box-shadow:0 0 0 3px var(--tpl-primary),0 4px 16px var(--tpl-primary)!important}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--idle:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--tpl-primary) 20%,transparent),0 4px 16px color-mix(in srgb,var(--tpl-primary) 30%,transparent)!important}}.tpl-ai-btn--idle:hover:before{animation:none}.tpl-ai-btn--active{background-color:var(--tpl-primary-light);color:var(--tpl-primary-hover);border:1px solid var(--tpl-primary)}.tpl-ai-btn--active .tpl-ai-btn-icon{fill:var(--tpl-primary)}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--active .tpl-ai-btn-icon{fill:color-mix(in srgb,var(--tpl-primary) 25%,transparent)}}.tpl-ai-btn--active:hover{background-color:var(--tpl-primary-light)}@supports (color:color-mix(in lab,red,red)){.tpl-ai-btn--active:hover{background-color:color-mix(in srgb,var(--tpl-primary-light) 80%,var(--tpl-primary))}}.tpl-merge-tag-delete:hover{color:var(--tpl-danger)!important}@media(prefers-reduced-motion:reduce){.tpl-pulse,.tpl-shimmer,.tpl-fade-in,.tpl-scale-in,.tpl-ai-btn--idle:before{animation:none}.tpl-shimmer{background:var(--tpl-bg-hover)}.tpl *,.tpl :before,.tpl :after{transition-duration:.01ms!important}.tpl-spinner{animation:1s linear infinite tpl-spin}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-ordinal{syntax:\"*\";inherits:false}@property --tw-slashed-zero{syntax:\"*\";inherits:false}@property --tw-numeric-figure{syntax:\"*\";inherits:false}@property --tw-numeric-spacing{syntax:\"*\";inherits:false}@property --tw-numeric-fraction{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}.tpl-preview-pill-enter-active[data-v-ebc669ed]{transition:opacity .2s cubic-bezier(.16,1,.3,1),transform .2s cubic-bezier(.16,1,.3,1)}.tpl-preview-pill-leave-active[data-v-ebc669ed]{transition:opacity .15s ease-in,transform .15s ease-in}.tpl-preview-pill-enter-from[data-v-ebc669ed],.tpl-preview-pill-leave-to[data-v-ebc669ed]{opacity:0;transform:translateY(-8px) scale(.9)}.tpl-preview-pill-enter-to[data-v-ebc669ed],.tpl-preview-pill-leave-from[data-v-ebc669ed]{opacity:1;transform:translateY(0) scale(1)}.tpl-saved-block-skeleton{animation:tpl-saved-block-pulse 1.4s ease-in-out infinite}@keyframes tpl-saved-block-pulse{0%,to{opacity:1}50%{opacity:.55}}@media(prefers-reduced-motion:reduce){.tpl-saved-block-skeleton{animation:none}}.tpl-saved-block-delete-btn:hover{color:var(--tpl-danger)!important}.tpl-saved-block-rename-btn:hover{color:var(--tpl-primary)!important}.tpl-comments-slide-enter-active[data-v-40431726]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-comments-slide-leave-active[data-v-40431726]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-comments-input-wrapper[data-v-40431726]:focus-within{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-comments-send-btn[data-v-40431726]:not(:disabled):hover{transform:scale(1.05)}.tpl-comment-filter[data-v-40431726]{color:var(--tpl-text-muted);background-color:transparent}.tpl-comment-filter[data-v-40431726]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-text)}.tpl-comment-filter--active[data-v-40431726]{background-color:var(--tpl-primary-light);color:var(--tpl-primary)}.tpl-comment-action[data-v-40431726]{color:var(--tpl-text-dim);background-color:transparent}.tpl-comment-action[data-v-40431726]:hover{background-color:var(--tpl-bg-hover);color:var(--tpl-text)}.tpl-comment-delete[data-v-40431726]:hover{background-color:var(--tpl-danger-light);color:var(--tpl-danger)}.tpl-comment-card[data-v-40431726],.tpl-comment-reply-card[data-v-40431726]{border-color:var(--tpl-border);background-color:var(--tpl-bg)}.tpl-resolve-enter-active[data-v-40431726],.tpl-resolve-leave-active[data-v-40431726]{transition:opacity .3s ease,transform .3s ease}.tpl-resolve-enter-from[data-v-40431726],.tpl-resolve-leave-to[data-v-40431726]{opacity:0;transform:translateY(-4px)}.tpl-resolve-icon[data-v-40431726]{transition:color .3s ease,transform .2s ease}.tpl-resolve-icon[data-v-40431726]:active{transform:scale(1.3)}.tpl-replies-enter-active[data-v-40431726],.tpl-replies-leave-active[data-v-40431726]{transition:opacity .25s ease,transform .25s ease}.tpl-replies-enter-from[data-v-40431726],.tpl-replies-leave-to[data-v-40431726]{opacity:0;transform:translateY(-4px)}.tpl-ai-slide-enter-active[data-v-82649117]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-ai-slide-leave-active[data-v-82649117]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-ai-input-wrapper[data-v-82649117]:focus-within{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-ai-send-btn[data-v-82649117]:not(:disabled):hover{transform:scale(1.05)}.tpl-suggestion-btn[data-v-82649117]:hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-design-slide-enter-active[data-v-9a44c153]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-design-slide-leave-active[data-v-9a44c153]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-design-prompt-input[data-v-9a44c153]:focus{border-color:var(--tpl-primary);box-shadow:var(--tpl-ring)}.tpl-design-dropzone[data-v-9a44c153]:hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-scoring-slide-enter-active[data-v-7da30b57]{transition:transform .28s cubic-bezier(.16,1,.3,1)}.tpl-scoring-slide-leave-active[data-v-7da30b57]{transition:transform .2s cubic-bezier(.16,1,.3,1)}.tpl-scoring-fix-btn[data-v-7da30b57]:not(:disabled):hover{border-color:var(--tpl-primary)!important;background-color:var(--tpl-primary-light)!important}.tpl-ai-feature-menu-item[data-v-bf59b787]:hover{background-color:var(--tpl-bg-hover)!important}\n/*$vite$:1*/", Hd = null;
|
|
5463
5466
|
function Ud() {
|
|
5464
5467
|
if (Hd === null) {
|
|
5465
5468
|
let e = new CSSStyleSheet();
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@templatical/editor",
|
|
3
3
|
"description": "Vue 3 visual drag-and-drop email editor powered by Templatical",
|
|
4
|
-
"version": "0.28.
|
|
4
|
+
"version": "0.28.1",
|
|
5
5
|
"bugs": "https://github.com/templatical/sdk/issues",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@lucide/vue": "^1.33.0",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"vitest": "^4.1.11",
|
|
33
33
|
"vue": "^3.5.41",
|
|
34
34
|
"vue-draggable-plus": "^0.6.1",
|
|
35
|
-
"vue-tsc": "^3.3.
|
|
36
|
-
"@templatical/
|
|
37
|
-
"@templatical/
|
|
38
|
-
"@templatical/types": "0.28.
|
|
35
|
+
"vue-tsc": "^3.3.11",
|
|
36
|
+
"@templatical/core": "0.28.1",
|
|
37
|
+
"@templatical/quality": "0.28.1",
|
|
38
|
+
"@templatical/types": "0.28.1"
|
|
39
39
|
},
|
|
40
40
|
"exports": {
|
|
41
41
|
".": {
|
|
@@ -63,9 +63,9 @@
|
|
|
63
63
|
"license": "SEE LICENSE IN LICENSE",
|
|
64
64
|
"module": "./dist/templatical-editor.js",
|
|
65
65
|
"peerDependencies": {
|
|
66
|
-
"@templatical/media-library": "0.28.
|
|
67
|
-
"@templatical/quality": "0.28.
|
|
68
|
-
"@templatical/renderer": "0.28.
|
|
66
|
+
"@templatical/media-library": "0.28.1",
|
|
67
|
+
"@templatical/quality": "0.28.1",
|
|
68
|
+
"@templatical/renderer": "0.28.1"
|
|
69
69
|
},
|
|
70
70
|
"peerDependenciesMeta": {
|
|
71
71
|
"@templatical/renderer": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BlockPreviewCanvas-9tFXPVgi.js","names":[],"sources":["../../../src/components/blocks/PreviewSectionBlock.vue","../../../src/components/blocks/PreviewSectionBlock.vue","../../../src/components/BlockPreviewCanvas.vue","../../../src/components/BlockPreviewCanvas.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ButtonBlock from \"./ButtonBlock.vue\";\nimport CustomBlock from \"./CustomBlock.vue\";\nimport DividerBlock from \"./DividerBlock.vue\";\nimport HtmlBlock from \"./HtmlBlock.vue\";\nimport ImageBlock from \"./ImageBlock.vue\";\nimport MenuBlock from \"./MenuBlock.vue\";\nimport SocialIconsBlock from \"./SocialIconsBlock.vue\";\nimport SpacerBlock from \"./SpacerBlock.vue\";\nimport TableBlock from \"./TableBlock.vue\";\nimport TitleBlock from \"./TitleBlock.vue\";\nimport ParagraphBlock from \"./ParagraphBlock.vue\";\nimport VideoBlock from \"./VideoBlock.vue\";\nimport {\n resolveBlockComponent,\n getBlockWrapperStyle,\n} from \"../../utils/blockComponentResolver\";\nimport type {\n Block,\n SectionBlock as SectionBlockType,\n} from \"@templatical/types\";\nimport { computed, inject, type Component } from \"vue\";\nimport { BLOCK_REGISTRY_KEY } from \"../../keys\";\n\nconst previewBlockComponentMap: Record<string, Component> = {\n title: TitleBlock,\n paragraph: ParagraphBlock,\n image: ImageBlock,\n video: VideoBlock,\n button: ButtonBlock,\n divider: DividerBlock,\n social: SocialIconsBlock,\n menu: MenuBlock,\n table: TableBlock,\n spacer: SpacerBlock,\n html: HtmlBlock,\n custom: CustomBlock,\n};\n\nconst props = defineProps<{\n block: SectionBlockType;\n viewport: \"desktop\";\n}>();\n\ndefineOptions({ name: \"PreviewSectionBlock\" });\n\nconst blockRegistry = inject(BLOCK_REGISTRY_KEY, null);\n\nconst columnWidths = computed(() => {\n switch (props.block.columns) {\n case \"2\":\n return [\"50%\", \"50%\"];\n case \"3\":\n return [\"33.33%\", \"33.33%\", \"33.33%\"];\n case \"1-2\":\n return [\"33.33%\", \"66.67%\"];\n case \"2-1\":\n return [\"66.67%\", \"33.33%\"];\n default:\n return [\"100%\"];\n }\n});\n\nconst columns = computed(() => {\n const count = columnWidths.value.length;\n const children = [...props.block.children];\n while (children.length < count) {\n children.push([]);\n }\n return children.slice(0, count);\n});\n\nfunction getColumnBlocks(colIndex: number): Block[] {\n return columns.value[colIndex] || [];\n}\n\nfunction getBlockComponent(block: Block): Component | null {\n return resolveBlockComponent(block, blockRegistry, previewBlockComponentMap);\n}\n</script>\n\n<template>\n <div class=\"tpl:w-full\">\n <div class=\"tpl:flex tpl:gap-0\">\n <div\n v-for=\"(_, colIndex) in columns\"\n :key=\"colIndex\"\n :style=\"{ width: columnWidths[colIndex] }\"\n >\n <div\n v-for=\"childBlock in getColumnBlocks(colIndex)\"\n :key=\"childBlock.id\"\n :style=\"getBlockWrapperStyle(childBlock)\"\n >\n <!-- Recursive self-reference for nested sections -->\n <PreviewSectionBlock\n v-if=\"childBlock.type === 'section'\"\n :block=\"childBlock\"\n viewport=\"desktop\"\n />\n <component\n :is=\"getBlockComponent(childBlock)\"\n v-else\n :block=\"childBlock\"\n viewport=\"desktop\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonBlock from \"./ButtonBlock.vue\";\nimport CustomBlock from \"./CustomBlock.vue\";\nimport DividerBlock from \"./DividerBlock.vue\";\nimport HtmlBlock from \"./HtmlBlock.vue\";\nimport ImageBlock from \"./ImageBlock.vue\";\nimport MenuBlock from \"./MenuBlock.vue\";\nimport SocialIconsBlock from \"./SocialIconsBlock.vue\";\nimport SpacerBlock from \"./SpacerBlock.vue\";\nimport TableBlock from \"./TableBlock.vue\";\nimport TitleBlock from \"./TitleBlock.vue\";\nimport ParagraphBlock from \"./ParagraphBlock.vue\";\nimport VideoBlock from \"./VideoBlock.vue\";\nimport {\n resolveBlockComponent,\n getBlockWrapperStyle,\n} from \"../../utils/blockComponentResolver\";\nimport type {\n Block,\n SectionBlock as SectionBlockType,\n} from \"@templatical/types\";\nimport { computed, inject, type Component } from \"vue\";\nimport { BLOCK_REGISTRY_KEY } from \"../../keys\";\n\nconst previewBlockComponentMap: Record<string, Component> = {\n title: TitleBlock,\n paragraph: ParagraphBlock,\n image: ImageBlock,\n video: VideoBlock,\n button: ButtonBlock,\n divider: DividerBlock,\n social: SocialIconsBlock,\n menu: MenuBlock,\n table: TableBlock,\n spacer: SpacerBlock,\n html: HtmlBlock,\n custom: CustomBlock,\n};\n\nconst props = defineProps<{\n block: SectionBlockType;\n viewport: \"desktop\";\n}>();\n\ndefineOptions({ name: \"PreviewSectionBlock\" });\n\nconst blockRegistry = inject(BLOCK_REGISTRY_KEY, null);\n\nconst columnWidths = computed(() => {\n switch (props.block.columns) {\n case \"2\":\n return [\"50%\", \"50%\"];\n case \"3\":\n return [\"33.33%\", \"33.33%\", \"33.33%\"];\n case \"1-2\":\n return [\"33.33%\", \"66.67%\"];\n case \"2-1\":\n return [\"66.67%\", \"33.33%\"];\n default:\n return [\"100%\"];\n }\n});\n\nconst columns = computed(() => {\n const count = columnWidths.value.length;\n const children = [...props.block.children];\n while (children.length < count) {\n children.push([]);\n }\n return children.slice(0, count);\n});\n\nfunction getColumnBlocks(colIndex: number): Block[] {\n return columns.value[colIndex] || [];\n}\n\nfunction getBlockComponent(block: Block): Component | null {\n return resolveBlockComponent(block, blockRegistry, previewBlockComponentMap);\n}\n</script>\n\n<template>\n <div class=\"tpl:w-full\">\n <div class=\"tpl:flex tpl:gap-0\">\n <div\n v-for=\"(_, colIndex) in columns\"\n :key=\"colIndex\"\n :style=\"{ width: columnWidths[colIndex] }\"\n >\n <div\n v-for=\"childBlock in getColumnBlocks(colIndex)\"\n :key=\"childBlock.id\"\n :style=\"getBlockWrapperStyle(childBlock)\"\n >\n <!-- Recursive self-reference for nested sections -->\n <PreviewSectionBlock\n v-if=\"childBlock.type === 'section'\"\n :block=\"childBlock\"\n viewport=\"desktop\"\n />\n <component\n :is=\"getBlockComponent(childBlock)\"\n v-else\n :block=\"childBlock\"\n viewport=\"desktop\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonBlock from \"./blocks/ButtonBlock.vue\";\nimport CustomBlock from \"./blocks/CustomBlock.vue\";\nimport DividerBlock from \"./blocks/DividerBlock.vue\";\nimport HtmlBlock from \"./blocks/HtmlBlock.vue\";\nimport ImageBlock from \"./blocks/ImageBlock.vue\";\nimport MenuBlock from \"./blocks/MenuBlock.vue\";\nimport PreviewSectionBlock from \"./blocks/PreviewSectionBlock.vue\";\nimport SocialIconsBlock from \"./blocks/SocialIconsBlock.vue\";\nimport SpacerBlock from \"./blocks/SpacerBlock.vue\";\nimport TableBlock from \"./blocks/TableBlock.vue\";\nimport TitleBlock from \"./blocks/TitleBlock.vue\";\nimport ParagraphBlock from \"./blocks/ParagraphBlock.vue\";\nimport VideoBlock from \"./blocks/VideoBlock.vue\";\nimport {\n BLOCK_REGISTRY_KEY,\n CONDITION_PREVIEW_KEY,\n EDITOR_KEY,\n MERGE_TAG_SAMPLE_MODE_KEY,\n USE_MERGE_TAG_SAMPLES_KEY,\n} from \"../keys\";\nimport {\n resolveBlockComponent,\n getBlockWrapperStyle,\n getDocumentStyle,\n} from \"../utils/blockComponentResolver\";\nimport {\n EMAIL_FRAME_WIDTH_TRANSITION,\n getEmailFrameWidth,\n} from \"../utils/emailFrameWidth\";\nimport type { Block, ViewportSize } from \"@templatical/types\";\nimport { computed, inject, provide, type Component } from \"vue\";\n\nconst props = withDefaults(\n defineProps<{\n blocks: Block[];\n /**\n * Which viewport to render. Defaults to `desktop`, so the saved-blocks\n * surfaces — which have no viewport control — behave exactly as before.\n * The test-email dialog passes the user's choice so responsive blocks show\n * the variant a recipient on that device would receive.\n */\n viewport?: ViewportSize;\n /**\n * Whether the hand-toggled display-condition filter still applies here.\n * `false` where a resolver owns the preview: it has already evaluated every\n * condition against real data, so layering a manual hide on top would veto\n * the answer that was asked for.\n *\n * A prop rather than an injected `PREVIEW_RESOLUTION_KEY` read, because the\n * test-email dialog builds its *own* resolution instance (keyed to the\n * selected recipient) — injecting would consult the shared canvas instance\n * and get the wrong answer.\n */\n applyConditionFilter?: boolean;\n }>(),\n { viewport: \"desktop\", applyConditionFilter: true },\n);\n\nconst blockRegistry = inject(BLOCK_REGISTRY_KEY);\nconst editor = inject(EDITOR_KEY, null);\nconst conditionPreview = inject(CONDITION_PREVIEW_KEY, null);\n\n/**\n * This canvas is only ever a preview — nothing here is editable — so it honours\n * the user's mode directly, with no `previewMode` gate of the kind `Canvas.vue`\n * needs. Re-provided rather than left to inherit, because a `BlockPreviewCanvas`\n * inside a dialog may sit under an editing `Canvas` that provides `false`.\n */\nconst mergeTagSampleMode = inject(MERGE_TAG_SAMPLE_MODE_KEY, null);\nprovide(\n USE_MERGE_TAG_SAMPLES_KEY,\n computed(() => mergeTagSampleMode?.value ?? false),\n);\n\n/**\n * Blocks a display condition currently excludes, so a preview never shows\n * content the recipient won't get. The canvas does the same via\n * `v-show=\"!conditionPreview?.isHidden(block.id)\"`.\n *\n * A no-op for the saved-blocks browser: entries there carry their *stored* ids,\n * which aren't in the current template, so nothing is tracked as hidden. It\n * bites where it should — the save dialog and the test-email preview, both of\n * which show blocks that are live on the canvas.\n *\n * Skipped entirely when `applyConditionFilter` is false — see the prop.\n */\nconst visibleBlocks = computed(() =>\n props.applyConditionFilter\n ? props.blocks.filter((block) => !conditionPreview?.isHidden(block.id))\n : props.blocks,\n);\n\n/**\n * Frame width, from the one helper the canvas and the scaled preview rows also\n * use — so all three agree by construction rather than by three constants that\n * happen to match. A template with a custom body width now previews at that\n * width instead of a flat 600.\n */\nconst frameWidth = computed(() =>\n getEmailFrameWidth(editor?.content.value.settings, props.viewport),\n);\n\n/**\n * The same document-level style the canvas applies, so a previewed block\n * renders identically to the canvas one: without it the font falls back to the\n * editor UI's and the link rules hit their unset defaults, dropping the\n * underline and the link colour.\n *\n * Read from the *current* template even in the saved-blocks browser, where the\n * previewed content came from elsewhere — a saved block stores only `Block[]`,\n * and the current settings are what it will actually look like once inserted.\n */\nconst documentStyle = computed(() =>\n editor ? getDocumentStyle(editor.content.value.settings) : {},\n);\n\nconst previewComponentMap: Record<string, Component> = {\n section: PreviewSectionBlock,\n title: TitleBlock,\n paragraph: ParagraphBlock,\n image: ImageBlock,\n video: VideoBlock,\n button: ButtonBlock,\n divider: DividerBlock,\n social: SocialIconsBlock,\n menu: MenuBlock,\n table: TableBlock,\n spacer: SpacerBlock,\n html: HtmlBlock,\n custom: CustomBlock,\n};\n\nfunction getBlockComponent(block: Block): Component | null {\n return resolveBlockComponent(block, blockRegistry, previewComponentMap);\n}\n</script>\n\n<template>\n <div\n data-testid=\"block-preview-canvas\"\n class=\"tpl:pointer-events-none tpl:mx-auto tpl:select-none tpl:rounded-lg\"\n :style=\"{\n width: `${frameWidth}px`,\n transition: EMAIL_FRAME_WIDTH_TRANSITION,\n backgroundColor: 'var(--tpl-canvas-bg)',\n boxShadow: 'var(--tpl-shadow-sm)',\n ...documentStyle,\n }\"\n >\n <div\n v-for=\"block in visibleBlocks\"\n :key=\"block.id\"\n :style=\"getBlockWrapperStyle(block)\"\n >\n <component\n :is=\"getBlockComponent(block)\"\n :block=\"block\"\n :viewport=\"viewport\"\n />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport ButtonBlock from \"./blocks/ButtonBlock.vue\";\nimport CustomBlock from \"./blocks/CustomBlock.vue\";\nimport DividerBlock from \"./blocks/DividerBlock.vue\";\nimport HtmlBlock from \"./blocks/HtmlBlock.vue\";\nimport ImageBlock from \"./blocks/ImageBlock.vue\";\nimport MenuBlock from \"./blocks/MenuBlock.vue\";\nimport PreviewSectionBlock from \"./blocks/PreviewSectionBlock.vue\";\nimport SocialIconsBlock from \"./blocks/SocialIconsBlock.vue\";\nimport SpacerBlock from \"./blocks/SpacerBlock.vue\";\nimport TableBlock from \"./blocks/TableBlock.vue\";\nimport TitleBlock from \"./blocks/TitleBlock.vue\";\nimport ParagraphBlock from \"./blocks/ParagraphBlock.vue\";\nimport VideoBlock from \"./blocks/VideoBlock.vue\";\nimport {\n BLOCK_REGISTRY_KEY,\n CONDITION_PREVIEW_KEY,\n EDITOR_KEY,\n MERGE_TAG_SAMPLE_MODE_KEY,\n USE_MERGE_TAG_SAMPLES_KEY,\n} from \"../keys\";\nimport {\n resolveBlockComponent,\n getBlockWrapperStyle,\n getDocumentStyle,\n} from \"../utils/blockComponentResolver\";\nimport {\n EMAIL_FRAME_WIDTH_TRANSITION,\n getEmailFrameWidth,\n} from \"../utils/emailFrameWidth\";\nimport type { Block, ViewportSize } from \"@templatical/types\";\nimport { computed, inject, provide, type Component } from \"vue\";\n\nconst props = withDefaults(\n defineProps<{\n blocks: Block[];\n /**\n * Which viewport to render. Defaults to `desktop`, so the saved-blocks\n * surfaces — which have no viewport control — behave exactly as before.\n * The test-email dialog passes the user's choice so responsive blocks show\n * the variant a recipient on that device would receive.\n */\n viewport?: ViewportSize;\n /**\n * Whether the hand-toggled display-condition filter still applies here.\n * `false` where a resolver owns the preview: it has already evaluated every\n * condition against real data, so layering a manual hide on top would veto\n * the answer that was asked for.\n *\n * A prop rather than an injected `PREVIEW_RESOLUTION_KEY` read, because the\n * test-email dialog builds its *own* resolution instance (keyed to the\n * selected recipient) — injecting would consult the shared canvas instance\n * and get the wrong answer.\n */\n applyConditionFilter?: boolean;\n }>(),\n { viewport: \"desktop\", applyConditionFilter: true },\n);\n\nconst blockRegistry = inject(BLOCK_REGISTRY_KEY);\nconst editor = inject(EDITOR_KEY, null);\nconst conditionPreview = inject(CONDITION_PREVIEW_KEY, null);\n\n/**\n * This canvas is only ever a preview — nothing here is editable — so it honours\n * the user's mode directly, with no `previewMode` gate of the kind `Canvas.vue`\n * needs. Re-provided rather than left to inherit, because a `BlockPreviewCanvas`\n * inside a dialog may sit under an editing `Canvas` that provides `false`.\n */\nconst mergeTagSampleMode = inject(MERGE_TAG_SAMPLE_MODE_KEY, null);\nprovide(\n USE_MERGE_TAG_SAMPLES_KEY,\n computed(() => mergeTagSampleMode?.value ?? false),\n);\n\n/**\n * Blocks a display condition currently excludes, so a preview never shows\n * content the recipient won't get. The canvas does the same via\n * `v-show=\"!conditionPreview?.isHidden(block.id)\"`.\n *\n * A no-op for the saved-blocks browser: entries there carry their *stored* ids,\n * which aren't in the current template, so nothing is tracked as hidden. It\n * bites where it should — the save dialog and the test-email preview, both of\n * which show blocks that are live on the canvas.\n *\n * Skipped entirely when `applyConditionFilter` is false — see the prop.\n */\nconst visibleBlocks = computed(() =>\n props.applyConditionFilter\n ? props.blocks.filter((block) => !conditionPreview?.isHidden(block.id))\n : props.blocks,\n);\n\n/**\n * Frame width, from the one helper the canvas and the scaled preview rows also\n * use — so all three agree by construction rather than by three constants that\n * happen to match. A template with a custom body width now previews at that\n * width instead of a flat 600.\n */\nconst frameWidth = computed(() =>\n getEmailFrameWidth(editor?.content.value.settings, props.viewport),\n);\n\n/**\n * The same document-level style the canvas applies, so a previewed block\n * renders identically to the canvas one: without it the font falls back to the\n * editor UI's and the link rules hit their unset defaults, dropping the\n * underline and the link colour.\n *\n * Read from the *current* template even in the saved-blocks browser, where the\n * previewed content came from elsewhere — a saved block stores only `Block[]`,\n * and the current settings are what it will actually look like once inserted.\n */\nconst documentStyle = computed(() =>\n editor ? getDocumentStyle(editor.content.value.settings) : {},\n);\n\nconst previewComponentMap: Record<string, Component> = {\n section: PreviewSectionBlock,\n title: TitleBlock,\n paragraph: ParagraphBlock,\n image: ImageBlock,\n video: VideoBlock,\n button: ButtonBlock,\n divider: DividerBlock,\n social: SocialIconsBlock,\n menu: MenuBlock,\n table: TableBlock,\n spacer: SpacerBlock,\n html: HtmlBlock,\n custom: CustomBlock,\n};\n\nfunction getBlockComponent(block: Block): Component | null {\n return resolveBlockComponent(block, blockRegistry, previewComponentMap);\n}\n</script>\n\n<template>\n <div\n data-testid=\"block-preview-canvas\"\n class=\"tpl:pointer-events-none tpl:mx-auto tpl:select-none tpl:rounded-lg\"\n :style=\"{\n width: `${frameWidth}px`,\n transition: EMAIL_FRAME_WIDTH_TRANSITION,\n backgroundColor: 'var(--tpl-canvas-bg)',\n boxShadow: 'var(--tpl-shadow-sm)',\n ...documentStyle,\n }\"\n >\n <div\n v-for=\"block in visibleBlocks\"\n :key=\"block.id\"\n :style=\"getBlockWrapperStyle(block)\"\n >\n <component\n :is=\"getBlockComponent(block)\"\n :block=\"block\"\n :viewport=\"viewport\"\n />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAwBA,IAAM,IAAsD;GAC1D,OAAO;GACP,WAAW;GACX,OAAO;GACP,OAAO;GACP,QAAQ;GACR,SAAS;GACT,QAAQ;GACR,MAAM;GACN,OAAO;GACP,QAAQ;GACR,MAAM;GACN,QAAQ;EACV,GAEM,IAAQ,GAOR,IAAgB,EAAO,GAAoB,IAAI,GAE/C,IAAe,QAAe;GAClC,QAAQ,EAAM,MAAM,SAApB;IACE,KAAK,KACH,OAAO,CAAC,OAAO,KAAK;IACtB,KAAK,KACH,OAAO;KAAC;KAAU;KAAU;IAAQ;IACtC,KAAK,OACH,OAAO,CAAC,UAAU,QAAQ;IAC5B,KAAK,OACH,OAAO,CAAC,UAAU,QAAQ;IAC5B,SACE,OAAO,CAAC,MAAM;GAClB;EACF,CAAC,GAEK,IAAU,QAAe;GAC7B,IAAM,IAAQ,EAAa,MAAM,QAC3B,IAAW,CAAC,GAAG,EAAM,MAAM,QAAQ;GACzC,OAAO,EAAS,SAAS,IACvB,EAAS,KAAK,CAAC,CAAC;GAElB,OAAO,EAAS,MAAM,GAAG,CAAK;EAChC,CAAC;EAED,SAAS,EAAgB,GAA2B;GAClD,OAAO,EAAQ,MAAM,MAAa,CAAC;EACrC;EAEA,SAAS,EAAkB,GAAgC;GACzD,OAAO,EAAsB,GAAO,GAAe,CAAwB;EAC7E;;;GAIE,OAAA,EAAA,GAAA,EA2BM,OA3BN,GA2BM,CA1BJ,EAyBM,OAzBN,GAyBM,EAxBJ,EAAA,EAAA,GAAA,EAuBM,GAAA,MAAA,EAtBoB,EAAA,QAAhB,GAAG,OADb,EAAA,GAAA,EAuBM,OAAA;IArBH,KAAK;IACL,OAAK,EAAA,EAAA,OAAW,EAAA,MAAa,GAAQ,CAAA;GAEtC,GAAA,EAAA,EAAA,EAAA,GAAA,EAiBM,GAAA,MAAA,EAhBiB,EAAgB,CAAQ,IAAtC,OADT,EAAA,GAAA,EAiBM,OAAA;IAfH,KAAK,EAAW;IAChB,OAAK,EAAE,EAAA,CAAA,CAAoB,CAAC,CAAU,CAAA;GAI/B,GAAA,CAAA,EAAW,SAAI,aADvB,EAAA,GAAA,EAIE,GAAA;;IAFC,OAAO;IACR,UAAS;GAEX,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAKE,EAJK,EAAkB,CAAU,CAAA,GAAA;;IAEhC,OAAO;IACR,UAAS;;;;;;;;;;;;;;;EEvErB,IAAM,IAAQ,GA0BR,IAAgB,EAAO,CAAkB,GACzC,IAAS,EAAO,GAAY,IAAI,GAChC,IAAmB,EAAO,GAAuB,IAAI,GAQrD,IAAqB,EAAO,GAA2B,IAAI;EACjE,EACE,GACA,QAAe,GAAoB,SAAS,EAAK,CACnD;EAcA,IAAM,IAAgB,QACpB,EAAM,uBACF,EAAM,OAAO,QAAQ,MAAU,CAAC,GAAkB,SAAS,EAAM,EAAE,CAAC,IACpE,EAAM,MACZ,GAQM,IAAa,QACjB,EAAmB,GAAQ,QAAQ,MAAM,UAAU,EAAM,QAAQ,CACnE,GAYM,IAAgB,QACpB,IAAS,EAAiB,EAAO,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAC9D,GAEM,IAAiD;GACrD,SAAS;GACT,OAAO;GACP,WAAW;GACX,OAAO;GACP,OAAO;GACP,QAAQ;GACR,SAAS;GACT,QAAQ;GACR,MAAM;GACN,OAAO;GACP,QAAQ;GACR,MAAM;GACN,QAAQ;EACV;EAEA,SAAS,EAAkB,GAAgC;GACzD,OAAO,EAAsB,GAAO,GAAe,CAAmB;EACxE;oBAIE,EAAA,GAAA,EAsBM,OAAA;GArBJ,eAAY;GACZ,OAAM;GACL,OAAK,EAAA;IAAoB,OAAA,GAAA,EAAA,MAAU;IAAwB,YAAA,EAAA,CAAA;;;IAA+H,GAAA,EAAA;;EAQ3L,GAAA,EAAA,EAAA,EAAA,GAAA,EAUM,GAAA,MAAA,EATY,EAAA,QAAT,OADT,EAAA,GAAA,EAUM,OAAA;GARH,KAAK,EAAM;GACX,OAAK,EAAE,EAAA,CAAA,CAAoB,CAAC,CAAK,CAAA;EAElC,GAAA,EAAA,EAAA,GAAA,EAIE,EAHK,EAAkB,CAAK,CAAA,GAAA;GACpB;GACP,UAAU,EAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TestEmailModal-CDx1Pqtx.js","names":[],"sources":["../../../src/utils/validateEmailShape.ts","../../../src/components/TestEmailModal.vue","../../../src/components/TestEmailModal.vue"],"sourcesContent":["/**\n * Characters that cannot appear in a domain but routinely arrive attached to one.\n *\n * A **denylist**, not an allowlist, so unicode domains keep working — an\n * allowlist of `[a-z0-9.-]` would be the stricter, more obviously \"correct\"\n * choice and would reject them. What this actually targets is the punctuation\n * that comes from pasting out of a list or a mail client: `user@example.com,`\n * and `<user@example.com>`.\n */\nconst IMPOSSIBLE_DOMAIN_CHARS = /[,;<>()[\\]\\\\\"'`|/?#@!$%^&*+=~{}]/;\n\n/**\n * Does this string look like an email address?\n *\n * Deliberately loose: non-empty, no whitespace, exactly one `@`, a non-empty\n * local part, and a domain containing a dot with something either side and no\n * impossible characters. That is enough to catch the mistakes a typo actually\n * produces — a missing `@`, a trailing comma, a half-typed domain — before the\n * user pays for a round-trip.\n *\n * **Do not \"improve\" this into an RFC-ish regex.** Those reliably reject valid\n * addresses (plus-addressing, long new gTLDs, unicode domains) and the resulting\n * bug reports cost far more than the malformed addresses they catch. Only the\n * receiving mail server can really tell, and the sending backend has to validate\n * anyway — this is a fast-feedback affordance, not a gate. `validateEmailShape`\n * has its own test file pinning the addresses that must keep passing.\n */\nexport function looksLikeEmail(value: string): boolean {\n const trimmed = value.trim();\n if (trimmed.length === 0) return false;\n if (/\\s/.test(trimmed)) return false;\n\n const parts = trimmed.split(\"@\");\n if (parts.length !== 2) return false;\n\n const [local, domain] = parts;\n if (local.length === 0) return false;\n if (IMPOSSIBLE_DOMAIN_CHARS.test(domain)) return false;\n\n // A dot with at least one character either side, so `a@b` and `a@b.` fail but\n // `a@b.c` and `a@sub.example.museum` pass.\n const dot = domain.indexOf(\".\");\n return dot > 0 && dot < domain.length - 1;\n}\n","<script setup lang=\"ts\">\nimport { primaryBtnClass } from \"../constants/styleConstants\";\n/**\n * Send-a-test dialog, shared by the OSS and Cloud editors.\n *\n * The recipient control has three shapes, driven entirely by whether the\n * provider configured an allowlist:\n *\n * - **no allowlist** — free text, validated for shape only. This branch exists\n * for BYO senders; Cloud never takes it, because its list comes from a signed\n * JWT.\n * - **exactly one** — a read-only field. Preserved verbatim from the Cloud-only\n * version; there is nothing to choose, so offering an editable field would\n * imply otherwise.\n * - **several** — a picker of exactly those addresses.\n *\n * An empty allowlist never reaches here: the feature reports itself unavailable,\n * so no trigger renders. (The Cloud-only version fell through to `v-else` and\n * rendered a select with no options and a permanently disabled Send.)\n */\nimport TplModal from \"./TplModal.vue\";\n// Statically imported: this modal is already lazy-loaded as a whole, so the\n// preview rides its chunk rather than costing a second round-trip and flashing\n// an empty frame. Still shared with the saved-blocks surfaces, which lazy-load\n// it themselves.\nimport BlockPreviewCanvas from \"./BlockPreviewCanvas.vue\";\n// The editor header's own control, reused verbatim so the two viewport switches\n// are the same component rather than two things that resemble each other.\nimport ViewportToggle from \"./ViewportToggle.vue\";\nimport MergeTagModeToggle from \"./MergeTagModeToggle.vue\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { looksLikeEmail } from \"../utils/validateEmailShape\";\nimport { Check, LoaderCircle } from \"@lucide/vue\";\nimport { computed, inject, ref, watch } from \"vue\";\nimport { hasMergeTagSamples, type ViewportSize } from \"@templatical/types\";\nimport {\n EDITOR_KEY,\n MERGE_TAGS_KEY,\n MERGE_TAG_SAMPLE_MODE_KEY,\n RESOLVE_PREVIEW_KEY,\n} from \"../keys\";\nimport { usePreviewResolution } from \"../composables/usePreviewResolution\";\nimport type { TestEmailError } from \"../composables/useTestEmailFeature\";\n\nconst props = defineProps<{\n visible: boolean;\n /** Omitted / undefined means unrestricted, so the field accepts free text. */\n allowedRecipients?: string[];\n defaultRecipient?: string;\n isSending: boolean;\n justSent: boolean;\n error: TestEmailError | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"send\", recipient: string): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst editor = inject(EDITOR_KEY, null);\n\nconst recipient = ref(\"\");\n\nconst previewViewport = ref<ViewportSize>(\"desktop\");\n\n/**\n * Its own resolution instance rather than the editor's, because this dialog has\n * a recipient and the editor's preview does not — resolving for \"whoever is\n * selected here\" is a different question from resolving for the canvas.\n * `isActive` is the dialog's own visibility.\n */\nconst resolvePreviewHook = inject(RESOLVE_PREVIEW_KEY, undefined);\nconst previewResolution = usePreviewResolution({\n resolvePreview: resolvePreviewHook ?? undefined,\n getContent: () =>\n editor?.content.value ?? { blocks: [], settings: {} as never },\n isActive: () => props.visible,\n getRecipient: () => recipient.value || undefined,\n});\n\n/**\n * Shared with the editor's own preview, so switching here and switching there\n * are the same choice — it is a property of how the user wants to read a\n * preview, not of one dialog. Falls back to a local ref for headless mounts.\n */\nconst sharedSampleMode = inject(MERGE_TAG_SAMPLE_MODE_KEY, null);\n// Seeded from availability, matching how `useEditorCore` seeds the shared ref.\n// A blanket `true` would make the dialog claim tags \"show example values\" for a\n// consumer who configured none — false, and with no toggle rendered to correct\n// it, since the toggle hides itself when nothing has a sample.\nconst localSampleMode = ref(hasMergeTagSamples(inject(MERGE_TAGS_KEY, [])));\nconst sampleMode = computed({\n get: () =>\n // Off entirely while a resolver is configured — same rule as the canvas.\n previewResolution.isConfigured\n ? false\n : (sharedSampleMode?.value ?? localSampleMode.value),\n set: (on: boolean) => {\n if (sharedSampleMode) sharedSampleMode.value = on;\n else localSampleMode.value = on;\n },\n});\n\nconst previewBlocks = computed(\n () => previewResolution.content.value.blocks ?? [],\n);\n\nconst hasAllowlist = computed(\n () =>\n props.allowedRecipients !== undefined && props.allowedRecipients.length > 0,\n);\nconst isSingleRecipient = computed(() => props.allowedRecipients?.length === 1);\n\n// Mounted behind a `v-if` on the same state that drives `visible`, so it can\n// mount with `visible` already true — without `immediate` the field would never\n// be seeded.\nwatch(\n () => props.visible,\n (visible) => {\n if (!visible) return;\n recipient.value =\n props.defaultRecipient ?? props.allowedRecipients?.[0] ?? \"\";\n },\n { immediate: true },\n);\n\n/** Shape-check free text only; a picker can't produce a malformed value. */\nconst isRecipientValid = computed(() =>\n hasAllowlist.value\n ? recipient.value.length > 0\n : looksLikeEmail(recipient.value),\n);\n\nconst canSend = computed(\n () => isRecipientValid.value && !props.isSending && !props.justSent,\n);\n\n/** Free text that's been typed into but isn't yet a plausible address. */\nconst showShapeHint = computed(\n () =>\n !hasAllowlist.value &&\n recipient.value.trim().length > 0 &&\n !isRecipientValid.value,\n);\n\nconst errorText = computed(() => {\n if (!props.error) return null;\n return props.error.kind === \"provider\"\n ? props.error.message\n : t.testEmail.recipientNotAllowed;\n});\n\nfunction handleSend(): void {\n if (!canSend.value) return;\n emit(\"send\", recipient.value.trim());\n}\n\nfunction handleClose(): void {\n // Sending is the one state that blocks dismissal; the success state closes\n // immediately rather than making the user wait out the timer.\n if (props.isSending) return;\n emit(\"close\");\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n handleSend();\n }\n if (event.key === \"Escape\") {\n handleClose();\n }\n}\n</script>\n\n<template>\n <TplModal :visible=\"visible\" @close=\"handleClose\" @keydown=\"handleKeydown\">\n <!-- Grows to `max-w-2xl` only while the preview is open, so a 600px email\n renders at roughly true size — the same reason SaveBlockDialog picked\n that width. Collapsed, it stays the compact form it was. `max-h-[90%]`\n with a `min-h-0 overflow-y-auto` preview region is the pattern the\n saved-blocks dialogs use: the cap bounds the panel to TplModal's\n backdrop (never to `vh` — see the note there), and `min-h-0` is what\n lets a flex child shrink below its content and actually scroll. -->\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-busy=\"isSending\"\n aria-labelledby=\"tpl-test-email-title\"\n class=\"tpl-scale-in tpl:flex tpl:max-h-[90%] tpl:w-full tpl:max-w-2xl tpl:flex-col tpl:rounded-[var(--tpl-radius-lg)] tpl:p-5\"\n style=\"\n background-color: var(--tpl-bg-elevated);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <h3\n id=\"tpl-test-email-title\"\n class=\"tpl:mb-4 tpl:shrink-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{ t.testEmail.title }}\n </h3>\n\n <!-- Recipient -->\n <div class=\"tpl:mb-3 tpl:shrink-0\">\n <label\n for=\"tpl-test-email-recipient\"\n class=\"tpl:mb-1.5 tpl:block tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.testEmail.recipientLabel }}\n </label>\n\n <!-- Exactly one allowed address: nothing to choose. -->\n <input\n v-if=\"isSingleRecipient\"\n id=\"tpl-test-email-recipient\"\n type=\"text\"\n :value=\"recipient\"\n disabled\n data-testid=\"test-email-recipient\"\n class=\"tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:opacity-70 tpl:shadow-[var(--tpl-shadow-sm)] tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]\"\n />\n\n <!-- Several allowed addresses: pick one. -->\n <select\n v-else-if=\"hasAllowlist\"\n id=\"tpl-test-email-recipient\"\n v-model=\"recipient\"\n :disabled=\"isSending || justSent\"\n data-testid=\"test-email-recipient\"\n class=\"tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:shadow-[var(--tpl-shadow-sm)] tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]\"\n >\n <option\n v-for=\"email in allowedRecipients\"\n :key=\"email\"\n :value=\"email\"\n >\n {{ email }}\n </option>\n </select>\n\n <!-- No allowlist: free text. -->\n <input\n v-else\n id=\"tpl-test-email-recipient\"\n v-model=\"recipient\"\n type=\"email\"\n autocomplete=\"email\"\n spellcheck=\"false\"\n :placeholder=\"t.testEmail.recipientPlaceholder\"\n :disabled=\"isSending || justSent\"\n data-testid=\"test-email-recipient\"\n class=\"tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:shadow-[var(--tpl-shadow-sm)] tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]\"\n />\n\n <p\n v-if=\"showShapeHint\"\n class=\"tpl:mt-1.5 tpl:text-xs tpl:text-[var(--tpl-text-dim)]\"\n >\n {{ t.testEmail.invalidAddress }}\n </p>\n </div>\n\n <!-- Preview header: a label plus the viewport switch. Always shown — the\n preview is part of the dialog rather than something to opt into. -->\n <div class=\"tpl:mb-2 tpl:shrink-0\">\n <!-- Two segmented controls: `flex-wrap` so they drop to their own row\n rather than crushing the label on a narrow viewport. -->\n <div\n class=\"tpl:flex tpl:flex-wrap tpl:items-center tpl:justify-between tpl:gap-2\"\n >\n <span\n class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.testEmail.preview }}\n </span>\n\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <MergeTagModeToggle\n v-if=\"!previewResolution.supersedesSamples.value\"\n :sample-mode=\"sampleMode\"\n @change=\"sampleMode = $event\"\n />\n\n <!-- Without this the preview would silently show only the desktop\n variant of any responsive block. -->\n <ViewportToggle\n :viewport=\"previewViewport\"\n @change=\"previewViewport = $event\"\n />\n </div>\n </div>\n\n <!-- The hint has to follow the mode: \"shown unresolved\" is simply false\n once every tag renders a realistic value. -->\n <p\n data-testid=\"test-email-preview-hint\"\n class=\"tpl:mt-1 tpl:text-xs tpl:text-[var(--tpl-text-dim)]\"\n >\n {{\n previewResolution.supersedesSamples.value\n ? t.previewResolution.hint\n : sampleMode\n ? t.testEmail.previewHintSample\n : t.testEmail.previewHint\n }}\n </p>\n </div>\n\n <!-- The one region allowed to grow: `flex-1 min-h-0` so it absorbs the\n remaining height and scrolls, leaving the form and actions fixed. -->\n <div\n id=\"tpl-test-email-preview\"\n data-testid=\"test-email-preview\"\n class=\"tpl:mb-3 tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto tpl:rounded-[var(--tpl-radius-sm)] tpl:p-3 tpl:bg-[var(--tpl-canvas-bg)]\"\n >\n <!-- Skeleton while a *first* resolve is outstanding, so the dialog never\n flashes the unresolved template before the resolved one. Sized like\n the frame it replaces to avoid a layout jump. A re-resolve (recipient\n change) keeps the previous result instead — `isInitialResolve`. -->\n <div\n v-if=\"previewResolution.isInitialResolve.value\"\n role=\"status\"\n aria-busy=\"true\"\n data-testid=\"preview-resolution-loading\"\n class=\"tpl:flex tpl:flex-col tpl:gap-3\"\n >\n <span class=\"tpl:sr-only\">{{ t.previewResolution.resolving }}</span>\n <div\n v-for=\"n in 3\"\n :key=\"n\"\n aria-hidden=\"true\"\n class=\"tpl-pulse tpl:h-16 tpl:rounded-md tpl:bg-[var(--tpl-bg-hover)]\"\n ></div>\n </div>\n\n <!-- Resolution failed: the unresolved template renders below, so the\n dialog degrades rather than showing an empty frame. -->\n <p\n v-else-if=\"previewResolution.hasFailed.value\"\n role=\"status\"\n data-testid=\"preview-resolution-failed\"\n class=\"tpl:mb-2 tpl:rounded-md tpl:px-3 tpl:py-2 tpl:text-xs tpl:text-[var(--tpl-text-muted)] tpl:bg-[var(--tpl-bg-hover)]\"\n >\n {{ t.previewResolution.failed }}\n </p>\n\n <BlockPreviewCanvas\n v-if=\"!previewResolution.isInitialResolve.value\"\n :blocks=\"previewBlocks\"\n :viewport=\"previewViewport\"\n :apply-condition-filter=\"!previewResolution.isConfigured\"\n />\n </div>\n\n <!-- Success. Announced politely; the dialog closes itself shortly after. -->\n <p\n v-if=\"justSent\"\n role=\"status\"\n data-testid=\"test-email-success\"\n class=\"tpl:mb-3 tpl:flex tpl:shrink-0 tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:text-[var(--tpl-success,var(--tpl-primary))]\"\n >\n <Check :size=\"13\" :stroke-width=\"2.5\" />\n {{ t.testEmail.success }}\n </p>\n\n <!-- Failure. Stays open so the user can retry. -->\n <p\n v-else-if=\"errorText\"\n role=\"alert\"\n data-testid=\"test-email-error\"\n class=\"tpl:mb-3 tpl:shrink-0 tpl:text-xs tpl:text-[var(--tpl-danger)]\"\n >\n {{ errorText }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:shrink-0 tpl:justify-end tpl:gap-2\">\n <button\n type=\"button\"\n data-testid=\"test-email-cancel\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-[var(--tpl-shadow-sm)] tpl:transition-all tpl:border-[var(--tpl-border)] tpl:text-[var(--tpl-text)] tpl:bg-[var(--tpl-bg)]\"\n :disabled=\"isSending\"\n :class=\"{ 'tpl:cursor-not-allowed tpl:opacity-50': isSending }\"\n @click=\"handleClose\"\n >\n {{ t.testEmail.cancel }}\n </button>\n <button\n type=\"button\"\n data-testid=\"test-email-send\"\n :class=\"primaryBtnClass\"\n :disabled=\"!canSend\"\n @click=\"handleSend\"\n >\n <span v-if=\"isSending\" class=\"tpl:flex tpl:items-center tpl:gap-1.5\">\n <LoaderCircle\n class=\"tpl:animate-spin\"\n :size=\"12\"\n :stroke-width=\"2\"\n />\n {{ t.testEmail.sending }}\n </span>\n <span v-else>\n {{ t.testEmail.send }}\n </span>\n </button>\n </div>\n </div>\n </TplModal>\n</template>\n","<script setup lang=\"ts\">\nimport { primaryBtnClass } from \"../constants/styleConstants\";\n/**\n * Send-a-test dialog, shared by the OSS and Cloud editors.\n *\n * The recipient control has three shapes, driven entirely by whether the\n * provider configured an allowlist:\n *\n * - **no allowlist** — free text, validated for shape only. This branch exists\n * for BYO senders; Cloud never takes it, because its list comes from a signed\n * JWT.\n * - **exactly one** — a read-only field. Preserved verbatim from the Cloud-only\n * version; there is nothing to choose, so offering an editable field would\n * imply otherwise.\n * - **several** — a picker of exactly those addresses.\n *\n * An empty allowlist never reaches here: the feature reports itself unavailable,\n * so no trigger renders. (The Cloud-only version fell through to `v-else` and\n * rendered a select with no options and a permanently disabled Send.)\n */\nimport TplModal from \"./TplModal.vue\";\n// Statically imported: this modal is already lazy-loaded as a whole, so the\n// preview rides its chunk rather than costing a second round-trip and flashing\n// an empty frame. Still shared with the saved-blocks surfaces, which lazy-load\n// it themselves.\nimport BlockPreviewCanvas from \"./BlockPreviewCanvas.vue\";\n// The editor header's own control, reused verbatim so the two viewport switches\n// are the same component rather than two things that resemble each other.\nimport ViewportToggle from \"./ViewportToggle.vue\";\nimport MergeTagModeToggle from \"./MergeTagModeToggle.vue\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { looksLikeEmail } from \"../utils/validateEmailShape\";\nimport { Check, LoaderCircle } from \"@lucide/vue\";\nimport { computed, inject, ref, watch } from \"vue\";\nimport { hasMergeTagSamples, type ViewportSize } from \"@templatical/types\";\nimport {\n EDITOR_KEY,\n MERGE_TAGS_KEY,\n MERGE_TAG_SAMPLE_MODE_KEY,\n RESOLVE_PREVIEW_KEY,\n} from \"../keys\";\nimport { usePreviewResolution } from \"../composables/usePreviewResolution\";\nimport type { TestEmailError } from \"../composables/useTestEmailFeature\";\n\nconst props = defineProps<{\n visible: boolean;\n /** Omitted / undefined means unrestricted, so the field accepts free text. */\n allowedRecipients?: string[];\n defaultRecipient?: string;\n isSending: boolean;\n justSent: boolean;\n error: TestEmailError | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"send\", recipient: string): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst editor = inject(EDITOR_KEY, null);\n\nconst recipient = ref(\"\");\n\nconst previewViewport = ref<ViewportSize>(\"desktop\");\n\n/**\n * Its own resolution instance rather than the editor's, because this dialog has\n * a recipient and the editor's preview does not — resolving for \"whoever is\n * selected here\" is a different question from resolving for the canvas.\n * `isActive` is the dialog's own visibility.\n */\nconst resolvePreviewHook = inject(RESOLVE_PREVIEW_KEY, undefined);\nconst previewResolution = usePreviewResolution({\n resolvePreview: resolvePreviewHook ?? undefined,\n getContent: () =>\n editor?.content.value ?? { blocks: [], settings: {} as never },\n isActive: () => props.visible,\n getRecipient: () => recipient.value || undefined,\n});\n\n/**\n * Shared with the editor's own preview, so switching here and switching there\n * are the same choice — it is a property of how the user wants to read a\n * preview, not of one dialog. Falls back to a local ref for headless mounts.\n */\nconst sharedSampleMode = inject(MERGE_TAG_SAMPLE_MODE_KEY, null);\n// Seeded from availability, matching how `useEditorCore` seeds the shared ref.\n// A blanket `true` would make the dialog claim tags \"show example values\" for a\n// consumer who configured none — false, and with no toggle rendered to correct\n// it, since the toggle hides itself when nothing has a sample.\nconst localSampleMode = ref(hasMergeTagSamples(inject(MERGE_TAGS_KEY, [])));\nconst sampleMode = computed({\n get: () =>\n // Off entirely while a resolver is configured — same rule as the canvas.\n previewResolution.isConfigured\n ? false\n : (sharedSampleMode?.value ?? localSampleMode.value),\n set: (on: boolean) => {\n if (sharedSampleMode) sharedSampleMode.value = on;\n else localSampleMode.value = on;\n },\n});\n\nconst previewBlocks = computed(\n () => previewResolution.content.value.blocks ?? [],\n);\n\nconst hasAllowlist = computed(\n () =>\n props.allowedRecipients !== undefined && props.allowedRecipients.length > 0,\n);\nconst isSingleRecipient = computed(() => props.allowedRecipients?.length === 1);\n\n// Mounted behind a `v-if` on the same state that drives `visible`, so it can\n// mount with `visible` already true — without `immediate` the field would never\n// be seeded.\nwatch(\n () => props.visible,\n (visible) => {\n if (!visible) return;\n recipient.value =\n props.defaultRecipient ?? props.allowedRecipients?.[0] ?? \"\";\n },\n { immediate: true },\n);\n\n/** Shape-check free text only; a picker can't produce a malformed value. */\nconst isRecipientValid = computed(() =>\n hasAllowlist.value\n ? recipient.value.length > 0\n : looksLikeEmail(recipient.value),\n);\n\nconst canSend = computed(\n () => isRecipientValid.value && !props.isSending && !props.justSent,\n);\n\n/** Free text that's been typed into but isn't yet a plausible address. */\nconst showShapeHint = computed(\n () =>\n !hasAllowlist.value &&\n recipient.value.trim().length > 0 &&\n !isRecipientValid.value,\n);\n\nconst errorText = computed(() => {\n if (!props.error) return null;\n return props.error.kind === \"provider\"\n ? props.error.message\n : t.testEmail.recipientNotAllowed;\n});\n\nfunction handleSend(): void {\n if (!canSend.value) return;\n emit(\"send\", recipient.value.trim());\n}\n\nfunction handleClose(): void {\n // Sending is the one state that blocks dismissal; the success state closes\n // immediately rather than making the user wait out the timer.\n if (props.isSending) return;\n emit(\"close\");\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n handleSend();\n }\n if (event.key === \"Escape\") {\n handleClose();\n }\n}\n</script>\n\n<template>\n <TplModal :visible=\"visible\" @close=\"handleClose\" @keydown=\"handleKeydown\">\n <!-- Grows to `max-w-2xl` only while the preview is open, so a 600px email\n renders at roughly true size — the same reason SaveBlockDialog picked\n that width. Collapsed, it stays the compact form it was. `max-h-[90%]`\n with a `min-h-0 overflow-y-auto` preview region is the pattern the\n saved-blocks dialogs use: the cap bounds the panel to TplModal's\n backdrop (never to `vh` — see the note there), and `min-h-0` is what\n lets a flex child shrink below its content and actually scroll. -->\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-busy=\"isSending\"\n aria-labelledby=\"tpl-test-email-title\"\n class=\"tpl-scale-in tpl:flex tpl:max-h-[90%] tpl:w-full tpl:max-w-2xl tpl:flex-col tpl:rounded-[var(--tpl-radius-lg)] tpl:p-5\"\n style=\"\n background-color: var(--tpl-bg-elevated);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <h3\n id=\"tpl-test-email-title\"\n class=\"tpl:mb-4 tpl:shrink-0 tpl:text-sm tpl:font-semibold tpl:text-[var(--tpl-text)]\"\n >\n {{ t.testEmail.title }}\n </h3>\n\n <!-- Recipient -->\n <div class=\"tpl:mb-3 tpl:shrink-0\">\n <label\n for=\"tpl-test-email-recipient\"\n class=\"tpl:mb-1.5 tpl:block tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.testEmail.recipientLabel }}\n </label>\n\n <!-- Exactly one allowed address: nothing to choose. -->\n <input\n v-if=\"isSingleRecipient\"\n id=\"tpl-test-email-recipient\"\n type=\"text\"\n :value=\"recipient\"\n disabled\n data-testid=\"test-email-recipient\"\n class=\"tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:opacity-70 tpl:shadow-[var(--tpl-shadow-sm)] tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]\"\n />\n\n <!-- Several allowed addresses: pick one. -->\n <select\n v-else-if=\"hasAllowlist\"\n id=\"tpl-test-email-recipient\"\n v-model=\"recipient\"\n :disabled=\"isSending || justSent\"\n data-testid=\"test-email-recipient\"\n class=\"tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:shadow-[var(--tpl-shadow-sm)] tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]\"\n >\n <option\n v-for=\"email in allowedRecipients\"\n :key=\"email\"\n :value=\"email\"\n >\n {{ email }}\n </option>\n </select>\n\n <!-- No allowlist: free text. -->\n <input\n v-else\n id=\"tpl-test-email-recipient\"\n v-model=\"recipient\"\n type=\"email\"\n autocomplete=\"email\"\n spellcheck=\"false\"\n :placeholder=\"t.testEmail.recipientPlaceholder\"\n :disabled=\"isSending || justSent\"\n data-testid=\"test-email-recipient\"\n class=\"tpl:h-9 tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1 tpl:text-sm tpl:shadow-[var(--tpl-shadow-sm)] tpl:outline-none tpl:border-[var(--tpl-border)] tpl:bg-[var(--tpl-bg)] tpl:text-[var(--tpl-text)]\"\n />\n\n <p\n v-if=\"showShapeHint\"\n class=\"tpl:mt-1.5 tpl:text-xs tpl:text-[var(--tpl-text-dim)]\"\n >\n {{ t.testEmail.invalidAddress }}\n </p>\n </div>\n\n <!-- Preview header: a label plus the viewport switch. Always shown — the\n preview is part of the dialog rather than something to opt into. -->\n <div class=\"tpl:mb-2 tpl:shrink-0\">\n <!-- Two segmented controls: `flex-wrap` so they drop to their own row\n rather than crushing the label on a narrow viewport. -->\n <div\n class=\"tpl:flex tpl:flex-wrap tpl:items-center tpl:justify-between tpl:gap-2\"\n >\n <span\n class=\"tpl:text-sm tpl:font-medium tpl:text-[var(--tpl-text-muted)]\"\n >\n {{ t.testEmail.preview }}\n </span>\n\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <MergeTagModeToggle\n v-if=\"!previewResolution.supersedesSamples.value\"\n :sample-mode=\"sampleMode\"\n @change=\"sampleMode = $event\"\n />\n\n <!-- Without this the preview would silently show only the desktop\n variant of any responsive block. -->\n <ViewportToggle\n :viewport=\"previewViewport\"\n @change=\"previewViewport = $event\"\n />\n </div>\n </div>\n\n <!-- The hint has to follow the mode: \"shown unresolved\" is simply false\n once every tag renders a realistic value. -->\n <p\n data-testid=\"test-email-preview-hint\"\n class=\"tpl:mt-1 tpl:text-xs tpl:text-[var(--tpl-text-dim)]\"\n >\n {{\n previewResolution.supersedesSamples.value\n ? t.previewResolution.hint\n : sampleMode\n ? t.testEmail.previewHintSample\n : t.testEmail.previewHint\n }}\n </p>\n </div>\n\n <!-- The one region allowed to grow: `flex-1 min-h-0` so it absorbs the\n remaining height and scrolls, leaving the form and actions fixed. -->\n <div\n id=\"tpl-test-email-preview\"\n data-testid=\"test-email-preview\"\n class=\"tpl:mb-3 tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto tpl:rounded-[var(--tpl-radius-sm)] tpl:p-3 tpl:bg-[var(--tpl-canvas-bg)]\"\n >\n <!-- Skeleton while a *first* resolve is outstanding, so the dialog never\n flashes the unresolved template before the resolved one. Sized like\n the frame it replaces to avoid a layout jump. A re-resolve (recipient\n change) keeps the previous result instead — `isInitialResolve`. -->\n <div\n v-if=\"previewResolution.isInitialResolve.value\"\n role=\"status\"\n aria-busy=\"true\"\n data-testid=\"preview-resolution-loading\"\n class=\"tpl:flex tpl:flex-col tpl:gap-3\"\n >\n <span class=\"tpl:sr-only\">{{ t.previewResolution.resolving }}</span>\n <div\n v-for=\"n in 3\"\n :key=\"n\"\n aria-hidden=\"true\"\n class=\"tpl-pulse tpl:h-16 tpl:rounded-md tpl:bg-[var(--tpl-bg-hover)]\"\n ></div>\n </div>\n\n <!-- Resolution failed: the unresolved template renders below, so the\n dialog degrades rather than showing an empty frame. -->\n <p\n v-else-if=\"previewResolution.hasFailed.value\"\n role=\"status\"\n data-testid=\"preview-resolution-failed\"\n class=\"tpl:mb-2 tpl:rounded-md tpl:px-3 tpl:py-2 tpl:text-xs tpl:text-[var(--tpl-text-muted)] tpl:bg-[var(--tpl-bg-hover)]\"\n >\n {{ t.previewResolution.failed }}\n </p>\n\n <BlockPreviewCanvas\n v-if=\"!previewResolution.isInitialResolve.value\"\n :blocks=\"previewBlocks\"\n :viewport=\"previewViewport\"\n :apply-condition-filter=\"!previewResolution.isConfigured\"\n />\n </div>\n\n <!-- Success. Announced politely; the dialog closes itself shortly after. -->\n <p\n v-if=\"justSent\"\n role=\"status\"\n data-testid=\"test-email-success\"\n class=\"tpl:mb-3 tpl:flex tpl:shrink-0 tpl:items-center tpl:gap-1.5 tpl:text-xs tpl:text-[var(--tpl-success,var(--tpl-primary))]\"\n >\n <Check :size=\"13\" :stroke-width=\"2.5\" />\n {{ t.testEmail.success }}\n </p>\n\n <!-- Failure. Stays open so the user can retry. -->\n <p\n v-else-if=\"errorText\"\n role=\"alert\"\n data-testid=\"test-email-error\"\n class=\"tpl:mb-3 tpl:shrink-0 tpl:text-xs tpl:text-[var(--tpl-danger)]\"\n >\n {{ errorText }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:shrink-0 tpl:justify-end tpl:gap-2\">\n <button\n type=\"button\"\n data-testid=\"test-email-cancel\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-[var(--tpl-shadow-sm)] tpl:transition-all tpl:border-[var(--tpl-border)] tpl:text-[var(--tpl-text)] tpl:bg-[var(--tpl-bg)]\"\n :disabled=\"isSending\"\n :class=\"{ 'tpl:cursor-not-allowed tpl:opacity-50': isSending }\"\n @click=\"handleClose\"\n >\n {{ t.testEmail.cancel }}\n </button>\n <button\n type=\"button\"\n data-testid=\"test-email-send\"\n :class=\"primaryBtnClass\"\n :disabled=\"!canSend\"\n @click=\"handleSend\"\n >\n <span v-if=\"isSending\" class=\"tpl:flex tpl:items-center tpl:gap-1.5\">\n <LoaderCircle\n class=\"tpl:animate-spin\"\n :size=\"12\"\n :stroke-width=\"2\"\n />\n {{ t.testEmail.sending }}\n </span>\n <span v-else>\n {{ t.testEmail.send }}\n </span>\n </button>\n </div>\n </div>\n </TplModal>\n</template>\n"],"mappings":";;;;;;;;;;;AASA,IAAM,IAA0B;AAkBhC,SAAgB,GAAe,GAAwB;CACrD,IAAM,IAAU,EAAM,KAAK;CAE3B,IADI,EAAQ,WAAW,KACnB,KAAK,KAAK,CAAO,GAAG,OAAO;CAE/B,IAAM,IAAQ,EAAQ,MAAM,GAAG;CAC/B,IAAI,EAAM,WAAW,GAAG,OAAO;CAE/B,IAAM,CAAC,GAAO,KAAU;CAExB,IADI,EAAM,WAAW,KACjB,EAAwB,KAAK,CAAM,GAAG,OAAO;CAIjD,IAAM,IAAM,EAAO,QAAQ,GAAG;CAC9B,OAAO,IAAM,KAAK,IAAM,EAAO,SAAS;AAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECCA,IAAM,IAAQ,GAUR,IAAO,GAKP,EAAE,SAAM,GAAQ,GAChB,KAAS,EAAO,IAAY,IAAI,GAEhC,IAAY,EAAI,EAAE,GAElB,IAAkB,EAAkB,SAAS,GAQ7C,KAAqB,EAAO,IAAqB,KAAA,CAAS,GAC1D,IAAoB,EAAqB;GAC7C,gBAAgB,MAAsB,KAAA;GACtC,kBACE,IAAQ,QAAQ,SAAS;IAAE,QAAQ,CAAC;IAAG,UAAU,CAAC;GAAW;GAC/D,gBAAgB,EAAM;GACtB,oBAAoB,EAAU,SAAS,KAAA;EACzC,CAAC,GAOK,IAAmB,EAAO,IAA2B,IAAI,GAKzD,IAAkB,EAAI,GAAmB,EAAO,IAAgB,CAAC,CAAC,CAAC,CAAC,GACpE,IAAa,EAAS;GAC1B,WAEE,EAAkB,eACd,KACC,GAAkB,SAAS,EAAgB;GAClD,MAAM,MAAgB;IACpB,AAAI,IAAkB,EAAiB,QAAQ,IAC1C,EAAgB,QAAQ;GAC/B;EACF,CAAC,GAEK,KAAgB,QACd,EAAkB,QAAQ,MAAM,UAAU,CAAC,CACnD,GAEM,IAAe,QAEjB,EAAM,sBAAsB,KAAA,KAAa,EAAM,kBAAkB,SAAS,CAC9E,GACM,KAAoB,QAAe,EAAM,mBAAmB,WAAW,CAAC;EAK9E,QACQ,EAAM,UACX,MAAY;GACN,MACL,EAAU,QACR,EAAM,oBAAoB,EAAM,oBAAoB,MAAM;EAC9D,GACA,EAAE,WAAW,GAAK,CACpB;EAGA,IAAM,IAAmB,QACvB,EAAa,QACT,EAAU,MAAM,SAAS,IACzB,GAAe,EAAU,KAAK,CACpC,GAEM,IAAU,QACR,EAAiB,SAAS,CAAC,EAAM,aAAa,CAAC,EAAM,QAC7D,GAGM,KAAgB,QAElB,CAAC,EAAa,SACd,EAAU,MAAM,KAAK,CAAC,CAAC,SAAS,KAChC,CAAC,EAAiB,KACtB,GAEM,IAAY,QACX,EAAM,QACJ,EAAM,MAAM,SAAS,aACxB,EAAM,MAAM,UACZ,EAAE,UAAU,sBAHS,IAI1B;EAED,SAAS,IAAmB;GACrB,EAAQ,SACb,EAAK,QAAQ,EAAU,MAAM,KAAK,CAAC;EACrC;EAEA,SAAS,IAAoB;GAGvB,EAAM,aACV,EAAK,OAAO;EACd;EAEA,SAAS,GAAc,GAA4B;GAKjD,AAJI,EAAM,QAAQ,WAAW,CAAC,EAAM,aAClC,EAAM,eAAe,GACrB,EAAW,IAET,EAAM,QAAQ,YAChB,EAAY;EAEhB;oBAIE,EAAA,GAAA,EAwOW,IAAA;GAxOA,SAAS,EAAA;GAAU,SAAO;GAAc,WAAS;;GAQ1D,SAAA,QA+NM,CA/NN,EA+NM,OAAA;IA9NJ,MAAK;IACL,cAAW;IACV,aAAW,EAAA;IACZ,mBAAgB;IAChB,OAAM;IACN,OAAA;KAAA,oBAAA;KAAA,cAAA;IAAA;;IAKA,EAKK,MALL,GAKK,EADA,EAAA,CAAA,CAAC,CAAC,UAAU,KAAK,GAAA,CAAA;IAItB,EAyDM,OAzDN,GAyDM;KAxDJ,EAKQ,SALR,GAKQ,EADH,EAAA,CAAA,CAAC,CAAC,UAAU,cAAc,GAAA,CAAA;KAKvB,GAAA,SADR,EAAA,GAAA,EAQE,SAAA;;MANA,IAAG;MACH,MAAK;MACJ,OAAO,EAAA;MACR,UAAA;MACA,eAAY;MACZ,OAAM;KAKK,GAAA,MAAA,GAAA,CAAA,KAAA,EAAA,QADb,GAAA,EAAA,GAAA,EAeS,UAAA;;MAbP,IAAG;MACM,uBAAA,AAAA,EAAA,QAAA,MAAA,EAAS,QAAA;MACjB,UAAU,EAAA,aAAa,EAAA;MACxB,eAAY;MACZ,OAAM;KAEN,GAAA,EAAA,EAAA,EAAA,GAAA,EAMS,GAAA,MAAA,EALS,EAAA,oBAAT,OADT,EAAA,GAAA,EAMS,UAAA;MAJN,KAAK;MACL,OAAO;KAEL,GAAA,EAAA,CAAK,GAAA,GAAA,CAAA,EAVD,GAAA,GAAA,EAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA,IAAA,EAAA,KAAS,CAAA,CAAA,IAepB,GAAA,EAAA,GAAA,EAWE,SAAA;;MATA,IAAG;MACM,uBAAA,AAAA,EAAA,QAAA,MAAA,EAAS,QAAA;MAClB,MAAK;MACL,cAAa;MACb,YAAW;MACV,aAAa,EAAA,CAAA,CAAC,CAAC,UAAU;MACzB,UAAU,EAAA,aAAa,EAAA;MACxB,eAAY;MACZ,OAAM;KAPG,GAAA,MAAA,GAAA,CAAA,IAAA,CAAA,CAAA,IAAA,EAAA,KAAS,CAAA,CAAA;KAWZ,GAAA,SADR,EAAA,GAAA,EAKI,KALJ,GAKI,EADC,EAAA,CAAA,CAAC,CAAC,UAAU,cAAc,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA;;IAMjC,EA0CM,OA1CN,GA0CM,CAvCJ,EAuBM,OAvBN,GAuBM,CApBJ,EAIO,QAJP,GAIO,EADF,EAAA,CAAA,CAAC,CAAC,UAAU,OAAO,GAAA,CAAA,GAGxB,EAaM,OAbN,GAaM,CAXK,EAAA,CAAA,CAAiB,CAAC,kBAAkB,QAO7C,EAAA,IAAA,EAAA,KARA,EAAA,GAAA,EAIE,IAAA;;KAFC,eAAa,EAAA;KACb,UAAM,AAAA,EAAA,QAAA,MAAE,EAAA,QAAa;IAKxB,GAAA,MAAA,GAAA,CAAA,aAAA,CAAA,IAAA,EAGE,IAAA;KAFC,UAAU,EAAA;KACV,UAAM,AAAA,EAAA,QAAA,MAAE,EAAA,QAAkB;IAOjC,GAAA,MAAA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAWI,KAXJ,GAWI,EANA,EAAA,CAAA,CAAiB,CAAC,kBAAkB,QAAsB,EAAA,CAAA,CAAC,CAAC,kBAAkB,OAAqB,EAAA,QAA6B,EAAA,CAAA,CAAC,CAAC,UAAU,oBAAoC,EAAA,CAAA,CAAC,CAAC,UAAU,WAAW,GAAA,CAAA,CAAA,CAAA;IAW7M,EA0CM,OA1CN,GA0CM,CAhCI,EAAA,CAAA,CAAiB,CAAC,iBAAiB,SAD3C,EAAA,GAAA,EAcM,OAdN,GAcM,CAPJ,EAAoE,QAApE,GAAoE,EAAvC,EAAA,CAAA,CAAC,CAAC,kBAAkB,SAAS,GAAA,CAAA,IAC1D,EAAA,GAAA,EAKO,GAAA,MAAA,EAJO,IAAL,MADT,EAKO,OAAA;KAHJ,KAAK;KACN,eAAY;KACZ,OAAM;MAOG,GAAA,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,CAAiB,CAAC,UAAU,SADzC,EAAA,GAAA,EAOI,KAPJ,GAOI,EADC,EAAA,CAAA,CAAC,CAAC,kBAAkB,MAAM,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,GAItB,EAAA,CAAA,CAAiB,CAAC,iBAAiB,qBAD5C,EAAA,GAAA,EAKE,IAAA;;KAHC,QAAQ,GAAA;KACR,UAAU,EAAA;KACV,0BAAsB,CAAG,EAAA,CAAA,CAAiB,CAAC;;;;;;IAMxC,EAAA,YADR,EAAA,GAAA,EAQI,KARJ,IAQI,CAFF,EAAwC,EAAA,EAAA,GAAA;KAAhC,MAAM;KAAK,gBAAc;IAAO,CAAA,GAAA,EAAA,MACxC,EAAG,EAAA,CAAA,CAAC,CAAC,UAAU,OAAO,GAAA,CAAA,CAAA,CAAA,KAKX,EAAA,SADb,EAAA,GAAA,EAOI,KAPJ,IAOI,EADC,EAAA,KAAS,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA;IAId,EA8BM,OA9BN,IA8BM,CA7BJ,EASS,UAAA;KARP,MAAK;KACL,eAAY;KACZ,OAAK,EAAA,CAAC,sOAAoO,EAAA,yCAEvL,EAAA,UAAS,CAAA,CAAA;KAD3D,UAAU,EAAA;KAEV,SAAO;IAEL,GAAA,EAAA,EAAA,CAAA,CAAC,CAAC,UAAU,MAAM,GAAA,IAAA,EAAA,GAEvB,EAkBS,UAAA;KAjBP,MAAK;KACL,eAAY;KACX,OAAK,EAAE,EAAA,EAAA,CAAe;KACtB,UAAQ,CAAG,EAAA;KACX,SAAO;IAEI,GAAA,CAAA,EAAA,aAAZ,EAAA,GAAA,EAOO,QAPP,IAOO,CANL,EAIE,EAAA,EAAA,GAAA;KAHA,OAAM;KACL,MAAM;KACN,gBAAc;IACf,CAAA,GAAA,EAAA,MACF,EAAG,EAAA,CAAA,CAAC,CAAC,UAAU,OAAO,GAAA,CAAA,CAAA,CAAA,MAExB,EAAA,GAAA,EAEO,QAAA,IAAA,EADF,EAAA,CAAA,CAAC,CAAC,UAAU,IAAI,GAAA,CAAA,EAAA,GAAA,IAAA,EAAA,CAAA,CAAA"}
|