domma-cms 1.6.16 → 1.6.17
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/admin/dist/domma/domma-tools.css +3 -3
- package/admin/dist/domma/domma-tools.min.js +3 -3
- package/admin/js/lib/effects-builder.js +2 -2
- package/admin/js/lib/page-editor-reference.js +3 -3
- package/admin/js/lib/scribe-composer.js +1 -1
- package/admin/js/lib/scribe-model.js +1 -1
- package/admin/js/templates/effects.html +10 -4
- package/package.json +2 -2
- package/public/css/site.css +1 -1
- package/public/js/effects.js +1 -1
- package/server/services/markdown.js +1 -1
- package/server/templates/page.html +2 -2
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Domma Tools CSS v0.51.
|
|
2
|
+
* Domma Tools CSS v0.51.9
|
|
3
3
|
* Dynamic Object Manipulation & Modeling API
|
|
4
4
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5
|
-
* Built: 2026-10-
|
|
6
|
-
* Commit:
|
|
5
|
+
* Built: 2026-10-11T10:14:37.692Z
|
|
6
|
+
* Commit: c708495
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/*!
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Domma Tools v0.51.
|
|
2
|
+
* Domma Tools v0.51.9
|
|
3
3
|
* Developer tools: Theme Roller & Page Roller
|
|
4
4
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5
|
-
* Built: 2026-10-
|
|
6
|
-
* Commit:
|
|
5
|
+
* Built: 2026-10-11T10:14:22.712Z
|
|
6
|
+
* Commit: c708495
|
|
7
7
|
*
|
|
8
8
|
* Requires: domma.min.js
|
|
9
9
|
*/
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{EFFECTS as
|
|
1
|
+
import{EFFECTS as R,effectsByCategory as L,effectsInjectableInto as j,getEffect as u,getEffectAttrs as g}from"./effect-defs.js";import{scribeLoop as O}from"./scribe-model.js";import{insertAtCursor as N,replaceRange as C}from"./markdown-toolbar.js";let h=null,x=null;function B(e,t,n=14){e.textContent="";const o=document.createElement("span");return o.setAttribute("data-icon",t),o.setAttribute("data-icon-size",String(n)),o.style.cssText="display:inline-flex;align-items:center;vertical-align:middle;",e.appendChild(o),I.scan(e),e}function q(e,t,n,o=14){return B(e,t,o),e.appendChild(document.createTextNode(" "+n)),e}export const EffectsBuilder={open(e){if(h)return;const t={textarea:e,activeEffect:S.get("effects-builder-last")||"reveal",scope:"standalone",host:null,editing:null,fieldValues:{}};if(t.host=M(e),t.host&&j(t.host.name).map(r=>r.name).includes(t.activeEffect)&&!(t.activeEffect in t.host.attrs)&&(t.scope="inject"),t.editing=H(e),t.editing){t.activeEffect=t.editing.name,t.scope="standalone";const l=u(t.editing.name);for(const r of g(l,t.fieldValues))if(r.name in t.editing.attrs){const s=t.editing.attrs[r.name];r.type==="number"?t.fieldValues[r.name]=Number(s):r.type==="checkbox"?t.fieldValues[r.name]=s==="true":t.fieldValues[r.name]=s}}const n=E.slideover({title:"Effects",size:"lg",position:"right",onClose:()=>{x?.destroy(),x=null,h=null}}),o=P(t,n);n.element.appendChild(o),n.open(),I.scan(o),h={state:t,slideover:n}},close(){h&&(h.slideover.close(),h=null)}};function P(e,t){const n=document.createElement("div");n.style.cssText="display:grid;grid-template-columns:170px 1fr;height:100%;min-height:520px;";const o=document.createElement("div");o.className="effects-rail",o.style.cssText="background:var(--dm-background-alt,#15152a);border-right:1px solid var(--dm-border,#2a2a40);padding:.5rem .35rem;font-size:.8rem;overflow-y:auto;";const l=document.createElement("div");l.className="effects-pane",l.style.cssText="padding:1rem;display:flex;flex-direction:column;gap:.75rem;overflow-y:auto;";function r(){W(l,e,t)}return k(o,e,r),r(),n.appendChild(o),n.appendChild(l),n}function k(e,t,n){e.replaceChildren();for(const o of L()){const l=document.createElement("div");l.style.cssText="color:var(--dm-text-muted,#888);text-transform:uppercase;font-size:.65rem;letter-spacing:.05em;margin:.4rem .35rem .25rem;",l.textContent=o.category,e.appendChild(l);for(const r of o.effects){const s=document.createElement("button");s.type="button",s.dataset.effect=r.name,s.style.cssText="display:block;width:100%;text-align:left;padding:.3rem .5rem;border:none;background:transparent;color:var(--dm-text,#ddd);border-radius:3px;font-size:.8rem;cursor:pointer;margin-bottom:.1rem;",s.textContent=r.label,r.name===t.activeEffect&&(s.style.background="var(--dm-primary,#4338ca)",s.style.color="var(--dm-primary-text,#fff)"),s.addEventListener("click",()=>{t.activeEffect=r.name,S.set("effects-builder-last",r.name),t.fieldValues={},k(e,t,n),n()}),e.appendChild(s)}}}function F(e,t){if(e.type==="select"){const o=document.createElement("select");o.style.cssText="width:100%;padding:.35rem .5rem;background:var(--dm-input-bg,#1a1a1a);border:1px solid var(--dm-border,#333);border-radius:3px;color:var(--dm-text,#eee);font-size:.85rem;";for(const[l,r]of e.options){const s=document.createElement("option");s.value=l,s.textContent=r,o.appendChild(s)}return o.value=t??e.default??"",o}if(e.type==="checkbox"){const o=document.createElement("input");return o.type="checkbox",o.checked=t??e.default??!1,o}const n=document.createElement("input");return n.type=e.type==="number"?"number":e.type==="colour"?"color":"text",n.value=t??e.default??"",e.placeholder&&(n.placeholder=e.placeholder),e.type==="number"&&(e.min!=null&&(n.min=e.min),e.max!=null&&(n.max=e.max),e.step!=null&&(n.step=e.step)),n.style.cssText="width:100%;padding:.35rem .5rem;background:var(--dm-input-bg,#1a1a1a);border:1px solid var(--dm-border,#333);border-radius:3px;color:var(--dm-text,#eee);font-size:.85rem;",n}function T(e,t){return t.type==="checkbox"?e.checked:t.type==="number"?e.value===""?"":Number(e.value):e.value}function v(e,t,n){const o=u(t.activeEffect);if(e.replaceChildren(),o.attrs.length===0){const r=document.createElement("div");r.style.cssText="color:var(--dm-text-muted,#888);font-size:.8rem;font-style:italic;",r.textContent="This effect takes no parameters.",e.appendChild(r);return}const l=document.createElement("div");l.style.cssText="display:grid;grid-template-columns:1fr 1fr;gap:.6rem .7rem;";for(const r of g(o,t.fieldValues)){const s=document.createElement("div"),d=document.createElement("label");d.style.cssText="display:block;color:var(--dm-text-muted,#888);font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.2rem;",d.textContent=r.label,s.appendChild(d);const i=F(r,t.fieldValues[r.name]);if(i.addEventListener("input",()=>{t.fieldValues[r.name]=T(i,r),n(),r.name==="theme"&&v(e,t,n)}),i.addEventListener("change",()=>{t.fieldValues[r.name]=T(i,r),n(),r.name==="theme"&&v(e,t,n)}),s.appendChild(i),r.hint){const c=document.createElement("div");c.style.cssText="color:var(--dm-text-muted,#666);font-size:.7rem;margin-top:.15rem;",c.textContent=r.hint,s.appendChild(c)}l.appendChild(s)}e.appendChild(l)}function $(e){const t={},n=/(\w[\w-]*)(?:\s*=\s*"([^"]*)"|\s*=\s*'([^']*)'|\s*=\s*(\S+))?/g;for(const o of e.matchAll(n)){const l=o[1],r=o[2]??o[3]??o[4]??"";t[l]=r}return t}const D=R.filter(e=>!e.selfClosing).map(e=>e.name);function H(e){const t=e.value,n=e.selectionStart;for(const o of D){const l=new RegExp(`\\[${o}([^\\]]*)\\]`,"g"),r=new RegExp(`\\[/${o}\\]`,"g"),s=[];for(const c of t.matchAll(l)){if(c.index>=n)break;s.push({type:"open",start:c.index,end:c.index+c[0].length,attrStr:c[1]})}for(const c of t.matchAll(r)){if(c.index>=n)break;s.push({type:"close",start:c.index,end:c.index+c[0].length})}s.sort((c,a)=>c.start-a.start);let d=0,i=null;for(const c of s)c.type==="open"?(d++,i=c):(d--,d<0&&(d=0,i=null));if(d>0&&i){const c=new RegExp(`\\[/${o}\\]`,"g"),a=t.slice(n),m=a.match(c);if(m){const f=n+a.indexOf(m[0]);return{name:o,blockStart:i.start,blockEnd:f+m[0].length,openTagEnd:i.end,attrs:$(i.attrStr)}}}}return null}const K=["card","box","hero","banner","col","button"];function M(e){const t=e.value,n=e.selectionStart;for(const o of K){const l=new RegExp(`\\[${o}([^\\]]*)\\]`,"g"),r=new RegExp(`\\[/${o}\\]`,"g"),s=[];for(const c of t.matchAll(l)){if(c.index>=n)break;s.push({type:"open",start:c.index,end:c.index+c[0].length,attrStr:c[1]})}for(const c of t.matchAll(r)){if(c.index>=n)break;s.push({type:"close",start:c.index,end:c.index+c[0].length})}s.sort((c,a)=>c.start-a.start);let d=0,i=null;for(const c of s)c.type==="open"?(d++,i=c):(d--,d<0&&(d=0,i=null));if(d>0&&i){const c=new RegExp(`\\[/${o}\\]`,"g"),a=t.slice(n),m=a.match(c);if(m){const f=n+a.indexOf(m[0]);return{name:o,openTagStart:i.start,openTagEnd:i.end,closeTagStart:f,closeTagEnd:f+m[0].length,attrs:$(i.attrStr)}}}}return null}function w(e,t){const n=[];for(const o of g(t,e.fieldValues)){const l=e.fieldValues[o.name];l===void 0||l===""||l===null||l===o.default&&!o.always||(o.type==="checkbox"?n.push(`${o.name}="${l?"true":"false"}"`):n.push(`${o.name}="${String(l).replace(/"/g,""")}"`))}return n.join(" ")}function _(e){const t=u(e.activeEffect),n=w(e,t),o=n?" ":"";if(e.scope==="inject"&&e.host){const l=e.host.attrs,r=t.name,s=[];for(const d of Object.keys(l)){if(d===r||d.startsWith(r+"-"))continue;const i=l[d];s.push(i===""?d:`${d}="${String(i).replace(/"/g,""")}"`)}s.push(r);for(const d of g(t,e.fieldValues)){const i=e.fieldValues[d.name];if(i===void 0||i===""||i===null||i===d.default)continue;const c=d.type==="checkbox"?i?"true":"false":String(i).replace(/"/g,""");s.push(`${r}-${d.name}="${c}"`)}return`[${e.host.name} ${s.join(" ")}]\u2026[/${e.host.name}]`}return t.selfClosing?`[${t.name}${o}${n} /]`:`[${t.name}${o}${n}]
|
|
2
2
|
Content
|
|
3
|
-
[/${t.name}]`}function
|
|
3
|
+
[/${t.name}]`}function z(e,t){e.replaceChildren();const n=document.createElement("div");n.style.cssText="color:var(--dm-text-muted,#888);font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.25rem;",n.textContent="Shortcode (live)",e.appendChild(n);const o=document.createElement("pre");o.style.cssText="background:var(--dm-code-bg,#000);border:1px solid var(--dm-border,#333);padding:.5rem .65rem;border-radius:3px;font-family:var(--dm-font-mono,monospace);font-size:.75rem;color:var(--dm-code-text,#7c6af7);line-height:1.5;white-space:pre-wrap;word-break:break-all;margin:0;",o.textContent=_(t),e.appendChild(o)}function U(e,t,n){if(e.replaceChildren(),t.editing)return;const o=u(t.activeEffect),l=t.host&&o.hosts.includes(t.host.name),r=document.createElement("div");r.style.cssText="background:var(--dm-background-alt,#15152a);border:1px solid var(--dm-border,#2a2a40);border-radius:4px;padding:.5rem .6rem;";const s=document.createElement("div");if(s.style.cssText="color:var(--dm-text-muted,#888);text-transform:uppercase;font-size:.65rem;letter-spacing:.05em;margin-bottom:.3rem;",s.textContent="Apply as",r.appendChild(s),!l){const c=document.createElement("div");c.style.cssText="color:var(--dm-text-muted,#888);font-size:.75rem;font-style:italic;",t.host?c.textContent=`Inserted as a standalone block (${o.label} cannot be injected into [${t.host.name}]).`:c.textContent="Inserted as a standalone block.",r.appendChild(c),e.appendChild(r),t.scope="standalone";return}const d=document.createElement("div");d.style.cssText="display:flex;gap:.3rem;";function i(c,a){const m=document.createElement("button");return m.type="button",m.style.cssText="flex:1;padding:.35rem;border:1px solid var(--dm-border,#333);border-radius:3px;font-size:.75rem;font-weight:600;cursor:pointer;",t.scope===c?(m.style.background="var(--dm-primary,#4338ca)",m.style.color="var(--dm-primary-text,#fff)",m.style.borderColor="var(--dm-primary,#4338ca)"):(m.style.background="transparent",m.style.color="var(--dm-text-muted,#bbb)"),m.textContent=a,m.addEventListener("click",()=>{t.scope=c,n()}),m}d.appendChild(i("standalone","Standalone block")),d.appendChild(i("inject",`Inject into [${t.host.name}]`)),r.appendChild(d),e.appendChild(r)}let y=0;function A(e){return e.replace(/-([a-z])/g,(t,n)=>n.toUpperCase())}function V(e,t){e.replaceChildren();const n=u(t.activeEffect),o=document.createElement("div");o.style.cssText="display:flex;justify-content:space-between;align-items:center;margin-bottom:.25rem;";const l=document.createElement("div");if(l.style.cssText="color:var(--dm-text-muted,#888);text-transform:uppercase;font-size:.65rem;letter-spacing:.05em;",l.textContent="Live preview",o.appendChild(l),!n.previewable){const i=document.createElement("div");i.style.cssText="background:var(--dm-background-alt,#15152a);border:1px solid var(--dm-border,#2a2a40);border-radius:4px;padding:.6rem;color:var(--dm-text-muted,#888);font-size:.8rem;font-style:italic;text-align:center;",i.textContent="Runs full-page on the published site - no inline preview.",e.appendChild(i);return}const r=document.createElement("button");r.type="button",r.style.cssText="background:transparent;border:1px solid var(--dm-border,#333);color:var(--dm-text-muted,#888);font-size:.65rem;padding:.15rem .4rem;border-radius:2px;cursor:pointer;",q(r,"refresh-cw","Replay",12),o.appendChild(r),e.appendChild(o);const s=document.createElement("div");s.style.cssText="background:var(--dm-background-alt,#1a1a2e);border:1px solid var(--dm-border,#2a2a40);border-radius:4px;padding:1rem;text-align:center;min-height:80px;position:relative;overflow:hidden;",e.appendChild(s);function d(i=!1){x?.destroy(),x=null,y++;const c=y;s.replaceChildren();const a=document.createElement("div");a.style.cssText="background:linear-gradient(135deg,#6366f1,#a855f7);color:#fff;padding:.6rem;border-radius:4px;font-size:.8rem;font-weight:600;",a.textContent="Sample content",s.appendChild(a);const m=window.Domma&&window.Domma.effects;if(!m)return;const f={};for(const p of g(n,t.fieldValues)){const b=t.fieldValues[p.name];b===void 0||b===""||b===null||(f[A(p.name)]=b)}n.name==="scribe"&&(f.loop=O(f.loop??!1),f.actions=[{render:a.textContent,effect:f.effect||"none"}],a.textContent="");try{const p=m[A(n.name)];if(typeof p=="function"){if(c!==y)return;x=p(a,f),i&&x?.resume()}}catch(p){console.warn("Effects preview failed:",p)}}r.addEventListener("click",()=>d(!0)),d()}function W(e,t,n){const o=u(t.activeEffect);e.replaceChildren();const l=document.createElement("h3");l.style.cssText="margin:0;font-size:1rem;color:var(--dm-text,#eee);",l.textContent=o.label,e.appendChild(l);const r=document.createElement("p");r.style.cssText="margin:0;color:var(--dm-text-muted,#999);font-size:.8rem;line-height:1.4;",r.textContent=o.description,e.appendChild(r);const s=document.createElement("div");e.appendChild(s);const d=document.createElement("div");e.appendChild(d);const i=document.createElement("div");e.appendChild(i);const c=document.createElement("div");e.appendChild(c);function a(){U(s,t,a),v(d,t,()=>{z(i,t),V(c,t)}),z(i,t),V(c,t)}a();const m=document.createElement("div");m.style.cssText="display:flex;gap:.5rem;margin-top:auto;padding-top:.75rem;border-top:1px solid var(--dm-border,#2a2a40);";const f=document.createElement("button");f.type="button",f.className="btn btn-ghost",f.textContent="Cancel",f.addEventListener("click",()=>n.close()),m.appendChild(f);const p=document.createElement("button");p.type="button",p.className="btn btn-primary",p.style.flex="2",p.textContent=t.editing?"Update":"Insert effect",p.addEventListener("click",()=>X(t,n)),m.appendChild(p),e.appendChild(m)}function X(e,t){const n=e.textarea,o=_(e);if(e.editing){const l=u(e.editing.name),r=n.value,s=`[/${l.name}]`.length,d=e.editing.openTagEnd,i=e.editing.blockEnd-s,c=r.substring(d,i),a=w(e,l),m=a?" ":"",f=l.selfClosing?`[${l.name}${m}${a} /]`:`[${l.name}${m}${a}]${c}[/${l.name}]`;C(n,e.editing.blockStart,e.editing.blockEnd,f);const p=l.selfClosing?e.editing.blockStart+f.length:e.editing.blockStart+f.indexOf("]")+1;n.setSelectionRange(p,p),t.close();return}if(e.scope==="inject"&&e.host){const l=u(e.activeEffect),r=e.host.attrs,s=l.name,d=[];for(const c of Object.keys(r)){if(c===s||c.startsWith(s+"-"))continue;const a=r[c];d.push(a===""?c:`${c}="${String(a).replace(/"/g,""")}"`)}d.push(s);for(const c of g(l,e.fieldValues)){const a=e.fieldValues[c.name];if(a===void 0||a===""||a===null||a===c.default)continue;const m=c.type==="checkbox"?a?"true":"false":String(a).replace(/"/g,""");d.push(`${s}-${c.name}="${m}"`)}const i=`[${e.host.name} ${d.join(" ")}]`;C(n,e.host.openTagStart,e.host.openTagEnd,i),t.close();return}N(n,o),t.close()}
|
|
@@ -89,7 +89,7 @@ In active development.
|
|
|
89
89
|
[/table]`,"The inner content must be a valid GFM Markdown table. The shortcode adds Domma CSS classes and wraps in a responsive scroll container.")]}),t("Slideover",{intro:"A trigger button that opens a slide-in panel with Markdown content. No plugin required.",rows:[['title="..."',"Panel header text"],['trigger="..."','Button label (default: "Open")'],['size="sm|md|lg"',"Panel width (default: md)"],['position="right|left"',"Slide direction (default: right)"]],examples:[e("Example",`[slideover title="More Info" trigger="Read more" size="md"]
|
|
90
90
|
## Details
|
|
91
91
|
Markdown content here.
|
|
92
|
-
[/slideover]`,"Nested [card] and [grid] shortcodes work inside the slideover body.")]})],b=[t("Embedding a Form",{rows:[['name="..."',"Form slug (required). Also accepted as slug=."],['class="..."',"Extra CSS classes on the wrapper div"],['id="..."',"id attribute on the wrapper div"]],examples:[e("Basic",'[form name="contact" /]',"Forms are managed under Forms in the sidebar."),e("With wrapper styling",'[form name="newsletter" class="mt-4" id="newsletter-form" /]')]}),t("Displaying a Collection",{block:'[collection slug="enquiries" display="table" /]',rows:[["slug","Required. The collection slug."],["display","table (default), cards, or list."],["fields","Comma-separated field keys to show. Defaults to all."],["limit","Maximum number of entries to display."],["sort","Field key to sort by."],["order","asc or desc (default asc)."],["title-field","Field used as the card/list title (cards + list)."],["columns","Grid columns for cards display (2-4, default 3)."],["search","true/false - enable search in table mode (default true)."],["sortable","true/false - enable column sorting in table mode (default true)."],["exportable","true/false - show CSV export button in table mode (default false)."],["page-size","Rows per page in table mode (default 25)."],["empty","Text shown when there are no entries."],["cta","Action slug: enables per-entry CTA buttons."],["cta-label",'CTA button label (default: "Run").'],["cta-icon","CTA button icon name."],["cta-style","CTA button variant (default: primary)."],["cta-confirm","CTA confirmation prompt text."],["class","Extra CSS classes on the wrapper div."],["id","id attribute on the wrapper div."]],outro:"Table display uses Domma Table - search, sort, pagination, column selector, and CSV export are all built in. Cards and lists are static."}),t("View - Pro",{intro:"Renders a Collection with full filtering, pagination, and display options. Requires a Pro MongoDB collection.",rows:[["slug","Required. The collection slug."],["display","table (default), cards, or list."],["limit","Maximum number of entries to display."],["fields","Comma-separated field keys to show."],["title-field","Field used as the card/list title."],["columns","Grid columns for cards display (2-4, default 3)."],["empty","Text shown when there are no entries."],["class","Extra CSS classes on the wrapper div."],["id","id attribute on the wrapper div."]],examples:[e("Table display",'[view slug="products" display="table" limit="50" /]'),e("Cards display",'[view slug="team" display="cards" columns="3" title-field="name" /]')]}),t("CTA - Pro",{intro:"Renders an action button that triggers a Pro Action against an entry. Requires the Pro Actions feature.",rows:[["action","Required. The action slug."],["entry","Required. The entry id to act on."],["style","Button variant (default: primary)."],["icon","Domma icon name for the button."],["size","Button size (sm, lg)."],["confirm","Confirmation prompt text before running."],["label","Self-closing only: button label text."]],examples:[e("Wrapping form",'[cta action="approve" entry="abc123" style="success" confirm="Approve this entry?"]Approve[/cta]'),e("Self-closing",'[cta action="archive" entry="abc123" icon="archive" label="Archive" /]')]})],f=[t("Effects",{intro:"Shortcodes for scroll-triggered animations, counters, typewriter text, and more. Requires the Domma Effects plugin.",rows:[['[reveal animation="fade"]...[/reveal]',"Fade/slide/zoom on scroll"],["[breathe]...[/breathe]","Continuous gentle scale loop"],["[pulse]...[/pulse]","Repeating scale pulse"],["[shake]...[/shake]","One-shot shake"],['[scribe speed="
|
|
92
|
+
[/slideover]`,"Nested [card] and [grid] shortcodes work inside the slideover body.")]})],b=[t("Embedding a Form",{rows:[['name="..."',"Form slug (required). Also accepted as slug=."],['class="..."',"Extra CSS classes on the wrapper div"],['id="..."',"id attribute on the wrapper div"]],examples:[e("Basic",'[form name="contact" /]',"Forms are managed under Forms in the sidebar."),e("With wrapper styling",'[form name="newsletter" class="mt-4" id="newsletter-form" /]')]}),t("Displaying a Collection",{block:'[collection slug="enquiries" display="table" /]',rows:[["slug","Required. The collection slug."],["display","table (default), cards, or list."],["fields","Comma-separated field keys to show. Defaults to all."],["limit","Maximum number of entries to display."],["sort","Field key to sort by."],["order","asc or desc (default asc)."],["title-field","Field used as the card/list title (cards + list)."],["columns","Grid columns for cards display (2-4, default 3)."],["search","true/false - enable search in table mode (default true)."],["sortable","true/false - enable column sorting in table mode (default true)."],["exportable","true/false - show CSV export button in table mode (default false)."],["page-size","Rows per page in table mode (default 25)."],["empty","Text shown when there are no entries."],["cta","Action slug: enables per-entry CTA buttons."],["cta-label",'CTA button label (default: "Run").'],["cta-icon","CTA button icon name."],["cta-style","CTA button variant (default: primary)."],["cta-confirm","CTA confirmation prompt text."],["class","Extra CSS classes on the wrapper div."],["id","id attribute on the wrapper div."]],outro:"Table display uses Domma Table - search, sort, pagination, column selector, and CSV export are all built in. Cards and lists are static."}),t("View - Pro",{intro:"Renders a Collection with full filtering, pagination, and display options. Requires a Pro MongoDB collection.",rows:[["slug","Required. The collection slug."],["display","table (default), cards, or list."],["limit","Maximum number of entries to display."],["fields","Comma-separated field keys to show."],["title-field","Field used as the card/list title."],["columns","Grid columns for cards display (2-4, default 3)."],["empty","Text shown when there are no entries."],["class","Extra CSS classes on the wrapper div."],["id","id attribute on the wrapper div."]],examples:[e("Table display",'[view slug="products" display="table" limit="50" /]'),e("Cards display",'[view slug="team" display="cards" columns="3" title-field="name" /]')]}),t("CTA - Pro",{intro:"Renders an action button that triggers a Pro Action against an entry. Requires the Pro Actions feature.",rows:[["action","Required. The action slug."],["entry","Required. The entry id to act on."],["style","Button variant (default: primary)."],["icon","Domma icon name for the button."],["size","Button size (sm, lg)."],["confirm","Confirmation prompt text before running."],["label","Self-closing only: button label text."]],examples:[e("Wrapping form",'[cta action="approve" entry="abc123" style="success" confirm="Approve this entry?"]Approve[/cta]'),e("Self-closing",'[cta action="archive" entry="abc123" icon="archive" label="Archive" /]')]})],f=[t("Effects",{intro:"Shortcodes for scroll-triggered animations, counters, typewriter text, and more. Requires the Domma Effects plugin.",rows:[['[reveal animation="fade"]...[/reveal]',"Fade/slide/zoom on scroll"],["[breathe]...[/breathe]","Continuous gentle scale loop"],["[pulse]...[/pulse]","Repeating scale pulse"],["[shake]...[/shake]","One-shot shake"],['[scribe mode="word" effect="bounce" speed="140" loop="3" cursor-blink="false" controls="true"]...[/scribe]',"Scribe - characters, words, or sentences; effects, counted loops, cursor and playback settings"],['[scribe loop="true"][render]Text[/render][wait]1500[/wait][undo /][/scribe]',"Typewriter - script mode (sequenced render/wait/undo actions)"],["[scramble]...[/scramble]","Character-scramble reveal"],['[counter to="100" /]',"Animated number counter (self-closing)"],["[ripple]...[/ripple]","Click-triggered ripple"],['[twinkle count="50"]...[/twinkle]',"Particle/star overlay"],['[animate type="fade-in-up"]...[/animate]',"CSS-only animation (no plugin needed)"],['[ambient type="aurora"]...[/ambient]',"CSS-only animated background"],['[firework type="burst" colour="rainbow" /]',"CSS firework (self-closing)"],["[fireworks]...[/fireworks]","Fireworks display container"],['[celebrate theme="auto" /]',"Seasonal canvas celebration (auto-detects date)"],["[christmas /]","Christmas - snowflakes, trees, snowmen, sleigh"],["[halloween /]","Halloween - pumpkins, ghosts, bats, spiders"],["[st-patricks /]","St Patrick's Day - shamrocks, coins, rainbows, leprechaun"],["[valentines /]","Valentine's Day - hearts, roses"],["[guy-fawkes /]","Guy Fawkes - fireworks, sparkles"],["[st-andrews /]","St Andrew's Day - heather, thistles"],["[st-davids /]","St David's Day - daffodils, dragons"],["[st-georges /]","St George's Day - roses, flags"]],examples:[e("Scribe script - looping multi-phrase typewriter",`[scribe loop="true" loop-delay="2000" delete-speed="20"]
|
|
93
93
|
[render]We build things that matter.[/render]
|
|
94
94
|
[wait]1200[/wait]
|
|
95
95
|
[undo all="true" /]
|
|
@@ -98,7 +98,7 @@ Markdown content here.
|
|
|
98
98
|
[undo all="true" /]
|
|
99
99
|
[/scribe]`,'Use [render]...[/render] to type text, [wait]Ms[/wait] to pause, and [undo /] to delete. loop="true" replays the sequence. Only [render], [wait], and [undo] shortcodes are parsed - plain text between actions is ignored.'),e("Christmas",'[christmas intensity="medium" snowmen="off" trees="off" wreaths="off" northStars="off" sleigh="off" train="off" elf="off" robin="off" firework="off" /]',"intensity: light | medium | heavy. Count-based (off disables entirely): snowmen, trees, wreaths, northStars. Probability-based specials (off prevents spawning): sleigh, train, elf, robin, firework. Snowflakes always fall."),e("Halloween",'[halloween intensity="medium" gravestones="off" jackOLanterns="off" spiders="off" scarecrows="off" twinklingStars="off" /]',"intensity: light | medium | heavy. Decoration toggles (off disables): gravestones, jackOLanterns, spiders, scarecrows, twinklingStars. Particles: bats, ghosts, pumpkins (always on). Fixed decorations: haunted-house, cauldron (always present)."),e("St Patrick's Day",'[st-patricks intensity="medium" pots="off" twinklingStars="off" /]',"intensity: light | medium | heavy. Decoration toggles (off disables): pots (pots of gold), twinklingStars. Particles: shamrocks, clover petals, gold coins, sparkles (always on). Fixed decorations: rainbow, harp, moon. Leprechaun appears randomly - more likely at higher intensity."),e("Valentine's Day",'[valentines intensity="medium" garlands="off" butterflies="off" /]',"intensity: light | medium | heavy. Decoration toggles (off disables): garlands (heart garlands), butterflies. Particles: hearts, rose petals, sparkles, lips (always on). Fixed decorations: envelopes (always present). Cupid appears randomly - more likely at higher intensity."),e("Guy Fawkes Night",'[guy-fawkes intensity="medium" bonfires="off" /]',"intensity: light | medium | heavy. Decoration toggles (off disables): bonfires. Particles: embers, fireworks, sparks, rockets, bursts, trails (always on). Fixed decorations: guy-effigy, catherine-wheel, roman-candle, sparkler-bundle, moon. Starts at 25% particle density and builds up gradually."),e("St Andrew's Day",'[st-andrews intensity="medium" thistles="off" twinklingStars="off" /]',"intensity: light | medium | heavy. Decoration toggles (off disables): thistles, twinklingStars. Particles: heather petals, saltire sparkles (always on). Fixed decorations: bagpiper, saltire-flag, tartan-pattern, highland-scene (always present). Bagpiper probability increases with intensity."),e("St David's Day",'[st-davids intensity="medium" daffodilFields="off" twinklingStars="off" /]',"intensity: light | medium | heavy. Decoration toggles (off disables): daffodilFields, twinklingStars. Particles: daffodil petals, spring sparkles (always on). Fixed decorations: welsh-dragon, harp, leek-bundle, flag (always present). Flying dragon appears randomly - more likely at higher intensity."),e("St George's Day",'[st-georges intensity="medium" roses="off" twinklingStars="off" /]',"intensity: light | medium | heavy. Decoration toggles (off disables): roses (English roses), twinklingStars. Particles: rose petals, Tudor roses, oak leaves, sparkles (always on). Fixed decorations: st-georges-cross, dragon, shield, castle (always present). Knight appears randomly - more likely at higher intensity.")],outro:"Enable the Domma Effects plugin to activate these shortcodes on your site."}),t("DConfig - Declarative Behaviour",{intro:"Define click handlers and class toggles without writing JavaScript. Use the DConfig section above or embed inline with [dconfig]...[/dconfig] in the content body. Inline shortcodes win on selector conflict.",examples:[e("Toggle a class on click",'{ "#my-btn": { "events": { "click": { "target": "#panel", "toggleClass": "hidden" } } } }','Selector keys use standard CSS selectors. "target" is optional - defaults to the element itself.'),e("Inline shortcode syntax",`[dconfig]
|
|
100
100
|
{ "#my-btn": { "events": { "click": { "target": "#panel", "toggleClass": "hidden" } } } }
|
|
101
|
-
[/dconfig]`)]}),t("CSS Editor",{intro:"The toolbar's </> button (left of the Split View icon) swaps the left pane between Markdown and Custom CSS. Edits are saved together with the page - one Save, one toast.",rows:[["</> button","Toggle between Markdown editor and Custom CSS editor"],["Split / Write / Preview","Standard view mode buttons to the right of </>"],["Save","Saves both page content and CSS in a single operation"]]}),t("Colour Picker",{intro:"Insert \u2192 Colour Picker opens a centred colour picker. Pick a colour, then use Copy to copy the hex code to the clipboard or Insert to drop it at the cursor. Click outside the panel to dismiss."})];export const REFERENCE=[{id:"basics",label:"Basics",sections:m},{id:"layout",label:"Layout",sections:h},{id:"components",label:"Components",sections:g},{id:"data",label:"Data",sections:b},{id:"advanced",label:"Advanced",sections:f}];const
|
|
101
|
+
[/dconfig]`)]}),t("CSS Editor",{intro:"The toolbar's </> button (left of the Split View icon) swaps the left pane between Markdown and Custom CSS. Edits are saved together with the page - one Save, one toast.",rows:[["</> button","Toggle between Markdown editor and Custom CSS editor"],["Split / Write / Preview","Standard view mode buttons to the right of </>"],["Save","Saves both page content and CSS in a single operation"]]}),t("Colour Picker",{intro:"Insert \u2192 Colour Picker opens a centred colour picker. Pick a colour, then use Copy to copy the hex code to the clipboard or Insert to drop it at the cursor. Click outside the panel to dismiss."})];export const REFERENCE=[{id:"basics",label:"Basics",sections:m},{id:"layout",label:"Layout",sections:h},{id:"components",label:"Components",sections:g},{id:"data",label:"Data",sections:b},{id:"advanced",label:"Advanced",sections:f}];const w=`
|
|
102
102
|
<div class="per">
|
|
103
103
|
<div class="per-tabs" role="tablist" data-each="tabs key=id">
|
|
104
104
|
<button type="button" class="per-tab" role="tab" data-on-click="$root.show(id)"
|
|
@@ -164,4 +164,4 @@ pre.per-block { padding-right: .75rem; margin-bottom: .5rem; }
|
|
|
164
164
|
.per-copy { position: absolute; top: .3rem; right: .3rem; background: none; border: none; cursor: pointer; opacity: .45; padding: .15rem;
|
|
165
165
|
line-height: 1; color: inherit; }
|
|
166
166
|
.per-copy:hover, .per-copy:focus-visible { opacity: 1; }
|
|
167
|
-
</style>`;async function
|
|
167
|
+
</style>`;async function y(o){try{return await navigator.clipboard.writeText(o),!0}catch{const a=document.createElement("textarea");a.value=o,a.style.cssText="position:fixed;opacity:0;",document.body.appendChild(a),a.select();let n=!1;try{n=document.execCommand("copy")}catch{}return a.remove(),n}}export function openEditorReference(){const o=E.slideover({title:"Editor Reference",size:"md",position:"right"}),a=document.createElement("div");a.innerHTML=w;const n=M.observable("basics"),s=M.applyBindings({tabs:REFERENCE,tab:n,show:r=>{n.value=r},copy:async r=>{const i=await y(r);E.toast(i?"Copied!":"Could not copy - select the code and copy it.",{type:i?"success":"warning",duration:1200})}},a);o.element.appendChild(a);const l=M.effect(()=>{n.value,requestAnimationFrame(()=>I.scan(a))});p(o,()=>{try{l()}catch{}try{s.dispose()}catch{}}),o.open()}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{insertAtCursor as re}from"./markdown-toolbar.js";import{SCRIBE_FIELDS as ae,scribeDefaults as se,scribeLoop as ce,stateToScribeActions as ie,buildScribeShortcode as le}from"./scribe-model.js";const de=20,Q={render:{label:"Render",icon:"edit-3",color:"var(--dm-info,#3b82f6)"},wait:{label:"Wait",icon:"clock",color:"var(--dm-warning,#f59e0b)"},undo:{label:"Undo",icon:"corner-up-left",color:"var(--dm-secondary,#a855f7)"},redraw:{label:"Redraw",icon:"refresh-cw",color:"var(--dm-success,#22c55e)"}},L="padding:.4rem .6rem;background:var(--dm-input-bg,#1a1a1a);border:1px solid var(--dm-border,#333);border-radius:4px;color:var(--dm-text,#eee);font-size:.9em;box-sizing:border-box;width:100%;",pe="display:block;font-size:.7rem;font-weight:600;color:var(--dm-text-muted,#aaa);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.25rem;",ue="display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.85em;";export function openScribeComposer(s){const r=me(),n=[];let t=null,p=null;function c(){clearTimeout(t),p?.destroy(),p=null}const h=E.slideover({title:"Scribe Composer",size:"lg",position:"right",onClose:c});Ce();const b=document.createElement("div");b.className="scribe-composer",b.style.cssText="display:flex;flex-direction:column;height:100%;";const y=document.createElement("div");y.style.cssText="padding:1rem 1.25rem;border-bottom:1px solid var(--dm-border,#333);background:var(--dm-background-alt,#0f0f17);";const k=document.createElement("div");k.style.cssText="min-height:3.5rem;padding:.85rem 1rem;background:var(--dm-surface,#1a1a1a);border:1px dashed var(--dm-border,#333);border-radius:6px;font-size:1.25rem;line-height:1.5;overflow-wrap:anywhere;",y.appendChild(k);const N=document.createElement("div");N.style.cssText="display:flex;gap:.5rem;margin-top:.75rem;align-items:center;";const Y=V("rotate-cw","Replay"),q=V("code","Show code"),B=document.createElement("span");B.style.cssText="font-size:.8em;color:var(--dm-text-muted,#aaa);flex:1;text-align:right;margin-right:.5rem;",N.appendChild(Y),N.appendChild(B),N.appendChild(q),y.appendChild(N);const M=document.createElement("pre");M.style.cssText="display:none;margin:.75rem 0 0;padding:.6rem .75rem;background:var(--dm-surface,#0a0a0a);border:1px solid var(--dm-border,#333);border-radius:4px;font-family:monospace;font-size:.78em;white-space:pre-wrap;word-break:break-all;color:var(--dm-text-muted,#bbb);max-height:200px;overflow:auto;",y.appendChild(M),q.addEventListener("click",()=>{const e=M.style.display!=="none";M.style.display=e?"none":"block"}),Y.addEventListener("click",()=>{J(),p?.resume()}),b.appendChild(y);const R=document.createElement("div");R.style.cssText="display:flex;flex:1;min-height:0;overflow:hidden;";const F=fe(r,()=>{v(),x()});R.appendChild(F.el);const z=document.createElement("main");z.style.cssText="flex:1;overflow-y:auto;padding:1rem 1.25rem;display:flex;flex-direction:column;";const P=document.createElement("h4");P.textContent="Actions",P.style.cssText="margin:0 0 .75rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-text-muted,#aaa);",z.appendChild(P);const A=document.createElement("div");A.style.cssText="display:flex;flex-direction:column;gap:.6rem;",z.appendChild(A);const U=document.createElement("div");U.style.cssText="display:flex;gap:.4rem;margin-top:.9rem;flex-wrap:wrap;",Object.entries(Q).forEach(([e,a])=>{const i=document.createElement("button");i.type="button",i.style.cssText=`padding:.4rem .8rem;background:transparent;border:1px dashed color-mix(in srgb, ${a.color} 40%, transparent);border-radius:4px;color:${a.color};cursor:pointer;font-size:.85em;display:inline-flex;align-items:center;gap:.35rem;`;const l=document.createElement("span");l.setAttribute("data-icon",a.icon),i.appendChild(l),i.appendChild(document.createTextNode(` + ${a.label}`)),i.addEventListener("click",()=>{v(),r.actions.push(he(e)),$(),x()}),U.appendChild(i)}),z.appendChild(U),R.appendChild(z),b.appendChild(R);const T=document.createElement("div");T.style.cssText="display:flex;padding:.75rem 1rem;border-top:1px solid var(--dm-border,#333);background:var(--dm-background-alt,#0f0f17);gap:.5rem;align-items:center;";const S=document.createElement("button");S.type="button",S.className="btn btn-ghost btn-sm",S.textContent="Undo (Ctrl+Z)",S.addEventListener("click",()=>H()),T.appendChild(S);const D=document.createElement("span");D.style.cssText="font-size:.75em;color:var(--dm-text-muted,#aaa);",T.appendChild(D);const G=document.createElement("div");G.style.flex="1",T.appendChild(G);const W=document.createElement("button");W.type="button",W.className="btn btn-ghost",W.textContent="Cancel",W.addEventListener("click",()=>h.close()),T.appendChild(W);const j=document.createElement("button");j.type="button",j.className="btn btn-primary",j.textContent="Insert Scribe",j.addEventListener("click",()=>{re(s,Z()),h.close()}),T.appendChild(j),b.appendChild(T),h.setContent(b),b.addEventListener("keydown",e=>{const a=(e.key||"").toLowerCase();(e.ctrlKey||e.metaKey)&&a==="z"&&!e.shiftKey&&n.length>0&&(e.preventDefault(),e.stopPropagation(),H())}),$(),x(),O(),requestAnimationFrame(()=>{Domma.icons.scan()}),h.open();function v(){n.push(JSON.stringify(r)),n.length>de&&n.shift(),O()}function H(){if(n.length===0){E.toast("Nothing to undo",{type:"info",duration:700});return}const e=JSON.parse(n.pop());Object.assign(r.globals,e.globals),r.actions.length=0,e.actions.forEach(a=>r.actions.push(a)),F.sync(),$(),x(),O(),E.toast("Undone",{type:"info",duration:500})}function O(){D.textContent=n.length===0?"":`${n.length} step${n.length===1?"":"s"} stored`,S.disabled=n.length===0,S.style.opacity=n.length===0?".4":"1"}function x(e=150){clearTimeout(t),t=setTimeout(J,e)}function J(){c(),ee(k),k.style.color="",k.style.fontStyle="",M.textContent=Z();const e=r.actions.filter(o=>o.type==="render"||o.type==="redraw"?(o.text||"").length>0:!0);if(e.length===0){k.textContent="(add an action to preview)",k.style.color="var(--dm-text-muted,#666)",k.style.fontStyle="italic",B.textContent="";return}const a=document.createElement("span");a.className="dm-fx-scribe",k.appendChild(a);const i=r.globals,{effect:l,controls:g,...w}=i;w.actions=ie(e,l);try{p=E.scribe(a,w),B.textContent=i.autoStart?`${e.length} action${e.length===1?"":"s"}`:"Press Replay to start"}catch{B.textContent="Preview error"}}function $(){if(ee(A),r.actions.length===0){const e=document.createElement("p");e.textContent="No actions yet - add one from the buttons below.",e.style.cssText="font-size:.85em;color:var(--dm-text-muted,#888);font-style:italic;margin:.5rem 0;",A.appendChild(e);return}r.actions.forEach((e,a)=>{A.appendChild(ne(e,a))}),requestAnimationFrame(()=>Domma.icons.scan())}function ne(e,a){const i=Q[e.type],l=document.createElement("div");l.style.cssText=`border:1px solid var(--dm-border,#333);border-left:3px solid ${i.color};border-radius:4px;padding:.6rem .75rem;background:var(--dm-surface,#15151a);`;const g=document.createElement("div");g.style.cssText="display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;";const w=document.createElement("span");w.style.cssText=`display:inline-flex;align-items:center;gap:.3rem;font-size:.72rem;font-weight:700;color:${i.color};text-transform:uppercase;letter-spacing:.06em;`;const o=document.createElement("span");o.setAttribute("data-icon",i.icon),w.appendChild(o),w.appendChild(document.createTextNode(i.label)),g.appendChild(w);const m=document.createElement("span");m.textContent=`#${a+1}`,m.style.cssText="font-size:.7rem;color:var(--dm-text-muted,#888);",g.appendChild(m);const u=document.createElement("div");u.style.flex="1",g.appendChild(u);const d=K("chevron-up","Move up");a===0&&(d.disabled=!0,d.style.opacity=".3"),d.addEventListener("click",()=>X(a,-1)),g.appendChild(d);const f=K("chevron-down","Move down");a===r.actions.length-1&&(f.disabled=!0,f.style.opacity=".3"),f.addEventListener("click",()=>X(a,1)),g.appendChild(f);const C=K("x","Remove");return C.addEventListener("click",()=>{v(),r.actions.splice(a,1),$(),x()}),g.appendChild(C),l.appendChild(g),l.appendChild(oe(e)),l}function X(e,a){const i=e+a;if(i<0||i>=r.actions.length)return;v();const[l]=r.actions.splice(e,1);r.actions.splice(i,0,l),$(),x()}function oe(e){const a=document.createElement("div");if(a.style.cssText="display:flex;flex-direction:column;gap:.5rem;",e.type==="render"||e.type==="redraw"){const o=document.createElement("textarea");o.value=e.text||"",o.placeholder=e.type==="redraw"?"New text - clears everything first, then types this":"Text to type out",o.rows=2,o.style.cssText=L+"resize:vertical;font-family:inherit;min-height:2.2rem;";let m=o.value;o.addEventListener("input",()=>{e.text=o.value,x()}),o.addEventListener("blur",()=>{o.value!==m&&(v(),m=o.value)}),a.appendChild(o);const u=document.createElement("div");u.style.cssText="display:flex;align-items:center;gap:.5rem;font-size:.8em;";const d=document.createElement("label");d.textContent="Effect:",d.style.color="var(--dm-text-muted,#aaa)";const f=document.createElement("select");return f.style.cssText=L+"width:auto;padding:.25rem .4rem;",["inherit","none","fade","bounce","glow"].forEach(C=>{const _=document.createElement("option");_.value=C,_.textContent=C.charAt(0).toUpperCase()+C.slice(1),f.appendChild(_)}),f.value=e.effect||"none",f.addEventListener("change",()=>{v(),e.effect=f.value,x()}),u.appendChild(d),u.appendChild(f),a.appendChild(u),a}if(e.type==="wait"){const o=document.createElement("div");o.style.cssText="display:flex;gap:.4rem;align-items:center;";const m=document.createElement("input");m.type="number",m.min="0",m.value=String(e.duration??1e3),m.style.cssText=L+"flex:1;",m.addEventListener("input",()=>{const d=parseInt(m.value,10);!Number.isNaN(d)&&d>=0&&(e.duration=d,x())}),m.addEventListener("blur",()=>v()),o.appendChild(m);const u=document.createElement("select");return u.style.cssText=L+"width:auto;",[["ms","ms"],["s","seconds"]].forEach(([d,f])=>{const C=document.createElement("option");C.value=d,C.textContent=f,u.appendChild(C)}),u.value=e.unit||"ms",u.addEventListener("change",()=>{v(),e.unit=u.value,x()}),o.appendChild(u),a.appendChild(o),a}const i=document.createElement("div");i.style.cssText="display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;font-size:.85em;";const l=document.createElement("input");l.type="number",l.min="1",l.value=String(e.count||5),l.style.cssText=L+"width:5rem;",l.addEventListener("input",()=>{const o=parseInt(l.value,10);!Number.isNaN(o)&&o>0&&(e.count=o,x())}),l.addEventListener("blur",()=>v());const g=`undo-mode-${Math.random().toString(36).slice(2)}`;return[["last","Last render"],["all","All text"],["count","Exactly N units"]].forEach(([o,m])=>{const u=document.createElement("label");u.style.cssText="display:inline-flex;align-items:center;gap:.3rem;cursor:pointer;";const d=document.createElement("input");d.type="radio",d.name=g,d.value=o,d.checked=(e.mode||"last")===o,d.addEventListener("change",()=>{d.checked&&(v(),e.mode=o,l.style.display=o==="count"?"":"none",x())}),u.appendChild(d),u.appendChild(document.createTextNode(m)),i.appendChild(u),o==="count"&&(i.appendChild(l),l.style.display=(e.mode||"last")==="count"?"":"none")}),a.appendChild(i),a}function Z(){return le(r.globals,r.actions)}}function me(){return{globals:se(),actions:[{type:"render",text:"We build things that matter.",effect:"inherit"},{type:"wait",duration:1500,unit:"ms"},{type:"redraw",text:"We create solutions that last.",effect:"inherit"},{type:"wait",duration:1500,unit:"ms"}]}}function he(s){switch(s){case"render":return{type:"render",text:"",effect:"inherit"};case"wait":return{type:"wait",duration:1e3,unit:"ms"};case"undo":return{type:"undo",mode:"last",count:5};case"redraw":return{type:"redraw",text:"",effect:"inherit"}}return{type:"render",text:"",effect:"inherit"}}function fe(s,r){const n=document.createElement("aside");n.style.cssText="width:240px;flex-shrink:0;padding:1rem 1.25rem;border-right:1px solid var(--dm-border,#333);overflow-y:auto;display:flex;flex-direction:column;gap:.75rem;background:var(--dm-background-alt,#0c0c12);";const t=document.createElement("h4");t.textContent="Global settings",t.style.cssText="margin:0 0 .25rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-text-muted,#aaa);",n.appendChild(t);const p=ae.map(c=>{const h=y=>{s.globals[c.key]=c.key==="loop"?ce(y):y,r()};let b;if(c.type==="checkbox"){const y=ve(s.globals[c.key],h,c.label);n.appendChild(y.wrap),b=y.input}else b=c.type==="select"?ge(c.options,s.globals[c.key],h):c.type==="number"?xe(s.globals[c.key],h,c.min):ye(s.globals[c.key],"",h),n.appendChild(be(c.label,b));return{field:c,input:b}});return{el:n,sync(){p.forEach(({field:c,input:h})=>{c.type==="checkbox"?h.checked=s.globals[c.key]:h.value=String(s.globals[c.key])})}}}function be(s,r){const n=document.createElement("div"),t=document.createElement("label");return t.style.cssText=pe,t.textContent=s,n.appendChild(t),n.appendChild(r),n}function xe(s,r,n=1){const t=document.createElement("input");return t.type="number",t.min=String(n),t.value=String(s),t.style.cssText=L,t.addEventListener("input",()=>{const p=Number(t.value);!Number.isNaN(p)&&p>=n&&r(p)}),t}function ye(s,r,n){const t=document.createElement("input");return t.type="text",t.value=s,t.placeholder=r,t.style.cssText=L,t.addEventListener("input",()=>n(t.value)),t}function ge(s,r,n){const t=document.createElement("select");return t.style.cssText=L,s.forEach(([p,c])=>{const h=document.createElement("option");h.value=p,h.textContent=c,t.appendChild(h)}),t.value=r,t.addEventListener("change",()=>n(t.value)),t}function ve(s,r,n){const t=document.createElement("label");t.style.cssText=ue;const p=document.createElement("input");return p.type="checkbox",p.checked=s,p.addEventListener("change",()=>r(p.checked)),t.appendChild(p),t.appendChild(document.createTextNode(n)),{wrap:t,input:p}}function V(s,r){const n=document.createElement("button");n.type="button",n.className="btn btn-ghost btn-sm",n.style.cssText="display:inline-flex;align-items:center;gap:.35rem;";const t=document.createElement("span");return t.setAttribute("data-icon",s),n.appendChild(t),n.appendChild(document.createTextNode(r)),n}function K(s,r){const n=document.createElement("button");n.type="button",n.title=r,n.style.cssText="padding:.25rem .4rem;background:transparent;border:1px solid var(--dm-border,#333);border-radius:3px;color:var(--dm-text-muted,#aaa);cursor:pointer;display:inline-flex;align-items:center;";const t=document.createElement("span");return t.setAttribute("data-icon",s),n.appendChild(t),n}function ee(s){for(;s.firstChild;)s.removeChild(s.firstChild)}function we(s){return String(s).replace(/&/g,"&").replace(/"/g,""")}let te=!1;function Ce(){te||(te=!0,I.register("edit-3",{viewBox:"0 0 24 24",paths:["M12 20h9","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("clock",{viewBox:"0 0 24 24",paths:["M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z","M12 6v6l4 2"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("corner-up-left",{viewBox:"0 0 24 24",paths:["M9 14 4 9l5-5","M20 20v-7a4 4 0 0 0-4-4H4"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("refresh-cw",{viewBox:"0 0 24 24",paths:["M23 4v6h-6","M1 20v-6h6","M3.51 9a9 9 0 0 1 14.85-3.36L23 10","M20.49 15a9 9 0 0 1-14.85 3.36L1 14"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("rotate-cw",{viewBox:"0 0 24 24",paths:["M23 4v6h-6","M20.49 15a9 9 0 1 1-2.12-9.36L23 10"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("code",{viewBox:"0 0 24 24",paths:["M16 18l6-6-6-6","M8 6l-6 6 6 6"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("chevron-up",{viewBox:"0 0 24 24",path:"M18 15l-6-6-6 6",stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("chevron-down",{viewBox:"0 0 24 24",path:"M6 9l6 6 6-6",stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("x",{viewBox:"0 0 24 24",paths:["M18 6L6 18","M6 6l12 12"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}))}
|
|
1
|
+
import{insertAtCursor as re}from"./markdown-toolbar.js";import{SCRIBE_FIELDS as ae,scribeDefaults as se,scribeLoop as ce,stateToScribeActions as ie,buildScribeShortcode as le}from"./scribe-model.js";const de=20,Q={render:{label:"Render",icon:"edit-3",color:"var(--dm-info,#3b82f6)"},wait:{label:"Wait",icon:"clock",color:"var(--dm-warning,#f59e0b)"},undo:{label:"Undo",icon:"corner-up-left",color:"var(--dm-secondary,#a855f7)"},redraw:{label:"Redraw",icon:"refresh-cw",color:"var(--dm-success,#22c55e)"}},L="padding:.4rem .6rem;background:var(--dm-input-bg,#1a1a1a);border:1px solid var(--dm-border,#333);border-radius:4px;color:var(--dm-text,#eee);font-size:.9em;box-sizing:border-box;width:100%;",pe="display:block;font-size:.7rem;font-weight:600;color:var(--dm-text-muted,#aaa);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.25rem;",ue="display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.85em;";export function openScribeComposer(s){const r=me(),n=[];let t=null,p=null;function c(){clearTimeout(t),p?.destroy(),p=null}const h=E.slideover({title:"Scribe Composer",size:"lg",position:"right",onClose:c});Ce();const b=document.createElement("div");b.className="scribe-composer",b.style.cssText="display:flex;flex-direction:column;height:100%;";const y=document.createElement("div");y.style.cssText="padding:1rem 1.25rem;border-bottom:1px solid var(--dm-border,#333);background:var(--dm-background-alt,#0f0f17);";const k=document.createElement("div");k.style.cssText="min-height:3.5rem;padding:.85rem 1rem;background:var(--dm-surface,#1a1a1a);border:1px dashed var(--dm-border,#333);border-radius:6px;font-size:1.25rem;line-height:1.5;overflow-wrap:anywhere;",y.appendChild(k);const B=document.createElement("div");B.style.cssText="display:flex;gap:.5rem;margin-top:.75rem;align-items:center;";const Y=V("rotate-cw","Replay"),q=V("code","Show code"),N=document.createElement("span");N.style.cssText="font-size:.8em;color:var(--dm-text-muted,#aaa);flex:1;text-align:right;margin-right:.5rem;",B.appendChild(Y),B.appendChild(N),B.appendChild(q),y.appendChild(B);const M=document.createElement("pre");M.style.cssText="display:none;margin:.75rem 0 0;padding:.6rem .75rem;background:var(--dm-surface,#0a0a0a);border:1px solid var(--dm-border,#333);border-radius:4px;font-family:monospace;font-size:.78em;white-space:pre-wrap;word-break:break-all;color:var(--dm-text-muted,#bbb);max-height:200px;overflow:auto;",y.appendChild(M),q.addEventListener("click",()=>{const e=M.style.display!=="none";M.style.display=e?"none":"block"}),Y.addEventListener("click",()=>{J(),p?.resume(),p&&(N.textContent="Playing preview")}),b.appendChild(y);const R=document.createElement("div");R.style.cssText="display:flex;flex:1;min-height:0;overflow:hidden;";const F=fe(r,()=>{C(),x()});R.appendChild(F.el);const z=document.createElement("main");z.style.cssText="flex:1;overflow-y:auto;padding:1rem 1.25rem;display:flex;flex-direction:column;";const D=document.createElement("h4");D.textContent="Actions",D.style.cssText="margin:0 0 .75rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-text-muted,#aaa);",z.appendChild(D);const A=document.createElement("div");A.style.cssText="display:flex;flex-direction:column;gap:.6rem;",z.appendChild(A);const P=document.createElement("div");P.style.cssText="display:flex;gap:.4rem;margin-top:.9rem;flex-wrap:wrap;",Object.entries(Q).forEach(([e,a])=>{const i=document.createElement("button");i.type="button",i.style.cssText=`padding:.4rem .8rem;background:transparent;border:1px dashed color-mix(in srgb, ${a.color} 40%, transparent);border-radius:4px;color:${a.color};cursor:pointer;font-size:.85em;display:inline-flex;align-items:center;gap:.35rem;`;const l=document.createElement("span");l.setAttribute("data-icon",a.icon),i.appendChild(l),i.appendChild(document.createTextNode(` + ${a.label}`)),i.addEventListener("click",()=>{C(),r.actions.push(he(e)),$(),x()}),P.appendChild(i)}),z.appendChild(P),R.appendChild(z),b.appendChild(R);const T=document.createElement("div");T.style.cssText="display:flex;padding:.75rem 1rem;border-top:1px solid var(--dm-border,#333);background:var(--dm-background-alt,#0f0f17);gap:.5rem;align-items:center;";const S=document.createElement("button");S.type="button",S.className="btn btn-ghost btn-sm",S.textContent="Undo (Ctrl+Z)",S.addEventListener("click",()=>H()),T.appendChild(S);const U=document.createElement("span");U.style.cssText="font-size:.75em;color:var(--dm-text-muted,#aaa);",T.appendChild(U);const G=document.createElement("div");G.style.flex="1",T.appendChild(G);const W=document.createElement("button");W.type="button",W.className="btn btn-ghost",W.textContent="Cancel",W.addEventListener("click",()=>h.close()),T.appendChild(W);const j=document.createElement("button");j.type="button",j.className="btn btn-primary",j.textContent="Insert Scribe",j.addEventListener("click",()=>{re(s,Z()),h.close()}),T.appendChild(j),b.appendChild(T),h.setContent(b),b.addEventListener("keydown",e=>{const a=(e.key||"").toLowerCase();(e.ctrlKey||e.metaKey)&&a==="z"&&!e.shiftKey&&n.length>0&&(e.preventDefault(),e.stopPropagation(),H())}),$(),x(),O(),requestAnimationFrame(()=>{Domma.icons.scan()}),h.open();function C(){n.push(JSON.stringify(r)),n.length>de&&n.shift(),O()}function H(){if(n.length===0){E.toast("Nothing to undo",{type:"info",duration:700});return}const e=JSON.parse(n.pop());Object.assign(r.globals,e.globals),r.actions.length=0,e.actions.forEach(a=>r.actions.push(a)),F.sync(),$(),x(),O(),E.toast("Undone",{type:"info",duration:500})}function O(){U.textContent=n.length===0?"":`${n.length} step${n.length===1?"":"s"} stored`,S.disabled=n.length===0,S.style.opacity=n.length===0?".4":"1"}function x(e=150){clearTimeout(t),t=setTimeout(J,e)}function J(){c(),ee(k),k.style.color="",k.style.fontStyle="",M.textContent=Z();const e=r.actions.filter(o=>o.type==="render"||o.type==="redraw"?(o.text||"").length>0:!0);if(e.length===0){k.textContent="(add an action to preview)",k.style.color="var(--dm-text-muted,#666)",k.style.fontStyle="italic",N.textContent="";return}const a=document.createElement("span");a.className="dm-fx-scribe",k.appendChild(a);const i=r.globals,{effect:l,controls:g,...w}=i;w.actions=ie(e,l);try{p=Domma.effects.scribe(a,w),N.textContent=i.autoStart?`${e.length} action${e.length===1?"":"s"}`:"Press Replay to start"}catch{N.textContent="Preview error"}}function $(){if(ee(A),r.actions.length===0){const e=document.createElement("p");e.textContent="No actions yet - add one from the buttons below.",e.style.cssText="font-size:.85em;color:var(--dm-text-muted,#888);font-style:italic;margin:.5rem 0;",A.appendChild(e);return}r.actions.forEach((e,a)=>{A.appendChild(ne(e,a))}),requestAnimationFrame(()=>Domma.icons.scan())}function ne(e,a){const i=Q[e.type],l=document.createElement("div");l.style.cssText=`border:1px solid var(--dm-border,#333);border-left:3px solid ${i.color};border-radius:4px;padding:.6rem .75rem;background:var(--dm-surface,#15151a);`;const g=document.createElement("div");g.style.cssText="display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;";const w=document.createElement("span");w.style.cssText=`display:inline-flex;align-items:center;gap:.3rem;font-size:.72rem;font-weight:700;color:${i.color};text-transform:uppercase;letter-spacing:.06em;`;const o=document.createElement("span");o.setAttribute("data-icon",i.icon),w.appendChild(o),w.appendChild(document.createTextNode(i.label)),g.appendChild(w);const m=document.createElement("span");m.textContent=`#${a+1}`,m.style.cssText="font-size:.7rem;color:var(--dm-text-muted,#888);",g.appendChild(m);const u=document.createElement("div");u.style.flex="1",g.appendChild(u);const d=K("chevron-up","Move up");a===0&&(d.disabled=!0,d.style.opacity=".3"),d.addEventListener("click",()=>X(a,-1)),g.appendChild(d);const f=K("chevron-down","Move down");a===r.actions.length-1&&(f.disabled=!0,f.style.opacity=".3"),f.addEventListener("click",()=>X(a,1)),g.appendChild(f);const v=K("x","Remove");return v.addEventListener("click",()=>{C(),r.actions.splice(a,1),$(),x()}),g.appendChild(v),l.appendChild(g),l.appendChild(oe(e)),l}function X(e,a){const i=e+a;if(i<0||i>=r.actions.length)return;C();const[l]=r.actions.splice(e,1);r.actions.splice(i,0,l),$(),x()}function oe(e){const a=document.createElement("div");if(a.style.cssText="display:flex;flex-direction:column;gap:.5rem;",e.type==="render"||e.type==="redraw"){const o=document.createElement("textarea");o.value=e.text||"",o.placeholder=e.type==="redraw"?"New text - clears everything first, then types this":"Text to type out",o.rows=2,o.style.cssText=L+"resize:vertical;font-family:inherit;min-height:2.2rem;";let m=o.value;o.addEventListener("input",()=>{e.text=o.value,x()}),o.addEventListener("blur",()=>{o.value!==m&&(C(),m=o.value)}),a.appendChild(o);const u=document.createElement("div");u.style.cssText="display:flex;align-items:center;gap:.5rem;font-size:.8em;";const d=document.createElement("label");d.textContent="Effect:",d.style.color="var(--dm-text-muted,#aaa)";const f=document.createElement("select");return f.style.cssText=L+"width:auto;padding:.25rem .4rem;",["inherit","none","fade","bounce","glow"].forEach(v=>{const _=document.createElement("option");_.value=v,_.textContent=v==="inherit"?"Default effect":v.charAt(0).toUpperCase()+v.slice(1),f.appendChild(_)}),f.value=e.effect||"none",f.addEventListener("change",()=>{C(),e.effect=f.value,x()}),u.appendChild(d),u.appendChild(f),a.appendChild(u),a}if(e.type==="wait"){const o=document.createElement("div");o.style.cssText="display:flex;gap:.4rem;align-items:center;";const m=document.createElement("input");m.type="number",m.min="0",m.step="any",m.value=String(e.duration??1e3),m.style.cssText=L+"flex:1;",m.addEventListener("input",()=>{const d=Number(m.value);!Number.isNaN(d)&&d>=0&&(e.duration=d,x())}),m.addEventListener("blur",()=>C()),o.appendChild(m);const u=document.createElement("select");return u.style.cssText=L+"width:auto;",[["ms","ms"],["s","seconds"]].forEach(([d,f])=>{const v=document.createElement("option");v.value=d,v.textContent=f,u.appendChild(v)}),u.value=e.unit||"ms",u.addEventListener("change",()=>{C(),e.unit=u.value,x()}),o.appendChild(u),a.appendChild(o),a}const i=document.createElement("div");i.style.cssText="display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;font-size:.85em;";const l=document.createElement("input");l.type="number",l.min="1",l.value=String(e.count||5),l.style.cssText=L+"width:5rem;",l.addEventListener("input",()=>{const o=parseInt(l.value,10);!Number.isNaN(o)&&o>0&&(e.count=o,x())}),l.addEventListener("blur",()=>C());const g=`undo-mode-${Math.random().toString(36).slice(2)}`;return[["last","Last render"],["all","All text"],["count","Exactly N units"]].forEach(([o,m])=>{const u=document.createElement("label");u.style.cssText="display:inline-flex;align-items:center;gap:.3rem;cursor:pointer;";const d=document.createElement("input");d.type="radio",d.name=g,d.value=o,d.checked=(e.mode||"last")===o,d.addEventListener("change",()=>{d.checked&&(C(),e.mode=o,l.style.display=o==="count"?"":"none",x())}),u.appendChild(d),u.appendChild(document.createTextNode(m)),i.appendChild(u),o==="count"&&(i.appendChild(l),l.style.display=(e.mode||"last")==="count"?"":"none")}),a.appendChild(i),a}function Z(){return le(r.globals,r.actions)}}function me(){return{globals:se(),actions:[{type:"render",text:"We build things that matter.",effect:"inherit"},{type:"wait",duration:1500,unit:"ms"},{type:"redraw",text:"We create solutions that last.",effect:"inherit"},{type:"wait",duration:1500,unit:"ms"}]}}function he(s){switch(s){case"render":return{type:"render",text:"",effect:"inherit"};case"wait":return{type:"wait",duration:1e3,unit:"ms"};case"undo":return{type:"undo",mode:"last",count:5};case"redraw":return{type:"redraw",text:"",effect:"inherit"}}return{type:"render",text:"",effect:"inherit"}}function fe(s,r){const n=document.createElement("aside");n.style.cssText="width:240px;flex-shrink:0;padding:1rem 1.25rem;border-right:1px solid var(--dm-border,#333);overflow-y:auto;display:flex;flex-direction:column;gap:.75rem;background:var(--dm-background-alt,#0c0c12);";const t=document.createElement("h4");t.textContent="Global settings",t.style.cssText="margin:0 0 .25rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-text-muted,#aaa);",n.appendChild(t);const p=ae.map(c=>{const h=y=>{r(),s.globals[c.key]=c.key==="loop"?ce(y):y};let b;if(c.type==="checkbox"){const y=ve(s.globals[c.key],h,c.label);n.appendChild(y.wrap),b=y.input}else b=c.type==="select"?ge(c.options,s.globals[c.key],h):c.type==="number"?xe(s.globals[c.key],h,c.min):ye(s.globals[c.key],"",h),n.appendChild(be(c.label,b));return{field:c,input:b}});return{el:n,sync(){p.forEach(({field:c,input:h})=>{c.type==="checkbox"?h.checked=s.globals[c.key]:h.value=String(s.globals[c.key])})}}}function be(s,r){const n=document.createElement("div"),t=document.createElement("label");return t.style.cssText=pe,t.textContent=s,n.appendChild(t),n.appendChild(r),n}function xe(s,r,n=1){const t=document.createElement("input");return t.type="number",t.min=String(n),t.value=String(s),t.style.cssText=L,t.addEventListener("input",()=>{const p=Number(t.value);!Number.isNaN(p)&&p>=n&&r(p)}),t}function ye(s,r,n){const t=document.createElement("input");return t.type="text",t.value=s,t.placeholder=r,t.style.cssText=L,t.addEventListener("input",()=>n(t.value)),t}function ge(s,r,n){const t=document.createElement("select");return t.style.cssText=L,s.forEach(([p,c])=>{const h=document.createElement("option");h.value=p,h.textContent=c,t.appendChild(h)}),t.value=r,t.addEventListener("change",()=>n(t.value)),t}function ve(s,r,n){const t=document.createElement("label");t.style.cssText=ue;const p=document.createElement("input");return p.type="checkbox",p.checked=s,p.addEventListener("change",()=>r(p.checked)),t.appendChild(p),t.appendChild(document.createTextNode(n)),{wrap:t,input:p}}function V(s,r){const n=document.createElement("button");n.type="button",n.className="btn btn-ghost btn-sm",n.style.cssText="display:inline-flex;align-items:center;gap:.35rem;";const t=document.createElement("span");return t.setAttribute("data-icon",s),n.appendChild(t),n.appendChild(document.createTextNode(r)),n}function K(s,r){const n=document.createElement("button");n.type="button",n.title=r,n.style.cssText="padding:.25rem .4rem;background:transparent;border:1px solid var(--dm-border,#333);border-radius:3px;color:var(--dm-text-muted,#aaa);cursor:pointer;display:inline-flex;align-items:center;";const t=document.createElement("span");return t.setAttribute("data-icon",s),n.appendChild(t),n}function ee(s){for(;s.firstChild;)s.removeChild(s.firstChild)}function we(s){return String(s).replace(/&/g,"&").replace(/"/g,""")}let te=!1;function Ce(){te||(te=!0,I.register("edit-3",{viewBox:"0 0 24 24",paths:["M12 20h9","M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("clock",{viewBox:"0 0 24 24",paths:["M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z","M12 6v6l4 2"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("corner-up-left",{viewBox:"0 0 24 24",paths:["M9 14 4 9l5-5","M20 20v-7a4 4 0 0 0-4-4H4"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("refresh-cw",{viewBox:"0 0 24 24",paths:["M23 4v6h-6","M1 20v-6h6","M3.51 9a9 9 0 0 1 14.85-3.36L23 10","M20.49 15a9 9 0 0 1-14.85 3.36L1 14"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("rotate-cw",{viewBox:"0 0 24 24",paths:["M23 4v6h-6","M20.49 15a9 9 0 1 1-2.12-9.36L23 10"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("code",{viewBox:"0 0 24 24",paths:["M16 18l6-6-6-6","M8 6l-6 6 6 6"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("chevron-up",{viewBox:"0 0 24 24",path:"M18 15l-6-6-6 6",stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("chevron-down",{viewBox:"0 0 24 24",path:"M6 9l6 6 6-6",stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),I.register("x",{viewBox:"0 0 24 24",paths:["M18 6L6 18","M6 6l12 12"],stroke:"currentColor",fill:"none",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}))}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const SCRIBE_FIELDS=[{name:"mode",key:"mode",label:"Render mode",type:"select",default:"typewriter",options:[["typewriter","Characters"],["word","Words"],["sentence","Sentences"]]},{name:"effect",key:"effect",label:"Default entrance effect",type:"select",default:"none",options:["none","fade","bounce","glow"].map(r=>[r,r])},{name:"speed",key:"speed",label:"Typing speed (ms/unit)",type:"number",default:50,min:0},{name:"delete-speed",key:"deleteSpeed",label:"Delete speed (ms/unit)",type:"number",default:30,min:0},{name:"cursor",key:"cursor",label:"Show cursor",type:"checkbox",default:!0},{name:"cursor-char",key:"cursorChar",label:"Cursor character",type:"text",default:"|"},{name:"cursor-type",key:"cursorType",label:"Cursor style",type:"select",default:"caret",options:[["caret","Caret"],["block","Block"],["underline","Underline"]]},{name:"cursor-blink",key:"cursorBlink",label:"Blink cursor while idle",type:"checkbox",default:!0},{name:"loop",key:"loop",label:"Loop (false, true, or total plays)",type:"text",default:!1},{name:"loop-delay",key:"loopDelay",label:"Loop delay (ms)",type:"number",default:1e3,min:0},{name:"pause-on-hover",key:"pauseOnHover",label:"Pause on hover",type:"checkbox",default:!1},{name:"auto-start",key:"autoStart",label:"Start automatically",type:"checkbox",default:!0},{name:"respect-motion-preference",key:"respectMotionPreference",label:"Respect reduced motion",type:"checkbox",default:!0},{name:"controls",key:"controls",label:"Show playback controls",type:"checkbox",default:!1}];export function scribeDefaults(){return Object.fromEntries(SCRIBE_FIELDS.map(r=>[r.key,r.default]))}export function scribeLoop(r){if(r===!0||r==="true")return!0;if(r===!1||r==="false"||r==="")return!1;const o=Number(r);return Number.isInteger(o)&&o>=1?o:!1}export function stateToScribeActions(r,o="none"){const n=[];return r.forEach(t=>{t.type==="render"||t.type==="redraw"?(t.type==="redraw"&&n.push({undoRender:"all"}),n.push({render:t.text||"",effect:!t.effect||t.effect==="inherit"?o:t.effect})):t.type==="wait"?n.push({wait:t.unit==="s"?(t.duration||0)*1e3:t.duration||0}):t.type==="undo"&&n.push({undoRender:t.mode==="all"?"all":t.mode==="count"?t.count:!0})}),n}export function buildScribeShortcode(r,o){const n=e=>String(e).replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">"),t=SCRIBE_FIELDS.filter(e=>r[e.key]!==e.default).map(e=>`${e.name}="${n(r[e.key])}"`),l=o.map(e=>{if(e.type==="render"||e.type==="redraw"){const c=e.effect&&e.effect!=="inherit"?` effect="${n(e.effect)}"`:"";return`[${e.type}${c}]${e.text||""}[/${e.type}]`}return e.type==="wait"?`[wait]${e.duration}${e.unit==="s"?"s":""}[/wait]`:e.mode==="all"?'[undo all="true" /]':e.mode==="count"?`[undo count="${e.count}" /]`:"[undo /]"});return`[scribe${t.length?" "+t.join(" "):""}]
|
|
1
|
+
export const SCRIBE_FIELDS=[{name:"mode",key:"mode",label:"Render mode",type:"select",default:"typewriter",options:[["typewriter","Characters"],["word","Words"],["sentence","Sentences"]]},{name:"effect",key:"effect",label:"Default entrance effect",type:"select",default:"none",options:["none","fade","bounce","glow"].map(r=>[r,r])},{name:"speed",key:"speed",label:"Typing speed (ms/unit)",type:"number",default:50,min:0},{name:"delete-speed",key:"deleteSpeed",label:"Delete speed (ms/unit)",type:"number",default:30,min:0},{name:"cursor",key:"cursor",label:"Show cursor",type:"checkbox",default:!0},{name:"cursor-char",key:"cursorChar",label:"Cursor character",type:"text",default:"|"},{name:"cursor-type",key:"cursorType",label:"Cursor style",type:"select",default:"caret",options:[["caret","Caret"],["block","Block"],["underline","Underline"]]},{name:"cursor-blink",key:"cursorBlink",label:"Blink cursor while idle",type:"checkbox",default:!0},{name:"loop",key:"loop",label:"Loop (false, true, or total plays)",type:"text",default:!1},{name:"loop-delay",key:"loopDelay",label:"Loop delay (ms)",type:"number",default:1e3,min:0},{name:"pause-on-hover",key:"pauseOnHover",label:"Pause on hover",type:"checkbox",default:!1},{name:"auto-start",key:"autoStart",label:"Start automatically",type:"checkbox",default:!0},{name:"respect-motion-preference",key:"respectMotionPreference",label:"Respect reduced motion",type:"checkbox",default:!0,always:!0},{name:"controls",key:"controls",label:"Show playback controls",type:"checkbox",default:!1}];export function scribeDefaults(){return Object.fromEntries(SCRIBE_FIELDS.map(r=>[r.key,r.default]))}export function scribeLoop(r){if(r===!0||r==="true")return!0;if(r===!1||r==="false"||r==="")return!1;const o=Number(r);return Number.isInteger(o)&&o>=1?o:!1}export function stateToScribeActions(r,o="none"){const n=[];return r.forEach(t=>{t.type==="render"||t.type==="redraw"?(t.type==="redraw"&&n.push({undoRender:"all"}),n.push({render:t.text||"",effect:!t.effect||t.effect==="inherit"?o:t.effect})):t.type==="wait"?n.push({wait:t.unit==="s"?(t.duration||0)*1e3:t.duration||0}):t.type==="undo"&&n.push({undoRender:t.mode==="all"?"all":t.mode==="count"?t.count:!0})}),n}export function buildScribeShortcode(r,o){const n=e=>String(e).replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">"),t=SCRIBE_FIELDS.filter(e=>e.always||r[e.key]!==e.default).map(e=>`${e.name}="${n(r[e.key])}"`),l=o.map(e=>{if(e.type==="render"||e.type==="redraw"){const c=e.effect&&e.effect!=="inherit"?` effect="${n(e.effect)}"`:"";return`[${e.type}${c}]${e.text||""}[/${e.type}]`}return e.type==="wait"?`[wait]${e.duration}${e.unit==="s"?"s":""}[/wait]`:e.mode==="all"?'[undo all="true" /]':e.mode==="count"?`[undo count="${e.count}" /]`:"[undo /]"});return`[scribe${t.length?" "+t.join(" "):""}]
|
|
2
2
|
${l.join(`
|
|
3
3
|
`)}
|
|
4
4
|
[/scribe]`}
|
|
@@ -310,7 +310,7 @@ Your text appears letter by letter.
|
|
|
310
310
|
<tr>
|
|
311
311
|
<td><code>[render]</code></td>
|
|
312
312
|
<td><code>[render effect="fade"]Text[/render]</code></td>
|
|
313
|
-
<td>Type the text. Optional <code>effect</code>: fade,
|
|
313
|
+
<td>Type the text. Optional <code>effect</code>: none, fade, bounce, glow (inherits the Scribe default)</td>
|
|
314
314
|
</tr>
|
|
315
315
|
<tr>
|
|
316
316
|
<td><code>[wait]</code></td>
|
|
@@ -321,7 +321,7 @@ Your text appears letter by letter.
|
|
|
321
321
|
<td><code>[undo]</code></td>
|
|
322
322
|
<td><code>[undo /]</code> or <code>[undo count="3" /]</code> or <code>[undo all="true" /]</code>
|
|
323
323
|
</td>
|
|
324
|
-
<td>Delete the last render action, N
|
|
324
|
+
<td>Delete the last render action, N units in the chosen mode, or all text</td>
|
|
325
325
|
</tr>
|
|
326
326
|
</tbody>
|
|
327
327
|
</table>
|
|
@@ -357,12 +357,12 @@ Your text appears letter by letter.
|
|
|
357
357
|
<tr>
|
|
358
358
|
<td><code>cursor-type</code></td>
|
|
359
359
|
<td>-</td>
|
|
360
|
-
<td>Cursor style (block, underline
|
|
360
|
+
<td>Cursor style (caret, block, underline)</td>
|
|
361
361
|
</tr>
|
|
362
362
|
<tr>
|
|
363
363
|
<td><code>loop</code></td>
|
|
364
364
|
<td>false</td>
|
|
365
|
-
<td>
|
|
365
|
+
<td>false: once; true: forever; positive integer: total plays</td>
|
|
366
366
|
</tr>
|
|
367
367
|
<tr>
|
|
368
368
|
<td><code>loop-delay</code></td>
|
|
@@ -374,6 +374,12 @@ Your text appears letter by letter.
|
|
|
374
374
|
<td>false</td>
|
|
375
375
|
<td>Pause animation while hovered (true/false)</td>
|
|
376
376
|
</tr>
|
|
377
|
+
<tr><td><code>mode</code></td><td>typewriter</td><td>Characters (typewriter), word, or sentence</td></tr>
|
|
378
|
+
<tr><td><code>effect</code></td><td>none</td><td>Default entrance: none, fade, bounce, glow</td></tr>
|
|
379
|
+
<tr><td><code>cursor-blink</code></td><td>true</td><td>Blink while idle; steady while typing and deleting</td></tr>
|
|
380
|
+
<tr><td><code>auto-start</code></td><td>true</td><td>false waits for Play; playback controls appear automatically</td></tr>
|
|
381
|
+
<tr><td><code>respect-motion-preference</code></td><td>Site setting</td><td>Honor the visitor’s reduced motion preference</td></tr>
|
|
382
|
+
<tr><td><code>controls</code></td><td>false</td><td>Show Play, Pause, and Replay</td></tr>
|
|
377
383
|
</tbody>
|
|
378
384
|
</table>
|
|
379
385
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "domma-cms",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.17",
|
|
4
4
|
"description": "File-based CMS powered by Domma and Fastify. Run npx domma-cms my-site to create a new project.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "server/server.js",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"@fastify/rate-limit": "^10.3.0",
|
|
85
85
|
"@fastify/static": "9.1.1",
|
|
86
86
|
"bcryptjs": "^3.0.3",
|
|
87
|
-
"domma-js": "0.51.
|
|
87
|
+
"domma-js": "0.51.9",
|
|
88
88
|
"dotenv": "^17.2.3",
|
|
89
89
|
"fastify": "5.8.5",
|
|
90
90
|
"gray-matter": "^4.0.3",
|
package/public/css/site.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
body,button,input,select,textarea{font-family:Roboto,sans-serif}.navbar-brand-logo{height:32px;width:auto;display:inline-block;vertical-align:middle;margin-right:.4em}.navbar-brand-tagline{display:block;font-size:.65em;opacity:.75;line-height:1.2;letter-spacing:.02em}.navbar-brand-text.navbar-brand-sm{font-size:.85em}.navbar-brand-text.navbar-brand-lg{font-size:1.25em}@media(min-width:993px){#site-navbar:not(.dm-nav-vertical) .navbar-container{display:grid;align-items:center;gap:var(--dm-space-4, 1rem)}#site-navbar:not(.dm-nav-vertical) .navbar-collapse{display:contents}#site-navbar:not(.dm-nav-vertical) .navbar-brand{grid-column:1;justify-self:start}#site-navbar:not(.dm-nav-vertical) .navbar-nav{grid-column:2;flex:0 1 auto;min-width:0}#site-navbar:not(.dm-nav-vertical) .navbar-actions{grid-column:3;justify-self:end;margin-left:0}#site-navbar.dm-nav-align-centre:not(.dm-nav-vertical) .navbar-container{grid-template-columns:minmax(max-content,1fr) auto minmax(max-content,1fr)}#site-navbar.dm-nav-align-centre:not(.dm-nav-vertical) .navbar-nav{justify-content:center}#site-navbar:is(.dm-nav-align-left,.dm-nav-align-right,.dm-nav-align-spread):not(.dm-nav-vertical) .navbar-container{grid-template-columns:auto minmax(0,1fr) auto}#site-navbar.dm-nav-align-left:not(.dm-nav-vertical) .navbar-nav{justify-content:flex-start}#site-navbar.dm-nav-align-right:not(.dm-nav-vertical) .navbar-nav{justify-content:flex-end}#site-navbar.dm-nav-align-spread:not(.dm-nav-vertical) .navbar-nav{justify-content:space-between;width:100%}}.navbar-actions{order:4;margin-left:auto;display:flex;align-items:center;gap:.5rem}#site-navbar.navbar-dark .navbar-actions,#site-navbar.navbar-light .navbar-actions{color:var(--dm-navbar-text)}#site-navbar.navbar-dark .site-search-shortcut-hint,#site-navbar.navbar-light .site-search-shortcut-hint{color:color-mix(in srgb,var(--dm-navbar-text) 65%,var(--dm-navbar-bg));border-color:color-mix(in srgb,var(--dm-navbar-text) 28%,transparent)}.site-main{min-height:calc(100vh - 60px);padding-top:2rem;padding-bottom:4rem}.site-main.with-sidebar{display:grid;grid-template-columns:var(--dm-contents-width, 260px) 1fr;gap:0}.site-sidebar{min-height:100%;border-right:1px solid var(--dm-border, rgba(255,255,255,.08))}.site-main.with-sidebar{overflow-x:clip;overflow-y:visible}.site-main.with-sidebar>#site-sidebar{position:sticky;top:var(--site-navbar-height, 4rem);align-self:start;min-height:0;max-height:calc(100vh - var(--site-navbar-height, 4rem));overflow-y:auto;width:auto}.site-main.with-sidebar.sidebar-right{grid-template-columns:1fr var(--dm-contents-width, 260px)}.site-main.with-sidebar.sidebar-right>#site-sidebar{order:2;border-right:0;border-left:1px solid var(--dm-border, rgba(255,255,255,.08))}.site-main.with-sidebar.no-sidebar-items{grid-template-columns:1fr}.site-main.with-sidebar.no-sidebar-items .site-sidebar{display:none}.dm-contents{padding:var(--dm-space-3, .75rem) 0}.dm-contents-head{display:flex;align-items:center;gap:.5rem;padding:0 var(--dm-space-3, .75rem)}.dm-contents-title{margin:0;font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--dm-text-muted)}.dm-contents-title:empty{display:none}.dm-contents-list{margin:.25rem 0 0;padding:0;list-style:none;counter-reset:dm-contents-h2}.dm-contents-item>a{display:block;padding:.45rem var(--dm-space-3, .75rem) .45rem calc(var(--dm-space-3, .75rem) + 3px);border-left:3px solid transparent;color:var(--dm-text-secondary);text-decoration:none;line-height:1.35;font-size:.9rem}.dm-contents-item>a:hover{color:var(--dm-text);background:var(--dm-hover-bg, rgba(255, 255, 255, .04))}.dm-contents:not([data-menu-active]) .dm-contents-item>a.is-active{color:var(--dm-text);font-weight:600;border-left-color:var(--dm-menu-highlight, var(--dm-primary));background:var(--dm-hover-bg, rgba(255, 255, 255, .04))}.dm-contents-h3>a{padding-left:calc(var(--dm-space-3, .75rem) + 1.1rem);font-size:.85rem}.dm-contents-list.is-numbered .dm-contents-h2{counter-increment:dm-contents-h2;counter-reset:dm-contents-h3}.dm-contents-list.is-numbered .dm-contents-h3{counter-increment:dm-contents-h3}.dm-contents-list.is-numbered .dm-contents-h2>a:before{content:counter(dm-contents-h2) ". ";color:var(--dm-text-muted)}.dm-contents-list.is-numbered .dm-contents-h3>a:before{content:counter(dm-contents-h2) "." counter(dm-contents-h3) " ";color:var(--dm-text-muted)}.dm-contents-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:28px;height:28px;padding:0;border:1px solid var(--dm-border);border-radius:6px;background:transparent;color:var(--dm-text-secondary);cursor:pointer}.dm-contents-toggle:hover{color:var(--dm-text);border-color:var(--dm-primary)}.dm-contents-toggle svg{width:16px;height:16px}.site-main.with-sidebar.contents-static>#site-sidebar{position:static;max-height:none;overflow:visible}.site-main.with-sidebar.contents-collapsed{grid-template-columns:52px 1fr}.site-main.with-sidebar.sidebar-right.contents-collapsed{grid-template-columns:1fr 52px}.site-main.contents-collapsed .dm-contents-list,.site-main.contents-collapsed .dm-contents-title{display:none}.site-main.contents-collapsed .dm-contents-head{justify-content:center;padding:0}.site-main.with-sidebar:is(.contents-floating,.contents-autohide){grid-template-columns:1fr}.site-main.with-sidebar:is(.contents-floating,.contents-autohide)>#site-sidebar{position:fixed;z-index:90;width:var(--dm-contents-width, 260px);max-height:70vh;overflow-y:auto;border:1px solid var(--dm-border);border-radius:10px;background:var(--dm-surface);box-shadow:var(--dm-shadow-lg)}.site-main.with-sidebar.contents-float-tl>#site-sidebar{top:calc(var(--site-navbar-height, 0px) + 1rem);bottom:auto;left:1rem;right:auto}.site-main.with-sidebar.contents-float-tr>#site-sidebar{top:calc(var(--site-navbar-height, 0px) + 1rem);bottom:auto;right:1rem;left:auto}.site-main.with-sidebar.contents-float-bl>#site-sidebar{top:auto;bottom:1rem;left:1rem;right:auto}.site-main.with-sidebar.contents-float-br>#site-sidebar{top:auto;bottom:1rem;right:1rem;left:auto}.site-main.with-sidebar.contents-float-l>#site-sidebar{top:50%;bottom:auto;left:1rem;right:auto;transform:translateY(-50%)}.site-main.with-sidebar.contents-float-r>#site-sidebar{top:50%;bottom:auto;right:1rem;left:auto;transform:translateY(-50%)}body.dm-vnav-right .site-main.with-sidebar:is(.contents-float-tr,.contents-float-br,.contents-float-r)>#site-sidebar{right:calc(var(--dm-vnav-width, 240px) + 1rem)}body.dm-vnav-left .site-main.with-sidebar:is(.contents-float-tl,.contents-float-bl,.contents-float-l)>#site-sidebar{left:calc(var(--dm-vnav-width, 240px) + 1rem)}.dm-contents.is-movable .dm-contents-head{cursor:move}.site-main.contents-autohide>#site-sidebar{top:50%;transition:transform .25s ease,box-shadow .25s ease;box-shadow:none}.site-main.contents-autohide:not(.sidebar-right)>#site-sidebar{left:0;transform:translate(calc(-100% + 10px),-50%);border-radius:0 10px 10px 0}.site-main.contents-autohide.sidebar-right>#site-sidebar{right:0;transform:translate(calc(100% - 10px),-50%);border-radius:10px 0 0 10px}body.dm-vnav-left .site-main.contents-autohide:not(.sidebar-right)>#site-sidebar{left:var(--dm-vnav-width, 240px)}body.dm-vnav-right .site-main.contents-autohide.sidebar-right>#site-sidebar{right:var(--dm-vnav-width, 240px)}.site-main.contents-autohide>#site-sidebar:is(:hover,:focus-within,.is-revealed){transform:translateY(-50%);box-shadow:var(--dm-shadow-lg)}@media(prefers-reduced-motion:reduce){.site-main.contents-autohide>#site-sidebar{transition:none}}html.dm-reduced-motion .site-main.contents-autohide>#site-sidebar{transition:none}.site-content{overflow:hidden}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.container{padding:0 1.5rem}.page-title{font-size:clamp(1.5rem,4vw,2rem);font-weight:700;margin-bottom:1.5rem;line-height:1.2}.page-body{line-height:1.7;font-size:1rem}.page-body h1,.page-body h2,.page-body h3,.page-body h4{margin-top:2rem;margin-bottom:.75rem;font-weight:600}.page-body h2{font-size:clamp(1.2rem,3vw,1.5rem)}.page-body h3{font-size:clamp(1.1rem,2.5vw,1.25rem)}.page-body p{margin-bottom:1rem}.page-body ul,.page-body ol{margin-bottom:1rem;padding-left:1.5rem}.page-body a{color:var(--dm-link, var(--dm-primary, #5b8cff))}.page-body a:hover{text-decoration:underline}.page-body code{font-family:Fira Code,Courier New,monospace;font-size:.9em;background:var(--dm-code-bg, rgba(255,255,255,.06));color:var(--dm-code-text, inherit);padding:.15em .35em;border-radius:3px}.page-body pre{background:var(--dm-code-bg, rgba(0,0,0,.3));color:var(--dm-code-text, inherit);border:1px solid var(--dm-code-border, rgba(255,255,255,.08));border-radius:6px;padding:1rem;overflow-x:auto;margin-bottom:1rem}.page-body pre code{background:none;padding:0}.page-body img{max-width:100%;border-radius:6px}.page-body blockquote{border-left:3px solid var(--dm-primary, #5b8cff);margin:1.5rem 0;padding:.75rem 1rem;background:color-mix(in srgb,var(--dm-primary, #5b8cff) 8%,transparent);border-radius:0 6px 6px 0}h3.accordion-header{margin:0}.accordion-button{all:unset;display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;font:inherit}.page-body .card-header h2{margin:0;font-size:1rem;font-weight:600;line-height:1.4}.card[data-collapsible] .card-header{cursor:pointer;user-select:none;display:flex;align-items:center;justify-content:space-between}.card[data-collapsible] .card-header:after{content:"\25be";font-size:1.1em;line-height:1;display:inline-block;transition:transform .25s ease;flex-shrink:0}.card[data-collapsible].is-collapsed .card-header:after{transform:rotate(-90deg)}.card[data-collapsible] .card-body{overflow:hidden;max-height:4000px;opacity:1;transition:max-height .3s ease,opacity .25s ease}.card[data-collapsible].is-collapsed .card-body{max-height:0;opacity:0}.card-primary>.card-header,.card-primary>.card-footer{background-color:color-mix(in srgb,var(--dm-primary) 18%,var(--dm-surface));color:var(--dm-text);border-color:var(--dm-primary)}.card-primary>.card-header .card-title{color:var(--dm-text)}.navbar-link span[data-icon],.navbar-link svg,.navbar-dropdown-toggle span[data-icon],.navbar-dropdown-toggle svg,.navbar-dropdown-item span[data-icon],.navbar-dropdown-item svg{width:13px!important;height:13px!important;margin-right:10px!important}#site-navbar .navbar-dropdown-toggle,#site-navbar .navbar-dropdown-item{font-size:var(--dm-font-size-base)}@media(min-width:993px){#site-navbar .navbar-dropdown-toggle,#site-navbar .navbar-dropdown-item{font-size:var(--dm-font-size-sm)}}@media(min-width:1201px){#site-navbar .navbar-dropdown-toggle,#site-navbar .navbar-dropdown-item{font-size:var(--dm-font-size-xs)}}#site-navbar .navbar-dropdown-item{transition:none}[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-link,[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-dropdown-toggle{transition:all .15s ease,color 0s,background-color 0s}[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-link:hover,[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-dropdown-toggle:hover,[data-mode=light] #site-navbar .navbar-dropdown-item:hover{background-color:var(--dm-hover-bg, rgba(128, 128, 128, .14))!important;color:var(--dm-text, #1f2937)!important;text-decoration:underline;text-underline-offset:3px}.dm-reduced-motion *,.dm-reduced-motion *:before,.dm-reduced-motion *:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.page-footer{border-top:1px solid var(--dm-border, rgba(255,255,255,.08));padding:1.5rem 0}.footer-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;max-width:1200px;margin:0 auto}.footer-inner p{margin:0;color:var(--dm-text-muted, #888);font-size:.875rem}.footer-links{display:flex;gap:1.25rem}.footer-links a{color:var(--dm-text-muted, #888);font-size:.875rem;text-decoration:none}.footer-links a:hover{color:var(--dm-text, #eee)}.footer-social{display:flex;gap:.5rem;align-items:center}.footer-social-link{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;color:var(--dm-text-muted, #888);transition:color .15s}.footer-social-link:hover{color:var(--dm-text, #eee)}.footer-social-link svg{width:1rem;height:1rem}.footer-motion-switch{font-size:.8rem;color:var(--dm-text-muted, #888);white-space:nowrap}.footer-motion-check{display:inline-flex;align-items:center;gap:.5rem;margin-top:var(--dm-space-3, .75rem);font-size:.85rem;color:var(--dm-text-secondary);cursor:pointer}.footer-motion-check .footer-motion-checkbox{width:1rem;height:1rem;margin:0;accent-color:var(--dm-primary)}.footer-motion-switch .form-switch-label{color:var(--dm-text-muted, #888)}.footer-motion-switch .form-switch-input{width:2rem;height:1.125rem}.footer-motion-switch .form-switch-input:after{width:.875rem;height:.875rem}.footer-motion-switch .form-switch-input:checked:after{transform:translate(.875rem)}.dm-slideover-header{display:flex;align-items:center;justify-content:space-between;padding:.875rem 1.25rem;border-bottom:1px solid var(--dm-border, rgba(255, 255, 255, .08));flex-shrink:0}.dm-slideover-title{margin:0;font-size:1rem;font-weight:600;line-height:1.4}.dm-slideover-body{padding:1.25rem;overflow:auto;overscroll-behavior:contain;flex:1;min-height:0;scrollbar-width:thin;scrollbar-color:var(--dm-border) transparent}.dm-slideover-body::-webkit-scrollbar{width:8px;height:8px}.dm-slideover-body::-webkit-scrollbar-track{background:transparent}.dm-slideover-body::-webkit-scrollbar-thumb{background:var(--dm-border);border-radius:4px}.dm-slideover-body::-webkit-scrollbar-thumb:hover{background:var(--dm-text-muted)}@media(max-width:768px){.site-main.with-sidebar{grid-template-columns:1fr}.site-sidebar{display:none}}.dm-spacer{display:block;width:100%}.hero-breakout{width:calc(100vw - 2rem);margin-left:calc(50% - 50vw + 1rem);margin-right:calc(50% - 50vw + 1rem)}.site-main:has(.page-body>.hero-breakout:first-child){padding-top:0}body[data-layout=landing]>.site-main{padding-top:0}body[data-layout=landing]>.site-main .container{max-width:none;padding:0}body[data-layout=landing] .page-body{padding-left:1.5rem;padding-right:1.5rem}body[data-layout=landing] .page-body>p,body[data-layout=landing] .page-body>h1,body[data-layout=landing] .page-body>h2,body[data-layout=landing] .page-body>h3,body[data-layout=landing] .page-body>ul,body[data-layout=landing] .page-body>ol,body[data-layout=landing] .page-body>blockquote{max-width:860px;margin-left:auto;margin-right:auto}.hero-breakout{width:100vw;margin-left:calc((100% - 100vw)/2);max-width:none}body[data-layout=landing] .page-body .hero-breakout{width:calc(100% + 3rem);margin-left:-1.5rem;margin-right:-1.5rem}body[data-layout=landing] .page-body .grid-breakout{width:calc(100% + 3rem);margin-left:-1.5rem;margin-right:-1.5rem;padding-left:1.5rem;padding-right:1.5rem}.page-body .card{transition:border-color .2s ease}.page-body .card:not(.card-no-hover):hover{border-color:var(--dm-primary, #0d6efd)}.page-body .card-header-icon-inline{display:flex;align-items:center;gap:.6rem}.page-body .card-header-icon-inline [data-icon]{flex-shrink:0;line-height:0}.page-body .card-header-icon-inline [data-icon] svg,.page-body .card-header-icon-inline>svg{display:block;width:1.25rem;height:1.25rem}.page-body .card-header-icon-stacked{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.35rem;padding-top:.25rem}.page-body .card-header-icon-stacked [data-icon],.page-body .card-header-icon-stacked svg{width:2rem;height:2rem}.page-body .dm-card-clean{background:var(--dm-surface);border:1px solid var(--dm-border);box-shadow:0 1px 4px #0000000f,0 2px 8px #0000000a;transition:transform .2s ease,box-shadow .2s ease}.page-body .dm-card-clean:not(.card-no-hover):hover{transform:translateY(-4px);box-shadow:0 8px 24px #0000001a,0 2px 8px #0000000f}.page-body .dm-card-clean .card-header{color:var(--dm-text)}.page-body .dm-card-clean .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-clean .card-footer{color:var(--dm-text-secondary);border-top:1px solid var(--dm-border)}.page-body .dm-card-gradient{background:var(--dm-card-bg, #fff);border:none;box-shadow:0 4px 20px #6366f124;transition:transform .2s ease,box-shadow .2s ease}.page-body .dm-card-gradient:not(.card-no-hover):hover{transform:translateY(-5px);box-shadow:0 16px 40px #6366f140}.page-body .dm-card-gradient .card-header{background:linear-gradient(135deg,var(--dm-card-g-start, #6366f1),var(--dm-card-g-end, #8b5cf6));color:#fff;border-bottom:none}.page-body .dm-card-gradient .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-gradient .card-footer{color:var(--dm-text-secondary);border-top:1px solid var(--dm-border)}.page-body .dm-card-glass{background:color-mix(in srgb,var(--dm-surface) 62%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid color-mix(in srgb,var(--dm-border) 75%,transparent);box-shadow:0 4px 24px #00000014;transition:transform .2s ease,box-shadow .2s ease,background .2s ease}.page-body .dm-card-glass:not(.card-no-hover):hover{transform:translateY(-4px);box-shadow:0 12px 36px #00000024;background:color-mix(in srgb,var(--dm-surface) 78%,transparent)}.page-body .dm-card-glass .card-header{background:transparent;border-bottom:1px solid color-mix(in srgb,var(--dm-border) 60%,transparent);color:var(--dm-text)}.page-body .dm-card-glass .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-glass .card-footer{color:var(--dm-text-secondary);background:transparent}.page-body .dm-card-accent{background:var(--dm-surface);border:1px solid var(--dm-border);border-left:4px solid var(--dm-primary, #6366f1);box-shadow:0 1px 4px #0000000d;transition:transform .2s ease,box-shadow .2s ease,border-left-color .2s ease}.page-body .dm-card-accent:not(.card-no-hover):hover{transform:translateY(-3px);border-left-color:var(--dm-primary-hover, #4f46e5);box-shadow:0 8px 24px #6366f11f}.page-body .dm-card-accent .card-header{color:var(--dm-primary);border-bottom:none}.page-body .dm-card-accent .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-accent .card-footer{color:var(--dm-text-secondary);border-top:1px solid var(--dm-border)}.page-body .dm-card-dark{--cms-link-color: color-mix(in srgb, var(--dm-primary) 40%, #fff);--cms-link-hover-color: color-mix(in srgb, var(--dm-primary) 20%, #fff);background:linear-gradient(160deg,color-mix(in srgb,var(--dm-primary) 8%,#1e293b),#0f172a);color:#cbd5e1;border:1px solid rgba(255,255,255,.06);box-shadow:0 4px 20px #0000004d;transition:transform .2s ease,box-shadow .2s ease}.page-body .dm-card-dark:not(.card-no-hover):hover{transform:translateY(-4px) scale(1.012);box-shadow:0 16px 40px #00000073}.page-body .dm-card-dark .card-header{background:transparent;color:#f1f5f9;border-bottom:1px solid rgba(255,255,255,.08)}.page-body .dm-card-dark :is(h1,h2,h3,h4,h5,h6,strong,b){color:#f1f5f9}.page-body .dm-card-dark .card-title{color:#f1f5f9!important}.page-body .dm-card-dark .card-subtitle{color:#94a3b8}.page-body .dm-card-dark .card-body{color:#cbd5e1}.page-body .dm-card-dark :is(code,pre){background:#ffffff14;border-color:#ffffff1f;color:#f1f5f9}.page-body .dm-card-dark pre code{background:none}.page-body .dm-card-dark .card-footer{background:transparent;color:#94a3b8;border-top:1px solid rgba(255,255,255,.08)}.page-body .dm-card-glow{background:var(--dm-surface);border:1px solid color-mix(in srgb,var(--dm-primary, #6366f1) 45%,transparent);box-shadow:0 0 #6366f100;transition:transform .2s ease,box-shadow .3s ease,border-color .2s ease}.page-body .dm-card-glow:not(.card-no-hover):hover{transform:translateY(-3px);border-color:var(--dm-primary, #818cf8);box-shadow:0 0 0 4px color-mix(in srgb,var(--dm-primary, #6366f1) 14%,transparent),0 0 28px color-mix(in srgb,var(--dm-primary, #6366f1) 22%,transparent)}.page-body .dm-card-glow .card-header{color:var(--dm-primary);border-bottom:1px solid color-mix(in srgb,var(--dm-primary, #6366f1) 20%,transparent)}.page-body .dm-card-glow .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-glow .card-footer{border-top:1px solid color-mix(in srgb,var(--dm-primary, #6366f1) 20%,transparent);color:var(--dm-text-secondary)}.page-body .card-hover{transition:border-color .2s ease}.page-body .card-hover:not(.card-no-hover):hover{border-color:var(--dm-primary, #0d6efd)}.card-gradient-indigo{background:linear-gradient(135deg,#6366f1,#8b5cf6)}.card-gradient-ocean{background:linear-gradient(135deg,#0891b2,#2563eb)}.card-gradient-sunset{background:linear-gradient(135deg,#f59e0b,#ef4444,#ec4899)}.card-gradient-forest{background:linear-gradient(135deg,#10b981,#0d9488)}.card-gradient-rose{background:linear-gradient(135deg,#fb7185,#e11d48)}.card-gradient-midnight{background:linear-gradient(135deg,#1e1b4b,#4338ca)}.card-gradient-aurora{background:linear-gradient(135deg,#06b6d4,#6366f1,#a855f7)}.card-gradient-fire{background:linear-gradient(135deg,#ef4444,#f97316,#fbbf24)}.card-gradient-lagoon{background:linear-gradient(135deg,#06b6d4,#0e7490)}.card-gradient-dusk{background:linear-gradient(135deg,#7c3aed,#db2777)}.card-gradient-lime{background:linear-gradient(135deg,#84cc16,#10b981)}.card-gradient-gold{background:linear-gradient(135deg,#f59e0b,#b45309)}.card-gradient-arctic{background:linear-gradient(135deg,#bae6fd,#e0f2fe);color:#1e293b}.card-gradient-slate{background:linear-gradient(135deg,#475569,#1e293b)}[class*=card-gradient-]:not(.card-gradient-arctic){color:#fff}.page-body .card-font-serif{font-family:Georgia,Times New Roman,serif}.page-body .card-font-mono{font-family:SF Mono,Fira Code,Courier New,monospace}.page-body .card-text-sm{font-size:.85rem}.page-body .card-text-lg{font-size:1.1rem}.page-body .card-text-xl{font-size:1.25rem}.page-body .card-borderless{border:none!important}.page-body .card-shadow-none{box-shadow:none!important}.page-body .card-shadow-md{box-shadow:0 4px 12px #0000001a}.page-body .card-shadow-lg{box-shadow:0 10px 30px #0000002e}.page-body .card-rounded-none{border-radius:0}.page-body .card-rounded-xs{border-radius:2px}.page-body .card-rounded-sm{border-radius:4px}.page-body .dm-box-primary{--cms-box-tone: var(--dm-primary)}.page-body .dm-box-secondary{--cms-box-tone: var(--dm-secondary)}.page-body .dm-box-success{--cms-box-tone: var(--dm-success)}.page-body .dm-box-info{--cms-box-tone: var(--dm-info)}.page-body .dm-box-warning{--cms-box-tone: var(--dm-warning)}.page-body .dm-box-danger{--cms-box-tone: var(--dm-danger)}.page-body .dm-box-tone{--cms-link-color: color-mix(in srgb, var(--cms-box-tone) 40%, var(--dm-text));--cms-link-hover-color: var(--dm-text);background:color-mix(in srgb,var(--cms-box-tone) 12%,var(--dm-card-bg));border-color:color-mix(in srgb,var(--cms-box-tone) 45%,var(--dm-card-border));color:var(--dm-text)}.page-body .dm-box-tone:not(.card-no-hover):hover{border-color:var(--cms-box-tone)}.page-body .dm-box-tone>.card-body{color:var(--dm-text)}.page-body .dm-box-tone>.card-footer{background:color-mix(in srgb,var(--cms-box-tone) 20%,var(--dm-card-bg));border-top-color:color-mix(in srgb,var(--cms-box-tone) 35%,var(--dm-card-border));color:var(--dm-text)}.page-body .dm-box-custom{--cms-link-color: currentColor;--cms-link-hover-color: currentColor;background:var(--cms-box-bg);border-color:color-mix(in srgb,var(--cms-box-fg) 25%,var(--cms-box-bg));color:var(--cms-box-fg)}.page-body .dm-box-custom>:is(.card-body,.card-footer),.page-body .dm-box-custom :is(h1,h2,h3,h4,h5,h6,strong,b){color:var(--cms-box-fg)}.page-body .dm-box-custom>.card-footer{background:color-mix(in srgb,var(--cms-box-shade) 10%,var(--cms-box-bg));border-top-color:color-mix(in srgb,var(--cms-box-fg) 20%,var(--cms-box-bg))}.page-body .dm-box-custom a{text-decoration-color:currentColor!important}.page-body .dm-box-custom :is(code,pre){background:color-mix(in srgb,var(--cms-box-shade) 15%,var(--cms-box-bg));border-color:color-mix(in srgb,var(--cms-box-fg) 20%,var(--cms-box-bg));color:var(--cms-box-fg)}.page-body .dm-box-custom pre code{background:none}.page-body .card-rounded-lg{border-radius:20px}.page-body .card-rounded-full{border-radius:9999px}.page-body .card-align-center{text-align:center}.page-body .card-align-right{text-align:right}.page-body .card-pad-compact .card-body,.page-body .card-pad-compact .card-header,.page-body .card-pad-compact .card-footer{padding:8px 12px}.page-body .card-pad-spacious .card-body,.page-body .card-pad-spacious .card-header,.page-body .card-pad-spacious .card-footer{padding:24px 28px}.grid>:is(.card-span-full,.col:has(>.card-span-full)){grid-column:1 / -1}.grid>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:span 6 / span 6}.grid.grid-cols-1>:is(.card-span-2,.col:has(>.card-span-2)),.grid.grid-cols-1>:is(.card-span-3,.col:has(>.card-span-3)),.grid.grid-cols-1>:is(.card-span-4,.col:has(>.card-span-4)),.grid.grid-cols-1>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-1>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-2>:is(.card-span-3,.col:has(>.card-span-3)),.grid.grid-cols-2>:is(.card-span-4,.col:has(>.card-span-4)),.grid.grid-cols-2>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-2>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-3>:is(.card-span-4,.col:has(>.card-span-4)),.grid.grid-cols-3>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-3>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-4>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-4>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-5>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}@media(min-width:768px){.grid.grid-cols-md-1>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-2>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-3>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-3>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-3>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-md-3>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-3>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-4>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-4>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-4>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-md-4>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-4>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-5>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-5>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-5>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-md-5>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-md-5>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-6>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-6>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-6>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-md-6>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-md-6>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:span 6 / span 6}}@media(min-width:1024px){.grid.grid-cols-lg-1>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-2>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-3>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-3>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-3>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-lg-3>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-3>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-4>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-4>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-4>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-lg-4>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-4>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-5>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-5>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-5>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-lg-5>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-lg-5>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-6>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-6>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-6>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-lg-6>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-lg-6>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:span 6 / span 6}}.card-img-top{width:100%;height:180px;background-size:cover;background-position:center;background-color:var(--dm-border,#e2e8f0);display:flex;align-items:center;justify-content:center;font-size:2.5rem;color:color-mix(in srgb,var(--dm-text) 15%,transparent)}.card-img-left,.card-img-right{width:90px;flex-shrink:0;background-size:cover;background-position:center;background-color:var(--dm-border,#e2e8f0);display:flex;align-items:center;justify-content:center;font-size:1.75rem;color:color-mix(in srgb,var(--dm-text) 20%,transparent)}.card-img-wide{width:130px;flex-shrink:0;background-size:cover;background-position:center;background-color:var(--dm-border,#e2e8f0);display:flex;align-items:center;justify-content:center;font-size:2rem;color:color-mix(in srgb,var(--dm-text) 20%,transparent)}.card-layout-horizontal,.card-layout-thumb-left,.card-layout-thumb-right{display:flex}.card-layout-thumb-left .card-body,.card-layout-thumb-right .card-body,.card-layout-horizontal .card-body{flex:1;min-width:0}.card-layout-split{display:flex;min-height:140px}.card-split-left{width:50%;display:flex;align-items:center;justify-content:center;font-size:2.25rem;flex-shrink:0;background:linear-gradient(160deg,#6366f1,#8b5cf6)}.card-split-right{flex:1;background:#1e293b;display:flex;flex-direction:column;justify-content:center}.card-split-right .card-body{color:#94a3b8}.card-split-right .card-title{color:#f1f5f9}.card-img-overlay{position:relative;height:180px;overflow:hidden;background-size:cover;background-position:center;background-color:#1e293b;display:flex;align-items:flex-end}.card-overlay-text{width:100%;padding:40px 16px 14px;background:linear-gradient(to top,rgba(0,0,0,.75),transparent)}.card-overlay-text .card-title{color:#fff}.dm-card-dark .card-img-top,.dm-card-dark .card-img-left,.dm-card-dark .card-img-right,.dm-card-dark .card-img-wide{filter:brightness(.7)}.card-stat-value{font-size:2.4rem;font-weight:800;color:var(--dm-text);line-height:1.1}.card-stat-delta{font-size:.8rem;font-weight:600;margin-top:2px}.card-stat-delta.positive{color:var(--dm-success, #10b981)}.card-stat-delta.negative{color:var(--dm-danger, #ef4444)}.card-stat-bar{height:5px;background:var(--dm-border);border-radius:3px;margin-top:14px;overflow:hidden}.card-stat-fill{height:100%;border-radius:3px;background:linear-gradient(90deg,#6366f1,#8b5cf6)}.card-progress-bar{height:8px;background:var(--dm-border);border-radius:4px;overflow:hidden;margin:8px 0}.card-progress-fill{height:100%;border-radius:4px;background:linear-gradient(90deg,#6366f1,#8b5cf6)}.card-milestone{display:flex;align-items:center;gap:8px;font-size:.8rem;color:var(--dm-text-secondary);padding:3px 0}.card-milestone-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.card-milestone-dot.done{background:var(--dm-success, #10b981)}.card-milestone-dot.pending{background:var(--dm-border, #e5e7eb)}.card-header-icon-stacked{text-align:center;padding:20px 16px 12px}.card-header-icon-stacked [data-icon],.card-header-icon-stacked .card-icon{font-size:2rem;display:block;margin-bottom:8px}.card-step-bg{position:relative;overflow:hidden;min-height:60px;display:flex;align-items:center;padding:14px 16px}.card-step-ghost{position:absolute;right:8px;top:-10px;font-size:5rem;font-weight:900;color:color-mix(in srgb,var(--dm-primary, #6366f1) 12%,transparent);line-height:1;pointer-events:none}.card-step-badge{width:32px;height:32px;border-radius:50%;background:var(--dm-primary, #6366f1);color:var(--dm-primary-text, #fff);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem;z-index:1;flex-shrink:0}.card-corner-badge-wrap{position:relative}.card-corner-badge{position:absolute;top:10px;right:10px;background:var(--dm-danger, #ef4444);color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:2px 8px;border-radius:20px}.card-callout{border-left:4px solid var(--dm-primary, #6366f1)}.card-callout.warn{border-left-color:var(--dm-warning, #f59e0b)}.card-callout.success{border-left-color:var(--dm-success, #10b981)}.card-callout.error{border-left-color:var(--dm-danger, #ef4444)}.card-callout-inner{display:flex;gap:12px;align-items:flex-start}.card-callout-icon{font-size:1.2rem;flex-shrink:0;margin-top:1px}.card-quote-mark{font-size:3.5rem;color:color-mix(in srgb,var(--dm-primary, #6366f1) 18%,transparent);line-height:.8;padding:14px 16px 0;font-family:Georgia,serif;display:block}.card-quote-text{padding:4px 16px 14px;font-style:italic;color:var(--dm-text-secondary);line-height:1.7}.card-quote-attr{display:flex;align-items:center;gap:10px}.card-quote-avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:.85rem;color:#fff;flex-shrink:0}.card-video-thumb{position:relative;height:160px;background:#1e293b;display:flex;align-items:center;justify-content:center;background-size:cover;background-position:center}.card-play-btn{width:52px;height:52px;border-radius:50%;background:#ffffffe6;display:flex;align-items:center;justify-content:center;font-size:1.2rem;box-shadow:0 4px 16px #0000004d}.card-video-duration{position:absolute;bottom:8px;right:10px;background:#000000b3;color:#fff;font-size:.65rem;font-weight:600;padding:2px 7px;border-radius:4px}.card-map-placeholder{height:130px;background:linear-gradient(160deg,#bfdbfe,#dbeafe);position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.card-map-grid{position:absolute;inset:0;background-image:repeating-linear-gradient(0deg,rgba(59,130,246,.08) 0,rgba(59,130,246,.08) 1px,transparent 1px,transparent 32px),repeating-linear-gradient(90deg,rgba(59,130,246,.08) 0,rgba(59,130,246,.08) 1px,transparent 1px,transparent 32px)}.card-map-pin{font-size:2rem;z-index:1}.card-avatar{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:1.8rem;color:#fff;margin:0 auto 12px}.card-avatar-wrap{text-align:center;padding:24px 16px 16px}.card-tag-pills{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:10px}.card-pill{background:color-mix(in srgb,var(--dm-primary, #7c3aed) 15%,transparent);color:var(--dm-primary, #7c3aed);font-size:.7rem;font-weight:700;padding:3px 9px;border-radius:20px}.card-tag-cloud{padding:14px 16px;display:flex;flex-wrap:wrap;gap:7px}.card-tag{padding:4px 11px;border-radius:20px;font-size:.78rem;font-weight:600}.card-file-row{display:flex;gap:14px;align-items:center;padding:16px}.card-file-icon{width:48px;height:58px;border-radius:7px;background:linear-gradient(160deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:1.4rem;color:#fff;flex-shrink:0;position:relative}.card-file-ext{position:absolute;bottom:4px;left:0;right:0;text-align:center;font-size:.55rem;font-weight:800;color:#ffffffe6;letter-spacing:.05em}.card-file-dl{font-size:.78rem;font-weight:700;color:var(--dm-link, var(--dm-primary, #6366f1));display:inline-block;margin-top:4px}.card-stars{color:#f59e0b;letter-spacing:2px;padding:14px 16px 0;display:block}.card-verified{display:inline-block;background:color-mix(in srgb,var(--dm-success, #10b981) 18%,transparent);color:var(--dm-success, #065f46);font-size:.6rem;font-weight:700;padding:1px 5px;border-radius:3px;margin-left:6px}.card-activity-item{display:flex;gap:10px;align-items:flex-start;padding:8px 14px;border-bottom:1px solid var(--dm-border)}.card-activity-item:last-child{border-bottom:none}.card-activity-avatar{width:30px;height:30px;border-radius:50%;flex-shrink:0;background:linear-gradient(135deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:.8rem;color:#fff}.card-compare-grid{display:grid;grid-template-columns:1fr 1fr}.card-compare-col{padding:12px 14px}.card-compare-col+.card-compare-col{border-left:1px solid var(--dm-border)}.card-compare-label{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;margin-bottom:8px;display:block}.card-compare-label.before{color:var(--dm-danger, #ef4444)}.card-compare-label.after{color:var(--dm-success, #10b981)}.card-compare-item{display:flex;gap:7px;align-items:flex-start;font-size:.78rem;color:var(--dm-text-secondary);padding:3px 0;line-height:1.4}.card-compare-x{color:var(--dm-danger, #ef4444);flex-shrink:0}.card-compare-check{color:var(--dm-success, #10b981);flex-shrink:0}.card-pricing-features{padding:14px 16px}.card-pricing-feature{display:flex;align-items:center;gap:8px;font-size:.82rem;color:var(--dm-text-secondary);padding:4px 0}.card-pricing-check{color:var(--dm-success, #10b981)}.card-pricing-cta{display:block;text-align:center;background:var(--dm-primary, #6366f1);color:var(--dm-primary-text, #fff);font-size:.82rem;font-weight:700;padding:9px;border-radius:8px;text-decoration:none;margin:0 16px 14px}.page-body a.card-pricing-cta,.page-body a.card-pricing-cta:hover{color:var(--dm-primary-text, #fff);text-decoration:none}.page-body a.card-pricing-cta:hover{filter:brightness(1.08)}.card-timeline-row{display:flex}.card-timeline-side{width:44px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;padding-top:14px}.card-timeline-dot{width:12px;height:12px;border-radius:50%;background:var(--dm-primary, #6366f1);flex-shrink:0}.card-timeline-line{width:2px;background:var(--dm-border, #e5e7eb);flex:1;margin-top:4px}.card-timeline-body{flex:1;padding:12px 14px 12px 0}.card-timeline-date{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--dm-text-muted)}.card-timeline-tag{display:inline-block;background:color-mix(in srgb,var(--dm-success, #10b981) 18%,transparent);color:var(--dm-success, #065f46);font-size:.65rem;font-weight:700;padding:2px 6px;border-radius:4px;margin-top:6px}.card-code-header{background:#1e293b;display:flex;justify-content:space-between;align-items:center;padding:8px 14px}.card-code-lang{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#6366f1}.card-code-body{background:#0f172a;padding:14px;font-family:Courier New,monospace;font-size:.78rem;line-height:1.8;color:#94a3b8;overflow-x:auto}.card-glass-outer{background:linear-gradient(135deg,#6366f1,#8b5cf6,#ec4899);border-radius:12px;padding:2px}.card-glass-inner{background:#ffffffeb;backdrop-filter:blur(10px);border-radius:10px;padding:16px}.card-badge-band{display:flex;align-items:center;justify-content:space-between;padding:12px 16px}.card-badge-band-label{background:#fff3;color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:3px 8px;border-radius:4px}.card-badge-band-icon{font-size:1.4rem}.dm-card-full-bg{background:linear-gradient(160deg,#1e293b,#0f172a);color:#cbd5e1}.dm-card-full-bg .card-body{color:#94a3b8}.dm-card-full-bg .card-title{color:#f1f5f9;font-size:1rem}.dm-card-full-bg .card-footer{border-top-color:#ffffff14;color:#64748b}.card-fc-row{display:flex;justify-content:space-between;align-items:center;padding:8px 16px;border-bottom:1px solid var(--dm-border);font-size:.82rem;color:var(--dm-text-secondary)}.card-fc-row:last-child{border-bottom:none}.card-fc-yes{color:var(--dm-success, #10b981)}.card-fc-no{color:var(--dm-text-disabled, #d1d5db)}@media(max-width:480px){.card-layout-thumb-left,.card-layout-thumb-right,.card-layout-horizontal{flex-direction:column}.card-img-left,.card-img-right,.card-img-wide{width:100%;height:120px}.card-layout-split{flex-direction:column}.card-split-left{width:100%;height:100px}}.hero.hero-dark{background:linear-gradient(135deg,#1f2937,#111827);color:#e2e8f0}.hero .hero-content{position:relative;z-index:2}.hero.hero-left .hero-content{text-align:left;align-items:flex-start;max-width:62%}@media(max-width:768px){.hero.hero-left .hero-content{max-width:100%}}.hero .hero-cta{display:flex;gap:.85rem;flex-wrap:wrap;margin-top:1.75rem}.hero .hero-cta a{display:inline-flex;align-items:center;gap:.4rem;padding:.55rem 1.35rem;border-radius:6px;font-size:.95rem;font-weight:500;text-decoration:none;transition:background .2s ease,border-color .2s ease,transform .15s ease,box-shadow .2s ease}.hero .hero-cta a:first-child{background:#ffffffeb;color:#111;border:1px solid transparent}.hero .hero-cta a:first-child:hover{background:#fff;box-shadow:0 4px 16px #00000040;transform:translateY(-2px)}.hero .hero-cta a:last-child{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.4)}.hero .hero-cta a:last-child:hover{border-color:#ffffffbf;background:#ffffff14;transform:translateY(-2px)}.hero .hero-label{display:inline-block;margin-bottom:.9rem;padding:.2rem .8rem;border-radius:999px;font-size:.72rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:#ffffffb3;border:1px solid rgba(255,255,255,.22)}.grid-breakout{width:calc(100vw - 2rem);margin-left:calc(50% - 50vw + 1rem);margin-right:calc(50% - 50vw + 1rem)}.dm-breadcrumbs{position:fixed;z-index:200;display:inline-flex;align-items:center;gap:.2rem;padding:.3rem .8rem;border-radius:999px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);background:#00000047;border:1px solid rgba(255,255,255,.11);box-shadow:0 2px 10px #00000038;font-size:.72rem;font-weight:500;letter-spacing:.01em;line-height:1.4;max-width:calc(100vw - 2rem);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dm-breadcrumbs .dm-breadcrumbs-item{color:#ffffffa6}.dm-breadcrumbs .dm-breadcrumbs-link{display:inline-flex;align-items:center;gap:.25rem;color:#ffffff8c;text-decoration:none;transition:color .15s}.dm-breadcrumbs .dm-breadcrumbs-home-icon{flex-shrink:0;vertical-align:middle}.dm-breadcrumbs .dm-breadcrumbs-link:hover{color:#fffffff2}.dm-breadcrumbs .dm-breadcrumbs-current{color:#ffffffeb;font-weight:600}.dm-breadcrumbs .dm-breadcrumbs-separator{color:#ffffff47;font-size:.8em;line-height:1;margin:0 .05rem}body[class*=-light] .dm-breadcrumbs{background:#ffffff8c;border-color:#00000012;box-shadow:0 2px 10px #00000014}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-item,body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-link{color:#0000008c}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-link:hover{color:#000000e6}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-current{color:#000000d9}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-separator{color:#00000040}.dm-collection-display{margin:1.5rem 0}.dm-collection-list{display:flex;flex-direction:column;gap:0}.dm-collection-list-item{padding:1rem 0;border-bottom:1px solid var(--dm-border, rgba(255, 255, 255, .08))}.dm-collection-list-item:last-child{border-bottom:none}.dm-collection-list-item strong{display:block;font-size:1rem;margin-bottom:.25rem}.dm-collection-list-item p{margin:0;color:var(--dm-text-muted, #888);font-size:.9rem}.dm-collection-empty p{color:var(--dm-text-muted, #888);font-style:italic}.hero-gradient-purple,.hero-gradient-blue,.hero-gradient-green,.hero-gradient-sunset,.hero-gradient-ocean,.hero-gradient-rose,.hero-gradient-forest{background:linear-gradient(135deg,color-mix(in srgb,var(--hero-hue) 22%,var(--dm-background)),color-mix(in srgb,var(--hero-hue) 10%,var(--dm-background)));color:var(--dm-text)}.hero-gradient-purple{--hero-hue: #8b5cf6}.hero-gradient-blue{--hero-hue: #3b82f6}.hero-gradient-green{--hero-hue: #10b981}.hero-gradient-sunset{--hero-hue: #f59e0b}.hero-gradient-ocean{--hero-hue: #0ea5e9}.hero-gradient-rose{--hero-hue: #ec4899}.hero-gradient-forest{--hero-hue: #16a34a}.hero-gradient-night{background:linear-gradient(135deg,#334155,#1e293b);color:#e2e8f0}.hero-gradient-ocean-light{background:linear-gradient(135deg,#e0f2fe,#caf0f8);color:#1e293b}.hero-gradient-ocean-dark{background:linear-gradient(135deg,#0c4a6e,#164e63);color:#e2e8f0}.hero-gradient-forest-light{background:linear-gradient(135deg,#d1fae5,#c6f6dc);color:#1e293b}.hero-gradient-forest-dark{background:linear-gradient(135deg,#1a4731,#166534);color:#e2e8f0}.hero-gradient-sunset-light{background:linear-gradient(135deg,#fde8d8,#fddcc9);color:#1e293b}.hero-gradient-sunset-dark{background:linear-gradient(135deg,#6b3727,#7c4036);color:#f5ede8}.hero-gradient-royal-light{background:linear-gradient(135deg,#e8f0fd,#dce8fc);color:#1e293b}.hero-gradient-royal-dark{background:linear-gradient(135deg,#1e3465,#263d7a);color:#e2e8f0}.hero-gradient-lemon-light{background:linear-gradient(135deg,#fefce8,#fef9c3);color:#1e293b}.hero-gradient-lemon-dark{background:linear-gradient(135deg,#5c4d1a,#6b5920);color:#fefce8}.hero-gradient-silver-light{background:linear-gradient(135deg,#f1f5f9,#e2e8f0);color:#1e293b}.hero-gradient-silver-dark{background:linear-gradient(135deg,#2d3748,#374151);color:#e2e8f0}.hero-gradient-charcoal-light{background:linear-gradient(135deg,#eceff1,#e1e7eb);color:#1e293b}.hero-gradient-charcoal-dark{background:linear-gradient(135deg,#2c3843,#374451);color:#e2e8f0}.hero-gradient-christmas-light{background:linear-gradient(135deg,#fde8ea,#fdd5d8);color:#1e293b}.hero-gradient-christmas-dark{background:linear-gradient(135deg,#5c0f1d,#7a1525);color:#fde8ea}.hero-gradient-unicorn-light{background:linear-gradient(135deg,#f5e8fd,#edd6fb);color:#1e293b}.hero-gradient-unicorn-dark{background:linear-gradient(135deg,#3d1a5a,#4a2068);color:#f5e8fd}.hero-gradient-dreamy-light{background:linear-gradient(135deg,#f5ede8,#eeddd4);color:#1e293b}.hero-gradient-dreamy-dark{background:linear-gradient(135deg,#3d2820,#503328);color:#f5ede8}.hero-gradient-grayve-light{background:linear-gradient(135deg,#e0f7f9,#cbf2f5);color:#1e293b}.hero-gradient-grayve-dark{background:linear-gradient(135deg,#00363d,#00444d);color:#e0f7f9}.hero-gradient-mint-light{background:linear-gradient(135deg,#d8f5ea,#c5efdd);color:#1e293b}.hero-gradient-mint-dark{background:linear-gradient(135deg,#134d33,#195f3f);color:#d8f5ea}.hero-gradient-wedding-light{background:linear-gradient(135deg,#faf3e0,#f5e9c7);color:#1e293b}.hero-gradient-wedding-dark{background:linear-gradient(135deg,#5c4418,#6f5320);color:#faf3e0}.tabs-centered{text-align:center}.tabs-centered .tab-list{display:inline-flex}.tabs-centered .tab-content{text-align:left}.site-main{overflow-x:hidden}@media(max-width:768px){.hero .hero-cta a,.dm-so-trigger,.dm-cta-trigger{min-height:44px;padding:.6rem 1.25rem}}.dm-banner{position:relative;display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;padding:.85rem 2.5rem .85rem 1rem;border-radius:var(--dm-radius-md, 6px);border-left:4px solid transparent;margin-bottom:1rem}.dm-banner__icon{flex-shrink:0;margin-top:.1rem;width:1.15rem;height:1.15rem}.dm-banner__icon svg{width:1.15rem;height:1.15rem}.dm-banner__body{flex:1;min-width:0}.dm-banner__title{display:block;margin-bottom:.2rem;font-size:.9em;font-weight:600}.dm-banner__dismiss{position:absolute;top:.5rem;right:.5rem;background:transparent;border:none;cursor:pointer;font-size:1.1rem;line-height:1;padding:.1rem .3rem;opacity:.6}.dm-banner__dismiss:hover{opacity:1}.dm-banner--info{background:color-mix(in srgb,var(--dm-info, #3b82f6) 12%,transparent);border-left-color:var(--dm-info, #3b82f6);color:inherit}.dm-banner--success{background:color-mix(in srgb,var(--dm-success, #22c55e) 12%,transparent);border-left-color:var(--dm-success, #22c55e);color:inherit}.dm-banner--warning{background:color-mix(in srgb,var(--dm-warning, #f59e0b) 12%,transparent);border-left-color:var(--dm-warning, #f59e0b);color:inherit}.dm-banner--danger{background:color-mix(in srgb,var(--dm-danger, #ef4444) 12%,transparent);border-left-color:var(--dm-danger, #ef4444);color:inherit}.dm-banner--neutral{background:color-mix(in srgb,var(--dm-text-muted, #888) 12%,transparent);border-left-color:var(--dm-text-muted, #888);color:inherit}body.dm-layout-narrow .page-body{max-width:768px;margin-inline:auto}body.dm-layout-normal .page-body{max-width:1100px;margin-inline:auto}body.dm-layout-wide .page-body{max-width:min(75vw,2000px);margin-inline:auto}body.dm-layout-full .page-body{max-width:none}.hero h1{font-size:clamp(2.4rem,4.5vw,3.75rem);font-weight:900;line-height:1.08;letter-spacing:-.03em}.hero-gradient-dreamy-light h1{color:#1e293b}.hero-gradient-dreamy-light p{font-size:1.125rem;line-height:1.7;color:#1e293bcc;max-width:48ch}.hero-center.hero-gradient-dreamy-light p{margin-left:auto;margin-right:auto}.page-body h2{font-weight:800;letter-spacing:-.025em}.page-body h3{font-weight:700;letter-spacing:-.015em}.hero-gradient-dreamy-light .hero-cta a:first-child{background:#1e293b!important;color:#f5ede8!important;border-color:#1e293b!important}.hero-gradient-dreamy-light .hero-cta a:first-child:hover{background:#0f172a!important;color:#fff!important}.hero-gradient-dreamy-light .hero-cta a:last-child{background:transparent!important;color:#1e293b!important;border:1px solid rgba(30,41,59,.45)!important}.hero-gradient-dreamy-light .hero-cta a:last-child:hover{background:#1e293b14!important;border-color:#1e293bb3!important}.card[data-hover=true]{transition:transform .22s ease,box-shadow .22s ease!important;will-change:transform}.card[data-hover=true]:not(.card-no-hover):hover{transform:translateY(-5px)!important;box-shadow:0 24px 64px #0003,0 8px 24px #0000001f!important}.card-icon{font-size:2.5rem!important;margin-bottom:12px!important;opacity:.95}.card-avatar-wrap{padding:20px 16px 12px!important;gap:.5rem}.mk-card-icon-wrap,.card-icon-wrap{width:3rem;height:3rem;border-radius:.75rem;background:#ffffff2e;display:flex;align-items:center;justify-content:center;margin-bottom:1.125rem;font-size:1.3rem;flex-shrink:0;box-shadow:0 2px 8px #0000001f}.mk-card-corner-badge,.card-corner-badge{position:absolute;top:1rem;right:1rem;background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;font-size:.6875rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:.25rem .7rem;border-radius:99px;box-shadow:0 2px 10px #f59e0b73}.card-premium .card-subtitle{display:inline-block!important;font-size:.6875rem!important;font-weight:700!important;letter-spacing:.07em!important;text-transform:uppercase!important;opacity:1!important;color:#fff!important;background:linear-gradient(135deg,#f59e0b,#d97706)!important;padding:.2rem .65rem!important;border-radius:99px!important;box-shadow:0 2px 8px #f59e0b66!important;margin-bottom:.75rem!important}.mk-card-badge-band,.card-badge-band{display:inline-flex;align-items:center;gap:.35rem;font-size:.6875rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:.2rem .6rem;border-radius:99px;margin-bottom:.875rem;background:#fff3;border:1px solid rgba(255,255,255,.3)}.mk-card-stars,.card-stars{color:#f59e0b;font-size:1rem;letter-spacing:.12em;margin-bottom:.75rem}.mk-card-reviewer,.card-reviewer{display:flex;flex-direction:column;gap:.15rem;margin-top:1rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.15)}.mk-card-reviewer-name,.card-reviewer-name{font-weight:700;font-size:.9375rem}.mk-card-reviewer-role,.card-reviewer-role{font-size:.8125rem;opacity:.65}.mk-banner.type-info,[class*=banner-info],.mk-banner[data-type=info]{border-left:4px solid var(--dm-primary, #5c3d2e)}.mk-banner.type-success,[class*=banner-success],.mk-banner[data-type=success]{border-left:4px solid var(--dm-success, #22c55e)}.mk-banner.type-warning,[class*=banner-warning],.mk-banner[data-type=warning]{border-left:4px solid var(--dm-warning, #f59e0b)}.mk-stat-number{font-size:5rem;font-weight:900;line-height:1;letter-spacing:-.03em;color:var(--dm-primary, #5c3d2e)}.mk-stat-label{font-size:.9375rem;font-weight:600;opacity:.65;margin-top:.5rem;letter-spacing:.02em;text-transform:uppercase}.mk-footer-inner{max-width:1200px;margin:0 auto;padding:3rem 2rem 1.5rem}.mk-footer-columns{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem;margin-bottom:2.5rem}@media(max-width:900px){.mk-footer-columns{grid-template-columns:repeat(2,1fr)}}@media(max-width:480px){.mk-footer-columns{grid-template-columns:1fr}}.mk-footer-col-title{font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.5;margin:0 0 .75rem}.mk-footer-col-links{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.mk-footer-col-links a{font-size:.875rem;opacity:.75;text-decoration:none;transition:opacity .15s}.mk-footer-col-links a:hover{opacity:1}.mk-footer-bottom{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;padding-top:1.5rem;border-top:1px solid var(--dm-border, rgba(0, 0, 0, .08))}.mk-footer-copyright{font-size:.8125rem;opacity:.5;margin:0}.mk-footer-bottom-right{display:flex;align-items:center;gap:1.25rem}.mk-footer-social{display:flex;gap:.75rem}.mk-footer-social-link{opacity:.5;transition:opacity .15s;font-size:1.125rem}.mk-footer-social-link:hover{opacity:1}.mk-motion-label{display:flex;align-items:center;gap:.4rem;font-size:.75rem;opacity:.5;cursor:pointer;user-select:none}.mk-motion-label:hover{opacity:.75}.dm-static-block{display:contents}.mk-window{border-radius:10px;overflow:hidden;box-shadow:0 16px 56px #0000002e,0 4px 16px #0000001a;background:#fff;border:1px solid rgba(0,0,0,.06)}.mk-window-bar{background:#e8e8e8;padding:10px 16px;display:flex;gap:7px;align-items:center}.mk-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}.mk-dot-red{background:#ff5f57}.mk-dot-amber{background:#febc2e}.mk-dot-green{background:#28c840}.mk-window-body img{width:100%;display:block;max-height:480px;object-fit:cover;object-position:top}.dm-static-block+p{margin-top:.5rem}#site-navbar:not([data-menu-active]) .navbar-link.active:not([data-menu-item-active]){opacity:1!important;font-weight:700!important;position:relative}#site-navbar:not([data-menu-active]) .navbar-link.active:not([data-menu-item-active]):after{content:"";position:absolute;bottom:-3px;left:0;right:0;height:2px;background:currentColor;border-radius:2px;opacity:.6}.mk-divider{border:none;border-top:1px solid var(--dm-border-light, rgba(0, 0, 0, .07));margin:0}.page-body .mk-tabs,.page-body .tabs-wrapper,.page-body>.tabs{padding-left:1.5rem;padding-right:1.5rem}.mk-section-label,.section-label{display:inline-block;font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:.3rem .875rem;border-radius:99px;margin-bottom:1.125rem;background:color-mix(in srgb,var(--dm-primary, #5c3d2e) 10%,transparent);color:var(--dm-primary, #5c3d2e);border:1px solid color-mix(in srgb,var(--dm-primary, #5c3d2e) 20%,transparent)}.page-body .btn-primary,.page-body a.btn-primary{background-color:var(--dm-primary, #8d6e63)!important;color:var(--dm-text-inverse, #ffffff)!important;border:1px solid var(--dm-primary, #8d6e63)!important;text-decoration:none!important;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.page-body .btn-primary:hover,.page-body a.btn-primary:hover{background-color:var(--dm-primary-hover, #6d4c41)!important;color:var(--dm-text-inverse, #ffffff)!important;border-color:var(--dm-primary-hover, #6d4c41)!important;text-decoration:none!important}.page-body .btn-outline,.page-body a.btn-outline{background-color:transparent!important;color:var(--dm-primary, #8d6e63)!important;border:1.5px solid var(--dm-primary, #8d6e63)!important;text-decoration:none!important;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.page-body .btn-outline:hover,.page-body a.btn-outline:hover{background-color:var(--dm-primary, #8d6e63)!important;color:var(--dm-text-inverse, #ffffff)!important;border-color:var(--dm-primary, #8d6e63)!important;text-decoration:none!important}.page-body .btn-ghost,.page-body a.btn-ghost{background-color:transparent!important;color:var(--dm-primary, #8d6e63)!important;border:1px solid transparent!important;text-decoration:none!important;transition:background-color .15s ease,color .15s ease}.page-body .btn-ghost:hover,.page-body a.btn-ghost:hover{background-color:var(--dm-primary-light, rgba(141, 110, 99, .1))!important;color:var(--dm-primary-hover, #6d4c41)!important;text-decoration:none!important}.mk-card-step-number,.card-step-number{font-size:3rem;font-weight:900;line-height:1;letter-spacing:-.04em;opacity:.25;margin-bottom:.75rem}.mk-card-step-title,.card-step-title{font-size:1rem;font-weight:700;margin-bottom:.5rem}.card[data-badge=Enterprise] .mk-card-corner-badge,.card[data-badge=Enterprise] .card-corner-badge{background:linear-gradient(135deg,#1e293b,#334155);box-shadow:0 2px 10px #1e293b80}.card-badge-band-icon{font-size:1.75rem!important}.card-badge-band{padding:14px 18px!important;gap:.5rem}.card-badge-band-label{font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.card-title{font-size:1.2rem!important;font-weight:800!important;letter-spacing:-.015em!important;line-height:1.25!important;margin-bottom:.4rem!important;color:var(--dm-text, #f1f5f9)!important}.card-subtitle{font-size:.8125rem!important;opacity:.7!important;margin-bottom:.5rem!important;font-weight:500!important;color:var(--dm-text, #f1f5f9)!important}.mk-card-body p,.card-body p,.card>p{font-size:.9375rem;line-height:1.65;opacity:.88}.card-gradient-purple{background:linear-gradient(135deg,#ede9fe,#ddd6fe)!important;color:#1e1b4b!important}.card-gradient-blue{background:linear-gradient(135deg,#dbeafe,#bfdbfe)!important;color:#1e3a5f!important}.card-gradient-green{background:linear-gradient(135deg,#d1fae5,#a7f3d0)!important;color:#064e3b!important}.card-gradient-night{background:linear-gradient(135deg,#334155,#1e293b)!important;color:#e2e8f0!important}.card-gradient-ocean-light{background:linear-gradient(135deg,#e0f2fe,#caf0f8)!important;color:#1e293b!important}.card-gradient-ocean-dark{background:linear-gradient(135deg,#0c4a6e,#164e63)!important;color:#e2e8f0!important}.card-gradient-forest-light{background:linear-gradient(135deg,#d1fae5,#c6f6dc)!important;color:#1e293b!important}.card-gradient-forest-dark{background:linear-gradient(135deg,#1a4731,#166534)!important;color:#e2e8f0!important}.card-gradient-sunset-light{background:linear-gradient(135deg,#fde8d8,#fddcc9)!important;color:#1e293b!important}.card-gradient-sunset-dark{background:linear-gradient(135deg,#6b3727,#7c4036)!important;color:#f5ede8!important}.card-gradient-royal-light{background:linear-gradient(135deg,#e8f0fd,#dce8fc)!important;color:#1e293b!important}.card-gradient-royal-dark{background:linear-gradient(135deg,#1e3465,#263d7a)!important;color:#e2e8f0!important}.card-gradient-lemon-light{background:linear-gradient(135deg,#fefce8,#fef9c3)!important;color:#1e293b!important}.card-gradient-lemon-dark{background:linear-gradient(135deg,#5c4d1a,#6b5920)!important;color:#fefce8!important}.card-gradient-silver-light{background:linear-gradient(135deg,#f1f5f9,#e2e8f0)!important;color:#1e293b!important}.card-gradient-silver-dark{background:linear-gradient(135deg,#2d3748,#374151)!important;color:#e2e8f0!important}.card-gradient-charcoal-light{background:linear-gradient(135deg,#eceff1,#e1e7eb)!important;color:#1e293b!important}.card-gradient-charcoal-dark{background:linear-gradient(135deg,#2c3843,#374451)!important;color:#e2e8f0!important}.card-gradient-christmas-light{background:linear-gradient(135deg,#fde8ea,#fdd5d8)!important;color:#1e293b!important}.card-gradient-christmas-dark{background:linear-gradient(135deg,#5c0f1d,#7a1525)!important;color:#fde8ea!important}.card-gradient-unicorn-light{background:linear-gradient(135deg,#f5e8fd,#edd6fb)!important;color:#1e293b!important}.card-gradient-unicorn-dark{background:linear-gradient(135deg,#3d1a5a,#4a2068)!important;color:#f5e8fd!important}.card-gradient-dreamy-light{background:linear-gradient(135deg,#f5ede8,#eeddd4)!important;color:#1e293b!important}.card-gradient-dreamy-dark{background:linear-gradient(135deg,#3d2820,#503328)!important;color:#f5ede8!important}.card-gradient-grayve-light{background:linear-gradient(135deg,#e0f7f9,#cbf2f5)!important;color:#1e293b!important}.card-gradient-grayve-dark{background:linear-gradient(135deg,#00363d,#00444d)!important;color:#e0f7f9!important}.card-gradient-mint-light{background:linear-gradient(135deg,#d8f5ea,#c5efdd)!important;color:#1e293b!important}.card-gradient-mint-dark{background:linear-gradient(135deg,#134d33,#195f3f)!important;color:#d8f5ea!important}.card-gradient-wedding-light{background:linear-gradient(135deg,#faf3e0,#f5e9c7)!important;color:#1e293b!important}.card-gradient-wedding-dark{background:linear-gradient(135deg,#5c4418,#6f5320)!important;color:#faf3e0!important}.card-gradient-slate{--dm-card-g-start: #475569;--dm-card-g-end: #1e293b}.card-gradient-dusk{--dm-card-g-start: #7c3aed;--dm-card-g-end: #db2777}.card-gradient-sunset{--dm-card-g-start: #f59e0b;--dm-card-g-end: #ec4899}.card-gradient-rose{--dm-card-g-start: #fb7185;--dm-card-g-end: #e11d48}.card-gradient-gold{--dm-card-g-start: #f59e0b;--dm-card-g-end: #b45309}.card-gradient-fire{--dm-card-g-start: #ef4444;--dm-card-g-end: #fbbf24}.page-body .card.dm-card-gradient.card-gradient-sunset .card-header,.page-body .card.dm-card-gradient.card-gradient-rose .card-header,.page-body .card.dm-card-gradient.card-gradient-gold .card-header,.page-body .card.dm-card-gradient.card-gradient-fire .card-header{color:#1e293b!important}.page-body .card.dm-card-gradient[class*=-light] .card-header,.page-body .card.dm-card-gradient[class*=-dark] .card-header,.page-body .card.dm-card-gradient.card-gradient-purple .card-header,.page-body .card.dm-card-gradient.card-gradient-blue .card-header,.page-body .card.dm-card-gradient.card-gradient-green .card-header,.page-body .card.dm-card-gradient.card-gradient-night .card-header{background:transparent!important;color:inherit!important;border-bottom:1px solid rgba(0,0,0,.08)}.card[class*=card-gradient-] .card-title,.card[class*=card-gradient-] .card-subtitle{color:inherit!important}.card[class*=gradient] .mk-window-bar,.card[data-gradient] .mk-window-bar{background:#00000040}.card[class*=gradient] .mk-dot-red{background:#ff5f57b3}.card[class*=gradient] .mk-dot-amber{background:#febc2eb3}.card[class*=gradient] .mk-dot-green{background:#28c840b3}.hero .card .mk-listgroup-item,.hero .card .list-group-item{padding-top:.45rem;padding-bottom:.45rem;font-size:.9rem}.card .dm-static-block{display:block;width:100%}.card .mk-window{margin-bottom:0}.wf-feature{display:flex;align-items:center;gap:14px;padding:14px 16px;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:8px;box-shadow:0 1px 3px #0f172a0a;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.wf-feature:hover{border-color:var(--dm-border-dark, #475569);box-shadow:0 6px 18px #0f172a14;transform:translateY(-1px)}.wf-feature-icon{flex-shrink:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:8px;font-size:1.1rem}.wf-feature-text{font-size:.9rem;font-weight:500;color:var(--dm-text, #1e293b);line-height:1.4;flex:1 1 auto}.plugin-card{display:flex;flex-direction:column;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:12px;overflow:hidden;box-shadow:0 2px 6px #0f172a0d;text-decoration:none!important;color:inherit!important;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;height:100%;min-height:340px}.plugin-card:hover{transform:translateY(-3px);box-shadow:0 18px 40px #0f172a1f;border-color:var(--dm-border-dark, #475569)}.plugin-card-cover{position:relative;width:100%;height:150px;background-size:cover;background-position:center;background-color:var(--dm-background-alt, #e2e8f0);flex-shrink:0}.plugin-card-cover:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#0000001a,#0f172a8c)}.plugin-card-tier-badge{position:absolute;top:12px;right:12px;z-index:2;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:4px 10px;border-radius:20px;color:#1e293b;background:#fff;box-shadow:0 2px 8px #0f172a40}.plugin-card[data-tier=free] .plugin-card-tier-badge:before{content:"Free"}.plugin-card[data-tier=premium] .plugin-card-tier-badge:before{content:"Premium"}.plugin-card[data-tier=premium] .plugin-card-tier-badge{color:#f1f5f9;background:linear-gradient(135deg,#475569,#1e293b)}.plugin-card-body{flex:1 1 auto;padding:20px;display:flex;flex-direction:column;gap:10px;background:var(--dm-card-bg, #fff);color:var(--dm-text, #1e293b)}.plugin-card-head{display:flex;align-items:center;gap:12px}.plugin-card-icon{flex-shrink:0;width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:10px;font-size:1.3rem;box-shadow:0 2px 6px #0f172a2e}.plugin-card-title{font-size:1.15rem!important;font-weight:700!important;color:var(--dm-text, #1e293b)!important;line-height:1.2!important;margin:0!important}.plugin-card-desc{font-size:.88rem!important;color:var(--dm-text-secondary, #475569)!important;line-height:1.5!important;margin:0!important;flex:1 1 auto}.plugin-card-cta{display:inline-flex;align-items:center;gap:4px;font-size:.82rem;font-weight:600;color:var(--dm-text-secondary, #475569);margin-top:8px;transition:color .15s ease,gap .15s ease}.plugin-card:hover .plugin-card-cta{color:var(--dm-text, #1e293b);gap:8px}.page-body a:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not([data-menu-hover] a):not([data-menu-active] a){color:var(--cms-link-color, var(--dm-link, var(--dm-primary, var(--dm-text, #5d4037))))!important;text-decoration:underline;text-decoration-color:var(--dm-border, rgba(0, 0, 0, .2));text-underline-offset:3px;text-decoration-thickness:1.5px;transition:color .15s ease,text-decoration-color .15s ease}.page-body a:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not([data-menu-hover] a):not([data-menu-active] a):hover{color:var(--cms-link-hover-color, var(--dm-link-hover, var(--dm-primary-hover, var(--dm-text, #3e2723))))!important;text-decoration-color:var(--cms-link-color, var(--dm-link, var(--dm-primary, currentColor)))}.page-body .dm-card-gradient .card-body a:not([class*=btn]){color:var(--dm-link, var(--dm-primary, var(--dm-text, #5d4037)))!important}.page-body .dm-card-gradient .card-body a:not([class*=btn]):hover{color:var(--dm-link-hover, var(--dm-primary-hover, var(--dm-text, #3e2723)))!important}html body .page-body a[href]:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not(.dm-breadcrumbs-link):not([data-menu-hover] a):not([data-menu-active] a){color:var(--cms-link-color, var(--dm-link, var(--dm-primary, #8d6e63)))!important}html body .page-body a[href]:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not(.dm-breadcrumbs-link):not([data-menu-hover] a):not([data-menu-active] a):hover{color:var(--cms-link-hover-color, var(--dm-link-hover, var(--dm-primary-hover, #6d4c41)))!important}.page-body .hero-cta:not(.hero .hero-cta) a:not([class*=btn]),.page-body>* .hero-cta a:not([class*=btn]){color:var(--dm-primary, #8d6e63)!important;text-decoration:none!important;background:transparent;border:1px solid var(--dm-border, rgba(141, 110, 99, .35));padding:.55rem 1.35rem;border-radius:6px;font-weight:500;display:inline-flex;align-items:center;gap:.4rem;transition:background .15s ease,border-color .15s ease,color .15s ease}.page-body .hero-cta:not(.hero .hero-cta) a:not([class*=btn]):hover,.page-body>* .hero-cta a:not([class*=btn]):hover{color:var(--dm-primary-hover, #6d4c41)!important;background:var(--dm-primary-light, rgba(141, 110, 99, .08));border-color:var(--dm-primary, #8d6e63)}.feature-image{width:100%;max-height:420px;object-fit:cover;border-radius:12px;box-shadow:0 12px 36px #0f172a26;display:block}.page-body .grid>.col:has(>.feature-image),.page-body .grid>.col:has(.reveal>.feature-image),.page-body .grid>.col:has(.feature-image){display:flex;flex-direction:column;justify-content:center}.code-label{display:inline-flex;align-items:center;gap:8px;font-family:Fira Code,Consolas,Monaco,monospace;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#f1f5f9bf;background:#0f172a8c;padding:6px 12px;border-radius:6px 6px 0 0;border-bottom:1px solid rgba(241,245,249,.12)}.code-label+.code-block{margin-top:0!important;border-top-left-radius:0;border-top-right-radius:0}.code-block{display:block;background:#0f172a!important;color:#e2e8f0!important;padding:18px 20px!important;border-radius:8px;overflow-x:auto;font-size:.85rem;line-height:1.55;margin:0 0 20px;box-shadow:inset 0 0 0 1px #f1f5f914;white-space:pre;font-family:Fira Code,Consolas,Monaco,Courier New,monospace}.code-block code{background:transparent!important;color:inherit!important;padding:0!important;font-family:inherit!important;font-size:inherit;white-space:pre;display:block}.page-body .card-body>pre>code,.page-body .card-body pre.code-block>code{color:#e2e8f0!important}.run-option-card{display:flex;flex-direction:column;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:14px;overflow:hidden;box-shadow:0 4px 14px #0f172a14;height:100%;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.run-option-card:hover{transform:translateY(-3px);box-shadow:0 20px 48px #0f172a24;border-color:var(--dm-border-dark, #475569)}.run-option-banner{position:relative;width:100%;height:180px;background-size:cover;background-position:center;background-color:var(--dm-background-alt, #e2e8f0);flex-shrink:0}.run-option-banner:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#0f172a1a,#0f172ab3)}.run-option-icon-chip{position:absolute;bottom:-26px;left:24px;z-index:2;width:56px;height:56px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:14px;font-size:1.6rem;box-shadow:0 8px 20px #0f172a4d;border:3px solid var(--dm-card-bg, #fff)}.run-option-card-body{flex:1 1 auto;padding:40px 24px 24px;display:flex;flex-direction:column;gap:10px}.run-option-title{font-size:1.5rem!important;font-weight:800!important;color:var(--dm-text, #1e293b)!important;margin:0!important;line-height:1.15!important;letter-spacing:-.01em!important}.run-option-sub{font-size:.9rem!important;font-weight:600!important;color:var(--dm-primary, #5d4037)!important;margin:0 0 8px!important;text-transform:uppercase;letter-spacing:.06em}.run-option-content{flex:1 1 auto;font-size:.92rem;line-height:1.55;color:var(--dm-text-secondary, #475569)}.run-option-content p{margin:0 0 12px}.run-option-content .run-option-intro{font-size:.98rem;color:var(--dm-text, #1e293b);font-weight:500;margin-bottom:16px}.run-option-content .run-option-body-label{font-size:.82rem;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-primary, #5d4037);margin-bottom:8px}.run-option-content .run-option-req{font-size:.82rem;color:var(--dm-text-muted, #64748b);margin-top:14px}.run-option-content .code-block{margin:8px 0 14px}.run-option-list{list-style:none;padding:0;margin:0 0 14px;display:flex;flex-direction:column;gap:8px}.run-option-list li{display:flex;align-items:center;gap:10px;font-size:.9rem;color:var(--dm-text, #1e293b)}.run-option-list li [data-icon]{color:var(--dm-primary, #5d4037);flex-shrink:0}.run-option-ctas{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px;padding-top:20px;border-top:1px solid var(--dm-border, #e2e8f0)}.run-option-ctas .btn{flex:1 1 auto;text-align:center;white-space:nowrap;min-width:fit-content}.quickstart-step{position:relative;padding:28px 22px 24px;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:12px;box-shadow:0 2px 8px #0f172a0d;overflow:hidden;height:100%;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.quickstart-step:hover{transform:translateY(-3px);box-shadow:0 16px 36px #0f172a1f;border-color:var(--dm-border-dark, #475569)}.quickstart-step-number{position:absolute;top:8px;right:14px;font-size:5rem;font-weight:900;line-height:1;color:color-mix(in srgb,var(--dm-text) 8%,transparent);font-variant-numeric:tabular-nums;pointer-events:none;user-select:none}.quickstart-step-icon{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:10px;font-size:1.3rem;margin-bottom:14px;box-shadow:0 4px 12px #0f172a2e;position:relative;z-index:1}.quickstart-step-title{font-size:1.1rem!important;font-weight:800!important;color:var(--dm-text, #1e293b)!important;margin:0 0 8px!important;line-height:1.2!important;letter-spacing:-.01em!important;position:relative;z-index:1}.quickstart-step-desc{font-size:.86rem;line-height:1.55;color:var(--dm-text-secondary, #475569);margin:0;position:relative;z-index:1}:not(:defined){visibility:hidden}.dm-collection-browser{display:block;margin:1.5rem 0}.dm-collection-browser.dm-cb-hydrated .dm-cb-fallback{display:none}.dm-cb-header{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:space-between;margin-bottom:1rem}.dm-cb-search{flex:1 1 240px;min-width:200px}.dm-cb-search-input{width:100%;padding:.5rem .75rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);color:var(--dm-text, #111827);font-size:.95rem}.dm-cb-sort{display:flex;align-items:center;gap:.5rem;flex:0 0 auto}.dm-cb-sort-label{font-size:.85rem;color:var(--dm-text-muted, #6b7280);margin:0}.dm-cb-sort-select{padding:.45rem .6rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);color:var(--dm-text, #111827)}.dm-cb-sort-dir{width:2rem;height:2rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);cursor:pointer;font-weight:700}.dm-cb-sort-dir:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-layout{display:grid;grid-template-columns:minmax(220px,1fr) 3fr;gap:1.5rem;align-items:start}@media(max-width:768px){.dm-cb-layout{grid-template-columns:1fr}.dm-cb-filter-rail{border:1px solid var(--dm-border, #e5e7eb);border-radius:var(--dm-radius-md, 6px);padding:.75rem}}.dm-cb-filter-rail{padding:.5rem 0;font-size:.92rem}.dm-cb-filter-heading{margin:0 0 .75rem;font-size:.95rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--dm-text-muted, #6b7280)}.dm-cb-filter{margin-bottom:1rem;display:flex;flex-direction:column;gap:.35rem}.dm-cb-filter-label{font-weight:600;font-size:.85rem;color:var(--dm-text, #111827)}.dm-cb-text,.dm-cb-select,.dm-cb-range input{width:100%;padding:.4rem .55rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);color:var(--dm-text, #111827);font-size:.9rem}.dm-cb-range{display:flex;align-items:center;gap:.4rem}.dm-cb-range input{flex:1;min-width:0}.dm-cb-multiselect{display:flex;flex-direction:column;gap:.3rem;max-height:11rem;overflow-y:auto;padding:.4rem .55rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px)}.dm-cb-check{display:flex;align-items:center;gap:.4rem;font-size:.88rem;cursor:pointer;margin:0}.dm-cb-filter-reset{width:100%;margin-top:.5rem;padding:.45rem .6rem;border:1px solid var(--dm-border, #d1d5db);background:transparent;color:var(--dm-text, #374151);border-radius:var(--dm-radius-md, 6px);cursor:pointer;font-size:.85rem}.dm-cb-filter-reset:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-body{min-height:4rem}.dm-cb-pagination{display:flex;align-items:center;justify-content:center;gap:1rem;margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--dm-border, #e5e7eb)}.dm-cb-page-info{font-size:.88rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-page-prev[disabled],.dm-cb-page-next[disabled]{opacity:.45;cursor:not-allowed}.dm-cb-chips{display:flex;flex-wrap:wrap;gap:.35rem;padding:.1rem 0}.dm-cb-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .6rem;border:1px solid var(--dm-border, #d1d5db);background:var(--dm-background, #fff);color:var(--dm-text, #111827);border-radius:999px;cursor:pointer;font-size:.82rem;transition:background-color .12s ease,border-color .12s ease}.dm-cb-chip:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-chip-active{background:var(--dm-primary, #2563eb);color:var(--dm-primary-text, #fff);border-color:var(--dm-primary, #2563eb)}.dm-cb-chip-count{font-size:.75rem;opacity:.75;font-variant-numeric:tabular-nums}.dm-cb-chip-active .dm-cb-chip-count{opacity:.85}.dm-cb-slider{position:relative;height:1.5rem;margin:.5rem .25rem}.dm-cb-slider-track{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);height:4px;background:var(--dm-border, #e5e7eb);border-radius:2px}.dm-cb-slider-fill{position:absolute;top:0;bottom:0;background:var(--dm-primary, #2563eb);border-radius:2px}.dm-cb-slider-handle{position:absolute;inset:0;width:100%;height:100%;margin:0;background:transparent;pointer-events:none;-webkit-appearance:none;appearance:none}.dm-cb-slider-handle::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;height:1rem;width:1rem;border-radius:50%;background:var(--dm-primary, #2563eb);border:2px solid var(--dm-background, #fff);box-shadow:0 1px 3px #00000026;pointer-events:auto;cursor:grab}.dm-cb-slider-handle::-moz-range-thumb{height:1rem;width:1rem;border-radius:50%;background:var(--dm-primary, #2563eb);border:2px solid var(--dm-background, #fff);box-shadow:0 1px 3px #00000026;pointer-events:auto;cursor:grab}.dm-cb-range-inputs{display:flex;gap:.4rem;align-items:center}.dm-cb-saved{position:relative}.dm-cb-saved-menu{position:absolute;right:0;top:calc(100% + .25rem);min-width:12rem;padding:.5rem;background:var(--dm-background, #fff);border:1px solid var(--dm-border, #e5e7eb);border-radius:var(--dm-radius-md, 6px);box-shadow:0 8px 24px #0f172a1f;z-index:20}.dm-cb-saved-empty{margin:0 0 .5rem;font-size:.85rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-saved-item{display:flex;align-items:center;gap:.4rem;margin-bottom:.25rem}.dm-cb-saved-apply{flex:1;text-align:left;padding:.35rem .5rem;background:transparent;border:0;border-radius:var(--dm-radius-md, 6px);cursor:pointer;font-size:.88rem;color:var(--dm-text, #111827)}.dm-cb-saved-apply:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-saved-del{width:1.5rem;height:1.5rem;padding:0;background:transparent;border:0;color:var(--dm-text-muted, #9ca3af);cursor:pointer;font-size:1.1rem}.dm-cb-saved-del:hover{color:var(--dm-danger, #dc2626)}.dm-cb-saved-actions{border-top:1px solid var(--dm-border, #e5e7eb);padding-top:.5rem;margin-top:.5rem}.dm-cb-saved-create{width:100%;padding:.45rem .6rem;font-size:.85rem}.dm-cb-export{padding:.45rem .7rem;font-size:.85rem}.dm-cb-empty-clear{margin-top:.75rem}.dm-cb-scroll-sentinel{text-align:center;padding:1rem 0;font-size:.85rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-scroll-end{text-align:center;margin:1rem 0 0;font-size:.85rem;color:var(--dm-text-muted, #9ca3af);font-style:italic}.dm-cb-block-loading{text-align:center;padding:2rem 0;color:var(--dm-text-muted, #9ca3af);font-style:italic}.dm-cb-drawer-toggle{display:none;align-items:center;gap:.4rem;padding:.45rem .75rem;font-size:.88rem}.dm-cb-drawer-count{font-variant-numeric:tabular-nums;font-weight:600;color:var(--dm-primary, #2563eb)}.dm-cb-drawer-count:empty{display:none}@media(max-width:768px){.dm-cb-drawer-toggle{display:inline-flex}.dm-cb-filter-rail{position:fixed;top:0;left:-100%;width:85%;max-width:22rem;height:100vh;background:var(--dm-background, #fff);border-right:1px solid var(--dm-border, #e5e7eb);box-shadow:4px 0 16px #00000014;padding:1.25rem;z-index:100;overflow-y:auto;transition:left .22s ease}.dm-cb-drawer-open .dm-cb-filter-rail{left:0}.dm-cb-drawer-open:before{content:"";position:fixed;inset:0;background:#00000059;z-index:99}}.dm-file-thumb{max-width:180px;max-height:120px;border-radius:var(--dm-radius-md, 6px);border:1px solid var(--dm-border, #e5e7eb);display:inline-block;object-fit:cover}.dm-cb-transitions{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.5rem;font-size:.85rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-transitions:empty{display:none}.dm-cb-transition-btn{padding:.35rem .7rem;font-size:.82rem}.dm-menu-sep,.footer-sep{list-style:none}.dm-menu-sep hr,.footer-sep hr{border:0;border-top:1px solid var(--dm-border, rgba(128, 128, 128, .35));margin:.4rem 0}.dm-menu-spacer{list-style:none;pointer-events:none;padding:0;margin:0;border:0}.dm-menu-spacer--xs{height:var(--dm-space-1, .25rem)}.dm-menu-spacer--sm{height:var(--dm-space-2, .5rem)}.dm-menu-spacer--md{height:var(--dm-space-4, 1rem)}.dm-menu-spacer--lg{height:var(--dm-space-6, 1.5rem)}.dm-menu-spacer--xl{height:var(--dm-space-10, 2.5rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--xs,.navbar-nav>.dm-menu-spacer--xs{height:auto;width:var(--dm-space-1, .25rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--sm,.navbar-nav>.dm-menu-spacer--sm{height:auto;width:var(--dm-space-2, .5rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--md,.navbar-nav>.dm-menu-spacer--md{height:auto;width:var(--dm-space-4, 1rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--lg,.navbar-nav>.dm-menu-spacer--lg{height:auto;width:var(--dm-space-6, 1.5rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--xl,.navbar-nav>.dm-menu-spacer--xl{height:auto;width:var(--dm-space-10, 2.5rem)}.dm-menu--has-flex-spacer>ul{display:flex;flex-direction:column}.dm-menu--has-flex-spacer.dm-menu--horizontal>ul{flex-direction:row;align-items:center}.dm-menu-spacer--flex{flex:1 1 auto;height:auto;width:auto}.dm-menu-floating .dm-menu-spacer--flex{min-height:var(--dm-space-4, 1rem)}@media(max-width:768px){.dm-menu--has-flex-spacer.dm-menu--horizontal>ul{flex-wrap:wrap}}#site-navbar .navbar-dropdown-divider{background:var(--dm-border, rgba(128, 128, 128, .5));opacity:.8}.dm-menu-badge{display:inline-block;margin-left:6px;padding:1px 7px;font-size:.7em;font-weight:700;line-height:1.4;border-radius:999px;background:var(--dm-text-muted);color:var(--dm-text-inverse, #fff);vertical-align:middle}.dm-nav-pill{border-radius:999px;padding:6px 14px;font-weight:600}.dm-nav-pill--outline{background:transparent!important;border:1px solid currentColor}@media(max-width:992px){#site-navbar .navbar-toggle{order:0;margin-right:var(--dm-space-2)}#site-navbar .navbar-brand{order:1}#site-navbar .navbar-collapse{position:fixed;top:0;left:0;bottom:0;width:86vw;max-width:340px;z-index:1100;margin:0;padding:var(--dm-space-3) 0 var(--dm-space-6);background:var(--dm-navbar-bg, var(--dm-surface));border-top:none;border-right:1px solid var(--dm-border);box-shadow:4px 0 18px #00000059;transform:translate(-100%);transition:transform .25s ease;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}#site-navbar .navbar-collapse.show{transform:translate(0)}body.dm-drawer-open #site-navbar{z-index:1100}#site-navbar .navbar-nav{max-height:none;overflow:visible}#site-navbar .navbar-dropdown-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--dm-space-3) var(--dm-space-4);font-size:var(--dm-font-size-base)}#site-navbar .navbar-caret{margin-left:auto;flex:none;width:16px;height:16px;opacity:.9}#site-navbar .navbar-dropdown-menu{position:static;display:none;min-width:0;width:100%;margin:0;padding:0;border:0;border-radius:0;box-shadow:none;background:color-mix(in srgb,var(--dm-text) 8%,transparent)}#site-navbar .navbar-dropdown.open>.navbar-dropdown-menu{display:block}#site-navbar .navbar-dropdown-item{padding-left:calc(var(--dm-space-4) + var(--dm-space-5))}.dm-navbar-backdrop{position:fixed;inset:0;z-index:1090;background:#00000073;border:0;padding:0;cursor:pointer}body.dm-drawer-open{overflow:hidden}}.dm-embed{margin:1.5rem 0}.dm-embed-frame{overflow:hidden;border-radius:8px;background:#000}.dm-embed-caption{margin-top:.5rem;font-size:.85rem;color:var(--dm-text-muted, #6b7280);text-align:center}.dm-embed-blocked{margin:1.5rem 0;padding:.75rem 1rem;border:1px dashed var(--dm-border, #d1d5db);border-radius:8px;background:var(--dm-background-alt, #f9fafb);color:var(--dm-text-muted, #6b7280);font-size:.9rem}.dm-menu-missing{margin:1rem 0;padding:.6rem .9rem;border:1px dashed var(--dm-border, #d1d5db);border-radius:8px;background:var(--dm-background-alt, #f9fafb);color:var(--dm-text-muted, #6b7280);font-size:.9rem}.dm-embed-blocked code{font-family:var(--dm-font-mono, monospace);font-size:.85em}.dm-menu-floating{overflow:auto;overscroll-behavior:contain;background:var(--dm-surface);color:var(--dm-text);border:1px solid var(--dm-border);border-radius:var(--dm-radius-md, 8px);box-shadow:var(--dm-shadow-lg);scrollbar-width:thin;scrollbar-color:var(--dm-border) transparent}.dm-menu-floating[style*=--dm-menu-accent]{border-left:3px solid var(--dm-menu-accent)}.dm-menu-floating[data-float-anchor=TR][style*=--dm-menu-accent],.dm-menu-floating[data-float-anchor=BR][style*=--dm-menu-accent],.dm-menu-floating[data-float-anchor=R][style*=--dm-menu-accent]{border-left:1px solid var(--dm-menu-accent);border-right:3px solid var(--dm-menu-accent)}.dm-menu-floating[style*=--dm-menu-panel-opacity]{background:color-mix(in srgb,var(--dm-surface) calc(var(--dm-menu-panel-opacity) * 100%),transparent);backdrop-filter:blur(8px)}.dm-menu-float-bar{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:var(--dm-space-2, .5rem);padding:var(--dm-space-2, .5rem) var(--dm-space-3, .75rem);background:inherit;border-bottom:1px solid var(--dm-border);border-radius:inherit;border-bottom-left-radius:0;border-bottom-right-radius:0}.dm-menu-float-title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;font-weight:600;letter-spacing:.02em;color:var(--dm-text-muted, #6b7280)}.dm-menu-float-grip{flex:0 0 auto;width:10px;height:16px;background-image:radial-gradient(currentColor 1px,transparent 1px);background-size:5px 5px;background-position:0 2px;color:var(--dm-text-muted, #6b7280);opacity:.6}.dm-menu-floating[data-float-movable] .dm-menu-float-bar{cursor:grab}.dm-menu-floating.is-dragging,.dm-menu-floating.is-dragging .dm-menu-float-bar{cursor:grabbing}.dm-menu-floating.is-dragging{user-select:none}.dm-menu-floating[data-float-movable] .dm-menu-float-bar{touch-action:none}.dm-menu-float-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;border-radius:var(--dm-radius-sm, 4px);background:transparent;color:var(--dm-text);cursor:pointer}.dm-menu-float-toggle:hover{background:var(--dm-hover-bg, rgba(128, 128, 128, .14))}.dm-menu-float-toggle:focus-visible{outline:2px solid var(--dm-primary);outline-offset:1px}.dm-menu-float-icon{position:relative;width:16px;height:2px;background:currentColor;border-radius:1px}.dm-menu-float-icon:before,.dm-menu-float-icon:after{content:"";position:absolute;left:0;width:100%;height:2px;background:currentColor;border-radius:1px}.dm-menu-float-icon:before{top:-5px}.dm-menu-float-icon:after{top:5px}.dm-menu-floating.is-collapsed{width:auto!important;max-height:none!important;overflow:visible;padding:0;background:transparent;border:0;box-shadow:none;backdrop-filter:none;resize:none;min-width:0;min-height:0}.dm-menu-floating.is-collapsed>*:not(.dm-menu-float-bar),.dm-menu-floating.is-collapsed .dm-menu-float-grip,.dm-menu-floating.is-collapsed .dm-menu-float-title{display:none}#site-navbar.dm-menu-floating.is-collapsed>*:not(.dm-menu-float-bar){display:none}#site-navbar.dm-menu-floating.is-collapsed{width:auto!important;max-height:none!important;padding:0;background:transparent;border:0;box-shadow:none;backdrop-filter:none}.dm-menu-floating.is-collapsed .dm-menu-float-bar{padding:0;border:0;background:transparent;cursor:default}.dm-menu-floating.is-collapsed .dm-menu-float-toggle{width:44px;height:44px;border-radius:50%;background:var(--dm-surface);border:1px solid var(--dm-menu-accent, var(--dm-border));box-shadow:var(--dm-shadow-lg)}.navbar-transparent,.dm-menu--variant-transparent,.dm-menu-floating.navbar-transparent,.dm-menu-floating.dm-menu--variant-transparent{background:transparent;border-color:transparent;box-shadow:none;backdrop-filter:none}.navbar-transparent.is-collapsed .dm-menu-float-toggle,.dm-menu--variant-transparent.is-collapsed .dm-menu-float-toggle{background:var(--dm-surface)}.navbar-transparent .dm-menu-float-bar,.dm-menu--variant-transparent .dm-menu-float-bar{border-bottom-color:transparent}.dm-menu-floating[data-float-resizable]:not(.is-collapsed){resize:both;min-width:120px;min-height:48px}@media(max-width:768px){.dm-menu-floating{position:static!important;inset:auto!important;width:auto!important;max-height:none!important;transform:none!important;resize:none!important}.dm-menu-floating[data-float-movable] .dm-menu-float-bar{cursor:default}.dm-menu-floating[data-float-movable] .dm-menu-float-grip{display:none}}.dm-menu--vertical ul,.dm-menu--horizontal ul{list-style:none;margin:0;padding:0}.dm-menu--vertical>ul{display:flex;flex-direction:column;gap:2px}.dm-menu--vertical>ul>li>a{display:block;padding:.4rem .75rem;border-radius:var(--dm-radius-md, 6px);text-decoration:none}.dm-menu--vertical>ul>li>a:hover{background:color-mix(in srgb,var(--dm-text) 8%,transparent)}.dm-menu--vertical ul ul{margin-left:.75rem;border-left:1px solid var(--dm-border, rgba(128, 128, 128, .35));padding-left:.4rem}.dm-menu--horizontal>ul{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem 1rem}.dm-menu--horizontal>ul>li{position:relative}.dm-menu--horizontal>ul>li>a{display:inline-block;padding:.35rem .5rem;text-decoration:none}.dm-menu--horizontal.dm-menu--align-left>ul{justify-content:flex-start}.dm-menu--horizontal.dm-menu--align-centre>ul{justify-content:center}.dm-menu--horizontal.dm-menu--align-right>ul{justify-content:flex-end}.dm-menu--horizontal.dm-menu--align-spread>ul{justify-content:space-between}.dm-menu--horizontal>ul>li>ul{position:absolute;top:100%;left:0;z-index:40;display:none;min-width:180px;padding:.35rem 0;background:var(--dm-surface);border:1px solid var(--dm-border);border-radius:var(--dm-radius-md, 8px);box-shadow:var(--dm-shadow-lg)}.dm-menu--horizontal>ul>li:hover>ul,.dm-menu--horizontal>ul>li:focus-within>ul{display:block}.dm-menu--horizontal>ul>li>ul a{display:block;padding:.35rem .9rem;text-decoration:none}@media(max-width:768px){.dm-menu--horizontal>ul{flex-direction:column;align-items:stretch}.dm-menu--horizontal>ul>li>ul{position:static;display:block;border:0;box-shadow:none;padding-left:.75rem}}:root{--dm-vnav-width: 240px;--dm-vnav-collapsed-width: 64px;--dm-vnav-edge: 10px}.dm-navbar-override,.dm-contents-override,p:has(>.dm-navbar-override:only-child),p:has(>.dm-contents-override:only-child){display:none}#site-navbar.dm-nav-scroll-hide{transition:transform .25s ease}#site-navbar.dm-nav-scroll-hide.dm-nav-scrolled-away{transform:translateY(-100%)}@media(prefers-reduced-motion:reduce){#site-navbar.dm-nav-scroll-hide,body.dm-vnav-autohide #site-navbar.dm-nav-vertical{transition:none!important}}html.dm-reduced-motion #site-navbar.dm-nav-scroll-hide,html.dm-reduced-motion body.dm-vnav-autohide #site-navbar.dm-nav-vertical{transition:none!important}@media(min-width:993px){#site-navbar.dm-nav-vertical:not(.dm-menu-floating){position:fixed;top:0;bottom:0;height:100vh;height:100dvh;width:var(--dm-vnav-width);flex-direction:column;flex-wrap:nowrap;align-items:stretch;justify-content:flex-start;gap:var(--dm-space-2);padding:var(--dm-space-4) var(--dm-space-3);overflow-y:auto;overscroll-behavior:contain;border-bottom:none;z-index:100}#site-navbar.dm-nav-vertical-left:not(.dm-menu-floating){left:0;right:auto;border-right:1px solid var(--dm-border)}#site-navbar.dm-nav-vertical-right:not(.dm-menu-floating){right:0;left:auto;border-left:1px solid var(--dm-border)}body.dm-vnav-left{padding-left:var(--dm-vnav-width)}body.dm-vnav-right{padding-right:var(--dm-vnav-width)}body.dm-vnav-collapsed.dm-vnav-left{padding-left:var(--dm-vnav-collapsed-width)}body.dm-vnav-collapsed.dm-vnav-right{padding-right:var(--dm-vnav-collapsed-width)}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical:not(.dm-menu-floating){width:var(--dm-vnav-collapsed-width);padding-left:var(--dm-space-2);padding-right:var(--dm-space-2);overflow:visible}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-link,body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-toggle,body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-brand-text{font-size:0!important;justify-content:center!important;gap:0!important;padding-left:0!important;padding-right:0!important}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-link>svg:first-child,body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-toggle>svg:first-child{width:20px;height:20px;margin:0}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-toggle>svg:last-child:not(:first-child),body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-caret{display:none}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical [data-initial]:not(:has(>svg)):before{content:attr(data-initial);font-size:.9rem;font-weight:600}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown{position:relative!important}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-menu{position:absolute!important;top:0;width:auto!important;min-width:220px!important;padding:var(--dm-space-1) 0!important;background:var(--dm-surface)!important;border:1px solid var(--dm-border)!important;border-radius:var(--dm-radius-md, 6px)!important;box-shadow:var(--dm-shadow-lg)!important;z-index:101}body.dm-vnav-collapsed.dm-vnav-right #site-navbar .navbar-dropdown-menu{right:calc(100% + 8px);left:auto}body.dm-vnav-collapsed.dm-vnav-left #site-navbar .navbar-dropdown-menu{left:calc(100% + 8px);right:auto}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-menu .navbar-dropdown-item{display:flex!important;align-items:center;gap:var(--dm-space-2);padding:var(--dm-space-2) var(--dm-space-3)!important;font-size:var(--dm-font-size-sm)!important;white-space:nowrap}#site-navbar .dm-nav-collapse-toggle{display:none;align-self:flex-end;width:28px;height:28px;padding:0;border:1px solid var(--dm-border);border-radius:6px;background:transparent;color:var(--dm-text-secondary);cursor:pointer}body.dm-vnav-collapsible #site-navbar .dm-nav-collapse-toggle{display:inline-flex;align-items:center;justify-content:center}body.dm-vnav-collapsed #site-navbar .dm-nav-collapse-toggle{align-self:center}#site-navbar .dm-nav-collapse-toggle:hover{color:var(--dm-text);border-color:var(--dm-primary)}#site-navbar .dm-nav-collapse-toggle svg{width:16px;height:16px}body.dm-vnav-autohide.dm-vnav-left,body.dm-vnav-autohide.dm-vnav-right{padding-left:0;padding-right:0}body.dm-vnav-autohide #site-navbar.dm-nav-vertical:not(.dm-menu-floating){transition:transform .25s ease,box-shadow .25s ease;box-shadow:none}body.dm-vnav-autohide.dm-vnav-right #site-navbar.dm-nav-vertical:not(.dm-menu-floating){transform:translate(calc(100% - var(--dm-vnav-edge)))}body.dm-vnav-autohide.dm-vnav-left #site-navbar.dm-nav-vertical:not(.dm-menu-floating){transform:translate(calc(-100% + var(--dm-vnav-edge)))}body.dm-vnav-autohide #site-navbar.dm-nav-vertical:not(.dm-menu-floating):is(:hover,:focus-within,.dm-nav-revealed){transform:none;box-shadow:var(--dm-shadow-lg)}#site-navbar.dm-nav-vertical .navbar-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:var(--dm-space-2);width:100%;min-height:100%;padding:0;margin:0}#site-navbar.dm-nav-vertical .navbar-toggle{display:none!important}#site-navbar.dm-nav-vertical .navbar-brand{padding:0 var(--dm-space-2) var(--dm-space-3);margin:0;width:100%}#site-navbar.dm-nav-vertical .navbar-collapse{display:flex!important;flex-direction:column!important;align-items:stretch!important;width:100%!important;flex-grow:1!important;padding:0!important;border:none!important}#site-navbar.dm-nav-vertical .navbar-nav{display:flex!important;flex-direction:column!important;align-items:stretch!important;justify-content:flex-start!important;gap:2px!important;width:100%!important;flex:none!important;margin:0!important;padding:0!important}#site-navbar.dm-nav-vertical .navbar-nav li,#site-navbar.dm-nav-vertical .navbar-nav .navbar-item{width:100%!important;display:block!important}#site-navbar.dm-nav-vertical .navbar-link,#site-navbar.dm-nav-vertical .navbar-dropdown-toggle{display:flex!important;align-items:center!important;justify-content:flex-start!important;gap:var(--dm-space-2)!important;width:100%!important;padding:var(--dm-space-2) var(--dm-space-3)!important;font-size:var(--dm-font-size-sm)!important;text-align:left!important;border-radius:var(--dm-radius-md)!important;white-space:normal!important}#site-navbar.dm-nav-vertical .navbar-link:hover,#site-navbar.dm-nav-vertical .navbar-dropdown-toggle:hover{background-color:color-mix(in srgb,var(--dm-text) 8%,transparent)}#site-navbar.dm-nav-vertical .navbar-dropdown-toggle .navbar-caret{margin-left:auto}#site-navbar.dm-nav-vertical .navbar-dropdown{position:static!important;width:100%!important}#site-navbar.dm-nav-vertical .navbar-dropdown-menu{position:static!important;display:none;width:100%!important;min-width:0!important;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;box-shadow:none!important;background:color-mix(in srgb,var(--dm-text) 8%,transparent)!important}#site-navbar.dm-nav-vertical .navbar-dropdown.open>.navbar-dropdown-menu{display:block!important}#site-navbar.dm-nav-vertical .navbar-dropdown-item{display:block!important;width:100%!important;padding:var(--dm-space-2) var(--dm-space-3) var(--dm-space-2) calc(var(--dm-space-3) + var(--dm-space-5))!important}#site-navbar.dm-nav-vertical .navbar-actions{display:flex;flex-direction:column;align-items:stretch;margin-left:0;margin-top:auto;padding-top:var(--dm-space-3)}}@media print{body.dm-ctx-printing *{visibility:hidden}body.dm-ctx-printing [data-dm-print],body.dm-ctx-printing [data-dm-print] *{visibility:visible}body.dm-ctx-printing [data-dm-print]{position:absolute;left:0;top:0;width:100%}body.dm-ctx-printing [data-dm-print] .accordion-content{display:block!important;height:auto!important}body.dm-ctx-printing .dm-ctx-hidden{display:none!important}}:where(.page-footer) .footer-nav ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:.35rem 1.25rem}:where(.page-footer) .footer-nav li{margin:0}:where(.page-footer) .footer-nav a{color:var(--dm-text-secondary, inherit);text-decoration:none;font-size:.9rem}:where(.page-footer) .footer-nav a:hover,:where(.page-footer) .footer-nav a:focus-visible{color:var(--dm-primary, inherit);text-decoration:underline}
|
|
1
|
+
body,button,input,select,textarea{font-family:Roboto,sans-serif}.navbar-brand-logo{height:32px;width:auto;display:inline-block;vertical-align:middle;margin-right:.4em}.navbar-brand-tagline{display:block;font-size:.65em;opacity:.75;line-height:1.2;letter-spacing:.02em}.navbar-brand-text.navbar-brand-sm{font-size:.85em}.navbar-brand-text.navbar-brand-lg{font-size:1.25em}@media(min-width:993px){#site-navbar:not(.dm-nav-vertical) .navbar-container{display:grid;align-items:center;gap:var(--dm-space-4, 1rem)}#site-navbar:not(.dm-nav-vertical) .navbar-collapse{display:contents}#site-navbar:not(.dm-nav-vertical) .navbar-brand{grid-column:1;justify-self:start}#site-navbar:not(.dm-nav-vertical) .navbar-nav{grid-column:2;flex:0 1 auto;min-width:0}#site-navbar:not(.dm-nav-vertical) .navbar-actions{grid-column:3;justify-self:end;margin-left:0}#site-navbar.dm-nav-align-centre:not(.dm-nav-vertical) .navbar-container{grid-template-columns:minmax(max-content,1fr) auto minmax(max-content,1fr)}#site-navbar.dm-nav-align-centre:not(.dm-nav-vertical) .navbar-nav{justify-content:center}#site-navbar:is(.dm-nav-align-left,.dm-nav-align-right,.dm-nav-align-spread):not(.dm-nav-vertical) .navbar-container{grid-template-columns:auto minmax(0,1fr) auto}#site-navbar.dm-nav-align-left:not(.dm-nav-vertical) .navbar-nav{justify-content:flex-start}#site-navbar.dm-nav-align-right:not(.dm-nav-vertical) .navbar-nav{justify-content:flex-end}#site-navbar.dm-nav-align-spread:not(.dm-nav-vertical) .navbar-nav{justify-content:space-between;width:100%}}.navbar-actions{order:4;margin-left:auto;display:flex;align-items:center;gap:.5rem}#site-navbar.navbar-dark .navbar-actions,#site-navbar.navbar-light .navbar-actions{color:var(--dm-navbar-text)}#site-navbar.navbar-dark .site-search-shortcut-hint,#site-navbar.navbar-light .site-search-shortcut-hint{color:color-mix(in srgb,var(--dm-navbar-text) 65%,var(--dm-navbar-bg));border-color:color-mix(in srgb,var(--dm-navbar-text) 28%,transparent)}.site-main{min-height:calc(100vh - 60px);padding-top:2rem;padding-bottom:4rem}.site-main.with-sidebar{display:grid;grid-template-columns:var(--dm-contents-width, 260px) 1fr;gap:0}.site-sidebar{min-height:100%;border-right:1px solid var(--dm-border, rgba(255,255,255,.08))}.site-main.with-sidebar{overflow-x:clip;overflow-y:visible}.site-main.with-sidebar>#site-sidebar{position:sticky;top:var(--site-navbar-height, 4rem);align-self:start;min-height:0;max-height:calc(100vh - var(--site-navbar-height, 4rem));overflow-y:auto;width:auto}.site-main.with-sidebar.sidebar-right{grid-template-columns:1fr var(--dm-contents-width, 260px)}.site-main.with-sidebar.sidebar-right>#site-sidebar{order:2;border-right:0;border-left:1px solid var(--dm-border, rgba(255,255,255,.08))}.site-main.with-sidebar.no-sidebar-items{grid-template-columns:1fr}.site-main.with-sidebar.no-sidebar-items .site-sidebar{display:none}.dm-contents{padding:var(--dm-space-3, .75rem) 0}.dm-contents-head{display:flex;align-items:center;gap:.5rem;padding:0 var(--dm-space-3, .75rem)}.dm-contents-title{margin:0;font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--dm-text-muted)}.dm-contents-title:empty{display:none}.dm-contents-list{margin:.25rem 0 0;padding:0;list-style:none;counter-reset:dm-contents-h2}.dm-contents-item>a{display:block;padding:.45rem var(--dm-space-3, .75rem) .45rem calc(var(--dm-space-3, .75rem) + 3px);border-left:3px solid transparent;color:var(--dm-text-secondary);text-decoration:none;line-height:1.35;font-size:.9rem}.dm-contents-item>a:hover{color:var(--dm-text);background:var(--dm-hover-bg, rgba(255, 255, 255, .04))}.dm-contents:not([data-menu-active]) .dm-contents-item>a.is-active{color:var(--dm-text);font-weight:600;border-left-color:var(--dm-menu-highlight, var(--dm-primary));background:var(--dm-hover-bg, rgba(255, 255, 255, .04))}.dm-contents-h3>a{padding-left:calc(var(--dm-space-3, .75rem) + 1.1rem);font-size:.85rem}.dm-contents-list.is-numbered .dm-contents-h2{counter-increment:dm-contents-h2;counter-reset:dm-contents-h3}.dm-contents-list.is-numbered .dm-contents-h3{counter-increment:dm-contents-h3}.dm-contents-list.is-numbered .dm-contents-h2>a:before{content:counter(dm-contents-h2) ". ";color:var(--dm-text-muted)}.dm-contents-list.is-numbered .dm-contents-h3>a:before{content:counter(dm-contents-h2) "." counter(dm-contents-h3) " ";color:var(--dm-text-muted)}.dm-contents-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:28px;height:28px;padding:0;border:1px solid var(--dm-border);border-radius:6px;background:transparent;color:var(--dm-text-secondary);cursor:pointer}.dm-contents-toggle:hover{color:var(--dm-text);border-color:var(--dm-primary)}.dm-contents-toggle svg{width:16px;height:16px}.site-main.with-sidebar.contents-static>#site-sidebar{position:static;max-height:none;overflow:visible}.site-main.with-sidebar.contents-collapsed{grid-template-columns:52px 1fr}.site-main.with-sidebar.sidebar-right.contents-collapsed{grid-template-columns:1fr 52px}.site-main.contents-collapsed .dm-contents-list,.site-main.contents-collapsed .dm-contents-title{display:none}.site-main.contents-collapsed .dm-contents-head{justify-content:center;padding:0}.site-main.with-sidebar:is(.contents-floating,.contents-autohide){grid-template-columns:1fr}.site-main.with-sidebar:is(.contents-floating,.contents-autohide)>#site-sidebar{position:fixed;z-index:90;width:var(--dm-contents-width, 260px);max-height:70vh;overflow-y:auto;border:1px solid var(--dm-border);border-radius:10px;background:var(--dm-surface);box-shadow:var(--dm-shadow-lg)}.site-main.with-sidebar.contents-float-tl>#site-sidebar{top:calc(var(--site-navbar-height, 0px) + 1rem);bottom:auto;left:1rem;right:auto}.site-main.with-sidebar.contents-float-tr>#site-sidebar{top:calc(var(--site-navbar-height, 0px) + 1rem);bottom:auto;right:1rem;left:auto}.site-main.with-sidebar.contents-float-bl>#site-sidebar{top:auto;bottom:1rem;left:1rem;right:auto}.site-main.with-sidebar.contents-float-br>#site-sidebar{top:auto;bottom:1rem;right:1rem;left:auto}.site-main.with-sidebar.contents-float-l>#site-sidebar{top:50%;bottom:auto;left:1rem;right:auto;transform:translateY(-50%)}.site-main.with-sidebar.contents-float-r>#site-sidebar{top:50%;bottom:auto;right:1rem;left:auto;transform:translateY(-50%)}body.dm-vnav-right .site-main.with-sidebar:is(.contents-float-tr,.contents-float-br,.contents-float-r)>#site-sidebar{right:calc(var(--dm-vnav-width, 240px) + 1rem)}body.dm-vnav-left .site-main.with-sidebar:is(.contents-float-tl,.contents-float-bl,.contents-float-l)>#site-sidebar{left:calc(var(--dm-vnav-width, 240px) + 1rem)}.dm-contents.is-movable .dm-contents-head{cursor:move}.site-main.contents-autohide>#site-sidebar{top:50%;transition:transform .25s ease,box-shadow .25s ease;box-shadow:none}.site-main.contents-autohide:not(.sidebar-right)>#site-sidebar{left:0;transform:translate(calc(-100% + 10px),-50%);border-radius:0 10px 10px 0}.site-main.contents-autohide.sidebar-right>#site-sidebar{right:0;transform:translate(calc(100% - 10px),-50%);border-radius:10px 0 0 10px}body.dm-vnav-left .site-main.contents-autohide:not(.sidebar-right)>#site-sidebar{left:var(--dm-vnav-width, 240px)}body.dm-vnav-right .site-main.contents-autohide.sidebar-right>#site-sidebar{right:var(--dm-vnav-width, 240px)}.site-main.contents-autohide>#site-sidebar:is(:hover,:focus-within,.is-revealed){transform:translateY(-50%);box-shadow:var(--dm-shadow-lg)}@media(prefers-reduced-motion:reduce){.site-main.contents-autohide>#site-sidebar{transition:none}}html.dm-reduced-motion .site-main.contents-autohide>#site-sidebar{transition:none}.site-content{overflow:hidden}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}.container{padding:0 1.5rem}.page-title{font-size:clamp(1.5rem,4vw,2rem);font-weight:700;margin-bottom:1.5rem;line-height:1.2}.page-body{line-height:1.7;font-size:1rem}.page-body h1,.page-body h2,.page-body h3,.page-body h4{margin-top:2rem;margin-bottom:.75rem;font-weight:600}.page-body h2{font-size:clamp(1.2rem,3vw,1.5rem)}.page-body h3{font-size:clamp(1.1rem,2.5vw,1.25rem)}.page-body p{margin-bottom:1rem}.page-body ul,.page-body ol{margin-bottom:1rem;padding-left:1.5rem}.page-body a{color:var(--dm-link, var(--dm-primary, #5b8cff))}.page-body a:hover{text-decoration:underline}.page-body code{font-family:Fira Code,Courier New,monospace;font-size:.9em;background:var(--dm-code-bg, rgba(255,255,255,.06));color:var(--dm-code-text, inherit);padding:.15em .35em;border-radius:3px}.page-body pre{background:var(--dm-code-bg, rgba(0,0,0,.3));color:var(--dm-code-text, inherit);border:1px solid var(--dm-code-border, rgba(255,255,255,.08));border-radius:6px;padding:1rem;overflow-x:auto;margin-bottom:1rem}.page-body pre code{background:none;padding:0}.page-body img{max-width:100%;border-radius:6px}.page-body blockquote{border-left:3px solid var(--dm-primary, #5b8cff);margin:1.5rem 0;padding:.75rem 1rem;background:color-mix(in srgb,var(--dm-primary, #5b8cff) 8%,transparent);border-radius:0 6px 6px 0}h3.accordion-header{margin:0}.accordion-button{all:unset;display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;font:inherit}.page-body .card-header h2{margin:0;font-size:1rem;font-weight:600;line-height:1.4}.card[data-collapsible] .card-header{cursor:pointer;user-select:none;display:flex;align-items:center;justify-content:space-between}.card[data-collapsible] .card-header:after{content:"\25be";font-size:1.1em;line-height:1;display:inline-block;transition:transform .25s ease;flex-shrink:0}.card[data-collapsible].is-collapsed .card-header:after{transform:rotate(-90deg)}.card[data-collapsible] .card-body{overflow:hidden;max-height:4000px;opacity:1;transition:max-height .3s ease,opacity .25s ease}.card[data-collapsible].is-collapsed .card-body{max-height:0;opacity:0}.card-primary>.card-header,.card-primary>.card-footer{background-color:color-mix(in srgb,var(--dm-primary) 18%,var(--dm-surface));color:var(--dm-text);border-color:var(--dm-primary)}.card-primary>.card-header .card-title{color:var(--dm-text)}.navbar-link span[data-icon],.navbar-link svg,.navbar-dropdown-toggle span[data-icon],.navbar-dropdown-toggle svg,.navbar-dropdown-item span[data-icon],.navbar-dropdown-item svg{width:13px!important;height:13px!important;margin-right:10px!important}#site-navbar .navbar-dropdown-toggle,#site-navbar .navbar-dropdown-item{font-size:var(--dm-font-size-base)}@media(min-width:993px){#site-navbar .navbar-dropdown-toggle,#site-navbar .navbar-dropdown-item{font-size:var(--dm-font-size-sm)}}@media(min-width:1201px){#site-navbar .navbar-dropdown-toggle,#site-navbar .navbar-dropdown-item{font-size:var(--dm-font-size-xs)}}#site-navbar .navbar-dropdown-item{transition:none}[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-link,[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-dropdown-toggle{transition:all .15s ease,color 0s,background-color 0s}[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-link:hover,[data-mode=light] #site-navbar.navbar:not(.navbar-light):not(.navbar-dark) .navbar-dropdown-toggle:hover,[data-mode=light] #site-navbar .navbar-dropdown-item:hover{background-color:var(--dm-hover-bg, rgba(128, 128, 128, .14))!important;color:var(--dm-text, #1f2937)!important;text-decoration:underline;text-underline-offset:3px}.dm-reduced-motion *,.dm-reduced-motion *:before,.dm-reduced-motion *:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.page-footer{border-top:1px solid var(--dm-border, rgba(255,255,255,.08));padding:1.5rem 0}.footer-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;max-width:1200px;margin:0 auto}.footer-inner p{margin:0;color:var(--dm-text-muted, #888);font-size:.875rem}.footer-links{display:flex;gap:1.25rem}.footer-links a{color:var(--dm-text-muted, #888);font-size:.875rem;text-decoration:none}.footer-links a:hover{color:var(--dm-text, #eee)}.footer-social{display:flex;gap:.5rem;align-items:center}.footer-social-link{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;color:var(--dm-text-muted, #888);transition:color .15s}.footer-social-link:hover{color:var(--dm-text, #eee)}.footer-social-link svg{width:1rem;height:1rem}.footer-motion-switch{font-size:.8rem;color:var(--dm-text-muted, #888);white-space:nowrap}.footer-motion-check{display:inline-flex;align-items:center;gap:.5rem;margin-top:var(--dm-space-3, .75rem);font-size:.85rem;color:var(--dm-text-secondary);cursor:pointer}.footer-motion-check .footer-motion-checkbox{width:1rem;height:1rem;margin:0;accent-color:var(--dm-primary)}.footer-motion-switch .form-switch-label{color:var(--dm-text-muted, #888)}.footer-motion-switch .form-switch-input{width:2rem;height:1.125rem}.footer-motion-switch .form-switch-input:after{width:.875rem;height:.875rem}.footer-motion-switch .form-switch-input:checked:after{transform:translate(.875rem)}.dm-slideover-header{display:flex;align-items:center;justify-content:space-between;padding:.875rem 1.25rem;border-bottom:1px solid var(--dm-border, rgba(255, 255, 255, .08));flex-shrink:0}.dm-slideover-title{margin:0;font-size:1rem;font-weight:600;line-height:1.4}.dm-slideover-body{padding:1.25rem;overflow:auto;overscroll-behavior:contain;flex:1;min-height:0;scrollbar-width:thin;scrollbar-color:var(--dm-border) transparent}.dm-slideover-body::-webkit-scrollbar{width:8px;height:8px}.dm-slideover-body::-webkit-scrollbar-track{background:transparent}.dm-slideover-body::-webkit-scrollbar-thumb{background:var(--dm-border);border-radius:4px}.dm-slideover-body::-webkit-scrollbar-thumb:hover{background:var(--dm-text-muted)}@media(max-width:768px){.site-main.with-sidebar{grid-template-columns:1fr}.site-sidebar{display:none}}.dm-spacer{display:block;width:100%}.hero-breakout{width:calc(100vw - 2rem);margin-left:calc(50% - 50vw + 1rem);margin-right:calc(50% - 50vw + 1rem)}.site-main:has(.page-body>.hero-breakout:first-child){padding-top:0}body[data-layout=landing]>.site-main{padding-top:0}body[data-layout=landing]>.site-main .container{max-width:none;padding:0}body[data-layout=landing] .page-body{padding-left:1.5rem;padding-right:1.5rem}body[data-layout=landing] .page-body>p,body[data-layout=landing] .page-body>h1,body[data-layout=landing] .page-body>h2,body[data-layout=landing] .page-body>h3,body[data-layout=landing] .page-body>ul,body[data-layout=landing] .page-body>ol,body[data-layout=landing] .page-body>blockquote{max-width:860px;margin-left:auto;margin-right:auto}.hero-breakout{width:100vw;margin-left:calc((100% - 100vw)/2);max-width:none}body[data-layout=landing] .page-body .hero-breakout{width:calc(100% + 3rem);margin-left:-1.5rem;margin-right:-1.5rem}body[data-layout=landing] .page-body .grid-breakout{width:calc(100% + 3rem);margin-left:-1.5rem;margin-right:-1.5rem;padding-left:1.5rem;padding-right:1.5rem}.page-body .card{transition:border-color .2s ease}.page-body .card:not(.card-no-hover):hover{border-color:var(--dm-primary, #0d6efd)}.page-body .card-header-icon-inline{display:flex;align-items:center;gap:.6rem}.page-body .card-header-icon-inline [data-icon]{flex-shrink:0;line-height:0}.page-body .card-header-icon-inline [data-icon] svg,.page-body .card-header-icon-inline>svg{display:block;width:1.25rem;height:1.25rem}.page-body .card-header-icon-stacked{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.35rem;padding-top:.25rem}.page-body .card-header-icon-stacked [data-icon],.page-body .card-header-icon-stacked svg{width:2rem;height:2rem}.page-body .dm-card-clean{background:var(--dm-surface);border:1px solid var(--dm-border);box-shadow:0 1px 4px #0000000f,0 2px 8px #0000000a;transition:transform .2s ease,box-shadow .2s ease}.page-body .dm-card-clean:not(.card-no-hover):hover{transform:translateY(-4px);box-shadow:0 8px 24px #0000001a,0 2px 8px #0000000f}.page-body .dm-card-clean .card-header{color:var(--dm-text)}.page-body .dm-card-clean .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-clean .card-footer{color:var(--dm-text-secondary);border-top:1px solid var(--dm-border)}.page-body .dm-card-gradient{background:var(--dm-card-bg, #fff);border:none;box-shadow:0 4px 20px #6366f124;transition:transform .2s ease,box-shadow .2s ease}.page-body .dm-card-gradient:not(.card-no-hover):hover{transform:translateY(-5px);box-shadow:0 16px 40px #6366f140}.page-body .dm-card-gradient .card-header{background:linear-gradient(135deg,var(--dm-card-g-start, #6366f1),var(--dm-card-g-end, #8b5cf6));color:#fff;border-bottom:none}.page-body .dm-card-gradient .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-gradient .card-footer{color:var(--dm-text-secondary);border-top:1px solid var(--dm-border)}.page-body .dm-card-glass{background:color-mix(in srgb,var(--dm-surface) 62%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid color-mix(in srgb,var(--dm-border) 75%,transparent);box-shadow:0 4px 24px #00000014;transition:transform .2s ease,box-shadow .2s ease,background .2s ease}.page-body .dm-card-glass:not(.card-no-hover):hover{transform:translateY(-4px);box-shadow:0 12px 36px #00000024;background:color-mix(in srgb,var(--dm-surface) 78%,transparent)}.page-body .dm-card-glass .card-header{background:transparent;border-bottom:1px solid color-mix(in srgb,var(--dm-border) 60%,transparent);color:var(--dm-text)}.page-body .dm-card-glass .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-glass .card-footer{color:var(--dm-text-secondary);background:transparent}.page-body .dm-card-accent{background:var(--dm-surface);border:1px solid var(--dm-border);border-left:4px solid var(--dm-primary, #6366f1);box-shadow:0 1px 4px #0000000d;transition:transform .2s ease,box-shadow .2s ease,border-left-color .2s ease}.page-body .dm-card-accent:not(.card-no-hover):hover{transform:translateY(-3px);border-left-color:var(--dm-primary-hover, #4f46e5);box-shadow:0 8px 24px #6366f11f}.page-body .dm-card-accent .card-header{color:var(--dm-primary);border-bottom:none}.page-body .dm-card-accent .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-accent .card-footer{color:var(--dm-text-secondary);border-top:1px solid var(--dm-border)}.page-body .dm-card-dark{--cms-link-color: color-mix(in srgb, var(--dm-primary) 40%, #fff);--cms-link-hover-color: color-mix(in srgb, var(--dm-primary) 20%, #fff);background:linear-gradient(160deg,color-mix(in srgb,var(--dm-primary) 8%,#1e293b),#0f172a);color:#cbd5e1;border:1px solid rgba(255,255,255,.06);box-shadow:0 4px 20px #0000004d;transition:transform .2s ease,box-shadow .2s ease}.page-body .dm-card-dark:not(.card-no-hover):hover{transform:translateY(-4px) scale(1.012);box-shadow:0 16px 40px #00000073}.page-body .dm-card-dark .card-header{background:transparent;color:#f1f5f9;border-bottom:1px solid rgba(255,255,255,.08)}.page-body .dm-card-dark :is(h1,h2,h3,h4,h5,h6,strong,b){color:#f1f5f9}.page-body .dm-card-dark .card-title{color:#f1f5f9!important}.page-body .dm-card-dark .card-subtitle{color:#94a3b8}.page-body .dm-card-dark .card-body{color:#cbd5e1}.page-body .dm-card-dark :is(code,pre){background:#ffffff14;border-color:#ffffff1f;color:#f1f5f9}.page-body .dm-card-dark pre code{background:none}.page-body .dm-card-dark .card-footer{background:transparent;color:#94a3b8;border-top:1px solid rgba(255,255,255,.08)}.page-body .dm-card-glow{background:var(--dm-surface);border:1px solid color-mix(in srgb,var(--dm-primary, #6366f1) 45%,transparent);box-shadow:0 0 #6366f100;transition:transform .2s ease,box-shadow .3s ease,border-color .2s ease}.page-body .dm-card-glow:not(.card-no-hover):hover{transform:translateY(-3px);border-color:var(--dm-primary, #818cf8);box-shadow:0 0 0 4px color-mix(in srgb,var(--dm-primary, #6366f1) 14%,transparent),0 0 28px color-mix(in srgb,var(--dm-primary, #6366f1) 22%,transparent)}.page-body .dm-card-glow .card-header{color:var(--dm-primary);border-bottom:1px solid color-mix(in srgb,var(--dm-primary, #6366f1) 20%,transparent)}.page-body .dm-card-glow .card-body{color:var(--dm-text-secondary)}.page-body .dm-card-glow .card-footer{border-top:1px solid color-mix(in srgb,var(--dm-primary, #6366f1) 20%,transparent);color:var(--dm-text-secondary)}.page-body .card-hover{transition:border-color .2s ease}.page-body .card-hover:not(.card-no-hover):hover{border-color:var(--dm-primary, #0d6efd)}.card-gradient-indigo{background:linear-gradient(135deg,#6366f1,#8b5cf6)}.card-gradient-ocean{background:linear-gradient(135deg,#0891b2,#2563eb)}.card-gradient-sunset{background:linear-gradient(135deg,#f59e0b,#ef4444,#ec4899)}.card-gradient-forest{background:linear-gradient(135deg,#10b981,#0d9488)}.card-gradient-rose{background:linear-gradient(135deg,#fb7185,#e11d48)}.card-gradient-midnight{background:linear-gradient(135deg,#1e1b4b,#4338ca)}.card-gradient-aurora{background:linear-gradient(135deg,#06b6d4,#6366f1,#a855f7)}.card-gradient-fire{background:linear-gradient(135deg,#ef4444,#f97316,#fbbf24)}.card-gradient-lagoon{background:linear-gradient(135deg,#06b6d4,#0e7490)}.card-gradient-dusk{background:linear-gradient(135deg,#7c3aed,#db2777)}.card-gradient-lime{background:linear-gradient(135deg,#84cc16,#10b981)}.card-gradient-gold{background:linear-gradient(135deg,#f59e0b,#b45309)}.card-gradient-arctic{background:linear-gradient(135deg,#bae6fd,#e0f2fe);color:#1e293b}.card-gradient-slate{background:linear-gradient(135deg,#475569,#1e293b)}[class*=card-gradient-]:not(.card-gradient-arctic){color:#fff}.page-body .card-font-serif{font-family:Georgia,Times New Roman,serif}.page-body .card-font-mono{font-family:SF Mono,Fira Code,Courier New,monospace}.page-body .card-text-sm{font-size:.85rem}.page-body .card-text-lg{font-size:1.1rem}.page-body .card-text-xl{font-size:1.25rem}.page-body .card-borderless{border:none!important}.page-body .card-shadow-none{box-shadow:none!important}.page-body .card-shadow-md{box-shadow:0 4px 12px #0000001a}.page-body .card-shadow-lg{box-shadow:0 10px 30px #0000002e}.page-body .card-rounded-none{border-radius:0}.page-body .card-rounded-xs{border-radius:2px}.page-body .card-rounded-sm{border-radius:4px}.page-body .dm-box-primary{--cms-box-tone: var(--dm-primary)}.page-body .dm-box-secondary{--cms-box-tone: var(--dm-secondary)}.page-body .dm-box-success{--cms-box-tone: var(--dm-success)}.page-body .dm-box-info{--cms-box-tone: var(--dm-info)}.page-body .dm-box-warning{--cms-box-tone: var(--dm-warning)}.page-body .dm-box-danger{--cms-box-tone: var(--dm-danger)}.page-body .dm-box-tone{--cms-link-color: color-mix(in srgb, var(--cms-box-tone) 40%, var(--dm-text));--cms-link-hover-color: var(--dm-text);background:color-mix(in srgb,var(--cms-box-tone) 12%,var(--dm-card-bg));border-color:color-mix(in srgb,var(--cms-box-tone) 45%,var(--dm-card-border));color:var(--dm-text)}.page-body .dm-box-tone:not(.card-no-hover):hover{border-color:var(--cms-box-tone)}.page-body .dm-box-tone>.card-body{color:var(--dm-text)}.page-body .dm-box-tone>.card-footer{background:color-mix(in srgb,var(--cms-box-tone) 20%,var(--dm-card-bg));border-top-color:color-mix(in srgb,var(--cms-box-tone) 35%,var(--dm-card-border));color:var(--dm-text)}.page-body .dm-box-custom{--cms-link-color: currentColor;--cms-link-hover-color: currentColor;background:var(--cms-box-bg);border-color:color-mix(in srgb,var(--cms-box-fg) 25%,var(--cms-box-bg));color:var(--cms-box-fg)}.page-body .dm-box-custom>:is(.card-body,.card-footer),.page-body .dm-box-custom :is(h1,h2,h3,h4,h5,h6,strong,b){color:var(--cms-box-fg)}.page-body .dm-box-custom>.card-footer{background:color-mix(in srgb,var(--cms-box-shade) 10%,var(--cms-box-bg));border-top-color:color-mix(in srgb,var(--cms-box-fg) 20%,var(--cms-box-bg))}.page-body .dm-box-custom a{text-decoration-color:currentColor!important}.page-body .dm-box-custom :is(code,pre){background:color-mix(in srgb,var(--cms-box-shade) 15%,var(--cms-box-bg));border-color:color-mix(in srgb,var(--cms-box-fg) 20%,var(--cms-box-bg));color:var(--cms-box-fg)}.page-body .dm-box-custom pre code{background:none}.page-body .card-rounded-lg{border-radius:20px}.page-body .card-rounded-full{border-radius:9999px}.page-body .card-align-center{text-align:center}.page-body .card-align-right{text-align:right}.page-body .card-pad-compact .card-body,.page-body .card-pad-compact .card-header,.page-body .card-pad-compact .card-footer{padding:8px 12px}.page-body .card-pad-spacious .card-body,.page-body .card-pad-spacious .card-header,.page-body .card-pad-spacious .card-footer{padding:24px 28px}.grid>:is(.card-span-full,.col:has(>.card-span-full)){grid-column:1 / -1}.grid>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:span 6 / span 6}.grid.grid-cols-1>:is(.card-span-2,.col:has(>.card-span-2)),.grid.grid-cols-1>:is(.card-span-3,.col:has(>.card-span-3)),.grid.grid-cols-1>:is(.card-span-4,.col:has(>.card-span-4)),.grid.grid-cols-1>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-1>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-2>:is(.card-span-3,.col:has(>.card-span-3)),.grid.grid-cols-2>:is(.card-span-4,.col:has(>.card-span-4)),.grid.grid-cols-2>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-2>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-3>:is(.card-span-4,.col:has(>.card-span-4)),.grid.grid-cols-3>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-3>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-4>:is(.card-span-5,.col:has(>.card-span-5)),.grid.grid-cols-4>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-5>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}@media(min-width:768px){.grid.grid-cols-md-1>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-1>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-2>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-2>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-3>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-3>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-3>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-md-3>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-3>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-4>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-4>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-4>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-md-4>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-md-4>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-5>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-5>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-5>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-md-5>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-md-5>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-md-6>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-md-6>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-md-6>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-md-6>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-md-6>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:span 6 / span 6}}@media(min-width:1024px){.grid.grid-cols-lg-1>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-1>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-2>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-2>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-3>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-3>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-3>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:1 / -1}.grid.grid-cols-lg-3>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-3>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-4>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-4>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-4>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-lg-4>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:1 / -1}.grid.grid-cols-lg-4>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-5>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-5>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-5>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-lg-5>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-lg-5>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:1 / -1}.grid.grid-cols-lg-6>:is(.card-span-2,.col:has(>.card-span-2)){grid-column:span 2 / span 2}.grid.grid-cols-lg-6>:is(.card-span-3,.col:has(>.card-span-3)){grid-column:span 3 / span 3}.grid.grid-cols-lg-6>:is(.card-span-4,.col:has(>.card-span-4)){grid-column:span 4 / span 4}.grid.grid-cols-lg-6>:is(.card-span-5,.col:has(>.card-span-5)){grid-column:span 5 / span 5}.grid.grid-cols-lg-6>:is(.card-span-6,.col:has(>.card-span-6)){grid-column:span 6 / span 6}}.card-img-top{width:100%;height:180px;background-size:cover;background-position:center;background-color:var(--dm-border,#e2e8f0);display:flex;align-items:center;justify-content:center;font-size:2.5rem;color:color-mix(in srgb,var(--dm-text) 15%,transparent)}.card-img-left,.card-img-right{width:90px;flex-shrink:0;background-size:cover;background-position:center;background-color:var(--dm-border,#e2e8f0);display:flex;align-items:center;justify-content:center;font-size:1.75rem;color:color-mix(in srgb,var(--dm-text) 20%,transparent)}.card-img-wide{width:130px;flex-shrink:0;background-size:cover;background-position:center;background-color:var(--dm-border,#e2e8f0);display:flex;align-items:center;justify-content:center;font-size:2rem;color:color-mix(in srgb,var(--dm-text) 20%,transparent)}.card-layout-horizontal,.card-layout-thumb-left,.card-layout-thumb-right{display:flex}.card-layout-thumb-left .card-body,.card-layout-thumb-right .card-body,.card-layout-horizontal .card-body{flex:1;min-width:0}.card-layout-split{display:flex;min-height:140px}.card-split-left{width:50%;display:flex;align-items:center;justify-content:center;font-size:2.25rem;flex-shrink:0;background:linear-gradient(160deg,#6366f1,#8b5cf6)}.card-split-right{flex:1;background:#1e293b;display:flex;flex-direction:column;justify-content:center}.card-split-right .card-body{color:#94a3b8}.card-split-right .card-title{color:#f1f5f9}.card-img-overlay{position:relative;height:180px;overflow:hidden;background-size:cover;background-position:center;background-color:#1e293b;display:flex;align-items:flex-end}.card-overlay-text{width:100%;padding:40px 16px 14px;background:linear-gradient(to top,rgba(0,0,0,.75),transparent)}.card-overlay-text .card-title{color:#fff}.dm-card-dark .card-img-top,.dm-card-dark .card-img-left,.dm-card-dark .card-img-right,.dm-card-dark .card-img-wide{filter:brightness(.7)}.card-stat-value{font-size:2.4rem;font-weight:800;color:var(--dm-text);line-height:1.1}.card-stat-delta{font-size:.8rem;font-weight:600;margin-top:2px}.card-stat-delta.positive{color:var(--dm-success, #10b981)}.card-stat-delta.negative{color:var(--dm-danger, #ef4444)}.card-stat-bar{height:5px;background:var(--dm-border);border-radius:3px;margin-top:14px;overflow:hidden}.card-stat-fill{height:100%;border-radius:3px;background:linear-gradient(90deg,#6366f1,#8b5cf6)}.card-progress-bar{height:8px;background:var(--dm-border);border-radius:4px;overflow:hidden;margin:8px 0}.card-progress-fill{height:100%;border-radius:4px;background:linear-gradient(90deg,#6366f1,#8b5cf6)}.card-milestone{display:flex;align-items:center;gap:8px;font-size:.8rem;color:var(--dm-text-secondary);padding:3px 0}.card-milestone-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.card-milestone-dot.done{background:var(--dm-success, #10b981)}.card-milestone-dot.pending{background:var(--dm-border, #e5e7eb)}.card-header-icon-stacked{text-align:center;padding:20px 16px 12px}.card-header-icon-stacked [data-icon],.card-header-icon-stacked .card-icon{font-size:2rem;display:block;margin-bottom:8px}.card-step-bg{position:relative;overflow:hidden;min-height:60px;display:flex;align-items:center;padding:14px 16px}.card-step-ghost{position:absolute;right:8px;top:-10px;font-size:5rem;font-weight:900;color:color-mix(in srgb,var(--dm-primary, #6366f1) 12%,transparent);line-height:1;pointer-events:none}.card-step-badge{width:32px;height:32px;border-radius:50%;background:var(--dm-primary, #6366f1);color:var(--dm-primary-text, #fff);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem;z-index:1;flex-shrink:0}.card-corner-badge-wrap{position:relative}.card-corner-badge{position:absolute;top:10px;right:10px;background:var(--dm-danger, #ef4444);color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:2px 8px;border-radius:20px}.card-callout{border-left:4px solid var(--dm-primary, #6366f1)}.card-callout.warn{border-left-color:var(--dm-warning, #f59e0b)}.card-callout.success{border-left-color:var(--dm-success, #10b981)}.card-callout.error{border-left-color:var(--dm-danger, #ef4444)}.card-callout-inner{display:flex;gap:12px;align-items:flex-start}.card-callout-icon{font-size:1.2rem;flex-shrink:0;margin-top:1px}.card-quote-mark{font-size:3.5rem;color:color-mix(in srgb,var(--dm-primary, #6366f1) 18%,transparent);line-height:.8;padding:14px 16px 0;font-family:Georgia,serif;display:block}.card-quote-text{padding:4px 16px 14px;font-style:italic;color:var(--dm-text-secondary);line-height:1.7}.card-quote-attr{display:flex;align-items:center;gap:10px}.card-quote-avatar{width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:.85rem;color:#fff;flex-shrink:0}.card-video-thumb{position:relative;height:160px;background:#1e293b;display:flex;align-items:center;justify-content:center;background-size:cover;background-position:center}.card-play-btn{width:52px;height:52px;border-radius:50%;background:#ffffffe6;display:flex;align-items:center;justify-content:center;font-size:1.2rem;box-shadow:0 4px 16px #0000004d}.card-video-duration{position:absolute;bottom:8px;right:10px;background:#000000b3;color:#fff;font-size:.65rem;font-weight:600;padding:2px 7px;border-radius:4px}.card-map-placeholder{height:130px;background:linear-gradient(160deg,#bfdbfe,#dbeafe);position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden}.card-map-grid{position:absolute;inset:0;background-image:repeating-linear-gradient(0deg,rgba(59,130,246,.08) 0,rgba(59,130,246,.08) 1px,transparent 1px,transparent 32px),repeating-linear-gradient(90deg,rgba(59,130,246,.08) 0,rgba(59,130,246,.08) 1px,transparent 1px,transparent 32px)}.card-map-pin{font-size:2rem;z-index:1}.card-avatar{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:1.8rem;color:#fff;margin:0 auto 12px}.card-avatar-wrap{text-align:center;padding:24px 16px 16px}.card-tag-pills{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:10px}.card-pill{background:color-mix(in srgb,var(--dm-primary, #7c3aed) 15%,transparent);color:var(--dm-primary, #7c3aed);font-size:.7rem;font-weight:700;padding:3px 9px;border-radius:20px}.card-tag-cloud{padding:14px 16px;display:flex;flex-wrap:wrap;gap:7px}.card-tag{padding:4px 11px;border-radius:20px;font-size:.78rem;font-weight:600}.card-file-row{display:flex;gap:14px;align-items:center;padding:16px}.card-file-icon{width:48px;height:58px;border-radius:7px;background:linear-gradient(160deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:1.4rem;color:#fff;flex-shrink:0;position:relative}.card-file-ext{position:absolute;bottom:4px;left:0;right:0;text-align:center;font-size:.55rem;font-weight:800;color:#ffffffe6;letter-spacing:.05em}.card-file-dl{font-size:.78rem;font-weight:700;color:var(--dm-link, var(--dm-primary, #6366f1));display:inline-block;margin-top:4px}.card-stars{color:#f59e0b;letter-spacing:2px;padding:14px 16px 0;display:block}.card-verified{display:inline-block;background:color-mix(in srgb,var(--dm-success, #10b981) 18%,transparent);color:var(--dm-success, #065f46);font-size:.6rem;font-weight:700;padding:1px 5px;border-radius:3px;margin-left:6px}.card-activity-item{display:flex;gap:10px;align-items:flex-start;padding:8px 14px;border-bottom:1px solid var(--dm-border)}.card-activity-item:last-child{border-bottom:none}.card-activity-avatar{width:30px;height:30px;border-radius:50%;flex-shrink:0;background:linear-gradient(135deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;font-size:.8rem;color:#fff}.card-compare-grid{display:grid;grid-template-columns:1fr 1fr}.card-compare-col{padding:12px 14px}.card-compare-col+.card-compare-col{border-left:1px solid var(--dm-border)}.card-compare-label{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;margin-bottom:8px;display:block}.card-compare-label.before{color:var(--dm-danger, #ef4444)}.card-compare-label.after{color:var(--dm-success, #10b981)}.card-compare-item{display:flex;gap:7px;align-items:flex-start;font-size:.78rem;color:var(--dm-text-secondary);padding:3px 0;line-height:1.4}.card-compare-x{color:var(--dm-danger, #ef4444);flex-shrink:0}.card-compare-check{color:var(--dm-success, #10b981);flex-shrink:0}.card-pricing-features{padding:14px 16px}.card-pricing-feature{display:flex;align-items:center;gap:8px;font-size:.82rem;color:var(--dm-text-secondary);padding:4px 0}.card-pricing-check{color:var(--dm-success, #10b981)}.card-pricing-cta{display:block;text-align:center;background:var(--dm-primary, #6366f1);color:var(--dm-primary-text, #fff);font-size:.82rem;font-weight:700;padding:9px;border-radius:8px;text-decoration:none;margin:0 16px 14px}.page-body a.card-pricing-cta,.page-body a.card-pricing-cta:hover{color:var(--dm-primary-text, #fff);text-decoration:none}.page-body a.card-pricing-cta:hover{filter:brightness(1.08)}.card-timeline-row{display:flex}.card-timeline-side{width:44px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;padding-top:14px}.card-timeline-dot{width:12px;height:12px;border-radius:50%;background:var(--dm-primary, #6366f1);flex-shrink:0}.card-timeline-line{width:2px;background:var(--dm-border, #e5e7eb);flex:1;margin-top:4px}.card-timeline-body{flex:1;padding:12px 14px 12px 0}.card-timeline-date{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--dm-text-muted)}.card-timeline-tag{display:inline-block;background:color-mix(in srgb,var(--dm-success, #10b981) 18%,transparent);color:var(--dm-success, #065f46);font-size:.65rem;font-weight:700;padding:2px 6px;border-radius:4px;margin-top:6px}.card-code-header{background:#1e293b;display:flex;justify-content:space-between;align-items:center;padding:8px 14px}.card-code-lang{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#6366f1}.card-code-body{background:#0f172a;padding:14px;font-family:Courier New,monospace;font-size:.78rem;line-height:1.8;color:#94a3b8;overflow-x:auto}.card-glass-outer{background:linear-gradient(135deg,#6366f1,#8b5cf6,#ec4899);border-radius:12px;padding:2px}.card-glass-inner{background:#ffffffeb;backdrop-filter:blur(10px);border-radius:10px;padding:16px}.card-badge-band{display:flex;align-items:center;justify-content:space-between;padding:12px 16px}.card-badge-band-label{background:#fff3;color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:3px 8px;border-radius:4px}.card-badge-band-icon{font-size:1.4rem}.dm-card-full-bg{background:linear-gradient(160deg,#1e293b,#0f172a);color:#cbd5e1}.dm-card-full-bg .card-body{color:#94a3b8}.dm-card-full-bg .card-title{color:#f1f5f9;font-size:1rem}.dm-card-full-bg .card-footer{border-top-color:#ffffff14;color:#64748b}.card-fc-row{display:flex;justify-content:space-between;align-items:center;padding:8px 16px;border-bottom:1px solid var(--dm-border);font-size:.82rem;color:var(--dm-text-secondary)}.card-fc-row:last-child{border-bottom:none}.card-fc-yes{color:var(--dm-success, #10b981)}.card-fc-no{color:var(--dm-text-disabled, #d1d5db)}@media(max-width:480px){.card-layout-thumb-left,.card-layout-thumb-right,.card-layout-horizontal{flex-direction:column}.card-img-left,.card-img-right,.card-img-wide{width:100%;height:120px}.card-layout-split{flex-direction:column}.card-split-left{width:100%;height:100px}}.hero.hero-dark{background:linear-gradient(135deg,#1f2937,#111827);color:#e2e8f0}.hero .hero-content{position:relative;z-index:2}.hero.hero-left .hero-content{text-align:left;align-items:flex-start;max-width:62%}@media(max-width:768px){.hero.hero-left .hero-content{max-width:100%}}.hero .hero-cta{display:flex;gap:.85rem;flex-wrap:wrap;margin-top:1.75rem}.hero .hero-cta a{display:inline-flex;align-items:center;gap:.4rem;padding:.55rem 1.35rem;border-radius:6px;font-size:.95rem;font-weight:500;text-decoration:none;transition:background .2s ease,border-color .2s ease,transform .15s ease,box-shadow .2s ease}.hero .hero-cta a:first-child{background:#ffffffeb;color:#111;border:1px solid transparent}.hero .hero-cta a:first-child:hover{background:#fff;box-shadow:0 4px 16px #00000040;transform:translateY(-2px)}.hero .hero-cta a:last-child{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.4)}.hero .hero-cta a:last-child:hover{border-color:#ffffffbf;background:#ffffff14;transform:translateY(-2px)}.hero .hero-label{display:inline-block;margin-bottom:.9rem;padding:.2rem .8rem;border-radius:999px;font-size:.72rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:#ffffffb3;border:1px solid rgba(255,255,255,.22)}.grid-breakout{width:calc(100vw - 2rem);margin-left:calc(50% - 50vw + 1rem);margin-right:calc(50% - 50vw + 1rem)}.dm-breadcrumbs{position:fixed;z-index:200;display:inline-flex;align-items:center;gap:.2rem;padding:.3rem .8rem;border-radius:999px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);background:#00000047;border:1px solid rgba(255,255,255,.11);box-shadow:0 2px 10px #00000038;font-size:.72rem;font-weight:500;letter-spacing:.01em;line-height:1.4;max-width:calc(100vw - 2rem);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dm-breadcrumbs .dm-breadcrumbs-item{color:#ffffffa6}.dm-breadcrumbs .dm-breadcrumbs-link{display:inline-flex;align-items:center;gap:.25rem;color:#ffffff8c;text-decoration:none;transition:color .15s}.dm-breadcrumbs .dm-breadcrumbs-home-icon{flex-shrink:0;vertical-align:middle}.dm-breadcrumbs .dm-breadcrumbs-link:hover{color:#fffffff2}.dm-breadcrumbs .dm-breadcrumbs-current{color:#ffffffeb;font-weight:600}.dm-breadcrumbs .dm-breadcrumbs-separator{color:#ffffff47;font-size:.8em;line-height:1;margin:0 .05rem}body[class*=-light] .dm-breadcrumbs{background:#ffffff8c;border-color:#00000012;box-shadow:0 2px 10px #00000014}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-item,body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-link{color:#0000008c}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-link:hover{color:#000000e6}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-current{color:#000000d9}body[class*=-light] .dm-breadcrumbs .dm-breadcrumbs-separator{color:#00000040}.dm-collection-display{margin:1.5rem 0}.dm-collection-list{display:flex;flex-direction:column;gap:0}.dm-collection-list-item{padding:1rem 0;border-bottom:1px solid var(--dm-border, rgba(255, 255, 255, .08))}.dm-collection-list-item:last-child{border-bottom:none}.dm-collection-list-item strong{display:block;font-size:1rem;margin-bottom:.25rem}.dm-collection-list-item p{margin:0;color:var(--dm-text-muted, #888);font-size:.9rem}.dm-collection-empty p{color:var(--dm-text-muted, #888);font-style:italic}.hero-gradient-purple,.hero-gradient-blue,.hero-gradient-green,.hero-gradient-sunset,.hero-gradient-ocean,.hero-gradient-rose,.hero-gradient-forest{background:linear-gradient(135deg,color-mix(in srgb,var(--hero-hue) 22%,var(--dm-background)),color-mix(in srgb,var(--hero-hue) 10%,var(--dm-background)));color:var(--dm-text)}.hero-gradient-purple{--hero-hue: #8b5cf6}.hero-gradient-blue{--hero-hue: #3b82f6}.hero-gradient-green{--hero-hue: #10b981}.hero-gradient-sunset{--hero-hue: #f59e0b}.hero-gradient-ocean{--hero-hue: #0ea5e9}.hero-gradient-rose{--hero-hue: #ec4899}.hero-gradient-forest{--hero-hue: #16a34a}.hero-gradient-night{background:linear-gradient(135deg,#334155,#1e293b);color:#e2e8f0}.hero-gradient-ocean-light{background:linear-gradient(135deg,#e0f2fe,#caf0f8);color:#1e293b}.hero-gradient-ocean-dark{background:linear-gradient(135deg,#0c4a6e,#164e63);color:#e2e8f0}.hero-gradient-forest-light{background:linear-gradient(135deg,#d1fae5,#c6f6dc);color:#1e293b}.hero-gradient-forest-dark{background:linear-gradient(135deg,#1a4731,#166534);color:#e2e8f0}.hero-gradient-sunset-light{background:linear-gradient(135deg,#fde8d8,#fddcc9);color:#1e293b}.hero-gradient-sunset-dark{background:linear-gradient(135deg,#6b3727,#7c4036);color:#f5ede8}.hero-gradient-royal-light{background:linear-gradient(135deg,#e8f0fd,#dce8fc);color:#1e293b}.hero-gradient-royal-dark{background:linear-gradient(135deg,#1e3465,#263d7a);color:#e2e8f0}.hero-gradient-lemon-light{background:linear-gradient(135deg,#fefce8,#fef9c3);color:#1e293b}.hero-gradient-lemon-dark{background:linear-gradient(135deg,#5c4d1a,#6b5920);color:#fefce8}.hero-gradient-silver-light{background:linear-gradient(135deg,#f1f5f9,#e2e8f0);color:#1e293b}.hero-gradient-silver-dark{background:linear-gradient(135deg,#2d3748,#374151);color:#e2e8f0}.hero-gradient-charcoal-light{background:linear-gradient(135deg,#eceff1,#e1e7eb);color:#1e293b}.hero-gradient-charcoal-dark{background:linear-gradient(135deg,#2c3843,#374451);color:#e2e8f0}.hero-gradient-christmas-light{background:linear-gradient(135deg,#fde8ea,#fdd5d8);color:#1e293b}.hero-gradient-christmas-dark{background:linear-gradient(135deg,#5c0f1d,#7a1525);color:#fde8ea}.hero-gradient-unicorn-light{background:linear-gradient(135deg,#f5e8fd,#edd6fb);color:#1e293b}.hero-gradient-unicorn-dark{background:linear-gradient(135deg,#3d1a5a,#4a2068);color:#f5e8fd}.hero-gradient-dreamy-light{background:linear-gradient(135deg,#f5ede8,#eeddd4);color:#1e293b}.hero-gradient-dreamy-dark{background:linear-gradient(135deg,#3d2820,#503328);color:#f5ede8}.hero-gradient-grayve-light{background:linear-gradient(135deg,#e0f7f9,#cbf2f5);color:#1e293b}.hero-gradient-grayve-dark{background:linear-gradient(135deg,#00363d,#00444d);color:#e0f7f9}.hero-gradient-mint-light{background:linear-gradient(135deg,#d8f5ea,#c5efdd);color:#1e293b}.hero-gradient-mint-dark{background:linear-gradient(135deg,#134d33,#195f3f);color:#d8f5ea}.hero-gradient-wedding-light{background:linear-gradient(135deg,#faf3e0,#f5e9c7);color:#1e293b}.hero-gradient-wedding-dark{background:linear-gradient(135deg,#5c4418,#6f5320);color:#faf3e0}.tabs-centered{text-align:center}.tabs-centered .tab-list{display:inline-flex}.tabs-centered .tab-content{text-align:left}.site-main{overflow-x:hidden}@media(max-width:768px){.hero .hero-cta a,.dm-so-trigger,.dm-cta-trigger{min-height:44px;padding:.6rem 1.25rem}}.dm-banner{position:relative;display:flex;flex-direction:row;align-items:flex-start;gap:.75rem;padding:.85rem 2.5rem .85rem 1rem;border-radius:var(--dm-radius-md, 6px);border-left:4px solid transparent;margin-bottom:1rem}.dm-banner__icon{flex-shrink:0;margin-top:.1rem;width:1.15rem;height:1.15rem}.dm-banner__icon svg{width:1.15rem;height:1.15rem}.dm-banner__body{flex:1;min-width:0}.dm-banner__title{display:block;margin-bottom:.2rem;font-size:.9em;font-weight:600}.dm-banner__dismiss{position:absolute;top:.5rem;right:.5rem;background:transparent;border:none;cursor:pointer;font-size:1.1rem;line-height:1;padding:.1rem .3rem;opacity:.6}.dm-banner__dismiss:hover{opacity:1}.dm-banner--info{background:color-mix(in srgb,var(--dm-info, #3b82f6) 12%,transparent);border-left-color:var(--dm-info, #3b82f6);color:inherit}.dm-banner--success{background:color-mix(in srgb,var(--dm-success, #22c55e) 12%,transparent);border-left-color:var(--dm-success, #22c55e);color:inherit}.dm-banner--warning{background:color-mix(in srgb,var(--dm-warning, #f59e0b) 12%,transparent);border-left-color:var(--dm-warning, #f59e0b);color:inherit}.dm-banner--danger{background:color-mix(in srgb,var(--dm-danger, #ef4444) 12%,transparent);border-left-color:var(--dm-danger, #ef4444);color:inherit}.dm-banner--neutral{background:color-mix(in srgb,var(--dm-text-muted, #888) 12%,transparent);border-left-color:var(--dm-text-muted, #888);color:inherit}body.dm-layout-narrow .page-body{max-width:768px;margin-inline:auto}body.dm-layout-normal .page-body{max-width:1100px;margin-inline:auto}body.dm-layout-wide .page-body{max-width:min(75vw,2000px);margin-inline:auto}body.dm-layout-full .page-body{max-width:none}.hero h1{font-size:clamp(2.4rem,4.5vw,3.75rem);font-weight:900;line-height:1.08;letter-spacing:-.03em}.hero-gradient-dreamy-light h1{color:#1e293b}.hero-gradient-dreamy-light p{font-size:1.125rem;line-height:1.7;color:#1e293bcc;max-width:48ch}.hero-center.hero-gradient-dreamy-light p{margin-left:auto;margin-right:auto}.page-body h2{font-weight:800;letter-spacing:-.025em}.page-body h3{font-weight:700;letter-spacing:-.015em}.hero-gradient-dreamy-light .hero-cta a:first-child{background:#1e293b!important;color:#f5ede8!important;border-color:#1e293b!important}.hero-gradient-dreamy-light .hero-cta a:first-child:hover{background:#0f172a!important;color:#fff!important}.hero-gradient-dreamy-light .hero-cta a:last-child{background:transparent!important;color:#1e293b!important;border:1px solid rgba(30,41,59,.45)!important}.hero-gradient-dreamy-light .hero-cta a:last-child:hover{background:#1e293b14!important;border-color:#1e293bb3!important}.card[data-hover=true]{transition:transform .22s ease,box-shadow .22s ease!important;will-change:transform}.card[data-hover=true]:not(.card-no-hover):hover{transform:translateY(-5px)!important;box-shadow:0 24px 64px #0003,0 8px 24px #0000001f!important}.card-icon{font-size:2.5rem!important;margin-bottom:12px!important;opacity:.95}.card-avatar-wrap{padding:20px 16px 12px!important;gap:.5rem}.mk-card-icon-wrap,.card-icon-wrap{width:3rem;height:3rem;border-radius:.75rem;background:#ffffff2e;display:flex;align-items:center;justify-content:center;margin-bottom:1.125rem;font-size:1.3rem;flex-shrink:0;box-shadow:0 2px 8px #0000001f}.mk-card-corner-badge,.card-corner-badge{position:absolute;top:1rem;right:1rem;background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;font-size:.6875rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:.25rem .7rem;border-radius:99px;box-shadow:0 2px 10px #f59e0b73}.card-premium .card-subtitle{display:inline-block!important;font-size:.6875rem!important;font-weight:700!important;letter-spacing:.07em!important;text-transform:uppercase!important;opacity:1!important;color:#fff!important;background:linear-gradient(135deg,#f59e0b,#d97706)!important;padding:.2rem .65rem!important;border-radius:99px!important;box-shadow:0 2px 8px #f59e0b66!important;margin-bottom:.75rem!important}.mk-card-badge-band,.card-badge-band{display:inline-flex;align-items:center;gap:.35rem;font-size:.6875rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;padding:.2rem .6rem;border-radius:99px;margin-bottom:.875rem;background:#fff3;border:1px solid rgba(255,255,255,.3)}.mk-card-stars,.card-stars{color:#f59e0b;font-size:1rem;letter-spacing:.12em;margin-bottom:.75rem}.mk-card-reviewer,.card-reviewer{display:flex;flex-direction:column;gap:.15rem;margin-top:1rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.15)}.mk-card-reviewer-name,.card-reviewer-name{font-weight:700;font-size:.9375rem}.mk-card-reviewer-role,.card-reviewer-role{font-size:.8125rem;opacity:.65}.mk-banner.type-info,[class*=banner-info],.mk-banner[data-type=info]{border-left:4px solid var(--dm-primary, #5c3d2e)}.mk-banner.type-success,[class*=banner-success],.mk-banner[data-type=success]{border-left:4px solid var(--dm-success, #22c55e)}.mk-banner.type-warning,[class*=banner-warning],.mk-banner[data-type=warning]{border-left:4px solid var(--dm-warning, #f59e0b)}.mk-stat-number{font-size:5rem;font-weight:900;line-height:1;letter-spacing:-.03em;color:var(--dm-primary, #5c3d2e)}.mk-stat-label{font-size:.9375rem;font-weight:600;opacity:.65;margin-top:.5rem;letter-spacing:.02em;text-transform:uppercase}.mk-footer-inner{max-width:1200px;margin:0 auto;padding:3rem 2rem 1.5rem}.mk-footer-columns{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem;margin-bottom:2.5rem}@media(max-width:900px){.mk-footer-columns{grid-template-columns:repeat(2,1fr)}}@media(max-width:480px){.mk-footer-columns{grid-template-columns:1fr}}.mk-footer-col-title{font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.5;margin:0 0 .75rem}.mk-footer-col-links{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.mk-footer-col-links a{font-size:.875rem;opacity:.75;text-decoration:none;transition:opacity .15s}.mk-footer-col-links a:hover{opacity:1}.mk-footer-bottom{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:1rem;padding-top:1.5rem;border-top:1px solid var(--dm-border, rgba(0, 0, 0, .08))}.mk-footer-copyright{font-size:.8125rem;opacity:.5;margin:0}.mk-footer-bottom-right{display:flex;align-items:center;gap:1.25rem}.mk-footer-social{display:flex;gap:.75rem}.mk-footer-social-link{opacity:.5;transition:opacity .15s;font-size:1.125rem}.mk-footer-social-link:hover{opacity:1}.mk-motion-label{display:flex;align-items:center;gap:.4rem;font-size:.75rem;opacity:.5;cursor:pointer;user-select:none}.mk-motion-label:hover{opacity:.75}.dm-static-block{display:contents}.mk-window{border-radius:10px;overflow:hidden;box-shadow:0 16px 56px #0000002e,0 4px 16px #0000001a;background:#fff;border:1px solid rgba(0,0,0,.06)}.mk-window-bar{background:#e8e8e8;padding:10px 16px;display:flex;gap:7px;align-items:center}.mk-dot{width:12px;height:12px;border-radius:50%;flex-shrink:0}.mk-dot-red{background:#ff5f57}.mk-dot-amber{background:#febc2e}.mk-dot-green{background:#28c840}.mk-window-body img{width:100%;display:block;max-height:480px;object-fit:cover;object-position:top}.dm-static-block+p{margin-top:.5rem}#site-navbar:not([data-menu-active]) .navbar-link.active:not([data-menu-item-active]){opacity:1!important;font-weight:700!important;position:relative}#site-navbar:not([data-menu-active]) .navbar-link.active:not([data-menu-item-active]):after{content:"";position:absolute;bottom:-3px;left:0;right:0;height:2px;background:currentColor;border-radius:2px;opacity:.6}.mk-divider{border:none;border-top:1px solid var(--dm-border-light, rgba(0, 0, 0, .07));margin:0}.page-body .mk-tabs,.page-body .tabs-wrapper,.page-body>.tabs{padding-left:1.5rem;padding-right:1.5rem}.mk-section-label,.section-label{display:inline-block;font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:.3rem .875rem;border-radius:99px;margin-bottom:1.125rem;background:color-mix(in srgb,var(--dm-primary, #5c3d2e) 10%,transparent);color:var(--dm-primary, #5c3d2e);border:1px solid color-mix(in srgb,var(--dm-primary, #5c3d2e) 20%,transparent)}.page-body .btn-primary,.page-body a.btn-primary{background-color:var(--dm-primary, #8d6e63)!important;color:var(--dm-text-inverse, #ffffff)!important;border:1px solid var(--dm-primary, #8d6e63)!important;text-decoration:none!important;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.page-body .btn-primary:hover,.page-body a.btn-primary:hover{background-color:var(--dm-primary-hover, #6d4c41)!important;color:var(--dm-text-inverse, #ffffff)!important;border-color:var(--dm-primary-hover, #6d4c41)!important;text-decoration:none!important}.page-body .btn-outline,.page-body a.btn-outline{background-color:transparent!important;color:var(--dm-primary, #8d6e63)!important;border:1.5px solid var(--dm-primary, #8d6e63)!important;text-decoration:none!important;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.page-body .btn-outline:hover,.page-body a.btn-outline:hover{background-color:var(--dm-primary, #8d6e63)!important;color:var(--dm-text-inverse, #ffffff)!important;border-color:var(--dm-primary, #8d6e63)!important;text-decoration:none!important}.page-body .btn-ghost,.page-body a.btn-ghost{background-color:transparent!important;color:var(--dm-primary, #8d6e63)!important;border:1px solid transparent!important;text-decoration:none!important;transition:background-color .15s ease,color .15s ease}.page-body .btn-ghost:hover,.page-body a.btn-ghost:hover{background-color:var(--dm-primary-light, rgba(141, 110, 99, .1))!important;color:var(--dm-primary-hover, #6d4c41)!important;text-decoration:none!important}.mk-card-step-number,.card-step-number{font-size:3rem;font-weight:900;line-height:1;letter-spacing:-.04em;opacity:.25;margin-bottom:.75rem}.mk-card-step-title,.card-step-title{font-size:1rem;font-weight:700;margin-bottom:.5rem}.card[data-badge=Enterprise] .mk-card-corner-badge,.card[data-badge=Enterprise] .card-corner-badge{background:linear-gradient(135deg,#1e293b,#334155);box-shadow:0 2px 10px #1e293b80}.card-badge-band-icon{font-size:1.75rem!important}.card-badge-band{padding:14px 18px!important;gap:.5rem}.card-badge-band-label{font-size:.7rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.card-title{font-size:1.2rem!important;font-weight:800!important;letter-spacing:-.015em!important;line-height:1.25!important;margin-bottom:.4rem!important;color:var(--dm-text, #f1f5f9)!important}.card-subtitle{font-size:.8125rem!important;opacity:.7!important;margin-bottom:.5rem!important;font-weight:500!important;color:var(--dm-text, #f1f5f9)!important}.mk-card-body p,.card-body p,.card>p{font-size:.9375rem;line-height:1.65;opacity:.88}.card-gradient-purple{background:linear-gradient(135deg,#ede9fe,#ddd6fe)!important;color:#1e1b4b!important}.card-gradient-blue{background:linear-gradient(135deg,#dbeafe,#bfdbfe)!important;color:#1e3a5f!important}.card-gradient-green{background:linear-gradient(135deg,#d1fae5,#a7f3d0)!important;color:#064e3b!important}.card-gradient-night{background:linear-gradient(135deg,#334155,#1e293b)!important;color:#e2e8f0!important}.card-gradient-ocean-light{background:linear-gradient(135deg,#e0f2fe,#caf0f8)!important;color:#1e293b!important}.card-gradient-ocean-dark{background:linear-gradient(135deg,#0c4a6e,#164e63)!important;color:#e2e8f0!important}.card-gradient-forest-light{background:linear-gradient(135deg,#d1fae5,#c6f6dc)!important;color:#1e293b!important}.card-gradient-forest-dark{background:linear-gradient(135deg,#1a4731,#166534)!important;color:#e2e8f0!important}.card-gradient-sunset-light{background:linear-gradient(135deg,#fde8d8,#fddcc9)!important;color:#1e293b!important}.card-gradient-sunset-dark{background:linear-gradient(135deg,#6b3727,#7c4036)!important;color:#f5ede8!important}.card-gradient-royal-light{background:linear-gradient(135deg,#e8f0fd,#dce8fc)!important;color:#1e293b!important}.card-gradient-royal-dark{background:linear-gradient(135deg,#1e3465,#263d7a)!important;color:#e2e8f0!important}.card-gradient-lemon-light{background:linear-gradient(135deg,#fefce8,#fef9c3)!important;color:#1e293b!important}.card-gradient-lemon-dark{background:linear-gradient(135deg,#5c4d1a,#6b5920)!important;color:#fefce8!important}.card-gradient-silver-light{background:linear-gradient(135deg,#f1f5f9,#e2e8f0)!important;color:#1e293b!important}.card-gradient-silver-dark{background:linear-gradient(135deg,#2d3748,#374151)!important;color:#e2e8f0!important}.card-gradient-charcoal-light{background:linear-gradient(135deg,#eceff1,#e1e7eb)!important;color:#1e293b!important}.card-gradient-charcoal-dark{background:linear-gradient(135deg,#2c3843,#374451)!important;color:#e2e8f0!important}.card-gradient-christmas-light{background:linear-gradient(135deg,#fde8ea,#fdd5d8)!important;color:#1e293b!important}.card-gradient-christmas-dark{background:linear-gradient(135deg,#5c0f1d,#7a1525)!important;color:#fde8ea!important}.card-gradient-unicorn-light{background:linear-gradient(135deg,#f5e8fd,#edd6fb)!important;color:#1e293b!important}.card-gradient-unicorn-dark{background:linear-gradient(135deg,#3d1a5a,#4a2068)!important;color:#f5e8fd!important}.card-gradient-dreamy-light{background:linear-gradient(135deg,#f5ede8,#eeddd4)!important;color:#1e293b!important}.card-gradient-dreamy-dark{background:linear-gradient(135deg,#3d2820,#503328)!important;color:#f5ede8!important}.card-gradient-grayve-light{background:linear-gradient(135deg,#e0f7f9,#cbf2f5)!important;color:#1e293b!important}.card-gradient-grayve-dark{background:linear-gradient(135deg,#00363d,#00444d)!important;color:#e0f7f9!important}.card-gradient-mint-light{background:linear-gradient(135deg,#d8f5ea,#c5efdd)!important;color:#1e293b!important}.card-gradient-mint-dark{background:linear-gradient(135deg,#134d33,#195f3f)!important;color:#d8f5ea!important}.card-gradient-wedding-light{background:linear-gradient(135deg,#faf3e0,#f5e9c7)!important;color:#1e293b!important}.card-gradient-wedding-dark{background:linear-gradient(135deg,#5c4418,#6f5320)!important;color:#faf3e0!important}.card-gradient-slate{--dm-card-g-start: #475569;--dm-card-g-end: #1e293b}.card-gradient-dusk{--dm-card-g-start: #7c3aed;--dm-card-g-end: #db2777}.card-gradient-sunset{--dm-card-g-start: #f59e0b;--dm-card-g-end: #ec4899}.card-gradient-rose{--dm-card-g-start: #fb7185;--dm-card-g-end: #e11d48}.card-gradient-gold{--dm-card-g-start: #f59e0b;--dm-card-g-end: #b45309}.card-gradient-fire{--dm-card-g-start: #ef4444;--dm-card-g-end: #fbbf24}.page-body .card.dm-card-gradient.card-gradient-sunset .card-header,.page-body .card.dm-card-gradient.card-gradient-rose .card-header,.page-body .card.dm-card-gradient.card-gradient-gold .card-header,.page-body .card.dm-card-gradient.card-gradient-fire .card-header{color:#1e293b!important}.page-body .card.dm-card-gradient[class*=-light] .card-header,.page-body .card.dm-card-gradient[class*=-dark] .card-header,.page-body .card.dm-card-gradient.card-gradient-purple .card-header,.page-body .card.dm-card-gradient.card-gradient-blue .card-header,.page-body .card.dm-card-gradient.card-gradient-green .card-header,.page-body .card.dm-card-gradient.card-gradient-night .card-header{background:transparent!important;color:inherit!important;border-bottom:1px solid rgba(0,0,0,.08)}.card[class*=card-gradient-] .card-title,.card[class*=card-gradient-] .card-subtitle{color:inherit!important}.card[class*=gradient] .mk-window-bar,.card[data-gradient] .mk-window-bar{background:#00000040}.card[class*=gradient] .mk-dot-red{background:#ff5f57b3}.card[class*=gradient] .mk-dot-amber{background:#febc2eb3}.card[class*=gradient] .mk-dot-green{background:#28c840b3}.hero .card .mk-listgroup-item,.hero .card .list-group-item{padding-top:.45rem;padding-bottom:.45rem;font-size:.9rem}.card .dm-static-block{display:block;width:100%}.card .mk-window{margin-bottom:0}.wf-feature{display:flex;align-items:center;gap:14px;padding:14px 16px;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:8px;box-shadow:0 1px 3px #0f172a0a;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.wf-feature:hover{border-color:var(--dm-border-dark, #475569);box-shadow:0 6px 18px #0f172a14;transform:translateY(-1px)}.wf-feature-icon{flex-shrink:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:8px;font-size:1.1rem}.wf-feature-text{font-size:.9rem;font-weight:500;color:var(--dm-text, #1e293b);line-height:1.4;flex:1 1 auto}.plugin-card{display:flex;flex-direction:column;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:12px;overflow:hidden;box-shadow:0 2px 6px #0f172a0d;text-decoration:none!important;color:inherit!important;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;height:100%;min-height:340px}.plugin-card:hover{transform:translateY(-3px);box-shadow:0 18px 40px #0f172a1f;border-color:var(--dm-border-dark, #475569)}.plugin-card-cover{position:relative;width:100%;height:150px;background-size:cover;background-position:center;background-color:var(--dm-background-alt, #e2e8f0);flex-shrink:0}.plugin-card-cover:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#0000001a,#0f172a8c)}.plugin-card-tier-badge{position:absolute;top:12px;right:12px;z-index:2;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:4px 10px;border-radius:20px;color:#1e293b;background:#fff;box-shadow:0 2px 8px #0f172a40}.plugin-card[data-tier=free] .plugin-card-tier-badge:before{content:"Free"}.plugin-card[data-tier=premium] .plugin-card-tier-badge:before{content:"Premium"}.plugin-card[data-tier=premium] .plugin-card-tier-badge{color:#f1f5f9;background:linear-gradient(135deg,#475569,#1e293b)}.plugin-card-body{flex:1 1 auto;padding:20px;display:flex;flex-direction:column;gap:10px;background:var(--dm-card-bg, #fff);color:var(--dm-text, #1e293b)}.plugin-card-head{display:flex;align-items:center;gap:12px}.plugin-card-icon{flex-shrink:0;width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:10px;font-size:1.3rem;box-shadow:0 2px 6px #0f172a2e}.plugin-card-title{font-size:1.15rem!important;font-weight:700!important;color:var(--dm-text, #1e293b)!important;line-height:1.2!important;margin:0!important}.plugin-card-desc{font-size:.88rem!important;color:var(--dm-text-secondary, #475569)!important;line-height:1.5!important;margin:0!important;flex:1 1 auto}.plugin-card-cta{display:inline-flex;align-items:center;gap:4px;font-size:.82rem;font-weight:600;color:var(--dm-text-secondary, #475569);margin-top:8px;transition:color .15s ease,gap .15s ease}.plugin-card:hover .plugin-card-cta{color:var(--dm-text, #1e293b);gap:8px}.page-body a:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not([data-menu-hover] a):not([data-menu-active] a){color:var(--cms-link-color, var(--dm-link, var(--dm-primary, var(--dm-text, #5d4037))))!important;text-decoration:underline;text-decoration-color:var(--dm-border, rgba(0, 0, 0, .2));text-underline-offset:3px;text-decoration-thickness:1.5px;transition:color .15s ease,text-decoration-color .15s ease}.page-body a:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not([data-menu-hover] a):not([data-menu-active] a):hover{color:var(--cms-link-hover-color, var(--dm-link-hover, var(--dm-primary-hover, var(--dm-text, #3e2723))))!important;text-decoration-color:var(--cms-link-color, var(--dm-link, var(--dm-primary, currentColor)))}.page-body .dm-card-gradient .card-body a:not([class*=btn]){color:var(--dm-link, var(--dm-primary, var(--dm-text, #5d4037)))!important}.page-body .dm-card-gradient .card-body a:not([class*=btn]):hover{color:var(--dm-link-hover, var(--dm-primary-hover, var(--dm-text, #3e2723)))!important}html body .page-body a[href]:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not(.dm-breadcrumbs-link):not([data-menu-hover] a):not([data-menu-active] a){color:var(--cms-link-color, var(--dm-link, var(--dm-primary, #8d6e63)))!important}html body .page-body a[href]:not([class*=btn]):not(.plugin-card):not([class*=nav]):not([class*=footer]):not(.dm-breadcrumbs-link):not([data-menu-hover] a):not([data-menu-active] a):hover{color:var(--cms-link-hover-color, var(--dm-link-hover, var(--dm-primary-hover, #6d4c41)))!important}.page-body .hero-cta:not(.hero .hero-cta) a:not([class*=btn]),.page-body>* .hero-cta a:not([class*=btn]){color:var(--dm-primary, #8d6e63)!important;text-decoration:none!important;background:transparent;border:1px solid var(--dm-border, rgba(141, 110, 99, .35));padding:.55rem 1.35rem;border-radius:6px;font-weight:500;display:inline-flex;align-items:center;gap:.4rem;transition:background .15s ease,border-color .15s ease,color .15s ease}.page-body .hero-cta:not(.hero .hero-cta) a:not([class*=btn]):hover,.page-body>* .hero-cta a:not([class*=btn]):hover{color:var(--dm-primary-hover, #6d4c41)!important;background:var(--dm-primary-light, rgba(141, 110, 99, .08));border-color:var(--dm-primary, #8d6e63)}.feature-image{width:100%;max-height:420px;object-fit:cover;border-radius:12px;box-shadow:0 12px 36px #0f172a26;display:block}.page-body .grid>.col:has(>.feature-image),.page-body .grid>.col:has(.reveal>.feature-image),.page-body .grid>.col:has(.feature-image){display:flex;flex-direction:column;justify-content:center}.code-label{display:inline-flex;align-items:center;gap:8px;font-family:Fira Code,Consolas,Monaco,monospace;font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#f1f5f9bf;background:#0f172a8c;padding:6px 12px;border-radius:6px 6px 0 0;border-bottom:1px solid rgba(241,245,249,.12)}.code-label+.code-block{margin-top:0!important;border-top-left-radius:0;border-top-right-radius:0}.code-block{display:block;background:#0f172a!important;color:#e2e8f0!important;padding:18px 20px!important;border-radius:8px;overflow-x:auto;font-size:.85rem;line-height:1.55;margin:0 0 20px;box-shadow:inset 0 0 0 1px #f1f5f914;white-space:pre;font-family:Fira Code,Consolas,Monaco,Courier New,monospace}.code-block code{background:transparent!important;color:inherit!important;padding:0!important;font-family:inherit!important;font-size:inherit;white-space:pre;display:block}.page-body .card-body>pre>code,.page-body .card-body pre.code-block>code{color:#e2e8f0!important}.run-option-card{display:flex;flex-direction:column;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:14px;overflow:hidden;box-shadow:0 4px 14px #0f172a14;height:100%;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.run-option-card:hover{transform:translateY(-3px);box-shadow:0 20px 48px #0f172a24;border-color:var(--dm-border-dark, #475569)}.run-option-banner{position:relative;width:100%;height:180px;background-size:cover;background-position:center;background-color:var(--dm-background-alt, #e2e8f0);flex-shrink:0}.run-option-banner:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#0f172a1a,#0f172ab3)}.run-option-icon-chip{position:absolute;bottom:-26px;left:24px;z-index:2;width:56px;height:56px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:14px;font-size:1.6rem;box-shadow:0 8px 20px #0f172a4d;border:3px solid var(--dm-card-bg, #fff)}.run-option-card-body{flex:1 1 auto;padding:40px 24px 24px;display:flex;flex-direction:column;gap:10px}.run-option-title{font-size:1.5rem!important;font-weight:800!important;color:var(--dm-text, #1e293b)!important;margin:0!important;line-height:1.15!important;letter-spacing:-.01em!important}.run-option-sub{font-size:.9rem!important;font-weight:600!important;color:var(--dm-primary, #5d4037)!important;margin:0 0 8px!important;text-transform:uppercase;letter-spacing:.06em}.run-option-content{flex:1 1 auto;font-size:.92rem;line-height:1.55;color:var(--dm-text-secondary, #475569)}.run-option-content p{margin:0 0 12px}.run-option-content .run-option-intro{font-size:.98rem;color:var(--dm-text, #1e293b);font-weight:500;margin-bottom:16px}.run-option-content .run-option-body-label{font-size:.82rem;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-primary, #5d4037);margin-bottom:8px}.run-option-content .run-option-req{font-size:.82rem;color:var(--dm-text-muted, #64748b);margin-top:14px}.run-option-content .code-block{margin:8px 0 14px}.run-option-list{list-style:none;padding:0;margin:0 0 14px;display:flex;flex-direction:column;gap:8px}.run-option-list li{display:flex;align-items:center;gap:10px;font-size:.9rem;color:var(--dm-text, #1e293b)}.run-option-list li [data-icon]{color:var(--dm-primary, #5d4037);flex-shrink:0}.run-option-ctas{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px;padding-top:20px;border-top:1px solid var(--dm-border, #e2e8f0)}.run-option-ctas .btn{flex:1 1 auto;text-align:center;white-space:nowrap;min-width:fit-content}.quickstart-step{position:relative;padding:28px 22px 24px;background:var(--dm-card-bg, #ffffff);border:1px solid var(--dm-card-border, #e2e8f0);border-radius:12px;box-shadow:0 2px 8px #0f172a0d;overflow:hidden;height:100%;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.quickstart-step:hover{transform:translateY(-3px);box-shadow:0 16px 36px #0f172a1f;border-color:var(--dm-border-dark, #475569)}.quickstart-step-number{position:absolute;top:8px;right:14px;font-size:5rem;font-weight:900;line-height:1;color:color-mix(in srgb,var(--dm-text) 8%,transparent);font-variant-numeric:tabular-nums;pointer-events:none;user-select:none}.quickstart-step-icon{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:linear-gradient(135deg,#475569,#1e293b);color:#f1f5f9;border-radius:10px;font-size:1.3rem;margin-bottom:14px;box-shadow:0 4px 12px #0f172a2e;position:relative;z-index:1}.quickstart-step-title{font-size:1.1rem!important;font-weight:800!important;color:var(--dm-text, #1e293b)!important;margin:0 0 8px!important;line-height:1.2!important;letter-spacing:-.01em!important;position:relative;z-index:1}.quickstart-step-desc{font-size:.86rem;line-height:1.55;color:var(--dm-text-secondary, #475569);margin:0;position:relative;z-index:1}:not(:defined){visibility:hidden}.dm-collection-browser{display:block;margin:1.5rem 0}.dm-collection-browser.dm-cb-hydrated .dm-cb-fallback{display:none}.dm-cb-header{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;justify-content:space-between;margin-bottom:1rem}.dm-cb-search{flex:1 1 240px;min-width:200px}.dm-cb-search-input{width:100%;padding:.5rem .75rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);color:var(--dm-text, #111827);font-size:.95rem}.dm-cb-sort{display:flex;align-items:center;gap:.5rem;flex:0 0 auto}.dm-cb-sort-label{font-size:.85rem;color:var(--dm-text-muted, #6b7280);margin:0}.dm-cb-sort-select{padding:.45rem .6rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);color:var(--dm-text, #111827)}.dm-cb-sort-dir{width:2rem;height:2rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);cursor:pointer;font-weight:700}.dm-cb-sort-dir:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-layout{display:grid;grid-template-columns:minmax(220px,1fr) 3fr;gap:1.5rem;align-items:start}@media(max-width:768px){.dm-cb-layout{grid-template-columns:1fr}.dm-cb-filter-rail{border:1px solid var(--dm-border, #e5e7eb);border-radius:var(--dm-radius-md, 6px);padding:.75rem}}.dm-cb-filter-rail{padding:.5rem 0;font-size:.92rem}.dm-cb-filter-heading{margin:0 0 .75rem;font-size:.95rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--dm-text-muted, #6b7280)}.dm-cb-filter{margin-bottom:1rem;display:flex;flex-direction:column;gap:.35rem}.dm-cb-filter-label{font-weight:600;font-size:.85rem;color:var(--dm-text, #111827)}.dm-cb-text,.dm-cb-select,.dm-cb-range input{width:100%;padding:.4rem .55rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px);background:var(--dm-background, #fff);color:var(--dm-text, #111827);font-size:.9rem}.dm-cb-range{display:flex;align-items:center;gap:.4rem}.dm-cb-range input{flex:1;min-width:0}.dm-cb-multiselect{display:flex;flex-direction:column;gap:.3rem;max-height:11rem;overflow-y:auto;padding:.4rem .55rem;border:1px solid var(--dm-border, #d1d5db);border-radius:var(--dm-radius-md, 6px)}.dm-cb-check{display:flex;align-items:center;gap:.4rem;font-size:.88rem;cursor:pointer;margin:0}.dm-cb-filter-reset{width:100%;margin-top:.5rem;padding:.45rem .6rem;border:1px solid var(--dm-border, #d1d5db);background:transparent;color:var(--dm-text, #374151);border-radius:var(--dm-radius-md, 6px);cursor:pointer;font-size:.85rem}.dm-cb-filter-reset:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-body{min-height:4rem}.dm-cb-pagination{display:flex;align-items:center;justify-content:center;gap:1rem;margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--dm-border, #e5e7eb)}.dm-cb-page-info{font-size:.88rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-page-prev[disabled],.dm-cb-page-next[disabled]{opacity:.45;cursor:not-allowed}.dm-cb-chips{display:flex;flex-wrap:wrap;gap:.35rem;padding:.1rem 0}.dm-cb-chip{display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .6rem;border:1px solid var(--dm-border, #d1d5db);background:var(--dm-background, #fff);color:var(--dm-text, #111827);border-radius:999px;cursor:pointer;font-size:.82rem;transition:background-color .12s ease,border-color .12s ease}.dm-cb-chip:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-chip-active{background:var(--dm-primary, #2563eb);color:var(--dm-primary-text, #fff);border-color:var(--dm-primary, #2563eb)}.dm-cb-chip-count{font-size:.75rem;opacity:.75;font-variant-numeric:tabular-nums}.dm-cb-chip-active .dm-cb-chip-count{opacity:.85}.dm-cb-slider{position:relative;height:1.5rem;margin:.5rem .25rem}.dm-cb-slider-track{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);height:4px;background:var(--dm-border, #e5e7eb);border-radius:2px}.dm-cb-slider-fill{position:absolute;top:0;bottom:0;background:var(--dm-primary, #2563eb);border-radius:2px}.dm-cb-slider-handle{position:absolute;inset:0;width:100%;height:100%;margin:0;background:transparent;pointer-events:none;-webkit-appearance:none;appearance:none}.dm-cb-slider-handle::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;height:1rem;width:1rem;border-radius:50%;background:var(--dm-primary, #2563eb);border:2px solid var(--dm-background, #fff);box-shadow:0 1px 3px #00000026;pointer-events:auto;cursor:grab}.dm-cb-slider-handle::-moz-range-thumb{height:1rem;width:1rem;border-radius:50%;background:var(--dm-primary, #2563eb);border:2px solid var(--dm-background, #fff);box-shadow:0 1px 3px #00000026;pointer-events:auto;cursor:grab}.dm-cb-range-inputs{display:flex;gap:.4rem;align-items:center}.dm-cb-saved{position:relative}.dm-cb-saved-menu{position:absolute;right:0;top:calc(100% + .25rem);min-width:12rem;padding:.5rem;background:var(--dm-background, #fff);border:1px solid var(--dm-border, #e5e7eb);border-radius:var(--dm-radius-md, 6px);box-shadow:0 8px 24px #0f172a1f;z-index:20}.dm-cb-saved-empty{margin:0 0 .5rem;font-size:.85rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-saved-item{display:flex;align-items:center;gap:.4rem;margin-bottom:.25rem}.dm-cb-saved-apply{flex:1;text-align:left;padding:.35rem .5rem;background:transparent;border:0;border-radius:var(--dm-radius-md, 6px);cursor:pointer;font-size:.88rem;color:var(--dm-text, #111827)}.dm-cb-saved-apply:hover{background:var(--dm-background-alt, #f3f4f6)}.dm-cb-saved-del{width:1.5rem;height:1.5rem;padding:0;background:transparent;border:0;color:var(--dm-text-muted, #9ca3af);cursor:pointer;font-size:1.1rem}.dm-cb-saved-del:hover{color:var(--dm-danger, #dc2626)}.dm-cb-saved-actions{border-top:1px solid var(--dm-border, #e5e7eb);padding-top:.5rem;margin-top:.5rem}.dm-cb-saved-create{width:100%;padding:.45rem .6rem;font-size:.85rem}.dm-cb-export{padding:.45rem .7rem;font-size:.85rem}.dm-cb-empty-clear{margin-top:.75rem}.dm-cb-scroll-sentinel{text-align:center;padding:1rem 0;font-size:.85rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-scroll-end{text-align:center;margin:1rem 0 0;font-size:.85rem;color:var(--dm-text-muted, #9ca3af);font-style:italic}.dm-cb-block-loading{text-align:center;padding:2rem 0;color:var(--dm-text-muted, #9ca3af);font-style:italic}.dm-cb-drawer-toggle{display:none;align-items:center;gap:.4rem;padding:.45rem .75rem;font-size:.88rem}.dm-cb-drawer-count{font-variant-numeric:tabular-nums;font-weight:600;color:var(--dm-primary, #2563eb)}.dm-cb-drawer-count:empty{display:none}@media(max-width:768px){.dm-cb-drawer-toggle{display:inline-flex}.dm-cb-filter-rail{position:fixed;top:0;left:-100%;width:85%;max-width:22rem;height:100vh;background:var(--dm-background, #fff);border-right:1px solid var(--dm-border, #e5e7eb);box-shadow:4px 0 16px #00000014;padding:1.25rem;z-index:100;overflow-y:auto;transition:left .22s ease}.dm-cb-drawer-open .dm-cb-filter-rail{left:0}.dm-cb-drawer-open:before{content:"";position:fixed;inset:0;background:#00000059;z-index:99}}.dm-file-thumb{max-width:180px;max-height:120px;border-radius:var(--dm-radius-md, 6px);border:1px solid var(--dm-border, #e5e7eb);display:inline-block;object-fit:cover}.dm-cb-transitions{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.5rem;font-size:.85rem;color:var(--dm-text-muted, #6b7280)}.dm-cb-transitions:empty{display:none}.dm-cb-transition-btn{padding:.35rem .7rem;font-size:.82rem}.dm-menu-sep,.footer-sep{list-style:none}.dm-menu-sep hr,.footer-sep hr{border:0;border-top:1px solid var(--dm-border, rgba(128, 128, 128, .35));margin:.4rem 0}.dm-menu-spacer{list-style:none;pointer-events:none;padding:0;margin:0;border:0}.dm-menu-spacer--xs{height:var(--dm-space-1, .25rem)}.dm-menu-spacer--sm{height:var(--dm-space-2, .5rem)}.dm-menu-spacer--md{height:var(--dm-space-4, 1rem)}.dm-menu-spacer--lg{height:var(--dm-space-6, 1.5rem)}.dm-menu-spacer--xl{height:var(--dm-space-10, 2.5rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--xs,.navbar-nav>.dm-menu-spacer--xs{height:auto;width:var(--dm-space-1, .25rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--sm,.navbar-nav>.dm-menu-spacer--sm{height:auto;width:var(--dm-space-2, .5rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--md,.navbar-nav>.dm-menu-spacer--md{height:auto;width:var(--dm-space-4, 1rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--lg,.navbar-nav>.dm-menu-spacer--lg{height:auto;width:var(--dm-space-6, 1.5rem)}.dm-menu--horizontal>ul>.dm-menu-spacer--xl,.navbar-nav>.dm-menu-spacer--xl{height:auto;width:var(--dm-space-10, 2.5rem)}.dm-menu--has-flex-spacer>ul{display:flex;flex-direction:column}.dm-menu--has-flex-spacer.dm-menu--horizontal>ul{flex-direction:row;align-items:center}.dm-menu-spacer--flex{flex:1 1 auto;height:auto;width:auto}.dm-menu-floating .dm-menu-spacer--flex{min-height:var(--dm-space-4, 1rem)}@media(max-width:768px){.dm-menu--has-flex-spacer.dm-menu--horizontal>ul{flex-wrap:wrap}}#site-navbar .navbar-dropdown-divider{background:var(--dm-border, rgba(128, 128, 128, .5));opacity:.8}.dm-menu-badge{display:inline-block;margin-left:6px;padding:1px 7px;font-size:.7em;font-weight:700;line-height:1.4;border-radius:999px;background:var(--dm-text-muted);color:var(--dm-text-inverse, #fff);vertical-align:middle}.dm-nav-pill{border-radius:999px;padding:6px 14px;font-weight:600}.dm-nav-pill--outline{background:transparent!important;border:1px solid currentColor}@media(max-width:992px){#site-navbar .navbar-toggle{order:0;margin-right:var(--dm-space-2)}#site-navbar .navbar-brand{order:1}#site-navbar .navbar-collapse{position:fixed;top:0;left:0;bottom:0;width:86vw;max-width:340px;z-index:1100;margin:0;padding:var(--dm-space-3) 0 var(--dm-space-6);background:var(--dm-navbar-bg, var(--dm-surface));border-top:none;border-right:1px solid var(--dm-border);box-shadow:4px 0 18px #00000059;transform:translate(-100%);transition:transform .25s ease;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}#site-navbar .navbar-collapse.show{transform:translate(0)}body.dm-drawer-open #site-navbar{z-index:1100}#site-navbar .navbar-nav{max-height:none;overflow:visible}#site-navbar .navbar-dropdown-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:var(--dm-space-3) var(--dm-space-4);font-size:var(--dm-font-size-base)}#site-navbar .navbar-caret{margin-left:auto;flex:none;width:16px;height:16px;opacity:.9}#site-navbar .navbar-dropdown-menu{position:static;display:none;min-width:0;width:100%;margin:0;padding:0;border:0;border-radius:0;box-shadow:none;background:color-mix(in srgb,var(--dm-text) 8%,transparent)}#site-navbar .navbar-dropdown.open>.navbar-dropdown-menu{display:block}#site-navbar .navbar-dropdown-item{padding-left:calc(var(--dm-space-4) + var(--dm-space-5))}.dm-navbar-backdrop{position:fixed;inset:0;z-index:1090;background:#00000073;border:0;padding:0;cursor:pointer}body.dm-drawer-open{overflow:hidden}}.dm-embed{margin:1.5rem 0}.dm-embed-frame{overflow:hidden;border-radius:8px;background:#000}.dm-embed-caption{margin-top:.5rem;font-size:.85rem;color:var(--dm-text-muted, #6b7280);text-align:center}.dm-embed-blocked{margin:1.5rem 0;padding:.75rem 1rem;border:1px dashed var(--dm-border, #d1d5db);border-radius:8px;background:var(--dm-background-alt, #f9fafb);color:var(--dm-text-muted, #6b7280);font-size:.9rem}.dm-menu-missing{margin:1rem 0;padding:.6rem .9rem;border:1px dashed var(--dm-border, #d1d5db);border-radius:8px;background:var(--dm-background-alt, #f9fafb);color:var(--dm-text-muted, #6b7280);font-size:.9rem}.dm-embed-blocked code{font-family:var(--dm-font-mono, monospace);font-size:.85em}.dm-menu-floating{overflow:auto;overscroll-behavior:contain;background:var(--dm-surface);color:var(--dm-text);border:1px solid var(--dm-border);border-radius:var(--dm-radius-md, 8px);box-shadow:var(--dm-shadow-lg);scrollbar-width:thin;scrollbar-color:var(--dm-border) transparent}.dm-menu-floating[style*=--dm-menu-accent]{border-left:3px solid var(--dm-menu-accent)}.dm-menu-floating[data-float-anchor=TR][style*=--dm-menu-accent],.dm-menu-floating[data-float-anchor=BR][style*=--dm-menu-accent],.dm-menu-floating[data-float-anchor=R][style*=--dm-menu-accent]{border-left:1px solid var(--dm-menu-accent);border-right:3px solid var(--dm-menu-accent)}.dm-menu-floating[style*=--dm-menu-panel-opacity]{background:color-mix(in srgb,var(--dm-surface) calc(var(--dm-menu-panel-opacity) * 100%),transparent);backdrop-filter:blur(8px)}.dm-menu-float-bar{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:var(--dm-space-2, .5rem);padding:var(--dm-space-2, .5rem) var(--dm-space-3, .75rem);background:inherit;border-bottom:1px solid var(--dm-border);border-radius:inherit;border-bottom-left-radius:0;border-bottom-right-radius:0}.dm-menu-float-title{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;font-weight:600;letter-spacing:.02em;color:var(--dm-text-muted, #6b7280)}.dm-menu-float-grip{flex:0 0 auto;width:10px;height:16px;background-image:radial-gradient(currentColor 1px,transparent 1px);background-size:5px 5px;background-position:0 2px;color:var(--dm-text-muted, #6b7280);opacity:.6}.dm-menu-floating[data-float-movable] .dm-menu-float-bar{cursor:grab}.dm-menu-floating.is-dragging,.dm-menu-floating.is-dragging .dm-menu-float-bar{cursor:grabbing}.dm-menu-floating.is-dragging{user-select:none}.dm-menu-floating[data-float-movable] .dm-menu-float-bar{touch-action:none}.dm-menu-float-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;border-radius:var(--dm-radius-sm, 4px);background:transparent;color:var(--dm-text);cursor:pointer}.dm-menu-float-toggle:hover{background:var(--dm-hover-bg, rgba(128, 128, 128, .14))}.dm-menu-float-toggle:focus-visible{outline:2px solid var(--dm-primary);outline-offset:1px}.dm-menu-float-icon{position:relative;width:16px;height:2px;background:currentColor;border-radius:1px}.dm-menu-float-icon:before,.dm-menu-float-icon:after{content:"";position:absolute;left:0;width:100%;height:2px;background:currentColor;border-radius:1px}.dm-menu-float-icon:before{top:-5px}.dm-menu-float-icon:after{top:5px}.dm-menu-floating.is-collapsed{width:auto!important;max-height:none!important;overflow:visible;padding:0;background:transparent;border:0;box-shadow:none;backdrop-filter:none;resize:none;min-width:0;min-height:0}.dm-menu-floating.is-collapsed>*:not(.dm-menu-float-bar),.dm-menu-floating.is-collapsed .dm-menu-float-grip,.dm-menu-floating.is-collapsed .dm-menu-float-title{display:none}#site-navbar.dm-menu-floating.is-collapsed>*:not(.dm-menu-float-bar){display:none}#site-navbar.dm-menu-floating.is-collapsed{width:auto!important;max-height:none!important;padding:0;background:transparent;border:0;box-shadow:none;backdrop-filter:none}.dm-menu-floating.is-collapsed .dm-menu-float-bar{padding:0;border:0;background:transparent;cursor:default}.dm-menu-floating.is-collapsed .dm-menu-float-toggle{width:44px;height:44px;border-radius:50%;background:var(--dm-surface);border:1px solid var(--dm-menu-accent, var(--dm-border));box-shadow:var(--dm-shadow-lg)}.navbar-transparent,.dm-menu--variant-transparent,.dm-menu-floating.navbar-transparent,.dm-menu-floating.dm-menu--variant-transparent{background:transparent;border-color:transparent;box-shadow:none;backdrop-filter:none}.navbar-transparent.is-collapsed .dm-menu-float-toggle,.dm-menu--variant-transparent.is-collapsed .dm-menu-float-toggle{background:var(--dm-surface)}.navbar-transparent .dm-menu-float-bar,.dm-menu--variant-transparent .dm-menu-float-bar{border-bottom-color:transparent}.dm-menu-floating[data-float-resizable]:not(.is-collapsed){resize:both;min-width:120px;min-height:48px}@media(max-width:768px){.dm-menu-floating{position:static!important;inset:auto!important;width:auto!important;max-height:none!important;transform:none!important;resize:none!important}.dm-menu-floating[data-float-movable] .dm-menu-float-bar{cursor:default}.dm-menu-floating[data-float-movable] .dm-menu-float-grip{display:none}}.dm-menu--vertical ul,.dm-menu--horizontal ul{list-style:none;margin:0;padding:0}.dm-menu--vertical>ul{display:flex;flex-direction:column;gap:2px}.dm-menu--vertical>ul>li>a{display:block;padding:.4rem .75rem;border-radius:var(--dm-radius-md, 6px);text-decoration:none}.dm-menu--vertical>ul>li>a:hover{background:color-mix(in srgb,var(--dm-text) 8%,transparent)}.dm-menu--vertical ul ul{margin-left:.75rem;border-left:1px solid var(--dm-border, rgba(128, 128, 128, .35));padding-left:.4rem}.dm-menu--horizontal>ul{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem 1rem}.dm-menu--horizontal>ul>li{position:relative}.dm-menu--horizontal>ul>li>a{display:inline-block;padding:.35rem .5rem;text-decoration:none}.dm-menu--horizontal.dm-menu--align-left>ul{justify-content:flex-start}.dm-menu--horizontal.dm-menu--align-centre>ul{justify-content:center}.dm-menu--horizontal.dm-menu--align-right>ul{justify-content:flex-end}.dm-menu--horizontal.dm-menu--align-spread>ul{justify-content:space-between}.dm-menu--horizontal>ul>li>ul{position:absolute;top:100%;left:0;z-index:40;display:none;min-width:180px;padding:.35rem 0;background:var(--dm-surface);border:1px solid var(--dm-border);border-radius:var(--dm-radius-md, 8px);box-shadow:var(--dm-shadow-lg)}.dm-menu--horizontal>ul>li:hover>ul,.dm-menu--horizontal>ul>li:focus-within>ul{display:block}.dm-menu--horizontal>ul>li>ul a{display:block;padding:.35rem .9rem;text-decoration:none}@media(max-width:768px){.dm-menu--horizontal>ul{flex-direction:column;align-items:stretch}.dm-menu--horizontal>ul>li>ul{position:static;display:block;border:0;box-shadow:none;padding-left:.75rem}}:root{--dm-vnav-width: 240px;--dm-vnav-collapsed-width: 64px;--dm-vnav-edge: 10px}.dm-navbar-override,.dm-contents-override,p:has(>.dm-navbar-override:only-child),p:has(>.dm-contents-override:only-child){display:none}#site-navbar.dm-nav-scroll-hide{transition:transform .25s ease}#site-navbar.dm-nav-scroll-hide.dm-nav-scrolled-away{transform:translateY(-100%)}@media(prefers-reduced-motion:reduce){#site-navbar.dm-nav-scroll-hide,body.dm-vnav-autohide #site-navbar.dm-nav-vertical{transition:none!important}}html.dm-reduced-motion #site-navbar.dm-nav-scroll-hide,html.dm-reduced-motion body.dm-vnav-autohide #site-navbar.dm-nav-vertical{transition:none!important}@media(min-width:993px){#site-navbar.dm-nav-vertical:not(.dm-menu-floating){position:fixed;top:0;bottom:0;height:100vh;height:100dvh;width:var(--dm-vnav-width);flex-direction:column;flex-wrap:nowrap;align-items:stretch;justify-content:flex-start;gap:var(--dm-space-2);padding:var(--dm-space-4) var(--dm-space-3);overflow-y:auto;overscroll-behavior:contain;border-bottom:none;z-index:100}#site-navbar.dm-nav-vertical-left:not(.dm-menu-floating){left:0;right:auto;border-right:1px solid var(--dm-border)}#site-navbar.dm-nav-vertical-right:not(.dm-menu-floating){right:0;left:auto;border-left:1px solid var(--dm-border)}body.dm-vnav-left{padding-left:var(--dm-vnav-width)}body.dm-vnav-right{padding-right:var(--dm-vnav-width)}body.dm-vnav-collapsed.dm-vnav-left{padding-left:var(--dm-vnav-collapsed-width)}body.dm-vnav-collapsed.dm-vnav-right{padding-right:var(--dm-vnav-collapsed-width)}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical:not(.dm-menu-floating){width:var(--dm-vnav-collapsed-width);padding-left:var(--dm-space-2);padding-right:var(--dm-space-2);overflow:visible}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-link,body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-toggle,body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-brand-text{font-size:0!important;justify-content:center!important;gap:0!important;padding-left:0!important;padding-right:0!important}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-link>svg:first-child,body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-toggle>svg:first-child{width:20px;height:20px;margin:0}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-toggle>svg:last-child:not(:first-child),body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-caret{display:none}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical [data-initial]:not(:has(>svg)):before{content:attr(data-initial);font-size:.9rem;font-weight:600}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown{position:relative!important}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-menu{position:absolute!important;top:0;width:auto!important;min-width:220px!important;padding:var(--dm-space-1) 0!important;background:var(--dm-surface)!important;border:1px solid var(--dm-border)!important;border-radius:var(--dm-radius-md, 6px)!important;box-shadow:var(--dm-shadow-lg)!important;z-index:101}body.dm-vnav-collapsed.dm-vnav-right #site-navbar .navbar-dropdown-menu{right:calc(100% + 8px);left:auto}body.dm-vnav-collapsed.dm-vnav-left #site-navbar .navbar-dropdown-menu{left:calc(100% + 8px);right:auto}body.dm-vnav-collapsed #site-navbar.dm-nav-vertical .navbar-dropdown-menu .navbar-dropdown-item{display:flex!important;align-items:center;gap:var(--dm-space-2);padding:var(--dm-space-2) var(--dm-space-3)!important;font-size:var(--dm-font-size-sm)!important;white-space:nowrap}#site-navbar .dm-nav-collapse-toggle{display:none;align-self:flex-end;width:28px;height:28px;padding:0;border:1px solid var(--dm-border);border-radius:6px;background:transparent;color:var(--dm-text-secondary);cursor:pointer}body.dm-vnav-collapsible #site-navbar .dm-nav-collapse-toggle{display:inline-flex;align-items:center;justify-content:center}body.dm-vnav-collapsed #site-navbar .dm-nav-collapse-toggle{align-self:center}#site-navbar .dm-nav-collapse-toggle:hover{color:var(--dm-text);border-color:var(--dm-primary)}#site-navbar .dm-nav-collapse-toggle svg{width:16px;height:16px}body.dm-vnav-autohide.dm-vnav-left,body.dm-vnav-autohide.dm-vnav-right{padding-left:0;padding-right:0}body.dm-vnav-autohide #site-navbar.dm-nav-vertical:not(.dm-menu-floating){transition:transform .25s ease,box-shadow .25s ease;box-shadow:none}body.dm-vnav-autohide.dm-vnav-right #site-navbar.dm-nav-vertical:not(.dm-menu-floating){transform:translate(calc(100% - var(--dm-vnav-edge)))}body.dm-vnav-autohide.dm-vnav-left #site-navbar.dm-nav-vertical:not(.dm-menu-floating){transform:translate(calc(-100% + var(--dm-vnav-edge)))}body.dm-vnav-autohide #site-navbar.dm-nav-vertical:not(.dm-menu-floating):is(:hover,:focus-within,.dm-nav-revealed){transform:none;box-shadow:var(--dm-shadow-lg)}#site-navbar.dm-nav-vertical .navbar-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:var(--dm-space-2);width:100%;min-height:100%;padding:0;margin:0}#site-navbar.dm-nav-vertical .navbar-toggle{display:none!important}#site-navbar.dm-nav-vertical .navbar-brand{padding:0 var(--dm-space-2) var(--dm-space-3);margin:0;width:100%}#site-navbar.dm-nav-vertical .navbar-collapse{display:flex!important;flex-direction:column!important;align-items:stretch!important;width:100%!important;flex-grow:1!important;padding:0!important;border:none!important}#site-navbar.dm-nav-vertical .navbar-nav{display:flex!important;flex-direction:column!important;align-items:stretch!important;justify-content:flex-start!important;gap:2px!important;width:100%!important;flex:none!important;margin:0!important;padding:0!important}#site-navbar.dm-nav-vertical .navbar-nav li,#site-navbar.dm-nav-vertical .navbar-nav .navbar-item{width:100%!important;display:block!important}#site-navbar.dm-nav-vertical .navbar-link,#site-navbar.dm-nav-vertical .navbar-dropdown-toggle{display:flex!important;align-items:center!important;justify-content:flex-start!important;gap:var(--dm-space-2)!important;width:100%!important;padding:var(--dm-space-2) var(--dm-space-3)!important;font-size:var(--dm-font-size-sm)!important;text-align:left!important;border-radius:var(--dm-radius-md)!important;white-space:normal!important}#site-navbar.dm-nav-vertical .navbar-link:hover,#site-navbar.dm-nav-vertical .navbar-dropdown-toggle:hover{background-color:color-mix(in srgb,var(--dm-text) 8%,transparent)}#site-navbar.dm-nav-vertical .navbar-dropdown-toggle .navbar-caret{margin-left:auto}#site-navbar.dm-nav-vertical .navbar-dropdown{position:static!important;width:100%!important}#site-navbar.dm-nav-vertical .navbar-dropdown-menu{position:static!important;display:none;width:100%!important;min-width:0!important;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;box-shadow:none!important;background:color-mix(in srgb,var(--dm-text) 8%,transparent)!important}#site-navbar.dm-nav-vertical .navbar-dropdown.open>.navbar-dropdown-menu{display:block!important}#site-navbar.dm-nav-vertical .navbar-dropdown-item{display:block!important;width:100%!important;padding:var(--dm-space-2) var(--dm-space-3) var(--dm-space-2) calc(var(--dm-space-3) + var(--dm-space-5))!important}#site-navbar.dm-nav-vertical .navbar-actions{display:flex;flex-direction:column;align-items:stretch;margin-left:0;margin-top:auto;padding-top:var(--dm-space-3)}}@media print{body.dm-ctx-printing *{visibility:hidden}body.dm-ctx-printing [data-dm-print],body.dm-ctx-printing [data-dm-print] *{visibility:visible}body.dm-ctx-printing [data-dm-print]{position:absolute;left:0;top:0;width:100%}body.dm-ctx-printing [data-dm-print] .accordion-content{display:block!important;height:auto!important}body.dm-ctx-printing .dm-ctx-hidden{display:none!important}}:where(.page-footer) .footer-nav ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:.35rem 1.25rem}:where(.page-footer) .footer-nav li{margin:0}:where(.page-footer) .footer-nav a{color:var(--dm-text-secondary, inherit);text-decoration:none;font-size:.9rem}:where(.page-footer) .footer-nav a:hover,:where(.page-footer) .footer-nav a:focus-visible{color:var(--dm-primary, inherit);text-decoration:underline}.dm-scribe-controls{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.5rem}
|
package/public/js/effects.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){"use strict";fetch("/api/effects/settings").then(function(x){return x.json()}).then(function(x){var q=x.respectMotion!==!1,E=x.defaultDuration||600,C=x.defaultAnimation||"fade",k=x.defaultThreshold!=null?x.defaultThreshold:.1,u=q&&window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,c=document.querySelector(".page-body");if(!c)return;var b=c.querySelector?c.querySelector(".dm-fx-demo-controls"):null;if(b){b.hidden=!1;var g=b.querySelector("[data-fx-demo-status]"),w=b.querySelector("[data-fx-demo-play]");g.textContent=u?"Animations are disabled by your Reduce motion preference. The demos show static content.":"Animations are enabled. Scroll to each demo to see it, or replay the page.",w.textContent=u?"Enable animations on this site":"Replay demos",w.addEventListener("click",function(){if(u)try{localStorage.setItem("domma:reduced_motion","false")}catch{g.textContent="Your browser blocked saving the motion preference. Use its accessibility settings to allow animations.";return}window.location.reload()})}function r(t,e){return t.getAttribute("data-fx-"+e)}function n(t,e,i){var o=r(t,e),a=o!==null?parseFloat(o):NaN;return Number.isFinite(a)?a:i}function v(t,e,i){var o=r(t,e);return o===null?i:o==="true"||o==="1"}function z(t,e,i){var o=new IntersectionObserver(function(a){a[0].isIntersecting&&(o.unobserve(t),i())},{threshold:e});o.observe(t)}c.querySelectorAll(".dm-fx-reveal").forEach(function(t){var e=r(t,"animation")||C,i=n(t,"duration",E),o=n(t,"delay",0),a=n(t,"threshold",k),s=v(t,"once",!0);u||(t.style.opacity="0",t.style.transition="none",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"&&(t.style.transform="rotateY(90deg)"),requestAnimationFrame(function(){requestAnimationFrame(function(){t.style.transition="opacity "+i+"ms ease "+o+"ms, transform "+i+"ms ease "+o+"ms";var f=new IntersectionObserver(function(d){d.forEach(function(y){y.isIntersecting?(t.style.opacity="1",t.style.transform="",s&&f.unobserve(t)):s||(t.style.opacity="0",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"?t.style.transform="rotateY(90deg)":t.style.transform="")})},{threshold:a});f.observe(t)})}))}),c.querySelectorAll(".dm-fx-counter").forEach(function(t){var e=n(t,"to",0),i=n(t,"from",0),o=n(t,"duration",2e3),a=r(t,"prefix")||"",s=r(t,"suffix")||"",f=n(t,"decimals",0),d=r(t,"separator")||"";function y(h){var m=h.toFixed(f);if(d){var l=m.split(".");l[0]=l[0].replace(/\B(?=(\d{3})+(?!\d))/g,d),m=l.join(".")}return a+m+s}if(u){t.textContent=y(e);return}z(t,.5,function(){var h=null;requestAnimationFrame(function m(l){h||(h=l);var S=Math.min((l-h)/o,1),I=1-Math.pow(1-S,3);t.textContent=y(i+(e-i)*I),S<1&&requestAnimationFrame(m)})})}),u||c.querySelectorAll(".dm-fx-scramble").forEach(function(t){var e=n(t,"speed",50),i=t.textContent,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%&",a=0;z(t,.3,function(){var s=setInterval(function(){for(var f="",d=0;d<i.length;d++)d<a||i[d]===" "?f+=i[d]:f+=o[Math.floor(Math.random()*o.length)];t.textContent=f,a<i.length?a++:clearInterval(s)},e)})}),u||c.querySelectorAll(".dm-fx-shake").forEach(function(t){var e=n(t,"intensity",5),i=n(t,"duration",500),o=r(t,"direction")||"horizontal",a=o==="vertical"?"translateY":"translateX";t.animate([{transform:a+"(0)"},{transform:a+"(-"+e+"px)"},{transform:a+"("+e+"px)"},{transform:a+"(-"+e+"px)"},{transform:a+"("+e+"px)"},{transform:a+"(0)"}],{duration:i,easing:"ease-in-out"})}),c.querySelectorAll(".dm-fx-ripple").forEach(function(t){t.style.position="relative",t.style.overflow="hidden",t.addEventListener("click",function(e){var i=r(t,"colour")||"rgba(255,255,255,0.3)",o=n(t,"duration",600),a=t.getBoundingClientRect(),s=Math.max(a.width,a.height)*2,f=document.createElement("span");f.style.cssText="position:absolute;border-radius:50%;pointer-events:none;width:"+s+"px;height:"+s+"px;left:"+(e.clientX-a.left-s/2)+"px;top:"+(e.clientY-a.top-s/2)+"px;background:"+i+";transform:scale(0);opacity:1;transition:transform "+o+"ms ease,opacity "+o+"ms ease;",t.appendChild(f),requestAnimationFrame(function(){f.style.transform="scale(1)",f.style.opacity="0"}),setTimeout(function(){f.remove()},o)})});var p=window.Domma&&window.Domma.effects;p&&(c.querySelectorAll(".dm-fx-breathe").forEach(function(t){if(!u){var e={};r(t,"amplitude")&&(e.amplitude=n(t,"amplitude",6)),r(t,"duration")&&(e.duration=n(t,"duration",3e3)),r(t,"easing")&&(e.easing=r(t,"easing")),r(t,"stagger")&&(e.stagger=n(t,"stagger",0)),p.breathe(t,e)}}),c.querySelectorAll(".dm-fx-pulse").forEach(function(t){if(!u){var e={};r(t,"scale")&&(e.scale=n(t,"scale",1.05)),r(t,"duration")&&(e.duration=n(t,"duration",2e3)),r(t,"easing")&&(e.easing=r(t,"easing")),p.pulse(t,e)}}),c.querySelectorAll(".dm-fx-scribe").forEach(function(t){var e={};r(t,"speed")&&(e.speed=n(t,"speed",50)),r(t,"delete-speed")&&(e.deleteSpeed=n(t,"delete-speed",30)),r(t,"cursor")&&(e.cursor=v(t,"cursor",!0)),r(t,"cursor-char")&&(e.cursorChar=r(t,"cursor-char")),r(t,"cursor-type")&&(e.cursorType=r(t,"cursor-type")),r(t,"mode")&&(e.mode=r(t,"mode")),r(t,"loop")&&(e.loop=v(t,"loop",!1)),r(t,"loop-delay")&&(e.loopDelay=n(t,"loop-delay",1e3)),r(t,"pause-on-hover")&&(e.pauseOnHover=v(t,"pause-on-hover",!1));var i=r(t,"actions");if(i)try{e.actions=JSON.parse(i)}catch{return}else{var o=t.textContent.trim();if(!o)return;u||(t.textContent=""),e.actions=[{render:o}]}if(u){var a=(e.actions||[]).find(function(s){return s.render!=null});a&&(t.textContent=String(a.render));return}p.scribe(t,e)}),c.querySelectorAll(".dm-fx-twinkle").forEach(function(t){var e={};r(t,"count")&&(e.count=n(t,"count",100)),r(t,"shape")&&(e.shape=r(t,"shape")),r(t,"colour")&&(e.colour=r(t,"colour")),r(t,"min-size")&&(e.minSize=n(t,"min-size",1)),r(t,"max-size")&&(e.maxSize=n(t,"max-size",3)),p.twinkle(t,e)}),typeof p.tickerTape=="function"&&c.querySelectorAll(".dm-fx-ticker-tape").forEach(function(t){if(!u){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=n(t,"density",50)),r(t,"speed")&&(e.speed=n(t,"speed",1)),r(t,"sway")&&(e.sway=n(t,"sway",60)),r(t,"rotation-speed")&&(e.rotationSpeed=n(t,"rotation-speed",6)),r(t,"min-width")&&(e.minWidth=n(t,"min-width",5)),r(t,"max-width")&&(e.maxWidth=n(t,"max-width",9)),r(t,"min-height")&&(e.minHeight=n(t,"min-height",12)),r(t,"max-height")&&(e.maxHeight=n(t,"max-height",22)),r(t,"fade-start")&&(e.fadeStart=n(t,"fade-start",.55)),r(t,"burst")&&(e.burst=v(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=n(t,"burst-count",150)),r(t,"z-index")&&(e.zIndex=n(t,"z-index",1));var i=r(t,"mode");i==="page"?p.tickerTape(null,e):p.tickerTape(t,e)}}),typeof p.butterflies=="function"&&c.querySelectorAll(".dm-fx-butterflies").forEach(function(t){if(!u){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=n(t,"density",18)),r(t,"speed")&&(e.speed=n(t,"speed",1)),r(t,"wander")&&(e.wander=n(t,"wander",1)),r(t,"rise-speed")&&(e.riseSpeed=n(t,"rise-speed",.4)),r(t,"flap-speed")&&(e.flapSpeed=n(t,"flap-speed",1)),r(t,"min-size")&&(e.minSize=n(t,"min-size",14)),r(t,"max-size")&&(e.maxSize=n(t,"max-size",26)),r(t,"two-tone")&&(e.twoTone=v(t,"two-tone",!0)),r(t,"burst")&&(e.burst=v(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=n(t,"burst-count",40)),r(t,"z-index")&&(e.zIndex=n(t,"z-index",1));var i=r(t,"mode");i==="page"?p.butterflies(null,e):p.butterflies(t,e)}}),typeof p.strobe=="function"&&c.querySelectorAll(".dm-fx-strobe").forEach(function(t){if(u)return;function e(f){var d=r(t,f);if(!d)return null;var y=d.split(",").map(function(h){return h.trim()}).filter(Boolean);return y.length?y:null}var i={};r(t,"preset")&&(i.preset=r(t,"preset")),r(t,"motion")&&(i.motion=r(t,"motion")),r(t,"speed")&&(i.speed=n(t,"speed",1)),r(t,"sweep-arc")&&(i.sweepArc=n(t,"sweep-arc",100)),r(t,"beam-width")&&(i.beamWidth=n(t,"beam-width",16)),r(t,"intensity")&&(i.intensity=n(t,"intensity",.7)),r(t,"flicker")&&(i.flicker=v(t,"flicker",!0)),r(t,"hz")&&(i.hz=n(t,"hz",10));var o=e("origins");o&&(i.origins=o);var a=e("colours");a&&(i.colours=a),r(t,"duration")&&(i.duration=n(t,"duration",null)),r(t,"z-index")&&(i.zIndex=n(t,"z-index",9999));var s=r(t,"mode");s==="page"?p.strobe(null,i):p.strobe(t,i)}));var A=c.querySelectorAll(".dm-fx-celebrate");A.length&&import("/public/js/celebrations/index.js?v=20261003-characters").then(function(t){var e=t.CelebrationsEffect;A.forEach(function(i){var o=r(i,"character");if(o){if(i.querySelector("canvas"))return;t.mountCharacter(i,{character:o,size:r(i,"size")||"medium",facing:r(i,"facing")||"right",animate:!u&&v(i,"animate",!0)}).then(function(m){var l=new MutationObserver(function(){i.isConnected||(m.destroy(),l.disconnect())});i.isConnected?l.observe(document.body,{childList:!0,subtree:!0}):m.destroy()}).catch(function(m){console.error("[celebrate]",m)});return}if(!u){var a=i.getAttribute("data-fx-theme")||"auto",s=i.getAttribute("data-fx-intensity")||"medium",f=i.getAttribute("data-fx-z-index")?parseInt(i.getAttribute("data-fx-z-index"),10):999;if(!(a==="auto"&&(a=e.getCurrentTheme(),!a))){var d={},y=["data-fx-theme","data-fx-intensity","data-fx-z-index"];Array.from(i.attributes).forEach(function(m){m.name.startsWith("data-fx-")&&!y.includes(m.name)&&(d[m.name.slice(8)]=m.value)});var h=new e({theme:a,intensity:s,enabled:!0,zIndex:f,overrides:d});h.init().then(function(){h.start()})}}})}).catch(function(){})}).catch(function(){})})();
|
|
1
|
+
(function(){"use strict";fetch("/api/effects/settings").then(function(g){return g.json()}).then(function(g){var z=g.respectMotion!==!1,k=g.defaultDuration||600,M=g.defaultAnimation||"fade",I=g.defaultThreshold!=null?g.defaultThreshold:.1,p=z&&window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,m=document.querySelector(".page-body");if(!m)return;var A=m.querySelector?m.querySelector(".dm-fx-demo-controls"):null;if(A){A.hidden=!1;var S=A.querySelector("[data-fx-demo-status]"),E=A.querySelector("[data-fx-demo-play]");S.textContent=p?"Animations are disabled by your Reduce motion preference. The demos show static content.":"Animations are enabled. Scroll to each demo to see it, or replay the page.",E.textContent=p?"Enable animations on this site":"Replay demos",E.addEventListener("click",function(){if(p)try{localStorage.setItem("domma:reduced_motion","false")}catch{S.textContent="Your browser blocked saving the motion preference. Use its accessibility settings to allow animations.";return}window.location.reload()})}function r(t,e){return t.getAttribute("data-fx-"+e)}function i(t,e,n){var o=r(t,e),a=o!==null?parseFloat(o):NaN;return Number.isFinite(a)?a:n}function b(t,e,n){var o=r(t,e);return o===null?n:o==="true"||o==="1"}function C(t,e,n){var o=new IntersectionObserver(function(a){a[0].isIntersecting&&(o.unobserve(t),n())},{threshold:e});o.observe(t)}m.querySelectorAll(".dm-fx-reveal").forEach(function(t){var e=r(t,"animation")||M,n=i(t,"duration",k),o=i(t,"delay",0),a=i(t,"threshold",I),c=b(t,"once",!0);p||(t.style.opacity="0",t.style.transition="none",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"&&(t.style.transform="rotateY(90deg)"),requestAnimationFrame(function(){requestAnimationFrame(function(){t.style.transition="opacity "+n+"ms ease "+o+"ms, transform "+n+"ms ease "+o+"ms";var f=new IntersectionObserver(function(u){u.forEach(function(v){v.isIntersecting?(t.style.opacity="1",t.style.transform="",c&&f.unobserve(t)):c||(t.style.opacity="0",e==="slide-up"?t.style.transform="translateY(30px)":e==="slide-down"?t.style.transform="translateY(-30px)":e==="zoom"?t.style.transform="scale(0.85)":e==="flip"?t.style.transform="rotateY(90deg)":t.style.transform="")})},{threshold:a});f.observe(t)})}))}),m.querySelectorAll(".dm-fx-counter").forEach(function(t){var e=i(t,"to",0),n=i(t,"from",0),o=i(t,"duration",2e3),a=r(t,"prefix")||"",c=r(t,"suffix")||"",f=i(t,"decimals",0),u=r(t,"separator")||"";function v(l){var d=l.toFixed(f);if(u){var y=d.split(".");y[0]=y[0].replace(/\B(?=(\d{3})+(?!\d))/g,u),d=y.join(".")}return a+d+c}if(p){t.textContent=v(e);return}C(t,.5,function(){var l=null;requestAnimationFrame(function d(y){l||(l=y);var x=Math.min((y-l)/o,1),s=1-Math.pow(1-x,3);t.textContent=v(n+(e-n)*s),x<1&&requestAnimationFrame(d)})})}),p||m.querySelectorAll(".dm-fx-scramble").forEach(function(t){var e=i(t,"speed",50),n=t.textContent,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%&",a=0;C(t,.3,function(){var c=setInterval(function(){for(var f="",u=0;u<n.length;u++)u<a||n[u]===" "?f+=n[u]:f+=o[Math.floor(Math.random()*o.length)];t.textContent=f,a<n.length?a++:clearInterval(c)},e)})}),p||m.querySelectorAll(".dm-fx-shake").forEach(function(t){var e=i(t,"intensity",5),n=i(t,"duration",500),o=r(t,"direction")||"horizontal",a=o==="vertical"?"translateY":"translateX";t.animate([{transform:a+"(0)"},{transform:a+"(-"+e+"px)"},{transform:a+"("+e+"px)"},{transform:a+"(-"+e+"px)"},{transform:a+"("+e+"px)"},{transform:a+"(0)"}],{duration:n,easing:"ease-in-out"})}),m.querySelectorAll(".dm-fx-ripple").forEach(function(t){t.style.position="relative",t.style.overflow="hidden",t.addEventListener("click",function(e){var n=r(t,"colour")||"rgba(255,255,255,0.3)",o=i(t,"duration",600),a=t.getBoundingClientRect(),c=Math.max(a.width,a.height)*2,f=document.createElement("span");f.style.cssText="position:absolute;border-radius:50%;pointer-events:none;width:"+c+"px;height:"+c+"px;left:"+(e.clientX-a.left-c/2)+"px;top:"+(e.clientY-a.top-c/2)+"px;background:"+n+";transform:scale(0);opacity:1;transition:transform "+o+"ms ease,opacity "+o+"ms ease;",t.appendChild(f),requestAnimationFrame(function(){f.style.transform="scale(1)",f.style.opacity="0"}),setTimeout(function(){f.remove()},o)})});var h=window.Domma&&window.Domma.effects;h&&(m.querySelectorAll(".dm-fx-breathe").forEach(function(t){if(!p){var e={};r(t,"amplitude")&&(e.amplitude=i(t,"amplitude",6)),r(t,"duration")&&(e.duration=i(t,"duration",3e3)),r(t,"easing")&&(e.easing=r(t,"easing")),r(t,"stagger")&&(e.stagger=i(t,"stagger",0)),h.breathe(t,e)}}),m.querySelectorAll(".dm-fx-pulse").forEach(function(t){if(!p){var e={};r(t,"scale")&&(e.scale=i(t,"scale",1.05)),r(t,"duration")&&(e.duration=i(t,"duration",2e3)),r(t,"easing")&&(e.easing=r(t,"easing")),h.pulse(t,e)}}),m.querySelectorAll(".dm-fx-scribe").forEach(function(t){var e={respectMotionPreference:z};[["speed","speed",50],["delete-speed","deleteSpeed",30],["loop-delay","loopDelay",1e3]].forEach(function(s){r(t,s[0])!==null&&(e[s[1]]=Math.max(0,i(t,s[0],s[2])))}),[["cursor","cursor",!0],["cursor-blink","cursorBlink",!0],["pause-on-hover","pauseOnHover",!1],["auto-start","autoStart",!0],["respect-motion-preference","respectMotionPreference",z]].forEach(function(s){r(t,s[0])!==null&&(e[s[1]]=b(t,s[0],s[2]))}),r(t,"cursor-char")!==null&&(e.cursorChar=r(t,"cursor-char"));var n=r(t,"mode");["typewriter","word","sentence"].includes(n)&&(e.mode=n);var o=r(t,"cursor-type");["caret","block","underline"].includes(o)&&(e.cursorType=o);var a=r(t,"loop");if(a!==null){var c=Number(a);e.loop=a==="true"?!0:Number.isInteger(c)&&c>=1?c:!1}var f=r(t,"effect");["none","fade","bounce","glow"].includes(f)||(f="none");var u=r(t,"actions");if(u){try{e.actions=JSON.parse(u)}catch{return}if(!Array.isArray(e.actions)||e.actions.some(function(s){return!s||typeof s!="object"}))return;e.actions=e.actions.map(function(s){return s.render!==void 0&&s.effect===void 0?Object.assign({},s,{effect:f}):s})}else{var v=t.textContent.trim();if(!v)return;e.actions=[{render:v,effect:f}]}var l=e.respectMotionPreference&&window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;if(l){var d=e.actions.find(function(s){return s.render!=null});d&&(t.textContent=String(d.render));return}u||(t.textContent=""),[["onStart","start"],["onComplete","complete"],["onCharacter","character"],["onRender","render"],["onUndoRender","undo"],["onLoop","loop"]].forEach(function(s){e[s[0]]=function(w,T){t.dispatchEvent(new CustomEvent("scribe:"+s[1],{bubbles:!0,detail:{value:w,index:T}}))}});var y=h.scribe(t,e);if(y&&(b(t,"controls",!1)||e.autoStart===!1)){var x=document.createElement("span");x.className="dm-scribe-controls",x.setAttribute("role","group"),x.setAttribute("aria-label","Text animation playback"),[["Play","resume"],["Pause","pause"],["Replay","restart"]].forEach(function(s){var w=document.createElement("button");w.type="button",w.className="btn btn-ghost btn-sm",w.textContent=s[0],w.addEventListener("click",function(){y[s[1]]()}),x.appendChild(w)}),t.insertAdjacentElement("afterend",x)}}),m.querySelectorAll(".dm-fx-twinkle").forEach(function(t){var e={};r(t,"count")&&(e.count=i(t,"count",100)),r(t,"shape")&&(e.shape=r(t,"shape")),r(t,"colour")&&(e.colour=r(t,"colour")),r(t,"min-size")&&(e.minSize=i(t,"min-size",1)),r(t,"max-size")&&(e.maxSize=i(t,"max-size",3)),h.twinkle(t,e)}),typeof h.tickerTape=="function"&&m.querySelectorAll(".dm-fx-ticker-tape").forEach(function(t){if(!p){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=i(t,"density",50)),r(t,"speed")&&(e.speed=i(t,"speed",1)),r(t,"sway")&&(e.sway=i(t,"sway",60)),r(t,"rotation-speed")&&(e.rotationSpeed=i(t,"rotation-speed",6)),r(t,"min-width")&&(e.minWidth=i(t,"min-width",5)),r(t,"max-width")&&(e.maxWidth=i(t,"max-width",9)),r(t,"min-height")&&(e.minHeight=i(t,"min-height",12)),r(t,"max-height")&&(e.maxHeight=i(t,"max-height",22)),r(t,"fade-start")&&(e.fadeStart=i(t,"fade-start",.55)),r(t,"burst")&&(e.burst=b(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=i(t,"burst-count",150)),r(t,"z-index")&&(e.zIndex=i(t,"z-index",1));var n=r(t,"mode");n==="page"?h.tickerTape(null,e):h.tickerTape(t,e)}}),typeof h.butterflies=="function"&&m.querySelectorAll(".dm-fx-butterflies").forEach(function(t){if(!p){var e={};r(t,"palette")&&(e.palette=r(t,"palette")),r(t,"density")&&(e.density=i(t,"density",18)),r(t,"speed")&&(e.speed=i(t,"speed",1)),r(t,"wander")&&(e.wander=i(t,"wander",1)),r(t,"rise-speed")&&(e.riseSpeed=i(t,"rise-speed",.4)),r(t,"flap-speed")&&(e.flapSpeed=i(t,"flap-speed",1)),r(t,"min-size")&&(e.minSize=i(t,"min-size",14)),r(t,"max-size")&&(e.maxSize=i(t,"max-size",26)),r(t,"two-tone")&&(e.twoTone=b(t,"two-tone",!0)),r(t,"burst")&&(e.burst=b(t,"burst",!1)),r(t,"burst-count")&&(e.burstCount=i(t,"burst-count",40)),r(t,"z-index")&&(e.zIndex=i(t,"z-index",1));var n=r(t,"mode");n==="page"?h.butterflies(null,e):h.butterflies(t,e)}}),typeof h.strobe=="function"&&m.querySelectorAll(".dm-fx-strobe").forEach(function(t){if(p)return;function e(f){var u=r(t,f);if(!u)return null;var v=u.split(",").map(function(l){return l.trim()}).filter(Boolean);return v.length?v:null}var n={};r(t,"preset")&&(n.preset=r(t,"preset")),r(t,"motion")&&(n.motion=r(t,"motion")),r(t,"speed")&&(n.speed=i(t,"speed",1)),r(t,"sweep-arc")&&(n.sweepArc=i(t,"sweep-arc",100)),r(t,"beam-width")&&(n.beamWidth=i(t,"beam-width",16)),r(t,"intensity")&&(n.intensity=i(t,"intensity",.7)),r(t,"flicker")&&(n.flicker=b(t,"flicker",!0)),r(t,"hz")&&(n.hz=i(t,"hz",10));var o=e("origins");o&&(n.origins=o);var a=e("colours");a&&(n.colours=a),r(t,"duration")&&(n.duration=i(t,"duration",null)),r(t,"z-index")&&(n.zIndex=i(t,"z-index",9999));var c=r(t,"mode");c==="page"?h.strobe(null,n):h.strobe(t,n)}));var q=m.querySelectorAll(".dm-fx-celebrate");q.length&&import("/public/js/celebrations/index.js?v=20261003-characters").then(function(t){var e=t.CelebrationsEffect;q.forEach(function(n){var o=r(n,"character");if(o){if(n.querySelector("canvas"))return;t.mountCharacter(n,{character:o,size:r(n,"size")||"medium",facing:r(n,"facing")||"right",animate:!p&&b(n,"animate",!0)}).then(function(d){var y=new MutationObserver(function(){n.isConnected||(d.destroy(),y.disconnect())});n.isConnected?y.observe(document.body,{childList:!0,subtree:!0}):d.destroy()}).catch(function(d){console.error("[celebrate]",d)});return}if(!p){var a=n.getAttribute("data-fx-theme")||"auto",c=n.getAttribute("data-fx-intensity")||"medium",f=n.getAttribute("data-fx-z-index")?parseInt(n.getAttribute("data-fx-z-index"),10):999;if(!(a==="auto"&&(a=e.getCurrentTheme(),!a))){var u={},v=["data-fx-theme","data-fx-intensity","data-fx-z-index"];Array.from(n.attributes).forEach(function(d){d.name.startsWith("data-fx-")&&!v.includes(d.name)&&(u[d.name.slice(8)]=d.value)});var l=new e({theme:a,intensity:c,enabled:!0,zIndex:f,overrides:u});l.init().then(function(){l.start()})}}})}).catch(function(){})}).catch(function(){})})();
|
|
@@ -1868,7 +1868,7 @@ function processEffectsBlocks(markdown) {
|
|
|
1868
1868
|
actions.push({wait: isNaN(val) ? val : Number(val)});
|
|
1869
1869
|
} else if (tag.startsWith('[undo')) {
|
|
1870
1870
|
const uAttrs = parseShortcodeAttrs(match[4] || '');
|
|
1871
|
-
if (uAttrs.all === 'true') actions.push({undoRender: 'all'});
|
|
1871
|
+
if (uAttrs.all === 'true' || uAttrs.all === true) actions.push({undoRender: 'all'});
|
|
1872
1872
|
else if (uAttrs.count) actions.push({undoRender: parseInt(uAttrs.count, 10)});
|
|
1873
1873
|
else actions.push({undoRender: true});
|
|
1874
1874
|
} else {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
<link rel="stylesheet" href="/dist/domma/themes/domma-themes.css">
|
|
26
26
|
|
|
27
27
|
<!-- Site CSS -->
|
|
28
|
-
<link rel="stylesheet" href="/public/css/site.css?v=20261011-
|
|
28
|
+
<link rel="stylesheet" href="/public/css/site.css?v=20261011-scribe-controls">
|
|
29
29
|
<link rel="stylesheet" href="/public/css/forms.css?v=20260927-submit-btn-css">
|
|
30
30
|
<!-- Menu item hover / current-page effects. Loaded after site.css so a
|
|
31
31
|
menu's own highlight wins over the blanket link styling there. -->
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
<script src="/public/js/forms.js?v=20261009-form-classes" type="module"></script>
|
|
192
192
|
|
|
193
193
|
<!-- Core effects runtime -->
|
|
194
|
-
<script src="/public/js/effects.js?v=
|
|
194
|
+
<script src="/public/js/effects.js?v=20261011-scribe-controls"></script>
|
|
195
195
|
|
|
196
196
|
<!-- Plugin body-end injection -->
|
|
197
197
|
{{bodyEndInject}}
|