@vertebr/admin 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertebr/admin",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "Schema-driven admin control plane — wire resources once, let owners run the app.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -334,4 +334,4 @@ ${K.slice(0,8).join(`
334
334
  ${Fe.slice(0,8).join(`
335
335
  `)}`)}finally{fe(null)}},[m,g]),zr=E.useCallback((K,re)=>{const we=r[K];if(!we||re.length===0||!m)return;if(kM(we)||SM(we)){ue({actionId:K,rowIds:re});return}const Fe=re.length===1?"this person":`${re.length} people`;window.confirm(`${we.label} for ${Fe}?`)&&xr(K,re)},[r,m,xr]),Fn=E.useCallback(async(K,re)=>{if(S){fe(K);try{const we=await S(K,re);await g?.(),we&&typeof we=="object"&&"message"in we&&typeof we.message=="string"?window.alert(we.message):we&&typeof we=="object"&&"result"in we&&we.result&&typeof we.result=="object"&&"message"in we.result&&typeof we.result.message=="string"&&window.alert(we.result.message)}catch(we){window.alert(we instanceof Error?we.message:"Action failed")}finally{fe(null)}}},[S,g]),ge=E.useCallback(K=>{const re=x[K];if(!re||!S)return;if(SM(re)){V(K);return}const we=re.confirm?`${re.label}?
336
336
 
337
- ${re.confirm}`:`${re.label}?`;window.confirm(we)&&Fn(K)},[x,S,Fn]);E.useEffect(()=>{Re(TM(l,t))},[l]),E.useEffect(()=>{bte(l,Ae)},[l,Ae]);const Ne=E.useCallback(()=>{const K=Y.current;if(!K){ve({overflow:!1,canLeft:!1,canRight:!1});return}const re=K.scrollWidth>K.clientWidth+2;ve({overflow:re,canLeft:re&&K.scrollLeft>2,canRight:re&&K.scrollLeft+K.clientWidth<K.scrollWidth-2})},[]);E.useEffect(()=>{const K=Y.current;if(!K)return;Ne();const re=()=>Ne();K.addEventListener("scroll",re,{passive:!0});const we=new ResizeObserver(Ne);we.observe(K);const Fe=K.querySelector("table");return Fe&&we.observe(Fe),()=>{K.removeEventListener("scroll",re),we.disconnect()}},[Ne,e.length,Ae]);const I=K=>{const re=Y.current;if(!re)return;const we=Math.max(220,Math.round(re.clientWidth*.55));re.scrollBy({left:K==="left"?-we:we,behavior:"smooth"})},P=E.useMemo(()=>Zt.map(K=>({id:K,label:t[K]?.label??ap(K)})),[Zt,t]),H=E.useMemo(()=>{const K=[];if(nn){const re=e.map(Fe=>Ar(Fe,o)).filter(Fe=>!!Fe),we=re.length>0&&re.every(Fe=>B.has(Fe));K.push({id:"_select",enableHiding:!1,header:()=>y.jsx("input",{type:"checkbox",className:"vertebr-row-check",checked:we,"aria-label":"Select all",onChange:()=>{L(Fe=>re.every(pt=>Fe.has(pt))?new Set:new Set(re))}}),cell:({row:Fe})=>{const pt=Ar(Fe.original,o);return pt?y.jsx("input",{type:"checkbox",className:"vertebr-row-check",checked:B.has(pt),"aria-label":"Select row",onClick:ln=>ln.stopPropagation(),onChange:()=>L(ln=>yte(ln,pt))}):null},size:44})}return K.push(...Zt.length===0?[{id:"raw",header:"Item",cell:({row:re})=>y.jsx(Ap,{fieldKey:"raw",value:re.original})}]:Zt.map(re=>{const we=t[re],Fe=/(image|img|photo|avatar|thumbnail|thumb|cover)/i.test(re)||/(image|img|photo)/i.test(we?.label??""),pt=Ie&&EM(re,we);return{id:re,accessorKey:re,header:we?.label??ap(re),meta:{fieldKey:re,field:we},cell:({row:ln,getValue:Ui})=>{if(pt){const $r=Ar(ln.original,o);if(!$r)return y.jsx(Ap,{fieldKey:re,field:we,value:Ui()});const al=Le[$r]?.[re]??lp(ln.original,re),qc=Le[$r]?.[re]!==void 0&&Le[$r]?.[re]!==lp(ln.original,re);return y.jsx("div",{className:"vertebr-visibility-check","data-dirty":qc?"true":void 0,onClick:na=>na.stopPropagation(),children:y.jsx(OO,{visible:al,dirty:qc,label:we?.label??ap(re),disabled:oe,onChange:na=>qt($r,re,na)})})}return y.jsx(Ap,{fieldKey:re,field:we,value:Ui()})},size:pt?88:Fe?220:void 0}})),K.push({id:"_actions",header:()=>y.jsx("span",{className:"vertebr-sr-only",children:"Actions"}),enableHiding:!1,cell:({row:re})=>{const we=Ar(re.original,o);return y.jsxs("div",{className:"vertebr-row-actions",onClick:Fe=>Fe.stopPropagation(),onKeyDown:Fe=>Fe.stopPropagation(),children:[y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>Z(re.original),children:"View"}),Ie?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>br(re.original),children:"Edit"}):null,we?Kt.map(([Fe,pt])=>y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:te!=null,onClick:()=>zr(Fe,[we]),children:pt.label},Fe)):null,Ze&&we?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-danger-quiet",onClick:()=>{window.confirm("Delete this row? This cannot be undone.")&&h?.(we)},children:"Delete"}):null]})}}),K},[t,Zt,e,B,nn,Ie,Ze,Kt,te,zr,h,o,Le,qt]),ie=Qee({data:e,columns:H,state:{columnVisibility:Ae},onColumnVisibilityChange:Re,getCoreRowModel:Zee()}),ae=O?Ar(O,o):null,ye=Object.fromEntries(Object.entries(t).filter(([,K])=>!K.readOnly||K.required).map(([K,re])=>[K,re.readOnly?{...re,readOnly:!1}:re])),ke=Object.fromEntries(Object.entries(ye).map(([K,re])=>[K,re.default??(re.type==="boolean"?!1:re.type==="number"?void 0:re.type==="file[]"?[]:"")]));if(O&&ae&&u){const K=Object.fromEntries(Object.entries(t).filter(([,we])=>!we.readOnly)),re=CM(O,o);return y.jsxs("div",{className:"vertebr-resource-edit",children:[y.jsxs("div",{className:"vertebr-resource-edit-head",children:[y.jsxs("div",{className:"vertebr-resource-edit-heading",children:[y.jsx("p",{className:"vertebr-resource-edit-eyebrow",children:"Editing record"}),y.jsx("h2",{children:re}),y.jsx("p",{className:"vertebr-resource-edit-id",children:ae})]}),y.jsx("button",{type:"button",className:"vertebr-btn",onClick:()=>Pr(),children:"Back"})]}),y.jsx(Vg,{variant:"record",schema:K,value:O,uploads:s,onUpload:k,galleryUpload:C,onListGallery:_,onUploadGallery:M,onSave:async we=>{await u(ae,we),Pr()}})]})}const _e=y.jsxs("div",{className:"vertebr-table-toolbar",children:[y.jsxs("div",{className:"vertebr-table-toolbar-start",children:[P.length>0?y.jsx(tte,{columns:P,visibility:Ae,onChange:Re}):null,vt?y.jsxs("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon",onClick:()=>ee(!0),children:[y.jsx(_te,{}),"Bulk upload"]}):null,Nn.length>0&&vr>0?y.jsxs(y.Fragment,{children:[y.jsxs("span",{className:"vertebr-count",children:[vr," visibility change",vr===1?"":"s"]}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-primary",disabled:oe,onClick:()=>{si()},children:oe?"Saving…":"Save visibility"}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:oe,onClick:()=>Te({}),children:"Discard"})]}):null,vn.map(([K,re])=>y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:te!=null,onClick:()=>ge(K),children:re.label},K)),nn&&B.size>0?y.jsxs(y.Fragment,{children:[y.jsxs("span",{className:"vertebr-count",children:[B.size," selected"]}),Kt.map(([K,re])=>y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:te!=null,onClick:()=>zr(K,[...B]),children:re.label},K)),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>L(new Set),children:"Clear"})]}):null]}),he.overflow?y.jsxs("div",{className:"vertebr-table-scroll-controls",role:"group","aria-label":"Scroll columns",children:[y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon vertebr-table-scroll-btn",disabled:!he.canLeft,onClick:()=>I("left"),"aria-label":"Scroll columns left",children:y.jsx(Ete,{})}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon vertebr-table-scroll-btn",disabled:!he.canRight,onClick:()=>I("right"),"aria-label":"Scroll columns right",children:y.jsx(Tte,{})})]}):null]}),Be=G&&s&&k?y.jsx(ete,{uploads:s,canCreate:Ue,fieldLabels:Object.fromEntries(Object.keys(s).map(K=>[K,t[K]?.label??ap(K)])),onClose:()=>ee(!1),onUpload:k,onCreateFromUploads:Ue&&f?async(K,re)=>{for(const we of re){const Fe=Ste(we.name??"Image");await f({[K]:we.url,name:Fe,title:Fe})}}:void 0}):null,it=j&&f?y.jsx(ate,{title:ft,schema:ye,value:ke,uploads:s,onUpload:k,galleryUpload:C,onListGallery:_,onUploadGallery:M,onClose:()=>z(!1),onCreate:f}):null,_t=U?kM(r[U.actionId])&&b?y.jsx(hte,{title:r[U.actionId]?.label??"Send email",count:U.rowIds.length,schema:c0(r[U.actionId]?.input??{}),submitLabel:te?"Sending…":U.rowIds.length===1?"Send":`Send to ${U.rowIds.length}`,onClose:()=>ue(null),onPreview:K=>b(U.rowIds[0],U.actionId,K),onSubmit:K=>xr(U.actionId,U.rowIds,K)}):r[U.actionId]?.input?y.jsx(dM,{title:r[U.actionId]?.label??"Run action",count:U.rowIds.length,schema:c0(r[U.actionId].input),submitLabel:te?"Sending…":U.rowIds.length===1?r[U.actionId]?.label??"Send":`Send to ${U.rowIds.length}`,onClose:()=>ue(null),onSubmit:K=>xr(U.actionId,U.rowIds,K)}):null:null,xn=Se&&x[Se]?.input?y.jsx(dM,{title:x[Se]?.label??"Run action",eyebrow:"This resource",schema:c0(x[Se].input),submitLabel:te?"Working…":"Run",onClose:()=>V(null),onSubmit:K=>Fn(Se,K)}):null,me=y.jsxs("div",{className:"vertebr-panel-head",children:[y.jsx("h2",{children:"Records"}),y.jsxs("div",{className:"vertebr-panel-head-actions",children:[Ue?y.jsxs("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon",onClick:()=>z(!0),children:[y.jsx(Cte,{}),ft]}):null,y.jsx("span",{className:"vertebr-count",children:e.length})]})]});return e.length===0?y.jsxs("div",{className:"vertebr-resource-body",children:[me,vt||P.length>0||vn.length>0?_e:null,y.jsx("div",{className:"vertebr-empty",children:"No rows yet."}),Be,it,_t,xn]}):y.jsxs("div",{className:"vertebr-resource-body",children:[me,_e,y.jsx("div",{className:"vertebr-table-wrap",ref:Y,"data-overflow":he.overflow?"true":void 0,"data-overflow-left":he.canLeft?"true":void 0,"data-overflow-right":he.canRight?"true":void 0,children:y.jsxs("table",{className:"vertebr-table",children:[y.jsx("thead",{children:ie.getHeaderGroups().map(K=>y.jsx("tr",{children:K.headers.map(re=>y.jsx("th",{className:re.column.id==="_actions"?"vertebr-col-actions":re.column.id==="_select"?"vertebr-col-select":void 0,children:re.isPlaceholder?null:bM(re.column.columnDef.header,re.getContext())},re.id))},K.id))}),y.jsx("tbody",{children:ie.getRowModel().rows.map(K=>y.jsx("tr",{className:"vertebr-table-row-clickable","data-selected":nn&&Ar(K.original,o)&&B.has(Ar(K.original,o))?"true":void 0,tabIndex:0,onClick:()=>Z(K.original),onKeyDown:re=>{(re.key==="Enter"||re.key===" ")&&(re.preventDefault(),Z(K.original))},children:K.getVisibleCells().map(re=>y.jsx("td",{className:re.column.id==="_actions"?"vertebr-col-actions":re.column.id==="_select"?"vertebr-col-select":void 0,children:bM(re.column.columnDef.cell,re.getContext())},re.id))},K.id))})]})}),q?y.jsx(gte,{schema:t,row:q,title:CM(q,o),canEdit:Ie,onClose:()=>Z(null),onEdit:()=>{br(q),Z(null)}}):null,_t,xn,Be,it]})}function Cte(){return y.jsxs("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[y.jsx("path",{d:"M12 5v14"}),y.jsx("path",{d:"M5 12h14"})]})}function Ete(){return y.jsx("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:y.jsx("path",{d:"m15 18-6-6 6-6"})})}function Tte(){return y.jsx("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:y.jsx("path",{d:"m9 18 6-6-6-6"})})}function _te(){return y.jsxs("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[y.jsx("path",{d:"M16 5h6"}),y.jsx("path",{d:"M19 2v6"}),y.jsx("rect",{x:"3",y:"7",width:"14",height:"14",rx:"2"}),y.jsx("circle",{cx:"8.5",cy:"12.5",r:"1.5"}),y.jsx("path",{d:"m17 21-4.5-4.5L7 21"})]})}const Ate=[{id:"desktop",label:"Desktop"},{id:"mobile",label:"Mobile"}],tc=390,nc=844;function Rte({previewPath:t,controlId:e,draft:n}){const r=E.useRef(null),i=E.useRef(null),s=E.useRef(n),[o,l]=E.useState(!1),[u,f]=E.useState(!1),[h,m]=E.useState("desktop"),[g,b]=E.useState(1);s.current=n;const x=h==="mobile",S=E.useMemo(()=>_H(t,{controlId:e}),[t,e]),k=E.useCallback(()=>{const _=r.current?.contentWindow,M=s.current;!_||!M||MH(_,e,M)},[e]),C=E.useCallback(()=>{const _=r.current?.contentWindow;if(_)try{_.dispatchEvent(new Event("resize"))}catch{}},[]);return E.useEffect(()=>{l(!1),f(!1)},[S]),E.useEffect(()=>NH(_=>{const M=r.current?.contentWindow;!M||_!==M||(l(!0),k())}),[k,S]),E.useEffect(()=>{o&&k()},[n,o,k]),E.useEffect(()=>{if(!x){b(1);return}const _=i.current;if(!_||typeof ResizeObserver>"u")return;const M=()=>{const A=getComputedStyle(_),O=(Number.parseFloat(A.paddingLeft)||0)+(Number.parseFloat(A.paddingRight)||0),D=(Number.parseFloat(A.paddingTop)||0)+(Number.parseFloat(A.paddingBottom)||0),j=Math.max(0,_.clientWidth-O),z=Math.max(0,_.clientHeight-D),q=Math.min(1,j/tc,z/nc);b(Number.isFinite(q)&&q>0?q:1)};M();const R=new ResizeObserver(M);return R.observe(_),()=>R.disconnect()},[x]),E.useEffect(()=>{if(!o)return;const _=window.setTimeout(C,50);return()=>window.clearTimeout(_)},[h,g,o,C]),y.jsxs("div",{className:"vertebr-page-preview",children:[y.jsxs("div",{className:"vertebr-page-preview-meta",children:[y.jsxs("p",{children:[y.jsx("span",{children:"Preview"}),y.jsx("strong",{children:t})]}),y.jsxs("p",{children:[y.jsx("span",{children:"Status"}),y.jsx("strong",{children:u?"Unavailable":o?"Live":"Loading…"})]}),x?y.jsxs("p",{children:[y.jsx("span",{children:"Viewport"}),y.jsxs("strong",{children:[tc,"×",nc]})]}):null,y.jsx("div",{className:"vertebr-page-preview-viewports",role:"group","aria-label":"Preview viewport",children:Ate.map(_=>y.jsx("button",{type:"button","data-active":h===_.id?"true":void 0,onClick:()=>m(_.id),children:_.label},_.id))})]}),y.jsx("div",{ref:i,className:"vertebr-page-preview-stage","data-viewport":h,children:y.jsx("div",{className:"vertebr-page-preview-shell",style:x?{width:tc*g,height:nc*g}:void 0,children:y.jsx("div",{className:"vertebr-page-preview-frame",style:x?{width:tc,height:nc,transform:`scale(${g})`,transformOrigin:"top left"}:void 0,children:u?y.jsxs("div",{className:"vertebr-page-preview-empty",children:["Could not load host preview at ",t,"."]}):y.jsx("iframe",{ref:r,title:`Preview ${e}`,src:S,width:x?tc:void 0,height:x?nc:void 0,style:x?{width:tc,height:nc}:void 0,onLoad:()=>{l(!0),k(),C()},onError:()=>f(!0)})})})})]})}function Mte({client:t,configData:e,isPageSelection:n,previewPath:r,onConfigSaved:i,galleryPicker:s,fontLibraryPicker:o}){const[l,u]=E.useState(e.value),f=!!r,h=E.useCallback(g=>{u(g)},[]),m=y.jsx(Vg,{schema:e.schema,value:e.value,onChange:f?h:void 0,onSave:async g=>{const b=await t.setConfig(e.id,g);i(b)},...s,...o});return y.jsxs("div",{className:"vertebr-config-editor",children:[f?y.jsxs("div",{className:"vertebr-panel-head",children:[y.jsx("h2",{children:n?"Page content":e.label}),y.jsxs("span",{className:"vertebr-count",children:[Object.keys(e.schema).length," fields"]})]}):n?y.jsxs("div",{className:"vertebr-panel-head",children:[y.jsx("h2",{children:"Page content"}),y.jsxs("span",{className:"vertebr-count",children:[Object.keys(e.schema).length," fields"]})]}):null,f&&r?y.jsxs("div",{className:"vertebr-page-editor",children:[y.jsx("div",{className:"vertebr-page-editor-form",children:m}),y.jsx(Rte,{previewPath:r,controlId:e.id,draft:l??e.value})]}):m]})}function Nte({client:t,catalog:e,selection:n,onSelectionChange:r,authRequired:i,loading:s,isPageSelection:o,metricsData:l,metricsLoading:u,metricsRange:f,onMetricsRangeChange:h,onRefreshMetrics:m,galleryData:g,galleryLoading:b,onRefreshGallery:x,fontLibraryData:S,fontLibraryLoading:k,onRefreshFonts:C,emailsData:_,emailsLoading:M,onRefreshEmails:R,resourceData:A,onRefreshResource:O,configData:D,onConfigSaved:j,galleryPicker:z,fontLibraryPicker:q}){return e?y.jsx("div",{className:"vertebr-content",children:y.jsxs("section",{className:"vertebr-panel",children:[n?.kind==="overview"?y.jsx(lee,{label:l?.label??e.metrics?.label,windowLabel:l?.windowLabel,compareLabel:l?.compareLabel,metrics:l?.metrics??[],charts:l?.charts??[],range:f,onRangeChange:h,loading:u,onRefresh:()=>{m()}}):null,n?.kind==="gallery"&&g?y.jsx(WQ,{label:g.label,items:g.items,accept:g.accept,maxBytes:g.maxBytes,canDelete:g.canDelete,loading:b,onRefresh:()=>{x()},onUpload:async Z=>{Z.length===1&&Z[0]?await t.uploadGalleryFile(Z[0]):await t.uploadGalleryFiles(Z),await x()},onDelete:g.canDelete?async Z=>{await t.deleteGalleryItem(Z),await x()}:void 0}):null,n?.kind==="fontLibrary"&&S?y.jsx(GQ,{label:S.label,data:S,loading:k,onRefresh:()=>{C()},onUpload:async(Z,G)=>{for(const ee of Z)await t.uploadFontFile(ee,G);await C()},onImportGoogle:S.canImportGoogle?async Z=>{await t.importGoogleFont(Z),await C()}:void 0,onDelete:S.canDelete?async Z=>{await t.deleteFontItem(Z),await C()}:void 0}):null,n?.kind==="emails"&&_?y.jsx(HQ,{data:_,loading:M,tab:n.tab??"compose",onRefresh:()=>{R()},onLoadRecipients:async Z=>{const G=await t.listResource(Z,{fresh:!0}),ee=new Set,te=[];for(const fe of G.items){const B=String(fe.email??"").trim().toLowerCase();if(!B.includes("@")||ee.has(B))continue;ee.add(B);const L=String(fe.id??fe.uid??fe.slug??B),U=String(fe.displayName??fe.name??"").trim();te.push({email:B,id:L,...U?{label:U}:{}})}return te.sort((fe,B)=>fe.email.localeCompare(B.email)),te},onPreview:Z=>t.previewEmails(Z),onSend:async Z=>{const G=await t.sendEmails(Z);return{sent:G.sent,failed:G.failed}},onSchedule:_.canSchedule?async Z=>{await t.scheduleEmails(Z)}:void 0,onCancel:_.canSchedule?async Z=>{await t.cancelEmailCampaign(Z)}:void 0,onSaveLibrary:_.canLibrary?async Z=>{await t.saveEmailLibraryTemplate(Z)}:void 0,onDeleteLibrary:_.canLibrary?async Z=>{await t.deleteEmailLibraryTemplate(Z)}:void 0}):null,n?.kind==="resource"&&A?y.jsx(kte,{schema:A.schema,items:A.items,label:A.label,initialEditRowId:n.rowId&&n.id===A.id?n.rowId:void 0,onEditRowIdChange:Z=>{r?.({kind:"resource",id:A.id,rowId:Z??void 0})},permissions:A.permissions,actions:A.actions,collectionActions:A.collectionActions,uploads:A.uploads,storageKey:A.id,onUpdate:A.permissions.update?async(Z,G)=>{await t.updateResource(A.id,Z,G),await O()}:void 0,onCreate:A.permissions.create?async Z=>{await t.createResource(A.id,Z),await O()}:void 0,onDelete:A.permissions.delete?async Z=>{await t.deleteResource(A.id,Z),await O()}:void 0,onAction:async(Z,G,ee)=>{await t.runResourceAction(A.id,Z,G,ee)},onActionDone:O,onPreviewMail:async(Z,G,ee)=>t.previewResourceMail(A.id,Z,G,ee),onCollectionAction:async(Z,G)=>t.runCollectionAction(A.id,Z,G),onUpload:A.uploads?async(Z,G)=>{if(G.length===1&&G[0]){const te=await t.uploadResourceFile(A.id,Z,G[0]);return[{url:te.url,name:te.name}]}return(await t.uploadResourceFiles(A.id,Z,G)).files}:void 0,...z}):null,n?.kind==="config"&&D?y.jsx(Mte,{client:t,configData:D,isPageSelection:o,previewPath:e.configs.find(Z=>Z.id===D.id)?.previewPath,onConfigSaved:j,galleryPicker:z,fontLibraryPicker:q},D.id):null]})}):y.jsx("div",{className:"vertebr-content",children:y.jsx("section",{className:"vertebr-panel",children:y.jsx("div",{className:"vertebr-empty",children:i?"Authenticated access required for this environment.":s?"Loading…":"Unable to load catalog."})})})}function Ote({catalogLoaded:t,authRequired:e,selection:n,isPageSelection:r,hasPagePreview:i}){return!t&&e?"Provide an access token to load this environment.":n?.kind==="overview"?"Commerce, growth, and catalog for the selected environment.":n?.kind==="gallery"?"Browse and upload shared media assets.":n?.kind==="fontLibrary"?"Upload custom fonts or add Google Fonts to your library.":n?.kind==="emails"?"Send or schedule branded email to a list or specific people.":n?.kind==="resource"?n.rowId?"Edit this record — changes apply to the selected environment.":"Manage records scoped to the selected environment.":n?.kind==="config"?i?r?"Edit content — live storefront preview updates as you type.":"Edit settings — live storefront preview updates as you change typography and colors.":r?"Edit content for this page.":"Environment settings — changes apply to this environment only.":"Select a panel."}function Dte({activeLabel:t,activeEnv:e,catalogLoaded:n,authRequired:r,selection:i,isPageSelection:s,hasPagePreview:o,error:l,breadcrumbs:u}){return y.jsxs("header",{className:"vertebr-header",children:[y.jsxs("div",{children:[u.length>1?y.jsx("ol",{className:"vertebr-breadcrumbs",children:u.map((f,h)=>y.jsx("li",{children:h===u.length-1?y.jsx("strong",{children:f.label}):f.label},`${f.label}-${h}`))}):null,y.jsxs("div",{className:"vertebr-heading-row",children:[y.jsx("h1",{children:t}),e?y.jsx("span",{className:"vertebr-env-badge","data-tone":e.tone??"neutral",children:e.label}):null]}),y.jsx("p",{children:Ote({catalogLoaded:n,authRequired:r,selection:i,isPageSelection:s,hasPagePreview:o})})]}),l?y.jsx("span",{className:"vertebr-status","data-tone":"danger",children:l}):null]})}function Ite(){const{state:t}=oO();return t.visible?y.jsxs("div",{className:"vertebr-savebar","data-tone":t.tone,children:[y.jsx("div",{className:"vertebr-savebar-message",children:t.saving?"Saving…":t.message??(t.isDirty?"Unsaved changes":"Saved")}),y.jsxs("div",{className:"vertebr-savebar-actions",children:[t.onDiscard&&t.isDirty?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:t.saving,onClick:t.onDiscard,children:"Discard"}):null,t.onSave?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-primary",disabled:t.saving||!t.isDirty,onClick:()=>{t.onSave?.()},children:"Save"}):null]})]}):null}function ta(t){return{width:18,height:18,viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,...t}}function jte(t){return y.jsx("svg",{...ta(t),children:y.jsx("path",{d:"M3 8.5 10 2.5l7 6v8.5a1 1 0 0 1-1 1h-4.5v-5H8.5v5H4a1 1 0 0 1-1-1V8.5z"})})}function Lte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("path",{d:"M3 6.5 10 2.5l7 4v9H3v-9z"}),y.jsx("path",{d:"M7 11.5h6M7 14h4"})]})}function Pte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("rect",{x:"2.5",y:"4.5",width:"15",height:"11",rx:"1.5"}),y.jsx("path",{d:"m3.5 13 3.5-3.5 2.5 2.5L12.5 9l4 4.5"}),y.jsx("circle",{cx:"7",cy:"7.5",r:"1",fill:"currentColor",stroke:"none"})]})}function zte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("path",{d:"M5 16.5V5.5h10M7.5 16.5V9h5v7.5"}),y.jsx("path",{d:"M7 5.5h6"})]})}function $te(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("rect",{x:"2.5",y:"4.5",width:"15",height:"11",rx:"1.5"}),y.jsx("path",{d:"m3.5 6.5 6.5 4.5 3.5 2.5 6.5-2.5 6.5 4.5"})]})}function Bte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("path",{d:"M6 3.5h5.5L16 8v8.5a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-12a1 1 0 0 1 1-1z"}),y.jsx("path",{d:"M11.5 3.5V8H16"})]})}function Vte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("circle",{cx:"10",cy:"10",r:"2.25"}),y.jsx("path",{d:"M10 2.5v2M10 15.5v2M3.5 10h2M14.5 10h2M5.4 5.4l1.4 1.4M13.2 13.2l1.4 1.4M5.4 14.6l1.4-1.4M13.2 6.8l1.4-1.4"})]})}function Hte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("circle",{cx:"9",cy:"9",r:"4.75"}),y.jsx("path",{d:"M13 13l3.5 3.5"})]})}function ka(t){return t==="overview"?jte:t.startsWith("resource:")?Lte:t==="gallery"?Pte:t==="fonts"?zte:t==="emails"?$te:t.startsWith("config:")?Bte:Vte}function Ute({item:t,collapsed:e}){const n=!!t.children?.length,r=t.children?.some(u=>u.active)??!1,i=t.active||r,[s,o]=E.useState(i),l=t.icon??ka(t.key);return E.useEffect(()=>{i&&o(!0)},[i]),n?y.jsxs("div",{className:"vertebr-nav-item","data-has-children":"true","data-open":s||void 0,children:[y.jsxs("div",{className:"vertebr-nav-parent",children:[y.jsxs("button",{type:"button",className:"vertebr-nav-parent-label","data-active":i&&!r,"data-section":i||void 0,title:e?t.label:void 0,onClick:()=>{o(!0),t.onSelect()},children:[y.jsx(l,{className:"vertebr-nav-icon"}),y.jsx("span",{className:"vertebr-nav-label-text",children:t.label})]}),e?null:y.jsx("button",{type:"button",className:"vertebr-nav-parent-toggle","aria-label":s?`Collapse ${t.label}`:`Expand ${t.label}`,"aria-expanded":s,onClick:()=>o(u=>!u),children:y.jsx("span",{"aria-hidden":"true",children:s?"▾":"▸"})})]}),s&&!e?y.jsx("div",{className:"vertebr-nav-sub",role:"group",children:t.children.map(u=>y.jsx("button",{type:"button",className:"vertebr-nav-subitem","data-active":u.active,onClick:()=>{o(!0),u.onSelect()},children:u.label},u.key))}):null]}):y.jsxs("button",{type:"button","data-active":t.active,title:e?t.label:void 0,onClick:t.onSelect,children:[y.jsx(l,{className:"vertebr-nav-icon"}),y.jsx("span",{className:"vertebr-nav-label-text",children:t.label})]})}function Fte({navGroups:t,collapsed:e}){return y.jsx("aside",{className:"vertebr-sidebar","data-collapsed":e||void 0,children:y.jsx("div",{className:"vertebr-sidebar-top",children:y.jsx("nav",{className:"vertebr-nav",children:t.map(n=>y.jsxs("div",{className:"vertebr-nav-group",children:[e?null:y.jsx("div",{className:"vertebr-nav-label",children:n.label}),n.items.map(r=>y.jsx(Ute,{item:r,collapsed:e},r.key))]},n.label))})})})}function qte(){const{toasts:t,dismiss:e}=lO();return t.length?y.jsx("div",{className:"vertebr-toast-stack","aria-live":"polite",children:t.map(n=>y.jsxs("div",{className:"vertebr-toast","data-tone":n.tone,role:"status",children:[y.jsx("span",{children:n.message}),y.jsx("button",{type:"button",className:"vertebr-toast-dismiss","aria-label":"Dismiss",onClick:()=>e(n.id),children:"×"})]},n.id))}):null}function Gte({environments:t,value:e,onChange:n}){const r=t.find(i=>i.id===e);return y.jsxs(Mg,{value:e,onValueChange:n,children:[y.jsxs(Ng,{className:"vertebr-select-trigger","aria-label":"Environment","data-tone":r?.tone??"neutral",children:[y.jsxs("span",{className:"vertebr-select-value",children:[y.jsx("span",{className:"vertebr-select-dot","data-tone":r?.tone??"neutral"}),y.jsx(Og,{placeholder:"Select environment"})]}),y.jsx(Dg,{className:"vertebr-select-icon",children:y.jsx(Wte,{})})]}),y.jsx(Ig,{children:y.jsx(jg,{className:"vertebr-select-content",position:"popper",sideOffset:6,children:y.jsx(Pg,{className:"vertebr-select-viewport",children:t.map(i=>y.jsxs(zg,{value:i.id,className:"vertebr-select-item","data-tone":i.tone??"neutral",children:[y.jsxs("span",{className:"vertebr-select-value",children:[y.jsx("span",{className:"vertebr-select-dot","data-tone":i.tone??"neutral"}),y.jsx($g,{children:i.label})]}),i.auth?.required?y.jsx("span",{className:"vertebr-env-lock",children:"auth"}):null,y.jsx(Bg,{className:"vertebr-select-check",children:y.jsx(Kte,{})})]},i.id))})})})]})}function Wte(){return y.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12","aria-hidden":"true",children:y.jsx("path",{d:"M2.5 4.5 6 8l3.5-3.5",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})})}function Kte(){return y.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12","aria-hidden":"true",children:y.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})}function Zte({theme:t,onChange:e}){return y.jsxs("div",{className:"vertebr-theme",children:[y.jsx("div",{className:"vertebr-nav-label",children:"Appearance"}),y.jsxs("div",{className:"vertebr-theme-toggle",role:"group","aria-label":"Color theme",children:[y.jsxs("button",{type:"button",className:"vertebr-theme-option","data-active":t==="light","aria-pressed":t==="light",onClick:()=>e("light"),children:[y.jsx(Yte,{}),"Light"]}),y.jsxs("button",{type:"button",className:"vertebr-theme-option","data-active":t==="dark","aria-pressed":t==="dark",onClick:()=>e("dark"),children:[y.jsx(Xte,{}),"Dark"]})]})]})}function Yte(){return y.jsxs("svg",{className:"vertebr-theme-icon",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[y.jsx("circle",{cx:"12",cy:"12",r:"4"}),y.jsx("path",{d:"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"})]})}function Xte(){return y.jsx("svg",{className:"vertebr-theme-icon",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:y.jsx("path",{d:"M21 14.5A8.5 8.5 0 0 1 9.5 3 7 7 0 1 0 21 14.5z"})})}function Jte({brand:t,envList:e,environment:n,onEnvironmentChange:r,activeEnv:i,authUserLabel:s,onSignOut:o,getAccessToken:l,authRequired:u,token:f,tokenDraft:h,onTokenDraftChange:m,onSaveToken:g,onClearToken:b,theme:x,onThemeChange:S,sidebarCollapsed:k,onToggleSidebar:C}){return y.jsxs("header",{className:"vertebr-topbar",children:[y.jsxs("div",{className:"vertebr-topbar-start",children:[y.jsx("button",{type:"button",className:"vertebr-topbar-toggle","aria-label":k?"Expand sidebar":"Collapse sidebar",onClick:C,children:"☰"}),y.jsx("strong",{className:"vertebr-topbar-brand",children:t}),e.length>0?y.jsxs("div",{className:"vertebr-topbar-env",children:[y.jsx(Gte,{environments:e,value:n,onChange:r}),i?y.jsx("span",{className:"vertebr-env-badge","data-tone":i.tone??"neutral",children:i.label}):null]}):null]}),y.jsxs("div",{className:"vertebr-topbar-search","aria-hidden":"true",children:[y.jsx(Hte,{}),y.jsx("span",{children:"Search admin"}),y.jsx("kbd",{children:"⌘K"})]}),y.jsxs("div",{className:"vertebr-topbar-end",children:[!l&&(u||f)?y.jsxs("div",{className:"vertebr-topbar-token",children:[y.jsx("input",{className:"vertebr-auth-input",type:"password",placeholder:"Access token",value:h,onChange:_=>m(_.target.value),autoComplete:"off"}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:g,children:"Use"}),f?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:b,children:"Clear"}):null]}):null,l&&s?y.jsx("span",{className:"vertebr-topbar-user",children:s}):null,o?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>{o()},children:"Sign out"}):null,y.jsx(Zte,{theme:x,onChange:S})]})]})}function Qte(t,e){const n=[{label:"Home",href:"/overview"}];if(!t||!e)return n;switch(t.kind){case"overview":return[...n,{label:e.metrics?.label??"Overview"}];case"gallery":return[...n,{label:e.gallery?.label??"Gallery"}];case"fontLibrary":return[...n,{label:e.fontLibrary?.label??"Fonts"}];case"emails":return[...n,{label:e.emails?.label??"Email"},{label:t.tab==="templates"?"Templates":t.tab==="activity"?"Activity":"Compose"}];case"resource":{const r=e.resources.find(s=>s.id===t.id),i=[...n,{label:r?.group??"Products",href:void 0},{label:r?.label??t.id}];return t.rowId&&i.push({label:t.rowId}),i}case"config":{const r=e.configs.find(s=>s.id===t.id),i=r?.group??(r?.section==="page"?"Pages":"Settings");return[...n,{label:i},{label:r?.label??t.id}]}default:return n}}const ene=new Set(["compose","templates","activity"]);function tne(t){const e=(t||"/admin/api").replace(/\/$/,"")||"/admin/api";return e.endsWith("/api")?e.slice(0,-4)||"/":e}function E2(t){return!t||t==="/"?"":t.replace(/\/$/,"")}function nne(t,e){if(!t)return"/overview";switch(t.kind){case"overview":return"/overview";case"gallery":return"/gallery";case"fontLibrary":return"/fonts";case"emails":return`/emails/${t.tab??"compose"}`;case"resource":return t.rowId?`/resources/${encodeURIComponent(t.id)}/${encodeURIComponent(t.rowId)}`:`/resources/${encodeURIComponent(t.id)}`;case"config":return`/${e.configs.find(i=>i.id===t.id)?.section==="page"?"pages":"config"}/${encodeURIComponent(t.id)}`;default:return"/overview"}}function rne(t,e,n){const r=E2(t),i=nne(e,n);return`${r}${i}`||"/"}function ine(t){return t&&ene.has(t)?t:"compose"}function v0(t,e,n){const r=E2(e);let i=t||"/";if(r){if(i===r||i===`${r}/`)return null;(i.startsWith(`${r}/`)||i.startsWith(r))&&(i=i.slice(r.length))}const s=i.replace(/^\//,"").split("/").filter(Boolean);if(s.length===0)return null;const[o,...l]=s;if(o==="overview")return{kind:"overview"};if(o==="gallery")return{kind:"gallery"};if(o==="fonts")return{kind:"fontLibrary"};if(o==="emails")return{kind:"emails",tab:ine(l[0])};if(o==="resources"&&l[0]){const u=decodeURIComponent(l[0]);return n&&!n.resources.some(f=>f.id===u)?null:l[1]?{kind:"resource",id:u,rowId:decodeURIComponent(l[1])}:{kind:"resource",id:u}}if((o==="pages"||o==="config")&&l[0]){const u=decodeURIComponent(l[0]);if(n){const f=n.configs.find(h=>h.id===u);if(!f||o==="pages"&&f.section!=="page"||o==="config"&&f.section==="page")return null}return{kind:"config",id:u}}return null}function Di(t){if(t.metrics)return{kind:"overview"};const e=t.resources[0];if(e)return{kind:"resource",id:e.id};if(t.gallery)return{kind:"gallery"};if(t.fontLibrary)return{kind:"fontLibrary"};if(t.emails)return{kind:"emails",tab:"compose"};const n=t.configs[0];return n?{kind:"config",id:n.id}:{kind:"overview"}}function _M(t,e){return t?t.kind==="overview"?e.metrics?t:Di(e):t.kind==="gallery"?e.gallery?t:Di(e):t.kind==="fontLibrary"?e.fontLibrary?t:Di(e):t.kind==="emails"?e.emails?t:Di(e):t.kind==="resource"?e.resources.some(n=>n.id===t.id)?t:Di(e):t.kind==="config"&&e.configs.some(n=>n.id===t.id)?t:Di(e):Di(e)}function sne(t,e){return t===e?!0:!t||!e?t===e:t.kind!==e.kind?!1:t.kind==="overview"||t.kind==="gallery"||t.kind==="fontLibrary"?!0:t.kind==="emails"&&e.kind==="emails"?(t.tab??"compose")===(e.tab??"compose"):t.kind==="resource"&&e.kind==="resource"?t.id===e.id&&(t.rowId??"")===(e.rowId??""):t.kind==="config"&&e.kind==="config"?t.id===e.id:!1}function one(t){const e=[],n=new Map;for(const r of t){const i=r.group.trim()||"Resources";n.has(i)||(n.set(i,[]),e.push(i)),n.get(i).push(r)}return e.map(r=>({label:r,items:n.get(r)}))}function x0(t){try{return localStorage.getItem(t)}catch{return null}}function cp(t,e){try{localStorage.setItem(t,e)}catch{}}function AM(t){try{localStorage.removeItem(t)}catch{}}function ane({apiBase:t="/admin/api",basePath:e,title:n="Control plane",envStorageKey:r="vertebr:env",tokenStorageKey:i="vertebr:token",themeStorageKey:s="vertebr:theme",metricsRangeStorageKey:o="vertebr:metrics-range",getAccessToken:l,authUserLabel:u,onSignOut:f}){const h=e??tne(t),{theme:m,setTheme:g}=BH(s),[b,x]=E.useState(()=>x0(r)??""),[S,k]=E.useState(()=>x0(i)??""),[C,_]=E.useState(S),M=E.useCallback(()=>b,[b]),R=E.useMemo(()=>R0({apiBase:t,getEnvironment:M,getAccessToken:l??(()=>S||null)}),[t,M,l,S]),[A,O]=E.useState(null),[D,j]=E.useState(null),[z,q]=E.useState(()=>typeof window>"u"?{kind:"overview"}:v0(window.location.pathname,h,null)??{kind:"overview"}),[Z,G]=E.useState(null),[ee,te]=E.useState(null),[fe,B]=E.useState(null),[L,U]=E.useState(!1),[ue,Se]=E.useState(()=>UH(x0(o))),[V,Y]=E.useState(null),[he,ve]=E.useState(!1),[Ae,Re]=E.useState(null),[Le,Te]=E.useState(!1),[oe,pe]=E.useState(null),[Ie,Ue]=E.useState(!1),[Ze,ft]=E.useState(null),[vt,Kt]=E.useState(!0),[vn,Zt]=E.useState(!1),Nn=E.useRef(!0),nn=E.useCallback((me,K,re=!1)=>{if(typeof window>"u"||!me)return;const we=rne(h,me,K);if(window.location.pathname===we)return;const Fe=re?"replaceState":"pushState";window.history[Fe](null,"",we)},[h]);E.useEffect(()=>{let me=!1;return(async()=>{try{const K=await R.getBootstrap();if(me)return;O(K);const re=K.environments.map(Fe=>Fe.id),we=b&&re.includes(b)&&b||K.defaultEnvironment;we!==b&&(x(we),cp(r,we))}catch(K){me||ft(K instanceof Error?K.message:"Failed to load bootstrap")}})(),()=>{me=!0}},[R,b,r]),E.useEffect(()=>{if(!A||!b)return;let me=!1;return(async()=>{try{Kt(!0),ft(null);const K=await R.getCatalog();if(me)return;j(K);const re=v0(window.location.pathname,h,K),we=_M(re??Di(K),K);Nn.current=!0,q(we),nn(we,K,!0)}catch(K){me||(j(null),ft(K instanceof Error?K.message:"Failed to load catalog"))}finally{me||Kt(!1)}})(),()=>{me=!0}},[R,A,b,h,nn]),E.useEffect(()=>{if(!(!D||!z)){if(Nn.current){Nn.current=!1;return}nn(z,D,!1)}},[z,D,nn]),E.useEffect(()=>{const me=()=>{if(!D)return;const K=v0(window.location.pathname,h,D),re=_M(K??Di(D),D);Nn.current=!0,q(we=>sne(we,re)?we:re)};return window.addEventListener("popstate",me),()=>window.removeEventListener("popstate",me)},[D,h]),E.useEffect(()=>{if(!z||!D)return;let me=!1;return(async()=>{try{if(ft(null),z.kind==="overview"){U(!0);const K=await R.getMetrics({range:ue});me||(B(K),G(null),te(null),Y(null),Re(null),pe(null))}else if(z.kind==="gallery"){ve(!0);const K=await R.getGallery();me||(Y(K),G(null),te(null),B(null),Re(null),pe(null))}else if(z.kind==="fontLibrary"){Te(!0);const K=await R.getFonts();me||(Re(K),G(null),te(null),B(null),Y(null),pe(null))}else if(z.kind==="emails"){Ue(!0);const K=await R.getEmails();me||(pe(K),G(null),te(null),B(null),Y(null),Re(null))}else if(z.kind==="resource"){const K=await R.listResource(z.id);me||(G(K),te(null),B(null),Y(null),Re(null),pe(null))}else{const K=await R.getConfig(z.id);if(!me&&(te(K),G(null),B(null),Y(null),pe(null),D.fontLibrary)){Te(!0);try{const re=await R.getFonts();me||Re(re)}finally{me||Te(!1)}}}}catch(K){me||ft(K instanceof Error?K.message:"Failed to load panel")}finally{me||(U(!1),ve(!1),Te(!1),Ue(!1))}})(),()=>{me=!0}},[R,z,D,b,ue]);const br=E.useCallback(async()=>{if(z?.kind!=="resource")return;const me=await R.listResource(z.id);G(me)},[R,z]),Pr=E.useCallback(async()=>{U(!0);try{const me=await R.getMetrics({range:ue,fresh:!0});B(me)}finally{U(!1)}},[R,ue]),vr=E.useCallback(me=>{Se(me),cp(o,me)},[o]),qt=E.useCallback(async()=>{ve(!0);try{const me=await R.getGallery({fresh:!0});Y(me)}finally{ve(!1)}},[R]),si=E.useCallback(async()=>{Te(!0);try{const me=await R.getFonts({fresh:!0});Re(me)}finally{Te(!1)}},[R]),xr=E.useCallback(async()=>(await R.getFonts()).items,[R]),zr=E.useCallback(async()=>{Ue(!0);try{const me=await R.getEmails({fresh:!0});pe(me)}finally{Ue(!1)}},[R]),Fn=E.useCallback(async()=>(await R.getGallery()).items,[R]),ge=E.useCallback(async me=>{if(me.length===1&&me[0]){const{item:re}=await R.uploadGalleryFile(me[0]);return[re]}const{items:K}=await R.uploadGalleryFiles(me);return K},[R]),Ne=D?.gallery?{galleryUpload:{accept:D.gallery.accept,maxBytes:D.gallery.maxBytes},onListGallery:Fn,onUploadGallery:ge}:{},I=D?.fontLibrary?{fonts:Ae?.items??[],fontsLoading:Le,onListFonts:xr,onRefreshFonts:si}:{},P=D?.environments??A?.environments??[],H=P.find(me=>me.id===b),ie=!!H?.auth?.required,ae=z?.kind==="config"?D?.configs.find(me=>me.id===z.id):void 0,ye=ae?.section==="page",ke=!!ae?.previewPath,_e=me=>{if(me===b)return;const K=P.find(re=>re.id===me);K?.tone==="danger"&&!window.confirm(`Switch to ${K.label}? Writes will affect this environment.`)||(cp(r,me),x(me),G(null),te(null),Y(null),Re(null))},Be=()=>{const me=C.trim();k(me),me?cp(i,me):AM(i)},it=()=>{k(""),_(""),AM(i)},_t=E.useMemo(()=>{if(!D)return[];const me=[];D.metrics&&me.push({key:"overview",group:D.metrics.group??"Analytics",label:D.metrics.label,icon:ka("overview"),active:z?.kind==="overview",onSelect:()=>q({kind:"overview"})});for(const K of D.resources)me.push({key:`resource:${K.id}`,group:K.group??"Resources",label:K.label,icon:ka(`resource:${K.id}`),active:z?.kind==="resource"&&z.id===K.id,onSelect:()=>q({kind:"resource",id:K.id})});if(D.gallery&&me.push({key:"gallery",group:D.gallery.group??"Resources",label:D.gallery.label,icon:ka("gallery"),active:z?.kind==="gallery",onSelect:()=>q({kind:"gallery"})}),D.fontLibrary&&me.push({key:"fonts",group:D.fontLibrary.group??"Resources",label:D.fontLibrary.label,icon:ka("fonts"),active:z?.kind==="fontLibrary",onSelect:()=>q({kind:"fontLibrary"})}),D.emails){const K=z?.kind==="emails"?z.tab??"compose":null;me.push({key:"emails",group:D.emails.group??"Growth",label:D.emails.label,icon:ka("emails"),active:z?.kind==="emails",onSelect:()=>q({kind:"emails",tab:"compose"}),children:[{key:"emails:compose",label:"Compose",active:K==="compose",onSelect:()=>q({kind:"emails",tab:"compose"})},{key:"emails:templates",label:"Templates",active:K==="templates",onSelect:()=>q({kind:"emails",tab:"templates"})},{key:"emails:activity",label:"Activity",active:K==="activity",onSelect:()=>q({kind:"emails",tab:"activity"})}]})}for(const K of D.configs){const re=K.section==="page"?"Pages":"Config";me.push({key:`config:${K.id}`,group:K.group??re,label:K.label,icon:ka(`config:${K.id}`),active:z?.kind==="config"&&z.id===K.id,onSelect:()=>q({kind:"config",id:K.id})})}return one(me)},[D,z]);if(!A&&vt)return y.jsx("div",{className:"vertebr-loading",children:"Loading Vertebr…"});if(Ze&&!A)return y.jsx("div",{className:"vertebr-error",children:Ze});const xn=z?.kind==="overview"?D?.metrics?.label??"Overview":z?.kind==="gallery"?D?.gallery?.label??"Gallery":z?.kind==="fontLibrary"?D?.fontLibrary?.label??"Font Library":z?.kind==="emails"?D?.emails?.label??"Emails":z?.kind==="resource"?D?.resources.find(me=>me.id===z.id)?.label:z?.kind==="config"?D?.configs.find(me=>me.id===z.id)?.label:null;return y.jsx(pU,{children:y.jsx(mU,{children:y.jsxs("div",{className:"vertebr-root","data-env":b,"data-sidebar-collapsed":vn||void 0,children:[y.jsx(Jte,{brand:A?.brand??D?.brand??"Vertebr",envList:P,environment:b,onEnvironmentChange:_e,activeEnv:H,authUserLabel:u,onSignOut:f,getAccessToken:l,authRequired:ie,token:S,tokenDraft:C,onTokenDraftChange:_,onSaveToken:Be,onClearToken:it,theme:m,onThemeChange:g,sidebarCollapsed:vn,onToggleSidebar:()=>Zt(me=>!me)}),y.jsx(Fte,{navGroups:_t,collapsed:vn}),y.jsxs("main",{className:"vertebr-main",children:[y.jsx(Dte,{activeLabel:xn??(D?"Dashboard":"Sign in"),activeEnv:H,catalogLoaded:!!D,authRequired:ie,selection:z,isPageSelection:ye,hasPagePreview:ke,error:Ze,breadcrumbs:Qte(z,D)}),y.jsx(Nte,{client:R,catalog:D,selection:z,onSelectionChange:q,authRequired:ie,loading:vt,isPageSelection:ye,metricsData:fe,metricsLoading:L,metricsRange:ue,onMetricsRangeChange:vr,onRefreshMetrics:Pr,galleryData:V,galleryLoading:he,onRefreshGallery:qt,fontLibraryData:Ae,fontLibraryLoading:Le,onRefreshFonts:si,emailsData:oe,emailsLoading:Ie,onRefreshEmails:zr,resourceData:Z,onRefreshResource:br,configData:ee,onConfigSaved:te,galleryPicker:Ne,fontLibraryPicker:I}),y.jsx(Ite,{})]}),y.jsx(qte,{})]})})})}E.createContext(null);E.createContext(null);const w0="/admin/api";function lne(t){const e=t.environments.map(r=>r.auth?.client).find(r=>r?.provider==="firebase");if(!e)return null;const n=pB().length?UM():HM(e.config);return PV(n)}function cne(){const[t,e]=E.useState(null),[n,r]=E.useState(null),[i,s]=E.useState(null),[o,l]=E.useState(!1),[u,f]=E.useState("idle"),[h,m]=E.useState(""),[g,b]=E.useState(""),[x,S]=E.useState(null),[k,C]=E.useState(!1),_=E.useMemo(()=>R0({apiBase:w0,getEnvironment:()=>""}),[]);E.useEffect(()=>{let O=!1;return _.getBootstrap().then(D=>{if(O)return;e(D);const j=lne(D);r(j),j||l(!0)}).catch(D=>{O||(S(D instanceof Error?D.message:"Could not load auth"),l(!0))}),()=>{O=!0}},[_]),E.useEffect(()=>{if(n)return T3(n,O=>{s(O),f(O?"checking":"idle"),l(!0)})},[n]),E.useEffect(()=>{if(!t||!i)return;let O=!1;return(async()=>{f("checking");const D=localStorage.getItem("vertebr:env"),j=[...D?[D]:[],...t.environments.map(z=>z.id)].filter((z,q,Z)=>Z.indexOf(z)===q);for(const z of j)try{await R0({apiBase:w0,getEnvironment:()=>z,getAccessToken:()=>i.getIdToken()}).getCatalog(),O||(localStorage.setItem("vertebr:env",z),f("allowed"));return}catch{}O||f("denied")})(),()=>{O=!0}},[t,i]);const M=t?.environments.map(O=>O.auth?.client).find(O=>O?.provider==="firebase")?.methods??["email"],R=async O=>{if(O.preventDefault(),!!n){C(!0),S(null);try{await k3(n,h.trim(),g)}catch(D){S(D instanceof Error?D.message:"Sign-in failed")}finally{C(!1)}}},A=async()=>{if(n){C(!0),S(null);try{await G3(n,new vs)}catch(O){S(O instanceof Error?O.message:"Sign-in failed")}finally{C(!1)}}};return o?!n||!t?y.jsx("div",{className:"vertebr-error",children:x??"No browser auth provider is configured."}):i?u==="checking"||u==="idle"?y.jsx("div",{className:"vertebr-loading",children:"Checking admin access…"}):u==="denied"?y.jsx("main",{className:"vertebr-login",children:y.jsxs("section",{className:"vertebr-login-card",children:[y.jsxs("div",{className:"vertebr-brand",children:[y.jsx("strong",{children:t.brand}),y.jsx("span",{children:"Access denied"})]}),y.jsxs("div",{children:[y.jsx("h1",{children:"Administrator access required"}),y.jsxs("p",{children:["Signed in as ",i.email??i.uid,", but this account is not approved for any Vertebr environment."]})]}),y.jsx("button",{className:"vertebr-btn",type:"button",onClick:()=>{PT(n)},children:"Sign out"})]})}):y.jsx(ane,{apiBase:w0,title:"Owner control plane",getAccessToken:()=>i.getIdToken(),authUserLabel:i.email??i.uid,onSignOut:()=>PT(n)}):y.jsx("main",{className:"vertebr-login",children:y.jsxs("section",{className:"vertebr-login-card",children:[y.jsxs("div",{className:"vertebr-brand",children:[y.jsx("strong",{children:t.brand}),y.jsx("span",{children:"Admin access"})]}),y.jsxs("div",{children:[y.jsx("h1",{children:"Sign in"}),y.jsx("p",{children:"Use an approved administrator account. Storefront accounts do not receive dashboard access."})]}),M.includes("email")?y.jsxs("form",{className:"vertebr-login-form",onSubmit:R,children:[y.jsxs("label",{className:"vertebr-field",children:[y.jsx("span",{children:"Email"}),y.jsx("input",{type:"email",autoComplete:"username",required:!0,value:h,onChange:O=>m(O.target.value)})]}),y.jsxs("label",{className:"vertebr-field",children:[y.jsx("span",{children:"Password"}),y.jsx("input",{type:"password",autoComplete:"current-password",required:!0,value:g,onChange:O=>b(O.target.value)})]}),y.jsx("button",{className:"vertebr-btn vertebr-btn-primary",type:"submit",disabled:k,children:k?"Signing in…":"Sign in"})]}):null,M.includes("google")?y.jsx("button",{className:"vertebr-btn",type:"button",disabled:k,onClick:()=>{A()},children:"Continue with Google"}):null,x?y.jsx("p",{className:"vertebr-status","data-tone":"danger",children:x}):null]})}):y.jsx("div",{className:"vertebr-loading",children:"Checking admin session…"})}Gz.createRoot(document.getElementById("root")).render(y.jsx(E.StrictMode,{children:y.jsx(cne,{})}));
337
+ ${re.confirm}`:`${re.label}?`;window.confirm(we)&&Fn(K)},[x,S,Fn]);E.useEffect(()=>{Re(TM(l,t))},[l]),E.useEffect(()=>{bte(l,Ae)},[l,Ae]);const Ne=E.useCallback(()=>{const K=Y.current;if(!K){ve({overflow:!1,canLeft:!1,canRight:!1});return}const re=K.scrollWidth>K.clientWidth+2;ve({overflow:re,canLeft:re&&K.scrollLeft>2,canRight:re&&K.scrollLeft+K.clientWidth<K.scrollWidth-2})},[]);E.useEffect(()=>{const K=Y.current;if(!K)return;Ne();const re=()=>Ne();K.addEventListener("scroll",re,{passive:!0});const we=new ResizeObserver(Ne);we.observe(K);const Fe=K.querySelector("table");return Fe&&we.observe(Fe),()=>{K.removeEventListener("scroll",re),we.disconnect()}},[Ne,e.length,Ae]);const I=K=>{const re=Y.current;if(!re)return;const we=Math.max(220,Math.round(re.clientWidth*.55));re.scrollBy({left:K==="left"?-we:we,behavior:"smooth"})},P=E.useMemo(()=>Zt.map(K=>({id:K,label:t[K]?.label??ap(K)})),[Zt,t]),H=E.useMemo(()=>{const K=[];if(nn){const re=e.map(Fe=>Ar(Fe,o)).filter(Fe=>!!Fe),we=re.length>0&&re.every(Fe=>B.has(Fe));K.push({id:"_select",enableHiding:!1,header:()=>y.jsx("input",{type:"checkbox",className:"vertebr-row-check",checked:we,"aria-label":"Select all",onChange:()=>{L(Fe=>re.every(pt=>Fe.has(pt))?new Set:new Set(re))}}),cell:({row:Fe})=>{const pt=Ar(Fe.original,o);return pt?y.jsx("input",{type:"checkbox",className:"vertebr-row-check",checked:B.has(pt),"aria-label":"Select row",onClick:ln=>ln.stopPropagation(),onChange:()=>L(ln=>yte(ln,pt))}):null},size:44})}return K.push(...Zt.length===0?[{id:"raw",header:"Item",cell:({row:re})=>y.jsx(Ap,{fieldKey:"raw",value:re.original})}]:Zt.map(re=>{const we=t[re],Fe=/(image|img|photo|avatar|thumbnail|thumb|cover)/i.test(re)||/(image|img|photo)/i.test(we?.label??""),pt=Ie&&EM(re,we);return{id:re,accessorKey:re,header:we?.label??ap(re),meta:{fieldKey:re,field:we},cell:({row:ln,getValue:Ui})=>{if(pt){const $r=Ar(ln.original,o);if(!$r)return y.jsx(Ap,{fieldKey:re,field:we,value:Ui()});const al=Le[$r]?.[re]??lp(ln.original,re),qc=Le[$r]?.[re]!==void 0&&Le[$r]?.[re]!==lp(ln.original,re);return y.jsx("div",{className:"vertebr-visibility-check","data-dirty":qc?"true":void 0,onClick:na=>na.stopPropagation(),children:y.jsx(OO,{visible:al,dirty:qc,label:we?.label??ap(re),disabled:oe,onChange:na=>qt($r,re,na)})})}return y.jsx(Ap,{fieldKey:re,field:we,value:Ui()})},size:pt?88:Fe?220:void 0}})),K.push({id:"_actions",header:()=>y.jsx("span",{className:"vertebr-sr-only",children:"Actions"}),enableHiding:!1,cell:({row:re})=>{const we=Ar(re.original,o);return y.jsxs("div",{className:"vertebr-row-actions",onClick:Fe=>Fe.stopPropagation(),onKeyDown:Fe=>Fe.stopPropagation(),children:[y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>Z(re.original),children:"View"}),Ie?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>br(re.original),children:"Edit"}):null,we?Kt.map(([Fe,pt])=>y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:te!=null,onClick:()=>zr(Fe,[we]),children:pt.label},Fe)):null,Ze&&we?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-danger-quiet",onClick:()=>{window.confirm("Delete this row? This cannot be undone.")&&h?.(we)},children:"Delete"}):null]})}}),K},[t,Zt,e,B,nn,Ie,Ze,Kt,te,zr,h,o,Le,qt]),ie=Qee({data:e,columns:H,state:{columnVisibility:Ae},onColumnVisibilityChange:Re,getCoreRowModel:Zee()}),ae=O?Ar(O,o):null,ye=Object.fromEntries(Object.entries(t).filter(([,K])=>!K.readOnly||K.required).map(([K,re])=>[K,re.readOnly?{...re,readOnly:!1}:re])),ke=Object.fromEntries(Object.entries(ye).map(([K,re])=>[K,re.default??(re.type==="boolean"?!1:re.type==="number"?void 0:re.type==="file[]"?[]:"")]));if(O&&ae&&u){const K=Object.fromEntries(Object.entries(t).filter(([,we])=>!we.readOnly)),re=CM(O,o);return y.jsxs("div",{className:"vertebr-resource-edit",children:[y.jsxs("div",{className:"vertebr-resource-edit-head",children:[y.jsxs("div",{className:"vertebr-resource-edit-heading",children:[y.jsx("p",{className:"vertebr-resource-edit-eyebrow",children:"Editing record"}),y.jsx("h2",{children:re}),y.jsx("p",{className:"vertebr-resource-edit-id",children:ae})]}),y.jsx("button",{type:"button",className:"vertebr-btn",onClick:()=>Pr(),children:"Back"})]}),y.jsx(Vg,{variant:"record",schema:K,value:O,uploads:s,onUpload:k,galleryUpload:C,onListGallery:_,onUploadGallery:M,onSave:async we=>{await u(ae,we),Pr()}})]})}const _e=y.jsxs("div",{className:"vertebr-table-toolbar",children:[y.jsxs("div",{className:"vertebr-table-toolbar-start",children:[P.length>0?y.jsx(tte,{columns:P,visibility:Ae,onChange:Re}):null,vt?y.jsxs("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon",onClick:()=>ee(!0),children:[y.jsx(_te,{}),"Bulk upload"]}):null,Nn.length>0&&vr>0?y.jsxs(y.Fragment,{children:[y.jsxs("span",{className:"vertebr-count",children:[vr," visibility change",vr===1?"":"s"]}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-primary",disabled:oe,onClick:()=>{si()},children:oe?"Saving…":"Save visibility"}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:oe,onClick:()=>Te({}),children:"Discard"})]}):null,vn.map(([K,re])=>y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:te!=null,onClick:()=>ge(K),children:re.label},K)),nn&&B.size>0?y.jsxs(y.Fragment,{children:[y.jsxs("span",{className:"vertebr-count",children:[B.size," selected"]}),Kt.map(([K,re])=>y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:te!=null,onClick:()=>zr(K,[...B]),children:re.label},K)),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>L(new Set),children:"Clear"})]}):null]}),he.overflow?y.jsxs("div",{className:"vertebr-table-scroll-controls",role:"group","aria-label":"Scroll columns",children:[y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon vertebr-table-scroll-btn",disabled:!he.canLeft,onClick:()=>I("left"),"aria-label":"Scroll columns left",children:y.jsx(Ete,{})}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon vertebr-table-scroll-btn",disabled:!he.canRight,onClick:()=>I("right"),"aria-label":"Scroll columns right",children:y.jsx(Tte,{})})]}):null]}),Be=G&&s&&k?y.jsx(ete,{uploads:s,canCreate:Ue,fieldLabels:Object.fromEntries(Object.keys(s).map(K=>[K,t[K]?.label??ap(K)])),onClose:()=>ee(!1),onUpload:k,onCreateFromUploads:Ue&&f?async(K,re)=>{for(const we of re){const Fe=Ste(we.name??"Image");await f({[K]:we.url,name:Fe,title:Fe})}}:void 0}):null,it=j&&f?y.jsx(ate,{title:ft,schema:ye,value:ke,uploads:s,onUpload:k,galleryUpload:C,onListGallery:_,onUploadGallery:M,onClose:()=>z(!1),onCreate:f}):null,_t=U?kM(r[U.actionId])&&b?y.jsx(hte,{title:r[U.actionId]?.label??"Send email",count:U.rowIds.length,schema:c0(r[U.actionId]?.input??{}),submitLabel:te?"Sending…":U.rowIds.length===1?"Send":`Send to ${U.rowIds.length}`,onClose:()=>ue(null),onPreview:K=>b(U.rowIds[0],U.actionId,K),onSubmit:K=>xr(U.actionId,U.rowIds,K)}):r[U.actionId]?.input?y.jsx(dM,{title:r[U.actionId]?.label??"Run action",count:U.rowIds.length,schema:c0(r[U.actionId].input),submitLabel:te?"Sending…":U.rowIds.length===1?r[U.actionId]?.label??"Send":`Send to ${U.rowIds.length}`,onClose:()=>ue(null),onSubmit:K=>xr(U.actionId,U.rowIds,K)}):null:null,xn=Se&&x[Se]?.input?y.jsx(dM,{title:x[Se]?.label??"Run action",eyebrow:"This resource",schema:c0(x[Se].input),submitLabel:te?"Working…":"Run",onClose:()=>V(null),onSubmit:K=>Fn(Se,K)}):null,me=y.jsxs("div",{className:"vertebr-panel-head",children:[y.jsx("h2",{children:"Records"}),y.jsxs("div",{className:"vertebr-panel-head-actions",children:[Ue?y.jsxs("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet vertebr-btn-icon",onClick:()=>z(!0),children:[y.jsx(Cte,{}),ft]}):null,y.jsx("span",{className:"vertebr-count",children:e.length})]})]});return e.length===0?y.jsxs("div",{className:"vertebr-resource-body",children:[me,vt||P.length>0||vn.length>0?_e:null,y.jsx("div",{className:"vertebr-empty",children:"No rows yet."}),Be,it,_t,xn]}):y.jsxs("div",{className:"vertebr-resource-body",children:[me,_e,y.jsx("div",{className:"vertebr-table-wrap",ref:Y,"data-overflow":he.overflow?"true":void 0,"data-overflow-left":he.canLeft?"true":void 0,"data-overflow-right":he.canRight?"true":void 0,children:y.jsxs("table",{className:"vertebr-table",children:[y.jsx("thead",{children:ie.getHeaderGroups().map(K=>y.jsx("tr",{children:K.headers.map(re=>y.jsx("th",{className:re.column.id==="_actions"?"vertebr-col-actions":re.column.id==="_select"?"vertebr-col-select":void 0,children:re.isPlaceholder?null:bM(re.column.columnDef.header,re.getContext())},re.id))},K.id))}),y.jsx("tbody",{children:ie.getRowModel().rows.map(K=>y.jsx("tr",{className:"vertebr-table-row-clickable","data-selected":nn&&Ar(K.original,o)&&B.has(Ar(K.original,o))?"true":void 0,tabIndex:0,onClick:()=>Z(K.original),onKeyDown:re=>{(re.key==="Enter"||re.key===" ")&&(re.preventDefault(),Z(K.original))},children:K.getVisibleCells().map(re=>y.jsx("td",{className:re.column.id==="_actions"?"vertebr-col-actions":re.column.id==="_select"?"vertebr-col-select":void 0,children:bM(re.column.columnDef.cell,re.getContext())},re.id))},K.id))})]})}),q?y.jsx(gte,{schema:t,row:q,title:CM(q,o),canEdit:Ie,onClose:()=>Z(null),onEdit:()=>{br(q),Z(null)}}):null,_t,xn,Be,it]})}function Cte(){return y.jsxs("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[y.jsx("path",{d:"M12 5v14"}),y.jsx("path",{d:"M5 12h14"})]})}function Ete(){return y.jsx("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:y.jsx("path",{d:"m15 18-6-6 6-6"})})}function Tte(){return y.jsx("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:y.jsx("path",{d:"m9 18 6-6-6-6"})})}function _te(){return y.jsxs("svg",{className:"vertebr-btn-glyph",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[y.jsx("path",{d:"M16 5h6"}),y.jsx("path",{d:"M19 2v6"}),y.jsx("rect",{x:"3",y:"7",width:"14",height:"14",rx:"2"}),y.jsx("circle",{cx:"8.5",cy:"12.5",r:"1.5"}),y.jsx("path",{d:"m17 21-4.5-4.5L7 21"})]})}const Ate=[{id:"desktop",label:"Desktop"},{id:"mobile",label:"Mobile"}],tc=390,nc=844;function Rte({previewPath:t,controlId:e,draft:n}){const r=E.useRef(null),i=E.useRef(null),s=E.useRef(n),[o,l]=E.useState(!1),[u,f]=E.useState(!1),[h,m]=E.useState("desktop"),[g,b]=E.useState(1);s.current=n;const x=h==="mobile",S=E.useMemo(()=>_H(t,{controlId:e}),[t,e]),k=E.useCallback(()=>{const _=r.current?.contentWindow,M=s.current;!_||!M||MH(_,e,M)},[e]),C=E.useCallback(()=>{const _=r.current?.contentWindow;if(_)try{_.dispatchEvent(new Event("resize"))}catch{}},[]);return E.useEffect(()=>{l(!1),f(!1)},[S]),E.useEffect(()=>NH(_=>{const M=r.current?.contentWindow;!M||_!==M||(l(!0),k())}),[k,S]),E.useEffect(()=>{o&&k()},[n,o,k]),E.useEffect(()=>{if(!x){b(1);return}const _=i.current;if(!_||typeof ResizeObserver>"u")return;const M=()=>{const A=getComputedStyle(_),O=(Number.parseFloat(A.paddingLeft)||0)+(Number.parseFloat(A.paddingRight)||0),D=(Number.parseFloat(A.paddingTop)||0)+(Number.parseFloat(A.paddingBottom)||0),j=Math.max(0,_.clientWidth-O),z=Math.max(0,_.clientHeight-D),q=Math.min(1,j/tc,z/nc);b(Number.isFinite(q)&&q>0?q:1)};M();const R=new ResizeObserver(M);return R.observe(_),()=>R.disconnect()},[x]),E.useEffect(()=>{if(!o)return;const _=window.setTimeout(C,50);return()=>window.clearTimeout(_)},[h,g,o,C]),y.jsxs("div",{className:"vertebr-page-preview",children:[y.jsxs("div",{className:"vertebr-page-preview-meta",children:[y.jsxs("p",{children:[y.jsx("span",{children:"Preview"}),y.jsx("strong",{children:t})]}),y.jsxs("p",{children:[y.jsx("span",{children:"Status"}),y.jsx("strong",{children:u?"Unavailable":o?"Live":"Loading…"})]}),x?y.jsxs("p",{children:[y.jsx("span",{children:"Viewport"}),y.jsxs("strong",{children:[tc,"×",nc]})]}):null,y.jsx("div",{className:"vertebr-page-preview-viewports",role:"group","aria-label":"Preview viewport",children:Ate.map(_=>y.jsx("button",{type:"button","data-active":h===_.id?"true":void 0,onClick:()=>m(_.id),children:_.label},_.id))})]}),y.jsx("div",{ref:i,className:"vertebr-page-preview-stage","data-viewport":h,children:y.jsx("div",{className:"vertebr-page-preview-shell",style:x?{width:tc*g,height:nc*g}:void 0,children:y.jsx("div",{className:"vertebr-page-preview-frame",style:x?{width:tc,height:nc,transform:`scale(${g})`,transformOrigin:"top left"}:void 0,children:u?y.jsxs("div",{className:"vertebr-page-preview-empty",children:["Could not load host preview at ",t,"."]}):y.jsx("iframe",{ref:r,title:`Preview ${e}`,src:S,width:x?tc:void 0,height:x?nc:void 0,style:x?{width:tc,height:nc}:void 0,onLoad:()=>{l(!0),k(),C()},onError:()=>f(!0)})})})})]})}function Mte({client:t,configData:e,isPageSelection:n,previewPath:r,onConfigSaved:i,galleryPicker:s,fontLibraryPicker:o}){const[l,u]=E.useState(e.value),f=!!r,h=E.useCallback(g=>{u(g)},[]),m=y.jsx(Vg,{schema:e.schema,value:e.value,onChange:f?h:void 0,onSave:async g=>{const b=await t.setConfig(e.id,g);i(b)},...s,...o});return y.jsxs("div",{className:"vertebr-config-editor",children:[f?y.jsxs("div",{className:"vertebr-panel-head",children:[y.jsx("h2",{children:n?"Page content":e.label}),y.jsxs("span",{className:"vertebr-count",children:[Object.keys(e.schema).length," fields"]})]}):n?y.jsxs("div",{className:"vertebr-panel-head",children:[y.jsx("h2",{children:"Page content"}),y.jsxs("span",{className:"vertebr-count",children:[Object.keys(e.schema).length," fields"]})]}):null,f&&r?y.jsxs("div",{className:"vertebr-page-editor",children:[y.jsx("div",{className:"vertebr-page-editor-form",children:m}),y.jsx(Rte,{previewPath:r,controlId:e.id,draft:l??e.value})]}):m]})}function Nte({client:t,catalog:e,selection:n,onSelectionChange:r,authRequired:i,loading:s,isPageSelection:o,metricsData:l,metricsLoading:u,metricsRange:f,onMetricsRangeChange:h,onRefreshMetrics:m,galleryData:g,galleryLoading:b,onRefreshGallery:x,fontLibraryData:S,fontLibraryLoading:k,onRefreshFonts:C,emailsData:_,emailsLoading:M,onRefreshEmails:R,resourceData:A,onRefreshResource:O,configData:D,onConfigSaved:j,galleryPicker:z,fontLibraryPicker:q}){return e?y.jsx("div",{className:"vertebr-content",children:y.jsxs("section",{className:"vertebr-panel",children:[n?.kind==="overview"?y.jsx(lee,{label:l?.label??e.metrics?.label,windowLabel:l?.windowLabel,compareLabel:l?.compareLabel,metrics:l?.metrics??[],charts:l?.charts??[],range:f,onRangeChange:h,loading:u,onRefresh:()=>{m()}}):null,n?.kind==="gallery"&&g?y.jsx(WQ,{label:g.label,items:g.items,accept:g.accept,maxBytes:g.maxBytes,canDelete:g.canDelete,loading:b,onRefresh:()=>{x()},onUpload:async Z=>{Z.length===1&&Z[0]?await t.uploadGalleryFile(Z[0]):await t.uploadGalleryFiles(Z),await x()},onDelete:g.canDelete?async Z=>{await t.deleteGalleryItem(Z),await x()}:void 0}):null,n?.kind==="fontLibrary"&&S?y.jsx(GQ,{label:S.label,data:S,loading:k,onRefresh:()=>{C()},onUpload:async(Z,G)=>{for(const ee of Z)await t.uploadFontFile(ee,G);await C()},onImportGoogle:S.canImportGoogle?async Z=>{await t.importGoogleFont(Z),await C()}:void 0,onDelete:S.canDelete?async Z=>{await t.deleteFontItem(Z),await C()}:void 0}):null,n?.kind==="emails"&&_?y.jsx(HQ,{data:_,loading:M,tab:n.tab??"compose",onRefresh:()=>{R()},onLoadRecipients:async Z=>{const G=await t.listResource(Z,{fresh:!0}),ee=new Set,te=[];for(const fe of G.items){const B=String(fe.email??"").trim().toLowerCase();if(!B.includes("@")||ee.has(B))continue;ee.add(B);const L=String(fe.id??fe.uid??fe.slug??B),U=String(fe.displayName??fe.name??"").trim();te.push({email:B,id:L,...U?{label:U}:{}})}return te.sort((fe,B)=>fe.email.localeCompare(B.email)),te},onPreview:Z=>t.previewEmails(Z),onSend:async Z=>{const G=await t.sendEmails(Z);return{sent:G.sent,failed:G.failed}},onSchedule:_.canSchedule?async Z=>{await t.scheduleEmails(Z)}:void 0,onCancel:_.canSchedule?async Z=>{await t.cancelEmailCampaign(Z)}:void 0,onSaveLibrary:_.canLibrary?async Z=>{await t.saveEmailLibraryTemplate(Z)}:void 0,onDeleteLibrary:_.canLibrary?async Z=>{await t.deleteEmailLibraryTemplate(Z)}:void 0}):null,n?.kind==="resource"&&A?y.jsx(kte,{schema:A.schema,items:A.items,label:A.label,initialEditRowId:n.rowId&&n.id===A.id?n.rowId:void 0,onEditRowIdChange:Z=>{r?.({kind:"resource",id:A.id,rowId:Z??void 0})},permissions:A.permissions,actions:A.actions,collectionActions:A.collectionActions,uploads:A.uploads,storageKey:A.id,onUpdate:A.permissions.update?async(Z,G)=>{await t.updateResource(A.id,Z,G),await O()}:void 0,onCreate:A.permissions.create?async Z=>{await t.createResource(A.id,Z),await O()}:void 0,onDelete:A.permissions.delete?async Z=>{await t.deleteResource(A.id,Z),await O()}:void 0,onAction:async(Z,G,ee)=>{await t.runResourceAction(A.id,Z,G,ee)},onActionDone:O,onPreviewMail:async(Z,G,ee)=>t.previewResourceMail(A.id,Z,G,ee),onCollectionAction:async(Z,G)=>t.runCollectionAction(A.id,Z,G),onUpload:A.uploads?async(Z,G)=>{if(G.length===1&&G[0]){const te=await t.uploadResourceFile(A.id,Z,G[0]);return[{url:te.url,name:te.name}]}return(await t.uploadResourceFiles(A.id,Z,G)).files}:void 0,...z}):null,n?.kind==="config"&&D?y.jsx(Mte,{client:t,configData:D,isPageSelection:o,previewPath:e.configs.find(Z=>Z.id===D.id)?.previewPath,onConfigSaved:j,galleryPicker:z,fontLibraryPicker:q},D.id):null]})}):y.jsx("div",{className:"vertebr-content",children:y.jsx("section",{className:"vertebr-panel",children:y.jsx("div",{className:"vertebr-empty",children:i?"Authenticated access required for this environment.":s?"Loading…":"Unable to load catalog."})})})}function Ote({catalogLoaded:t,authRequired:e,selection:n,isPageSelection:r,hasPagePreview:i}){return!t&&e?"Provide an access token to load this environment.":n?.kind==="overview"?"Commerce, growth, and catalog for the selected environment.":n?.kind==="gallery"?"Browse and upload shared media assets.":n?.kind==="fontLibrary"?"Upload custom fonts or add Google Fonts to your library.":n?.kind==="emails"?"Send or schedule branded email to a list or specific people.":n?.kind==="resource"?n.rowId?"Edit this record — changes apply to the selected environment.":"Manage records scoped to the selected environment.":n?.kind==="config"?i?r?"Edit content — live storefront preview updates as you type.":"Edit settings — live storefront preview updates as you change typography and colors.":r?"Edit content for this page.":"Environment settings — changes apply to this environment only.":"Select a panel."}function Dte({activeLabel:t,activeEnv:e,catalogLoaded:n,authRequired:r,selection:i,isPageSelection:s,hasPagePreview:o,error:l,breadcrumbs:u}){return y.jsxs("header",{className:"vertebr-header",children:[y.jsxs("div",{children:[u.length>1?y.jsx("ol",{className:"vertebr-breadcrumbs",children:u.map((f,h)=>y.jsx("li",{children:h===u.length-1?y.jsx("strong",{children:f.label}):f.label},`${f.label}-${h}`))}):null,y.jsxs("div",{className:"vertebr-heading-row",children:[y.jsx("h1",{children:t}),e?y.jsx("span",{className:"vertebr-env-badge","data-tone":e.tone??"neutral",children:e.label}):null]}),y.jsx("p",{children:Ote({catalogLoaded:n,authRequired:r,selection:i,isPageSelection:s,hasPagePreview:o})})]}),l?y.jsx("span",{className:"vertebr-status","data-tone":"danger",children:l}):null]})}function Ite(){const{state:t}=oO();return t.visible?y.jsxs("div",{className:"vertebr-savebar","data-tone":t.tone,children:[y.jsx("div",{className:"vertebr-savebar-message",children:t.saving?"Saving…":t.message??(t.isDirty?"Unsaved changes":"Saved")}),y.jsxs("div",{className:"vertebr-savebar-actions",children:[t.onDiscard&&t.isDirty?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",disabled:t.saving,onClick:t.onDiscard,children:"Discard"}):null,t.onSave?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-primary",disabled:t.saving||!t.isDirty,onClick:()=>{t.onSave?.()},children:"Save"}):null]})]}):null}function ta(t){return{width:18,height:18,viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,...t}}function jte(t){return y.jsx("svg",{...ta(t),children:y.jsx("path",{d:"M3 8.5 10 2.5l7 6v8.5a1 1 0 0 1-1 1h-4.5v-5H8.5v5H4a1 1 0 0 1-1-1V8.5z"})})}function Lte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("path",{d:"M3 6.5 10 2.5l7 4v9H3v-9z"}),y.jsx("path",{d:"M7 11.5h6M7 14h4"})]})}function Pte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("rect",{x:"2.5",y:"4.5",width:"15",height:"11",rx:"1.5"}),y.jsx("path",{d:"m3.5 13 3.5-3.5 2.5 2.5L12.5 9l4 4.5"}),y.jsx("circle",{cx:"7",cy:"7.5",r:"1",fill:"currentColor",stroke:"none"})]})}function zte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("path",{d:"M5 16.5V5.5h10M7.5 16.5V9h5v7.5"}),y.jsx("path",{d:"M7 5.5h6"})]})}function $te(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("rect",{x:"2.5",y:"4.5",width:"15",height:"11",rx:"1.5"}),y.jsx("path",{d:"m3.5 6.5 6.5 4.5 3.5 2.5 6.5-2.5 6.5 4.5"})]})}function Bte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("path",{d:"M6 3.5h5.5L16 8v8.5a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-12a1 1 0 0 1 1-1z"}),y.jsx("path",{d:"M11.5 3.5V8H16"})]})}function Vte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("circle",{cx:"10",cy:"10",r:"2.25"}),y.jsx("path",{d:"M10 2.5v2M10 15.5v2M3.5 10h2M14.5 10h2M5.4 5.4l1.4 1.4M13.2 13.2l1.4 1.4M5.4 14.6l1.4-1.4M13.2 6.8l1.4-1.4"})]})}function Hte(t){return y.jsxs("svg",{...ta(t),children:[y.jsx("circle",{cx:"9",cy:"9",r:"4.75"}),y.jsx("path",{d:"M13 13l3.5 3.5"})]})}function ka(t){return t==="overview"?jte:t.startsWith("resource:")?Lte:t==="gallery"?Pte:t==="fonts"?zte:t==="emails"?$te:t.startsWith("config:")?Bte:Vte}function Ute({item:t,collapsed:e}){const n=!!t.children?.length,r=t.children?.some(u=>u.active)??!1,i=t.active||r,[s,o]=E.useState(i),l=t.icon??ka(t.key);return E.useEffect(()=>{i&&o(!0)},[i]),n?y.jsxs("div",{className:"vertebr-nav-item","data-has-children":"true","data-open":s||void 0,children:[y.jsxs("div",{className:"vertebr-nav-parent",children:[y.jsxs("button",{type:"button",className:"vertebr-nav-parent-label","data-active":i&&!r,"data-section":i||void 0,title:e?t.label:void 0,onClick:()=>{o(!0),t.onSelect()},children:[y.jsx(l,{className:"vertebr-nav-icon"}),y.jsx("span",{className:"vertebr-nav-label-text",children:t.label})]}),e?null:y.jsx("button",{type:"button",className:"vertebr-nav-parent-toggle","aria-label":s?`Collapse ${t.label}`:`Expand ${t.label}`,"aria-expanded":s,onClick:()=>o(u=>!u),children:y.jsx("span",{"aria-hidden":"true",children:s?"▾":"▸"})})]}),s&&!e?y.jsx("div",{className:"vertebr-nav-sub",role:"group",children:t.children.map(u=>y.jsx("button",{type:"button",className:"vertebr-nav-subitem","data-active":u.active,onClick:()=>{o(!0),u.onSelect()},children:u.label},u.key))}):null]}):y.jsxs("button",{type:"button","data-active":t.active,title:e?t.label:void 0,onClick:t.onSelect,children:[y.jsx(l,{className:"vertebr-nav-icon"}),y.jsx("span",{className:"vertebr-nav-label-text",children:t.label})]})}function Fte({navGroups:t,collapsed:e}){return y.jsx("aside",{className:"vertebr-sidebar","data-collapsed":e||void 0,children:y.jsx("div",{className:"vertebr-sidebar-top",children:y.jsx("nav",{className:"vertebr-nav",children:t.map(n=>y.jsxs("div",{className:"vertebr-nav-group",children:[e?null:y.jsx("div",{className:"vertebr-nav-label",children:n.label}),n.items.map(r=>y.jsx(Ute,{item:r,collapsed:e},r.key))]},n.label))})})})}function qte(){const{toasts:t,dismiss:e}=lO();return t.length?y.jsx("div",{className:"vertebr-toast-stack","aria-live":"polite",children:t.map(n=>y.jsxs("div",{className:"vertebr-toast","data-tone":n.tone,role:"status",children:[y.jsx("span",{children:n.message}),y.jsx("button",{type:"button",className:"vertebr-toast-dismiss","aria-label":"Dismiss",onClick:()=>e(n.id),children:"×"})]},n.id))}):null}function Gte({environments:t,value:e,onChange:n}){const r=t.find(i=>i.id===e);return y.jsxs(Mg,{value:e,onValueChange:n,children:[y.jsxs(Ng,{className:"vertebr-select-trigger","aria-label":"Environment","data-tone":r?.tone??"neutral",children:[y.jsxs("span",{className:"vertebr-select-value",children:[y.jsx("span",{className:"vertebr-select-dot","data-tone":r?.tone??"neutral"}),y.jsx(Og,{placeholder:"Select environment"})]}),y.jsx(Dg,{className:"vertebr-select-icon",children:y.jsx(Wte,{})})]}),y.jsx(Ig,{children:y.jsx(jg,{className:"vertebr-select-content",position:"popper",sideOffset:6,children:y.jsx(Pg,{className:"vertebr-select-viewport",children:t.map(i=>y.jsxs(zg,{value:i.id,className:"vertebr-select-item","data-tone":i.tone??"neutral",children:[y.jsxs("span",{className:"vertebr-select-value",children:[y.jsx("span",{className:"vertebr-select-dot","data-tone":i.tone??"neutral"}),y.jsx($g,{children:i.label})]}),i.auth?.required?y.jsx("span",{className:"vertebr-env-lock",children:"auth"}):null,y.jsx(Bg,{className:"vertebr-select-check",children:y.jsx(Kte,{})})]},i.id))})})})]})}function Wte(){return y.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12","aria-hidden":"true",children:y.jsx("path",{d:"M2.5 4.5 6 8l3.5-3.5",fill:"none",stroke:"currentColor",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"})})}function Kte(){return y.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12","aria-hidden":"true",children:y.jsx("path",{d:"M2.5 6.2 4.8 8.5 9.5 3.8",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})}function Zte({theme:t,onChange:e}){return y.jsx("div",{className:"vertebr-theme",children:y.jsxs("div",{className:"vertebr-theme-toggle",role:"group","aria-label":"Appearance",children:[y.jsxs("button",{type:"button",className:"vertebr-theme-option","data-active":t==="light","aria-pressed":t==="light",onClick:()=>e("light"),children:[y.jsx(Yte,{}),"Light"]}),y.jsxs("button",{type:"button",className:"vertebr-theme-option","data-active":t==="dark","aria-pressed":t==="dark",onClick:()=>e("dark"),children:[y.jsx(Xte,{}),"Dark"]})]})})}function Yte(){return y.jsxs("svg",{className:"vertebr-theme-icon",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[y.jsx("circle",{cx:"12",cy:"12",r:"4"}),y.jsx("path",{d:"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"})]})}function Xte(){return y.jsx("svg",{className:"vertebr-theme-icon",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:y.jsx("path",{d:"M21 14.5A8.5 8.5 0 0 1 9.5 3 7 7 0 1 0 21 14.5z"})})}function Jte({brand:t,envList:e,environment:n,onEnvironmentChange:r,activeEnv:i,authUserLabel:s,onSignOut:o,getAccessToken:l,authRequired:u,token:f,tokenDraft:h,onTokenDraftChange:m,onSaveToken:g,onClearToken:b,theme:x,onThemeChange:S,sidebarCollapsed:k,onToggleSidebar:C}){return y.jsxs("header",{className:"vertebr-topbar",children:[y.jsxs("div",{className:"vertebr-topbar-start",children:[y.jsx("button",{type:"button",className:"vertebr-topbar-toggle","aria-label":k?"Expand sidebar":"Collapse sidebar",onClick:C,children:"☰"}),y.jsx("strong",{className:"vertebr-topbar-brand",children:t}),e.length>0?y.jsxs("div",{className:"vertebr-topbar-env",children:[y.jsx(Gte,{environments:e,value:n,onChange:r}),i?y.jsx("span",{className:"vertebr-env-badge","data-tone":i.tone??"neutral",children:i.label}):null]}):null]}),y.jsxs("div",{className:"vertebr-topbar-search","aria-hidden":"true",children:[y.jsx(Hte,{}),y.jsx("span",{children:"Search admin"}),y.jsx("kbd",{children:"⌘K"})]}),y.jsxs("div",{className:"vertebr-topbar-end",children:[!l&&(u||f)?y.jsxs("div",{className:"vertebr-topbar-token",children:[y.jsx("input",{className:"vertebr-auth-input",type:"password",placeholder:"Access token",value:h,onChange:_=>m(_.target.value),autoComplete:"off"}),y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:g,children:"Use"}),f?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:b,children:"Clear"}):null]}):null,l&&s?y.jsx("span",{className:"vertebr-topbar-user",children:s}):null,o?y.jsx("button",{type:"button",className:"vertebr-btn vertebr-btn-quiet",onClick:()=>{o()},children:"Sign out"}):null,y.jsx(Zte,{theme:x,onChange:S})]})]})}function Qte(t,e){const n=[{label:"Home",href:"/overview"}];if(!t||!e)return n;switch(t.kind){case"overview":return[...n,{label:e.metrics?.label??"Overview"}];case"gallery":return[...n,{label:e.gallery?.label??"Gallery"}];case"fontLibrary":return[...n,{label:e.fontLibrary?.label??"Fonts"}];case"emails":return[...n,{label:e.emails?.label??"Email"},{label:t.tab==="templates"?"Templates":t.tab==="activity"?"Activity":"Compose"}];case"resource":{const r=e.resources.find(s=>s.id===t.id),i=[...n,{label:r?.group??"Products",href:void 0},{label:r?.label??t.id}];return t.rowId&&i.push({label:t.rowId}),i}case"config":{const r=e.configs.find(s=>s.id===t.id),i=r?.group??(r?.section==="page"?"Pages":"Settings");return[...n,{label:i},{label:r?.label??t.id}]}default:return n}}const ene=new Set(["compose","templates","activity"]);function tne(t){const e=(t||"/admin/api").replace(/\/$/,"")||"/admin/api";return e.endsWith("/api")?e.slice(0,-4)||"/":e}function E2(t){return!t||t==="/"?"":t.replace(/\/$/,"")}function nne(t,e){if(!t)return"/overview";switch(t.kind){case"overview":return"/overview";case"gallery":return"/gallery";case"fontLibrary":return"/fonts";case"emails":return`/emails/${t.tab??"compose"}`;case"resource":return t.rowId?`/resources/${encodeURIComponent(t.id)}/${encodeURIComponent(t.rowId)}`:`/resources/${encodeURIComponent(t.id)}`;case"config":return`/${e.configs.find(i=>i.id===t.id)?.section==="page"?"pages":"config"}/${encodeURIComponent(t.id)}`;default:return"/overview"}}function rne(t,e,n){const r=E2(t),i=nne(e,n);return`${r}${i}`||"/"}function ine(t){return t&&ene.has(t)?t:"compose"}function v0(t,e,n){const r=E2(e);let i=t||"/";if(r){if(i===r||i===`${r}/`)return null;(i.startsWith(`${r}/`)||i.startsWith(r))&&(i=i.slice(r.length))}const s=i.replace(/^\//,"").split("/").filter(Boolean);if(s.length===0)return null;const[o,...l]=s;if(o==="overview")return{kind:"overview"};if(o==="gallery")return{kind:"gallery"};if(o==="fonts")return{kind:"fontLibrary"};if(o==="emails")return{kind:"emails",tab:ine(l[0])};if(o==="resources"&&l[0]){const u=decodeURIComponent(l[0]);return n&&!n.resources.some(f=>f.id===u)?null:l[1]?{kind:"resource",id:u,rowId:decodeURIComponent(l[1])}:{kind:"resource",id:u}}if((o==="pages"||o==="config")&&l[0]){const u=decodeURIComponent(l[0]);if(n){const f=n.configs.find(h=>h.id===u);if(!f||o==="pages"&&f.section!=="page"||o==="config"&&f.section==="page")return null}return{kind:"config",id:u}}return null}function Di(t){if(t.metrics)return{kind:"overview"};const e=t.resources[0];if(e)return{kind:"resource",id:e.id};if(t.gallery)return{kind:"gallery"};if(t.fontLibrary)return{kind:"fontLibrary"};if(t.emails)return{kind:"emails",tab:"compose"};const n=t.configs[0];return n?{kind:"config",id:n.id}:{kind:"overview"}}function _M(t,e){return t?t.kind==="overview"?e.metrics?t:Di(e):t.kind==="gallery"?e.gallery?t:Di(e):t.kind==="fontLibrary"?e.fontLibrary?t:Di(e):t.kind==="emails"?e.emails?t:Di(e):t.kind==="resource"?e.resources.some(n=>n.id===t.id)?t:Di(e):t.kind==="config"&&e.configs.some(n=>n.id===t.id)?t:Di(e):Di(e)}function sne(t,e){return t===e?!0:!t||!e?t===e:t.kind!==e.kind?!1:t.kind==="overview"||t.kind==="gallery"||t.kind==="fontLibrary"?!0:t.kind==="emails"&&e.kind==="emails"?(t.tab??"compose")===(e.tab??"compose"):t.kind==="resource"&&e.kind==="resource"?t.id===e.id&&(t.rowId??"")===(e.rowId??""):t.kind==="config"&&e.kind==="config"?t.id===e.id:!1}function one(t){const e=[],n=new Map;for(const r of t){const i=r.group.trim()||"Resources";n.has(i)||(n.set(i,[]),e.push(i)),n.get(i).push(r)}return e.map(r=>({label:r,items:n.get(r)}))}function x0(t){try{return localStorage.getItem(t)}catch{return null}}function cp(t,e){try{localStorage.setItem(t,e)}catch{}}function AM(t){try{localStorage.removeItem(t)}catch{}}function ane({apiBase:t="/admin/api",basePath:e,title:n="Control plane",envStorageKey:r="vertebr:env",tokenStorageKey:i="vertebr:token",themeStorageKey:s="vertebr:theme",metricsRangeStorageKey:o="vertebr:metrics-range",getAccessToken:l,authUserLabel:u,onSignOut:f}){const h=e??tne(t),{theme:m,setTheme:g}=BH(s),[b,x]=E.useState(()=>x0(r)??""),[S,k]=E.useState(()=>x0(i)??""),[C,_]=E.useState(S),M=E.useCallback(()=>b,[b]),R=E.useMemo(()=>R0({apiBase:t,getEnvironment:M,getAccessToken:l??(()=>S||null)}),[t,M,l,S]),[A,O]=E.useState(null),[D,j]=E.useState(null),[z,q]=E.useState(()=>typeof window>"u"?{kind:"overview"}:v0(window.location.pathname,h,null)??{kind:"overview"}),[Z,G]=E.useState(null),[ee,te]=E.useState(null),[fe,B]=E.useState(null),[L,U]=E.useState(!1),[ue,Se]=E.useState(()=>UH(x0(o))),[V,Y]=E.useState(null),[he,ve]=E.useState(!1),[Ae,Re]=E.useState(null),[Le,Te]=E.useState(!1),[oe,pe]=E.useState(null),[Ie,Ue]=E.useState(!1),[Ze,ft]=E.useState(null),[vt,Kt]=E.useState(!0),[vn,Zt]=E.useState(!1),Nn=E.useRef(!0),nn=E.useCallback((me,K,re=!1)=>{if(typeof window>"u"||!me)return;const we=rne(h,me,K);if(window.location.pathname===we)return;const Fe=re?"replaceState":"pushState";window.history[Fe](null,"",we)},[h]);E.useEffect(()=>{let me=!1;return(async()=>{try{const K=await R.getBootstrap();if(me)return;O(K);const re=K.environments.map(Fe=>Fe.id),we=b&&re.includes(b)&&b||K.defaultEnvironment;we!==b&&(x(we),cp(r,we))}catch(K){me||ft(K instanceof Error?K.message:"Failed to load bootstrap")}})(),()=>{me=!0}},[R,b,r]),E.useEffect(()=>{if(!A||!b)return;let me=!1;return(async()=>{try{Kt(!0),ft(null);const K=await R.getCatalog();if(me)return;j(K);const re=v0(window.location.pathname,h,K),we=_M(re??Di(K),K);Nn.current=!0,q(we),nn(we,K,!0)}catch(K){me||(j(null),ft(K instanceof Error?K.message:"Failed to load catalog"))}finally{me||Kt(!1)}})(),()=>{me=!0}},[R,A,b,h,nn]),E.useEffect(()=>{if(!(!D||!z)){if(Nn.current){Nn.current=!1;return}nn(z,D,!1)}},[z,D,nn]),E.useEffect(()=>{const me=()=>{if(!D)return;const K=v0(window.location.pathname,h,D),re=_M(K??Di(D),D);Nn.current=!0,q(we=>sne(we,re)?we:re)};return window.addEventListener("popstate",me),()=>window.removeEventListener("popstate",me)},[D,h]),E.useEffect(()=>{if(!z||!D)return;let me=!1;return(async()=>{try{if(ft(null),z.kind==="overview"){U(!0);const K=await R.getMetrics({range:ue});me||(B(K),G(null),te(null),Y(null),Re(null),pe(null))}else if(z.kind==="gallery"){ve(!0);const K=await R.getGallery();me||(Y(K),G(null),te(null),B(null),Re(null),pe(null))}else if(z.kind==="fontLibrary"){Te(!0);const K=await R.getFonts();me||(Re(K),G(null),te(null),B(null),Y(null),pe(null))}else if(z.kind==="emails"){Ue(!0);const K=await R.getEmails();me||(pe(K),G(null),te(null),B(null),Y(null),Re(null))}else if(z.kind==="resource"){const K=await R.listResource(z.id);me||(G(K),te(null),B(null),Y(null),Re(null),pe(null))}else{const K=await R.getConfig(z.id);if(!me&&(te(K),G(null),B(null),Y(null),pe(null),D.fontLibrary)){Te(!0);try{const re=await R.getFonts();me||Re(re)}finally{me||Te(!1)}}}}catch(K){me||ft(K instanceof Error?K.message:"Failed to load panel")}finally{me||(U(!1),ve(!1),Te(!1),Ue(!1))}})(),()=>{me=!0}},[R,z,D,b,ue]);const br=E.useCallback(async()=>{if(z?.kind!=="resource")return;const me=await R.listResource(z.id);G(me)},[R,z]),Pr=E.useCallback(async()=>{U(!0);try{const me=await R.getMetrics({range:ue,fresh:!0});B(me)}finally{U(!1)}},[R,ue]),vr=E.useCallback(me=>{Se(me),cp(o,me)},[o]),qt=E.useCallback(async()=>{ve(!0);try{const me=await R.getGallery({fresh:!0});Y(me)}finally{ve(!1)}},[R]),si=E.useCallback(async()=>{Te(!0);try{const me=await R.getFonts({fresh:!0});Re(me)}finally{Te(!1)}},[R]),xr=E.useCallback(async()=>(await R.getFonts()).items,[R]),zr=E.useCallback(async()=>{Ue(!0);try{const me=await R.getEmails({fresh:!0});pe(me)}finally{Ue(!1)}},[R]),Fn=E.useCallback(async()=>(await R.getGallery()).items,[R]),ge=E.useCallback(async me=>{if(me.length===1&&me[0]){const{item:re}=await R.uploadGalleryFile(me[0]);return[re]}const{items:K}=await R.uploadGalleryFiles(me);return K},[R]),Ne=D?.gallery?{galleryUpload:{accept:D.gallery.accept,maxBytes:D.gallery.maxBytes},onListGallery:Fn,onUploadGallery:ge}:{},I=D?.fontLibrary?{fonts:Ae?.items??[],fontsLoading:Le,onListFonts:xr,onRefreshFonts:si}:{},P=D?.environments??A?.environments??[],H=P.find(me=>me.id===b),ie=!!H?.auth?.required,ae=z?.kind==="config"?D?.configs.find(me=>me.id===z.id):void 0,ye=ae?.section==="page",ke=!!ae?.previewPath,_e=me=>{if(me===b)return;const K=P.find(re=>re.id===me);K?.tone==="danger"&&!window.confirm(`Switch to ${K.label}? Writes will affect this environment.`)||(cp(r,me),x(me),G(null),te(null),Y(null),Re(null))},Be=()=>{const me=C.trim();k(me),me?cp(i,me):AM(i)},it=()=>{k(""),_(""),AM(i)},_t=E.useMemo(()=>{if(!D)return[];const me=[];D.metrics&&me.push({key:"overview",group:D.metrics.group??"Analytics",label:D.metrics.label,icon:ka("overview"),active:z?.kind==="overview",onSelect:()=>q({kind:"overview"})});for(const K of D.resources)me.push({key:`resource:${K.id}`,group:K.group??"Resources",label:K.label,icon:ka(`resource:${K.id}`),active:z?.kind==="resource"&&z.id===K.id,onSelect:()=>q({kind:"resource",id:K.id})});if(D.gallery&&me.push({key:"gallery",group:D.gallery.group??"Resources",label:D.gallery.label,icon:ka("gallery"),active:z?.kind==="gallery",onSelect:()=>q({kind:"gallery"})}),D.fontLibrary&&me.push({key:"fonts",group:D.fontLibrary.group??"Resources",label:D.fontLibrary.label,icon:ka("fonts"),active:z?.kind==="fontLibrary",onSelect:()=>q({kind:"fontLibrary"})}),D.emails){const K=z?.kind==="emails"?z.tab??"compose":null;me.push({key:"emails",group:D.emails.group??"Growth",label:D.emails.label,icon:ka("emails"),active:z?.kind==="emails",onSelect:()=>q({kind:"emails",tab:"compose"}),children:[{key:"emails:compose",label:"Compose",active:K==="compose",onSelect:()=>q({kind:"emails",tab:"compose"})},{key:"emails:templates",label:"Templates",active:K==="templates",onSelect:()=>q({kind:"emails",tab:"templates"})},{key:"emails:activity",label:"Activity",active:K==="activity",onSelect:()=>q({kind:"emails",tab:"activity"})}]})}for(const K of D.configs){const re=K.section==="page"?"Pages":"Config";me.push({key:`config:${K.id}`,group:K.group??re,label:K.label,icon:ka(`config:${K.id}`),active:z?.kind==="config"&&z.id===K.id,onSelect:()=>q({kind:"config",id:K.id})})}return one(me)},[D,z]);if(!A&&vt)return y.jsx("div",{className:"vertebr-loading",children:"Loading Vertebr…"});if(Ze&&!A)return y.jsx("div",{className:"vertebr-error",children:Ze});const xn=z?.kind==="overview"?D?.metrics?.label??"Overview":z?.kind==="gallery"?D?.gallery?.label??"Gallery":z?.kind==="fontLibrary"?D?.fontLibrary?.label??"Font Library":z?.kind==="emails"?D?.emails?.label??"Emails":z?.kind==="resource"?D?.resources.find(me=>me.id===z.id)?.label:z?.kind==="config"?D?.configs.find(me=>me.id===z.id)?.label:null;return y.jsx(pU,{children:y.jsx(mU,{children:y.jsxs("div",{className:"vertebr-root","data-env":b,"data-sidebar-collapsed":vn||void 0,children:[y.jsx(Jte,{brand:A?.brand??D?.brand??"Vertebr",envList:P,environment:b,onEnvironmentChange:_e,activeEnv:H,authUserLabel:u,onSignOut:f,getAccessToken:l,authRequired:ie,token:S,tokenDraft:C,onTokenDraftChange:_,onSaveToken:Be,onClearToken:it,theme:m,onThemeChange:g,sidebarCollapsed:vn,onToggleSidebar:()=>Zt(me=>!me)}),y.jsx(Fte,{navGroups:_t,collapsed:vn}),y.jsxs("main",{className:"vertebr-main",children:[y.jsx(Dte,{activeLabel:xn??(D?"Dashboard":"Sign in"),activeEnv:H,catalogLoaded:!!D,authRequired:ie,selection:z,isPageSelection:ye,hasPagePreview:ke,error:Ze,breadcrumbs:Qte(z,D)}),y.jsx(Nte,{client:R,catalog:D,selection:z,onSelectionChange:q,authRequired:ie,loading:vt,isPageSelection:ye,metricsData:fe,metricsLoading:L,metricsRange:ue,onMetricsRangeChange:vr,onRefreshMetrics:Pr,galleryData:V,galleryLoading:he,onRefreshGallery:qt,fontLibraryData:Ae,fontLibraryLoading:Le,onRefreshFonts:si,emailsData:oe,emailsLoading:Ie,onRefreshEmails:zr,resourceData:Z,onRefreshResource:br,configData:ee,onConfigSaved:te,galleryPicker:Ne,fontLibraryPicker:I}),y.jsx(Ite,{})]}),y.jsx(qte,{})]})})})}E.createContext(null);E.createContext(null);const w0="/admin/api";function lne(t){const e=t.environments.map(r=>r.auth?.client).find(r=>r?.provider==="firebase");if(!e)return null;const n=pB().length?UM():HM(e.config);return PV(n)}function cne(){const[t,e]=E.useState(null),[n,r]=E.useState(null),[i,s]=E.useState(null),[o,l]=E.useState(!1),[u,f]=E.useState("idle"),[h,m]=E.useState(""),[g,b]=E.useState(""),[x,S]=E.useState(null),[k,C]=E.useState(!1),_=E.useMemo(()=>R0({apiBase:w0,getEnvironment:()=>""}),[]);E.useEffect(()=>{let O=!1;return _.getBootstrap().then(D=>{if(O)return;e(D);const j=lne(D);r(j),j||l(!0)}).catch(D=>{O||(S(D instanceof Error?D.message:"Could not load auth"),l(!0))}),()=>{O=!0}},[_]),E.useEffect(()=>{if(n)return T3(n,O=>{s(O),f(O?"checking":"idle"),l(!0)})},[n]),E.useEffect(()=>{if(!t||!i)return;let O=!1;return(async()=>{f("checking");const D=localStorage.getItem("vertebr:env"),j=[...D?[D]:[],...t.environments.map(z=>z.id)].filter((z,q,Z)=>Z.indexOf(z)===q);for(const z of j)try{await R0({apiBase:w0,getEnvironment:()=>z,getAccessToken:()=>i.getIdToken()}).getCatalog(),O||(localStorage.setItem("vertebr:env",z),f("allowed"));return}catch{}O||f("denied")})(),()=>{O=!0}},[t,i]);const M=t?.environments.map(O=>O.auth?.client).find(O=>O?.provider==="firebase")?.methods??["email"],R=async O=>{if(O.preventDefault(),!!n){C(!0),S(null);try{await k3(n,h.trim(),g)}catch(D){S(D instanceof Error?D.message:"Sign-in failed")}finally{C(!1)}}},A=async()=>{if(n){C(!0),S(null);try{await G3(n,new vs)}catch(O){S(O instanceof Error?O.message:"Sign-in failed")}finally{C(!1)}}};return o?!n||!t?y.jsx("div",{className:"vertebr-error",children:x??"No browser auth provider is configured."}):i?u==="checking"||u==="idle"?y.jsx("div",{className:"vertebr-loading",children:"Checking admin access…"}):u==="denied"?y.jsx("main",{className:"vertebr-login",children:y.jsxs("section",{className:"vertebr-login-card",children:[y.jsxs("div",{className:"vertebr-brand",children:[y.jsx("strong",{children:t.brand}),y.jsx("span",{children:"Access denied"})]}),y.jsxs("div",{children:[y.jsx("h1",{children:"Administrator access required"}),y.jsxs("p",{children:["Signed in as ",i.email??i.uid,", but this account is not approved for any Vertebr environment."]})]}),y.jsx("button",{className:"vertebr-btn",type:"button",onClick:()=>{PT(n)},children:"Sign out"})]})}):y.jsx(ane,{apiBase:w0,title:"Owner control plane",getAccessToken:()=>i.getIdToken(),authUserLabel:i.email??i.uid,onSignOut:()=>PT(n)}):y.jsx("main",{className:"vertebr-login",children:y.jsxs("section",{className:"vertebr-login-card",children:[y.jsxs("div",{className:"vertebr-brand",children:[y.jsx("strong",{children:t.brand}),y.jsx("span",{children:"Admin access"})]}),y.jsxs("div",{children:[y.jsx("h1",{children:"Sign in"}),y.jsx("p",{children:"Use an approved administrator account. Storefront accounts do not receive dashboard access."})]}),M.includes("email")?y.jsxs("form",{className:"vertebr-login-form",onSubmit:R,children:[y.jsxs("label",{className:"vertebr-field",children:[y.jsx("span",{children:"Email"}),y.jsx("input",{type:"email",autoComplete:"username",required:!0,value:h,onChange:O=>m(O.target.value)})]}),y.jsxs("label",{className:"vertebr-field",children:[y.jsx("span",{children:"Password"}),y.jsx("input",{type:"password",autoComplete:"current-password",required:!0,value:g,onChange:O=>b(O.target.value)})]}),y.jsx("button",{className:"vertebr-btn vertebr-btn-primary",type:"submit",disabled:k,children:k?"Signing in…":"Sign in"})]}):null,M.includes("google")?y.jsx("button",{className:"vertebr-btn",type:"button",disabled:k,onClick:()=>{A()},children:"Continue with Google"}):null,x?y.jsx("p",{className:"vertebr-status","data-tone":"danger",children:x}):null]})}):y.jsx("div",{className:"vertebr-loading",children:"Checking admin session…"})}Gz.createRoot(document.getElementById("root")).render(y.jsx(E.StrictMode,{children:y.jsx(cne,{})}));
@@ -1 +1 @@
1
- :root{--vb-space-100: .25rem;--vb-space-200: .5rem;--vb-space-300: .75rem;--vb-space-400: 1rem;--vb-space-500: 1.25rem;--vb-space-600: 1.5rem;--vb-space-800: 2rem;--vb-space-1000: 2.5rem;--vb-space-1200: 3rem;--vb-font-size-75: .75rem;--vb-font-size-100: .8125rem;--vb-font-size-200: .875rem;--vb-font-size-300: 1rem;--vb-font-size-400: 1.125rem;--vb-font-size-500: 1.375rem;--vb-font-size-600: 1.75rem;--vb-font-weight-regular: 400;--vb-font-weight-medium: 500;--vb-font-weight-semibold: 600;--vb-line-height-tight: 1.2;--vb-line-height-normal: 1.45;--vb-line-height-loose: 1.6;--vb-radius-xs: 4px;--vb-radius-sm: 6px;--vb-radius-md: 8px;--vb-radius-lg: 12px;--vb-radius-full: 999px;--vb-shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--vb-shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--vb-shadow-lg: 0 12px 32px rgba(0, 0, 0, .12);--vb-topbar-height: 3.25rem;--vb-sidebar-width: 240px;--vb-sidebar-width-collapsed: 4rem;--vb-savebar-height: 3.5rem;--vb-duration-fast: .12s;--vb-duration-normal: .2s;--vb-ease: cubic-bezier(.4, 0, .2, 1);--vb-font: "Inter", "IBM Plex Sans", system-ui, sans-serif;--vb-mono: "IBM Plex Mono", ui-monospace, monospace}:root,[data-vb-theme=dark]{color-scheme:dark;--vb-bg: #1a1a1a;--vb-bg-deep: #141414;--vb-bg-elevated: #242424;--vb-bg-muted: #2e2e2e;--vb-bg-hover: #383838;--vb-bg-subdued: #303030;--vb-border: #424242;--vb-border-subdued: #353535;--vb-border-strong: #5c5c5c;--vb-text: #f3f3f3;--vb-text-muted: #a8a8a8;--vb-text-subtle: #7a7a7a;--vb-text-secondary: #b5b5b5;--vb-accent: #008060;--vb-accent-dim: #006e52;--vb-accent-soft: rgba(0, 128, 96, .14);--vb-accent-contrast: #ffffff;--vb-interactive: #5c9eff;--vb-interactive-soft: rgba(92, 158, 255, .12);--vb-danger: #e51c00;--vb-danger-soft: rgba(229, 28, 0, .12);--vb-danger-text: #ff8a7a;--vb-ok: #29845a;--vb-ok-soft: rgba(41, 132, 90, .14);--vb-warn-text: #ffc96b;--vb-warn-soft: rgba(255, 201, 107, .12);--vb-glow-accent: transparent;--vb-glow-cool: transparent;--vb-surface-tint: rgba(255, 255, 255, .03);--vb-surface-tint-strong: rgba(255, 255, 255, .06);--vb-sidebar-from: #1a1a1a;--vb-sidebar-to: #1a1a1a;--vb-header-from: #1a1a1a;--vb-header-to: #1a1a1a;--vb-topbar-bg: #242424;--vb-actions-from: rgba(36, 36, 36, .95);--vb-actions-to: rgba(26, 26, 26, .98);--vb-input-focus-bg: #2e2e2e;--vb-btn-primary-from: #008060;--vb-btn-primary-to: #008060;--vb-btn-primary-border: #006e52;--vb-btn-primary-hover-from: #00966d;--vb-btn-primary-hover-to: #00966d;--vb-btn-primary-hover-border: #008060;--vb-radius: var(--vb-radius-md);--vb-radius-sm: var(--vb-radius-sm);--vb-shadow: var(--vb-shadow-md)}[data-vb-theme=light]{color-scheme:light;--vb-bg: #f1f1f1;--vb-bg-deep: #ebebeb;--vb-bg-elevated: #ffffff;--vb-bg-muted: #f6f6f7;--vb-bg-hover: #f1f1f1;--vb-bg-subdued: #fafbfb;--vb-border: #e3e3e3;--vb-border-subdued: #ebebeb;--vb-border-strong: #c9cccf;--vb-text: #202223;--vb-text-muted: #6d7175;--vb-text-subtle: #8c9196;--vb-text-secondary: #5c5f62;--vb-accent: #008060;--vb-accent-dim: #006e52;--vb-accent-soft: rgba(0, 128, 96, .08);--vb-accent-contrast: #ffffff;--vb-interactive: #005bd3;--vb-interactive-soft: rgba(0, 91, 211, .08);--vb-danger: #d72c0d;--vb-danger-soft: rgba(215, 44, 13, .08);--vb-danger-text: #8e1f0b;--vb-ok: #108043;--vb-ok-soft: rgba(16, 128, 67, .08);--vb-warn-text: #916a00;--vb-warn-soft: rgba(255, 184, 0, .12);--vb-glow-accent: transparent;--vb-glow-cool: transparent;--vb-surface-tint: rgba(32, 34, 35, .03);--vb-surface-tint-strong: rgba(32, 34, 35, .05);--vb-sidebar-from: #ebebeb;--vb-sidebar-to: #ebebeb;--vb-header-from: #ffffff;--vb-header-to: #ffffff;--vb-topbar-bg: #ffffff;--vb-actions-from: rgba(255, 255, 255, .95);--vb-actions-to: rgba(255, 255, 255, .98);--vb-input-focus-bg: #ffffff;--vb-btn-primary-from: #008060;--vb-btn-primary-to: #008060;--vb-btn-primary-border: #006e52;--vb-btn-primary-hover-from: #006e52;--vb-btn-primary-hover-to: #006e52;--vb-btn-primary-hover-border: #005e46;--vb-shadow: var(--vb-shadow-sm)}@media(prefers-color-scheme:light){:root:not([data-vb-theme]){color-scheme:light;--vb-bg: #f1f1f1;--vb-bg-deep: #ebebeb;--vb-bg-elevated: #ffffff;--vb-bg-muted: #f6f6f7;--vb-bg-hover: #f1f1f1;--vb-bg-subdued: #fafbfb;--vb-border: #e3e3e3;--vb-border-subdued: #ebebeb;--vb-border-strong: #c9cccf;--vb-text: #202223;--vb-text-muted: #6d7175;--vb-text-subtle: #8c9196;--vb-text-secondary: #5c5f62;--vb-accent: #008060;--vb-accent-dim: #006e52;--vb-accent-soft: rgba(0, 128, 96, .08);--vb-accent-contrast: #ffffff;--vb-interactive: #005bd3;--vb-interactive-soft: rgba(0, 91, 211, .08);--vb-danger: #d72c0d;--vb-danger-soft: rgba(215, 44, 13, .08);--vb-danger-text: #8e1f0b;--vb-ok: #108043;--vb-ok-soft: rgba(16, 128, 67, .08);--vb-warn-text: #916a00;--vb-warn-soft: rgba(255, 184, 0, .12);--vb-glow-accent: transparent;--vb-glow-cool: transparent;--vb-surface-tint: rgba(32, 34, 35, .03);--vb-surface-tint-strong: rgba(32, 34, 35, .05);--vb-sidebar-from: #ebebeb;--vb-sidebar-to: #ebebeb;--vb-header-from: #ffffff;--vb-header-to: #ffffff;--vb-topbar-bg: #ffffff;--vb-actions-from: rgba(255, 255, 255, .95);--vb-actions-to: rgba(255, 255, 255, .98);--vb-input-focus-bg: #ffffff;--vb-btn-primary-from: #008060;--vb-btn-primary-to: #008060;--vb-btn-primary-border: #006e52;--vb-btn-primary-hover-from: #006e52;--vb-btn-primary-hover-to: #006e52;--vb-btn-primary-hover-border: #005e46;--vb-shadow: var(--vb-shadow-sm)}}html:has(.vertebr-root),html:has(.vertebr-login),html:has(.vertebr-loading),html:has(.vertebr-error){background:var(--vb-bg)}html:has(.vertebr-root) body,html:has(.vertebr-login) body,html:has(.vertebr-loading) body,html:has(.vertebr-error) body{margin:0;padding:0;min-height:100vh;background:var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-root{position:relative;z-index:1;box-sizing:border-box;height:100dvh;max-height:100dvh;min-height:100dvh;width:100%;display:grid;grid-template-columns:var(--vb-sidebar-width) 1fr;grid-template-rows:var(--vb-topbar-height) 1fr;background:var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font);font-size:var(--vb-font-size-300);line-height:var(--vb-line-height-normal);-webkit-font-smoothing:antialiased;isolation:isolate;overflow:clip}.vertebr-root[data-sidebar-collapsed=true]{grid-template-columns:var(--vb-sidebar-width-collapsed) 1fr}.vertebr-root *,.vertebr-root *:before,.vertebr-root *:after{box-sizing:border-box}.vertebr-sidebar,.vertebr-sidebar-top,.vertebr-sidebar-bottom,.vertebr-nav,.vertebr-nav-group,.vertebr-brand,.vertebr-env,.vertebr-auth,.vertebr-theme{position:relative;float:none;inset:auto}.vertebr-sidebar{grid-row:2;position:sticky;top:var(--vb-topbar-height);z-index:30;align-self:start;height:calc(100dvh - var(--vb-topbar-height));max-height:calc(100dvh - var(--vb-topbar-height));border-right:1px solid var(--vb-border-subdued);background:var(--vb-sidebar-from);padding:var(--vb-space-400) var(--vb-space-300) var(--vb-space-400);display:flex;flex-direction:column;gap:0;overflow:hidden;isolation:isolate}.vertebr-sidebar[data-collapsed=true]{padding-inline:var(--vb-space-200)}.vertebr-sidebar[data-collapsed=true] .vertebr-nav-label-text{display:none}.vertebr-sidebar[data-collapsed=true] .vertebr-nav>button,.vertebr-sidebar[data-collapsed=true] .vertebr-nav-parent-label{justify-content:center;padding-inline:var(--vb-space-200)}.vertebr-nav-icon{flex:0 0 auto;width:1.1rem;height:1.1rem}.vertebr-sidebar-top{display:flex;flex-direction:column;gap:1.35rem;flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;padding-bottom:1rem}.vertebr-sidebar-bottom{flex:0 0 auto;position:relative;z-index:2;margin-top:0;padding-top:1rem;border-top:1px solid var(--vb-border);background:var(--vb-sidebar-from);display:flex;flex-direction:column;gap:1rem}.vertebr-theme{display:flex;flex-direction:column;gap:.4rem;padding:0 .15rem}.vertebr-theme-toggle{display:grid;grid-template-columns:1fr 1fr;gap:.25rem;padding:.2rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius);background:var(--vb-bg)}.vertebr-theme-option{appearance:none;border:0;background:transparent;color:var(--vb-text-muted);border-radius:var(--vb-radius-sm);padding:.45rem .5rem;font:inherit;font-size:.8rem;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;transition:background .12s ease,color .12s ease}.vertebr-theme-option:hover{color:var(--vb-text);background:var(--vb-bg-muted)}.vertebr-theme-option[data-active=true]{color:var(--vb-accent);background:var(--vb-accent-soft);font-weight:600}.vertebr-theme-option:focus-visible{outline:none;box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-theme-icon{flex:none}.vertebr-brand{display:flex;flex-direction:column;gap:.15rem;padding:.15rem .55rem .35rem}.vertebr-brand strong{font-size:1.05rem;letter-spacing:.14em;text-transform:uppercase;font-weight:600;color:var(--vb-text)}.vertebr-brand span{color:var(--vb-text-subtle);font-size:.72rem;font-family:var(--vb-mono);letter-spacing:.02em}.vertebr-env{display:flex;flex-direction:column;gap:.4rem;padding:0 .15rem}.vertebr-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.5rem;appearance:none;border:1px solid var(--vb-border);background:var(--vb-bg-elevated);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .7rem;font-family:var(--vb-font);font-size:.88rem;font-weight:500;line-height:1.2;cursor:pointer;transition:border-color .14s ease,background .14s ease,box-shadow .14s ease}.vertebr-select-trigger:hover{border-color:var(--vb-border-strong);background:var(--vb-bg-muted)}.vertebr-select-trigger:focus-visible,.vertebr-select-trigger[data-state=open]{outline:none;border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-select-trigger[data-tone=danger]{border-color:color-mix(in srgb,var(--vb-danger) 45%,transparent);color:var(--vb-danger-text)}.vertebr-select-value{display:flex;align-items:center;gap:.5rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-select-dot{width:7px;height:7px;border-radius:999px;flex:none;background:var(--vb-ok);box-shadow:0 0 0 3px var(--vb-ok-soft)}.vertebr-select-dot[data-tone=danger]{background:var(--vb-danger);box-shadow:0 0 0 3px var(--vb-danger-soft)}.vertebr-select-dot[data-tone=warning],.vertebr-select-dot[data-tone=warn]{background:var(--vb-accent);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-select-icon{display:flex;color:var(--vb-text-muted);transition:transform .14s ease}.vertebr-select-trigger[data-state=open] .vertebr-select-icon{transform:rotate(180deg)}.vertebr-select-content{z-index:60;min-width:var(--radix-select-trigger-width);background:var(--vb-bg-elevated);border:1px solid var(--vb-border-strong);border-radius:var(--vb-radius);box-shadow:var(--vb-shadow);overflow:hidden;font-family:var(--vb-font);color:var(--vb-text);animation:vertebr-pop .12s ease-out}@keyframes vertebr-pop{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.vertebr-select-viewport{padding:.3rem;display:flex;flex-direction:column;gap:.1rem}.vertebr-select-item{display:flex;align-items:center;gap:.5rem;padding:.5rem .6rem;border-radius:var(--vb-radius-sm);font-size:.88rem;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none}.vertebr-select-item[data-highlighted]{background:var(--vb-bg-hover)}.vertebr-select-item[data-state=checked]{color:var(--vb-accent)}.vertebr-select-check{margin-left:auto;display:flex;color:var(--vb-accent)}.vertebr-env-lock{margin-left:auto;font-family:var(--vb-mono);font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;color:var(--vb-accent);border:1px solid color-mix(in srgb,var(--vb-accent) 30%,transparent);border-radius:999px;padding:.12rem .4rem;background:var(--vb-accent-soft)}.vertebr-auth{display:flex;flex-direction:column;gap:.5rem;padding:.15rem .2rem .35rem}.vertebr-auth-hint{margin:0;color:var(--vb-text-muted);font-size:.78rem;line-height:1.4;word-break:break-all}.vertebr-auth-input{width:100%;border:1px solid var(--vb-border);background:var(--vb-bg);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .65rem;font:inherit;font-size:.85rem;transition:border-color .14s ease,box-shadow .14s ease}.vertebr-auth-input:focus{outline:none;border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-auth-actions{display:flex;gap:.5rem}.vertebr-nav{display:flex;flex-direction:column;gap:1.15rem}.vertebr-nav-group{display:flex;flex-direction:column;gap:.2rem}.vertebr-nav-label{font-size:.65rem;letter-spacing:.14em;text-transform:uppercase;color:var(--vb-text-subtle);padding:.2rem .65rem .4rem;font-family:var(--vb-mono);font-weight:500}.vertebr-nav button{appearance:none;display:flex;align-items:center;gap:var(--vb-space-300);width:100%;border:0;background:transparent;color:var(--vb-text-muted);text-align:left;padding:.48rem .7rem;border-radius:var(--vb-radius-sm);cursor:pointer;font:inherit;font-size:.9rem;font-weight:450;line-height:1.35;position:relative;transition:background .12s ease,color .12s ease,box-shadow .12s ease}.vertebr-nav-item{display:flex;flex-direction:column;gap:0}.vertebr-nav-parent{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:stretch;gap:.15rem}.vertebr-nav-parent-label{min-width:0}.vertebr-nav-parent-toggle{display:inline-flex!important;align-items:center;justify-content:center;width:1.75rem!important;min-width:1.75rem;margin:.1rem .15rem .1rem 0!important;padding:0!important;border-radius:7px!important;color:var(--vb-text-subtle)!important;font-size:.62rem!important;line-height:1;letter-spacing:0}.vertebr-nav-parent-toggle:hover{background:var(--vb-bg-muted)!important;color:var(--vb-text)!important}.vertebr-nav-item[data-open=true] .vertebr-nav-parent-toggle{color:var(--vb-text-muted)!important}.vertebr-nav button:hover{background:var(--vb-bg-muted);color:var(--vb-text)}.vertebr-nav button[data-active=true]{background:var(--vb-accent-soft);box-shadow:inset 2px 0 0 var(--vb-accent);color:var(--vb-accent);font-weight:500}.vertebr-nav-parent-label[data-section=true]{color:var(--vb-text);font-weight:600;background:transparent;box-shadow:none}.vertebr-nav-parent-label[data-section=true]:hover{background:var(--vb-bg-muted)}.vertebr-nav-parent-label[data-section=true][data-active=true]{background:var(--vb-accent-soft);box-shadow:inset 2px 0 0 var(--vb-accent);color:var(--vb-accent);font-weight:500}.vertebr-nav-sub{display:flex;flex-direction:column;gap:.12rem;margin:.28rem 0 .35rem .85rem;padding:.1rem 0 .1rem .75rem;border-left:1px solid color-mix(in srgb,var(--vb-border) 70%,var(--vb-text-subtle) 30%)}.vertebr-nav-subitem{font-size:.8rem!important;padding:.4rem .7rem!important;border-radius:8px!important;color:var(--vb-text-subtle)!important;font-weight:450!important;letter-spacing:.01em}.vertebr-nav-subitem:hover{background:var(--vb-bg-muted)!important;color:var(--vb-text)!important;box-shadow:none!important}.vertebr-nav-subitem[data-active=true]{background:var(--vb-accent-soft)!important;box-shadow:none!important;color:var(--vb-text)!important;font-weight:560!important}.vertebr-nav-subitem[data-active=true]:before{content:"";position:absolute;left:-.75rem;top:.35rem;bottom:.35rem;width:2px;border-radius:1px;background:var(--vb-accent)}.vertebr-nav button:focus-visible,.vertebr-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-sidebar::-webkit-scrollbar,.vertebr-main::-webkit-scrollbar,.vertebr-table-wrap::-webkit-scrollbar{width:10px;height:10px}.vertebr-sidebar::-webkit-scrollbar-thumb,.vertebr-main::-webkit-scrollbar-thumb,.vertebr-table-wrap::-webkit-scrollbar-thumb{background:var(--vb-bg-muted);border:2px solid transparent;background-clip:content-box;border-radius:999px}.vertebr-sidebar::-webkit-scrollbar-thumb:hover,.vertebr-main::-webkit-scrollbar-thumb:hover,.vertebr-table-wrap::-webkit-scrollbar-thumb:hover{background:var(--vb-border-strong);background-clip:content-box}.vertebr-sidebar::-webkit-scrollbar-track,.vertebr-main::-webkit-scrollbar-track,.vertebr-table-wrap::-webkit-scrollbar-track{background:transparent}.vertebr-main{grid-row:2;min-width:0;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column}.vertebr-header{flex:0 0 auto;z-index:20;display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;padding:1.6rem 2rem 1.15rem;border-bottom:1px solid var(--vb-border-subdued);background:var(--vb-header-from)}.vertebr-content{flex:1 1 0%;min-width:0;min-height:0;display:flex;flex-direction:column;padding:1.25rem 2rem 1.5rem;overflow:hidden}.vertebr-heading-row{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap}.vertebr-header h1{margin:0;font-size:1.55rem;font-weight:600;letter-spacing:-.03em;line-height:1.15}.vertebr-header p{margin:.4rem 0 0;color:var(--vb-text-muted);font-size:.9rem}.vertebr-env-badge{font-family:var(--vb-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--vb-border);border-radius:999px;padding:.22rem .6rem;color:var(--vb-text-muted);background:var(--vb-surface-tint)}.vertebr-env-badge[data-tone=danger]{color:var(--vb-danger-text);border-color:color-mix(in srgb,var(--vb-danger) 45%,transparent);background:var(--vb-danger-soft)}.vertebr-env-badge[data-tone=warn],.vertebr-env-badge[data-tone=warning]{color:var(--vb-warn-text);border-color:color-mix(in srgb,var(--vb-accent) 45%,transparent);background:var(--vb-accent-soft)}.vertebr-env-badge[data-tone=neutral]{color:var(--vb-ok);border-color:color-mix(in srgb,var(--vb-ok) 40%,transparent);background:var(--vb-ok-soft)}.vertebr-panel{flex:1 1 0%;min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--vb-bg-elevated);border:1px solid var(--vb-border);border-radius:12px;box-shadow:var(--vb-shadow);overflow:hidden}.vertebr-panel-head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 1.5rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-panel-head h2{margin:0;font-size:.72rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-panel-head-actions{display:inline-flex;align-items:center;gap:.55rem}.vertebr-count{font-family:var(--vb-mono);font-size:.7rem;color:var(--vb-text-subtle);border:1px solid var(--vb-border);border-radius:999px;padding:.12rem .5rem}.vertebr-resource-body{flex:1 1 auto;min-width:0;min-height:0;display:flex;flex-direction:column}.vertebr-table-toolbar{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.55rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-table-toolbar-start{display:inline-flex;align-items:center;gap:.35rem;flex-wrap:wrap}.vertebr-table-scroll-controls{display:inline-flex;align-items:center;gap:.15rem;margin-left:auto}.vertebr-table-scroll-btn{padding:.3rem .45rem}.vertebr-btn-icon{display:inline-flex;align-items:center;gap:.4rem}.vertebr-btn-glyph{flex:none}.vertebr-row-actions{display:inline-flex;flex-wrap:nowrap;align-items:center;gap:.1rem;justify-content:flex-end}.vertebr-row-actions .vertebr-btn{padding:.3rem .55rem;font-size:.78rem;font-weight:500;white-space:nowrap}.vertebr-resource-edit{flex:1 1 0%;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-resource-edit>.vertebr-form{flex:1 1 0%;min-height:0}.vertebr-resource-edit-head{flex:0 0 auto;display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.1rem 1.35rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-resource-edit-heading h2{margin:.15rem 0 0;font-size:1.25rem;font-weight:600;letter-spacing:-.02em;color:var(--vb-text)}.vertebr-resource-edit-eyebrow{margin:0;font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-resource-edit-id{margin:.35rem 0 0;font-family:var(--vb-mono);font-size:.75rem;color:var(--vb-text-muted)}.vertebr-metrics{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.vertebr-metrics-window{margin:.22rem 0 0;font-size:.78rem;color:var(--vb-text-muted)}.vertebr-metrics-body{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:1.5rem;padding:1.15rem 1.5rem 1.6rem}.vertebr-metrics-block,.vertebr-metrics-kpis,.vertebr-metrics-table-wrap{flex-shrink:0}.vertebr-metrics-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem}.vertebr-kpi{position:relative;border:1px solid var(--vb-border);border-radius:12px;background:linear-gradient(180deg,var(--vb-surface-tint) 0%,transparent 55%),var(--vb-bg-elevated);padding:.95rem 1rem .9rem;min-height:8rem;display:flex;flex-direction:column;gap:.45rem;overflow:hidden}.vertebr-kpi:before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:transparent}.vertebr-kpi[data-tone=ok]:before{background:var(--vb-ok)}.vertebr-kpi[data-tone=warn]:before{background:var(--vb-accent)}.vertebr-kpi[data-selectable=true]{cursor:pointer}.vertebr-kpi[data-active=true]{border-color:color-mix(in srgb,var(--vb-accent) 50%,var(--vb-border));box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-accent) 25%,transparent)}.vertebr-kpi-top{display:flex;align-items:flex-start;justify-content:space-between;gap:.55rem}.vertebr-kpi-value{margin:0;font-size:1.7rem;font-weight:600;letter-spacing:-.045em;line-height:1.05;font-variant-numeric:tabular-nums}.vertebr-kpi-foot{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .55rem;margin-top:auto}.vertebr-sparkline{color:var(--vb-accent);flex:none;margin-top:.1rem}.vertebr-sparkline[data-tone=ok]{color:var(--vb-ok)}.vertebr-sparkline[data-tone=danger]{color:var(--vb-danger)}.vertebr-metric-delta{display:inline-flex;align-items:center;padding:.12rem .42rem;border-radius:999px;font-size:.68rem;font-weight:600;letter-spacing:.02em;font-family:var(--vb-mono);font-variant-numeric:tabular-nums;background:var(--vb-surface-tint-strong);color:var(--vb-text-subtle)}.vertebr-metric-delta[data-dir=up]{color:var(--vb-ok);background:var(--vb-ok-soft)}.vertebr-metric-delta[data-dir=down]{color:var(--vb-danger);background:var(--vb-danger-soft)}.vertebr-chart{border:1px solid var(--vb-border);border-radius:12px;background:linear-gradient(180deg,var(--vb-surface-tint) 0%,transparent 42%),var(--vb-bg-elevated);padding:.85rem 1rem .65rem;min-height:0;display:flex;flex-direction:column;gap:.3rem}.vertebr-chart-series.vertebr-select-trigger{width:auto;min-width:10.5rem;padding:.28rem .55rem;font-size:.72rem;font-family:var(--vb-mono);letter-spacing:.08em;text-transform:uppercase;font-weight:500}.vertebr-chart-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:0 .1rem .55rem;border-bottom:1px solid color-mix(in srgb,var(--vb-border) 70%,transparent);flex:0 0 auto}.vertebr-chart-head-start{display:flex;flex-wrap:wrap;align-items:center;gap:.55rem 1rem;min-width:0}.vertebr-chart-head-end{display:flex;align-items:flex-start;gap:.5rem}.vertebr-chart-kicker{margin:0;font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);font-weight:500;color:var(--vb-text-muted)}.vertebr-chart-caption{margin:.18rem 0 0;font-size:.72rem;color:var(--vb-text-subtle)}.vertebr-chart-total{margin:0;font-size:1.2rem;font-weight:600;letter-spacing:-.04em;font-variant-numeric:tabular-nums;line-height:1.1}.vertebr-chart-plot{position:relative;min-height:0}.vertebr-chart-svg{display:block;width:100%;height:auto;overflow:visible;cursor:crosshair}.vertebr-chart-grid{stroke:color-mix(in srgb,var(--vb-border) 80%,transparent);stroke-width:1;stroke-dasharray:3 4}.vertebr-chart-baseline{stroke:var(--vb-border-strong);stroke-width:1}.vertebr-chart-area{fill-opacity:1}.vertebr-chart-line{fill:none;stroke:var(--vb-accent);stroke-width:2.1;stroke-linejoin:round;stroke-linecap:round}.vertebr-chart-line-compare{fill:none;stroke:var(--vb-text-subtle);stroke-width:1.7;stroke-dasharray:4 5;stroke-linejoin:round;stroke-linecap:round;stroke-opacity:.85}.vertebr-chart-dot-compare{fill:var(--vb-bg-elevated);stroke:var(--vb-text-subtle);stroke-width:1.8;pointer-events:none}.vertebr-chart-legend{display:flex;flex-wrap:wrap;gap:.65rem .9rem;margin:0;font-size:.66rem;font-family:var(--vb-mono);letter-spacing:.04em;color:var(--vb-text-subtle)}.vertebr-chart-legend span{display:inline-flex;align-items:center;gap:.35rem}.vertebr-chart-legend i{display:inline-block;width:.85rem;height:2px;border-radius:1px;background:var(--vb-accent)}.vertebr-chart-legend i[data-series=previous]{background:repeating-linear-gradient(90deg,var(--vb-text-subtle) 0,var(--vb-text-subtle) 4px,transparent 4px,transparent 7px)}.vertebr-chart-legend i[data-series=m0],.vertebr-chart-line-metric[data-series=m0],.vertebr-chart-dot-metric[data-series=m0]{--vb-chart-series: var(--vb-accent)}.vertebr-chart-legend i[data-series=m1],.vertebr-chart-line-metric[data-series=m1],.vertebr-chart-dot-metric[data-series=m1]{--vb-chart-series: color-mix(in srgb, var(--vb-ok) 72%, var(--vb-text) 28%)}.vertebr-chart-legend i[data-series=m2],.vertebr-chart-line-metric[data-series=m2],.vertebr-chart-dot-metric[data-series=m2]{--vb-chart-series: color-mix(in srgb, var(--vb-warn) 78%, var(--vb-text) 22%)}.vertebr-chart-legend i[data-series^=m]{background:var(--vb-chart-series, var(--vb-accent))}.vertebr-chart-line-metric{fill:none;stroke:var(--vb-chart-series, var(--vb-accent));stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.vertebr-chart-dot-metric{fill:var(--vb-bg-elevated);stroke:var(--vb-chart-series, var(--vb-accent));stroke-width:1.8;pointer-events:none}.vertebr-chart-mode{display:inline-flex;gap:.15rem;padding:.12rem;border:1px solid color-mix(in srgb,var(--vb-border) 85%,transparent);border-radius:8px;background:color-mix(in srgb,var(--vb-bg) 65%,transparent)}.vertebr-chart-mode-btn{appearance:none;margin:0;padding:.22rem .5rem;border:0;border-radius:6px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.68rem;font-family:var(--vb-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.vertebr-chart-mode-btn:hover{color:var(--vb-text)}.vertebr-chart-mode-btn[data-active=true]{background:var(--vb-bg-elevated);color:var(--vb-text);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 70%,transparent)}.vertebr-chart-metric-toggles{display:flex;flex-wrap:wrap;gap:.35rem}.vertebr-chart-metric-toggle{appearance:none;margin:0;padding:.2rem .48rem;border:1px solid color-mix(in srgb,var(--vb-border) 90%,transparent);border-radius:6px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.68rem;font-family:var(--vb-mono);letter-spacing:.03em;cursor:pointer}.vertebr-chart-metric-toggle:hover:not(:disabled){color:var(--vb-text);border-color:var(--vb-border-strong)}.vertebr-chart-metric-toggle[data-on=true]{color:var(--vb-text);border-color:color-mix(in srgb,var(--vb-accent) 45%,var(--vb-border));background:color-mix(in srgb,var(--vb-accent) 12%,transparent)}.vertebr-chart-metric-toggle:disabled{opacity:.45;cursor:not-allowed}.vertebr-chart-tooltip-row{font-size:.78rem;font-weight:600;letter-spacing:-.02em}.vertebr-chart-tooltip-row[data-series=m0]{color:var(--vb-accent)}.vertebr-chart-tooltip-row[data-series=m1]{color:color-mix(in srgb,var(--vb-ok) 72%,var(--vb-text) 28%)}.vertebr-chart-tooltip-row[data-series=m2]{color:color-mix(in srgb,var(--vb-warn) 78%,var(--vb-text) 22%)}.vertebr-metrics-range.vertebr-select-trigger{width:auto;min-width:9.5rem;padding:.28rem .55rem;font-size:.78rem}.vertebr-chart-tooltip-compare{color:var(--vb-text-muted)!important}.vertebr-chart-crosshair{stroke:color-mix(in srgb,var(--vb-accent) 55%,var(--vb-border));stroke-width:1;stroke-dasharray:2 3;pointer-events:none}.vertebr-chart-dot{fill:var(--vb-bg-elevated);stroke:var(--vb-accent);stroke-width:2;pointer-events:none}.vertebr-chart-axis{fill:var(--vb-text-subtle);font-size:10px;font-family:var(--vb-mono)}.vertebr-chart-tooltip{position:absolute;top:.3rem;transform:translate(-50%);display:flex;flex-direction:column;gap:.08rem;padding:.32rem .48rem;border:1px solid var(--vb-border);border-radius:7px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow);pointer-events:none;white-space:nowrap;z-index:1}.vertebr-chart-tooltip strong{font-size:.82rem;letter-spacing:-.02em}.vertebr-chart-tooltip span{font-size:.66rem;font-family:var(--vb-mono);color:var(--vb-text-subtle)}.vertebr-chart[data-empty=true] .vertebr-chart-line{stroke-opacity:.45}.vertebr-chart-empty{margin:1.5rem 0;color:var(--vb-text-muted);font-size:.85rem}.vertebr-metrics-table-wrap{border:1px solid var(--vb-border);border-radius:12px;background:linear-gradient(180deg,var(--vb-surface-tint) 0%,transparent 28%),var(--vb-bg-elevated);overflow:hidden}.vertebr-metrics-table-head{appearance:none;display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;padding:.8rem 1.05rem .65rem;border:0;border-bottom:1px solid color-mix(in srgb,var(--vb-border) 70%,transparent);background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.vertebr-metrics-table-head:hover{background:var(--vb-surface-tint)}.vertebr-metrics-table-wrap[data-collapsed=true] .vertebr-metrics-table-head{border-bottom:none}.vertebr-metrics-chevron{width:.45rem;height:.45rem;border-right:1.5px solid var(--vb-text-subtle);border-bottom:1.5px solid var(--vb-text-subtle);transform:rotate(45deg);transition:transform .12s ease}.vertebr-metrics-table-wrap[data-collapsed=true] .vertebr-metrics-chevron{transform:rotate(-45deg)}.vertebr-metrics-table{width:100%;min-width:100%}.vertebr-metrics-table th,.vertebr-metrics-table td{padding:.78rem 1rem;max-width:none}.vertebr-metrics-table th:first-child,.vertebr-metrics-table td:first-child{padding-left:1.05rem}.vertebr-metrics-table th:last-child,.vertebr-metrics-table td:last-child{padding-right:1.05rem}.vertebr-metrics-table tbody tr[data-tone=ok] td:first-child{box-shadow:inset 2px 0 0 var(--vb-ok)}.vertebr-metrics-table tbody tr[data-tone=warn] td:first-child{box-shadow:inset 2px 0 0 var(--vb-accent)}.vertebr-metrics-table tbody tr[data-tone=danger] td:first-child{box-shadow:inset 2px 0 0 var(--vb-danger)}.vertebr-metrics-table-label{display:block;font-weight:600}.vertebr-metrics-table-section{display:block;margin-top:.18rem;font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);color:var(--vb-text-subtle)}.vertebr-metrics-table-value{font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.vertebr-metrics-table td.vertebr-metrics-table-notes{white-space:normal;max-width:28rem;color:var(--vb-text-muted)}.vertebr-metrics-table-empty{color:var(--vb-text-subtle)}.vertebr-metric-label{margin:0;font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);font-weight:500;color:var(--vb-text-muted)}.vertebr-metric-hint{margin:0;font-size:.75rem;color:var(--vb-text-subtle);line-height:1.35}@media(max-width:1100px){.vertebr-metrics-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.vertebr-metrics-kpis{grid-template-columns:1fr}}.vertebr-table-wrap{flex:1 1 auto;min-height:0;min-width:0;max-width:100%;overflow-x:auto;overflow-y:auto;overscroll-behavior-inline:contain;scrollbar-gutter:stable;scrollbar-width:thin}.vertebr-table{width:max-content;min-width:100%;border-collapse:separate;border-spacing:0;font-size:.9rem;font-family:var(--vb-font)}.vertebr-table th,.vertebr-table td{padding:.7rem .9rem;border-bottom:1px solid var(--vb-border);text-align:left;vertical-align:middle;white-space:nowrap;overflow:hidden;max-width:16rem}.vertebr-table th:not(.vertebr-col-actions),.vertebr-table td:not(.vertebr-col-actions){min-width:6.5rem}.vertebr-table th{position:sticky;top:0;z-index:1;color:var(--vb-text-subtle);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);font-weight:500;background:var(--vb-bg-elevated)}.vertebr-table tbody tr{transition:background .1s ease}.vertebr-table tbody tr[data-selected=true]{background:var(--vb-surface-tint)}.vertebr-table th.vertebr-col-select,.vertebr-table td.vertebr-col-select{width:2.4rem;min-width:2.4rem;max-width:2.4rem;padding-left:.85rem;padding-right:.4rem}.vertebr-row-check{width:.95rem;height:.95rem;margin:0;accent-color:var(--vb-accent);cursor:pointer}.vertebr-visibility-check{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;padding:.1rem;border-radius:6px}.vertebr-visibility-check[data-dirty=true]{background:color-mix(in srgb,var(--vb-accent) 14%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-accent) 35%,transparent)}.vertebr-visibility-check .vertebr-visibility-btn[data-dirty=true]{color:var(--vb-accent)}.vertebr-table-row-clickable{cursor:pointer}.vertebr-table-row-clickable:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--vb-accent-soft)}.vertebr-table th.vertebr-col-actions,.vertebr-table td.vertebr-col-actions{position:sticky;right:0;z-index:2;width:1%;min-width:7.5rem;max-width:none;overflow:visible;padding-left:.75rem;padding-right:.85rem;background:var(--vb-bg-elevated);border-left:1px solid var(--vb-border);box-shadow:-12px 0 16px -14px color-mix(in srgb,var(--vb-text) 35%,transparent)}.vertebr-table th.vertebr-col-actions{z-index:3}.vertebr-table tbody tr:hover td.vertebr-col-actions{background:var(--vb-bg-elevated);box-shadow:inset 0 0 0 999px var(--vb-surface-tint),-12px 0 16px -14px color-mix(in srgb,var(--vb-text) 35%,transparent)}.vertebr-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.vertebr-col-menu{position:relative}.vertebr-col-menu-count{display:inline-flex;align-items:center;justify-content:center;min-width:1.15rem;margin-left:.35rem;padding:0 .3rem;border-radius:999px;background:var(--vb-bg-muted);border:1px solid var(--vb-border);font-family:var(--vb-mono);font-size:.65rem;color:var(--vb-text-muted)}.vertebr-col-menu-panel{position:absolute;top:calc(100% + .35rem);left:0;z-index:20;width:min(240px,calc(100vw - 2rem));padding:.55rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow)}.vertebr-col-menu-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.2rem .35rem .55rem;margin-bottom:.25rem;border-bottom:1px solid var(--vb-border);font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-col-menu-list{list-style:none;margin:0;padding:0;max-height:280px;overflow:auto}.vertebr-col-menu-item{display:flex;align-items:center;gap:.55rem;padding:.4rem .35rem;border-radius:6px;cursor:pointer;color:var(--vb-text);font-size:.84rem}.vertebr-col-menu-item:hover{background:var(--vb-surface-tint)}.vertebr-col-menu-item input{accent-color:var(--vb-accent);width:.9rem;height:.9rem}.vertebr-col-menu-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-link-btn{appearance:none;border:0;background:none;padding:0;margin:0;font:inherit;font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;color:var(--vb-text-muted);cursor:pointer}.vertebr-link-btn:hover{color:var(--vb-text)}.vertebr-table tr:last-child td{border-bottom:0}.vertebr-table td:has(.vertebr-cell-clamp),.vertebr-table td:has(.vertebr-cell-media),.vertebr-table td:has(.vertebr-cell-link){white-space:normal;min-width:10rem;max-width:16rem}.vertebr-cell-empty{color:var(--vb-text-subtle)}.vertebr-cell-text,.vertebr-cell-number,.vertebr-cell-money,.vertebr-cell-datetime{color:var(--vb-text)}.vertebr-cell-number,.vertebr-cell-money{font-variant-numeric:tabular-nums;font-family:var(--vb-mono);font-size:.86rem}.vertebr-cell-money{font-weight:600}.vertebr-cell-datetime{font-family:var(--vb-mono);font-size:.8rem;color:var(--vb-text-muted)}.vertebr-cell-clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;white-space:normal;line-height:1.35;color:var(--vb-text-muted);max-width:16rem}.vertebr-cell-link{display:inline-block;max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--vb-accent);text-decoration:none;font-size:.82rem}.vertebr-cell-link:hover{text-decoration:underline}.vertebr-cell-media{display:inline-flex;align-items:center;gap:.65rem;max-width:16rem;text-decoration:none;color:inherit}.vertebr-cell-media img{width:44px;height:44px;object-fit:cover;border-radius:var(--vb-radius-sm);border:1px solid var(--vb-border);background:var(--vb-bg-muted);flex:none}.vertebr-cell-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;color:var(--vb-text-subtle);font-family:var(--vb-mono)}.vertebr-cell-json{display:inline-block;max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--vb-mono);font-size:.75rem;color:var(--vb-text-muted)}.vertebr-badge{display:inline-flex;align-items:center;border-radius:999px;padding:.18rem .55rem;font-size:.72rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--vb-border);color:var(--vb-text-muted);background:var(--vb-surface-tint)}.vertebr-badge[data-tone=ok]{color:var(--vb-ok);border-color:color-mix(in srgb,var(--vb-ok) 40%,transparent);background:var(--vb-ok-soft)}.vertebr-badge[data-tone=neutral]{color:var(--vb-text-subtle)}.vertebr-chip-row{display:flex;flex-wrap:wrap;gap:.3rem;max-width:14rem}.vertebr-chip{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--vb-border);border-radius:999px;padding:.1rem .45rem;font-size:.72rem;color:var(--vb-text-muted);background:var(--vb-surface-tint)}.vertebr-cell-thumbs{display:flex;align-items:center}.vertebr-cell-thumbs img{width:36px;height:36px;object-fit:cover;border-radius:var(--vb-radius-sm);border:1px solid var(--vb-border);background:var(--vb-bg-muted);flex:none}.vertebr-cell-thumbs img+img{margin-left:-.55rem;box-shadow:-2px 0 0 var(--vb-bg-elevated)}.vertebr-cell-thumbs-more{margin-left:.4rem;font-size:.72rem;font-weight:600;color:var(--vb-text-muted)}.vertebr-cell-thumbs-detail{flex-wrap:wrap;gap:.75rem}.vertebr-cell-thumbs-detail img+img{margin-left:0;box-shadow:none}.vertebr-empty{flex:1 1 auto;display:grid;place-items:center;padding:3rem 1.5rem;text-align:center;color:var(--vb-text-muted);font-size:.92rem}.vertebr-cell-media-detail{flex-direction:column;align-items:flex-start;max-width:none}.vertebr-cell-media-detail img{width:min(100%,280px);height:auto;max-height:280px;object-fit:cover}.vertebr-cell-prose{margin:0;white-space:pre-wrap;line-height:1.5;color:var(--vb-text);max-width:40rem}.vertebr-modal-backdrop{position:fixed;inset:0;z-index:80;display:grid;place-items:center;padding:1.25rem;background:color-mix(in srgb,var(--vb-bg) 55%,rgba(0,0,0,.45));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.vertebr-modal{width:min(100%,720px);max-height:min(88vh,860px);display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--vb-border);border-radius:14px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-modal-form{width:min(100%,960px);max-height:min(92vh,920px)}.vertebr-modal-form .vertebr-modal-body{padding:0;min-height:0;flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden}.vertebr-modal-form .vertebr-form{min-height:0}.vertebr-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.15rem 1.25rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-modal-heading h2{margin:.15rem 0 0;font-size:1.25rem;letter-spacing:-.02em}.vertebr-modal-eyebrow{margin:0;font-family:var(--vb-mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-modal-actions{display:flex;flex-wrap:wrap;gap:.45rem}.vertebr-modal-body{overflow:auto;padding:1.25rem;display:flex;flex-direction:column;gap:1.25rem}.vertebr-modal-hero{border:1px solid var(--vb-border);border-radius:12px;overflow:hidden;background:var(--vb-bg-muted)}.vertebr-modal-hero img{display:block;width:100%;max-height:280px;object-fit:cover}.vertebr-modal-fields{margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.9rem 1rem}.vertebr-modal-field{display:grid;gap:.35rem;padding:.85rem .95rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius);background:var(--vb-surface-tint);min-width:0}.vertebr-modal-field dt{margin:0;font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-modal-field dd{margin:0;min-width:0}.vertebr-picker-body{gap:.95rem}.vertebr-picker-tabs{display:flex;gap:.35rem;padding:.2rem;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-surface-tint)}.vertebr-picker-tabs button{appearance:none;flex:1 1 0;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border:0;background:transparent;color:var(--vb-text-muted);border-radius:6px;padding:.4rem .55rem;font:inherit;font-size:.82rem;cursor:pointer}.vertebr-picker-tabs button[data-active=true]{background:var(--vb-bg-elevated);color:var(--vb-text);box-shadow:0 1px color-mix(in srgb,var(--vb-text) 8%,transparent)}.vertebr-picker-tabs span{font-family:var(--vb-mono);font-size:.68rem;color:var(--vb-text-subtle)}.vertebr-picker-url{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem}.vertebr-picker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:.7rem}.vertebr-picker-tile{appearance:none;display:grid;gap:.4rem;padding:.45rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg);color:inherit;text-align:left;cursor:pointer}.vertebr-picker-tile:hover{border-color:var(--vb-border-strong)}.vertebr-picker-tile[data-selected=true]{border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-picker-thumb{display:block;aspect-ratio:1;border-radius:7px;overflow:hidden;border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-picker-thumb img{display:block;width:100%;height:100%;object-fit:cover}.vertebr-picker-name{font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-picker-foot{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.85rem 1.25rem 1.05rem;border-top:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-picker-count{font-family:var(--vb-mono);font-size:.72rem;color:var(--vb-text-subtle)}.vertebr-mail-modal{width:min(100%,1080px);max-height:min(90vh,820px)}.vertebr-mail-layout{min-height:0;flex:1 1 auto;display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);overflow:hidden}.vertebr-mail-compose{min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-mail-fields{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;align-items:stretch;gap:.85rem;padding:1rem 1.1rem .75rem}.vertebr-mail-field{display:grid;gap:.35rem;min-width:0;flex:0 0 auto}.vertebr-mail-field>span{font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-mail-field .vertebr-select-trigger{flex:none;align-self:stretch;height:auto;min-height:2.4rem;background:var(--vb-bg)}.vertebr-mail-field input,.vertebr-mail-field textarea{width:100%;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-bg);color:var(--vb-text);font:inherit;font-size:.9rem;padding:.55rem .7rem}.vertebr-mail-field textarea{min-height:8.5rem;resize:vertical;line-height:1.45}.vertebr-mail-field input:focus,.vertebr-mail-field textarea:focus{outline:none;border-color:var(--vb-border-strong);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-mail-compose-note{margin:0;padding:1rem 1.1rem;font-size:.84rem;line-height:1.45;color:var(--vb-text-muted)}.vertebr-mail-compose-hint{margin:auto 0 0;padding:.35rem 0 .15rem;font-size:.75rem;line-height:1.4;color:var(--vb-text-subtle)}.vertebr-mail-compose-error{margin:0;padding:0 1.1rem .45rem;font-size:.8rem;color:var(--vb-danger, #b42318)}.vertebr-mail-compose-foot{display:flex;flex-direction:column;gap:.55rem;padding:.85rem 1.1rem 1rem;border-top:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-mail-compose-foot .vertebr-btn-primary{width:100%;justify-content:center}.vertebr-mail-preview{min-width:0;min-height:0;display:flex;flex-direction:column;background:linear-gradient(180deg,color-mix(in srgb,var(--vb-bg-muted) 88%,var(--vb-bg)) 0%,var(--vb-bg-muted) 100%)}.vertebr-mail-preview-meta{display:grid;gap:.45rem;padding:.8rem 1.15rem;border-bottom:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-mail-preview-meta p{margin:0;display:grid;grid-template-columns:4.25rem minmax(0,1fr);align-items:baseline;gap:.55rem;font-size:.86rem;line-height:1.35;min-width:0;color:var(--vb-text)}.vertebr-mail-preview-meta p:last-child{padding-top:.35rem;border-top:1px solid color-mix(in srgb,var(--vb-border) 75%,transparent)}.vertebr-mail-preview-meta span{font-family:var(--vb-mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-mail-preview-meta strong{font-weight:500;overflow-wrap:anywhere}.vertebr-mail-preview-stage{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding:1rem 1.1rem 1.15rem}.vertebr-mail-preview-frame{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;border:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);border-radius:10px;overflow:hidden;background:#fff;box-shadow:0 1px color-mix(in srgb,var(--vb-text) 6%,transparent),0 18px 40px -28px color-mix(in srgb,var(--vb-text) 45%,transparent)}.vertebr-mail-preview-frame iframe,.vertebr-mail-preview-frame pre{display:block;width:100%;flex:1 1 auto;min-height:360px;height:100%;border:0;background:#fff}.vertebr-mail-preview-frame pre{margin:0;padding:1.25rem 1.4rem;overflow:auto;white-space:pre-wrap;font-size:.88rem;line-height:1.5;color:#171717}.vertebr-mail-preview-empty{display:grid;place-items:center;flex:1 1 auto;min-height:360px;padding:2rem;text-align:center;color:var(--vb-text-subtle);font-size:.86rem;background:color-mix(in srgb,var(--vb-bg-muted) 55%,#fff)}@media(max-width:820px){.vertebr-mail-layout{grid-template-columns:1fr;overflow:auto}.vertebr-mail-compose{border-right:0;border-bottom:1px solid var(--vb-border)}.vertebr-mail-preview-stage{min-height:420px}}.vertebr-emails{min-height:0;flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden}.vertebr-emails-nav{position:relative;z-index:5}.vertebr-emails-nav-trigger{appearance:none;display:inline-flex;align-items:center;justify-content:space-between;gap:.55rem;min-width:10.5rem;margin:0;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-bg-elevated);color:var(--vb-text);padding:.4rem .65rem;font:inherit;cursor:pointer;box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 35%,transparent)}.vertebr-emails-nav[data-size=sm] .vertebr-emails-nav-trigger{min-width:9.5rem;padding:.32rem .55rem}.vertebr-emails-nav-trigger:hover{border-color:color-mix(in srgb,var(--vb-border) 55%,var(--vb-text) 45%)}.vertebr-emails-nav[data-open=true] .vertebr-emails-nav-trigger{border-color:color-mix(in srgb,var(--vb-border) 40%,var(--vb-text) 60%)}.vertebr-emails-nav-current{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.vertebr-emails-nav-label{font-size:.78rem;font-weight:600;letter-spacing:.02em}.vertebr-emails-nav[data-size=sm] .vertebr-emails-nav-label{font-size:.74rem}.vertebr-emails-nav-count{display:inline-flex;align-items:center;justify-content:center;min-width:1.15rem;padding:.05rem .3rem;border-radius:999px;background:color-mix(in srgb,var(--vb-bg) 80%,var(--vb-border));color:var(--vb-text-muted);font-family:var(--vb-mono);font-size:.66rem;line-height:1.2}.vertebr-emails-nav-chevron{color:var(--vb-text-subtle);font-size:.7rem;line-height:1;transition:transform .12s ease}.vertebr-emails-nav[data-open=true] .vertebr-emails-nav-chevron{transform:rotate(180deg)}.vertebr-emails-nav-menu{position:absolute;top:calc(100% + .35rem);right:0;z-index:20;margin:0;padding:.3rem;list-style:none;min-width:14rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow)}.vertebr-emails-nav-option{appearance:none;width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:.15rem;margin:0;border:0;border-radius:7px;background:transparent;color:var(--vb-text);padding:.5rem .6rem;font:inherit;text-align:left;cursor:pointer}.vertebr-emails-nav-option:hover,.vertebr-emails-nav-option[data-active=true]{background:color-mix(in srgb,var(--vb-bg) 70%,var(--vb-border))}.vertebr-emails-nav-option-main{display:inline-flex;align-items:center;gap:.4rem}.vertebr-emails-nav-hint{color:var(--vb-text-subtle);font-size:.68rem;line-height:1.35}.vertebr-emails-subnav{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1.1rem;border-bottom:1px solid var(--vb-border);background:color-mix(in srgb,var(--vb-surface-tint) 70%,transparent)}.vertebr-emails-subnav .vertebr-emails-nav-menu{left:0;right:auto}.vertebr-emails-layout{min-height:0;flex:1 1 auto;display:grid;grid-template-columns:minmax(260px,320px) minmax(0,1fr);overflow:hidden}.vertebr-emails-compose{min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-emails-fields{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:.85rem;padding:1rem 1.1rem .75rem}.vertebr-emails-fields select,.vertebr-emails-fields input[type=datetime-local]{width:100%;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-bg);color:var(--vb-text);font:inherit;font-size:.9rem;padding:.55rem .7rem}.vertebr-emails-segment{display:inline-flex;gap:.15rem;padding:.12rem;border:1px solid color-mix(in srgb,var(--vb-border) 85%,transparent);border-radius:8px;background:color-mix(in srgb,var(--vb-bg) 65%,transparent);width:fit-content;max-width:100%}.vertebr-emails-segment button{appearance:none;margin:0;padding:.28rem .55rem;border:0;border-radius:6px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.72rem;font-family:var(--vb-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.vertebr-emails-segment button:hover:not(:disabled){color:var(--vb-text)}.vertebr-emails-segment button[data-active=true]{background:var(--vb-bg-elevated);color:var(--vb-text);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 70%,transparent)}.vertebr-emails-segment button:disabled{opacity:.4;cursor:not-allowed}.vertebr-emails-notice{margin:0;font-size:.8rem;color:var(--vb-ok, #3f7d4e)}.vertebr-emails-side{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-emails-side .vertebr-mail-preview{min-height:0;flex:1 1 auto}.vertebr-emails-library,.vertebr-emails-activity{min-height:0;flex:1 1 auto;display:flex;flex-direction:column;background:var(--vb-bg)}.vertebr-emails-library{overflow:auto}.vertebr-emails-library[data-editing=true],.vertebr-emails-activity{overflow:hidden}.vertebr-emails-library-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;min-height:0}.vertebr-emails-library-cols[data-section=system],.vertebr-emails-library-cols[data-section=saved]{grid-template-columns:minmax(0,1fr)}.vertebr-emails-library-section{padding:1rem 1.1rem 1.25rem;border-bottom:1px solid var(--vb-border)}.vertebr-emails-library-cols[data-section=all] .vertebr-emails-library-section:first-child{border-right:1px solid var(--vb-border)}.vertebr-emails-library-section header .vertebr-btn{margin-left:auto}.vertebr-emails-library-section h3{margin:0;font-size:.72rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-emails-library-section ul{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}.vertebr-emails-library-section li{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:.55rem .65rem;border:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);border-radius:8px;background:var(--vb-bg-elevated)}.vertebr-emails-library-section li div{display:grid;gap:.15rem;min-width:0}.vertebr-emails-library-section strong{font-size:.88rem;font-weight:600}.vertebr-emails-library-section span{font-size:.74rem;color:var(--vb-text-subtle);font-family:var(--vb-mono)}.vertebr-emails-library-actions{display:inline-flex;gap:.25rem;flex:none}.vertebr-emails-library-editor{border-top:0;background:var(--vb-bg-elevated);display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.vertebr-emails-library-editor>header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex:0 0 auto;padding:.75rem 1.1rem;border-bottom:1px solid var(--vb-border)}.vertebr-emails-library-editor h3{margin:0;font-size:.72rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-emails-library-editor .vertebr-emails-layout{flex:1 1 auto;min-height:0}.vertebr-emails-library-editor .vertebr-emails-fields{padding-top:.9rem}.vertebr-emails-library-editor .vertebr-mail-compose-error{padding:0}.vertebr-emails-library-editor .vertebr-mail-compose-hint{margin:0;padding:0}.vertebr-emails-library-meta{margin:0;font-size:.78rem;color:var(--vb-text-muted)}.vertebr-emails-library-meta code{font-family:var(--vb-mono);font-size:.74rem}.vertebr-emails-campaigns-empty{margin:0;font-size:.82rem;color:var(--vb-text-muted)}.vertebr-email-select{position:relative;min-width:0;color:var(--vb-text);font-family:var(--vb-font);text-transform:none;letter-spacing:normal}.vertebr-email-select-trigger{width:100%;background:var(--vb-bg);color:var(--vb-text);text-transform:none;letter-spacing:normal;font-family:var(--vb-font);font-size:.88rem;font-weight:500}.vertebr-email-select-trigger .vertebr-select-value{color:var(--vb-text);text-transform:none;letter-spacing:normal}.vertebr-email-select-panel{position:absolute;z-index:20;top:calc(100% + .35rem);left:0;right:0;display:flex;flex-direction:column;max-height:16rem;border:1px solid var(--vb-border-strong);border-radius:8px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow);overflow:hidden;color:var(--vb-text)}.vertebr-email-select-toolbar{display:grid;gap:.45rem;padding:.55rem .6rem .45rem;border-bottom:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);background:var(--vb-bg-elevated)}.vertebr-email-select-toolbar input{width:100%;border:1px solid var(--vb-border);border-radius:6px;background:var(--vb-bg);color:var(--vb-text);font:inherit;font-size:.84rem;padding:.4rem .55rem}.vertebr-email-select-actions{display:flex;gap:.35rem}.vertebr-email-select-actions button{appearance:none;margin:0;padding:.18rem .45rem;border:0;border-radius:5px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.68rem;font-family:var(--vb-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.vertebr-email-select-actions button:hover:not(:disabled){color:var(--vb-text);background:var(--vb-surface-tint)}.vertebr-email-select-actions button:disabled{opacity:.4;cursor:not-allowed}.vertebr-email-select-list{list-style:none;margin:0;padding:.25rem;overflow:auto;min-height:0;background:var(--vb-bg)}.vertebr-email-select-list label{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:.55rem;align-items:center;padding:.48rem .5rem;border-radius:6px;cursor:pointer;color:var(--vb-text)}.vertebr-email-select-list label[data-media=true]{grid-template-columns:auto auto minmax(0,1fr)}.vertebr-email-select-list label[data-on=true]{background:color-mix(in srgb,var(--vb-accent) 16%,var(--vb-bg))}.vertebr-email-select-list label:hover{background:var(--vb-surface-tint)}.vertebr-email-select-list input{margin:0;width:.95rem;height:.95rem;accent-color:var(--vb-accent);flex:none}.vertebr-email-select-thumb{width:2.4rem;height:2.4rem;object-fit:cover;border-radius:5px;border:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);background:var(--vb-bg-muted)}.vertebr-email-select-copy{display:grid;gap:.12rem;min-width:0}.vertebr-email-select-primary{font-size:.84rem;font-weight:500;font-family:var(--vb-font);color:var(--vb-text);text-transform:none;letter-spacing:normal;line-height:1.35;overflow-wrap:anywhere;word-break:break-word;white-space:normal}.vertebr-email-select-secondary{font-size:.68rem;font-family:var(--vb-mono);font-weight:500;color:var(--vb-text-muted);text-transform:none;letter-spacing:.02em;line-height:1.3;overflow-wrap:anywhere;white-space:normal}.vertebr-email-select-empty{padding:.75rem .55rem;font-size:.8rem;color:var(--vb-text-muted);text-align:center}.vertebr-email-select-toolbar-compact{padding-bottom:.35rem}.vertebr-email-select-toolbar-compact .vertebr-email-select-actions{justify-content:flex-end}@media(max-width:900px){.vertebr-emails-layout{grid-template-columns:1fr;overflow:auto}.vertebr-emails-compose{border-right:0;border-bottom:1px solid var(--vb-border)}.vertebr-emails-side{min-height:420px}.vertebr-emails-library-cols{grid-template-columns:1fr}.vertebr-emails-library-section:first-child{border-right:0}.vertebr-panel-head-actions{flex-wrap:wrap;justify-content:flex-end}}.vertebr-form{flex:1 1 0%;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-form-scroll{flex:1 1 auto;min-height:0;overflow:auto;display:block;padding:1.15rem 1.35rem 1.35rem}.vertebr-form-section{flex:none;margin-bottom:1rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);box-shadow:0 1px color-mix(in srgb,var(--vb-text) 4%,transparent);overflow:hidden}.vertebr-form-section:last-child{margin-bottom:0}.vertebr-form-section[data-plain=true]{border:0;border-radius:0;box-shadow:none;background:transparent}.vertebr-form-section[data-plain=true] .vertebr-form-fields{padding:.15rem .15rem .35rem}.vertebr-form-section-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.7rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-form-section-head h3{margin:0;font-size:.7rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-form-section-count{font-family:var(--vb-mono);font-size:.65rem;color:var(--vb-text-subtle);border:1px solid var(--vb-border);border-radius:999px;padding:.08rem .42rem}.vertebr-form-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem 1rem;padding:1.05rem 1.1rem 1.15rem;align-items:start;align-content:start}.vertebr-form-fields[data-layout=chips]{grid-template-columns:repeat(auto-fill,minmax(4.75rem,1fr));gap:.65rem}.vertebr-form-fields[data-layout=specs]{grid-template-columns:1fr 1fr}.vertebr-form-fields[data-layout=specs] .vertebr-field[data-span=full]{grid-column:1 / -1}.vertebr-form-fields[data-layout=specs] .vertebr-field-head{min-height:1.55rem}.vertebr-form-fields[data-layout=specs] .vertebr-visibility-btn{width:1.85rem;height:1.85rem}.vertebr-form-fields[data-layout=settings]{display:block;padding:1.05rem 1.1rem 1.15rem}.vertebr-settings-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-bg);overflow:hidden}.vertebr-settings-list-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.65rem .75rem;border-bottom:1px solid var(--vb-border)}.vertebr-settings-list-row:last-child{border-bottom:0}.vertebr-settings-list-row[data-on=false]{opacity:.55}.vertebr-settings-list-copy{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1 1 auto}.vertebr-settings-list-copy label{font-size:.86rem;font-weight:500;color:var(--vb-text);cursor:pointer}.vertebr-settings-list-desc{margin:0;font-size:.78rem;line-height:1.4;color:var(--vb-text-muted)}.vertebr-form-fields[data-layout=chips] .vertebr-field label{font-family:var(--vb-mono);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;text-align:center}.vertebr-form-fields[data-layout=chips] .vertebr-field input{text-align:center;font-variant-numeric:tabular-nums;font-family:var(--vb-mono);padding:.55rem .4rem}.vertebr-record-layout{display:grid;grid-template-columns:minmax(200px,240px) minmax(0,1fr);gap:1.25rem;align-items:start}.vertebr-record-aside{position:sticky;top:0;display:flex;flex-direction:column;gap:1rem;padding:.9rem;border:1px solid var(--vb-border);border-radius:12px;background:var(--vb-bg-elevated)}.vertebr-record-preview{border-radius:10px;overflow:hidden;border:1px solid var(--vb-border);background:var(--vb-bg-muted);aspect-ratio:1}.vertebr-record-preview img{display:block;width:100%;height:100%;object-fit:cover}.vertebr-record-preview-empty{width:100%;height:100%;display:grid;place-items:center;font-family:var(--vb-mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-record-main{display:flex;flex-direction:column;gap:1.15rem;min-width:0;padding:.15rem .1rem .35rem}.vertebr-record-block{flex:none;display:flex;flex-direction:column;gap:.55rem;min-width:0}.vertebr-record-block-label{display:flex;align-items:center;justify-content:space-between;gap:.5rem;font-family:var(--vb-mono);font-size:.68rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle);padding-bottom:.4rem;border-bottom:1px solid var(--vb-border)}.vertebr-record-block[data-storefront=off]{opacity:.55}.vertebr-visibility-btn{appearance:none;flex:none;display:inline-flex;align-items:center;justify-content:center;width:1.7rem;height:1.7rem;margin:-.25rem 0;padding:0;border:0;border-radius:6px;background:transparent;color:var(--vb-text-subtle);cursor:pointer}.vertebr-visibility-btn:hover{color:var(--vb-text);background:var(--vb-surface-tint)}.vertebr-visibility-btn[aria-pressed=true]{color:var(--vb-accent)}.vertebr-visibility-btn[aria-pressed=false]{color:var(--vb-text-subtle)}.vertebr-form[data-variant=record] .vertebr-form-fields{padding:0;gap:.75rem .9rem}.vertebr-form[data-variant=record] .vertebr-record-aside .vertebr-form-fields{grid-template-columns:1fr}.vertebr-form[data-variant=record] .vertebr-field[data-kind=image]{grid-column:auto}.vertebr-field{display:grid;gap:.35rem;align-content:start;min-width:0}.vertebr-field[data-span=wide],.vertebr-field[data-span=full]{grid-column:1 / -1}.vertebr-field-head{display:flex;align-items:center;justify-content:space-between;gap:.35rem;min-height:1.4rem}.vertebr-field-head label{min-width:0;flex:1 1 auto}.vertebr-field[data-storefront=off]{opacity:.55}.vertebr-enum-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.35rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-bg);overflow:hidden}.vertebr-enum-list-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.45rem .55rem;border-bottom:1px solid var(--vb-border)}.vertebr-enum-list-row:last-child{border-bottom:0}.vertebr-enum-list-row[data-on=false]{opacity:.55}.vertebr-enum-list-label{display:flex;align-items:center;gap:.55rem;min-width:0;font-size:.86rem;font-weight:500;color:var(--vb-text);cursor:pointer}.vertebr-enum-list-label input{width:.95rem;height:.95rem;accent-color:var(--vb-accent)}.vertebr-enum-list-move{display:flex;gap:.2rem}.vertebr-enum-list-move button{appearance:none;width:1.7rem;height:1.7rem;border:1px solid var(--vb-border);border-radius:6px;background:var(--vb-bg-elevated);color:var(--vb-text-muted);cursor:pointer}.vertebr-enum-list-move button:hover:not(:disabled){color:var(--vb-text);border-color:var(--vb-border-strong)}.vertebr-enum-list-move button:disabled{opacity:.4;cursor:default}.vertebr-field label,.vertebr-field>span{font-size:.78rem;font-weight:500;color:var(--vb-text-muted);letter-spacing:.01em}.vertebr-field input[type=text],.vertebr-field input[type=number],.vertebr-field input[type=password],.vertebr-field input[type=email],.vertebr-field textarea{width:100%;min-height:2.4rem;border:1px solid var(--vb-border);background:var(--vb-bg);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .75rem;font:inherit;font-size:.9rem;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.vertebr-field textarea{resize:vertical;min-height:4.5rem;line-height:1.5;padding-top:.65rem}.vertebr-field-money{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:stretch}.vertebr-field-money-prefix{display:grid;place-items:center;padding:0 .7rem;border:1px solid var(--vb-border);border-right:0;border-radius:var(--vb-radius-sm) 0 0 var(--vb-radius-sm);background:var(--vb-surface-tint);color:var(--vb-text-muted);font-family:var(--vb-mono);font-size:.86rem}.vertebr-field-money input{border-top-left-radius:0;border-bottom-left-radius:0;font-variant-numeric:tabular-nums;font-family:var(--vb-mono)}.vertebr-field-prose{display:grid;gap:0;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-bg);overflow:hidden}.vertebr-md-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.15rem;padding:.35rem .4rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-md-btn{appearance:none;border:0;background:transparent;color:var(--vb-text-muted);border-radius:5px;min-width:1.7rem;height:1.7rem;padding:0 .4rem;font:inherit;font-size:.78rem;font-weight:600;cursor:pointer}.vertebr-md-btn:hover:not(:disabled){background:var(--vb-bg-hover);color:var(--vb-text)}.vertebr-md-btn[data-active=true]{background:var(--vb-bg-hover);color:var(--vb-text)}.vertebr-md-btn:disabled{opacity:.45;cursor:not-allowed}.vertebr-md-glyph{font-weight:700}.vertebr-md-italic{font-style:italic;font-family:Georgia,Times New Roman,serif}.vertebr-md-strike{text-decoration:line-through}.vertebr-md-sep{width:1px;height:1rem;margin:0 .25rem;background:var(--vb-border)}.vertebr-field-prose textarea,.vertebr-md-content{resize:none;min-height:7.5rem;overflow:hidden;line-height:1.55;border:0;border-radius:0;box-shadow:none}.vertebr-md-content{padding:.65rem .75rem;outline:none;color:var(--vb-text)}.vertebr-md-content p{margin:0 0 .65em}.vertebr-md-content p:last-child{margin-bottom:0}.vertebr-md-content h2,.vertebr-md-content h3{margin:.85em 0 .4em;font-size:1.05em;font-weight:650;line-height:1.3}.vertebr-md-content ul,.vertebr-md-content ol{margin:.35em 0 .65em;padding-left:1.3rem}.vertebr-md-content a{color:var(--vb-accent)}.vertebr-md-content s{text-decoration:line-through}.vertebr-md-content code{font-family:var(--vb-mono);font-size:.86em;padding:.08em .32em;border-radius:4px;background:var(--vb-surface-tint);border:1px solid var(--vb-border)}.vertebr-md-content pre{margin:.45em 0 .7em;padding:.65rem .75rem;overflow:auto;border-radius:6px;background:var(--vb-surface-tint);border:1px solid var(--vb-border)}.vertebr-md-content pre code{padding:0;border:0;background:transparent}.vertebr-md-content blockquote{margin:.45em 0 .7em;padding:.15rem 0 .15rem .75rem;border-left:2px solid var(--vb-accent-dim);color:var(--vb-text-muted)}.vertebr-md-content img{display:block;max-width:100%;height:auto;margin:.5em 0;border-radius:8px;border:1px solid var(--vb-border)}.vertebr-md-content table{width:100%;border-collapse:collapse;margin:.5em 0 .75em;font-size:.88em}.vertebr-md-content th,.vertebr-md-content td{border:1px solid var(--vb-border);padding:.35rem .5rem;vertical-align:top;min-width:4rem}.vertebr-md-content th{background:var(--vb-surface-tint);font-weight:650;text-align:left}.vertebr-md-content .selectedCell:after{content:"";position:absolute;inset:0;background:var(--vb-accent-soft);pointer-events:none}.vertebr-md-content td,.vertebr-md-content th{position:relative}.vertebr-md-content p.is-editor-empty:first-child:before{color:var(--vb-text-subtle);content:attr(data-placeholder);float:left;height:0;pointer-events:none}.vertebr-field-prose textarea:focus,.vertebr-md-content:focus{box-shadow:none;outline:none}.vertebr-field-prose:focus-within{border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-field-prose-meta{margin:0;padding:.35rem .7rem .45rem;border-top:1px solid var(--vb-border);font-family:var(--vb-mono);font-size:.68rem;letter-spacing:.04em;color:var(--vb-text-subtle);background:var(--vb-surface-tint)}.vertebr-field input:hover,.vertebr-field textarea:hover{border-color:var(--vb-border-strong)}.vertebr-field input:focus,.vertebr-field textarea:focus{outline:none;border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft);background:var(--vb-input-focus-bg)}.vertebr-field input[readonly],.vertebr-field textarea[readonly]{opacity:.65;cursor:default}.vertebr-field-media{display:grid;grid-template-columns:72px minmax(0,1fr);gap:.75rem;align-items:center}.vertebr-field-media img{width:72px;height:72px;object-fit:cover;border-radius:var(--vb-radius);border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-field-files-list{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:.55rem}.vertebr-field-files-list li{display:grid;gap:.35rem}.vertebr-field-files-list img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--vb-radius);border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-field-files-empty{margin:0;font-size:.82rem;color:var(--vb-text-subtle)}.vertebr-field[data-kind=image]{grid-column:1 / -1}.vertebr-switch-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.65rem .8rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-surface-tint);grid-column:1 / -1}.vertebr-switch-row-copy{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1 1 auto}.vertebr-switch-row-desc{margin:0;font-size:.78rem;line-height:1.4;color:var(--vb-text-muted)}.vertebr-switch-row label{font-size:.88rem;font-weight:500;color:var(--vb-text);font-family:var(--vb-font)}.vertebr-switch{width:40px;height:22px;background:var(--vb-bg-muted);border-radius:999px;position:relative;border:1px solid var(--vb-border);cursor:pointer;flex:none;transition:background .14s ease,border-color .14s ease}.vertebr-switch[data-state=checked]{background:color-mix(in srgb,var(--vb-accent) 35%,transparent);border-color:var(--vb-accent-dim)}.vertebr-switch-thumb{display:block;width:16px;height:16px;background:var(--vb-text);border-radius:999px;transform:translate(2px);transition:transform .14s ease,background .14s ease;margin-top:2px}.vertebr-switch[data-state=checked] .vertebr-switch-thumb{transform:translate(18px);background:var(--vb-accent)}.vertebr-actions{flex:0 0 auto;position:relative;z-index:5;display:flex;align-items:center;gap:.75rem;padding:.85rem 1.35rem;padding-bottom:calc(.85rem + env(safe-area-inset-bottom,0px));border-top:1px solid var(--vb-border);background:linear-gradient(180deg,var(--vb-actions-from) 0%,var(--vb-actions-to) 100%);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 -10px 24px -18px color-mix(in srgb,var(--vb-text) 40%,transparent)}@media(pointer:coarse){.vertebr-actions{padding-bottom:calc(5.6rem + env(safe-area-inset-bottom,0px))}}.vertebr-actions-spacer{flex:1}.vertebr-dirty{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--vb-mono);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--vb-accent)}.vertebr-dirty:before{content:"";width:6px;height:6px;border-radius:999px;background:var(--vb-accent);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-kbd{font-family:var(--vb-mono);font-size:.68rem;color:var(--vb-text-subtle);border:1px solid var(--vb-border);border-bottom-width:2px;border-radius:4px;padding:.1rem .35rem}.vertebr-upload{display:flex;flex-direction:column;gap:.45rem}.vertebr-upload-drop{display:flex;flex-direction:column;align-items:center;gap:.55rem;padding:.85rem .75rem;border:1px dashed var(--vb-border-strong);border-radius:10px;background:var(--vb-surface-tint);text-align:center;transition:border-color .12s ease,background .12s ease}.vertebr-upload-drop[data-drag=true]{border-color:var(--vb-accent-dim);background:var(--vb-accent-soft)}.vertebr-upload-drop[data-busy=true]{opacity:.7}.vertebr-upload-copy{margin:0;font-size:.78rem;color:var(--vb-text-muted);line-height:1.35}.vertebr-upload-error{margin:0;font-size:.78rem;color:var(--vb-danger)}.vertebr-upload-status{margin:0;font-size:.82rem;color:var(--vb-text-muted)}.vertebr-upload-check{display:flex;align-items:center;gap:.55rem;font-size:.86rem;color:var(--vb-text);cursor:pointer}.vertebr-upload-check input{accent-color:var(--vb-accent)}.vertebr-upload-results{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.65rem;max-height:220px;overflow:auto}.vertebr-upload-results li{display:grid;grid-template-columns:48px minmax(0,1fr);gap:.7rem;align-items:center;padding:.45rem;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-surface-tint)}.vertebr-upload-results img{width:48px;height:48px;object-fit:cover;border-radius:6px;border:1px solid var(--vb-border)}.vertebr-upload-results strong{display:block;font-size:.84rem}.vertebr-upload-results a{display:block;margin-top:.15rem;font-size:.72rem;color:var(--vb-accent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}.vertebr-native-select{width:100%;min-height:2.4rem;border:1px solid var(--vb-border);background:var(--vb-bg);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .75rem;font:inherit;font-size:.9rem}.vertebr-modal-sm{width:min(100%,520px)}.vertebr-btn{appearance:none;border:1px solid var(--vb-border);background:var(--vb-bg-muted);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.52rem .95rem;font:inherit;font-size:.88rem;font-weight:500;cursor:pointer;transition:background .12s ease,border-color .12s ease,transform 80ms ease}.vertebr-btn:hover:not(:disabled){background:var(--vb-bg-hover);border-color:var(--vb-border-strong)}.vertebr-btn:active:not(:disabled){transform:translateY(1px)}.vertebr-btn-primary{background:var(--vb-btn-primary-from);border-color:var(--vb-btn-primary-border);color:var(--vb-accent-contrast);font-weight:var(--vb-font-weight-semibold)}.vertebr-btn-primary:hover:not(:disabled){background:var(--vb-btn-primary-hover-from);border-color:var(--vb-btn-primary-hover-border)}.vertebr-btn:disabled{opacity:.5;cursor:not-allowed}.vertebr-btn-quiet{border-color:transparent;background:transparent;color:var(--vb-text-muted);box-shadow:none}.vertebr-btn-quiet:hover:not(:disabled){background:var(--vb-bg-hover);border-color:transparent;color:var(--vb-text)}.vertebr-btn-danger-quiet:hover:not(:disabled){background:var(--vb-danger-soft);color:var(--vb-danger)}.vertebr-status{font-family:var(--vb-mono);font-size:.75rem;color:var(--vb-text-muted);letter-spacing:.02em}.vertebr-status[data-tone=ok]{color:var(--vb-ok)}.vertebr-status[data-tone=danger]{color:var(--vb-danger)}.vertebr-gallery{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-gallery-head-actions{display:inline-flex;align-items:center;gap:.55rem}.vertebr-gallery-body{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:1rem;padding:1.15rem 1.35rem 1.35rem}.vertebr-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.9rem;align-content:start}.vertebr-gallery-card{display:flex;flex-direction:column;gap:.55rem;padding:.65rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);min-width:0}.vertebr-gallery-thumb{display:block;aspect-ratio:1;border-radius:8px;overflow:hidden;border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-gallery-thumb img{display:block;width:100%;height:100%;object-fit:cover}.vertebr-gallery-meta{min-width:0}.vertebr-gallery-meta strong{display:block;font-size:.84rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-gallery-meta a{display:block;margin-top:.15rem;font-size:.7rem;color:var(--vb-text-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}.vertebr-gallery-meta a:hover{color:var(--vb-accent)}.vertebr-gallery-card .vertebr-btn{align-self:flex-start}.vertebr-font-library{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-font-library-head-actions{display:flex;align-items:center;gap:.75rem}.vertebr-font-library-body{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:1.25rem;padding:1.15rem 1.35rem 1.35rem}.vertebr-font-library-note{margin:0;color:var(--vb-muted);font-size:.875rem}.vertebr-font-library-grid,.vertebr-font-picker-grid,.vertebr-google-fonts-grid{display:grid;gap:1rem;align-content:start}.vertebr-font-library-grid{grid-template-columns:repeat(auto-fill,minmax(16rem,1fr))}.vertebr-font-library-card,.vertebr-google-fonts-card{display:flex;flex-direction:column;gap:.75rem;padding:1rem;border:1px solid var(--vb-line);border-radius:.75rem;background:var(--vb-surface);min-width:0}.vertebr-font-library-preview-btn,.vertebr-google-fonts-preview-btn{display:flex;flex-direction:column;gap:.45rem;width:100%;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}.vertebr-font-library-preview-btn:hover .vertebr-font-library-preview,.vertebr-google-fonts-preview-btn:hover .vertebr-google-fonts-card-copy{border-color:var(--vb-accent)}.vertebr-font-library-preview{display:flex;flex-direction:column;gap:.35rem;min-height:5.5rem;padding:.75rem;border:1px solid var(--vb-line);border-radius:.5rem;background:var(--vb-bg);transition:border-color .15s ease}.vertebr-font-library-preview-hint{color:var(--vb-muted);font-size:.72rem}.vertebr-font-library-ag{font-size:2rem;line-height:1}.vertebr-font-library-preview p,.vertebr-font-picker-preview p,.vertebr-font-preview-body{margin:0;font-size:.95rem;line-height:1.45}.vertebr-font-library-meta{display:flex;flex-direction:column;gap:.2rem;min-width:0}.vertebr-font-library-meta strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-font-library-meta span,.vertebr-font-library-meta code{color:var(--vb-muted);font-size:.8rem}.vertebr-font-library-meta code{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-google-fonts{display:flex;flex-direction:column;gap:1rem;padding:1rem;border:1px solid var(--vb-line);border-radius:.75rem;background:color-mix(in srgb,var(--vb-surface) 88%,var(--vb-bg))}.vertebr-google-fonts-head{display:flex;flex-wrap:wrap;align-items:end;justify-content:space-between;gap:1rem}.vertebr-google-fonts-head h3,.vertebr-font-picker-modal-head h3,.vertebr-font-preview-modal-head h3{margin:0}.vertebr-google-fonts-head p,.vertebr-font-picker-modal-head p,.vertebr-font-preview-modal-head p{margin:.25rem 0 0;color:var(--vb-muted);font-size:.875rem}.vertebr-google-fonts-search{min-width:14rem;padding:.55rem .75rem;border:1px solid var(--vb-line);border-radius:.5rem;background:var(--vb-bg);color:var(--vb-ink)}.vertebr-google-fonts-grid-scroll{max-height:min(18rem,42vh);overflow:auto;padding-right:.15rem}.vertebr-google-fonts-grid{grid-template-columns:repeat(auto-fill,minmax(13rem,1fr))}.vertebr-google-fonts-card-copy{display:flex;flex-direction:column;gap:.15rem;padding:.65rem;border:1px solid var(--vb-line);border-radius:.5rem;background:var(--vb-bg);transition:border-color .15s ease}.vertebr-google-fonts-card-copy span{color:var(--vb-muted);font-size:.8rem}.vertebr-font-picker{display:flex;flex-direction:column;gap:1rem}.vertebr-font-picker-current{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid var(--vb-line);border-radius:.65rem;background:var(--vb-surface)}.vertebr-font-picker-current strong{display:block}.vertebr-font-picker-current span{color:var(--vb-muted);font-size:.875rem}.vertebr-font-picker-preview{padding:1rem;border:1px dashed var(--vb-line);border-radius:.65rem}.vertebr-font-picker-modal-backdrop,.vertebr-font-preview-modal-backdrop{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:1.5rem;background:#00000073}.vertebr-font-picker-modal,.vertebr-font-preview-modal{width:min(52rem,100%);max-height:min(88vh,44rem);display:flex;flex-direction:column;gap:1rem;padding:1.25rem;border:1px solid var(--vb-line);border-radius:.85rem;background:var(--vb-bg);box-shadow:0 24px 64px #0000002e;overflow:hidden}.vertebr-font-preview-modal{width:min(40rem,100%)}.vertebr-font-picker-modal-head,.vertebr-font-preview-modal-head{display:flex;align-items:start;justify-content:space-between;gap:1rem;flex-shrink:0}.vertebr-font-picker-modal-body{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(14rem,.9fr);gap:1rem;min-height:0;flex:1 1 auto}.vertebr-font-picker-grid-scroll{min-height:0;max-height:min(52vh,28rem);overflow:auto;padding-right:.2rem}.vertebr-font-picker-grid{grid-template-columns:repeat(auto-fill,minmax(10.5rem,1fr))}.vertebr-font-picker-detail{min-height:0;max-height:min(52vh,28rem);overflow:auto;display:flex;flex-direction:column;gap:.75rem;padding:1rem;border:1px solid var(--vb-line);border-radius:.65rem;background:var(--vb-surface)}.vertebr-font-picker-detail-label{margin:0;color:var(--vb-muted);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase}.vertebr-font-picker-modal-actions,.vertebr-font-preview-modal-actions{display:flex;justify-content:flex-end;gap:.65rem;flex-shrink:0;padding-top:.15rem;border-top:1px solid var(--vb-line)}.vertebr-font-picker-option{display:flex;flex-direction:column;gap:.2rem;min-height:6.5rem;padding:.85rem;border:1px solid var(--vb-line);border-radius:.65rem;background:var(--vb-bg);color:var(--vb-ink);text-align:left;cursor:pointer}.vertebr-font-picker-option[data-active]{border-color:var(--vb-accent);box-shadow:inset 0 0 0 1px var(--vb-accent)}.vertebr-font-picker-option span,.vertebr-font-picker-option em{color:var(--vb-muted);font-size:.8rem;font-style:normal}.vertebr-font-preview-modal-body{overflow:auto;min-height:0}.vertebr-font-preview-sample{display:flex;flex-direction:column;gap:.65rem}.vertebr-font-preview-sample[data-compact=true]{gap:.4rem}.vertebr-font-preview-eyebrow{font-size:.72rem;letter-spacing:.18em;text-transform:uppercase}.vertebr-font-preview-heading{font-size:clamp(1.5rem,3vw,2rem);line-height:1.15}.vertebr-font-preview-alphabet{font-size:.82rem;line-height:1.55;color:var(--vb-muted)}.vertebr-font-preview-weights{display:flex;flex-wrap:wrap;gap:.75rem;font-size:.85rem}.vertebr-error-inline{color:var(--vb-danger, #b42318);font-size:.875rem}@media(max-width:760px){.vertebr-font-picker-modal-body{grid-template-columns:1fr}.vertebr-font-picker-detail{max-height:none}.vertebr-font-picker-grid-scroll{max-height:min(34vh,18rem)}}.vertebr-config-editor{flex:1 1 0%;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-config-editor>.vertebr-form,.vertebr-config-editor>.vertebr-page-editor{flex:1 1 0%;min-height:0}.vertebr-page-editor{flex:1 1 0%;min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:0;overflow:hidden}.vertebr-page-editor-form{min-width:0;min-height:0;height:100%;display:flex;flex-direction:column;overflow:hidden;border-right:1px solid var(--vb-border)}.vertebr-page-editor-form .vertebr-form{flex:1 1 0%;min-height:0;height:100%;border-radius:0}.vertebr-page-preview{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--vb-surface-tint)}.vertebr-page-preview-meta{flex:0 0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;padding:.7rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-page-preview-meta p{margin:0;display:flex;align-items:baseline;gap:.45rem;font-size:.78rem;color:var(--vb-text-muted)}.vertebr-page-preview-meta span{font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-page-preview-meta strong{font-weight:560;color:var(--vb-text)}.vertebr-page-preview-viewports{margin-left:auto;display:inline-flex;align-items:center;gap:.15rem;padding:.15rem;border:1px solid var(--vb-border);border-radius:999px;background:var(--vb-bg)}.vertebr-page-preview-viewports button{appearance:none;margin:0;border:0;border-radius:999px;padding:.28rem .7rem;font:inherit;font-size:.74rem;font-weight:520;color:var(--vb-text-muted);background:transparent;cursor:pointer}.vertebr-page-preview-viewports button:hover{color:var(--vb-text)}.vertebr-page-preview-viewports button[data-active=true]{color:var(--vb-text);background:var(--vb-surface-tint);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 80%,transparent)}.vertebr-page-preview-stage{flex:1 1 auto;min-height:0;padding:.75rem;display:flex;justify-content:stretch;align-items:stretch}.vertebr-page-preview-stage[data-viewport=mobile]{justify-content:center;align-items:center;overflow:auto;background:radial-gradient(circle at 50% 0%,color-mix(in srgb,var(--vb-text) 4%,transparent),transparent 55%),var(--vb-surface-tint)}.vertebr-page-preview-shell{flex:1 1 auto;min-width:0;min-height:0;display:flex}.vertebr-page-preview-stage[data-viewport=mobile] .vertebr-page-preview-shell{flex:0 0 auto}.vertebr-page-preview-frame{flex:1 1 auto;min-width:0;min-height:0;border:1px solid var(--vb-border);border-radius:10px;overflow:hidden;background:var(--vb-bg);box-shadow:var(--vb-shadow)}.vertebr-page-preview-stage[data-viewport=mobile] .vertebr-page-preview-frame{flex:0 0 auto;border-radius:28px;box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 90%,transparent),0 18px 40px color-mix(in srgb,var(--vb-text) 12%,transparent)}.vertebr-page-preview-frame iframe{display:block;width:100%;height:100%;border:0;background:#fff}.vertebr-page-preview-empty{height:100%;display:grid;place-items:center;padding:1.5rem;text-align:center;color:var(--vb-text-muted);font-size:.88rem}@media(max-width:1100px){.vertebr-page-editor{grid-template-columns:1fr;grid-template-rows:minmax(240px,42%) minmax(0,1fr);overflow:hidden}.vertebr-page-editor-form{border-right:0;border-bottom:1px solid var(--vb-border);max-height:none;min-height:0}.vertebr-page-preview-stage{min-height:280px}}.vertebr-topbar{grid-column:1 / -1;grid-row:1;z-index:40;display:flex;align-items:center;justify-content:space-between;gap:var(--vb-space-400);height:var(--vb-topbar-height);padding:0 var(--vb-space-500);border-bottom:1px solid var(--vb-border-subdued);background:var(--vb-topbar-bg)}.vertebr-topbar-start,.vertebr-topbar-end{display:flex;align-items:center;gap:var(--vb-space-300);min-width:0}.vertebr-topbar-brand{font-size:var(--vb-font-size-200);font-weight:var(--vb-font-weight-semibold);white-space:nowrap}.vertebr-topbar-toggle{appearance:none;border:1px solid var(--vb-border);background:var(--vb-bg-elevated);color:var(--vb-text);border-radius:var(--vb-radius-sm);width:2rem;height:2rem;cursor:pointer}.vertebr-topbar-env{display:flex;align-items:center;gap:var(--vb-space-200)}.vertebr-topbar-search{display:flex;align-items:center;gap:var(--vb-space-200);min-width:12rem;max-width:22rem;flex:1;padding:.45rem .75rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius-full);background:var(--vb-bg-muted);color:var(--vb-text-subtle);font-size:var(--vb-font-size-100)}.vertebr-topbar-search kbd{margin-left:auto;font-family:var(--vb-mono);font-size:var(--vb-font-size-75);opacity:.7}.vertebr-topbar-token{display:flex;align-items:center;gap:var(--vb-space-100)}.vertebr-topbar-user{font-size:var(--vb-font-size-100);color:var(--vb-text-muted);max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:900px){.vertebr-topbar-search{display:none}}.vertebr-savebar{position:sticky;bottom:0;z-index:35;display:flex;align-items:center;justify-content:space-between;gap:var(--vb-space-400);min-height:var(--vb-savebar-height);padding:var(--vb-space-300) var(--vb-space-500);padding-bottom:calc(var(--vb-space-300) + env(safe-area-inset-bottom,0px));border-top:1px solid var(--vb-border);background:color-mix(in srgb,var(--vb-bg-elevated) 92%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.vertebr-savebar-message{font-size:var(--vb-font-size-200);color:var(--vb-text-secondary)}.vertebr-savebar[data-tone=ok] .vertebr-savebar-message{color:var(--vb-ok)}.vertebr-savebar[data-tone=danger] .vertebr-savebar-message{color:var(--vb-danger-text)}.vertebr-savebar-actions{display:flex;gap:var(--vb-space-200)}.vertebr-toast-stack{position:fixed;right:var(--vb-space-500);bottom:calc(var(--vb-space-500) + env(safe-area-inset-bottom,0px));z-index:100;display:flex;flex-direction:column;gap:var(--vb-space-200);pointer-events:none}.vertebr-toast{pointer-events:auto;display:flex;align-items:center;gap:var(--vb-space-300);min-width:16rem;max-width:24rem;padding:var(--vb-space-300) var(--vb-space-400);border:1px solid var(--vb-border);border-radius:var(--vb-radius-md);background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow-lg);font-size:var(--vb-font-size-200)}.vertebr-toast[data-tone=ok]{border-color:color-mix(in srgb,var(--vb-ok) 40%,var(--vb-border))}.vertebr-toast[data-tone=danger]{border-color:color-mix(in srgb,var(--vb-danger) 40%,var(--vb-border))}.vertebr-toast-dismiss{appearance:none;border:none;background:transparent;color:var(--vb-text-muted);font-size:1.1rem;cursor:pointer;margin-left:auto}.vertebr-card{border:1px solid var(--vb-border-subdued);border-radius:var(--vb-radius-lg);background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow-sm)}.vertebr-card[data-subdued=true]{background:var(--vb-bg-subdued);box-shadow:none}.vertebr-card-head{padding:var(--vb-space-400) var(--vb-space-500);border-bottom:1px solid var(--vb-border-subdued);font-weight:var(--vb-font-weight-semibold)}.vertebr-card-body{padding:var(--vb-space-500)}.vertebr-badge{display:inline-flex;align-items:center;padding:.12rem .45rem;border-radius:var(--vb-radius-full);font-size:var(--vb-font-size-75);font-weight:var(--vb-font-weight-medium);border:1px solid var(--vb-border);color:var(--vb-text-secondary);background:var(--vb-bg-muted)}.vertebr-badge[data-tone=ok]{color:var(--vb-ok);border-color:color-mix(in srgb,var(--vb-ok) 35%,transparent);background:var(--vb-ok-soft)}.vertebr-badge[data-tone=danger]{color:var(--vb-danger-text);border-color:color-mix(in srgb,var(--vb-danger) 35%,transparent);background:var(--vb-danger-soft)}.vertebr-banner{padding:var(--vb-space-300) var(--vb-space-400);border-radius:var(--vb-radius-md);border:1px solid var(--vb-border);background:var(--vb-bg-muted);font-size:var(--vb-font-size-200)}.vertebr-banner[data-tone=ok]{border-color:color-mix(in srgb,var(--vb-ok) 35%,transparent);background:var(--vb-ok-soft)}.vertebr-banner[data-tone=danger]{border-color:color-mix(in srgb,var(--vb-danger) 35%,transparent);background:var(--vb-danger-soft)}.vertebr-empty-state{display:grid;gap:var(--vb-space-200);justify-items:start;padding:var(--vb-space-800);text-align:left}.vertebr-empty-state h3{margin:0;font-size:var(--vb-font-size-400)}.vertebr-empty-state p{margin:0;color:var(--vb-text-muted);max-width:28rem}.vertebr-skeleton{display:grid;gap:var(--vb-space-200)}.vertebr-skeleton span{display:block;height:.85rem;border-radius:var(--vb-radius-sm);background:linear-gradient(90deg,var(--vb-bg-muted) 0%,var(--vb-bg-hover) 50%,var(--vb-bg-muted) 100%);background-size:200% 100%;animation:vb-skeleton 1.2s ease-in-out infinite}@keyframes vb-skeleton{0%{background-position:100% 0}to{background-position:-100% 0}}.vertebr-breadcrumbs{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin:0 0 var(--vb-space-200);padding:0;list-style:none;font-size:var(--vb-font-size-100);color:var(--vb-text-muted)}.vertebr-breadcrumbs li{display:inline-flex;align-items:center;gap:.35rem}.vertebr-breadcrumbs li:not(:last-child):after{content:"/";opacity:.5}.vertebr-breadcrumbs strong{color:var(--vb-text);font-weight:var(--vb-font-weight-medium)}.vertebr-loading,.vertebr-error{min-height:100vh;display:grid;place-items:center;background:var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-login{min-height:100vh;display:grid;place-items:center;padding:1.5rem;background:radial-gradient(900px 500px at 50% 0%,var(--vb-glow-accent),transparent 60%),var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-login-card{width:min(100%,400px);display:grid;gap:1.25rem;padding:1.6rem;border:1px solid var(--vb-border);border-radius:12px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow)}.vertebr-login-card h1{margin:0;font-size:1.5rem;letter-spacing:-.02em}.vertebr-login-card p{margin:.4rem 0 0;color:var(--vb-text-muted);line-height:1.5}.vertebr-login-form{display:grid;gap:.9rem}.vertebr-error{color:var(--vb-danger)}@media(max-width:900px){.vertebr-record-layout{grid-template-columns:1fr}.vertebr-record-aside{position:static;display:grid;grid-template-columns:minmax(140px,180px) minmax(0,1fr);align-items:start}.vertebr-record-aside .vertebr-record-block{grid-column:2}.vertebr-record-preview{grid-row:1 / span 20}}@media(max-width:720px){.vertebr-form-scroll{padding:1rem}.vertebr-form-fields{grid-template-columns:1fr;padding:.95rem}.vertebr-form[data-variant=record] .vertebr-form-fields{padding:0}.vertebr-form-fields[data-layout=chips]{grid-template-columns:repeat(auto-fill,minmax(4.25rem,1fr))}.vertebr-field[data-span=wide],.vertebr-field[data-span=full]{grid-column:1 / -1}.vertebr-field-media{grid-template-columns:1fr}.vertebr-field-media img{width:100%;max-width:160px;height:auto;aspect-ratio:1}.vertebr-record-aside{display:flex;flex-direction:column}.vertebr-record-preview{max-width:220px}.vertebr-actions{flex-wrap:wrap;padding:.85rem 1rem;padding-bottom:calc(5.6rem + env(safe-area-inset-bottom,0px))}.vertebr-resource-edit-head{padding:1rem}}@media(max-width:860px){.vertebr-root{grid-template-columns:1fr;height:auto;max-height:none;overflow:visible}.vertebr-sidebar{position:relative;height:auto;max-height:none;border-right:0;border-bottom:1px solid var(--vb-border)}.vertebr-main{height:auto;min-height:0;overflow:hidden;padding:0}.vertebr-content{overflow:hidden;padding:1.25rem 1rem 1rem}.vertebr-panel{min-height:min(70vh,640px);max-height:calc(100dvh - 8rem)}.vertebr-table-wrap{min-height:320px}}
1
+ :root{--vb-space-100: .25rem;--vb-space-200: .5rem;--vb-space-300: .75rem;--vb-space-400: 1rem;--vb-space-500: 1.25rem;--vb-space-600: 1.5rem;--vb-space-800: 2rem;--vb-space-1000: 2.5rem;--vb-space-1200: 3rem;--vb-font-size-75: .75rem;--vb-font-size-100: .8125rem;--vb-font-size-200: .875rem;--vb-font-size-300: 1rem;--vb-font-size-400: 1.125rem;--vb-font-size-500: 1.375rem;--vb-font-size-600: 1.75rem;--vb-font-weight-regular: 400;--vb-font-weight-medium: 500;--vb-font-weight-semibold: 600;--vb-line-height-tight: 1.2;--vb-line-height-normal: 1.45;--vb-line-height-loose: 1.6;--vb-radius-xs: 4px;--vb-radius-sm: 6px;--vb-radius-md: 8px;--vb-radius-lg: 12px;--vb-radius-full: 999px;--vb-shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--vb-shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--vb-shadow-lg: 0 12px 32px rgba(0, 0, 0, .12);--vb-topbar-height: 3.25rem;--vb-sidebar-width: 240px;--vb-sidebar-width-collapsed: 4rem;--vb-savebar-height: 3.5rem;--vb-duration-fast: .12s;--vb-duration-normal: .2s;--vb-ease: cubic-bezier(.4, 0, .2, 1);--vb-font: "Inter", "IBM Plex Sans", system-ui, sans-serif;--vb-mono: "IBM Plex Mono", ui-monospace, monospace}:root,[data-vb-theme=dark]{color-scheme:dark;--vb-bg: #1a1a1a;--vb-bg-deep: #141414;--vb-bg-elevated: #242424;--vb-bg-muted: #2e2e2e;--vb-bg-hover: #383838;--vb-bg-subdued: #303030;--vb-border: #424242;--vb-border-subdued: #353535;--vb-border-strong: #5c5c5c;--vb-text: #f3f3f3;--vb-text-muted: #a8a8a8;--vb-text-subtle: #7a7a7a;--vb-text-secondary: #b5b5b5;--vb-accent: #008060;--vb-accent-dim: #006e52;--vb-accent-soft: rgba(0, 128, 96, .14);--vb-accent-contrast: #ffffff;--vb-interactive: #5c9eff;--vb-interactive-soft: rgba(92, 158, 255, .12);--vb-danger: #e51c00;--vb-danger-soft: rgba(229, 28, 0, .12);--vb-danger-text: #ff8a7a;--vb-ok: #29845a;--vb-ok-soft: rgba(41, 132, 90, .14);--vb-warn-text: #ffc96b;--vb-warn-soft: rgba(255, 201, 107, .12);--vb-glow-accent: transparent;--vb-glow-cool: transparent;--vb-surface-tint: rgba(255, 255, 255, .03);--vb-surface-tint-strong: rgba(255, 255, 255, .06);--vb-sidebar-from: #1a1a1a;--vb-sidebar-to: #1a1a1a;--vb-header-from: #1a1a1a;--vb-header-to: #1a1a1a;--vb-topbar-bg: #242424;--vb-actions-from: rgba(36, 36, 36, .95);--vb-actions-to: rgba(26, 26, 26, .98);--vb-input-focus-bg: #2e2e2e;--vb-btn-primary-from: #008060;--vb-btn-primary-to: #008060;--vb-btn-primary-border: #006e52;--vb-btn-primary-hover-from: #00966d;--vb-btn-primary-hover-to: #00966d;--vb-btn-primary-hover-border: #008060;--vb-radius: var(--vb-radius-md);--vb-radius-sm: var(--vb-radius-sm);--vb-shadow: var(--vb-shadow-md)}[data-vb-theme=light]{color-scheme:light;--vb-bg: #f1f1f1;--vb-bg-deep: #ebebeb;--vb-bg-elevated: #ffffff;--vb-bg-muted: #f6f6f7;--vb-bg-hover: #f1f1f1;--vb-bg-subdued: #fafbfb;--vb-border: #e3e3e3;--vb-border-subdued: #ebebeb;--vb-border-strong: #c9cccf;--vb-text: #202223;--vb-text-muted: #6d7175;--vb-text-subtle: #8c9196;--vb-text-secondary: #5c5f62;--vb-accent: #008060;--vb-accent-dim: #006e52;--vb-accent-soft: rgba(0, 128, 96, .08);--vb-accent-contrast: #ffffff;--vb-interactive: #005bd3;--vb-interactive-soft: rgba(0, 91, 211, .08);--vb-danger: #d72c0d;--vb-danger-soft: rgba(215, 44, 13, .08);--vb-danger-text: #8e1f0b;--vb-ok: #108043;--vb-ok-soft: rgba(16, 128, 67, .08);--vb-warn-text: #916a00;--vb-warn-soft: rgba(255, 184, 0, .12);--vb-glow-accent: transparent;--vb-glow-cool: transparent;--vb-surface-tint: rgba(32, 34, 35, .03);--vb-surface-tint-strong: rgba(32, 34, 35, .05);--vb-sidebar-from: #ebebeb;--vb-sidebar-to: #ebebeb;--vb-header-from: #ffffff;--vb-header-to: #ffffff;--vb-topbar-bg: #ffffff;--vb-actions-from: rgba(255, 255, 255, .95);--vb-actions-to: rgba(255, 255, 255, .98);--vb-input-focus-bg: #ffffff;--vb-btn-primary-from: #008060;--vb-btn-primary-to: #008060;--vb-btn-primary-border: #006e52;--vb-btn-primary-hover-from: #006e52;--vb-btn-primary-hover-to: #006e52;--vb-btn-primary-hover-border: #005e46;--vb-shadow: var(--vb-shadow-sm)}@media(prefers-color-scheme:light){:root:not([data-vb-theme]){color-scheme:light;--vb-bg: #f1f1f1;--vb-bg-deep: #ebebeb;--vb-bg-elevated: #ffffff;--vb-bg-muted: #f6f6f7;--vb-bg-hover: #f1f1f1;--vb-bg-subdued: #fafbfb;--vb-border: #e3e3e3;--vb-border-subdued: #ebebeb;--vb-border-strong: #c9cccf;--vb-text: #202223;--vb-text-muted: #6d7175;--vb-text-subtle: #8c9196;--vb-text-secondary: #5c5f62;--vb-accent: #008060;--vb-accent-dim: #006e52;--vb-accent-soft: rgba(0, 128, 96, .08);--vb-accent-contrast: #ffffff;--vb-interactive: #005bd3;--vb-interactive-soft: rgba(0, 91, 211, .08);--vb-danger: #d72c0d;--vb-danger-soft: rgba(215, 44, 13, .08);--vb-danger-text: #8e1f0b;--vb-ok: #108043;--vb-ok-soft: rgba(16, 128, 67, .08);--vb-warn-text: #916a00;--vb-warn-soft: rgba(255, 184, 0, .12);--vb-glow-accent: transparent;--vb-glow-cool: transparent;--vb-surface-tint: rgba(32, 34, 35, .03);--vb-surface-tint-strong: rgba(32, 34, 35, .05);--vb-sidebar-from: #ebebeb;--vb-sidebar-to: #ebebeb;--vb-header-from: #ffffff;--vb-header-to: #ffffff;--vb-topbar-bg: #ffffff;--vb-actions-from: rgba(255, 255, 255, .95);--vb-actions-to: rgba(255, 255, 255, .98);--vb-input-focus-bg: #ffffff;--vb-btn-primary-from: #008060;--vb-btn-primary-to: #008060;--vb-btn-primary-border: #006e52;--vb-btn-primary-hover-from: #006e52;--vb-btn-primary-hover-to: #006e52;--vb-btn-primary-hover-border: #005e46;--vb-shadow: var(--vb-shadow-sm)}}html:has(.vertebr-root),html:has(.vertebr-login),html:has(.vertebr-loading),html:has(.vertebr-error){background:var(--vb-bg)}html:has(.vertebr-root) body,html:has(.vertebr-login) body,html:has(.vertebr-loading) body,html:has(.vertebr-error) body{margin:0;padding:0;min-height:100vh;background:var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-root{position:relative;z-index:1;box-sizing:border-box;height:100dvh;max-height:100dvh;min-height:100dvh;width:100%;display:grid;grid-template-columns:var(--vb-sidebar-width) 1fr;grid-template-rows:var(--vb-topbar-height) 1fr;background:var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font);font-size:var(--vb-font-size-300);line-height:var(--vb-line-height-normal);-webkit-font-smoothing:antialiased;isolation:isolate;overflow:clip}.vertebr-root[data-sidebar-collapsed=true]{grid-template-columns:var(--vb-sidebar-width-collapsed) 1fr}.vertebr-root *,.vertebr-root *:before,.vertebr-root *:after{box-sizing:border-box}.vertebr-sidebar,.vertebr-sidebar-top,.vertebr-sidebar-bottom,.vertebr-nav,.vertebr-nav-group,.vertebr-brand,.vertebr-env,.vertebr-auth,.vertebr-theme{position:relative;float:none;inset:auto}.vertebr-sidebar{grid-row:2;position:sticky;top:var(--vb-topbar-height);z-index:30;align-self:start;height:calc(100dvh - var(--vb-topbar-height));max-height:calc(100dvh - var(--vb-topbar-height));border-right:1px solid var(--vb-border-subdued);background:var(--vb-sidebar-from);padding:var(--vb-space-400) var(--vb-space-300) var(--vb-space-400);display:flex;flex-direction:column;gap:0;overflow:hidden;isolation:isolate}.vertebr-sidebar[data-collapsed=true]{padding-inline:var(--vb-space-200)}.vertebr-sidebar[data-collapsed=true] .vertebr-nav-label-text{display:none}.vertebr-sidebar[data-collapsed=true] .vertebr-nav>button,.vertebr-sidebar[data-collapsed=true] .vertebr-nav-parent-label{justify-content:center;padding-inline:var(--vb-space-200)}.vertebr-nav-icon{flex:0 0 auto;width:1.1rem;height:1.1rem}.vertebr-sidebar-top{display:flex;flex-direction:column;gap:1.35rem;flex:1 1 auto;min-height:0;overflow-x:hidden;overflow-y:auto;padding-bottom:1rem}.vertebr-sidebar-bottom{flex:0 0 auto;position:relative;z-index:2;margin-top:0;padding-top:1rem;border-top:1px solid var(--vb-border);background:var(--vb-sidebar-from);display:flex;flex-direction:column;gap:1rem}.vertebr-theme{display:flex;flex-direction:column;gap:.4rem;padding:0 .15rem}.vertebr-theme-toggle{display:grid;grid-template-columns:1fr 1fr;gap:.25rem;padding:.2rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius);background:var(--vb-bg)}.vertebr-theme-option{appearance:none;border:0;background:transparent;color:var(--vb-text-muted);border-radius:var(--vb-radius-sm);padding:.45rem .5rem;font:inherit;font-size:.8rem;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;transition:background .12s ease,color .12s ease}.vertebr-theme-option:hover{color:var(--vb-text);background:var(--vb-bg-muted)}.vertebr-theme-option[data-active=true]{color:var(--vb-accent);background:var(--vb-accent-soft);font-weight:600}.vertebr-theme-option:focus-visible{outline:none;box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-theme-icon{flex:none}.vertebr-brand{display:flex;flex-direction:column;gap:.15rem;padding:.15rem .55rem .35rem}.vertebr-brand strong{font-size:1.05rem;letter-spacing:.14em;text-transform:uppercase;font-weight:600;color:var(--vb-text)}.vertebr-brand span{color:var(--vb-text-subtle);font-size:.72rem;font-family:var(--vb-mono);letter-spacing:.02em}.vertebr-env{display:flex;flex-direction:column;gap:.4rem;padding:0 .15rem}.vertebr-select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.5rem;appearance:none;border:1px solid var(--vb-border);background:var(--vb-bg-elevated);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .7rem;font-family:var(--vb-font);font-size:.88rem;font-weight:500;line-height:1.2;cursor:pointer;transition:border-color .14s ease,background .14s ease,box-shadow .14s ease}.vertebr-select-trigger:hover{border-color:var(--vb-border-strong);background:var(--vb-bg-muted)}.vertebr-select-trigger:focus-visible,.vertebr-select-trigger[data-state=open]{outline:none;border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-select-trigger[data-tone=danger]{border-color:color-mix(in srgb,var(--vb-danger) 45%,transparent);color:var(--vb-danger-text)}.vertebr-select-value{display:flex;align-items:center;gap:.5rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-select-dot{width:7px;height:7px;border-radius:999px;flex:none;background:var(--vb-ok);box-shadow:0 0 0 3px var(--vb-ok-soft)}.vertebr-select-dot[data-tone=danger]{background:var(--vb-danger);box-shadow:0 0 0 3px var(--vb-danger-soft)}.vertebr-select-dot[data-tone=warning],.vertebr-select-dot[data-tone=warn]{background:var(--vb-accent);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-select-icon{display:flex;color:var(--vb-text-muted);transition:transform .14s ease}.vertebr-select-trigger[data-state=open] .vertebr-select-icon{transform:rotate(180deg)}.vertebr-select-content{z-index:60;min-width:var(--radix-select-trigger-width);background:var(--vb-bg-elevated);border:1px solid var(--vb-border-strong);border-radius:var(--vb-radius);box-shadow:var(--vb-shadow);overflow:hidden;font-family:var(--vb-font);color:var(--vb-text);animation:vertebr-pop .12s ease-out}@keyframes vertebr-pop{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.vertebr-select-viewport{padding:.3rem;display:flex;flex-direction:column;gap:.1rem}.vertebr-select-item{display:flex;align-items:center;gap:.5rem;padding:.5rem .6rem;border-radius:var(--vb-radius-sm);font-size:.88rem;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none}.vertebr-select-item[data-highlighted]{background:var(--vb-bg-hover)}.vertebr-select-item[data-state=checked]{color:var(--vb-accent)}.vertebr-select-check{margin-left:auto;display:flex;color:var(--vb-accent)}.vertebr-env-lock{margin-left:auto;font-family:var(--vb-mono);font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;color:var(--vb-accent);border:1px solid color-mix(in srgb,var(--vb-accent) 30%,transparent);border-radius:999px;padding:.12rem .4rem;background:var(--vb-accent-soft)}.vertebr-auth{display:flex;flex-direction:column;gap:.5rem;padding:.15rem .2rem .35rem}.vertebr-auth-hint{margin:0;color:var(--vb-text-muted);font-size:.78rem;line-height:1.4;word-break:break-all}.vertebr-auth-input{width:100%;border:1px solid var(--vb-border);background:var(--vb-bg);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .65rem;font:inherit;font-size:.85rem;transition:border-color .14s ease,box-shadow .14s ease}.vertebr-auth-input:focus{outline:none;border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-auth-actions{display:flex;gap:.5rem}.vertebr-nav{display:flex;flex-direction:column;gap:1.15rem}.vertebr-nav-group{display:flex;flex-direction:column;gap:.2rem}.vertebr-nav-label{font-size:.65rem;letter-spacing:.14em;text-transform:uppercase;color:var(--vb-text-subtle);padding:.2rem .65rem .4rem;font-family:var(--vb-mono);font-weight:500}.vertebr-nav button{appearance:none;display:flex;align-items:center;gap:var(--vb-space-300);width:100%;border:0;background:transparent;color:var(--vb-text-muted);text-align:left;padding:.48rem .7rem;border-radius:var(--vb-radius-sm);cursor:pointer;font:inherit;font-size:.9rem;font-weight:450;line-height:1.35;position:relative;transition:background .12s ease,color .12s ease,box-shadow .12s ease}.vertebr-nav-item{display:flex;flex-direction:column;gap:0}.vertebr-nav-parent{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:stretch;gap:.15rem}.vertebr-nav-parent-label{min-width:0}.vertebr-nav-parent-toggle{display:inline-flex!important;align-items:center;justify-content:center;width:1.75rem!important;min-width:1.75rem;margin:.1rem .15rem .1rem 0!important;padding:0!important;border-radius:7px!important;color:var(--vb-text-subtle)!important;font-size:.62rem!important;line-height:1;letter-spacing:0}.vertebr-nav-parent-toggle:hover{background:var(--vb-bg-muted)!important;color:var(--vb-text)!important}.vertebr-nav-item[data-open=true] .vertebr-nav-parent-toggle{color:var(--vb-text-muted)!important}.vertebr-nav button:hover{background:var(--vb-bg-muted);color:var(--vb-text)}.vertebr-nav button[data-active=true]{background:var(--vb-accent-soft);box-shadow:inset 2px 0 0 var(--vb-accent);color:var(--vb-accent);font-weight:500}.vertebr-nav-parent-label[data-section=true]{color:var(--vb-text);font-weight:600;background:transparent;box-shadow:none}.vertebr-nav-parent-label[data-section=true]:hover{background:var(--vb-bg-muted)}.vertebr-nav-parent-label[data-section=true][data-active=true]{background:var(--vb-accent-soft);box-shadow:inset 2px 0 0 var(--vb-accent);color:var(--vb-accent);font-weight:500}.vertebr-nav-sub{display:flex;flex-direction:column;gap:.12rem;margin:.28rem 0 .35rem .85rem;padding:.1rem 0 .1rem .75rem;border-left:1px solid color-mix(in srgb,var(--vb-border) 70%,var(--vb-text-subtle) 30%)}.vertebr-nav-subitem{font-size:.8rem!important;padding:.4rem .7rem!important;border-radius:8px!important;color:var(--vb-text-subtle)!important;font-weight:450!important;letter-spacing:.01em}.vertebr-nav-subitem:hover{background:var(--vb-bg-muted)!important;color:var(--vb-text)!important;box-shadow:none!important}.vertebr-nav-subitem[data-active=true]{background:var(--vb-accent-soft)!important;box-shadow:none!important;color:var(--vb-text)!important;font-weight:560!important}.vertebr-nav-subitem[data-active=true]:before{content:"";position:absolute;left:-.75rem;top:.35rem;bottom:.35rem;width:2px;border-radius:1px;background:var(--vb-accent)}.vertebr-nav button:focus-visible,.vertebr-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-sidebar::-webkit-scrollbar,.vertebr-main::-webkit-scrollbar,.vertebr-table-wrap::-webkit-scrollbar{width:10px;height:10px}.vertebr-sidebar::-webkit-scrollbar-thumb,.vertebr-main::-webkit-scrollbar-thumb,.vertebr-table-wrap::-webkit-scrollbar-thumb{background:var(--vb-bg-muted);border:2px solid transparent;background-clip:content-box;border-radius:999px}.vertebr-sidebar::-webkit-scrollbar-thumb:hover,.vertebr-main::-webkit-scrollbar-thumb:hover,.vertebr-table-wrap::-webkit-scrollbar-thumb:hover{background:var(--vb-border-strong);background-clip:content-box}.vertebr-sidebar::-webkit-scrollbar-track,.vertebr-main::-webkit-scrollbar-track,.vertebr-table-wrap::-webkit-scrollbar-track{background:transparent}.vertebr-main{grid-row:2;min-width:0;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column}.vertebr-header{flex:0 0 auto;z-index:20;display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;padding:1.6rem 2rem 1.15rem;border-bottom:1px solid var(--vb-border-subdued);background:var(--vb-header-from)}.vertebr-content{flex:1 1 0%;min-width:0;min-height:0;display:flex;flex-direction:column;padding:1.25rem 2rem 1.5rem;overflow:hidden}.vertebr-heading-row{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap}.vertebr-header h1{margin:0;font-size:1.55rem;font-weight:600;letter-spacing:-.03em;line-height:1.15}.vertebr-header p{margin:.4rem 0 0;color:var(--vb-text-muted);font-size:.9rem}.vertebr-env-badge{font-family:var(--vb-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--vb-border);border-radius:999px;padding:.22rem .6rem;color:var(--vb-text-muted);background:var(--vb-surface-tint)}.vertebr-env-badge[data-tone=danger]{color:var(--vb-danger-text);border-color:color-mix(in srgb,var(--vb-danger) 45%,transparent);background:var(--vb-danger-soft)}.vertebr-env-badge[data-tone=warn],.vertebr-env-badge[data-tone=warning]{color:var(--vb-warn-text);border-color:color-mix(in srgb,var(--vb-accent) 45%,transparent);background:var(--vb-accent-soft)}.vertebr-env-badge[data-tone=neutral]{color:var(--vb-ok);border-color:color-mix(in srgb,var(--vb-ok) 40%,transparent);background:var(--vb-ok-soft)}.vertebr-panel{flex:1 1 0%;min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--vb-bg-elevated);border:1px solid var(--vb-border);border-radius:12px;box-shadow:var(--vb-shadow);overflow:hidden}.vertebr-panel-head{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 1.5rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-panel-head h2{margin:0;font-size:.72rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-panel-head-actions{display:inline-flex;align-items:center;gap:.55rem}.vertebr-count{font-family:var(--vb-mono);font-size:.7rem;color:var(--vb-text-subtle);border:1px solid var(--vb-border);border-radius:999px;padding:.12rem .5rem}.vertebr-resource-body{flex:1 1 auto;min-width:0;min-height:0;display:flex;flex-direction:column}.vertebr-table-toolbar{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.55rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-table-toolbar-start{display:inline-flex;align-items:center;gap:.35rem;flex-wrap:wrap}.vertebr-table-scroll-controls{display:inline-flex;align-items:center;gap:.15rem;margin-left:auto}.vertebr-table-scroll-btn{padding:.3rem .45rem}.vertebr-btn-icon{display:inline-flex;align-items:center;gap:.4rem}.vertebr-btn-glyph{flex:none}.vertebr-row-actions{display:inline-flex;flex-wrap:nowrap;align-items:center;gap:.1rem;justify-content:flex-end}.vertebr-row-actions .vertebr-btn{padding:.3rem .55rem;font-size:.78rem;font-weight:500;white-space:nowrap}.vertebr-resource-edit{flex:1 1 0%;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-resource-edit>.vertebr-form{flex:1 1 0%;min-height:0}.vertebr-resource-edit-head{flex:0 0 auto;display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.1rem 1.35rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-resource-edit-heading h2{margin:.15rem 0 0;font-size:1.25rem;font-weight:600;letter-spacing:-.02em;color:var(--vb-text)}.vertebr-resource-edit-eyebrow{margin:0;font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-resource-edit-id{margin:.35rem 0 0;font-family:var(--vb-mono);font-size:.75rem;color:var(--vb-text-muted)}.vertebr-metrics{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.vertebr-metrics-window{margin:.22rem 0 0;font-size:.78rem;color:var(--vb-text-muted)}.vertebr-metrics-body{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:1.5rem;padding:1.15rem 1.5rem 1.6rem}.vertebr-metrics-block,.vertebr-metrics-kpis,.vertebr-metrics-table-wrap{flex-shrink:0}.vertebr-metrics-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem}.vertebr-kpi{position:relative;border:1px solid var(--vb-border);border-radius:12px;background:linear-gradient(180deg,var(--vb-surface-tint) 0%,transparent 55%),var(--vb-bg-elevated);padding:.95rem 1rem .9rem;min-height:8rem;display:flex;flex-direction:column;gap:.45rem;overflow:hidden}.vertebr-kpi:before{content:"";position:absolute;inset:0 auto 0 0;width:2px;background:transparent}.vertebr-kpi[data-tone=ok]:before{background:var(--vb-ok)}.vertebr-kpi[data-tone=warn]:before{background:var(--vb-accent)}.vertebr-kpi[data-selectable=true]{cursor:pointer}.vertebr-kpi[data-active=true]{border-color:color-mix(in srgb,var(--vb-accent) 50%,var(--vb-border));box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-accent) 25%,transparent)}.vertebr-kpi-top{display:flex;align-items:flex-start;justify-content:space-between;gap:.55rem}.vertebr-kpi-value{margin:0;font-size:1.7rem;font-weight:600;letter-spacing:-.045em;line-height:1.05;font-variant-numeric:tabular-nums}.vertebr-kpi-foot{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .55rem;margin-top:auto}.vertebr-sparkline{color:var(--vb-accent);flex:none;margin-top:.1rem}.vertebr-sparkline[data-tone=ok]{color:var(--vb-ok)}.vertebr-sparkline[data-tone=danger]{color:var(--vb-danger)}.vertebr-metric-delta{display:inline-flex;align-items:center;padding:.12rem .42rem;border-radius:999px;font-size:.68rem;font-weight:600;letter-spacing:.02em;font-family:var(--vb-mono);font-variant-numeric:tabular-nums;background:var(--vb-surface-tint-strong);color:var(--vb-text-subtle)}.vertebr-metric-delta[data-dir=up]{color:var(--vb-ok);background:var(--vb-ok-soft)}.vertebr-metric-delta[data-dir=down]{color:var(--vb-danger);background:var(--vb-danger-soft)}.vertebr-chart{border:1px solid var(--vb-border);border-radius:12px;background:linear-gradient(180deg,var(--vb-surface-tint) 0%,transparent 42%),var(--vb-bg-elevated);padding:.85rem 1rem .65rem;min-height:0;display:flex;flex-direction:column;gap:.3rem}.vertebr-chart-series.vertebr-select-trigger{width:auto;min-width:10.5rem;padding:.28rem .55rem;font-size:.72rem;font-family:var(--vb-mono);letter-spacing:.08em;text-transform:uppercase;font-weight:500}.vertebr-chart-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:0 .1rem .55rem;border-bottom:1px solid color-mix(in srgb,var(--vb-border) 70%,transparent);flex:0 0 auto}.vertebr-chart-head-start{display:flex;flex-wrap:wrap;align-items:center;gap:.55rem 1rem;min-width:0}.vertebr-chart-head-end{display:flex;align-items:flex-start;gap:.5rem}.vertebr-chart-kicker{margin:0;font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);font-weight:500;color:var(--vb-text-muted)}.vertebr-chart-caption{margin:.18rem 0 0;font-size:.72rem;color:var(--vb-text-subtle)}.vertebr-chart-total{margin:0;font-size:1.2rem;font-weight:600;letter-spacing:-.04em;font-variant-numeric:tabular-nums;line-height:1.1}.vertebr-chart-plot{position:relative;min-height:0}.vertebr-chart-svg{display:block;width:100%;height:auto;overflow:visible;cursor:crosshair}.vertebr-chart-grid{stroke:color-mix(in srgb,var(--vb-border) 80%,transparent);stroke-width:1;stroke-dasharray:3 4}.vertebr-chart-baseline{stroke:var(--vb-border-strong);stroke-width:1}.vertebr-chart-area{fill-opacity:1}.vertebr-chart-line{fill:none;stroke:var(--vb-accent);stroke-width:2.1;stroke-linejoin:round;stroke-linecap:round}.vertebr-chart-line-compare{fill:none;stroke:var(--vb-text-subtle);stroke-width:1.7;stroke-dasharray:4 5;stroke-linejoin:round;stroke-linecap:round;stroke-opacity:.85}.vertebr-chart-dot-compare{fill:var(--vb-bg-elevated);stroke:var(--vb-text-subtle);stroke-width:1.8;pointer-events:none}.vertebr-chart-legend{display:flex;flex-wrap:wrap;gap:.65rem .9rem;margin:0;font-size:.66rem;font-family:var(--vb-mono);letter-spacing:.04em;color:var(--vb-text-subtle)}.vertebr-chart-legend span{display:inline-flex;align-items:center;gap:.35rem}.vertebr-chart-legend i{display:inline-block;width:.85rem;height:2px;border-radius:1px;background:var(--vb-accent)}.vertebr-chart-legend i[data-series=previous]{background:repeating-linear-gradient(90deg,var(--vb-text-subtle) 0,var(--vb-text-subtle) 4px,transparent 4px,transparent 7px)}.vertebr-chart-legend i[data-series=m0],.vertebr-chart-line-metric[data-series=m0],.vertebr-chart-dot-metric[data-series=m0]{--vb-chart-series: var(--vb-accent)}.vertebr-chart-legend i[data-series=m1],.vertebr-chart-line-metric[data-series=m1],.vertebr-chart-dot-metric[data-series=m1]{--vb-chart-series: color-mix(in srgb, var(--vb-ok) 72%, var(--vb-text) 28%)}.vertebr-chart-legend i[data-series=m2],.vertebr-chart-line-metric[data-series=m2],.vertebr-chart-dot-metric[data-series=m2]{--vb-chart-series: color-mix(in srgb, var(--vb-warn) 78%, var(--vb-text) 22%)}.vertebr-chart-legend i[data-series^=m]{background:var(--vb-chart-series, var(--vb-accent))}.vertebr-chart-line-metric{fill:none;stroke:var(--vb-chart-series, var(--vb-accent));stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.vertebr-chart-dot-metric{fill:var(--vb-bg-elevated);stroke:var(--vb-chart-series, var(--vb-accent));stroke-width:1.8;pointer-events:none}.vertebr-chart-mode{display:inline-flex;gap:.15rem;padding:.12rem;border:1px solid color-mix(in srgb,var(--vb-border) 85%,transparent);border-radius:8px;background:color-mix(in srgb,var(--vb-bg) 65%,transparent)}.vertebr-chart-mode-btn{appearance:none;margin:0;padding:.22rem .5rem;border:0;border-radius:6px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.68rem;font-family:var(--vb-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.vertebr-chart-mode-btn:hover{color:var(--vb-text)}.vertebr-chart-mode-btn[data-active=true]{background:var(--vb-bg-elevated);color:var(--vb-text);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 70%,transparent)}.vertebr-chart-metric-toggles{display:flex;flex-wrap:wrap;gap:.35rem}.vertebr-chart-metric-toggle{appearance:none;margin:0;padding:.2rem .48rem;border:1px solid color-mix(in srgb,var(--vb-border) 90%,transparent);border-radius:6px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.68rem;font-family:var(--vb-mono);letter-spacing:.03em;cursor:pointer}.vertebr-chart-metric-toggle:hover:not(:disabled){color:var(--vb-text);border-color:var(--vb-border-strong)}.vertebr-chart-metric-toggle[data-on=true]{color:var(--vb-text);border-color:color-mix(in srgb,var(--vb-accent) 45%,var(--vb-border));background:color-mix(in srgb,var(--vb-accent) 12%,transparent)}.vertebr-chart-metric-toggle:disabled{opacity:.45;cursor:not-allowed}.vertebr-chart-tooltip-row{font-size:.78rem;font-weight:600;letter-spacing:-.02em}.vertebr-chart-tooltip-row[data-series=m0]{color:var(--vb-accent)}.vertebr-chart-tooltip-row[data-series=m1]{color:color-mix(in srgb,var(--vb-ok) 72%,var(--vb-text) 28%)}.vertebr-chart-tooltip-row[data-series=m2]{color:color-mix(in srgb,var(--vb-warn) 78%,var(--vb-text) 22%)}.vertebr-metrics-range.vertebr-select-trigger{width:auto;min-width:9.5rem;padding:.28rem .55rem;font-size:.78rem}.vertebr-chart-tooltip-compare{color:var(--vb-text-muted)!important}.vertebr-chart-crosshair{stroke:color-mix(in srgb,var(--vb-accent) 55%,var(--vb-border));stroke-width:1;stroke-dasharray:2 3;pointer-events:none}.vertebr-chart-dot{fill:var(--vb-bg-elevated);stroke:var(--vb-accent);stroke-width:2;pointer-events:none}.vertebr-chart-axis{fill:var(--vb-text-subtle);font-size:10px;font-family:var(--vb-mono)}.vertebr-chart-tooltip{position:absolute;top:.3rem;transform:translate(-50%);display:flex;flex-direction:column;gap:.08rem;padding:.32rem .48rem;border:1px solid var(--vb-border);border-radius:7px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow);pointer-events:none;white-space:nowrap;z-index:1}.vertebr-chart-tooltip strong{font-size:.82rem;letter-spacing:-.02em}.vertebr-chart-tooltip span{font-size:.66rem;font-family:var(--vb-mono);color:var(--vb-text-subtle)}.vertebr-chart[data-empty=true] .vertebr-chart-line{stroke-opacity:.45}.vertebr-chart-empty{margin:1.5rem 0;color:var(--vb-text-muted);font-size:.85rem}.vertebr-metrics-table-wrap{border:1px solid var(--vb-border);border-radius:12px;background:linear-gradient(180deg,var(--vb-surface-tint) 0%,transparent 28%),var(--vb-bg-elevated);overflow:hidden}.vertebr-metrics-table-head{appearance:none;display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;padding:.8rem 1.05rem .65rem;border:0;border-bottom:1px solid color-mix(in srgb,var(--vb-border) 70%,transparent);background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.vertebr-metrics-table-head:hover{background:var(--vb-surface-tint)}.vertebr-metrics-table-wrap[data-collapsed=true] .vertebr-metrics-table-head{border-bottom:none}.vertebr-metrics-chevron{width:.45rem;height:.45rem;border-right:1.5px solid var(--vb-text-subtle);border-bottom:1.5px solid var(--vb-text-subtle);transform:rotate(45deg);transition:transform .12s ease}.vertebr-metrics-table-wrap[data-collapsed=true] .vertebr-metrics-chevron{transform:rotate(-45deg)}.vertebr-metrics-table{width:100%;min-width:100%}.vertebr-metrics-table th,.vertebr-metrics-table td{padding:.78rem 1rem;max-width:none}.vertebr-metrics-table th:first-child,.vertebr-metrics-table td:first-child{padding-left:1.05rem}.vertebr-metrics-table th:last-child,.vertebr-metrics-table td:last-child{padding-right:1.05rem}.vertebr-metrics-table tbody tr[data-tone=ok] td:first-child{box-shadow:inset 2px 0 0 var(--vb-ok)}.vertebr-metrics-table tbody tr[data-tone=warn] td:first-child{box-shadow:inset 2px 0 0 var(--vb-accent)}.vertebr-metrics-table tbody tr[data-tone=danger] td:first-child{box-shadow:inset 2px 0 0 var(--vb-danger)}.vertebr-metrics-table-label{display:block;font-weight:600}.vertebr-metrics-table-section{display:block;margin-top:.18rem;font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);color:var(--vb-text-subtle)}.vertebr-metrics-table-value{font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.vertebr-metrics-table td.vertebr-metrics-table-notes{white-space:normal;max-width:28rem;color:var(--vb-text-muted)}.vertebr-metrics-table-empty{color:var(--vb-text-subtle)}.vertebr-metric-label{margin:0;font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);font-weight:500;color:var(--vb-text-muted)}.vertebr-metric-hint{margin:0;font-size:.75rem;color:var(--vb-text-subtle);line-height:1.35}@media(max-width:1100px){.vertebr-metrics-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.vertebr-metrics-kpis{grid-template-columns:1fr}}.vertebr-table-wrap{flex:1 1 auto;min-height:0;min-width:0;max-width:100%;overflow-x:auto;overflow-y:auto;overscroll-behavior-inline:contain;scrollbar-gutter:stable;scrollbar-width:thin}.vertebr-table{width:max-content;min-width:100%;border-collapse:separate;border-spacing:0;font-size:.9rem;font-family:var(--vb-font)}.vertebr-table th,.vertebr-table td{padding:.7rem .9rem;border-bottom:1px solid var(--vb-border);text-align:left;vertical-align:middle;white-space:nowrap;overflow:hidden;max-width:16rem}.vertebr-table th:not(.vertebr-col-actions),.vertebr-table td:not(.vertebr-col-actions){min-width:6.5rem}.vertebr-table th{position:sticky;top:0;z-index:1;color:var(--vb-text-subtle);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;font-family:var(--vb-mono);font-weight:500;background:var(--vb-bg-elevated)}.vertebr-table tbody tr{transition:background .1s ease}.vertebr-table tbody tr[data-selected=true]{background:var(--vb-surface-tint)}.vertebr-table th.vertebr-col-select,.vertebr-table td.vertebr-col-select{width:2.4rem;min-width:2.4rem;max-width:2.4rem;padding-left:.85rem;padding-right:.4rem}.vertebr-row-check{width:.95rem;height:.95rem;margin:0;accent-color:var(--vb-accent);cursor:pointer}.vertebr-visibility-check{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;padding:.1rem;border-radius:6px}.vertebr-visibility-check[data-dirty=true]{background:color-mix(in srgb,var(--vb-accent) 14%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-accent) 35%,transparent)}.vertebr-visibility-check .vertebr-visibility-btn[data-dirty=true]{color:var(--vb-accent)}.vertebr-table-row-clickable{cursor:pointer}.vertebr-table-row-clickable:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--vb-accent-soft)}.vertebr-table th.vertebr-col-actions,.vertebr-table td.vertebr-col-actions{position:sticky;right:0;z-index:2;width:1%;min-width:7.5rem;max-width:none;overflow:visible;padding-left:.75rem;padding-right:.85rem;background:var(--vb-bg-elevated);border-left:1px solid var(--vb-border);box-shadow:-12px 0 16px -14px color-mix(in srgb,var(--vb-text) 35%,transparent)}.vertebr-table th.vertebr-col-actions{z-index:3}.vertebr-table tbody tr:hover td.vertebr-col-actions{background:var(--vb-bg-elevated);box-shadow:inset 0 0 0 999px var(--vb-surface-tint),-12px 0 16px -14px color-mix(in srgb,var(--vb-text) 35%,transparent)}.vertebr-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.vertebr-col-menu{position:relative}.vertebr-col-menu-count{display:inline-flex;align-items:center;justify-content:center;min-width:1.15rem;margin-left:.35rem;padding:0 .3rem;border-radius:999px;background:var(--vb-bg-muted);border:1px solid var(--vb-border);font-family:var(--vb-mono);font-size:.65rem;color:var(--vb-text-muted)}.vertebr-col-menu-panel{position:absolute;top:calc(100% + .35rem);left:0;z-index:20;width:min(240px,calc(100vw - 2rem));padding:.55rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow)}.vertebr-col-menu-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.2rem .35rem .55rem;margin-bottom:.25rem;border-bottom:1px solid var(--vb-border);font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-col-menu-list{list-style:none;margin:0;padding:0;max-height:280px;overflow:auto}.vertebr-col-menu-item{display:flex;align-items:center;gap:.55rem;padding:.4rem .35rem;border-radius:6px;cursor:pointer;color:var(--vb-text);font-size:.84rem}.vertebr-col-menu-item:hover{background:var(--vb-surface-tint)}.vertebr-col-menu-item input{accent-color:var(--vb-accent);width:.9rem;height:.9rem}.vertebr-col-menu-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-link-btn{appearance:none;border:0;background:none;padding:0;margin:0;font:inherit;font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;color:var(--vb-text-muted);cursor:pointer}.vertebr-link-btn:hover{color:var(--vb-text)}.vertebr-table tr:last-child td{border-bottom:0}.vertebr-table td:has(.vertebr-cell-clamp),.vertebr-table td:has(.vertebr-cell-media),.vertebr-table td:has(.vertebr-cell-link){white-space:normal;min-width:10rem;max-width:16rem}.vertebr-cell-empty{color:var(--vb-text-subtle)}.vertebr-cell-text,.vertebr-cell-number,.vertebr-cell-money,.vertebr-cell-datetime{color:var(--vb-text)}.vertebr-cell-number,.vertebr-cell-money{font-variant-numeric:tabular-nums;font-family:var(--vb-mono);font-size:.86rem}.vertebr-cell-money{font-weight:600}.vertebr-cell-datetime{font-family:var(--vb-mono);font-size:.8rem;color:var(--vb-text-muted)}.vertebr-cell-clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;white-space:normal;line-height:1.35;color:var(--vb-text-muted);max-width:16rem}.vertebr-cell-link{display:inline-block;max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--vb-accent);text-decoration:none;font-size:.82rem}.vertebr-cell-link:hover{text-decoration:underline}.vertebr-cell-media{display:inline-flex;align-items:center;gap:.65rem;max-width:16rem;text-decoration:none;color:inherit}.vertebr-cell-media img{width:44px;height:44px;object-fit:cover;border-radius:var(--vb-radius-sm);border:1px solid var(--vb-border);background:var(--vb-bg-muted);flex:none}.vertebr-cell-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;color:var(--vb-text-subtle);font-family:var(--vb-mono)}.vertebr-cell-json{display:inline-block;max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--vb-mono);font-size:.75rem;color:var(--vb-text-muted)}.vertebr-badge{display:inline-flex;align-items:center;border-radius:999px;padding:.18rem .55rem;font-size:.72rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--vb-border);color:var(--vb-text-muted);background:var(--vb-surface-tint)}.vertebr-badge[data-tone=ok]{color:var(--vb-ok);border-color:color-mix(in srgb,var(--vb-ok) 40%,transparent);background:var(--vb-ok-soft)}.vertebr-badge[data-tone=neutral]{color:var(--vb-text-subtle)}.vertebr-chip-row{display:flex;flex-wrap:wrap;gap:.3rem;max-width:14rem}.vertebr-chip{display:inline-block;max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid var(--vb-border);border-radius:999px;padding:.1rem .45rem;font-size:.72rem;color:var(--vb-text-muted);background:var(--vb-surface-tint)}.vertebr-cell-thumbs{display:flex;align-items:center}.vertebr-cell-thumbs img{width:36px;height:36px;object-fit:cover;border-radius:var(--vb-radius-sm);border:1px solid var(--vb-border);background:var(--vb-bg-muted);flex:none}.vertebr-cell-thumbs img+img{margin-left:-.55rem;box-shadow:-2px 0 0 var(--vb-bg-elevated)}.vertebr-cell-thumbs-more{margin-left:.4rem;font-size:.72rem;font-weight:600;color:var(--vb-text-muted)}.vertebr-cell-thumbs-detail{flex-wrap:wrap;gap:.75rem}.vertebr-cell-thumbs-detail img+img{margin-left:0;box-shadow:none}.vertebr-empty{flex:1 1 auto;display:grid;place-items:center;padding:3rem 1.5rem;text-align:center;color:var(--vb-text-muted);font-size:.92rem}.vertebr-cell-media-detail{flex-direction:column;align-items:flex-start;max-width:none}.vertebr-cell-media-detail img{width:min(100%,280px);height:auto;max-height:280px;object-fit:cover}.vertebr-cell-prose{margin:0;white-space:pre-wrap;line-height:1.5;color:var(--vb-text);max-width:40rem}.vertebr-modal-backdrop{position:fixed;inset:0;z-index:80;display:grid;place-items:center;padding:1.25rem;background:color-mix(in srgb,var(--vb-bg) 55%,rgba(0,0,0,.45));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.vertebr-modal{width:min(100%,720px);max-height:min(88vh,860px);display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--vb-border);border-radius:14px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-modal-form{width:min(100%,960px);max-height:min(92vh,920px)}.vertebr-modal-form .vertebr-modal-body{padding:0;min-height:0;flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden}.vertebr-modal-form .vertebr-form{min-height:0}.vertebr-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:1.15rem 1.25rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-modal-heading h2{margin:.15rem 0 0;font-size:1.25rem;letter-spacing:-.02em}.vertebr-modal-eyebrow{margin:0;font-family:var(--vb-mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-modal-actions{display:flex;flex-wrap:wrap;gap:.45rem}.vertebr-modal-body{overflow:auto;padding:1.25rem;display:flex;flex-direction:column;gap:1.25rem}.vertebr-modal-hero{border:1px solid var(--vb-border);border-radius:12px;overflow:hidden;background:var(--vb-bg-muted)}.vertebr-modal-hero img{display:block;width:100%;max-height:280px;object-fit:cover}.vertebr-modal-fields{margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.9rem 1rem}.vertebr-modal-field{display:grid;gap:.35rem;padding:.85rem .95rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius);background:var(--vb-surface-tint);min-width:0}.vertebr-modal-field dt{margin:0;font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-modal-field dd{margin:0;min-width:0}.vertebr-picker-body{gap:.95rem}.vertebr-picker-tabs{display:flex;gap:.35rem;padding:.2rem;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-surface-tint)}.vertebr-picker-tabs button{appearance:none;flex:1 1 0;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border:0;background:transparent;color:var(--vb-text-muted);border-radius:6px;padding:.4rem .55rem;font:inherit;font-size:.82rem;cursor:pointer}.vertebr-picker-tabs button[data-active=true]{background:var(--vb-bg-elevated);color:var(--vb-text);box-shadow:0 1px color-mix(in srgb,var(--vb-text) 8%,transparent)}.vertebr-picker-tabs span{font-family:var(--vb-mono);font-size:.68rem;color:var(--vb-text-subtle)}.vertebr-picker-url{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem}.vertebr-picker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:.7rem}.vertebr-picker-tile{appearance:none;display:grid;gap:.4rem;padding:.45rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg);color:inherit;text-align:left;cursor:pointer}.vertebr-picker-tile:hover{border-color:var(--vb-border-strong)}.vertebr-picker-tile[data-selected=true]{border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-picker-thumb{display:block;aspect-ratio:1;border-radius:7px;overflow:hidden;border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-picker-thumb img{display:block;width:100%;height:100%;object-fit:cover}.vertebr-picker-name{font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-picker-foot{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.85rem 1.25rem 1.05rem;border-top:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-picker-count{font-family:var(--vb-mono);font-size:.72rem;color:var(--vb-text-subtle)}.vertebr-mail-modal{width:min(100%,1080px);max-height:min(90vh,820px)}.vertebr-mail-layout{min-height:0;flex:1 1 auto;display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);overflow:hidden}.vertebr-mail-compose{min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-mail-fields{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;align-items:stretch;gap:.85rem;padding:1rem 1.1rem .75rem}.vertebr-mail-field{display:grid;gap:.35rem;min-width:0;flex:0 0 auto}.vertebr-mail-field>span{font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-mail-field .vertebr-select-trigger{flex:none;align-self:stretch;height:auto;min-height:2.4rem;background:var(--vb-bg)}.vertebr-mail-field input,.vertebr-mail-field textarea{width:100%;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-bg);color:var(--vb-text);font:inherit;font-size:.9rem;padding:.55rem .7rem}.vertebr-mail-field textarea{min-height:8.5rem;resize:vertical;line-height:1.45}.vertebr-mail-field input:focus,.vertebr-mail-field textarea:focus{outline:none;border-color:var(--vb-border-strong);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-mail-compose-note{margin:0;padding:1rem 1.1rem;font-size:.84rem;line-height:1.45;color:var(--vb-text-muted)}.vertebr-mail-compose-hint{margin:auto 0 0;padding:.35rem 0 .15rem;font-size:.75rem;line-height:1.4;color:var(--vb-text-subtle)}.vertebr-mail-compose-error{margin:0;padding:0 1.1rem .45rem;font-size:.8rem;color:var(--vb-danger, #b42318)}.vertebr-mail-compose-foot{display:flex;flex-direction:column;gap:.55rem;padding:.85rem 1.1rem 1rem;border-top:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-mail-compose-foot .vertebr-btn-primary{width:100%;justify-content:center}.vertebr-mail-preview{min-width:0;min-height:0;display:flex;flex-direction:column;background:linear-gradient(180deg,color-mix(in srgb,var(--vb-bg-muted) 88%,var(--vb-bg)) 0%,var(--vb-bg-muted) 100%)}.vertebr-mail-preview-meta{display:grid;gap:.45rem;padding:.8rem 1.15rem;border-bottom:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-mail-preview-meta p{margin:0;display:grid;grid-template-columns:4.25rem minmax(0,1fr);align-items:baseline;gap:.55rem;font-size:.86rem;line-height:1.35;min-width:0;color:var(--vb-text)}.vertebr-mail-preview-meta p:last-child{padding-top:.35rem;border-top:1px solid color-mix(in srgb,var(--vb-border) 75%,transparent)}.vertebr-mail-preview-meta span{font-family:var(--vb-mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-mail-preview-meta strong{font-weight:500;overflow-wrap:anywhere}.vertebr-mail-preview-stage{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding:1rem 1.1rem 1.15rem}.vertebr-mail-preview-frame{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;border:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);border-radius:10px;overflow:hidden;background:#fff;box-shadow:0 1px color-mix(in srgb,var(--vb-text) 6%,transparent),0 18px 40px -28px color-mix(in srgb,var(--vb-text) 45%,transparent)}.vertebr-mail-preview-frame iframe,.vertebr-mail-preview-frame pre{display:block;width:100%;flex:1 1 auto;min-height:360px;height:100%;border:0;background:#fff}.vertebr-mail-preview-frame pre{margin:0;padding:1.25rem 1.4rem;overflow:auto;white-space:pre-wrap;font-size:.88rem;line-height:1.5;color:#171717}.vertebr-mail-preview-empty{display:grid;place-items:center;flex:1 1 auto;min-height:360px;padding:2rem;text-align:center;color:var(--vb-text-subtle);font-size:.86rem;background:color-mix(in srgb,var(--vb-bg-muted) 55%,#fff)}@media(max-width:820px){.vertebr-mail-layout{grid-template-columns:1fr;overflow:auto}.vertebr-mail-compose{border-right:0;border-bottom:1px solid var(--vb-border)}.vertebr-mail-preview-stage{min-height:420px}}.vertebr-emails{min-height:0;flex:1 1 auto;display:flex;flex-direction:column;overflow:hidden}.vertebr-emails-nav{position:relative;z-index:5}.vertebr-emails-nav-trigger{appearance:none;display:inline-flex;align-items:center;justify-content:space-between;gap:.55rem;min-width:10.5rem;margin:0;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-bg-elevated);color:var(--vb-text);padding:.4rem .65rem;font:inherit;cursor:pointer;box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 35%,transparent)}.vertebr-emails-nav[data-size=sm] .vertebr-emails-nav-trigger{min-width:9.5rem;padding:.32rem .55rem}.vertebr-emails-nav-trigger:hover{border-color:color-mix(in srgb,var(--vb-border) 55%,var(--vb-text) 45%)}.vertebr-emails-nav[data-open=true] .vertebr-emails-nav-trigger{border-color:color-mix(in srgb,var(--vb-border) 40%,var(--vb-text) 60%)}.vertebr-emails-nav-current{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.vertebr-emails-nav-label{font-size:.78rem;font-weight:600;letter-spacing:.02em}.vertebr-emails-nav[data-size=sm] .vertebr-emails-nav-label{font-size:.74rem}.vertebr-emails-nav-count{display:inline-flex;align-items:center;justify-content:center;min-width:1.15rem;padding:.05rem .3rem;border-radius:999px;background:color-mix(in srgb,var(--vb-bg) 80%,var(--vb-border));color:var(--vb-text-muted);font-family:var(--vb-mono);font-size:.66rem;line-height:1.2}.vertebr-emails-nav-chevron{color:var(--vb-text-subtle);font-size:.7rem;line-height:1;transition:transform .12s ease}.vertebr-emails-nav[data-open=true] .vertebr-emails-nav-chevron{transform:rotate(180deg)}.vertebr-emails-nav-menu{position:absolute;top:calc(100% + .35rem);right:0;z-index:20;margin:0;padding:.3rem;list-style:none;min-width:14rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow)}.vertebr-emails-nav-option{appearance:none;width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:.15rem;margin:0;border:0;border-radius:7px;background:transparent;color:var(--vb-text);padding:.5rem .6rem;font:inherit;text-align:left;cursor:pointer}.vertebr-emails-nav-option:hover,.vertebr-emails-nav-option[data-active=true]{background:color-mix(in srgb,var(--vb-bg) 70%,var(--vb-border))}.vertebr-emails-nav-option-main{display:inline-flex;align-items:center;gap:.4rem}.vertebr-emails-nav-hint{color:var(--vb-text-subtle);font-size:.68rem;line-height:1.35}.vertebr-emails-subnav{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 1.1rem;border-bottom:1px solid var(--vb-border);background:color-mix(in srgb,var(--vb-surface-tint) 70%,transparent)}.vertebr-emails-subnav .vertebr-emails-nav-menu{left:0;right:auto}.vertebr-emails-layout{min-height:0;flex:1 1 auto;display:grid;grid-template-columns:minmax(260px,320px) minmax(0,1fr);overflow:hidden}.vertebr-emails-compose{min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-emails-fields{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:.85rem;padding:1rem 1.1rem .75rem}.vertebr-emails-fields select,.vertebr-emails-fields input[type=datetime-local]{width:100%;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-bg);color:var(--vb-text);font:inherit;font-size:.9rem;padding:.55rem .7rem}.vertebr-emails-segment{display:inline-flex;gap:.15rem;padding:.12rem;border:1px solid color-mix(in srgb,var(--vb-border) 85%,transparent);border-radius:8px;background:color-mix(in srgb,var(--vb-bg) 65%,transparent);width:fit-content;max-width:100%}.vertebr-emails-segment button{appearance:none;margin:0;padding:.28rem .55rem;border:0;border-radius:6px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.72rem;font-family:var(--vb-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.vertebr-emails-segment button:hover:not(:disabled){color:var(--vb-text)}.vertebr-emails-segment button[data-active=true]{background:var(--vb-bg-elevated);color:var(--vb-text);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 70%,transparent)}.vertebr-emails-segment button:disabled{opacity:.4;cursor:not-allowed}.vertebr-emails-notice{margin:0;font-size:.8rem;color:var(--vb-ok, #3f7d4e)}.vertebr-emails-side{min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-emails-side .vertebr-mail-preview{min-height:0;flex:1 1 auto}.vertebr-emails-library,.vertebr-emails-activity{min-height:0;flex:1 1 auto;display:flex;flex-direction:column;background:var(--vb-bg)}.vertebr-emails-library{overflow:auto}.vertebr-emails-library[data-editing=true],.vertebr-emails-activity{overflow:hidden}.vertebr-emails-library-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;min-height:0}.vertebr-emails-library-cols[data-section=system],.vertebr-emails-library-cols[data-section=saved]{grid-template-columns:minmax(0,1fr)}.vertebr-emails-library-section{padding:1rem 1.1rem 1.25rem;border-bottom:1px solid var(--vb-border)}.vertebr-emails-library-cols[data-section=all] .vertebr-emails-library-section:first-child{border-right:1px solid var(--vb-border)}.vertebr-emails-library-section header .vertebr-btn{margin-left:auto}.vertebr-emails-library-section h3{margin:0;font-size:.72rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-emails-library-section ul{list-style:none;margin:0;padding:0;display:grid;gap:.55rem}.vertebr-emails-library-section li{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:.55rem .65rem;border:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);border-radius:8px;background:var(--vb-bg-elevated)}.vertebr-emails-library-section li div{display:grid;gap:.15rem;min-width:0}.vertebr-emails-library-section strong{font-size:.88rem;font-weight:600}.vertebr-emails-library-section span{font-size:.74rem;color:var(--vb-text-subtle);font-family:var(--vb-mono)}.vertebr-emails-library-actions{display:inline-flex;gap:.25rem;flex:none}.vertebr-emails-library-editor{border-top:0;background:var(--vb-bg-elevated);display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.vertebr-emails-library-editor>header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex:0 0 auto;padding:.75rem 1.1rem;border-bottom:1px solid var(--vb-border)}.vertebr-emails-library-editor h3{margin:0;font-size:.72rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-emails-library-editor .vertebr-emails-layout{flex:1 1 auto;min-height:0}.vertebr-emails-library-editor .vertebr-emails-fields{padding-top:.9rem}.vertebr-emails-library-editor .vertebr-mail-compose-error{padding:0}.vertebr-emails-library-editor .vertebr-mail-compose-hint{margin:0;padding:0}.vertebr-emails-library-meta{margin:0;font-size:.78rem;color:var(--vb-text-muted)}.vertebr-emails-library-meta code{font-family:var(--vb-mono);font-size:.74rem}.vertebr-emails-campaigns-empty{margin:0;font-size:.82rem;color:var(--vb-text-muted)}.vertebr-email-select{position:relative;min-width:0;color:var(--vb-text);font-family:var(--vb-font);text-transform:none;letter-spacing:normal}.vertebr-email-select-trigger{width:100%;background:var(--vb-bg);color:var(--vb-text);text-transform:none;letter-spacing:normal;font-family:var(--vb-font);font-size:.88rem;font-weight:500}.vertebr-email-select-trigger .vertebr-select-value{color:var(--vb-text);text-transform:none;letter-spacing:normal}.vertebr-email-select-panel{position:absolute;z-index:20;top:calc(100% + .35rem);left:0;right:0;display:flex;flex-direction:column;max-height:16rem;border:1px solid var(--vb-border-strong);border-radius:8px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow);overflow:hidden;color:var(--vb-text)}.vertebr-email-select-toolbar{display:grid;gap:.45rem;padding:.55rem .6rem .45rem;border-bottom:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);background:var(--vb-bg-elevated)}.vertebr-email-select-toolbar input{width:100%;border:1px solid var(--vb-border);border-radius:6px;background:var(--vb-bg);color:var(--vb-text);font:inherit;font-size:.84rem;padding:.4rem .55rem}.vertebr-email-select-actions{display:flex;gap:.35rem}.vertebr-email-select-actions button{appearance:none;margin:0;padding:.18rem .45rem;border:0;border-radius:5px;background:transparent;color:var(--vb-text-muted);font:inherit;font-size:.68rem;font-family:var(--vb-mono);letter-spacing:.04em;text-transform:uppercase;cursor:pointer}.vertebr-email-select-actions button:hover:not(:disabled){color:var(--vb-text);background:var(--vb-surface-tint)}.vertebr-email-select-actions button:disabled{opacity:.4;cursor:not-allowed}.vertebr-email-select-list{list-style:none;margin:0;padding:.25rem;overflow:auto;min-height:0;background:var(--vb-bg)}.vertebr-email-select-list label{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:.55rem;align-items:center;padding:.48rem .5rem;border-radius:6px;cursor:pointer;color:var(--vb-text)}.vertebr-email-select-list label[data-media=true]{grid-template-columns:auto auto minmax(0,1fr)}.vertebr-email-select-list label[data-on=true]{background:color-mix(in srgb,var(--vb-accent) 16%,var(--vb-bg))}.vertebr-email-select-list label:hover{background:var(--vb-surface-tint)}.vertebr-email-select-list input{margin:0;width:.95rem;height:.95rem;accent-color:var(--vb-accent);flex:none}.vertebr-email-select-thumb{width:2.4rem;height:2.4rem;object-fit:cover;border-radius:5px;border:1px solid color-mix(in srgb,var(--vb-border) 80%,transparent);background:var(--vb-bg-muted)}.vertebr-email-select-copy{display:grid;gap:.12rem;min-width:0}.vertebr-email-select-primary{font-size:.84rem;font-weight:500;font-family:var(--vb-font);color:var(--vb-text);text-transform:none;letter-spacing:normal;line-height:1.35;overflow-wrap:anywhere;word-break:break-word;white-space:normal}.vertebr-email-select-secondary{font-size:.68rem;font-family:var(--vb-mono);font-weight:500;color:var(--vb-text-muted);text-transform:none;letter-spacing:.02em;line-height:1.3;overflow-wrap:anywhere;white-space:normal}.vertebr-email-select-empty{padding:.75rem .55rem;font-size:.8rem;color:var(--vb-text-muted);text-align:center}.vertebr-email-select-toolbar-compact{padding-bottom:.35rem}.vertebr-email-select-toolbar-compact .vertebr-email-select-actions{justify-content:flex-end}@media(max-width:900px){.vertebr-emails-layout{grid-template-columns:1fr;overflow:auto}.vertebr-emails-compose{border-right:0;border-bottom:1px solid var(--vb-border)}.vertebr-emails-side{min-height:420px}.vertebr-emails-library-cols{grid-template-columns:1fr}.vertebr-emails-library-section:first-child{border-right:0}.vertebr-panel-head-actions{flex-wrap:wrap;justify-content:flex-end}}.vertebr-form{flex:1 1 0%;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-form-scroll{flex:1 1 auto;min-height:0;overflow:auto;display:block;padding:1.15rem 1.35rem 1.35rem}.vertebr-form-section{flex:none;margin-bottom:1rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);box-shadow:0 1px color-mix(in srgb,var(--vb-text) 4%,transparent);overflow:hidden}.vertebr-form-section:last-child{margin-bottom:0}.vertebr-form-section[data-plain=true]{border:0;border-radius:0;box-shadow:none;background:transparent}.vertebr-form-section[data-plain=true] .vertebr-form-fields{padding:.15rem .15rem .35rem}.vertebr-form-section-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.7rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-form-section-head h3{margin:0;font-size:.7rem;font-family:var(--vb-mono);font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-form-section-count{font-family:var(--vb-mono);font-size:.65rem;color:var(--vb-text-subtle);border:1px solid var(--vb-border);border-radius:999px;padding:.08rem .42rem}.vertebr-form-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem 1rem;padding:1.05rem 1.1rem 1.15rem;align-items:start;align-content:start}.vertebr-form-fields[data-layout=chips]{grid-template-columns:repeat(auto-fill,minmax(4.75rem,1fr));gap:.65rem}.vertebr-form-fields[data-layout=specs]{grid-template-columns:1fr 1fr}.vertebr-form-fields[data-layout=specs] .vertebr-field[data-span=full]{grid-column:1 / -1}.vertebr-form-fields[data-layout=specs] .vertebr-field-head{min-height:1.55rem}.vertebr-form-fields[data-layout=specs] .vertebr-visibility-btn{width:1.85rem;height:1.85rem}.vertebr-form-fields[data-layout=settings]{display:block;padding:1.05rem 1.1rem 1.15rem}.vertebr-settings-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-bg);overflow:hidden}.vertebr-settings-list-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.65rem .75rem;border-bottom:1px solid var(--vb-border)}.vertebr-settings-list-row:last-child{border-bottom:0}.vertebr-settings-list-row[data-on=false]{opacity:.55}.vertebr-settings-list-copy{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1 1 auto}.vertebr-settings-list-copy label{font-size:.86rem;font-weight:500;color:var(--vb-text);cursor:pointer}.vertebr-settings-list-desc{margin:0;font-size:.78rem;line-height:1.4;color:var(--vb-text-muted)}.vertebr-form-fields[data-layout=chips] .vertebr-field label{font-family:var(--vb-mono);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;text-align:center}.vertebr-form-fields[data-layout=chips] .vertebr-field input{text-align:center;font-variant-numeric:tabular-nums;font-family:var(--vb-mono);padding:.55rem .4rem}.vertebr-record-layout{display:grid;grid-template-columns:minmax(200px,240px) minmax(0,1fr);gap:1.25rem;align-items:start}.vertebr-record-aside{position:sticky;top:0;display:flex;flex-direction:column;gap:1rem;padding:.9rem;border:1px solid var(--vb-border);border-radius:12px;background:var(--vb-bg-elevated)}.vertebr-record-preview{border-radius:10px;overflow:hidden;border:1px solid var(--vb-border);background:var(--vb-bg-muted);aspect-ratio:1}.vertebr-record-preview img{display:block;width:100%;height:100%;object-fit:cover}.vertebr-record-preview-empty{width:100%;height:100%;display:grid;place-items:center;font-family:var(--vb-mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-record-main{display:flex;flex-direction:column;gap:1.15rem;min-width:0;padding:.15rem .1rem .35rem}.vertebr-record-block{flex:none;display:flex;flex-direction:column;gap:.55rem;min-width:0}.vertebr-record-block-label{display:flex;align-items:center;justify-content:space-between;gap:.5rem;font-family:var(--vb-mono);font-size:.68rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--vb-text-subtle);padding-bottom:.4rem;border-bottom:1px solid var(--vb-border)}.vertebr-record-block[data-storefront=off]{opacity:.55}.vertebr-visibility-btn{appearance:none;flex:none;display:inline-flex;align-items:center;justify-content:center;width:1.7rem;height:1.7rem;margin:-.25rem 0;padding:0;border:0;border-radius:6px;background:transparent;color:var(--vb-text-subtle);cursor:pointer}.vertebr-visibility-btn:hover{color:var(--vb-text);background:var(--vb-surface-tint)}.vertebr-visibility-btn[aria-pressed=true]{color:var(--vb-accent)}.vertebr-visibility-btn[aria-pressed=false]{color:var(--vb-text-subtle)}.vertebr-form[data-variant=record] .vertebr-form-fields{padding:0;gap:.75rem .9rem}.vertebr-form[data-variant=record] .vertebr-record-aside .vertebr-form-fields{grid-template-columns:1fr}.vertebr-form[data-variant=record] .vertebr-field[data-kind=image]{grid-column:auto}.vertebr-field{display:grid;gap:.35rem;align-content:start;min-width:0}.vertebr-field[data-span=wide],.vertebr-field[data-span=full]{grid-column:1 / -1}.vertebr-field-head{display:flex;align-items:center;justify-content:space-between;gap:.35rem;min-height:1.4rem}.vertebr-field-head label{min-width:0;flex:1 1 auto}.vertebr-field[data-storefront=off]{opacity:.55}.vertebr-enum-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.35rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-bg);overflow:hidden}.vertebr-enum-list-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.45rem .55rem;border-bottom:1px solid var(--vb-border)}.vertebr-enum-list-row:last-child{border-bottom:0}.vertebr-enum-list-row[data-on=false]{opacity:.55}.vertebr-enum-list-label{display:flex;align-items:center;gap:.55rem;min-width:0;font-size:.86rem;font-weight:500;color:var(--vb-text);cursor:pointer}.vertebr-enum-list-label input{width:.95rem;height:.95rem;accent-color:var(--vb-accent)}.vertebr-enum-list-move{display:flex;gap:.2rem}.vertebr-enum-list-move button{appearance:none;width:1.7rem;height:1.7rem;border:1px solid var(--vb-border);border-radius:6px;background:var(--vb-bg-elevated);color:var(--vb-text-muted);cursor:pointer}.vertebr-enum-list-move button:hover:not(:disabled){color:var(--vb-text);border-color:var(--vb-border-strong)}.vertebr-enum-list-move button:disabled{opacity:.4;cursor:default}.vertebr-field label,.vertebr-field>span{font-size:.78rem;font-weight:500;color:var(--vb-text-muted);letter-spacing:.01em}.vertebr-field input[type=text],.vertebr-field input[type=number],.vertebr-field input[type=password],.vertebr-field input[type=email],.vertebr-field textarea{width:100%;min-height:2.4rem;border:1px solid var(--vb-border);background:var(--vb-bg);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .75rem;font:inherit;font-size:.9rem;transition:border-color .14s ease,box-shadow .14s ease,background .14s ease}.vertebr-field textarea{resize:vertical;min-height:4.5rem;line-height:1.5;padding-top:.65rem}.vertebr-field-money{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:stretch}.vertebr-field-money-prefix{display:grid;place-items:center;padding:0 .7rem;border:1px solid var(--vb-border);border-right:0;border-radius:var(--vb-radius-sm) 0 0 var(--vb-radius-sm);background:var(--vb-surface-tint);color:var(--vb-text-muted);font-family:var(--vb-mono);font-size:.86rem}.vertebr-field-money input{border-top-left-radius:0;border-bottom-left-radius:0;font-variant-numeric:tabular-nums;font-family:var(--vb-mono)}.vertebr-field-prose{display:grid;gap:0;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-bg);overflow:hidden}.vertebr-md-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.15rem;padding:.35rem .4rem;border-bottom:1px solid var(--vb-border);background:var(--vb-surface-tint)}.vertebr-md-btn{appearance:none;border:0;background:transparent;color:var(--vb-text-muted);border-radius:5px;min-width:1.7rem;height:1.7rem;padding:0 .4rem;font:inherit;font-size:.78rem;font-weight:600;cursor:pointer}.vertebr-md-btn:hover:not(:disabled){background:var(--vb-bg-hover);color:var(--vb-text)}.vertebr-md-btn[data-active=true]{background:var(--vb-bg-hover);color:var(--vb-text)}.vertebr-md-btn:disabled{opacity:.45;cursor:not-allowed}.vertebr-md-glyph{font-weight:700}.vertebr-md-italic{font-style:italic;font-family:Georgia,Times New Roman,serif}.vertebr-md-strike{text-decoration:line-through}.vertebr-md-sep{width:1px;height:1rem;margin:0 .25rem;background:var(--vb-border)}.vertebr-field-prose textarea,.vertebr-md-content{resize:none;min-height:7.5rem;overflow:hidden;line-height:1.55;border:0;border-radius:0;box-shadow:none}.vertebr-md-content{padding:.65rem .75rem;outline:none;color:var(--vb-text)}.vertebr-md-content p{margin:0 0 .65em}.vertebr-md-content p:last-child{margin-bottom:0}.vertebr-md-content h2,.vertebr-md-content h3{margin:.85em 0 .4em;font-size:1.05em;font-weight:650;line-height:1.3}.vertebr-md-content ul,.vertebr-md-content ol{margin:.35em 0 .65em;padding-left:1.3rem}.vertebr-md-content a{color:var(--vb-accent)}.vertebr-md-content s{text-decoration:line-through}.vertebr-md-content code{font-family:var(--vb-mono);font-size:.86em;padding:.08em .32em;border-radius:4px;background:var(--vb-surface-tint);border:1px solid var(--vb-border)}.vertebr-md-content pre{margin:.45em 0 .7em;padding:.65rem .75rem;overflow:auto;border-radius:6px;background:var(--vb-surface-tint);border:1px solid var(--vb-border)}.vertebr-md-content pre code{padding:0;border:0;background:transparent}.vertebr-md-content blockquote{margin:.45em 0 .7em;padding:.15rem 0 .15rem .75rem;border-left:2px solid var(--vb-accent-dim);color:var(--vb-text-muted)}.vertebr-md-content img{display:block;max-width:100%;height:auto;margin:.5em 0;border-radius:8px;border:1px solid var(--vb-border)}.vertebr-md-content table{width:100%;border-collapse:collapse;margin:.5em 0 .75em;font-size:.88em}.vertebr-md-content th,.vertebr-md-content td{border:1px solid var(--vb-border);padding:.35rem .5rem;vertical-align:top;min-width:4rem}.vertebr-md-content th{background:var(--vb-surface-tint);font-weight:650;text-align:left}.vertebr-md-content .selectedCell:after{content:"";position:absolute;inset:0;background:var(--vb-accent-soft);pointer-events:none}.vertebr-md-content td,.vertebr-md-content th{position:relative}.vertebr-md-content p.is-editor-empty:first-child:before{color:var(--vb-text-subtle);content:attr(data-placeholder);float:left;height:0;pointer-events:none}.vertebr-field-prose textarea:focus,.vertebr-md-content:focus{box-shadow:none;outline:none}.vertebr-field-prose:focus-within{border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-field-prose-meta{margin:0;padding:.35rem .7rem .45rem;border-top:1px solid var(--vb-border);font-family:var(--vb-mono);font-size:.68rem;letter-spacing:.04em;color:var(--vb-text-subtle);background:var(--vb-surface-tint)}.vertebr-field input:hover,.vertebr-field textarea:hover{border-color:var(--vb-border-strong)}.vertebr-field input:focus,.vertebr-field textarea:focus{outline:none;border-color:var(--vb-accent-dim);box-shadow:0 0 0 3px var(--vb-accent-soft);background:var(--vb-input-focus-bg)}.vertebr-field input[readonly],.vertebr-field textarea[readonly]{opacity:.65;cursor:default}.vertebr-field-media{display:grid;grid-template-columns:72px minmax(0,1fr);gap:.75rem;align-items:center}.vertebr-field-media img{width:72px;height:72px;object-fit:cover;border-radius:var(--vb-radius);border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-field-files-list{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:.55rem}.vertebr-field-files-list li{display:grid;gap:.35rem}.vertebr-field-files-list img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--vb-radius);border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-field-files-empty{margin:0;font-size:.82rem;color:var(--vb-text-subtle)}.vertebr-field[data-kind=image]{grid-column:1 / -1}.vertebr-switch-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.65rem .8rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius-sm);background:var(--vb-surface-tint);grid-column:1 / -1}.vertebr-switch-row-copy{display:flex;flex-direction:column;gap:.15rem;min-width:0;flex:1 1 auto}.vertebr-switch-row-desc{margin:0;font-size:.78rem;line-height:1.4;color:var(--vb-text-muted)}.vertebr-switch-row label{font-size:.88rem;font-weight:500;color:var(--vb-text);font-family:var(--vb-font)}.vertebr-switch{width:40px;height:22px;background:var(--vb-bg-muted);border-radius:999px;position:relative;border:1px solid var(--vb-border);cursor:pointer;flex:none;transition:background .14s ease,border-color .14s ease}.vertebr-switch[data-state=checked]{background:color-mix(in srgb,var(--vb-accent) 35%,transparent);border-color:var(--vb-accent-dim)}.vertebr-switch-thumb{display:block;width:16px;height:16px;background:var(--vb-text);border-radius:999px;transform:translate(2px);transition:transform .14s ease,background .14s ease;margin-top:2px}.vertebr-switch[data-state=checked] .vertebr-switch-thumb{transform:translate(18px);background:var(--vb-accent)}.vertebr-actions{flex:0 0 auto;position:relative;z-index:5;display:flex;align-items:center;gap:.75rem;padding:.85rem 1.35rem;padding-bottom:calc(.85rem + env(safe-area-inset-bottom,0px));border-top:1px solid var(--vb-border);background:linear-gradient(180deg,var(--vb-actions-from) 0%,var(--vb-actions-to) 100%);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 -10px 24px -18px color-mix(in srgb,var(--vb-text) 40%,transparent)}@media(pointer:coarse){.vertebr-actions{padding-bottom:calc(5.6rem + env(safe-area-inset-bottom,0px))}}.vertebr-actions-spacer{flex:1}.vertebr-dirty{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--vb-mono);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--vb-accent)}.vertebr-dirty:before{content:"";width:6px;height:6px;border-radius:999px;background:var(--vb-accent);box-shadow:0 0 0 3px var(--vb-accent-soft)}.vertebr-kbd{font-family:var(--vb-mono);font-size:.68rem;color:var(--vb-text-subtle);border:1px solid var(--vb-border);border-bottom-width:2px;border-radius:4px;padding:.1rem .35rem}.vertebr-upload{display:flex;flex-direction:column;gap:.45rem}.vertebr-upload-drop{display:flex;flex-direction:column;align-items:center;gap:.55rem;padding:.85rem .75rem;border:1px dashed var(--vb-border-strong);border-radius:10px;background:var(--vb-surface-tint);text-align:center;transition:border-color .12s ease,background .12s ease}.vertebr-upload-drop[data-drag=true]{border-color:var(--vb-accent-dim);background:var(--vb-accent-soft)}.vertebr-upload-drop[data-busy=true]{opacity:.7}.vertebr-upload-copy{margin:0;font-size:.78rem;color:var(--vb-text-muted);line-height:1.35}.vertebr-upload-error{margin:0;font-size:.78rem;color:var(--vb-danger)}.vertebr-upload-status{margin:0;font-size:.82rem;color:var(--vb-text-muted)}.vertebr-upload-check{display:flex;align-items:center;gap:.55rem;font-size:.86rem;color:var(--vb-text);cursor:pointer}.vertebr-upload-check input{accent-color:var(--vb-accent)}.vertebr-upload-results{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.65rem;max-height:220px;overflow:auto}.vertebr-upload-results li{display:grid;grid-template-columns:48px minmax(0,1fr);gap:.7rem;align-items:center;padding:.45rem;border:1px solid var(--vb-border);border-radius:8px;background:var(--vb-surface-tint)}.vertebr-upload-results img{width:48px;height:48px;object-fit:cover;border-radius:6px;border:1px solid var(--vb-border)}.vertebr-upload-results strong{display:block;font-size:.84rem}.vertebr-upload-results a{display:block;margin-top:.15rem;font-size:.72rem;color:var(--vb-accent);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}.vertebr-native-select{width:100%;min-height:2.4rem;border:1px solid var(--vb-border);background:var(--vb-bg);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.55rem .75rem;font:inherit;font-size:.9rem}.vertebr-modal-sm{width:min(100%,520px)}.vertebr-btn{appearance:none;border:1px solid var(--vb-border);background:var(--vb-bg-muted);color:var(--vb-text);border-radius:var(--vb-radius-sm);padding:.52rem .95rem;font:inherit;font-size:.88rem;font-weight:500;cursor:pointer;transition:background .12s ease,border-color .12s ease,transform 80ms ease}.vertebr-btn:hover:not(:disabled){background:var(--vb-bg-hover);border-color:var(--vb-border-strong)}.vertebr-btn:active:not(:disabled){transform:translateY(1px)}.vertebr-btn-primary{background:var(--vb-btn-primary-from);border-color:var(--vb-btn-primary-border);color:var(--vb-accent-contrast);font-weight:var(--vb-font-weight-semibold)}.vertebr-btn-primary:hover:not(:disabled){background:var(--vb-btn-primary-hover-from);border-color:var(--vb-btn-primary-hover-border)}.vertebr-btn:disabled{opacity:.5;cursor:not-allowed}.vertebr-btn-quiet{border-color:transparent;background:transparent;color:var(--vb-text-muted);box-shadow:none}.vertebr-btn-quiet:hover:not(:disabled){background:var(--vb-bg-hover);border-color:transparent;color:var(--vb-text)}.vertebr-btn-danger-quiet:hover:not(:disabled){background:var(--vb-danger-soft);color:var(--vb-danger)}.vertebr-status{font-family:var(--vb-mono);font-size:.75rem;color:var(--vb-text-muted);letter-spacing:.02em}.vertebr-status[data-tone=ok]{color:var(--vb-ok)}.vertebr-status[data-tone=danger]{color:var(--vb-danger)}.vertebr-gallery{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-gallery-head-actions{display:inline-flex;align-items:center;gap:.55rem}.vertebr-gallery-body{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:1rem;padding:1.15rem 1.35rem 1.35rem}.vertebr-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.9rem;align-content:start}.vertebr-gallery-card{display:flex;flex-direction:column;gap:.55rem;padding:.65rem;border:1px solid var(--vb-border);border-radius:10px;background:var(--vb-bg-elevated);min-width:0}.vertebr-gallery-thumb{display:block;aspect-ratio:1;border-radius:8px;overflow:hidden;border:1px solid var(--vb-border);background:var(--vb-bg-muted)}.vertebr-gallery-thumb img{display:block;width:100%;height:100%;object-fit:cover}.vertebr-gallery-meta{min-width:0}.vertebr-gallery-meta strong{display:block;font-size:.84rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-gallery-meta a{display:block;margin-top:.15rem;font-size:.7rem;color:var(--vb-text-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}.vertebr-gallery-meta a:hover{color:var(--vb-accent)}.vertebr-gallery-card .vertebr-btn{align-self:flex-start}.vertebr-font-library{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-font-library-head-actions{display:flex;align-items:center;gap:.75rem}.vertebr-font-library-body{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:1.25rem;padding:1.15rem 1.35rem 1.35rem}.vertebr-font-library-note{margin:0;color:var(--vb-muted);font-size:.875rem}.vertebr-font-library-grid,.vertebr-font-picker-grid,.vertebr-google-fonts-grid{display:grid;gap:1rem;align-content:start}.vertebr-font-library-grid{grid-template-columns:repeat(auto-fill,minmax(16rem,1fr))}.vertebr-font-library-card,.vertebr-google-fonts-card{display:flex;flex-direction:column;gap:.75rem;padding:1rem;border:1px solid var(--vb-line);border-radius:.75rem;background:var(--vb-surface);min-width:0}.vertebr-font-library-preview-btn,.vertebr-google-fonts-preview-btn{display:flex;flex-direction:column;gap:.45rem;width:100%;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}.vertebr-font-library-preview-btn:hover .vertebr-font-library-preview,.vertebr-google-fonts-preview-btn:hover .vertebr-google-fonts-card-copy{border-color:var(--vb-accent)}.vertebr-font-library-preview{display:flex;flex-direction:column;gap:.35rem;min-height:5.5rem;padding:.75rem;border:1px solid var(--vb-line);border-radius:.5rem;background:var(--vb-bg);transition:border-color .15s ease}.vertebr-font-library-preview-hint{color:var(--vb-muted);font-size:.72rem}.vertebr-font-library-ag{font-size:2rem;line-height:1}.vertebr-font-library-preview p,.vertebr-font-picker-preview p,.vertebr-font-preview-body{margin:0;font-size:.95rem;line-height:1.45}.vertebr-font-library-meta{display:flex;flex-direction:column;gap:.2rem;min-width:0}.vertebr-font-library-meta strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-font-library-meta span,.vertebr-font-library-meta code{color:var(--vb-muted);font-size:.8rem}.vertebr-font-library-meta code{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vertebr-google-fonts{display:flex;flex-direction:column;gap:1rem;padding:1rem;border:1px solid var(--vb-line);border-radius:.75rem;background:color-mix(in srgb,var(--vb-surface) 88%,var(--vb-bg))}.vertebr-google-fonts-head{display:flex;flex-wrap:wrap;align-items:end;justify-content:space-between;gap:1rem}.vertebr-google-fonts-head h3,.vertebr-font-picker-modal-head h3,.vertebr-font-preview-modal-head h3{margin:0}.vertebr-google-fonts-head p,.vertebr-font-picker-modal-head p,.vertebr-font-preview-modal-head p{margin:.25rem 0 0;color:var(--vb-muted);font-size:.875rem}.vertebr-google-fonts-search{min-width:14rem;padding:.55rem .75rem;border:1px solid var(--vb-line);border-radius:.5rem;background:var(--vb-bg);color:var(--vb-ink)}.vertebr-google-fonts-grid-scroll{max-height:min(18rem,42vh);overflow:auto;padding-right:.15rem}.vertebr-google-fonts-grid{grid-template-columns:repeat(auto-fill,minmax(13rem,1fr))}.vertebr-google-fonts-card-copy{display:flex;flex-direction:column;gap:.15rem;padding:.65rem;border:1px solid var(--vb-line);border-radius:.5rem;background:var(--vb-bg);transition:border-color .15s ease}.vertebr-google-fonts-card-copy span{color:var(--vb-muted);font-size:.8rem}.vertebr-font-picker{display:flex;flex-direction:column;gap:1rem}.vertebr-font-picker-current{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid var(--vb-line);border-radius:.65rem;background:var(--vb-surface)}.vertebr-font-picker-current strong{display:block}.vertebr-font-picker-current span{color:var(--vb-muted);font-size:.875rem}.vertebr-font-picker-preview{padding:1rem;border:1px dashed var(--vb-line);border-radius:.65rem}.vertebr-font-picker-modal-backdrop,.vertebr-font-preview-modal-backdrop{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:1.5rem;background:#00000073}.vertebr-font-picker-modal,.vertebr-font-preview-modal{width:min(52rem,100%);max-height:min(88vh,44rem);display:flex;flex-direction:column;gap:1rem;padding:1.25rem;border:1px solid var(--vb-line);border-radius:.85rem;background:var(--vb-bg);box-shadow:0 24px 64px #0000002e;overflow:hidden}.vertebr-font-preview-modal{width:min(40rem,100%)}.vertebr-font-picker-modal-head,.vertebr-font-preview-modal-head{display:flex;align-items:start;justify-content:space-between;gap:1rem;flex-shrink:0}.vertebr-font-picker-modal-body{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(14rem,.9fr);gap:1rem;min-height:0;flex:1 1 auto}.vertebr-font-picker-grid-scroll{min-height:0;max-height:min(52vh,28rem);overflow:auto;padding-right:.2rem}.vertebr-font-picker-grid{grid-template-columns:repeat(auto-fill,minmax(10.5rem,1fr))}.vertebr-font-picker-detail{min-height:0;max-height:min(52vh,28rem);overflow:auto;display:flex;flex-direction:column;gap:.75rem;padding:1rem;border:1px solid var(--vb-line);border-radius:.65rem;background:var(--vb-surface)}.vertebr-font-picker-detail-label{margin:0;color:var(--vb-muted);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase}.vertebr-font-picker-modal-actions,.vertebr-font-preview-modal-actions{display:flex;justify-content:flex-end;gap:.65rem;flex-shrink:0;padding-top:.15rem;border-top:1px solid var(--vb-line)}.vertebr-font-picker-option{display:flex;flex-direction:column;gap:.2rem;min-height:6.5rem;padding:.85rem;border:1px solid var(--vb-line);border-radius:.65rem;background:var(--vb-bg);color:var(--vb-ink);text-align:left;cursor:pointer}.vertebr-font-picker-option[data-active]{border-color:var(--vb-accent);box-shadow:inset 0 0 0 1px var(--vb-accent)}.vertebr-font-picker-option span,.vertebr-font-picker-option em{color:var(--vb-muted);font-size:.8rem;font-style:normal}.vertebr-font-preview-modal-body{overflow:auto;min-height:0}.vertebr-font-preview-sample{display:flex;flex-direction:column;gap:.65rem}.vertebr-font-preview-sample[data-compact=true]{gap:.4rem}.vertebr-font-preview-eyebrow{font-size:.72rem;letter-spacing:.18em;text-transform:uppercase}.vertebr-font-preview-heading{font-size:clamp(1.5rem,3vw,2rem);line-height:1.15}.vertebr-font-preview-alphabet{font-size:.82rem;line-height:1.55;color:var(--vb-muted)}.vertebr-font-preview-weights{display:flex;flex-wrap:wrap;gap:.75rem;font-size:.85rem}.vertebr-error-inline{color:var(--vb-danger, #b42318);font-size:.875rem}@media(max-width:760px){.vertebr-font-picker-modal-body{grid-template-columns:1fr}.vertebr-font-picker-detail{max-height:none}.vertebr-font-picker-grid-scroll{max-height:min(34vh,18rem)}}.vertebr-config-editor{flex:1 1 0%;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden}.vertebr-config-editor>.vertebr-form,.vertebr-config-editor>.vertebr-page-editor{flex:1 1 0%;min-height:0}.vertebr-page-editor{flex:1 1 0%;min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:0;overflow:hidden}.vertebr-page-editor-form{min-width:0;min-height:0;height:100%;display:flex;flex-direction:column;overflow:hidden;border-right:1px solid var(--vb-border)}.vertebr-page-editor-form .vertebr-form{flex:1 1 0%;min-height:0;height:100%;border-radius:0}.vertebr-page-preview{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--vb-surface-tint)}.vertebr-page-preview-meta{flex:0 0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;padding:.7rem 1rem;border-bottom:1px solid var(--vb-border);background:var(--vb-bg-elevated)}.vertebr-page-preview-meta p{margin:0;display:flex;align-items:baseline;gap:.45rem;font-size:.78rem;color:var(--vb-text-muted)}.vertebr-page-preview-meta span{font-family:var(--vb-mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--vb-text-subtle)}.vertebr-page-preview-meta strong{font-weight:560;color:var(--vb-text)}.vertebr-page-preview-viewports{margin-left:auto;display:inline-flex;align-items:center;gap:.15rem;padding:.15rem;border:1px solid var(--vb-border);border-radius:999px;background:var(--vb-bg)}.vertebr-page-preview-viewports button{appearance:none;margin:0;border:0;border-radius:999px;padding:.28rem .7rem;font:inherit;font-size:.74rem;font-weight:520;color:var(--vb-text-muted);background:transparent;cursor:pointer}.vertebr-page-preview-viewports button:hover{color:var(--vb-text)}.vertebr-page-preview-viewports button[data-active=true]{color:var(--vb-text);background:var(--vb-surface-tint);box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 80%,transparent)}.vertebr-page-preview-stage{flex:1 1 auto;min-height:0;padding:.75rem;display:flex;justify-content:stretch;align-items:stretch}.vertebr-page-preview-stage[data-viewport=mobile]{justify-content:center;align-items:center;overflow:auto;background:radial-gradient(circle at 50% 0%,color-mix(in srgb,var(--vb-text) 4%,transparent),transparent 55%),var(--vb-surface-tint)}.vertebr-page-preview-shell{flex:1 1 auto;min-width:0;min-height:0;display:flex}.vertebr-page-preview-stage[data-viewport=mobile] .vertebr-page-preview-shell{flex:0 0 auto}.vertebr-page-preview-frame{flex:1 1 auto;min-width:0;min-height:0;border:1px solid var(--vb-border);border-radius:10px;overflow:hidden;background:var(--vb-bg);box-shadow:var(--vb-shadow)}.vertebr-page-preview-stage[data-viewport=mobile] .vertebr-page-preview-frame{flex:0 0 auto;border-radius:28px;box-shadow:0 0 0 1px color-mix(in srgb,var(--vb-border) 90%,transparent),0 18px 40px color-mix(in srgb,var(--vb-text) 12%,transparent)}.vertebr-page-preview-frame iframe{display:block;width:100%;height:100%;border:0;background:#fff}.vertebr-page-preview-empty{height:100%;display:grid;place-items:center;padding:1.5rem;text-align:center;color:var(--vb-text-muted);font-size:.88rem}@media(max-width:1100px){.vertebr-page-editor{grid-template-columns:1fr;grid-template-rows:minmax(240px,42%) minmax(0,1fr);overflow:hidden}.vertebr-page-editor-form{border-right:0;border-bottom:1px solid var(--vb-border);max-height:none;min-height:0}.vertebr-page-preview-stage{min-height:280px}}.vertebr-topbar{grid-column:1 / -1;grid-row:1;z-index:40;display:flex;align-items:center;justify-content:space-between;gap:var(--vb-space-400);height:var(--vb-topbar-height);padding:0 var(--vb-space-500);border-bottom:1px solid var(--vb-border-subdued);background:var(--vb-topbar-bg)}.vertebr-topbar-start,.vertebr-topbar-end{display:flex;align-items:center;gap:var(--vb-space-300);min-width:0}.vertebr-topbar .vertebr-nav-label{display:none}.vertebr-topbar .vertebr-theme{padding:0;gap:0}.vertebr-topbar-brand{font-size:var(--vb-font-size-200);font-weight:var(--vb-font-weight-semibold);white-space:nowrap}.vertebr-topbar-toggle{appearance:none;border:1px solid var(--vb-border);background:var(--vb-bg-elevated);color:var(--vb-text);border-radius:var(--vb-radius-sm);width:2rem;height:2rem;cursor:pointer}.vertebr-topbar-env{display:flex;align-items:center;gap:var(--vb-space-200)}.vertebr-topbar-search{display:flex;align-items:center;gap:var(--vb-space-200);min-width:12rem;max-width:22rem;flex:1;padding:.45rem .75rem;border:1px solid var(--vb-border);border-radius:var(--vb-radius-full);background:var(--vb-bg-muted);color:var(--vb-text-subtle);font-size:var(--vb-font-size-100)}.vertebr-topbar-search kbd{margin-left:auto;font-family:var(--vb-mono);font-size:var(--vb-font-size-75);opacity:.7}.vertebr-topbar-token{display:flex;align-items:center;gap:var(--vb-space-100)}.vertebr-topbar-user{font-size:var(--vb-font-size-100);color:var(--vb-text-muted);max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:900px){.vertebr-topbar-search{display:none}}.vertebr-savebar{position:sticky;bottom:0;z-index:35;display:flex;align-items:center;justify-content:space-between;gap:var(--vb-space-400);min-height:var(--vb-savebar-height);padding:var(--vb-space-300) var(--vb-space-500);padding-bottom:calc(var(--vb-space-300) + env(safe-area-inset-bottom,0px));border-top:1px solid var(--vb-border);background:color-mix(in srgb,var(--vb-bg-elevated) 92%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.vertebr-savebar-message{font-size:var(--vb-font-size-200);color:var(--vb-text-secondary)}.vertebr-savebar[data-tone=ok] .vertebr-savebar-message{color:var(--vb-ok)}.vertebr-savebar[data-tone=danger] .vertebr-savebar-message{color:var(--vb-danger-text)}.vertebr-savebar-actions{display:flex;gap:var(--vb-space-200)}.vertebr-toast-stack{position:fixed;right:var(--vb-space-500);bottom:calc(var(--vb-space-500) + env(safe-area-inset-bottom,0px));z-index:100;display:flex;flex-direction:column;gap:var(--vb-space-200);pointer-events:none}.vertebr-toast{pointer-events:auto;display:flex;align-items:center;gap:var(--vb-space-300);min-width:16rem;max-width:24rem;padding:var(--vb-space-300) var(--vb-space-400);border:1px solid var(--vb-border);border-radius:var(--vb-radius-md);background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow-lg);font-size:var(--vb-font-size-200)}.vertebr-toast[data-tone=ok]{border-color:color-mix(in srgb,var(--vb-ok) 40%,var(--vb-border))}.vertebr-toast[data-tone=danger]{border-color:color-mix(in srgb,var(--vb-danger) 40%,var(--vb-border))}.vertebr-toast-dismiss{appearance:none;border:none;background:transparent;color:var(--vb-text-muted);font-size:1.1rem;cursor:pointer;margin-left:auto}.vertebr-card{border:1px solid var(--vb-border-subdued);border-radius:var(--vb-radius-lg);background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow-sm)}.vertebr-card[data-subdued=true]{background:var(--vb-bg-subdued);box-shadow:none}.vertebr-card-head{padding:var(--vb-space-400) var(--vb-space-500);border-bottom:1px solid var(--vb-border-subdued);font-weight:var(--vb-font-weight-semibold)}.vertebr-card-body{padding:var(--vb-space-500)}.vertebr-badge{display:inline-flex;align-items:center;padding:.12rem .45rem;border-radius:var(--vb-radius-full);font-size:var(--vb-font-size-75);font-weight:var(--vb-font-weight-medium);border:1px solid var(--vb-border);color:var(--vb-text-secondary);background:var(--vb-bg-muted)}.vertebr-badge[data-tone=ok]{color:var(--vb-ok);border-color:color-mix(in srgb,var(--vb-ok) 35%,transparent);background:var(--vb-ok-soft)}.vertebr-badge[data-tone=danger]{color:var(--vb-danger-text);border-color:color-mix(in srgb,var(--vb-danger) 35%,transparent);background:var(--vb-danger-soft)}.vertebr-banner{padding:var(--vb-space-300) var(--vb-space-400);border-radius:var(--vb-radius-md);border:1px solid var(--vb-border);background:var(--vb-bg-muted);font-size:var(--vb-font-size-200)}.vertebr-banner[data-tone=ok]{border-color:color-mix(in srgb,var(--vb-ok) 35%,transparent);background:var(--vb-ok-soft)}.vertebr-banner[data-tone=danger]{border-color:color-mix(in srgb,var(--vb-danger) 35%,transparent);background:var(--vb-danger-soft)}.vertebr-empty-state{display:grid;gap:var(--vb-space-200);justify-items:start;padding:var(--vb-space-800);text-align:left}.vertebr-empty-state h3{margin:0;font-size:var(--vb-font-size-400)}.vertebr-empty-state p{margin:0;color:var(--vb-text-muted);max-width:28rem}.vertebr-skeleton{display:grid;gap:var(--vb-space-200)}.vertebr-skeleton span{display:block;height:.85rem;border-radius:var(--vb-radius-sm);background:linear-gradient(90deg,var(--vb-bg-muted) 0%,var(--vb-bg-hover) 50%,var(--vb-bg-muted) 100%);background-size:200% 100%;animation:vb-skeleton 1.2s ease-in-out infinite}@keyframes vb-skeleton{0%{background-position:100% 0}to{background-position:-100% 0}}.vertebr-breadcrumbs{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;margin:0 0 var(--vb-space-200);padding:0;list-style:none;font-size:var(--vb-font-size-100);color:var(--vb-text-muted)}.vertebr-breadcrumbs li{display:inline-flex;align-items:center;gap:.35rem}.vertebr-breadcrumbs li:not(:last-child):after{content:"/";opacity:.5}.vertebr-breadcrumbs strong{color:var(--vb-text);font-weight:var(--vb-font-weight-medium)}.vertebr-loading,.vertebr-error{min-height:100vh;display:grid;place-items:center;background:var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-login{min-height:100vh;display:grid;place-items:center;padding:1.5rem;background:radial-gradient(900px 500px at 50% 0%,var(--vb-glow-accent),transparent 60%),var(--vb-bg);color:var(--vb-text);font-family:var(--vb-font)}.vertebr-login-card{width:min(100%,400px);display:grid;gap:1.25rem;padding:1.6rem;border:1px solid var(--vb-border);border-radius:12px;background:var(--vb-bg-elevated);box-shadow:var(--vb-shadow)}.vertebr-login-card h1{margin:0;font-size:1.5rem;letter-spacing:-.02em}.vertebr-login-card p{margin:.4rem 0 0;color:var(--vb-text-muted);line-height:1.5}.vertebr-login-form{display:grid;gap:.9rem}.vertebr-error{color:var(--vb-danger)}@media(max-width:900px){.vertebr-record-layout{grid-template-columns:1fr}.vertebr-record-aside{position:static;display:grid;grid-template-columns:minmax(140px,180px) minmax(0,1fr);align-items:start}.vertebr-record-aside .vertebr-record-block{grid-column:2}.vertebr-record-preview{grid-row:1 / span 20}}@media(max-width:720px){.vertebr-form-scroll{padding:1rem}.vertebr-form-fields{grid-template-columns:1fr;padding:.95rem}.vertebr-form[data-variant=record] .vertebr-form-fields{padding:0}.vertebr-form-fields[data-layout=chips]{grid-template-columns:repeat(auto-fill,minmax(4.25rem,1fr))}.vertebr-field[data-span=wide],.vertebr-field[data-span=full]{grid-column:1 / -1}.vertebr-field-media{grid-template-columns:1fr}.vertebr-field-media img{width:100%;max-width:160px;height:auto;aspect-ratio:1}.vertebr-record-aside{display:flex;flex-direction:column}.vertebr-record-preview{max-width:220px}.vertebr-actions{flex-wrap:wrap;padding:.85rem 1rem;padding-bottom:calc(5.6rem + env(safe-area-inset-bottom,0px))}.vertebr-resource-edit-head{padding:1rem}}@media(max-width:860px){.vertebr-root{grid-template-columns:1fr;height:auto;max-height:none;overflow:visible}.vertebr-sidebar{position:relative;height:auto;max-height:none;border-right:0;border-bottom:1px solid var(--vb-border)}.vertebr-main{height:auto;min-height:0;overflow:hidden;padding:0}.vertebr-content{overflow:hidden;padding:1.25rem 1rem 1rem}.vertebr-panel{min-height:min(70vh,640px);max-height:calc(100dvh - 8rem)}.vertebr-table-wrap{min-height:320px}}
package/static/index.html CHANGED
@@ -23,8 +23,8 @@
23
23
  background: #0e1014;
24
24
  }
25
25
  </style>
26
- <script type="module" crossorigin src="/admin/assets/index-Bc5ZsYlu.js"></script>
27
- <link rel="stylesheet" crossorigin href="/admin/assets/index-BBl1r9rh.css">
26
+ <script type="module" crossorigin src="/admin/assets/index-D5BVgGQP.js"></script>
27
+ <link rel="stylesheet" crossorigin href="/admin/assets/index-DORD_jLa.css">
28
28
  </head>
29
29
  <body>
30
30
  <div id="root"></div>