domma-cms 1.6.27 → 1.6.29
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/js/lib/card-builder.js +2 -2
- package/admin/js/lib/markdown-toolbar.js +2 -2
- package/admin/js/lib/page-editor-reference.js +3 -1
- package/admin/js/lib/shortcode-registry.js +1 -1
- package/admin/js/views/page-editor.js +9 -17
- package/package.json +1 -1
- package/public/css/site.css +1 -1
- package/server/services/markdown.js +38 -6
- package/server/templates/page.html +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{replaceRange as
|
|
1
|
+
import{replaceRange as M}from"./markdown-toolbar.js";const j=[{key:"header-body",group:"Basic",label:"Header + Body",thumb:"\u25A4"},{key:"basic",group:"Basic",label:"Body only",thumb:"\u25AD"},{key:"header-body-footer",group:"Basic",label:"Header + Body + Footer",thumb:"\u2630"},{key:"no-header-footer",group:"Basic",label:"Body + Footer (no header)",thumb:"\u25A5"},{key:"icon-top",group:"Icon",label:"Icon top (stacked)",thumb:"\u2B06\u2605"},{key:"icon-inline",group:"Icon",label:"Icon inline",thumb:"\u2605\u25B6"},{key:"image-top",group:"Image",label:"Image top",thumb:"\u{1F5BC}"},{key:"image-overlay",group:"Image",label:"Image + overlay title",thumb:"\u{1F5BC}\u2726"},{key:"thumb-left",group:"Image",label:"Thumbnail left",thumb:"\u{1F5BC}\u2590"},{key:"thumb-right",group:"Image",label:"Thumbnail right",thumb:"\u258C\u{1F5BC}"},{key:"wide-left-image",group:"Image",label:"Wide image left",thumb:"\u{1F5BC}\u258D"},{key:"full-bg",group:"Image",label:"Full background",thumb:"\u{1F5BC}"},{key:"split-half",group:"Image",label:"Split half",thumb:"\u2592\u2590"},{key:"avatar-profile",group:"People",label:"Avatar / Profile",thumb:"\u{1F464}"},{key:"stat-metric",group:"People",label:"Stat / Metric",thumb:"\u{1F4CA}"},{key:"quote-testimonial",group:"People",label:"Quote / Testimonial",thumb:"\u201C"},{key:"rating-review",group:"People",label:"Rating / Review",thumb:"\u2605"},{key:"activity-feed",group:"People",label:"Activity feed",thumb:"\u{1F514}"},{key:"callout",group:"Content",label:"Callout",thumb:"\u{1F4A1}"},{key:"code-snippet",group:"Content",label:"Code snippet",thumb:"</>"},{key:"file-document",group:"Content",label:"File / Document",thumb:"\u{1F4C4}"},{key:"tag-cloud",group:"Content",label:"Tag cloud",thumb:"\u{1F3F7}"},{key:"video-media",group:"Media",label:"Video / Media",thumb:"\u25B6"},{key:"location-map",group:"Special",label:"Location / Map",thumb:"\u{1F4CD}"},{key:"step-numbered",group:"Special",label:"Step / Numbered",thumb:"\u2460"},{key:"corner-badge",group:"Special",label:"Corner badge",thumb:"\u{1F3F7}"},{key:"badge-band",group:"Special",label:"Badge band",thumb:"\u2B1B"},{key:"glass-gradient-border",group:"Special",label:"Glass gradient border",thumb:"\u25C8"},{key:"timeline-entry",group:"Special",label:"Timeline entry",thumb:"\u2022-"},{key:"before-after",group:"Compare",label:"Before / After",thumb:"\u2194"},{key:"pricing",group:"Compare",label:"Pricing card",thumb:"\xA3"},{key:"feature-comparison",group:"Compare",label:"Feature comparison",thumb:"\u2611"},{key:"progress-goal",group:"Compare",label:"Progress / Goal",thumb:"\u25B0"}],O=["clean","gradient","glass","accent","dark","glow"],N=["indigo","ocean","sunset","forest","rose","midnight","aurora","fire","lagoon","dusk","lime","gold","arctic","slate"],B={indigo:"#6366f1,#8b5cf6",ocean:"#0891b2,#2563eb",sunset:"#f59e0b,#ef4444",forest:"#10b981,#0d9488",rose:"#fb7185,#e11d48",midnight:"#1e1b4b,#4338ca",aurora:"#06b6d4,#6366f1",fire:"#ef4444,#f97316",lagoon:"#06b6d4,#0e7490",dusk:"#7c3aed,#db2777",lime:"#84cc16,#10b981",gold:"#f59e0b,#b45309",arctic:"#bae6fd,#e0f2fe",slate:"#475569,#1e293b"};function q(e){return typeof I>"u"||typeof I.list!="function"?[]:!e||e==="all"?I.list():I.list(e)}function G(){const e=typeof I<"u"&&I._categories?I._categories:null,t=[{slug:"all",label:"All icons"}];return e&&Object.keys(e).forEach(o=>{t.push({slug:o,label:e[o].name||o})}),t}function H(e,t){const o=q(e),r=(t||"").trim().toLowerCase();return r?o.filter(i=>i.toLowerCase().includes(r)):o}let C=null,d=null,$=null,_=null;export const CardBuilder={open(e,t={}){C||($=e,_=t,d={layout:"header-body",variant:"clean",gradient:"indigo",title:"",subtitle:"",icon:"",iconLayout:"inline",iconSize:"",iconAlign:"",image:"",body:"",footer:"",hover:!1,collapsible:!1,value:"",delta:"",progress:"50",price:"",period:"",lang:"JavaScript",filename:"",filesize:"",filetype:"PDF",rating:"5",duration:"",address:"",step:"1",badge:"New",tags:"",calloutType:"info",font:"",fontSize:"",borderless:!1,shadow:"",rounded:"",textAlign:"",padding:"",span:""},Y())},close(){E()}};function T(){const e=d,t=[];e.layout!=="header-body"&&t.push(`layout="${e.layout}"`),e.title&&t.push(`title="${e.title}"`),e.subtitle&&t.push(`subtitle="${e.subtitle}"`),e.icon&&t.push(`icon="${e.icon}"`),e.icon&&e.iconLayout==="stacked"&&t.push('icon-layout="stacked"'),e.icon&&e.iconSize.trim()&&t.push(`icon-size="${e.iconSize.trim()}"`),e.icon&&e.iconAlign&&t.push(`icon-align="${e.iconAlign}"`),e.image&&t.push(`image="${e.image}"`),e.variant!=="clean"&&t.push(`variant="${e.variant}"`),e.variant==="gradient"&&e.gradient!=="indigo"&&t.push(`gradient="${e.gradient}"`),e.hover&&t.push("hover"),e.collapsible&&t.push('collapsible="true"'),e.font&&t.push(`font="${e.font}"`),e.fontSize&&t.push(`font-size="${e.fontSize}"`),e.borderless&&t.push("borderless"),e.shadow&&t.push(`shadow="${e.shadow}"`),e.rounded&&t.push(`rounded="${e.rounded}"`),e.textAlign&&t.push(`text-align="${e.textAlign}"`),e.padding&&t.push(`padding="${e.padding}"`),e.span&&t.push(`span="${e.span}"`),e.footer&&!["pricing","feature-comparison","activity-feed","before-after","progress-goal"].includes(e.layout)&&t.push(`footer="${e.footer}"`);const o={"stat-metric":()=>{e.value&&t.push(`value="${e.value}"`),e.delta&&t.push(`delta="${e.delta}"`),e.progress&&t.push(`progress="${e.progress}"`)},pricing:()=>{e.price&&t.push(`price="${e.price}"`),e.period&&t.push(`period="${e.period}"`)},"code-snippet":()=>t.push(`lang="${e.lang}"`),"file-document":()=>{t.push(`filename="${e.filename}"`),e.filesize&&t.push(`filesize="${e.filesize}"`),e.filetype&&t.push(`filetype="${e.filetype}"`)},"rating-review":()=>t.push(`rating="${e.rating}"`),"video-media":()=>{e.duration&&t.push(`duration="${e.duration}"`)},"location-map":()=>{e.address&&t.push(`address="${e.address}"`)},"step-numbered":()=>t.push(`step="${e.step}"`),"corner-badge":()=>{e.badge&&t.push(`badge="${e.badge}"`)},"badge-band":()=>{e.badge&&t.push(`badge="${e.badge}"`)},"tag-cloud":()=>{e.tags&&t.push(`tags="${e.tags}"`)},"avatar-profile":()=>{e.tags&&t.push(`tags="${e.tags}"`)},callout:()=>{e.calloutType&&t.push(`callout-type="${e.calloutType}"`)},"split-half":()=>{}};o[e.layout]&&o[e.layout]();const r=t.length?" "+t.join(" "):"",i=e.body.trim()||"Content here.",l={"before-after":`[before]Before item 1 \xB7 Before item 2[/before]
|
|
2
2
|
[after]After item 1 \xB7 After item 2[/after]`,pricing:`[feature]Feature one[/feature]
|
|
3
3
|
[feature]Feature two[/feature]`,"feature-comparison":`[feature]Included feature[/feature]
|
|
4
4
|
[feature excluded]Excluded feature[/feature]`,"activity-feed":'[activity user="Alice" action="published a page" time="2 min ago"]',"progress-goal":`[milestone done]Phase 1[/milestone]
|
|
5
5
|
[milestone]Phase 2[/milestone]`}[e.layout]||i;return`[card${r}]
|
|
6
6
|
${l}
|
|
7
|
-
[/card]`}function S(){C&&(C.remove(),C=null,a=null)}function H(){const e=A();R($,$.selectionStart,$.selectionEnd,e),S()}function U(){C=document.createElement("div"),Object.assign(C.style,{position:"fixed",inset:"0",background:"rgba(0,0,0,.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"9999",padding:"24px",isolation:"isolate"});const e=document.createElement("div");Object.assign(e.style,{background:"var(--dm-surface,#1e293b)",border:"1px solid var(--dm-border,#334155)",borderRadius:"14px",width:"100%",maxWidth:"860px",maxHeight:"90vh",display:"flex",flexDirection:"column",boxShadow:"var(--dm-shadow-lg)",overflow:"hidden"});const t=n("div","display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--dm-border,#334155);flex-shrink:0"),o=n("span","font-weight:700;color:var(--dm-text,#f1f5f9);font-size:14px");o.textContent="Insert Card";const r=n("button","background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:6px;width:26px;height:26px;cursor:pointer;font-size:14px");r.title="Close",L(r,"x"),r.addEventListener("click",S),t.appendChild(o),t.appendChild(r);const i=n("div","display:grid;grid-template-columns:280px 1fr;flex:1;overflow:hidden");i.appendChild(V()),i.appendChild(ce());const d=n("div","display:flex;justify-content:flex-end;gap:1rem;padding:12px 20px;border-top:1px solid var(--dm-border,#334155);flex-shrink:0"),l=n("button","padding:8px 18px;border-radius:8px;border:none;background:var(--dm-border,#334155);color:var(--dm-text-muted,#94a3b8);font-size:12px;font-weight:700;cursor:pointer");l.textContent="Cancel",l.addEventListener("click",S);const f=n("button","padding:8px 18px;border-radius:8px;border:none;background:var(--dm-primary);color:var(--dm-primary-text);font-size:12px;font-weight:700;cursor:pointer");f.textContent="Insert Card",f.addEventListener("click",H),d.appendChild(l),d.appendChild(f),e.appendChild(t),e.appendChild(i),e.appendChild(d),C.appendChild(e),C.addEventListener("click",b=>{b.target===C&&S()}),document.body.appendChild(C),D(),x()}function n(e,t=""){const o=document.createElement(e);return t&&(o.style.cssText=t),o}function L(e,t,o=14){e.textContent="";const r=document.createElement("span");return r.setAttribute("data-icon",t),r.setAttribute("data-icon-size",String(o)),r.style.cssText="display:inline-flex;align-items:center;vertical-align:middle;",e.appendChild(r),typeof I<"u"&&I.scan&&I.scan(e),e}function Y(e,t,o,r=14){return L(e,t,r),e.appendChild(document.createTextNode(" "+o)),e}const k="padding:7px 10px;border-radius:7px;border:1px solid var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text,#e2e8f0);font-size:12px;font-family:inherit;width:100%";function V(){const e=n("div","padding:18px;border-right:1px solid var(--dm-border,#334155);display:flex;flex-direction:column;gap:14px;overflow-y:auto");e.appendChild(p("Layout",W()));const t=n("div","display:contents");t.id="cb-dyn-fields",e.appendChild(t),e.appendChild(P()),e.appendChild(p("Style",J()));const o=n("div");return o.id="cb-grad-wrap",o.style.display=a.variant==="gradient"?"":"none",o.appendChild(p("Gradient",Q())),e.appendChild(o),e.appendChild(p("Options",X())),e.appendChild(P()),e.appendChild(ee()),e}function W(){const e=n("select",k+";cursor:pointer"),t={};return M.forEach(o=>{(t[o.group]=t[o.group]||[]).push(o)}),Object.entries(t).forEach(([o,r])=>{const i=document.createElement("optgroup");i.label=o,r.forEach(d=>{const l=document.createElement("option");l.value=d.key,l.textContent=`${d.thumb} ${d.label}`,d.key===a.layout&&(l.selected=!0),i.appendChild(l)}),e.appendChild(i)}),e.addEventListener("change",()=>{a.layout=e.value,D(),x()}),e}function J(){const e=n("div","display:grid;grid-template-columns:repeat(3,1fr);gap:5px"),t={clean:"background:#f8fafc;color:#374151;border:2px solid #e2e8f0",gradient:"background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border:2px solid transparent",glass:"background:rgba(255,255,255,.06);color:#94a3b8;border:2px dashed #334155",accent:"background:#fff;color:#4338ca;border-left:4px solid #6366f1;border-top:2px solid #e2e8f0;border-right:2px solid #e2e8f0;border-bottom:2px solid #e2e8f0",dark:"background:#0f172a;color:#818cf8;border:2px solid #334155",glow:"color:#818cf8;border:2px solid #6366f1;box-shadow:0 0 6px rgba(99,102,241,.4)"};return j.forEach(o=>{const r=n("div",`padding:6px 4px;border-radius:7px;font-size:10px;font-weight:700;text-align:center;cursor:pointer;${t[o]}`);r.textContent=o.charAt(0).toUpperCase()+o.slice(1),r.dataset.variant=o,o===a.variant&&(r.style.outline="2px solid var(--dm-primary)"),r.addEventListener("click",()=>{a.variant=o,e.querySelectorAll("[data-variant]").forEach(d=>{d.style.outline=""}),r.style.outline="2px solid var(--dm-primary)";const i=document.getElementById("cb-grad-wrap");i&&(i.style.display=o==="gradient"?"":"none"),x()}),e.appendChild(r)}),e}function Q(){const e=n("div","display:flex;flex-wrap:wrap;gap:7px");return O.forEach(t=>{const[o,r]=(B[t]||"#6366f1,#8b5cf6").split(","),i=n("div",`width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,${o},${r});cursor:pointer;border:2px solid transparent;transition:border-color .15s`);i.title=t,t===a.gradient&&(i.style.borderColor="var(--dm-text)"),i.addEventListener("click",()=>{a.gradient=t,e.querySelectorAll("div").forEach(d=>{d.style.borderColor="transparent"}),i.style.borderColor="var(--dm-text)",x()}),e.appendChild(i)}),e}function X(){const e=n("div","display:flex;gap:6px");return["hover","collapsible"].forEach(t=>{const o=n("div"),r=i=>{o.style.cssText=`flex:1;padding:6px 8px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${i?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`};r(a[t]),o.textContent=t.charAt(0).toUpperCase()+t.slice(1),o.addEventListener("click",()=>{a[t]=!a[t],r(a[t]),x()}),e.appendChild(o)}),e}function E(e,t){const o=n("select",k+";cursor:pointer");return t.forEach(([r,i])=>{const d=document.createElement("option");d.value=r,d.textContent=i,r===a[e]&&(d.selected=!0),o.appendChild(d)}),o.addEventListener("change",()=>{a[e]=o.value,x()}),o}function Z(e,t){const o=n("div"),r=i=>{o.style.cssText=`flex:1;padding:6px 8px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${i?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`};return r(a[e]),o.textContent=t,o.addEventListener("click",()=>{a[e]=!a[e],r(a[e]),x()}),o}function K(){const e=n("div","display:flex;gap:6px");return[["","Left"],["center","Centre"],["right","Right"]].forEach(([t,o])=>{const r=n("div"),i=d=>{r.style.cssText=`flex:1;padding:5px 4px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${d?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`};i(a.textAlign===t),r.textContent=o,r.addEventListener("click",()=>{a.textAlign=t,e.querySelectorAll("div").forEach((d,l)=>i([["","Left"],["center","Centre"],["right","Right"]][l][0]===t)),x()}),e.appendChild(r)}),e}function ee(){const e=n("div","display:flex;flex-direction:column;gap:14px"),t=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#475569)");t.textContent="Presentation",e.appendChild(t);const o=n("div","display:grid;grid-template-columns:1fr 1fr;gap:10px"),r=(d,l)=>{const f=n("div","display:flex;flex-direction:column;gap:5px"),b=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#475569)");b.textContent=d,f.appendChild(b),f.appendChild(l),o.appendChild(f)};r("Font",E("font",[["","Default"],["serif","Serif"],["mono","Mono"]])),r("Size",E("fontSize",[["","Default"],["sm","Small"],["lg","Large"],["xl","XL"]])),r("Shadow",E("shadow",[["","Default"],["none","None"],["md","Medium"],["lg","Large"]])),r("Padding",E("padding",[["","Default"],["compact","Compact"],["spacious","Spacious"]])),r("Corners",E("rounded",[["","Default"],["none","Square"],["sm","Small"],["lg","Large"],["full","Full"]])),r("Span in a grid",E("span",[["","1 column"],["2","2"],["3","3"],["4","4"],["5","5"],["6","6"],["full","Full row"]])),e.appendChild(o),e.appendChild(p("Align",K()));const i=n("div","display:flex;gap:6px");return i.appendChild(Z("borderless","Borderless")),e.appendChild(i),e}function p(e,t){const o=n("div","display:flex;flex-direction:column;gap:5px"),r=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#475569)");return r.textContent=e,o.appendChild(r),o.appendChild(t),o}function P(){return n("div","height:1px;background:var(--dm-border,#334155);margin:2px 0")}function g(e,t){const o=n("input",k);return o.type="text",t&&(o.placeholder=t),o.value=a[e]||"",o.addEventListener("input",()=>{a[e]=o.value,x()}),o}function te(e,t){const o=n("select",k+";cursor:pointer");return t.forEach(r=>{const i=document.createElement("option");i.value=r,i.textContent=r,r===a[e]&&(i.selected=!0),o.appendChild(i)}),o.addEventListener("change",()=>{a[e]=o.value,x()}),o}const oe={"icon-top":["subtitle","icon","iconLayout"],"icon-inline":["subtitle","icon","iconLayout"],"image-top":["image"],"image-overlay":["image"],"thumb-left":["image"],"thumb-right":["image"],"wide-left-image":["image"],"full-bg":["image"],"split-half":["image"],"avatar-profile":["subtitle","icon","tags"],"stat-metric":["value","delta","progress"],"quote-testimonial":["subtitle","icon"],callout:["calloutType","icon"],"video-media":["image","duration"],"location-map":["address"],"step-numbered":["step"],"corner-badge":["icon","badge"],"badge-band":["icon","badge"],"rating-review":["rating","subtitle","icon"],"tag-cloud":["tags"],"activity-feed":[],"code-snippet":["lang"],"file-document":["filename","filesize","filetype"],"before-after":[],pricing:["price","period"],"feature-comparison":["subtitle"],"progress-goal":["progress"],"timeline-entry":["subtitle","badge"],"glass-gradient-border":[]},re=new Set(["basic","no-header-footer","code-snippet","file-document","stat-metric"]),ne=new Set(["stat-metric","file-document"]),ie=new Set(["pricing","feature-comparison","activity-feed","before-after","progress-goal"]);function D(){const e=document.getElementById("cb-dyn-fields");if(!e)return;for(;e.firstChild;)e.removeChild(e.firstChild);const t=a.layout,o=oe[t]||[];re.has(t)||e.appendChild(p("Title",g("title","Card heading"))),o.forEach(r=>{const i={subtitle:()=>p("Subtitle",g("subtitle","Secondary line")),icon:()=>p("Icon",de()),iconLayout:()=>p("Icon layout",le()),image:()=>p("Image",se()),value:()=>p("Value",g("value","\xA324,980")),delta:()=>p("Delta",g("delta","\u2191 12.4%")),progress:()=>p("Progress %",g("progress","50")),price:()=>p("Price",g("price","\xA329")),period:()=>p("Period",g("period","per month")),lang:()=>p("Language",g("lang","JavaScript")),filename:()=>p("Filename",g("filename","document.pdf")),filesize:()=>p("File size",g("filesize","2.4 MB")),filetype:()=>p("File type",g("filetype","PDF")),rating:()=>p("Rating (1-5)",g("rating","5")),duration:()=>p("Duration",g("duration","4:32")),address:()=>p("Address",g("address","12 Main St")),step:()=>p("Step number",g("step","1")),badge:()=>p("Badge label",g("badge","New")),tags:()=>p("Tags (comma-separated)",g("tags","Design, CSS")),calloutType:()=>p("Type",te("calloutType",["info","warn","success","error"]))};i[r]&&e.appendChild(i[r]())}),ne.has(t)||e.appendChild(p("Body content",ae())),ie.has(t)||e.appendChild(p("Footer",g("footer","")))}function ae(){const e=n("textarea",k+";resize:vertical;min-height:60px;line-height:1.5");return e.value=a.body||"",e.addEventListener("input",()=>{a.body=e.value,x()}),e}function de(){const e=n("div","display:flex;gap:6px"),t=n("input",k+";flex:1");t.type="text",t.placeholder="icon name",t.value=a.icon||"",t.addEventListener("input",()=>{a.icon=t.value,x()});const o=n("button","padding:0 10px;height:34px;background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:7px;font-size:13px;cursor:pointer;flex-shrink:0");return o.title="Browse icons",L(o,"star"),o.addEventListener("click",()=>F(r=>{a.icon=r,t.value=r,x()})),e.appendChild(t),e.appendChild(o),e}function le(){const e=n("div","display:flex;gap:6px");return["inline","stacked"].forEach(t=>{const o=n("div"),r=i=>{o.style.cssText=`flex:1;padding:6px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${i?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`};r(a.iconLayout===t),o.textContent=t.charAt(0).toUpperCase()+t.slice(1),o.addEventListener("click",()=>{a.iconLayout=t,e.querySelectorAll("div").forEach((i,d)=>r(["inline","stacked"][d]===t)),x()}),e.appendChild(o)}),e}function pe(){return new Promise(async e=>{let t=[];_&&typeof _.onMediaBrowse=="function"&&(t=await _.onMediaBrowse()||[]);const o=document.createElement("dialog");o.style.cssText="margin:auto;padding:0;border:none;border-radius:12px;background:var(--dm-surface,#1e293b);width:min(700px,95vw);max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--dm-shadow-lg)";const r=document.createElement("style");r.textContent="dialog.cb-media-picker::backdrop{background:rgba(0,0,0,.75)}",o.className="cb-media-picker";const i=m=>{o.close(),o.remove(),r.remove(),e(m)},d=n("div","display:flex;justify-content:space-between;align-items:center;flex-shrink:0;padding:16px 20px;border-bottom:1px solid var(--dm-border,#334155)"),l=n("div","font-weight:700;font-size:14px;color:var(--dm-text,#f1f5f9)");l.textContent="Select Image";const f=n("button","background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:6px;width:26px;height:26px;cursor:pointer;font-size:14px");f.title="Close",L(f,"x"),f.addEventListener("click",()=>i(null)),o.addEventListener("cancel",()=>i(null)),d.appendChild(l),d.appendChild(f);const b=n("div","padding:16px;overflow-y:auto;flex:1"),v=n("div","display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px"),y=t.filter(m=>/\.(png|jpe?g|gif|webp|svg)$/i.test(m.name||""));if(y.length)y.forEach(m=>{const c=n("div","display:flex;flex-direction:column;gap:6px;cursor:pointer;border:2px solid transparent;border-radius:8px;padding:6px"),h=document.createElement("img");h.src=m.url,h.alt=m.name||"",h.style.cssText="width:100%;height:80px;object-fit:cover;border-radius:6px;display:block";const s=n("div","font-size:9px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--dm-text-muted,#94a3b8)");s.textContent=m.name||m.url,c.appendChild(h),c.appendChild(s),c.addEventListener("mouseenter",()=>{c.style.borderColor="var(--dm-primary)"}),c.addEventListener("mouseleave",()=>{c.style.borderColor="transparent"}),c.addEventListener("click",()=>i(m.url)),v.appendChild(c)});else{const m=n("div","color:var(--dm-text-muted,#94a3b8);font-size:13px;padding:20px;text-align:center");m.textContent="No images uploaded yet.",v.appendChild(m)}b.appendChild(v),o.appendChild(d),o.appendChild(b),document.head.appendChild(r),document.body.appendChild(o),o.showModal()})}function se(){const e=n("div","display:flex;gap:6px"),t=n("input",k+";flex:1");t.type="text",t.placeholder="/media/image.jpg",t.value=a.image||"",t.addEventListener("input",()=>{a.image=t.value,x()});const o=n("button","padding:0 10px;height:34px;background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:7px;font-size:13px;cursor:pointer;flex-shrink:0");return o.title="Browse media",L(o,"folder"),o.addEventListener("click",async()=>{const r=await pe();r&&(a.image=r,t.value=r,x())}),e.appendChild(t),e.appendChild(o),e}function ce(){const e=n("div","padding:20px;background:var(--dm-surface,#f8fafc);display:flex;flex-direction:column;gap:14px;overflow-y:auto"),t=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-text-muted,#94a3b8)");t.textContent="Live Preview";const o=n("div","flex:1;display:flex;align-items:flex-start;justify-content:center");o.id="cb-preview-area";const r=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#94a3b8);margin-bottom:6px");r.textContent="Shortcode";const i=n("div","background:var(--dm-surface,#1e293b);border:1px solid var(--dm-border,#334155);border-radius:8px;padding:10px 14px;font-family:monospace;font-size:11px;color:var(--dm-primary,#a5b4fc);line-height:1.8;white-space:pre-wrap;word-break:break-all");return i.id="cb-snippet",e.appendChild(t),e.appendChild(o),e.appendChild(r),e.appendChild(i),e}function x(){const e=document.getElementById("cb-preview-area");if(!e)return;for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(ue());const t=document.getElementById("cb-snippet");t&&(t.textContent=A())}function ue(){const e=a,[t,o]=(B[e.gradient]||"#6366f1,#8b5cf6").split(","),r=`linear-gradient(135deg,${t},${o})`,i={clean:"background:var(--dm-surface,#fff);border:1px solid var(--dm-border,#e5e7eb);box-shadow:0 1px 4px rgba(0,0,0,.06)",gradient:`background:${r};color:#fff`,glass:"background:rgba(255,255,255,.12);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.25);box-shadow:0 4px 24px rgba(0,0,0,.12)",accent:"background:var(--dm-surface,#fff);border-top:1px solid var(--dm-border,#e5e7eb);border-right:1px solid var(--dm-border,#e5e7eb);border-bottom:1px solid var(--dm-border,#e5e7eb);border-left:4px solid #6366f1",dark:"background:#0f172a;color:#e2e8f0;border:1px solid #1e293b",glow:"background:var(--dm-surface,#fff);border:1px solid #6366f1;box-shadow:0 0 0 3px rgba(99,102,241,.15),0 0 20px rgba(99,102,241,.3)"},d=e.variant==="gradient"?`background:${r};color:#fff;padding:12px 16px`:"background:var(--dm-border,#f3f4f6);color:var(--dm-text,#111);padding:12px 16px",l=n("div");l.style.cssText=`width:100%;max-width:300px;border-radius:12px;overflow:hidden;font-size:13px;font-family:system-ui,sans-serif;${i[e.variant]||i.clean}`;const f={serif:"Georgia,serif",mono:"'SF Mono','Fira Code',monospace"};e.font&&f[e.font]&&(l.style.fontFamily=f[e.font]);const b={sm:"11px",lg:"15px",xl:"17px"};e.fontSize&&b[e.fontSize]&&(l.style.fontSize=b[e.fontSize]),e.borderless&&(l.style.border="none");const v={none:"none",md:"0 4px 12px rgba(0,0,0,.1)",lg:"0 10px 30px rgba(0,0,0,.18)"};e.shadow&&v[e.shadow]!==void 0&&(l.style.boxShadow=v[e.shadow]);const y={none:"0",sm:"4px",lg:"20px",full:"9999px"};if(e.rounded&&y[e.rounded]!==void 0&&(l.style.borderRadius=y[e.rounded]),e.textAlign&&(l.style.textAlign=e.textAlign),new Set(["image-top","image-overlay","thumb-left","thumb-right","wide-left-image","full-bg","split-half","video-media"]).has(e.layout)){const u=n("div","height:120px;background-size:cover;background-position:center;display:flex;align-items:center;justify-content:center;font-size:2rem;background-color:var(--dm-border,#e2e8f0)");e.image&&(u.style.backgroundImage=`url('${e.image}')`),e.image||(u.textContent="\u{1F5BC}"),l.appendChild(u)}if(!new Set(["basic","no-header-footer","image-overlay","stat-metric","quote-testimonial","activity-feed","before-after","code-snippet","file-document","glass-gradient-border"]).has(e.layout)&&e.title){const u=n("div",d),w=n("div","font-weight:700");w.textContent=e.title,u.appendChild(w),l.appendChild(u)}const h=e.variant==="dark"?"color:#94a3b8;":e.variant==="gradient"?"color:rgba(255,255,255,.85);":"",s=n("div",`padding:13px 16px;${h}`);if(new Set(["before-after","pricing","feature-comparison","activity-feed","progress-goal"]).has(e.layout)){const u=n("em","font-size:11px;color:var(--dm-text-muted,#9ca3af)");u.textContent="Simplified preview - full render on save.",s.appendChild(u)}else if(e.layout==="stat-metric"){const u=n("div","font-size:2rem;font-weight:800");u.textContent=e.value||"-";const w=n("div","font-size:.8rem;opacity:.7");if(w.textContent=e.title||"",s.appendChild(w),s.appendChild(u),e.delta){const T=n("div","font-size:.78rem;font-weight:600;color:#10b981");T.textContent=e.delta,s.appendChild(T)}}else s.textContent=e.body||"Card body content.";if(e.padding){const u=e.padding==="compact"?"8px 12px":"24px 28px";s.style.padding=u}if(l.appendChild(s),e.footer){const u=e.variant==="gradient"?"rgba(255,255,255,.6)":"var(--dm-text-muted,#9ca3af)",w=n("div",`padding:9px 16px;border-top:1px solid rgba(128,128,128,.15);font-size:11px;color:${u}`);w.textContent=e.footer,l.appendChild(w)}return l}function F(e){const t=n("div","position:fixed;inset:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:10000;padding:24px"),o=n("div","background:var(--dm-surface,#1e293b);border:1px solid var(--dm-border,#475569);border-radius:12px;padding:16px;width:100%;max-width:520px;max-height:70vh;display:flex;flex-direction:column;gap:12px"),r=n("div","display:flex;gap:8px;flex-wrap:wrap"),i=n("input","flex:1;min-width:160px;padding:8px 12px;border-radius:8px;border:1px solid var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text,#e2e8f0);font-size:13px;font-family:inherit");i.type="text",i.placeholder="Search icons\u2026";const d=n("select","padding:8px 12px;border-radius:8px;border:1px solid var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text,#e2e8f0);font-size:13px;font-family:inherit;cursor:pointer");q().forEach(({slug:c,label:h})=>{const s=document.createElement("option");s.value=c,s.textContent=h,d.appendChild(s)});const l=n("button","padding:8px 14px;background:var(--dm-border,#334155);border:none;border-radius:8px;color:var(--dm-text-muted,#94a3b8);font-size:12px;cursor:pointer");Y(l,"x","Close"),l.addEventListener("click",()=>t.remove()),r.appendChild(i),r.appendChild(d),r.appendChild(l);const f=n("div","font-size:11px;color:var(--dm-text-muted,#94a3b8)"),b=n("div","display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:6px;overflow-y:auto;max-height:400px");let v=null;const y=n("button","padding:8px 18px;background:var(--dm-primary);border:none;border-radius:8px;color:var(--dm-primary-text);font-size:12px;font-weight:700;cursor:pointer;align-self:flex-end");y.textContent="Select an icon";function m(){for(;b.firstChild;)b.removeChild(b.firstChild);const c=G(d.value,i.value);f.textContent=`${c.length} icon${c.length===1?"":"s"}`,c.forEach(h=>{const s=n("div","display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;border-radius:8px;cursor:pointer;border:2px solid transparent;background:var(--dm-surface,#0f172a)"),z=document.createElement("span");z.setAttribute("data-icon",h),z.style.fontSize="20px";const u=n("div","font-size:8px;color:var(--dm-text-muted,#475569);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%");u.textContent=h,s.appendChild(z),s.appendChild(u),s.addEventListener("click",()=>{v&&(v.style.borderColor="transparent"),s.style.borderColor="var(--dm-primary)",v=s,y.textContent=`Use: ${h}`}),s.addEventListener("dblclick",()=>{e(h),t.remove()}),b.appendChild(s)}),typeof I<"u"&&I.scan&&I.scan(b)}i.addEventListener("input",m),d.addEventListener("change",m),m(),y.addEventListener("click",()=>{if(v){const c=v.querySelector("[data-icon]").getAttribute("data-icon");e(c),t.remove()}}),o.appendChild(r),o.appendChild(f),o.appendChild(b),o.appendChild(y),t.appendChild(o),t.addEventListener("click",c=>{c.target===t&&t.remove()}),document.body.appendChild(t),i.focus()}export function openIconPicker(e){F(e)}
|
|
7
|
+
[/card]`}function E(){C&&(C.remove(),C=null,d=null)}function U(){const e=T();M($,$.selectionStart,$.selectionEnd,e),E()}function Y(){C=document.createElement("div"),Object.assign(C.style,{position:"fixed",inset:"0",background:"rgba(0,0,0,.6)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:"9999",padding:"24px",isolation:"isolate"});const e=document.createElement("div");Object.assign(e.style,{background:"var(--dm-surface,#1e293b)",border:"1px solid var(--dm-border,#334155)",borderRadius:"14px",width:"100%",maxWidth:"860px",maxHeight:"90vh",display:"flex",flexDirection:"column",boxShadow:"var(--dm-shadow-lg)",overflow:"hidden"});const t=n("div","display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--dm-border,#334155);flex-shrink:0"),o=n("span","font-weight:700;color:var(--dm-text,#f1f5f9);font-size:14px");o.textContent="Insert Card";const r=n("button","background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:6px;width:26px;height:26px;cursor:pointer;font-size:14px");r.title="Close",z(r,"x"),r.addEventListener("click",E),t.appendChild(o),t.appendChild(r);const i=n("div","display:grid;grid-template-columns:280px 1fr;flex:1;overflow:hidden");i.appendChild(V()),i.appendChild(ue());const a=n("div","display:flex;justify-content:flex-end;gap:1rem;padding:12px 20px;border-top:1px solid var(--dm-border,#334155);flex-shrink:0"),l=n("button","padding:8px 18px;border-radius:8px;border:none;background:var(--dm-border,#334155);color:var(--dm-text-muted,#94a3b8);font-size:12px;font-weight:700;cursor:pointer");l.textContent="Cancel",l.addEventListener("click",E);const p=n("button","padding:8px 18px;border-radius:8px;border:none;background:var(--dm-primary);color:var(--dm-primary-text);font-size:12px;font-weight:700;cursor:pointer");p.textContent="Insert Card",p.addEventListener("click",U),a.appendChild(l),a.appendChild(p),e.appendChild(t),e.appendChild(i),e.appendChild(a),C.appendChild(e),C.addEventListener("click",b=>{b.target===C&&E()}),document.body.appendChild(C),D(),m()}function n(e,t=""){const o=document.createElement(e);return t&&(o.style.cssText=t),o}function z(e,t,o=14){e.textContent="";const r=document.createElement("span");return r.setAttribute("data-icon",t),r.setAttribute("data-icon-size",String(o)),r.style.cssText="display:inline-flex;align-items:center;vertical-align:middle;",e.appendChild(r),typeof I<"u"&&I.scan&&I.scan(e),e}function X(e,t,o,r=14){return z(e,t,r),e.appendChild(document.createTextNode(" "+o)),e}const w="padding:7px 10px;border-radius:7px;border:1px solid var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text,#e2e8f0);font-size:12px;font-family:inherit;width:100%";function V(){const e=n("div","padding:18px;border-right:1px solid var(--dm-border,#334155);display:flex;flex-direction:column;gap:14px;overflow-y:auto");e.appendChild(s("Layout",W()));const t=n("div","display:contents");t.id="cb-dyn-fields",e.appendChild(t),e.appendChild(P()),e.appendChild(s("Style",J()));const o=n("div");return o.id="cb-grad-wrap",o.style.display=d.variant==="gradient"?"":"none",o.appendChild(s("Gradient",Q())),e.appendChild(o),e.appendChild(s("Options",Z())),e.appendChild(P()),e.appendChild(te()),e}function W(){const e=n("select",w+";cursor:pointer"),t={};return j.forEach(o=>{(t[o.group]=t[o.group]||[]).push(o)}),Object.entries(t).forEach(([o,r])=>{const i=document.createElement("optgroup");i.label=o,r.forEach(a=>{const l=document.createElement("option");l.value=a.key,l.textContent=`${a.thumb} ${a.label}`,a.key===d.layout&&(l.selected=!0),i.appendChild(l)}),e.appendChild(i)}),e.addEventListener("change",()=>{d.layout=e.value,D(),m()}),e}function J(){const e=n("div","display:grid;grid-template-columns:repeat(3,1fr);gap:5px"),t={clean:"background:#f8fafc;color:#374151;border:2px solid #e2e8f0",gradient:"background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border:2px solid transparent",glass:"background:rgba(255,255,255,.06);color:#94a3b8;border:2px dashed #334155",accent:"background:#fff;color:#4338ca;border-left:4px solid #6366f1;border-top:2px solid #e2e8f0;border-right:2px solid #e2e8f0;border-bottom:2px solid #e2e8f0",dark:"background:#0f172a;color:#818cf8;border:2px solid #334155",glow:"color:#818cf8;border:2px solid #6366f1;box-shadow:0 0 6px rgba(99,102,241,.4)"};return O.forEach(o=>{const r=n("div",`padding:6px 4px;border-radius:7px;font-size:10px;font-weight:700;text-align:center;cursor:pointer;${t[o]}`);r.textContent=o.charAt(0).toUpperCase()+o.slice(1),r.dataset.variant=o,o===d.variant&&(r.style.outline="2px solid var(--dm-primary)"),r.addEventListener("click",()=>{d.variant=o,e.querySelectorAll("[data-variant]").forEach(a=>{a.style.outline=""}),r.style.outline="2px solid var(--dm-primary)";const i=document.getElementById("cb-grad-wrap");i&&(i.style.display=o==="gradient"?"":"none"),m()}),e.appendChild(r)}),e}function Q(){const e=n("div","display:flex;flex-wrap:wrap;gap:7px");return N.forEach(t=>{const[o,r]=(B[t]||"#6366f1,#8b5cf6").split(","),i=n("div",`width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,${o},${r});cursor:pointer;border:2px solid transparent;transition:border-color .15s`);i.title=t,t===d.gradient&&(i.style.borderColor="var(--dm-text)"),i.addEventListener("click",()=>{d.gradient=t,e.querySelectorAll("div").forEach(a=>{a.style.borderColor="transparent"}),i.style.borderColor="var(--dm-text)",m()}),e.appendChild(i)}),e}function Z(){const e=n("div","display:flex;gap:6px");return["hover","collapsible"].forEach(t=>{const o=n("div"),r=i=>{o.style.cssText=`flex:1;padding:6px 8px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${i?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`};r(d[t]),o.textContent=t.charAt(0).toUpperCase()+t.slice(1),o.addEventListener("click",()=>{d[t]=!d[t],r(d[t]),m()}),e.appendChild(o)}),e}function S(e,t){const o=n("select",w+";cursor:pointer");return t.forEach(([r,i])=>{const a=document.createElement("option");a.value=r,a.textContent=i,r===d[e]&&(a.selected=!0),o.appendChild(a)}),o.addEventListener("change",()=>{d[e]=o.value,m()}),o}function K(e,t){const o=n("div"),r=i=>{o.style.cssText=`flex:1;padding:6px 8px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${i?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`};return r(d[e]),o.textContent=t,o.addEventListener("click",()=>{d[e]=!d[e],r(d[e]),m()}),o}function ee(){const e=n("div","display:flex;gap:6px");return[["","Left"],["center","Centre"],["right","Right"]].forEach(([t,o])=>{const r=n("div"),i=a=>{r.style.cssText=`flex:1;padding:5px 4px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${a?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`};i(d.textAlign===t),r.textContent=o,r.addEventListener("click",()=>{d.textAlign=t,e.querySelectorAll("div").forEach((a,l)=>i([["","Left"],["center","Centre"],["right","Right"]][l][0]===t)),m()}),e.appendChild(r)}),e}function te(){const e=n("div","display:flex;flex-direction:column;gap:14px"),t=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#475569)");t.textContent="Presentation",e.appendChild(t);const o=n("div","display:grid;grid-template-columns:1fr 1fr;gap:10px"),r=(a,l)=>{const p=n("div","display:flex;flex-direction:column;gap:5px"),b=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#475569)");b.textContent=a,p.appendChild(b),p.appendChild(l),o.appendChild(p)};r("Font",S("font",[["","Default"],["serif","Serif"],["mono","Mono"]])),r("Size",S("fontSize",[["","Default"],["sm","Small"],["lg","Large"],["xl","XL"]])),r("Shadow",S("shadow",[["","Default"],["none","None"],["md","Medium"],["lg","Large"]])),r("Padding",S("padding",[["","Default"],["compact","Compact"],["spacious","Spacious"]])),r("Corners",S("rounded",[["","Default"],["none","Square"],["sm","Small"],["lg","Large"],["full","Full"]])),r("Span in a grid",S("span",[["","1 column"],["2","2"],["3","3"],["4","4"],["5","5"],["6","6"],["full","Full row"]])),e.appendChild(o),e.appendChild(s("Align",ee()));const i=n("div","display:flex;gap:6px");return i.appendChild(K("borderless","Borderless")),e.appendChild(i),e}function s(e,t){const o=n("div","display:flex;flex-direction:column;gap:5px"),r=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#475569)");return r.textContent=e,o.appendChild(r),o.appendChild(t),o}function P(){return n("div","height:1px;background:var(--dm-border,#334155);margin:2px 0")}function g(e,t){const o=n("input",w);return o.type="text",t&&(o.placeholder=t),o.value=d[e]||"",o.addEventListener("input",()=>{d[e]=o.value,m()}),o}function oe(e,t){const o=n("select",w+";cursor:pointer");return t.forEach(r=>{const i=document.createElement("option");i.value=r,i.textContent=r,r===d[e]&&(i.selected=!0),o.appendChild(i)}),o.addEventListener("change",()=>{d[e]=o.value,m()}),o}const re={"icon-top":["subtitle","icon","iconSize","iconAlign"],"icon-inline":["subtitle","icon","iconSize","iconAlign"],"image-top":["image"],"image-overlay":["image"],"thumb-left":["image"],"thumb-right":["image"],"wide-left-image":["image"],"full-bg":["image"],"split-half":["image"],"avatar-profile":["subtitle","icon","tags"],"stat-metric":["value","delta","progress"],"quote-testimonial":["subtitle","icon"],callout:["calloutType","icon"],"video-media":["image","duration"],"location-map":["address"],"step-numbered":["step"],"corner-badge":["icon","badge"],"badge-band":["icon","badge"],"rating-review":["rating","subtitle","icon"],"tag-cloud":["tags"],"activity-feed":[],"code-snippet":["lang"],"file-document":["filename","filesize","filetype"],"before-after":[],pricing:["price","period"],"feature-comparison":["subtitle"],"progress-goal":["progress"],"timeline-entry":["subtitle","badge"],"glass-gradient-border":[]},ne=new Set(["basic","no-header-footer","code-snippet","file-document","stat-metric"]),ie=new Set(["stat-metric","file-document"]),ae=new Set(["pricing","feature-comparison","activity-feed","before-after","progress-goal"]);function D(){const e=document.getElementById("cb-dyn-fields");if(!e)return;for(;e.firstChild;)e.removeChild(e.firstChild);const t=d.layout,o=re[t]||[];ne.has(t)||e.appendChild(s("Title",g("title","Card heading"))),o.forEach(r=>{const i={subtitle:()=>s("Subtitle",g("subtitle","Secondary line")),icon:()=>s("Icon",le()),iconLayout:()=>s("Icon layout",F("iconLayout",[["inline","Inline"],["stacked","Stacked"]])),iconSize:()=>s("Icon size",se()),iconAlign:()=>s("Icon alignment",F("iconAlign",[["","Default"],["left","Left"],["center","Centre"],["right","Right"]])),image:()=>s("Image",ce()),value:()=>s("Value",g("value","\xA324,980")),delta:()=>s("Delta",g("delta","\u2191 12.4%")),progress:()=>s("Progress %",g("progress","50")),price:()=>s("Price",g("price","\xA329")),period:()=>s("Period",g("period","per month")),lang:()=>s("Language",g("lang","JavaScript")),filename:()=>s("Filename",g("filename","document.pdf")),filesize:()=>s("File size",g("filesize","2.4 MB")),filetype:()=>s("File type",g("filetype","PDF")),rating:()=>s("Rating (1-5)",g("rating","5")),duration:()=>s("Duration",g("duration","4:32")),address:()=>s("Address",g("address","12 Main St")),step:()=>s("Step number",g("step","1")),badge:()=>s("Badge label",g("badge","New")),tags:()=>s("Tags (comma-separated)",g("tags","Design, CSS")),calloutType:()=>s("Type",oe("calloutType",["info","warn","success","error"]))};i[r]&&e.appendChild(i[r]())}),ie.has(t)||e.appendChild(s("Body content",de())),ae.has(t)||e.appendChild(s("Footer",g("footer","")))}function de(){const e=n("textarea",w+";resize:vertical;min-height:60px;line-height:1.5");return e.value=d.body||"",e.addEventListener("input",()=>{d.body=e.value,m()}),e}function le(){const e=n("div","display:flex;gap:6px"),t=n("input",w+";flex:1");t.type="text",t.placeholder="icon name",t.value=d.icon||"",t.addEventListener("input",()=>{d.icon=t.value,m()});const o=n("button","padding:0 10px;height:34px;background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:7px;font-size:13px;cursor:pointer;flex-shrink:0");return o.title="Browse icons",z(o,"star"),o.addEventListener("click",()=>R(r=>{d.icon=r,t.value=r,m()})),e.appendChild(t),e.appendChild(o),e}function F(e,t){const o=n("div","display:flex;gap:6px"),r=t.map(([a,l])=>{const p=n("div");return p.textContent=l,p.addEventListener("click",()=>{d[e]=a,i(),m()}),o.appendChild(p),p}),i=()=>r.forEach((a,l)=>{const p=d[e]===t[l][0];a.style.cssText=`flex:1;padding:6px;border-radius:7px;border:1px solid;font-size:11px;font-weight:700;text-align:center;cursor:pointer;${p?"border-color:var(--dm-primary);background:color-mix(in srgb, var(--dm-primary) 18%, transparent);color:var(--dm-primary)":"border-color:var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text-muted,#64748b)"}`});return i(),o}function se(){const e=[["","Default"],["xs","XS"],["sm","Small"],["md","Medium"],["lg","Large"],["xl","XL"],["2xl","2XL"]],t=n("div","display:flex;gap:6px"),o=n("select",w+";flex:1");[...e,["custom","Custom\u2026"]].forEach(([a,l])=>{const p=document.createElement("option");p.value=a,p.textContent=l,o.appendChild(p)});const r=n("input",w+";flex:1");r.type="text",r.placeholder="48px or 3rem";const i=e.some(([a])=>a===d.iconSize);return o.value=i?d.iconSize:"custom",r.value=i?"":d.iconSize,r.style.display=i?"none":"",o.addEventListener("change",()=>{const a=o.value==="custom";r.style.display=a?"":"none",d.iconSize=a?r.value:o.value,a&&r.focus(),m()}),r.addEventListener("input",()=>{d.iconSize=r.value,m()}),t.appendChild(o),t.appendChild(r),t}function pe(){return new Promise(async e=>{let t=[];_&&typeof _.onMediaBrowse=="function"&&(t=await _.onMediaBrowse()||[]);const o=document.createElement("dialog");o.style.cssText="margin:auto;padding:0;border:none;border-radius:12px;background:var(--dm-surface,#1e293b);width:min(700px,95vw);max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--dm-shadow-lg)";const r=document.createElement("style");r.textContent="dialog.cb-media-picker::backdrop{background:rgba(0,0,0,.75)}",o.className="cb-media-picker";const i=x=>{o.close(),o.remove(),r.remove(),e(x)},a=n("div","display:flex;justify-content:space-between;align-items:center;flex-shrink:0;padding:16px 20px;border-bottom:1px solid var(--dm-border,#334155)"),l=n("div","font-weight:700;font-size:14px;color:var(--dm-text,#f1f5f9)");l.textContent="Select Image";const p=n("button","background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:6px;width:26px;height:26px;cursor:pointer;font-size:14px");p.title="Close",z(p,"x"),p.addEventListener("click",()=>i(null)),o.addEventListener("cancel",()=>i(null)),a.appendChild(l),a.appendChild(p);const b=n("div","padding:16px;overflow-y:auto;flex:1"),v=n("div","display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px"),y=t.filter(x=>/\.(png|jpe?g|gif|webp|svg)$/i.test(x.name||""));if(y.length)y.forEach(x=>{const u=n("div","display:flex;flex-direction:column;gap:6px;cursor:pointer;border:2px solid transparent;border-radius:8px;padding:6px"),h=document.createElement("img");h.src=x.url,h.alt=x.name||"",h.style.cssText="width:100%;height:80px;object-fit:cover;border-radius:6px;display:block";const c=n("div","font-size:9px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--dm-text-muted,#94a3b8)");c.textContent=x.name||x.url,u.appendChild(h),u.appendChild(c),u.addEventListener("mouseenter",()=>{u.style.borderColor="var(--dm-primary)"}),u.addEventListener("mouseleave",()=>{u.style.borderColor="transparent"}),u.addEventListener("click",()=>i(x.url)),v.appendChild(u)});else{const x=n("div","color:var(--dm-text-muted,#94a3b8);font-size:13px;padding:20px;text-align:center");x.textContent="No images uploaded yet.",v.appendChild(x)}b.appendChild(v),o.appendChild(a),o.appendChild(b),document.head.appendChild(r),document.body.appendChild(o),o.showModal()})}function ce(){const e=n("div","display:flex;gap:6px"),t=n("input",w+";flex:1");t.type="text",t.placeholder="/media/image.jpg",t.value=d.image||"",t.addEventListener("input",()=>{d.image=t.value,m()});const o=n("button","padding:0 10px;height:34px;background:var(--dm-border,#334155);border:none;color:var(--dm-text-muted,#94a3b8);border-radius:7px;font-size:13px;cursor:pointer;flex-shrink:0");return o.title="Browse media",z(o,"folder"),o.addEventListener("click",async()=>{const r=await pe();r&&(d.image=r,t.value=r,m())}),e.appendChild(t),e.appendChild(o),e}function ue(){const e=n("div","padding:20px;background:var(--dm-surface,#f8fafc);display:flex;flex-direction:column;gap:14px;overflow-y:auto"),t=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dm-text-muted,#94a3b8)");t.textContent="Live Preview";const o=n("div","flex:1;display:flex;align-items:flex-start;justify-content:center");o.id="cb-preview-area";const r=n("div","font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--dm-text-muted,#94a3b8);margin-bottom:6px");r.textContent="Shortcode";const i=n("div","background:var(--dm-surface,#1e293b);border:1px solid var(--dm-border,#334155);border-radius:8px;padding:10px 14px;font-family:monospace;font-size:11px;color:var(--dm-primary,#a5b4fc);line-height:1.8;white-space:pre-wrap;word-break:break-all");return i.id="cb-snippet",e.appendChild(t),e.appendChild(o),e.appendChild(r),e.appendChild(i),e}function m(){const e=document.getElementById("cb-preview-area");if(!e)return;for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(fe());const t=document.getElementById("cb-snippet");t&&(t.textContent=T())}function fe(){const e=d,[t,o]=(B[e.gradient]||"#6366f1,#8b5cf6").split(","),r=`linear-gradient(135deg,${t},${o})`,i={clean:"background:var(--dm-surface,#fff);border:1px solid var(--dm-border,#e5e7eb);box-shadow:0 1px 4px rgba(0,0,0,.06)",gradient:`background:${r};color:#fff`,glass:"background:rgba(255,255,255,.12);backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.25);box-shadow:0 4px 24px rgba(0,0,0,.12)",accent:"background:var(--dm-surface,#fff);border-top:1px solid var(--dm-border,#e5e7eb);border-right:1px solid var(--dm-border,#e5e7eb);border-bottom:1px solid var(--dm-border,#e5e7eb);border-left:4px solid #6366f1",dark:"background:#0f172a;color:#e2e8f0;border:1px solid #1e293b",glow:"background:var(--dm-surface,#fff);border:1px solid #6366f1;box-shadow:0 0 0 3px rgba(99,102,241,.15),0 0 20px rgba(99,102,241,.3)"},a=e.variant==="gradient"?`background:${r};color:#fff;padding:12px 16px`:"background:var(--dm-border,#f3f4f6);color:var(--dm-text,#111);padding:12px 16px",l=n("div");l.style.cssText=`width:100%;max-width:300px;border-radius:12px;overflow:hidden;font-size:13px;font-family:system-ui,sans-serif;${i[e.variant]||i.clean}`;const p={serif:"Georgia,serif",mono:"'SF Mono','Fira Code',monospace"};e.font&&p[e.font]&&(l.style.fontFamily=p[e.font]);const b={sm:"11px",lg:"15px",xl:"17px"};e.fontSize&&b[e.fontSize]&&(l.style.fontSize=b[e.fontSize]),e.borderless&&(l.style.border="none");const v={none:"none",md:"0 4px 12px rgba(0,0,0,.1)",lg:"0 10px 30px rgba(0,0,0,.18)"};e.shadow&&v[e.shadow]!==void 0&&(l.style.boxShadow=v[e.shadow]);const y={none:"0",sm:"4px",lg:"20px",full:"9999px"};if(e.rounded&&y[e.rounded]!==void 0&&(l.style.borderRadius=y[e.rounded]),e.textAlign&&(l.style.textAlign=e.textAlign),new Set(["image-top","image-overlay","thumb-left","thumb-right","wide-left-image","full-bg","split-half","video-media"]).has(e.layout)){const f=n("div","height:120px;background-size:cover;background-position:center;display:flex;align-items:center;justify-content:center;font-size:2rem;background-color:var(--dm-border,#e2e8f0)");e.image&&(f.style.backgroundImage=`url('${e.image}')`),e.image||(f.textContent="\u{1F5BC}"),l.appendChild(f)}if(!new Set(["basic","no-header-footer","image-overlay","stat-metric","quote-testimonial","activity-feed","before-after","code-snippet","file-document","glass-gradient-border"]).has(e.layout)&&e.title){const f=n("div",a),k=n("div","font-weight:700");k.textContent=e.title,f.appendChild(k),l.appendChild(f)}const h=e.variant==="dark"?"color:#94a3b8;":e.variant==="gradient"?"color:rgba(255,255,255,.85);":"",c=n("div",`padding:13px 16px;${h}`);if(new Set(["before-after","pricing","feature-comparison","activity-feed","progress-goal"]).has(e.layout)){const f=n("em","font-size:11px;color:var(--dm-text-muted,#9ca3af)");f.textContent="Simplified preview - full render on save.",c.appendChild(f)}else if(e.layout==="stat-metric"){const f=n("div","font-size:2rem;font-weight:800");f.textContent=e.value||"-";const k=n("div","font-size:.8rem;opacity:.7");if(k.textContent=e.title||"",c.appendChild(k),c.appendChild(f),e.delta){const A=n("div","font-size:.78rem;font-weight:600;color:#10b981");A.textContent=e.delta,c.appendChild(A)}}else c.textContent=e.body||"Card body content.";if(e.padding){const f=e.padding==="compact"?"8px 12px":"24px 28px";c.style.padding=f}if(l.appendChild(c),e.footer){const f=e.variant==="gradient"?"rgba(255,255,255,.6)":"var(--dm-text-muted,#9ca3af)",k=n("div",`padding:9px 16px;border-top:1px solid rgba(128,128,128,.15);font-size:11px;color:${f}`);k.textContent=e.footer,l.appendChild(k)}return l}function R(e){const t=n("div","position:fixed;inset:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:10000;padding:24px"),o=n("div","background:var(--dm-surface,#1e293b);border:1px solid var(--dm-border,#475569);border-radius:12px;padding:16px;width:100%;max-width:520px;max-height:70vh;display:flex;flex-direction:column;gap:12px"),r=n("div","display:flex;gap:8px;flex-wrap:wrap"),i=n("input","flex:1;min-width:160px;padding:8px 12px;border-radius:8px;border:1px solid var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text,#e2e8f0);font-size:13px;font-family:inherit");i.type="text",i.placeholder="Search icons\u2026";const a=n("select","padding:8px 12px;border-radius:8px;border:1px solid var(--dm-border,#334155);background:var(--dm-surface,#0f172a);color:var(--dm-text,#e2e8f0);font-size:13px;font-family:inherit;cursor:pointer");G().forEach(({slug:u,label:h})=>{const c=document.createElement("option");c.value=u,c.textContent=h,a.appendChild(c)});const l=n("button","padding:8px 14px;background:var(--dm-border,#334155);border:none;border-radius:8px;color:var(--dm-text-muted,#94a3b8);font-size:12px;cursor:pointer");X(l,"x","Close"),l.addEventListener("click",()=>t.remove()),r.appendChild(i),r.appendChild(a),r.appendChild(l);const p=n("div","font-size:11px;color:var(--dm-text-muted,#94a3b8)"),b=n("div","display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:6px;overflow-y:auto;max-height:400px");let v=null;const y=n("button","padding:8px 18px;background:var(--dm-primary);border:none;border-radius:8px;color:var(--dm-primary-text);font-size:12px;font-weight:700;cursor:pointer;align-self:flex-end");y.textContent="Select an icon";function x(){for(;b.firstChild;)b.removeChild(b.firstChild);const u=H(a.value,i.value);p.textContent=`${u.length} icon${u.length===1?"":"s"}`,u.forEach(h=>{const c=n("div","display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;border-radius:8px;cursor:pointer;border:2px solid transparent;background:var(--dm-surface,#0f172a)"),L=document.createElement("span");L.setAttribute("data-icon",h),L.style.fontSize="20px";const f=n("div","font-size:8px;color:var(--dm-text-muted,#475569);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%");f.textContent=h,c.appendChild(L),c.appendChild(f),c.addEventListener("click",()=>{v&&(v.style.borderColor="transparent"),c.style.borderColor="var(--dm-primary)",v=c,y.textContent=`Use: ${h}`}),c.addEventListener("dblclick",()=>{e(h),t.remove()}),b.appendChild(c)}),typeof I<"u"&&I.scan&&I.scan(b)}i.addEventListener("input",x),a.addEventListener("change",x),x(),y.addEventListener("click",()=>{if(v){const u=v.querySelector("[data-icon]").getAttribute("data-icon");e(u),t.remove()}}),o.appendChild(r),o.appendChild(p),o.appendChild(b),o.appendChild(y),t.appendChild(o),t.addEventListener("click",u=>{u.target===t&&t.remove()}),document.body.appendChild(t),i.focus()}export function openIconPicker(e){R(e)}
|
|
@@ -5,6 +5,6 @@ function L(){I.register("bold",{viewBox:"0 0 24 24",path:"M7 5H14a3 3 0 0 1 0 6H
|
|
|
5
5
|
`,i-1)+1,r=e.value.indexOf(`
|
|
6
6
|
`,i),a=r===-1?e.value.length:r+1;e.setSelectionRange(n,a),document.execCommand("copy"),e.setSelectionRange(i,i),E.toast("Line copied",{type:"info",duration:1200})}})}export function insertLine(e,t){const s=e.selectionStart,i=e.value,n=i.lastIndexOf(`
|
|
7
7
|
`,s-1)+1,r=i.indexOf(`
|
|
8
|
-
`,n);i.substring(n,r===-1?i.length:r).startsWith(t)?(replaceRange(e,n,n+t.length,""),e.setSelectionRange(Math.max(n,s-t.length),Math.max(n,s-t.length))):(replaceRange(e,n,n,t),e.setSelectionRange(s+t.length,s+t.length))}function k(e,t,s,i){const n=document.querySelector(".editor-toolbar-dropdown");if(n){n.remove();return}const r=document.createElement("div");r.className="editor-toolbar-dropdown",s.forEach(function(o){if(o.heading){const d=document.createElement("div");d.className="editor-toolbar-dropdown-heading",d.textContent=o.heading,r.appendChild(d);return}const l=document.createElement("button");if(l.type="button",l.className="editor-toolbar-dropdown-item",o.icon){const d=document.createElement("span");d.setAttribute("data-icon",o.icon),l.appendChild(d)}const c=document.createElement("span");c.textContent=o.label,l.appendChild(c),l.addEventListener("click",function(){r.remove(),document.removeEventListener("click",f,!0),m(o.action,e,t,i)}),r.appendChild(l)});const a=t.getBoundingClientRect(),p=t.closest(".editor-toolbar").getBoundingClientRect();r.style.top=a.bottom-p.top+4+"px";const h=a.left-p.left;r.style.left=Math.min(h,p.width-180-8)+"px",t.closest(".editor-toolbar").appendChild(r),Domma.icons.scan(r);function f(o){!r.contains(o.target)&&o.target!==t&&(r.remove(),document.removeEventListener("click",f,!0))}setTimeout(function(){document.addEventListener("click",f,!0)},0)}function b(){return import("./shortcode-insert.js").then(e=>e.insertMenuGroups().flatMap(t=>[{heading:t.category},...t.items.map(s=>({label:s.label,icon:s.icon,action:`insert:${s.name}`}))]))}function m(e,t,s,i){const{handlers:n}=i;typeof e=="function"?e(t):typeof e=="string"&&e.startsWith("insert:")?
|
|
8
|
+
`,n);i.substring(n,r===-1?i.length:r).startsWith(t)?(replaceRange(e,n,n+t.length,""),e.setSelectionRange(Math.max(n,s-t.length),Math.max(n,s-t.length))):(replaceRange(e,n,n,t),e.setSelectionRange(s+t.length,s+t.length))}function k(e,t,s,i){const n=document.querySelector(".editor-toolbar-dropdown");if(n){n.remove();return}const r=document.createElement("div");r.className="editor-toolbar-dropdown",s.forEach(function(o){if(o.heading){const d=document.createElement("div");d.className="editor-toolbar-dropdown-heading",d.textContent=o.heading,r.appendChild(d);return}const l=document.createElement("button");if(l.type="button",l.className="editor-toolbar-dropdown-item",o.icon){const d=document.createElement("span");d.setAttribute("data-icon",o.icon),l.appendChild(d)}const c=document.createElement("span");c.textContent=o.label,l.appendChild(c),l.addEventListener("click",function(){r.remove(),document.removeEventListener("click",f,!0),m(o.action,e,t,i)}),r.appendChild(l)});const a=t.getBoundingClientRect(),p=t.closest(".editor-toolbar").getBoundingClientRect();r.style.top=a.bottom-p.top+4+"px";const h=a.left-p.left;r.style.left=Math.min(h,p.width-180-8)+"px",t.closest(".editor-toolbar").appendChild(r),Domma.icons.scan(r);function f(o){!r.contains(o.target)&&o.target!==t&&(r.remove(),document.removeEventListener("click",f,!0))}setTimeout(function(){document.addEventListener("click",f,!0)},0)}function b(){return import("./shortcode-insert.js").then(e=>e.insertMenuGroups().flatMap(t=>[{heading:t.category},...t.items.map(s=>({label:s.label,icon:s.icon,action:`insert:${s.name}`}))]))}function m(e,t,s,i){const{handlers:n}=i;typeof e=="function"?e(t):typeof e=="string"&&e.startsWith("insert:")?g(e.slice(7),t):e==="effects"?n.effects&&n.effects(t):e==="help"?n.help&&n.help(t):e==="tutorial"&&n.tutorial&&n.tutorial(t)}function g(e,t){import("./shortcode-insert.js").then(s=>s.insertShortcodeByName(e,t)).catch(s=>console.error("Insert router failed to load",s))}const v=[{icon:"bold",title:"Bold (Ctrl+B)",action:e=>wrapSelection(e,"**","**")},{icon:"italic",title:"Italic (Ctrl+I)",action:e=>wrapSelection(e,"_","_")},{icon:"strikethrough",title:"Strikethrough",action:e=>wrapSelection(e,"~~","~~")},"|",{type:"dropdown",icon:"heading-1",title:"Headings",items:[{label:"Heading 1",icon:"heading-1",action:e=>insertLine(e,"# ")},{label:"Heading 2",icon:"heading-2",action:e=>insertLine(e,"## ")},{label:"Heading 3",icon:"heading-3",action:e=>insertLine(e,"### ")}]},"|",{icon:"list-bullet",title:"Bullet list",action:e=>insertLine(e,"- ")},{icon:"list-numbered",title:"Numbered list",action:e=>insertLine(e,"1. ")},"|",{type:"dropdown",icon:"quote",title:"Paragraph",items:[{label:"Blockquote",icon:"quote",action:e=>insertLine(e,"> ")},{label:"Horizontal rule",icon:"minus-circle",action:e=>insertAtCursor(e,`
|
|
9
9
|
---
|
|
10
|
-
`)}]},"|",{type:"dropdown",icon:"code-inline",title:"Code",items:[{label:"Inline code",icon:"code-inline",action:e=>wrapSelection(e,"`","`")},{label:"Code block",icon:"code-block",action:e=>wrapSelection(e,"\n```\n","\n```\n")}]},"|",{type:"dropdown",icon:"plus-circle",title:"Insert",insertMenu:!0,items:[]},"|",{icon:"sparkles",title:"Effects",action:"effects"},{icon:"book-open",title:"CRUD tutorial",action:"tutorial"},{icon:"help-circle",title:"Editor help",action:"help"}];export function createToolbar(e,t,s={}){L();const i={help:null,tutorial:null,effects:null};s.spacerDefault&&import("./shortcode-insert.js").then(o=>o.registerInsertDefaults({spacer:{size:String(s.spacerDefault)}})).catch(()=>{});const n=e.get(0),r=t.get(0);r.textContent="",
|
|
10
|
+
`)}]},"|",{type:"dropdown",icon:"code-inline",title:"Code",items:[{label:"Inline code",icon:"code-inline",action:e=>wrapSelection(e,"`","`")},{label:"Code block",icon:"code-block",action:e=>wrapSelection(e,"\n```\n","\n```\n")}]},"|",{type:"dropdown",icon:"plus-circle",title:"Insert",insertMenu:!0,items:[]},"|",{icon:"sparkles",title:"Effects",action:"effects"},{icon:"book-open",title:"CRUD tutorial",action:"tutorial"},{icon:"image-add",title:"Upload or insert image",action:"insert:image"},{icon:"help-circle",title:"Editor help",action:"help"}];export function createToolbar(e,t,s={}){L();const i={help:null,tutorial:null,effects:null};s.spacerDefault&&import("./shortcode-insert.js").then(o=>o.registerInsertDefaults({spacer:{size:String(s.spacerDefault)}})).catch(()=>{});const n=e.get(0),r=t.get(0);r.textContent="",v.forEach((o,l)=>{if(o==="|"){const c=document.createElement("span");c.className="editor-toolbar-sep",r.appendChild(c)}else{const c=document.createElement("button");c.className=o.type==="dropdown"?"editor-toolbar-btn editor-toolbar-dropdown-trigger":"editor-toolbar-btn",c.setAttribute("data-tooltip",o.title),c.setAttribute("data-idx",String(l)),c.type="button";const d=document.createElement("span");if(d.setAttribute("data-icon",o.icon),c.appendChild(d),o.type==="dropdown"){const u=document.createElement("span");u.className="editor-toolbar-caret",u.setAttribute("data-icon","chevron-down"),u.setAttribute("data-icon-size","12"),u.style.cssText="display:inline-flex;align-items:center;vertical-align:middle;",c.appendChild(u)}r.appendChild(c)}});const a=document.createElement("div");a.className="editor-toolbar-right",[{mode:"split",icon:"columns",label:"Split view",active:!0},{mode:"write",icon:"file-text",label:"Write only",active:!1},{mode:"preview",icon:"eye",label:"Preview only",active:!1}].forEach(o=>{const l=document.createElement("button");l.className="editor-view-btn"+(o.active?" active":""),l.setAttribute("data-mode",o.mode),l.setAttribute("data-tooltip",o.label),l.type="button";const c=document.createElement("span");c.setAttribute("data-icon",o.icon),l.appendChild(c),a.appendChild(l)});const p=document.createElement("span");p.className="editor-toolbar-sep",a.appendChild(p);const h=document.createElement("button");h.id="fullscreen-btn",h.className="editor-toolbar-btn",h.setAttribute("data-tooltip","Toggle fullscreen"),h.type="button";const f=document.createElement("span");return f.setAttribute("data-icon","expand"),h.appendChild(f),a.appendChild(h),r.appendChild(a),Domma.icons.scan(),r.querySelectorAll("[data-tooltip]").forEach(o=>{E.tooltip(o,{content:o.getAttribute("data-tooltip"),position:"top"})}),t.on("click",".editor-toolbar-btn[data-idx]",function(){const o=parseInt($(this).data("idx"),10),l=v[o];if(!l||l==="|")return;const c=t.get(0).querySelector(`[data-idx="${o}"]`),d={handlers:i};l.type==="dropdown"?l.insertMenu?b().then(u=>k(n,c,u,d)).catch(u=>console.error("Insert menu failed to load",u)):k(n,c,l.items,d):m(l.action,n,c,d)}),attachEditorKeybindings(n),n.addEventListener("keydown",o=>{const l=o.key.toLowerCase();(o.ctrlKey||o.metaKey)&&(l==="b"?(o.preventDefault(),wrapSelection(n,"**","**")):l==="i"?(o.preventDefault(),wrapSelection(n,"_","_")):l==="k"&&(o.preventDefault(),g("link",n)))}),{$toolbar:t,onHelp(o){i.help=o},onTutorial(o){i.tutorial=o},onEffects(o){i.effects=o}}}
|
|
@@ -36,7 +36,9 @@ Markdown **works** here.
|
|
|
36
36
|
Icon sits left of the title in a flex row.
|
|
37
37
|
[/card]`,"icon accepts any Domma icon name. Default layout when icon is set."),e("Icon - stacked (centred)",`[card title="Feature" icon="star" icon-layout="stacked" hover]
|
|
38
38
|
Icon is centred above the title. Great for feature tiles.
|
|
39
|
-
[/card]`,'icon-layout="stacked" centres the icon above the title. Combine with hover for the theme-colour border transition.'),e("Icon
|
|
39
|
+
[/card]`,'icon-layout="stacked" centres the icon above the title. Combine with hover for the theme-colour border transition.'),e("Icon size and alignment",`[card title="Feature" icon="star" icon-layout="stacked" icon-size="xl" icon-align="left"]
|
|
40
|
+
icon-size: xs, sm, md, lg, xl, 2xl or an explicit 48px / 3rem. icon-align: left, center or right.
|
|
41
|
+
[/card]`),e("Icon with subtitle",`[card title="Feature" subtitle="Tagline here" icon="star" icon-layout="stacked"]
|
|
40
42
|
Body content.
|
|
41
43
|
[/card]`,"subtitle adds a secondary line beneath the title in both layouts."),e("Collapsible card",`[card title="Click to expand" collapsible="true"]
|
|
42
44
|
Hidden by default.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const SHORTCODES=[{name:"card",label:"Card",icon:"card",category:"Layout",selfClosing:!1,container:!0,wrappable:!0,template:`[card title="Title"]
|
|
2
2
|
Content
|
|
3
|
-
[/card]`,custom:"card",attrs:[{name:"title",type:"text",label:"Title"},{name:"subtitle",type:"text",label:"Subtitle"},{name:"icon",type:"icon",label:"Icon"},{name:"span",type:"select",label:"Span (in a grid)",options:[["","1 column"],["2","2 columns"],["3","3 columns"],["4","4 columns"],["5","5 columns"],["6","6 columns"],["full","Full row"]]},{name:"icon-layout",type:"select",label:"Icon layout",options:[["inline","Inline"],["stacked","Stacked"]]},{name:"footer",type:"text",label:"Footer"},{name:"variant",type:"select",label:"Variant",options:[["","Default"],["primary","Primary"]]},{name:"collapsible",type:"checkbox",label:"Collapsible"},{name:"hover",type:"checkbox",label:"Hover highlight"},{name:"class",type:"text",label:"CSS class"},{name:"id",type:"text",label:"ID"}]},{name:"box",label:"Box",icon:"square",category:"Layout",selfClosing:!1,container:!0,wrappable:!0,template:`[box]
|
|
3
|
+
[/card]`,custom:"card",attrs:[{name:"title",type:"text",label:"Title"},{name:"subtitle",type:"text",label:"Subtitle"},{name:"icon",type:"icon",label:"Icon"},{name:"span",type:"select",label:"Span (in a grid)",options:[["","1 column"],["2","2 columns"],["3","3 columns"],["4","4 columns"],["5","5 columns"],["6","6 columns"],["full","Full row"]]},{name:"icon-layout",type:"select",label:"Icon layout",options:[["inline","Inline"],["stacked","Stacked"]]},{name:"icon-size",type:"text",label:"Icon size (xs, sm, md, lg, xl, 2xl or 48px / 3rem)"},{name:"icon-align",type:"select",label:"Icon alignment",options:[["","Default"],["left","Left"],["center","Centre"],["right","Right"]]},{name:"footer",type:"text",label:"Footer"},{name:"variant",type:"select",label:"Variant",options:[["","Default"],["primary","Primary"]]},{name:"collapsible",type:"checkbox",label:"Collapsible"},{name:"hover",type:"checkbox",label:"Hover highlight"},{name:"class",type:"text",label:"CSS class"},{name:"id",type:"text",label:"ID"}]},{name:"box",label:"Box",icon:"square",category:"Layout",selfClosing:!1,container:!0,wrappable:!0,template:`[box]
|
|
4
4
|
Content
|
|
5
5
|
[/box]`,attrs:[{name:"shadow",type:"select",label:"Shadow",options:[["","None (default)"],["md","Medium"],["lg","Large"]]},{name:"rounded",type:"select",label:"Corners",options:[["","2px (default)"],["none","Square"],["sm","Small"],["lg","Large"],["full","Pill"]]},{name:"padding",type:"select",label:"Padding",options:[["","Normal"],["compact","Compact"],["spacious","Spacious"]]},{name:"span",type:"select",label:"Span (in a grid)",options:[["","1 column"],["2","2 columns"],["3","3 columns"],["4","4 columns"],["5","5 columns"],["6","6 columns"],["full","Full row"]]},{name:"borderless",type:"checkbox",label:"No border"},{name:"hover",type:"select",label:"Hover",options:[["","Lift (default)"],["off","Off - stays still"]]},{name:"color",type:"select",label:"Colour (from the theme)",options:[["","None"],["primary","Primary"],["secondary","Secondary"],["success","Success"],["info","Info"],["warning","Warning"],["danger","Danger"]]},{name:"footer",type:"text",label:"Footer"},{name:"class",type:"text",label:"CSS class"},{name:"id",type:"text",label:"ID"}]},{name:"grid",label:"Grid",icon:"columns",category:"Layout",selfClosing:!1,container:!0,wrappable:!1,template:`[grid cols="2" gap="3"]
|
|
6
6
|
[col]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{api as g}from"../api.js";import{CardBuilder as
|
|
1
|
+
import{api as g}from"../api.js";import{CardBuilder as it}from"../lib/card-builder.js";import{TimelineBuilder as lt}from"../lib/timeline-builder.js";import{attachEditorKeybindings as ct,createToolbar as dt,insertAtCursor as pt}from"../lib/markdown-toolbar.js";import{EffectsBuilder as ut}from"../lib/effects-builder.js";import{attachContextMenu as vt}from"../lib/shortcode-context-menu.js";import{registerCustomInserters as ft}from"../lib/shortcode-insert.js";import{populateThemeSelect as mt}from"../lib/themes.js";import{createFoldingManager as bt}from"../lib/editor-folding.js";import{openScribeComposer as gt}from"../lib/scribe-composer.js";import{openCrudTutorial as ht}from"../lib/crud-tutorial.js";import{addBannerAction as B}from"../lib/plugin-chrome.js";import{helpPopovers as Be}from"../lib/help-popover.js";import{onceClosed as be,openMenuAt as $e}from"../lib/tool-kit.js";import{pickMedia as yt}from"../lib/media-picker.js";import{openEditorReference as je}from"../lib/page-editor-reference.js";import{cleanType as J,DEFAULT_TYPE as G,EDITOR_FONTS as wt,fontHref as kt,isDefaultType as Et,LINE_HEIGHTS as Mt,SIZES as St,typeVars as qe}from"../lib/editor-type.js";import{getProjectFromHash as Ct}from"../lib/project-context.js";import{SCREEN as Tt,bannerSection as xt,draftIsStale as Pt,draftKey as Lt,initialProject as At,makeDraft as Dt,problems as Ve,readDraft as Ot,snapshot as $}from"../lib/page-editor-arrange.js";import{fmtDateTime as Y}from"../lib/dates.js";function X(a){const r=document.createElement("template");return r.innerHTML=a.trim(),r.content.firstElementChild}const Rt=Y,He=a=>Y(a.createdAt)+(a.label?` - ${a.label}`:""),Ft=`
|
|
2
2
|
<div class="pe-share">
|
|
3
3
|
<p class="form-hint" style="margin-top:0">Anyone with the link can view this page even while it is unpublished, without
|
|
4
4
|
signing in. The link works for this page only, expires on its own, and can be revoked at any time.</p>
|
|
@@ -30,7 +30,7 @@ import{api as g}from"../api.js";import{CardBuilder as rt}from"../lib/card-builde
|
|
|
30
30
|
.pe-share [hidden] { display: none !important; }
|
|
31
31
|
.pe-share-row { display: flex; align-items: center; gap: .6rem; padding: .5rem 0; border-bottom: 1px solid var(--dm-border-light); }
|
|
32
32
|
.pe-share-text { flex: 1 1 auto; min-width: 0; font-size: .82rem; }
|
|
33
|
-
</style>`;function Ke(
|
|
33
|
+
</style>`;function Ke(a){const r=kt(a);if(!r||document.querySelector(`link[data-pe-font="${CSS.escape(a)}"]`))return;const l=Object.assign(document.createElement("link"),{rel:"stylesheet",href:r});l.dataset.peFont=a,document.head.appendChild(l)}const Nt=`
|
|
34
34
|
<div class="pe-settings">
|
|
35
35
|
<p class="pe-settings-note">How the editor looks to you - kept in this browser, for every page.</p>
|
|
36
36
|
<label class="form-label" for="pe-set-font">Font <span data-help="The lettering in the editor (not on the site). Monospace keeps every character the same width, so shortcodes and Markdown line up."></span></label>
|
|
@@ -61,20 +61,20 @@ The quick brown fox - 0O 1lI {} [] () => ==
|
|
|
61
61
|
.pe-settings-sample { white-space: pre-wrap; padding: .75rem 1rem; border-radius: var(--dm-radius-md); border: 1px solid var(--dm-border);
|
|
62
62
|
background: var(--dm-background-alt); font-family: var(--pe-font); font-size: var(--pe-size); line-height: var(--pe-line); }
|
|
63
63
|
.pe-settings-actions { display: flex; gap: .5rem; border-top: 1px solid var(--dm-border); padding-top: .75rem; }
|
|
64
|
-
</style>`;function
|
|
64
|
+
</style>`;function It(a){const r=E.slideover({title:"Editor settings",size:"sm",position:"right"}),l=X(`<div>${Nt}</div>`),s=J(a.peek()),i={font:M.observable(s.font),size:M.observable(String(s.size)),line:M.observable(String(s.line)),wrap:M.observable(s.wrap)},f=M.computed(()=>J({font:i.font.value,size:i.size.value,line:i.line.value,wrap:i.wrap.value}));i.isDefault=M.computed(()=>Et(f.value));const p=l.querySelector("#pe-set-font");for(const[v,k]of[["mono","Monospace"],["sans","Other"],["serif",null]]){const N=wt.filter(m=>m.kind===v),q=k?Object.assign(document.createElement("optgroup"),{label:k}):p.querySelector("optgroup:last-of-type");q.append(...N.map(m=>new Option(m.label,m.id))),k&&p.appendChild(q)}l.querySelector("#pe-set-size").append(...St.map(v=>new Option(`${v}px`,String(v)))),l.querySelector("#pe-set-line").append(...Mt.map(v=>new Option({1.3:"Tight",1.45:"Snug",1.6:"Normal",1.8:"Relaxed",2:"Double"}[v]||String(v),String(v))));const c=l.querySelector(".pe-settings-sample"),u=M.effect(()=>{const v=f.value;Ke(v.font);for(const[k,N]of Object.entries(qe(v)))c.style.setProperty(k,N);c.style.whiteSpace=v.wrap?"pre-wrap":"pre",c.style.overflowX=v.wrap?"":"auto",JSON.stringify(v)!==JSON.stringify(J(a.peek()))&&(a.value=v,Z("type",v))});i.reset=()=>{i.font.value=G.font,i.size.value=String(G.size),i.line.value=String(G.line),i.wrap.value=G.wrap},i.done=()=>r.close(),r.element.appendChild(l);const T=M.applyBindings(i,l),d=Be(l);return be(r,()=>{T.dispose(),d(),u?.()}),Domma.icons?.scan?.(l),r.open(),r}async function zt(a){const r=E.slideover({title:"Share preview link",size:"md",position:"right"}),l=X(`<div>${Ft}</div>`),s={expiry:M.observable("7d"),note:M.observable(""),creating:M.observable(!1),url:M.observable(""),links:M.observable([]),loaded:M.observable(!1),listError:M.observable("")},i=async()=>{try{const p=await g.pages.previewLinks.list(a);s.links.value=p.filter(c=>!c.revokedAt&&!c.expired).map(c=>({id:c.id,title:c.label||"Untitled link",meta:`Expires ${Rt(c.expiresAt)} - ${c.useCount===1?"1 view":`${c.useCount||0} views`}`})),s.listError.value=""}catch(p){s.listError.value="Could not load existing links: "+(p.message||"unknown error")}finally{s.loaded.value=!0}};s.create=async()=>{s.creating.value=!0;try{const p=await g.pages.previewLinks.create(a,s.expiry.peek(),s.note.peek().trim());s.url.value=p.url,s.note.value="",E.toast("Share link created.",{type:"success"}),await i(),l.querySelector(".pe-share-url")?.select()}catch(p){E.toast("Could not create link: "+(p.message||"unknown error"),{type:"error"})}finally{s.creating.value=!1}},s.copy=async()=>{try{await navigator.clipboard.writeText(s.url.peek()),E.toast("Link copied to clipboard.",{type:"success"})}catch{l.querySelector(".pe-share-url")?.select(),E.toast("Press Ctrl+C to copy the selected link.",{type:"info"})}},s.revoke=async p=>{if(await E.confirm("Revoke this link? Anyone holding it loses access immediately."))try{await g.pages.previewLinks.revoke(p),E.toast("Link revoked.",{type:"success"}),await i()}catch(c){E.toast("Could not revoke: "+(c.message||"unknown error"),{type:"error"})}};const f=M.applyBindings(s,l);be(r,()=>f.dispose()),r.element.appendChild(l),r.open(),await i()}function Bt(a){return new Promise(r=>{const l=E.slideover({title:"Save Named Version",size:"sm",position:"right"}),s=X(`
|
|
65
65
|
<div style="padding:1rem">
|
|
66
66
|
<label class="form-label" for="pe-version-label">Version Label</label>
|
|
67
67
|
<input id="pe-version-label" type="text" class="form-input" style="margin-bottom:.75rem"
|
|
68
68
|
placeholder="e.g. Initial design, Before restructure" data-model="label.value" data-on-keydown="key">
|
|
69
69
|
<button type="button" class="btn btn-primary" data-on-click="save" data-bind-disabled="saving.value">Save Version</button>
|
|
70
|
-
</div>`);let
|
|
71
|
-
`).map(
|
|
70
|
+
</div>`);let i=!1;const f={label:M.observable(""),saving:M.observable(!1)};f.save=async()=>{f.saving.value=!0;try{await g.versions.create(a,f.label.peek().trim()||null),E.toast("Named version saved.",{type:"success"}),i=!0,l.close()}catch(c){E.toast("Failed to save version: "+c.message,{type:"error"})}finally{f.saving.value=!1}},f.key=c=>{c.key==="Enter"&&(c.preventDefault(),f.save())};const p=M.applyBindings(f,s);be(l,()=>{p.dispose(),r(i)}),l.element.appendChild(s),l.open(),setTimeout(()=>s.querySelector("input")?.focus(),100)})}let C=null,Ue=!1;function $t(){Ue||!window.R?.use||(Ue=!0,R.use((a,r,l)=>{const s=r?.path||"",i=a?.path||"";return!(Tt.test(s)&&i!==s)||!C||C.path!==s||!C.dirty()?l():E.confirm("You have unsaved changes to this page. Leave anyway? They are kept as a draft for your next visit.").then(p=>{p?(C?.keepDraft(),l()):history.replaceState(null,"","#"+s)})}),M.subscribe("router:afterChange",({to:a}={})=>{if(C&&(a?.path||"")!==C.path){const r=C;C=null,r.dispose()}}))}function jt(a){return a.split(`
|
|
71
|
+
`).map(r=>r.trimEnd()).join(`
|
|
72
72
|
`).replace(/\n{3,}/g,`
|
|
73
73
|
|
|
74
|
-
`)}const
|
|
74
|
+
`)}const _e="editor_prefs";function j(){return S.get(_e)||{viewMode:"split",fullscreen:!1}}function Z(a,r){const l=j();l[a]=r,S.set(_e,l)}const qt=["edit","details","seo","dconfig","live","history"],We=["split","write","preview"],Vt=a=>a.replace(/<\/head>/i,"<style>body.dm-cloaked{opacity:1 !important;transition:none !important}</style></head>");function Je(a,r,l=()=>{}){let s=0;try{s=a.contentWindow.scrollY||0}catch{}a.addEventListener("load",()=>{try{a.contentWindow.scrollTo(0,s)}catch{}l()},{once:!0}),a.srcdoc=r}export const pageEditorView={templateUrl:"/admin/js/templates/page-editor.html",async onMount(a){if($t(),C){const e=C;C=null,e.dispose()}const r=window.location.hash.replace(/^#/,""),l=[],s=e=>(l.push(e),e);let i=()=>!1,f=()=>{};const p={path:r,dirty:()=>i(),keepDraft:()=>f(),dispose:()=>{l.splice(0).forEach(e=>{try{e()}catch{}})}};C=p;const c=a.get(0),u=()=>C===p&&c.isConnected,T=window.location.hash.match(/#\/pages\/edit(\/[^?]*)/),d=T?T[1]:null,v=!!d,k=E.loader(c,{type:"dots"}),[N,q,m,ge,he,Ge]=await Promise.all([g.layouts.get().catch(()=>({})),g.settings.get().catch(()=>({})),v?g.pages.get(d).catch(()=>null):null,v?g.pages.list().catch(()=>[]):[],g.projects.list().catch(()=>[]),g.pages.tags().catch(()=>[])]);if(!u()){k.destroy();return}if(k.destroy(),v&&!m){E.toast("Page not found.",{type:"error"}),R.navigate("/pages");return}const y=e=>c.querySelector(e);if(mt(y("#field-theme"),{includeDefault:!0}),await Wt(y("#field-visibility"),m?.visibility),!u())return;const Ye=_t(y("#field-layout"),N,m?.layout||"default");for(const e of he)y("#field-project").append(new Option(e.name||e.slug,e.slug));const ye=[...Array.isArray(ge)?ge:[]].sort((e,t)=>(e.title||e.urlPath).localeCompare(t.title||t.urlPath));for(const e of ye)y("#quick-switch").append(new Option(`${e.title||"Untitled"} (${e.urlPath})`,e.urlPath,!1,e.urlPath===d));const V=j(),o={urlPath:M.observable(d||""),title:M.observable(m?.title||""),description:M.observable(m?.description||""),layout:M.observable(Ye),status:M.observable(m?.status||"draft"),sortOrder:M.observable(String(m?.sortOrder??99)),showInNav:M.observable(!!m?.showInNav),sidebar:M.observable(!!m?.sidebar),breadcrumbs:M.observable(m?m.breadcrumbs!==!1:!0),bundled:M.observable(!!m?.bundled),tags:M.observable(Array.isArray(m?.tags)?m.tags:[]),category:M.observable(m?.category||""),visibility:M.observable(typeof m?.visibility=="string"&&m.visibility?m.visibility:"public"),project:M.observable(At({isEdit:v,page:m,projects:he,fromHash:Ct()||"",urlPath:d||""})),theme:M.observable(m?.theme||""),seoTitle:M.observable(m?.seo?.title||""),seoDesc:M.observable(m?.seo?.description||""),dconfig:M.observable(m?.dconfig?JSON.stringify(m.dconfig,null,2):""),css:M.observable(""),cssOpened:M.observable(!1)},n={bodyRev:M.observable(0),base:M.observable(""),saving:M.observable(!1),tab:M.observable("edit"),viewMode:M.observable(We.includes(V.viewMode)?V.viewMode:"split"),fullscreen:M.observable(!!V.fullscreen),cssMode:M.observable(!1),folded:M.observable(!1),liveStatus:M.observable("Showing unsaved changes"),liveWidth:M.observable("full"),versions:M.observable([]),histLoading:M.observable(!1),histError:M.observable(""),compare:M.observable(null)},w=y("#markdown-editor"),I=y("#css-editor");w.value=m?.content||"";const L=document.createElement("div");L.className="editor-line-numbers editor-line-numbers--foldable",w.parentElement.insertBefore(L,w);const x=bt(w,L,{onFoldChange:()=>{}});let D=!1;x.setGuard(e=>{D=e});const z=()=>x.getUnfoldedContent(),we=M.observable(J(V.type));s(M.effect(()=>{const e=we.value,t=y("#editor-body");if(t){Ke(e.font);for(const[b,h]of Object.entries(qe(e)))t.style.setProperty(b,h);t.classList.toggle("pe-nowrap",!e.wrap),w.wrap=e.wrap?"soft":"off",I.wrap=e.wrap?"soft":"off"}}));let ke=null;s(()=>{try{ke?.close()}catch{}});const O=()=>(n.bodyRev.value,{urlPath:o.urlPath.value.trim(),title:o.title.value,description:o.description.value,layout:o.layout.value,status:o.status.value,sortOrder:o.sortOrder.value,showInNav:o.showInNav.value,sidebar:o.sidebar.value,breadcrumbs:o.breadcrumbs.value,bundled:o.bundled.value,tags:o.tags.value,category:o.category.value,visibility:o.visibility.value,project:o.project.value,theme:o.theme.value,seoTitle:o.seoTitle.value,seoDesc:o.seoDesc.value,dconfig:o.dconfig.value,body:z(),css:o.cssOpened.value?o.css.value:null}),Xe=M.computed(()=>$(O())!==n.base.value),Ze=M.computed(()=>Ve({urlPath:o.urlPath.value,dconfig:o.dconfig.value})[0]?.text||""),Qe=M.computed(()=>n.versions.value.some(e=>e.checked.value)),et=M.computed(()=>n.versions.value.length>0&&n.versions.value.every(e=>e.checked.value)),tt=M.computed(()=>{const e=n.versions.value.filter(t=>t.checked.value).length;return e>0&&e<n.versions.value.length});i=()=>$(O())!==n.base.peek();const Q=e=>({title:o.title.peek().trim()||"Untitled",description:o.description.peek().trim(),layout:o.layout.peek(),status:o.status.peek(),sortOrder:parseInt(String(o.sortOrder.peek()),10)||99,showInNav:o.showInNav.peek(),sidebar:o.sidebar.peek(),...o.breadcrumbs.peek()?{}:{breadcrumbs:!1},...o.bundled.peek()?{bundled:!0}:{},tags:o.tags.peek(),category:o.category.peek().trim()||null,visibility:o.visibility.peek()||"public",project:o.project.peek()||"",seo:{title:o.seoTitle.peek().trim(),description:o.seoDesc.peek().trim()},dconfig:e,...o.theme.peek()?{theme:o.theme.peek()}:{}}),Ee=()=>{const e=o.dconfig.peek().trim();if(!e)return null;try{return JSON.parse(e)}catch{return null}},Me=()=>o.urlPath.peek().trim()||d||"/",H=y("#markdown-preview");let Se="";g.settings.getCustomCss().then(({css:e})=>{Se=e||""}).catch(()=>{});const Ce=()=>{const e=H?.contentDocument;if(!e?.head)return;const t=o.cssOpened.peek()?o.css.peek():"";if(!t)return;let b=e.getElementById("preview-custom-css");b||(b=e.createElement("style"),b.id="preview-custom-css",e.head.appendChild(b)),b.textContent=t};let ee=null;const K=()=>{clearTimeout(ee),ee=setTimeout(async()=>{if(!(!H||n.viewMode.peek()==="write"))try{const{html:e}=await g.pages.previewFull(Me(),Q(Ee()),z());u()&&Je(H,Vt(e),Ce)}catch(e){H.srcdoc='<!doctype html><meta charset="utf-8"><body style="font:14px system-ui;padding:1rem;color:#b91c1c;">Preview failed: '+String(e?.message||"unknown error").replace(/[<&]/g,t=>t==="<"?"<":"&")+"</body>"}},500)},Te=y("#live-preview-frame");let te=!0,ae=null,se=!1;const oe=async()=>{if(!(se||!Te)){se=!0,n.liveStatus.value="Rendering\u2026";try{const{html:e}=await g.pages.previewFull(Me(),Q(Ee()),z());if(!u())return;Je(Te,e),te=!1,n.liveStatus.value="Showing unsaved changes"}catch(e){n.liveStatus.value="Preview failed - "+(e?.message||"unknown error")}finally{se=!1}}},xe=()=>{te=!0,n.tab.peek()==="live"&&(clearTimeout(ae),ae=setTimeout(oe,600))};s(()=>{clearTimeout(ee),clearTimeout(ae)});const ne=dt(a.find("#markdown-editor"),a.find("#editor-toolbar"),{spacerDefault:q?.layoutOptions?.spacerSize??40});vt(w);const re=c.querySelector(".editor-toolbar-right");re.querySelectorAll(".editor-view-btn[data-mode]").forEach(e=>{const t=e.getAttribute("data-mode");e.classList.remove("active"),e.setAttribute("data-bind-class",`viewMode.value === '${t}' && 'active'`),e.setAttribute("data-on-click",`setMode('${t}')`)}),y("#fullscreen-btn")?.setAttribute("data-on-click","toggleFullscreen");const at=X(`
|
|
75
75
|
<span class="pe-toolbar-extras" style="display:contents">
|
|
76
76
|
<button type="button" class="editor-view-btn" data-tip="Edit Custom CSS" data-on-click="toggleCss"
|
|
77
|
-
data-bind-class="cssMode.value && 'active'"><span
|
|
77
|
+
data-bind-class="cssMode.value && 'active'"><span>CSS</span></button>
|
|
78
78
|
<button type="button" class="editor-view-btn" data-tip="Format Markdown" data-on-click="formatMarkdown"><span data-icon="code"></span></button>
|
|
79
79
|
<button type="button" class="editor-view-btn" data-tip="Fold / unfold all shortcodes" data-on-click="toggleFold"
|
|
80
80
|
style="font-size:9px;letter-spacing:-1px;" data-bind-class="folded.value && 'active'">
|
|
@@ -83,13 +83,5 @@ The quick brown fox - 0O 1lI {} [] () => ==
|
|
|
83
83
|
<span class="pe-fold-icon" hidden data-bind-hidden="!folded.value"><span data-icon="chevrons-right" data-icon-size="10"></span></span>
|
|
84
84
|
</button>
|
|
85
85
|
<span class="editor-toolbar-sep"></span>
|
|
86
|
-
</span>`);re.prepend(at);const Pe=y("#field-tags"),
|
|
87
|
-
`).map((
|
|
88
|
-
<div>
|
|
89
|
-
<p class="text-muted p-3" hidden data-bind-hidden="images.length">No images uploaded yet.</p>
|
|
90
|
-
<div class="media-picker-grid" data-each="images key=url">
|
|
91
|
-
<div class="media-picker-item" data-on-click="$root.pick($data)">
|
|
92
|
-
<img data-bind-src="url" data-bind-alt="name"><span data-bind-text="name"></span>
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
|
95
|
-
</div>`),a=E.slideover({title:"Insert Image",size:"lg",position:"right"}),l=M.applyBindings({images:i,pick:p=>{pt(s,``),a.close(),s.dispatchEvent(new Event("input",{bubbles:!0}))}},r);G(a,()=>l.dispose()),a.element.appendChild(r),a.open()}function _t(s,i,r){const a=Object.entries(i||{});return s?(s.replaceChildren(...a.map(([l,p])=>new Option(p?.label||l,l))),a.some(([l])=>l===r)?r:a[0]?.[0]||r):r}async function Ut(s,i){if(!s)return;let r=[];try{const u=await g.get("/collections/roles/entries?limit=100");r=Array.isArray(u)?u:u?.entries||[]}catch{}const a=r.map(u=>({name:u.data?.name,label:u.data?.label||u.data?.name,level:u.data?.level??99})).filter(u=>u.name&&u.level!==0).sort((u,T)=>T.level-u.level),l=(u,T)=>Object.assign(document.createElement("option"),{value:u,textContent:T}),p=()=>{typeof i=="string"&&i&&![...s.options].some(u=>u.value===i)&&s.append(l(i,`${i} (custom)`))};if(!a.length)return p();const v=document.createElement("optgroup");v.label="Role and above",a.forEach(u=>v.append(l(u.name,`${u.label} and above`)));const c=document.createElement("optgroup");c.label="Role only",a.forEach(u=>c.append(l(`=${u.name}`,`${u.label} only`))),s.replaceChildren(l("public","Public - everyone"),v,c,l("private","Private - super-admin only")),p()}
|
|
86
|
+
</span>`);re.prepend(at);const Pe=y("#field-tags"),ie=Pe?E.pillbox(Pe,{data:Ge,value:o.tags.peek(),creatable:!0,searchable:!0,placeholder:"Add tag\u2026",onChange:()=>{o.tags.value=ie?[...ie.getValue()]:[]}}):null;let le=!1,ce=null;const U=async()=>{le=!0,n.histLoading.value=!0,n.histError.value="";try{const e=(await g.versions.list(d)).versions||[];if(!u())return;n.versions.value=e.map(t=>({...t,when:Y(t.createdAt),author:t.author||"",label:t.label||"",checked:M.observable(!1)}))}catch(e){n.histError.value="Failed to load versions: "+e.message}finally{n.histLoading.value=!1}},de=e=>n.versions.peek().find(t=>t.filename===e),pe=async e=>{try{const t=await g.versions.get(d,e.filename);ce=e.filename,n.compare.value={label:He(e),old:t.content,current:z()}}catch(t){E.toast("Failed to load version: "+t.message,{type:"error"})}},Le=async e=>{if(!(!e||!await E.confirm("Restore this version? The current page content will be overwritten (a pre-restore snapshot will be saved automatically).")))try{await g.versions.restore(d,e),E.toast("Page restored. Reloading editor\u2026",{type:"success"}),R.navigate("/pages"),setTimeout(()=>R.navigate(`/pages/edit${d}`),300)}catch(t){E.toast("Restore failed: "+t.message,{type:"error"})}},st=async e=>{if(await E.confirm("Delete this version? This cannot be undone."))try{await g.versions.delete(d,e.filename),E.toast("Version deleted.",{type:"success"}),await U()}catch(t){E.toast("Failed to delete: "+t.message,{type:"error"})}},Ae=()=>{n.bodyRev.value=n.bodyRev.peek()+1},De=()=>{o.cssOpened.peek()||(o.css.value=Se,o.cssOpened.value=!0,ct(I))},Oe=e=>{for(const t of["urlPath","title","description","layout","status","sortOrder","category","visibility","project","theme","seoTitle","seoDesc","dconfig"])o[t].value=e[t]==null?"":String(e[t]);for(const t of["showInNav","sidebar","breadcrumbs","bundled"])o[t].value=!!e[t];o.tags.value=Array.isArray(e.tags)?e.tags:[],ie?.setValue(o.tags.peek()),x.unfoldAll(),D=!0,w.value=e.body==null?"":String(e.body),D=!1,x.refresh(),e.css!=null&&(De(),o.css.value=String(e.css)),Ae()};n.base.value=$(O());const _=Lt(d||"");f=()=>{if(i())try{S.set(_,Dt(O(),n.base.peek()))}catch{}};const ue=()=>{try{S.remove?S.remove(_):S.set(_,null)}catch{}},Re=e=>{i()&&(f(),e.preventDefault(),e.returnValue="")};window.addEventListener("beforeunload",Re),s(()=>window.removeEventListener("beforeunload",Re));const ve=async()=>{if(n.saving.peek())return;const e=O(),t=Ve(e);if(t.length){E.toast(t[0].text,{type:"warning"}),c.querySelectorAll("#editor-meta-tabs .tab-item")[qt.indexOf(t[0].field==="dconfig"?"dconfig":"details")]?.click();return}const b=(e.dconfig||"").trim(),h=Q(b?JSON.parse(b):null),P=o.cssOpened.peek();n.saving.value=!0;try{if(v){const A={frontmatter:h,body:e.body};e.urlPath!==d&&(A.newUrlPath=e.urlPath),await g.pages.update(d,A)}else await g.pages.create({urlPath:e.urlPath,frontmatter:h,body:e.body});P&&await g.settings.saveCustomCss(o.css.peek()),E.toast(P?"Page and CSS saved.":"Page saved.",{type:"success"}),ue(),n.base.value=$(O()),v?e.urlPath!==d&&R.navigate(`/pages/edit${e.urlPath}`):R.navigate("/pages")}catch(A){E.toast(`Save failed: ${A.message||"Unknown error"}`,{type:"error"})}finally{n.saving.value=!1}},Fe=c.querySelector(".dm-plugin-body")||c,ot={...o,...n,dirty:Xe,problem:Ze,anySelected:Qe,allSelected:et,someSelected:tt,isEdit:v,savedPath:d||"",hasPages:ye.length>0},nt={save:()=>ve(),discard:async()=>{!i()||!await E.confirm("Discard the changes you have not saved?")||(Oe(JSON.parse(n.base.peek())),ue())},switchPage:e=>{const t=e?.target?.value;t&&R.navigate("/pages/edit"+t)},showTab:e=>{n.tab.value=e,e==="live"&&te&&oe(),e==="history"&&v&&!le&&U()},setMode:e=>{n.cssMode.peek()&&(n.cssMode.value=!1),n.viewMode.value=e,Z("viewMode",e),e!=="write"&&K()},toggleFullscreen:()=>{n.fullscreen.value=!n.fullscreen.peek(),Z("fullscreen",n.fullscreen.peek())},toggleCss:()=>{n.cssMode.peek()?(n.cssMode.value=!1,n.viewMode.value=We.includes(j().viewMode)?j().viewMode:"split",x.refresh()):(De(),n.cssMode.value=!0,n.viewMode.value="split")},formatMarkdown:()=>{const e=w.selectionStart,t=jt(z());x.unfoldAll(),D=!0,w.value=t,D=!1,w.selectionStart=w.selectionEnd=Math.min(e,t.length),w.dispatchEvent(new Event("input")),x.refresh(),E.toast("Markdown formatted.",{type:"success"})},toggleFold:()=>{n.folded.peek()?x.unfoldAll():x.foldAll(),n.folded.value=!n.folded.peek()},setWidth:e=>{n.liveWidth.value=e;const t=y("#live-preview-stage");t&&(t.scrollTop=0)},refreshLive:()=>oe(),share:async()=>{if(!v){E.toast("Save the page first - a share link needs a page to point at.",{type:"warning"});return}await zt(d)},toggleAll:e=>{const t=!!e?.target?.checked;n.versions.peek().forEach(b=>{b.checked.value=t})},deleteSelected:async()=>{const e=n.versions.peek().filter(b=>b.checked.peek()).map(b=>b.filename),t=e.length;if(!(!t||!await E.confirm(`Delete ${t} version${t>1?"s":""}? This cannot be undone.`)))try{await g.versions.bulkDelete(d,e),E.toast(`${t} version${t>1?"s":""} deleted.`,{type:"success"}),await U()}catch(b){E.toast("Delete failed: "+b.message,{type:"error"})}},saveNamed:async()=>{await Bt(d)&&u()&&(n.tab.peek()==="history"?await U():le=!1)},closeCompare:()=>{n.compare.value=null,ce=null},restoreCompared:()=>Le(ce)};re.querySelectorAll("[data-tip]").forEach(e=>E.tooltip(e,{content:e.getAttribute("data-tip"),position:"top"}));const rt=M.applyBindings(ot,Fe,{methods:nt});s(()=>rt.dispose()),E.tabs(y("#editor-meta-tabs"));let fe=null;s(()=>clearTimeout(fe)),w.addEventListener("input",()=>{x.refresh(),L.scrollTop=w.scrollTop,!D&&(clearTimeout(fe),fe=setTimeout(Ae,120),K(),xe())}),w.addEventListener("scroll",()=>{L.scrollTop=w.scrollTop}),I.addEventListener("scroll",()=>{L.scrollTop=I.scrollTop});let Ne=!0;s(M.effect(()=>{for(const e of Object.keys(o))e!=="css"&&e!=="cssOpened"&&o[e].value;if(n.bodyRev.value,Ne){Ne=!1,K();return}K(),xe()}));let me=null;if(s(()=>clearTimeout(me)),s(M.effect(()=>{const e=o.css.value;n.cssMode.value&&(Ht(L,e,I),clearTimeout(me),me=setTimeout(Ce,400))})),v){const e=y(".pe-version-list"),t=E.contextMenu(e,{cursor:"glyph",match:"tr[data-file]",inherit:!1,density:"compact",items:b=>{const h=de(b.dataset.file);return h?[{header:He(h)},{label:"Compare with the editor",icon:"columns",action:()=>pe(h)},{label:"Restore this version\u2026",icon:"rotate-ccw",action:()=>Le(h.filename)},{type:"divider"},{label:"Delete\u2026",icon:"trash",danger:!0,action:()=>st(h)}]:[]}});s(()=>t?.destroy?.()),e.addEventListener("click",b=>{const h=b.target.closest("tr[data-file]");if(!h||b.target.matches("input"))return;const P=b.target.closest(".pe-kebab");if(P){$e(P);return}const A=de(h.dataset.file);A&&pe(A)}),e.addEventListener("keydown",b=>{const h=b.target.closest("tr[data-file]");if(h){if(b.key==="F10"&&b.shiftKey)b.preventDefault(),$e(h);else if(b.key==="Enter"&&b.target===h){const P=de(h.dataset.file);P&&pe(P)}}})}Kt(y("#editor-body"),y("#editor-divider"),s),ft({image:e=>(n.cssMode.value=!1,Ut(e)),scribe:e=>gt(e),card:e=>it.open(e,{onMediaBrowse:()=>g.media.list().catch(()=>[])}),timeline:e=>lt.open(e,{onPreview:async t=>{try{return await g.pages.preview(t)}catch{return null}},onListCollections:()=>g.collections.list().catch(()=>[]),onGetCollection:t=>g.collections.get(t).catch(()=>null)})}),ne.onEffects(e=>ut.open(e)),ne.onHelp(()=>je()),ne.onTutorial(e=>ht(e));const Ie=e=>{(e.ctrlKey||e.metaKey)&&!e.shiftKey&&!e.altKey&&e.key.toLowerCase()==="s"&&u()&&(e.preventDefault(),ve())};document.addEventListener("keydown",Ie),s(()=>document.removeEventListener("keydown",Ie));const W=c.querySelector(".dm-plugin-banner-name");if(W){const e=W.lastChild,t=xt(v,m?.title,d);e&&e.nodeType===3&&W.querySelector(".dm-plugin-banner-sep")?e.textContent=t:W.textContent=`Pages \u203A ${t}`}B(a,{id:"page-editor-back",icon:"arrow-left",title:"Back to Pages",onClick:()=>R.navigate("/pages")}),B(a,{id:"page-editor-help",icon:"help-circle",title:"Editor reference",onClick:()=>je()}),v&&B(a,{id:"page-editor-view",icon:"external-link",title:"View on the site",onClick:()=>window.open(o.urlPath.peek()||d,"_blank","noopener")}),B(a,{id:"page-editor-save",icon:"save",title:"Save (Ctrl+S)",onClick:()=>ve()}),B(a,{id:"page-editor-settings",icon:"settings",title:"Editor settings - font, size, spacing",onClick:()=>{ke=It(we)}}),s(Be(Fe,{position:"bottom"})),Domma.icons.scan();let ze=null;try{ze=S.get(_)}catch{}const F=Ot(ze);if(F&&(ue(),$(F.state)!==n.base.peek())){const e=F.at?` (${Y(F.at)})`:"",t=Pt(F,n.base.peek())?" The saved page has changed since - restoring puts your version back over it (the saved one stays in History).":"";await E.confirm(`You left unsaved changes to this page${e}. Restore them?${t}`)&&u()&&Oe(F.state)}}};function Ht(a,r,l){a.replaceChildren(...String(r).split(`
|
|
87
|
+
`).map((s,i)=>{const f=document.createElement("span");f.className="editor-line-number-row";const p=document.createElement("span");p.className="fold-toggle fold-toggle--empty";const c=document.createElement("span");return c.className="editor-line-num",c.textContent=String(i+1),f.append(p,c),f})),a.scrollTop=l.scrollTop}function Kt(a,r,l){if(!a||!r)return;const s=15,i=85,f=d=>Math.min(i,Math.max(s,d));let p=f(parseFloat(j().splitRatio)||50);const c=d=>{a.style.setProperty("--dm-editor-split",p+"%"),r.setAttribute("aria-valuenow",String(Math.round(p))),d&&Z("splitRatio",p)};c(!1);const u=d=>{const v=a.getBoundingClientRect();v.width&&(p=f((d.clientX-v.left)/v.width*100)),c(!1)},T=()=>{document.removeEventListener("pointermove",u),document.removeEventListener("pointerup",T),a.classList.remove("is-resizing"),r.classList.remove("is-dragging"),c(!0)};l(T),r.addEventListener("pointerdown",d=>{window.matchMedia("(max-width: 768px)").matches||(d.preventDefault(),a.classList.add("is-resizing"),r.classList.add("is-dragging"),document.addEventListener("pointermove",u),document.addEventListener("pointerup",T))}),r.addEventListener("dblclick",()=>{p=50,c(!0)}),r.addEventListener("keydown",d=>{const v=d.shiftKey?10:2;let k=p;if(d.key==="ArrowLeft")k=p-v;else if(d.key==="ArrowRight")k=p+v;else if(d.key==="Home")k=s;else if(d.key==="End")k=i;else if(d.key==="Enter"||d.key===" ")k=50;else return;d.preventDefault(),p=f(k),c(!0)})}async function Ut(a){const r=a.selectionStart,l=a.selectionEnd,s=await yt({title:"Upload or insert an image"});if(!s||!a.isConnected)return;let i=s.split("/").pop().split("?")[0];try{i=decodeURIComponent(i)}catch{}const f=i.replace(/[\\[\]]/g,"\\$&"),p=s.replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/ /g,"%20");a.setSelectionRange(r,l),pt(a,``),a.dispatchEvent(new Event("input",{bubbles:!0}))}function _t(a,r,l){const s=Object.entries(r||{});return a?(a.replaceChildren(...s.map(([i,f])=>new Option(f?.label||i,i))),s.some(([i])=>i===l)?l:s[0]?.[0]||l):l}async function Wt(a,r){if(!a)return;let l=[];try{const u=await g.get("/collections/roles/entries?limit=100");l=Array.isArray(u)?u:u?.entries||[]}catch{}const s=l.map(u=>({name:u.data?.name,label:u.data?.label||u.data?.name,level:u.data?.level??99})).filter(u=>u.name&&u.level!==0).sort((u,T)=>T.level-u.level),i=(u,T)=>Object.assign(document.createElement("option"),{value:u,textContent:T}),f=()=>{typeof r=="string"&&r&&![...a.options].some(u=>u.value===r)&&a.append(i(r,`${r} (custom)`))};if(!s.length)return f();const p=document.createElement("optgroup");p.label="Role and above",s.forEach(u=>p.append(i(u.name,`${u.label} and above`)));const c=document.createElement("optgroup");c.label="Role only",s.forEach(u=>c.append(i(`=${u.name}`,`${u.label} only`))),a.replaceChildren(i("public","Public - everyone"),p,c,i("private","Private - super-admin only")),f()}
|
package/package.json
CHANGED
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-xl{min-height:75vh;box-sizing:border-box;display:flex;align-items:center;justify-content:center}.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}:where(.page-footer) .footer-inner--columns{display:block;padding:1.5rem 1.5rem 0}:where(.page-footer) .cms-footer-top{display:grid;grid-template-columns:minmax(12rem,1.4fr) 3fr;gap:2.5rem;padding-bottom:2rem}:where(.page-footer) .cms-footer-brand{display:flex;flex-direction:column;gap:.75rem;min-width:0}:where(.page-footer) .cms-footer-brand-name{display:inline-flex;align-items:center;gap:.5rem;font-size:1.15rem;font-weight:700;color:var(--dm-text, inherit);text-decoration:none}:where(.page-footer) .cms-footer-brand-logo{height:1.75rem;width:auto}:where(.page-footer) .cms-footer-brand-icon{width:1.25rem;height:1.25rem}:where(.page-footer) .cms-footer-blurb{margin:0;max-width:22rem;font-size:.9rem;line-height:1.55;color:var(--dm-text-secondary, inherit)}:where(.page-footer) .cms-footer-brand .footer-social{margin-left:-.35rem}:where(.page-footer) .footer-nav--columns{display:block}:where(.page-footer) .footer-nav--columns>ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:1.5rem 2rem;justify-content:stretch;align-items:start}:where(.page-footer) .cms-footer-col{display:flex;flex-direction:column;gap:.6rem}:where(.page-footer) .cms-footer-col-title{font-size:.78rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--dm-text, inherit)}:where(.page-footer) a.cms-footer-col-title{text-decoration:none}:where(.page-footer) .cms-footer-col>ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45rem}:where(.page-footer) .cms-footer-bottom{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.5rem;padding:1rem 0 1.25rem;border-top:1px solid var(--dm-border, rgba(255,255,255,.08));font-size:.85rem}:where(.page-footer) .cms-footer-bottom .cms-footer-copyright{margin:0 auto 0 0}:where(.page-footer) .cms-footer-bottom .footer-nav ul{justify-content:flex-start}:where(.page-footer) .cms-footer-bottom .footer-nav a{font-size:.85rem}:where(.page-footer) .cms-footer-bottom .footer-motion-check{margin-top:0}@media(max-width:720px){:where(.page-footer) .cms-footer-top{grid-template-columns:1fr;gap:1.75rem}:where(.page-footer) .footer-nav--columns>ul{grid-template-columns:repeat(2,minmax(0,1fr))}:where(.page-footer) .cms-footer-bottom .cms-footer-copyright{margin-right:0;flex-basis:100%}}.dm-scribe-controls{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.5rem}
|
|
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}.card-header.card-icon-sized [data-icon],.card-header.card-icon-sized .card-icon{width:var(--dm-card-icon-size)!important;height:var(--dm-card-icon-size)!important;font-size:var(--dm-card-icon-size)!important}.card-header.card-icon-align-left,.card-header.card-icon-align-left .card-avatar-wrap{text-align:left}.card-header.card-icon-align-center,.card-header.card-icon-align-center .card-avatar-wrap{text-align:center}.card-header.card-icon-align-right,.card-header.card-icon-align-right .card-avatar-wrap{text-align:right}.card-header-icon-inline.card-icon-align-left{justify-content:flex-start}.card-header-icon-inline.card-icon-align-center{justify-content:center}.card-header-icon-inline.card-icon-align-right{justify-content:flex-end}.card-header-icon-stacked.card-icon-align-left{align-items:flex-start}.card-header-icon-stacked.card-icon-align-center{align-items:center}.card-header-icon-stacked.card-icon-align-right{align-items:flex-end}.card-header-icon-stacked[class*=card-icon-align-] .card-avatar-wrap{align-self:stretch}.card-header-icon-stacked[class*=card-icon-align-] [data-icon]{display:block}.card-header-icon-stacked.card-icon-align-left [data-icon]{margin-left:0;margin-right:auto}.card-header-icon-stacked.card-icon-align-center [data-icon]{margin-left:auto;margin-right:auto}.card-header-icon-stacked.card-icon-align-right [data-icon]{margin-left:auto;margin-right:0}.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-xl{min-height:75vh;box-sizing:border-box;display:flex;align-items:center;justify-content:center}.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}:where(.page-footer) .footer-inner--columns{display:block;padding:1.5rem 1.5rem 0}:where(.page-footer) .cms-footer-top{display:grid;grid-template-columns:minmax(12rem,1.4fr) 3fr;gap:2.5rem;padding-bottom:2rem}:where(.page-footer) .cms-footer-brand{display:flex;flex-direction:column;gap:.75rem;min-width:0}:where(.page-footer) .cms-footer-brand-name{display:inline-flex;align-items:center;gap:.5rem;font-size:1.15rem;font-weight:700;color:var(--dm-text, inherit);text-decoration:none}:where(.page-footer) .cms-footer-brand-logo{height:1.75rem;width:auto}:where(.page-footer) .cms-footer-brand-icon{width:1.25rem;height:1.25rem}:where(.page-footer) .cms-footer-blurb{margin:0;max-width:22rem;font-size:.9rem;line-height:1.55;color:var(--dm-text-secondary, inherit)}:where(.page-footer) .cms-footer-brand .footer-social{margin-left:-.35rem}:where(.page-footer) .footer-nav--columns{display:block}:where(.page-footer) .footer-nav--columns>ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(8rem,1fr));gap:1.5rem 2rem;justify-content:stretch;align-items:start}:where(.page-footer) .cms-footer-col{display:flex;flex-direction:column;gap:.6rem}:where(.page-footer) .cms-footer-col-title{font-size:.78rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--dm-text, inherit)}:where(.page-footer) a.cms-footer-col-title{text-decoration:none}:where(.page-footer) .cms-footer-col>ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45rem}:where(.page-footer) .cms-footer-bottom{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.5rem;padding:1rem 0 1.25rem;border-top:1px solid var(--dm-border, rgba(255,255,255,.08));font-size:.85rem}:where(.page-footer) .cms-footer-bottom .cms-footer-copyright{margin:0 auto 0 0}:where(.page-footer) .cms-footer-bottom .footer-nav ul{justify-content:flex-start}:where(.page-footer) .cms-footer-bottom .footer-nav a{font-size:.85rem}:where(.page-footer) .cms-footer-bottom .footer-motion-check{margin-top:0}@media(max-width:720px){:where(.page-footer) .cms-footer-top{grid-template-columns:1fr;gap:1.75rem}:where(.page-footer) .footer-nav--columns>ul{grid-template-columns:repeat(2,minmax(0,1fr))}:where(.page-footer) .cms-footer-bottom .cms-footer-copyright{margin-right:0;flex-basis:100%}}.dm-scribe-controls{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.5rem}
|
|
@@ -2320,6 +2320,35 @@ function tagColorStyle(i) {
|
|
|
2320
2320
|
return p[i % p.length];
|
|
2321
2321
|
}
|
|
2322
2322
|
|
|
2323
|
+
/** Named icon sizes for `[card icon-size]`; anything else must be an explicit length. */
|
|
2324
|
+
const CARD_ICON_SIZES = {xs: '.875rem', sm: '1rem', md: '1.5rem', lg: '2.5rem', xl: '3.5rem', '2xl': '5rem'};
|
|
2325
|
+
|
|
2326
|
+
/**
|
|
2327
|
+
* Header classes and style for a card's icon options:
|
|
2328
|
+
* icon-size - xs|sm|md|lg|xl|2xl, or an explicit length: `48`/`48px`, `3rem`, `2em`
|
|
2329
|
+
* icon-align - left|center|right (centre accepted): aligns the icon and title together
|
|
2330
|
+
* Unknown values are dropped, so the layout's own default applies.
|
|
2331
|
+
*
|
|
2332
|
+
* @param {object} attrs
|
|
2333
|
+
* @returns {{cls: string, style: string}} cls starts with a space when set; style is a full ` style="..."` or ''
|
|
2334
|
+
*/
|
|
2335
|
+
function cardIconHeaderAttrs(attrs) {
|
|
2336
|
+
const cls = [];
|
|
2337
|
+
let style = '';
|
|
2338
|
+
const raw = typeof attrs['icon-size'] === 'string' ? attrs['icon-size'].trim().toLowerCase() : '';
|
|
2339
|
+
let size = CARD_ICON_SIZES[raw] || '';
|
|
2340
|
+
const m = !size && raw.match(/^(\d{1,3}(?:\.\d+)?)(px|rem|em)?$/);
|
|
2341
|
+
if (m && parseFloat(m[1]) > 0) size = `${m[1]}${m[2] || 'px'}`;
|
|
2342
|
+
if (size) {
|
|
2343
|
+
cls.push('card-icon-sized');
|
|
2344
|
+
style = ` style="--dm-card-icon-size:${size}"`;
|
|
2345
|
+
}
|
|
2346
|
+
const align = typeof attrs['icon-align'] === 'string' ? attrs['icon-align'].trim().toLowerCase() : '';
|
|
2347
|
+
const alignKey = {left: 'left', center: 'center', centre: 'center', right: 'right'}[align];
|
|
2348
|
+
if (alignKey) cls.push(`card-icon-align-${alignKey}`);
|
|
2349
|
+
return {cls: cls.length ? ` ${cls.join(' ')}` : '', style};
|
|
2350
|
+
}
|
|
2351
|
+
|
|
2323
2352
|
// ---------------------------------------------------------------------------
|
|
2324
2353
|
// Card layout renderers registry (populated by layout-specific tasks)
|
|
2325
2354
|
// ---------------------------------------------------------------------------
|
|
@@ -2361,8 +2390,9 @@ LAYOUT_RENDERERS['icon-top'] = (attrs, body) => {
|
|
|
2361
2390
|
const iconHtml = icon ? `<span data-icon="${escapeAttr(icon)}" class="card-icon"></span>` : '';
|
|
2362
2391
|
const subHtml = subtitle ? `<div class="card-subtitle">${escapeAttr(subtitle)}</div>` : '';
|
|
2363
2392
|
const bodyHtml = marked.parse(processGridBlocks(processInlineShortcodes(body.trim())));
|
|
2393
|
+
const ih = cardIconHeaderAttrs(attrs);
|
|
2364
2394
|
return `${cardRoot(attrs)}
|
|
2365
|
-
<div class="card-header card-header-icon-stacked">
|
|
2395
|
+
<div class="card-header card-header-icon-stacked${ih.cls}"${ih.style}>
|
|
2366
2396
|
<div class="card-avatar-wrap">${iconHtml}<div class="card-title">${escapeAttr(title)}</div>${subHtml}</div>
|
|
2367
2397
|
</div>
|
|
2368
2398
|
<div class="card-body">${bodyHtml}</div>${cardFooterAttr(attrs)}</div>\n`;
|
|
@@ -2375,8 +2405,9 @@ LAYOUT_RENDERERS['icon-inline'] = (attrs, body) => {
|
|
|
2375
2405
|
const iconHtml = icon ? `<span data-icon="${escapeAttr(icon)}"></span>` : '';
|
|
2376
2406
|
const subHtml = subtitle ? `<div class="card-subtitle">${escapeAttr(subtitle)}</div>` : '';
|
|
2377
2407
|
const bodyHtml = marked.parse(processGridBlocks(processInlineShortcodes(body.trim())));
|
|
2408
|
+
const ih = cardIconHeaderAttrs(attrs);
|
|
2378
2409
|
return `${cardRoot(attrs)}
|
|
2379
|
-
<div class="card-header card-header-icon-inline">
|
|
2410
|
+
<div class="card-header card-header-icon-inline${ih.cls}"${ih.style}>
|
|
2380
2411
|
${iconHtml}<div class="card-header-content"><div class="card-title">${escapeAttr(title)}</div>${subHtml}</div>
|
|
2381
2412
|
</div>
|
|
2382
2413
|
<div class="card-body">${bodyHtml}</div>${cardFooterAttr(attrs)}</div>\n`;
|
|
@@ -2772,24 +2803,25 @@ function renderLegacyCard(attrs, body, markedInstance, escAttr) {
|
|
|
2772
2803
|
if (headerContent !== null) {
|
|
2773
2804
|
headerHtml = `<div class="card-header">${markedInstance.parse(headerContent)}</div>`;
|
|
2774
2805
|
} else if (title || icon) {
|
|
2806
|
+
const ih = cardIconHeaderAttrs(attrs);
|
|
2775
2807
|
let inner = '';
|
|
2776
2808
|
if (icon && iconLayout === 'stacked') {
|
|
2777
2809
|
// Stacked: icon centred above title, all centred
|
|
2778
2810
|
const subtitleHtml = subtitle ? `<div class="card-subtitle">${subtitle}</div>` : '';
|
|
2779
2811
|
inner = `<span data-icon="${escAttr(icon)}"></span>` +
|
|
2780
2812
|
`<div class="card-title">${title}</div>${subtitleHtml}`;
|
|
2781
|
-
headerHtml = `<div class="card-header card-header-icon-stacked">${inner}</div>`;
|
|
2813
|
+
headerHtml = `<div class="card-header card-header-icon-stacked${ih.cls}"${ih.style}>${inner}</div>`;
|
|
2782
2814
|
} else if (icon && title) {
|
|
2783
2815
|
// Inline: icon left, title to its right in a flex row
|
|
2784
2816
|
const subtitleHtml = subtitle ? `<div class="card-subtitle">${subtitle}</div>` : '';
|
|
2785
2817
|
inner = `<span data-icon="${escAttr(icon)}"></span>` +
|
|
2786
2818
|
`<div class="card-header-content"><div class="card-title">${title}</div>${subtitleHtml}</div>`;
|
|
2787
|
-
headerHtml = `<div class="card-header card-header-icon-inline">${inner}</div>`;
|
|
2819
|
+
headerHtml = `<div class="card-header card-header-icon-inline${ih.cls}"${ih.style}>${inner}</div>`;
|
|
2788
2820
|
} else {
|
|
2789
2821
|
// Title only (no icon)
|
|
2790
2822
|
inner = `<div class="card-title">${title}</div>`;
|
|
2791
2823
|
if (subtitle) inner += `<div class="card-subtitle">${subtitle}</div>`;
|
|
2792
|
-
headerHtml = `<div class="card-header">${inner}</div>`;
|
|
2824
|
+
headerHtml = `<div class="card-header${ih.cls}">${inner}</div>`;
|
|
2793
2825
|
}
|
|
2794
2826
|
}
|
|
2795
2827
|
|
|
@@ -2875,7 +2907,7 @@ function processBoxBlocks(markdown) {
|
|
|
2875
2907
|
/\[box([^\]]*)\]([\s\S]*?)\[\/box\]/gi,
|
|
2876
2908
|
(_, attrStr, body) => {
|
|
2877
2909
|
const attrs = parseShortcodeAttrs(attrStr);
|
|
2878
|
-
for (const k of ['title', 'subtitle', 'icon', 'icon-layout', 'image', 'layout']) delete attrs[k];
|
|
2910
|
+
for (const k of ['title', 'subtitle', 'icon', 'icon-layout', 'icon-size', 'icon-align', 'image', 'layout']) delete attrs[k];
|
|
2879
2911
|
if (!('shadow' in attrs)) attrs.shadow = 'none';
|
|
2880
2912
|
if (!('rounded' in attrs)) attrs.rounded = 'xs';
|
|
2881
2913
|
const tone = boxTone(attrs.color ?? attrs.colour);
|
|
@@ -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=20261012-
|
|
28
|
+
<link rel="stylesheet" href="/public/css/site.css?v=20261012-card-icon">
|
|
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. -->
|