@json-to-office/jto 1.2.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +178 -31
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/{HomePage-jkIz_s7u.js → HomePage-CeUQIXch.js} +44 -44
- package/dist/client/assets/HomePage-CeUQIXch.js.map +1 -0
- package/dist/client/assets/{JsonEditorPage-DR8UoROz.js → JsonEditorPage-4LrF2fB9.js} +3 -3
- package/dist/client/assets/{JsonEditorPage-DR8UoROz.js.map → JsonEditorPage-4LrF2fB9.js.map} +1 -1
- package/dist/client/assets/{MonacoPluginProvider-CE5NPGwN.js → MonacoPluginProvider-Bx_V_FaE.js} +3 -3
- package/dist/client/assets/MonacoPluginProvider-Bx_V_FaE.js.map +1 -0
- package/dist/client/assets/editor-D-REaAU9.js +9 -0
- package/dist/client/assets/editor-D-REaAU9.js.map +1 -0
- package/dist/client/assets/editor-monaco-json-BgziSLMV.js +24 -0
- package/dist/client/assets/editor-monaco-json-BgziSLMV.js.map +1 -0
- package/dist/client/assets/editor-refs-store-vzLK2-Zo.js +2 -0
- package/dist/client/assets/{editor-refs-store-DKOJcTAk.js.map → editor-refs-store-vzLK2-Zo.js.map} +1 -1
- package/dist/client/assets/index-B7bDnXoC.js +5 -0
- package/dist/client/assets/index-B7bDnXoC.js.map +1 -0
- package/dist/client/assets/index-CrzIwHLS.css +1 -0
- package/dist/client/assets/preview-BGqIip90.js +2 -0
- package/dist/client/assets/preview-BGqIip90.js.map +1 -0
- package/dist/client/assets/{ui-vendor-DpjQWJgX.js → ui-vendor-Bq4-oNFL.js} +92 -57
- package/dist/client/assets/ui-vendor-Bq4-oNFL.js.map +1 -0
- package/dist/client/assets/useQualityAnalysis-CowAaoA9.js +6 -0
- package/dist/client/assets/useQualityAnalysis-CowAaoA9.js.map +1 -0
- package/dist/client/index.html +3 -3
- package/dist/client/templates/data-report-presentation.pptx.json +22 -22
- package/dist/client/templates/media/vermilion-annual-report/fonts/ClashDisplay-Bold.otf +0 -0
- package/dist/client/templates/media/vermilion-annual-report/fonts/ClashDisplay-Light.otf +0 -0
- package/dist/client/templates/media/vermilion-annual-report/fonts/ClashDisplay-Medium.otf +0 -0
- package/dist/client/templates/media/vermilion-annual-report/fonts/ClashDisplay-Regular.otf +0 -0
- package/dist/client/templates/media/vermilion-annual-report/fonts/ClashDisplay-Semibold.otf +0 -0
- package/dist/client/templates/media/vermilion-annual-report/fonts/FFL.txt +132 -0
- package/dist/client/templates/minimalist-pitch-deck.pptx.json +52 -52
- package/dist/client/templates/modern-annual-report-1.docx.json +2 -2
- package/dist/client/templates/modern-annual-report-2.docx.json +2 -2
- package/dist/client/templates/modern-annual-report-3.docx.json +1 -1
- package/dist/client/templates/tech-report.docx.json +8 -8
- package/dist/client/templates/themes/corporate.pptx.theme.json +12 -2
- package/dist/client/templates/themes/minimal.pptx.theme.json +12 -2
- package/dist/client/templates/themes/vibrant.pptx.theme.json +12 -2
- package/dist/client/templates/vermilion-annual-report.docx.json +10541 -0
- package/package.json +8 -7
- package/dist/client/assets/HomePage-jkIz_s7u.js.map +0 -1
- package/dist/client/assets/MonacoPluginProvider-CE5NPGwN.js.map +0 -1
- package/dist/client/assets/editor-edmvhW9F.js +0 -9
- package/dist/client/assets/editor-edmvhW9F.js.map +0 -1
- package/dist/client/assets/editor-monaco-json-CAlvfPc7.js +0 -24
- package/dist/client/assets/editor-monaco-json-CAlvfPc7.js.map +0 -1
- package/dist/client/assets/editor-refs-store-DKOJcTAk.js +0 -2
- package/dist/client/assets/index-CNvLzaJ7.css +0 -1
- package/dist/client/assets/index-DLlW4q4v.js +0 -5
- package/dist/client/assets/index-DLlW4q4v.js.map +0 -1
- package/dist/client/assets/preview-zo-CHAU0.js +0 -2
- package/dist/client/assets/preview-zo-CHAU0.js.map +0 -1
- package/dist/client/assets/ui-vendor-DpjQWJgX.js.map +0 -1
- package/dist/client/templates/Alternative deck 16_9.pptx.json +0 -3103
- package/dist/client/templates/Brand template 16_9.pptx.json +0 -2013
- package/dist/client/templates/Company deck 16_9.pptx.json +0 -6384
- package/dist/client/templates/Company deck 4_3.pptx.json +0 -5426
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import{j as c,r as b,c as se}from"./react-vendor-BmQ2Ko_D.js";import{c as $,g as oe,r as re,o as B,F as ie}from"./index-DLlW4q4v.js";import ae,{DiffEditor as le}from"./monaco-editor-DJsdM0WK.js";import{u as ce,d as H,B as U}from"./editor-refs-store-DKOJcTAk.js";import{u as K,b as q}from"./MonacoPluginProvider-CE5NPGwN.js";import{a4 as F,C as ue,b as de,X as fe,a as me,u as ge,Q as pe}from"./ui-vendor-DpjQWJgX.js";function G(e,t){if(!e||!t)return null;const s=e.getModel();if(!s)return null;const o=e.getSelection();if(!o)return null;const i=s.getValueInRange(o)||he(e);if(!i)return null;const u=s.getValue();let x=null,N=!1;try{x=JSON.parse(u),N=!0}catch{}const w=N?xe(u,o.startLineNumber,o.startColumn):void 0,S=be(u,o.startLineNumber,o.startColumn);return{selectedText:i,jsonPath:w,propertyKey:S,fullDocument:x,isValidJson:N,startLine:o.startLineNumber,endLine:o.endLineNumber}}function he(e,t){const s=e.getModel(),o=e.getPosition();if(!s||!o)return"";const f=s.getWordAtPosition(o);return f?s.getValueInRange({startLineNumber:o.lineNumber,startColumn:f.startColumn,endLineNumber:o.lineNumber,endColumn:f.endColumn}):""}function xe(e,t,s){var o;try{const f=e.split(`
|
|
2
|
-
`),i=[];let u=0,x=!1,N=0;for(let w=0;w<Math.min(t,f.length);w++){const S=f[w];for(let E=0;E<S.length;E++){const M=S[E];if(w===t-1&&E>=s)break;M==="{"?u++:M==="}"?(u--,i.length>u&&i.pop()):M==="["?(x=!0,N=0):M==="]"?(x=!1,(o=i[i.length-1])!=null&&o.match(/\[\d+\]$/)&&i.pop()):M===","&&x&&N++}const v=S.match(/^\s*"([^"]+)"\s*:/);if(v){for(;i.length>=u;)i.pop();x?i.push(`${v[1]}[${N}]`):i.push(v[1])}}return i.length>0?i.join("."):void 0}catch{return}}function be(e,t,s){try{const o=e.split(`
|
|
3
|
-
`);if(t>o.length)return;const i=o[t-1].match(/^\s*"([^"]+)"\s*:/);if(i)return i[1];for(let u=t-2;u>=0;u--){const x=o[u],N=x.match(/^\s*"([^"]+)"\s*:/);if(N)return N[1];if(x.includes("}"))break}return}catch{return}}function ve(e,t){if(!e||!t)return;const s=t.split(".");let o=e;for(const f of s){if(!o)return;const i=f.match(/^([^[]+)\[(\d+)\]$/);if(i){const[,u,x]=i;if(o=o[u],Array.isArray(o))o=o[parseInt(x,10)];else return}else o=o[f]}return o}function X(e){const t=[];if(e.jsonPath&&t.push(`JSON Path: ${e.jsonPath}`),e.selectedText.length>500?t.push(`Selected Text (truncated): ${e.selectedText.substring(0,500)}...`):t.push(`Selected Text: ${e.selectedText}`),e.isValidJson&&e.fullDocument&&e.jsonPath){const s=ve(e.fullDocument,e.jsonPath);if(s!==void 0){const o=JSON.stringify(s,null,2);o.length>500?t.push(`Context Value (truncated): ${o.substring(0,500)}...`):t.push(`Context Value: ${o}`)}}return t.join(`
|
|
4
|
-
`)}const Ne=200,Ce=32,ye=12,je=40,_="§jtoc:",we="§",Q="jto-collapse-strings-styles";function Se(){if(typeof document>"u"||document.getElementById(Q))return;const e=document.createElement("style");e.id=Q,e.textContent=`
|
|
5
|
-
.jto-collapsed-token { display: none !important; }
|
|
6
|
-
.jto-collapsed-chip, .jto-expand-collapse-chip {
|
|
7
|
-
color: #7c8595;
|
|
8
|
-
background: rgba(127,127,127,0.14);
|
|
9
|
-
border: 1px solid rgba(127,127,127,0.30);
|
|
10
|
-
border-radius: 4px;
|
|
11
|
-
padding: 0 6px;
|
|
12
|
-
cursor: pointer;
|
|
13
|
-
font-style: italic;
|
|
14
|
-
font-size: 0.85em;
|
|
15
|
-
}
|
|
16
|
-
.jto-collapsed-chip { margin: 0 2px; }
|
|
17
|
-
.jto-expand-collapse-chip { margin-right: 4px; }
|
|
18
|
-
.jto-collapsed-chip:hover, .jto-expand-collapse-chip:hover {
|
|
19
|
-
background: rgba(127,127,127,0.28);
|
|
20
|
-
color: #aab3c2;
|
|
21
|
-
}
|
|
22
|
-
`,document.head.appendChild(e)}function Y(e){const t=[],s=e.length;let o=0;for(;o<s;){if(e[o]!=='"'){o++;continue}const f=o+1;let i=f;for(;i<s;){const u=e[i];if(u==="\\"){i+=2;continue}if(u==='"')break;i++}if(i<s){const u=e.slice(f,i);u.length>Ne&&!u.includes(_)&&t.push({innerStart:f,innerEnd:i,inner:u})}o=i+1}return t}function Ee(e){const t=e.length,s=new Set([0]);let o=0;for(;o<t;)e[o]==="\\"?o=Math.min(o+(e[o+1]==="u"?6:2),t):o+=1,s.add(o);let f=Math.min(Ce,t);for(;f>0&&!s.has(f);)f--;let i=Math.max(t-ye,f);for(;i<t&&!s.has(i);)i++;const u=e.slice(f,i);return u.length<je?null:{prefix:e.slice(0,f),middle:u,suffix:e.slice(i)}}function Me(e){return e<1024?`${e} chars`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function Le(e,t){return!(e.lineNumber<t.startLineNumber||e.lineNumber>t.endLineNumber||e.lineNumber===t.startLineNumber&&e.column<t.startColumn-1||e.lineNumber===t.endLineNumber&&e.column>t.endColumn+1)}function Z(e,t){return!(e.endLineNumber<t.startLineNumber||t.endLineNumber<e.startLineNumber||e.endLineNumber===t.startLineNumber&&e.endColumn<t.startColumn||t.endLineNumber===e.startLineNumber&&t.endColumn<e.startColumn)}function De(e,t){Se();const s=new Map,o=[];let f=1,i=!1;const u=l=>`${_}${l}${we}`;function x(l){if(s.size===0)return l;let a=l;for(const n of s.values())n.expanded||(a=a.split(u(n.id)).join(n.middle));return a}function N(l){return{inlineClassName:"jto-collapsed-token",after:{content:` … ⟨ ${Me(l)} ⟩ … `,inlineClassName:"jto-collapsed-chip"},stickiness:t.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,hoverMessage:{value:"Click to expand the collapsed value"}}}function w(){return{before:{content:" ⟨ collapse ⟩ ",inlineClassName:"jto-expand-collapse-chip"},stickiness:t.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,hoverMessage:{value:"Click to collapse this value again"}}}function S(l){const a=[];for(const n of s.values()){if(!n.expanded)continue;const d=l.getDecorationRange(n.decorationId);d&&a.push(d)}return a}function v(l){const a=e.getModel();if(!(!a||l.length===0)){i=!0;try{for(let n=l.length-1;n>=0;n--){const d=l[n],m=Ee(d.inner);if(!m)continue;const h=f++,C=u(h),y=a.getPositionAt(d.innerStart),L=a.getPositionAt(d.innerEnd),D=new t.Range(y.lineNumber,y.column,L.lineNumber,L.column);a.applyEdits([{range:D,text:m.prefix+C+m.suffix,forceMoveMarkers:!0}]);const T=d.innerStart+m.prefix.length,V=a.getPositionAt(T),R=a.getPositionAt(T+C.length),O=new t.Range(V.lineNumber,V.column,R.lineNumber,R.column),[I]=e.deltaDecorations([],[{range:O,options:N(m.middle.length)}]);s.set(h,{id:h,middle:m.middle,expanded:!1,decorationId:I})}}finally{i=!1}}}function E(l){const a=e.getModel(),n=s.get(l);if(!a||!n||n.expanded)return;const d=a.getDecorationRange(n.decorationId);if(d){i=!0;try{a.applyEdits([{range:d,text:n.middle,forceMoveMarkers:!0}]);const m=a.getOffsetAt({lineNumber:d.startLineNumber,column:d.startColumn}),h=a.getPositionAt(m+n.middle.length),C=new t.Range(d.startLineNumber,d.startColumn,h.lineNumber,h.column),[y]=e.deltaDecorations([n.decorationId],[{range:C,options:w()}]);n.decorationId=y,n.expanded=!0}finally{i=!1}}}function M(l){const a=e.getModel(),n=s.get(l);if(!a||!n||!n.expanded)return;const d=a.getDecorationRange(n.decorationId);if(!d)return;const m=a.getValueInRange(d);n.middle=m;const h=u(l);i=!0;try{a.applyEdits([{range:d,text:h,forceMoveMarkers:!0}]);const C=a.getOffsetAt({lineNumber:d.startLineNumber,column:d.startColumn}),y=a.getPositionAt(C+h.length),L=new t.Range(d.startLineNumber,d.startColumn,y.lineNumber,y.column),[D]=e.deltaDecorations([n.decorationId],[{range:L,options:N(m.length)}]);n.decorationId=D,n.expanded=!1}finally{i=!1}}o.push(e.onMouseDown(l=>{const a=l.target.position;if(!a)return;const n=e.getModel();if(n)for(const d of s.values()){const m=n.getDecorationRange(d.decorationId);if(m&&Le(a,m)){d.expanded?M(d.id):E(d.id),l.event.preventDefault(),l.event.stopPropagation();return}}}));const A=l=>{var h;if(s.size===0)return;const a=e.getModel(),n=e.getSelection();if(!a||!n||n.isEmpty())return;const d=a.getValueInRange(n);if(!d.includes(_))return;const m=x(d);m!==d&&((h=l.clipboardData)==null||h.setData("text/plain",m),l.preventDefault(),l.stopImmediatePropagation(),l.type==="cut"&&e.executeEdits("jto-collapse-cut",[{range:n,text:""}]))},P=e.getDomNode();return P&&(P.addEventListener("copy",A,!0),P.addEventListener("cut",A,!0),o.push({dispose(){P.removeEventListener("copy",A,!0),P.removeEventListener("cut",A,!0)}})),{recollapse(){const l=e.getModel();if(!l)return;i=!0;try{for(const n of s.values()){if(n.expanded)continue;const d=l.getDecorationRange(n.decorationId);d&&l.applyEdits([{range:d,text:n.middle,forceMoveMarkers:!0}])}}finally{i=!1}const a=[...s.values()].map(n=>n.decorationId);a.length&&e.deltaDecorations(a,[]),s.clear(),v(Y(l.getValue()))},collapseNew(l){const a=e.getModel();if(!a)return;const n=S(a),d=Y(a.getValue()).filter(m=>{if(l!==void 0&&l>=m.innerStart-1&&l<=m.innerEnd+1)return!1;const h=a.getPositionAt(m.innerStart),C=a.getPositionAt(m.innerEnd),y={startLineNumber:h.lineNumber,startColumn:h.column,endLineNumber:C.lineNumber,endColumn:C.column};return!n.some(L=>Z(L,y))});v(d)},toStorageValue(l){return x(l)},isApplyingEdits(){return i},isRangeCollapsed(l){const a=e.getModel();if(!a)return!1;for(const n of s.values()){if(n.expanded)continue;const d=a.getDecorationRange(n.decorationId);if(d&&Z(d,l))return!0}return!1},resyncDecorations(){const l=e.getModel();if(!l||s.size===0)return;const a=l.getValue();for(const n of[...s.values()]){if(n.expanded){const D=l.getDecorationRange(n.decorationId);(!D||l.getValueInRange(D)!==n.middle)&&(e.deltaDecorations([n.decorationId],[]),s.delete(n.id));continue}const d=u(n.id),m=a.indexOf(d);if(m===-1){e.deltaDecorations([n.decorationId],[]),s.delete(n.id);continue}const h=l.getPositionAt(m),C=l.getPositionAt(m+d.length),y=l.getDecorationRange(n.decorationId);if(y&&y.startLineNumber===h.lineNumber&&y.startColumn===h.column&&y.endLineNumber===C.lineNumber&&y.endColumn===C.column)continue;const[L]=e.deltaDecorations([n.decorationId],[{range:new t.Range(h.lineNumber,h.column,C.lineNumber,C.column),options:N(n.middle.length)}]);n.decorationId=L}},dispose(){for(const a of o)a.dispose();if(e.getModel()){const a=[...s.values()].map(n=>n.decorationId);a.length&&e.deltaDecorations(a,[])}s.clear()}}}function Re({errors:e,onErrorClick:t,onClose:s,className:o,isMinimized:f=!1,onToggleMinimize:i}){const[u,x]=b.useState(!f);b.useEffect(()=>{x(!f)},[f]);const N=e.length>0,w=e.length;if(!N)return null;const S=()=>{x(!u),i==null||i()};return c.jsxs("div",{className:$("absolute bottom-0 left-0 right-0 z-50 bg-background border-t shadow-lg transition-all duration-200",u?"h-48":"h-10",o),children:[c.jsxs("div",{className:$("flex items-center justify-between px-3 py-2 cursor-pointer","bg-destructive/10 border-b border-destructive/20","hover:bg-destructive/15 transition-colors"),onClick:S,children:[c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx(F,{className:"w-4 h-4 text-destructive"}),c.jsxs("span",{className:"text-sm font-medium text-destructive",children:[w," Validation Error",w!==1?"s":""]})]}),c.jsxs("div",{className:"flex items-center gap-1",children:[c.jsx(Pe,{errors:e}),c.jsx("button",{onClick:v=>{v.stopPropagation(),S()},className:"p-1 hover:bg-destructive/20 rounded-sm transition-colors","aria-label":u?"Minimize":"Expand",children:u?c.jsx(ue,{className:"w-4 h-4"}):c.jsx(de,{className:"w-4 h-4"})}),s&&c.jsx("button",{onClick:v=>{v.stopPropagation(),s()},className:"p-1 hover:bg-destructive/20 rounded-sm transition-colors","aria-label":"Close validation panel",children:c.jsx(fe,{className:"w-4 h-4"})})]})]}),u&&c.jsx("div",{className:"overflow-y-auto h-[calc(100%-2.5rem)]",children:c.jsx("div",{className:"divide-y divide-border/50",children:e.map((v,E)=>c.jsx(ke,{error:v,onClick:()=>t==null?void 0:t(v)},`${v.path}-${E}`))})})]})}function Pe({errors:e}){const[t,s]=b.useState(!1),o=f=>{f.stopPropagation();const i=e.map(u=>`${u.startLineNumber&&u.startColumn?`Line ${u.startLineNumber}:${u.startColumn}`:"Unknown location"} — ${u.message}`).join(`
|
|
23
|
-
`);navigator.clipboard.writeText(i).then(()=>{s(!0),setTimeout(()=>s(!1),2e3)})};return c.jsx("button",{onClick:o,className:$("flex items-center gap-1 px-1.5 py-1 rounded-sm transition-all duration-200 cursor-pointer",t?"bg-success/10 text-success":"hover:bg-destructive/20"),"aria-label":"Copy all errors",children:t?c.jsxs(c.Fragment,{children:[c.jsx(me,{className:"w-3.5 h-3.5"}),c.jsx("span",{className:"text-xs font-medium",children:"Copied"})]}):c.jsx(ge,{className:"w-4 h-4"})})}function ke({error:e,onClick:t}){const s=f=>{switch(f){case"error":return c.jsx(F,{className:"w-4 h-4 text-destructive flex-shrink-0"});case"warning":return c.jsx(pe,{className:"w-4 h-4 text-warning flex-shrink-0"});default:return c.jsx(F,{className:"w-4 h-4 text-data-blue flex-shrink-0"})}},o=f=>f?f.replace(/^\//,"").replace(/\//g," → "):"Document root";return c.jsx("div",{className:$("px-3 py-2 hover:bg-muted/50 cursor-pointer transition-colors","group"),onClick:t,children:c.jsxs("div",{className:"flex items-start gap-2",children:[s(e.severity),c.jsxs("div",{className:"flex-1 min-w-0",children:[c.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[c.jsx("span",{className:"text-xs font-mono text-muted-foreground",children:e.startLineNumber&&e.startColumn?`Line ${e.startLineNumber}:${e.startColumn}`:"Unknown location"}),e.path&&c.jsxs(c.Fragment,{children:[c.jsx("span",{className:"text-xs text-muted-foreground",children:"•"}),c.jsx("span",{className:"text-xs text-muted-foreground truncate",children:o(e.path)})]})]}),c.jsx("p",{className:"text-sm text-foreground",children:e.message}),e.code&&e.code!=="validation_error"&&c.jsxs("span",{className:"text-xs text-muted-foreground font-mono mt-1 inline-block",children:["Code: ",e.code]})]})]})})}function Ve({errors:e,onClick:t,className:s}){return e.length!==0?c.jsxs("div",{className:$("flex items-center gap-2 px-2 py-1 text-xs cursor-pointer","bg-destructive/10 text-destructive hover:bg-destructive/15 transition-colors",s),onClick:t,children:[c.jsx(F,{className:"w-3 h-3"}),c.jsxs("span",{children:[e.length," error",e.length!==1?"s":""]})]}):null}function Ae(e){const t=`.${ie}.json`;return e.endsWith(t)?e:e.replace(/\.\w+\.theme\.json$/,"").replace(/\.\w+\.json$/,"").replace(/\.json$/,"")+t}function Ie({name:e,defaultValue:t,value:s,saveDocumentDebounceWait:o}){console.debug(`Render EditorMonacoJson (name: ${e})`);const f=b.useRef(null),i=b.useRef(null),{resolvedTheme:u}=oe(),x=K(r=>r.saveDocument),N=q(r=>r.bumpEditSequence),w=q(r=>r.setOutput),S=K(r=>r.closeDocument),v=K(r=>r.pendingDiffs[e]),E=K(r=>r.clearPendingDiff),[M,A]=b.useState([]),[P,l]=b.useState(!0),[a,n]=b.useState(!1),d=b.useRef([]),m=b.useRef(null),h=b.useRef(null),[C,y]=b.useState(s??t),{registerEditor:L,unregisterEditor:D,setActiveEditor:T}=ce(),V=b.useRef(H(x,o)),R=b.useRef(H(()=>{const r=f.current,p=m.current;if(!r||!p)return;p.resyncDecorations();const j=r.getPosition(),g=r.getModel(),k=j&&g?g.getOffsetAt(j):void 0;p.collapseNew(k)},600)),O=b.useCallback(r=>{re(r),console.debug("Setting up Monaco for JSON editor")},[]),I=b.useCallback(r=>m.current?m.current.toStorageValue(r):r,[]);function ee(r,p){console.debug(`EditorDidMount: (name: ${e})`),f.current=r,i.current=p;const j=r.getModel();j&&(p.editor.setModelLanguage(j,"json"),console.debug("Model language set to JSON for:",j.uri.toString())),m.current=De(r,p),m.current.recollapse(),L(e,r,p,I,m.current),T(e),r.addAction({id:"send-to-ai-assistant",label:"Send to AI Assistant (⌘K)",contextMenuGroupId:"navigation",contextMenuOrder:1.5,keybindings:[p.KeyMod.CtrlCmd|p.KeyCode.KeyK],run:function(){const g=G(r,p);if(g){const k=X(g);window.dispatchEvent(new CustomEvent("monaco-selection-to-ai",{detail:{documentName:e,selection:g,snippet:k}}))}}}),r.addCommand(p.KeyMod.CtrlCmd|p.KeyCode.KeyK,()=>{const g=G(r,p);if(g){const k=X(g);window.dispatchEvent(new CustomEvent("monaco-selection-to-ai",{detail:{documentName:e,selection:g,snippet:k}}))}}),r.addCommand(p.KeyMod.CtrlCmd|p.KeyCode.KeyS,()=>{const g=I(r.getValue());g&&(h.current=g,x(e,g))}),r.addCommand(p.KeyMod.CtrlCmd|p.KeyCode.KeyW,()=>{const g=I(r.getValue());g&&(h.current=g,x(e,g)),S(e)}),r.addCommand(p.KeyMod.Shift|p.KeyMod.Alt|p.KeyCode.KeyF,()=>{var g;(g=r.getAction("editor.action.formatDocument"))==null||g.run()})}function te(r){console.debug("Monaco validation markers:",r);const j=(m.current?r.filter(g=>!m.current.isRangeCollapsed({startLineNumber:g.startLineNumber,startColumn:g.startColumn,endLineNumber:g.endLineNumber,endColumn:g.endColumn})):r).map(g=>{var k,W,z;return{path:"",message:g.message,code:typeof g.code=="string"?g.code:((k=g.code)==null?void 0:k.value)||"validation_error",startLineNumber:g.startLineNumber,startColumn:g.startColumn,endLineNumber:g.endLineNumber,endColumn:g.endColumn,severity:g.severity===((W=i.current)==null?void 0:W.MarkerSeverity.Error)?"error":g.severity===((z=i.current)==null?void 0:z.MarkerSeverity.Warning)?"warning":"info"}});A(j),w({hasValidationErrors:j.some(g=>g.severity==="error")}),d.current=[],j.length>0&&!P&&(l(!0),n(!1))}b.useEffect(()=>{const r=V==null?void 0:V.current,p=R==null?void 0:R.current;return()=>{var j;r==null||r.flush(),p==null||p.cancel(),(j=m.current)==null||j.dispose(),m.current=null,D(e),console.debug(`EditorWillUnMount: (name: ${e})`)}},[e,D]),b.useEffect(()=>{var p;if(s===void 0||s===h.current)return;R.current.cancel();const r=(p=f.current)==null?void 0:p.getModel();r&&r.getValue()!==s&&r.setValue(s),y(s)},[s]);const J=b.useRef(!1);b.useEffect(()=>{if(!J.current){J.current=!0;return}if(!m.current)return;const r=setTimeout(()=>{var p;R.current.cancel(),(p=m.current)==null||p.recollapse()},0);return()=>clearTimeout(r)},[C]);const ne=b.useCallback(r=>{f.current&&r.startLineNumber&&r.startColumn&&(f.current.setPosition({lineNumber:r.startLineNumber,column:r.startColumn}),f.current.revealLineInCenter(r.startLineNumber),f.current.focus())},[]);return c.jsxs("div",{className:"relative h-full",children:[v?c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"flex items-center justify-between px-2 py-1 border-b bg-muted/40 text-xs",children:[c.jsxs("div",{children:["Review changes for ",c.jsx("span",{className:"font-medium",children:e})]}),c.jsxs("div",{className:"flex gap-2",children:[c.jsx(U,{variant:"secondary",size:"sm",onClick:()=>E(e),children:"Discard"}),c.jsx(U,{size:"sm",onClick:()=>{x(e,v.modified),E(e,!0)},children:"Apply Changes"})]})]}),c.jsx(le,{height:"calc(100% - 32px)",original:v.original,modified:v.modified,language:"json",theme:B(u),options:{readOnly:!0,renderSideBySide:!0,originalEditable:!1,automaticLayout:!0,minimap:{enabled:!1}},beforeMount:O})]}):c.jsx(ae,{height:"100%",defaultLanguage:"json",theme:B(u),defaultPath:Ae(e),value:C,beforeMount:O,onMount:ee,onValidate:te,onChange:r=>{var p;if(!((p=m.current)!=null&&p.isApplyingEdits())&&r){N();const j=I(r);h.current=j,V.current(e,j),R.current()}},options:{minimap:{enabled:!0},scrollBeyondLastLine:!0,wordWrap:"on",automaticLayout:!0,formatOnPaste:!0,formatOnType:!0,tabSize:2,insertSpaces:!0,detectIndentation:!1,folding:!0,foldingStrategy:"indentation",showFoldingControls:"always",bracketPairColorization:{enabled:!0},guides:{bracketPairs:!0,indentation:!0},suggest:{showProperties:!0,showMethods:!0,showFunctions:!0,showConstructors:!0,showDeprecated:!0,showFields:!0,showVariables:!0,showClasses:!0,showStructs:!0,showInterfaces:!0,showModules:!0,showTypeParameters:!0,showValues:!0,showConstants:!0,showEnums:!0,showEnumMembers:!0,showKeywords:!0,showWords:!1,showColors:!0,showFiles:!1,showReferences:!0,showFolders:!1,showOperators:!0,showUnits:!0,showSnippets:!0,snippetsPreventQuickSuggestions:!1,insertMode:"insert",filterGraceful:!0,localityBonus:!0,shareSuggestSelections:!0,showIcons:!0},quickSuggestions:{strings:!0,comments:!1,other:!0},quickSuggestionsDelay:10,suggestSelection:"first",suggestOnTriggerCharacters:!0,acceptSuggestionOnEnter:"on",acceptSuggestionOnCommitCharacter:!0,wordBasedSuggestions:"off",parameterHints:{enabled:!0,cycle:!0},hover:{enabled:!0,delay:300,sticky:!0},tabCompletion:"on",snippetSuggestions:"inline",inlineSuggest:{enabled:!0}}}),c.jsx("div",{className:"absolute top-0 right-0",children:c.jsx(Ve,{errors:M,onClick:()=>{l(!0),n(!1)}})}),P&&M.length>0&&c.jsx(Re,{errors:M,isMinimized:a,onToggleMinimize:()=>n(!a),onErrorClick:ne,onClose:()=>l(!1),className:"z-40"})]})}const $e=se.memo(Ie,(e,t)=>e.name===t.name&&e.value===t.value&&e.saveDocumentDebounceWait===t.saveDocumentDebounceWait),We=Object.freeze(Object.defineProperty({__proto__:null,EditorMonacoJsonMemoized:$e},Symbol.toStringTag,{value:"Module"}));export{$e as E,Ve as V,Re as a,X as c,We as e,G as g};
|
|
24
|
-
//# sourceMappingURL=editor-monaco-json-CAlvfPc7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editor-monaco-json-CAlvfPc7.js","sources":["../../../src/client/lib/monaco-selection-utils.ts","../../../src/client/lib/monaco-collapse-strings.ts","../../../src/client/components/json-editor/validation-panel.tsx","../../../src/client/components/json-editor/editor-monaco-json.tsx"],"sourcesContent":["/**\n * Monaco Editor Selection Utilities\n * Provides functionality to extract selected text and JSON paths from Monaco editor instances\n */\n\nimport type { editor as MonacoEditorType } from 'monaco-editor';\nimport type { Monaco } from '@monaco-editor/react';\n\nexport interface SelectionContext {\n selectedText: string;\n jsonPath?: string;\n propertyKey?: string;\n fullDocument?: any;\n isValidJson: boolean;\n startLine: number;\n endLine: number;\n}\n\n/**\n * Get the current selection context from a Monaco editor instance\n */\nexport function getSelectionContext(\n editor: MonacoEditorType.IStandaloneCodeEditor,\n monaco: Monaco\n): SelectionContext | null {\n if (!editor || !monaco) {\n return null;\n }\n\n const model = editor.getModel();\n if (!model) {\n return null;\n }\n\n const selection = editor.getSelection();\n if (!selection) {\n return null;\n }\n\n // Get selected text\n const selectedText = model.getValueInRange(selection);\n\n // If no text is selected, get the word at cursor position\n const finalText = selectedText || getWordAtCursor(editor, monaco);\n\n if (!finalText) {\n return null;\n }\n\n // Get the full document text\n const fullDocumentText = model.getValue();\n let fullDocument: any = null;\n let isValidJson = false;\n\n try {\n fullDocument = JSON.parse(fullDocumentText);\n isValidJson = true;\n } catch {\n // Document is not valid JSON\n }\n\n // Try to determine the JSON path\n const jsonPath = isValidJson\n ? getJsonPathAtPosition(\n fullDocumentText,\n selection.startLineNumber,\n selection.startColumn\n )\n : undefined;\n\n // Extract property key if we're selecting a property value\n const propertyKey = extractPropertyKey(\n fullDocumentText,\n selection.startLineNumber,\n selection.startColumn\n );\n\n return {\n selectedText: finalText,\n jsonPath,\n propertyKey,\n fullDocument,\n isValidJson,\n startLine: selection.startLineNumber,\n endLine: selection.endLineNumber,\n };\n}\n\n/**\n * Get the word at the current cursor position\n */\nfunction getWordAtCursor(\n editor: MonacoEditorType.IStandaloneCodeEditor,\n _monaco: Monaco\n): string {\n const model = editor.getModel();\n const position = editor.getPosition();\n\n if (!model || !position) {\n return '';\n }\n\n const word = model.getWordAtPosition(position);\n if (word) {\n return model.getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endLineNumber: position.lineNumber,\n endColumn: word.endColumn,\n });\n }\n\n return '';\n}\n\n/**\n * Determine the JSON path at a specific position in the document\n */\nfunction getJsonPathAtPosition(\n documentText: string,\n lineNumber: number,\n column: number\n): string | undefined {\n try {\n // Split document into lines\n const lines = documentText.split('\\n');\n\n // Build a path by analyzing the nesting level\n const path: string[] = [];\n let depth = 0;\n let inArray = false;\n let arrayIndex = 0;\n\n for (let i = 0; i < Math.min(lineNumber, lines.length); i++) {\n const line = lines[i];\n\n // Count braces and brackets to track nesting\n for (let j = 0; j < line.length; j++) {\n const char = line[j];\n\n if (i === lineNumber - 1 && j >= column) {\n // We've reached the target position\n break;\n }\n\n if (char === '{') {\n depth++;\n } else if (char === '}') {\n depth--;\n if (path.length > depth) {\n path.pop();\n }\n } else if (char === '[') {\n inArray = true;\n arrayIndex = 0;\n } else if (char === ']') {\n inArray = false;\n if (path[path.length - 1]?.match(/\\[\\d+\\]$/)) {\n path.pop();\n }\n } else if (char === ',' && inArray) {\n arrayIndex++;\n }\n }\n\n // Try to extract property names from the line\n const propertyMatch = line.match(/^\\s*\"([^\"]+)\"\\s*:/);\n if (propertyMatch) {\n // Adjust path length to current depth\n while (path.length >= depth) {\n path.pop();\n }\n\n if (inArray) {\n path.push(`${propertyMatch[1]}[${arrayIndex}]`);\n } else {\n path.push(propertyMatch[1]);\n }\n }\n }\n\n return path.length > 0 ? path.join('.') : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Extract the property key at a specific position\n */\nfunction extractPropertyKey(\n documentText: string,\n lineNumber: number,\n _column: number\n): string | undefined {\n try {\n const lines = documentText.split('\\n');\n if (lineNumber > lines.length) {\n return undefined;\n }\n\n const line = lines[lineNumber - 1];\n\n // Look for a property key on the same line\n const propertyMatch = line.match(/^\\s*\"([^\"]+)\"\\s*:/);\n if (propertyMatch) {\n return propertyMatch[1];\n }\n\n // Look backwards for the nearest property key\n for (let i = lineNumber - 2; i >= 0; i--) {\n const prevLine = lines[i];\n const prevMatch = prevLine.match(/^\\s*\"([^\"]+)\"\\s*:/);\n if (prevMatch) {\n // Check if this property's value extends to our line\n // This is a simplified check - more complex logic might be needed\n return prevMatch[1];\n }\n\n // Stop if we hit a closing brace (end of object)\n if (prevLine.includes('}')) {\n break;\n }\n }\n\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Format a selection context for display\n */\nexport function formatSelectionContext(context: SelectionContext): string {\n const parts: string[] = [];\n\n if (context.jsonPath) {\n parts.push(`Path: ${context.jsonPath}`);\n }\n\n if (context.propertyKey) {\n parts.push(`Property: ${context.propertyKey}`);\n }\n\n parts.push(`Lines: ${context.startLine}-${context.endLine}`);\n\n return parts.join(' | ');\n}\n\n/**\n * Extract a JSON subtree from a path\n */\nexport function extractJsonSubtree(obj: any, path: string): any {\n if (!obj || !path) {\n return undefined;\n }\n\n const parts = path.split('.');\n let current = obj;\n\n for (const part of parts) {\n if (!current) {\n return undefined;\n }\n\n // Handle array notation like \"items[0]\"\n const arrayMatch = part.match(/^([^[]+)\\[(\\d+)\\]$/);\n if (arrayMatch) {\n const [, key, index] = arrayMatch;\n current = current[key];\n if (Array.isArray(current)) {\n current = current[parseInt(index, 10)];\n } else {\n return undefined;\n }\n } else {\n current = current[part];\n }\n }\n\n return current;\n}\n\n/**\n * Create a context snippet for AI\n */\nexport function createContextSnippet(context: SelectionContext): string {\n const lines: string[] = [];\n\n if (context.jsonPath) {\n lines.push(`JSON Path: ${context.jsonPath}`);\n }\n\n if (context.selectedText.length > 500) {\n lines.push(\n `Selected Text (truncated): ${context.selectedText.substring(0, 500)}...`\n );\n } else {\n lines.push(`Selected Text: ${context.selectedText}`);\n }\n\n if (context.isValidJson && context.fullDocument && context.jsonPath) {\n const subtree = extractJsonSubtree(context.fullDocument, context.jsonPath);\n if (subtree !== undefined) {\n const subtreeStr = JSON.stringify(subtree, null, 2);\n if (subtreeStr.length > 500) {\n lines.push(\n `Context Value (truncated): ${subtreeStr.substring(0, 500)}...`\n );\n } else {\n lines.push(`Context Value: ${subtreeStr}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n","/**\n * Long-string collapser for the JSON Monaco editor.\n *\n * Very long string *values* (base64 images, embedded SVGs, big data blobs, …)\n * make the editor unusable: with wordWrap on they wrap into hundreds of rows.\n *\n * Monaco cannot hide a substring of a line (decorations only style/inject\n * text; folding/setHiddenAreas work on whole lines). So the only way to\n * actually reclaim vertical space is to remove the characters from the model.\n *\n * Strategy: keep a short head and tail of the real value visible and replace\n * only the MIDDLE (in place, on the same logical line — so every OTHER line\n * number stays valid) with a short sentinel `§jtoc:<id>§`. The sentinel is\n * hidden via CSS and a clickable chip is rendered in its place, so a value\n * reads like: \"data:image/png;base64,iVBOR …⟨12.4 KB⟩… AAAA\". Clicking the\n * chip toggles expand/collapse. The hidden middle is kept in a map and\n * re-inserted before the value is saved, so persistence is lossless.\n *\n * Save safety: collapse/expand edits run with an `applying` flag set; the\n * editor component skips its save side-effect for those programmatic changes,\n * and `toStorageValue()` reconstructs the full document before any real save.\n */\nimport type { Monaco } from '@monaco-editor/react';\nimport type { editor, IDisposable, IRange, IPosition } from 'monaco-editor';\n\n/** Collapse string values longer than this many (escaped) characters. */\nconst THRESHOLD = 200;\n/** How much of the start / end of the value to keep visible. */\nconst HEAD_CHARS = 32;\nconst TAIL_CHARS = 12;\n/** Don't bother collapsing if less than this would be hidden. */\nconst MIN_MIDDLE_CHARS = 40;\n\nconst SENTINEL_PREFIX = '§jtoc:';\nconst SENTINEL_SUFFIX = '§';\n\nconst STYLE_ID = 'jto-collapse-strings-styles';\n\ninterface TrackedString {\n id: number;\n middle: string; // the hidden middle slice, exactly as it appears in the model\n expanded: boolean;\n decorationId: string;\n}\n\ninterface ScanHit {\n innerStart: number; // offset of first char after the opening quote\n innerEnd: number; // offset of the closing quote\n inner: string;\n}\n\nexport interface CollapseController {\n /** Reset state and collapse all long strings in the current model. */\n recollapse(): void;\n /** Collapse newly-introduced long strings, skipping the one under the cursor. */\n collapseNew(cursorOffset?: number): void;\n /** Reconstruct the full document text (sentinels → original values) for saving. */\n toStorageValue(modelText: string): string;\n /** True while collapse/expand edits are being applied programmatically. */\n isApplyingEdits(): boolean;\n /** True if a marker range falls inside a currently-collapsed value. */\n isRangeCollapsed(range: IRange): boolean;\n /**\n * Re-anchor chip decorations to their sentinels' current positions. Call\n * after an edit that MOVES text wholesale (outline drag-reorder, undo of\n * one): Monaco collapses decorations that sat inside a replaced range, but\n * the sentinel text itself travels with the edit and carries its id, so the\n * decoration can always be rebuilt at the sentinel's new location.\n */\n resyncDecorations(): void;\n dispose(): void;\n}\n\nfunction ensureStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n.jto-collapsed-token { display: none !important; }\n.jto-collapsed-chip, .jto-expand-collapse-chip {\n color: #7c8595;\n background: rgba(127,127,127,0.14);\n border: 1px solid rgba(127,127,127,0.30);\n border-radius: 4px;\n padding: 0 6px;\n cursor: pointer;\n font-style: italic;\n font-size: 0.85em;\n}\n.jto-collapsed-chip { margin: 0 2px; }\n.jto-expand-collapse-chip { margin-right: 4px; }\n.jto-collapsed-chip:hover, .jto-expand-collapse-chip:hover {\n background: rgba(127,127,127,0.28);\n color: #aab3c2;\n}\n`;\n document.head.appendChild(style);\n}\n\n/** Scan JSON text for string values longer than the threshold (skips ones that already hold a sentinel). */\nfunction scanLongStrings(text: string): ScanHit[] {\n const hits: ScanHit[] = [];\n const n = text.length;\n let i = 0;\n while (i < n) {\n if (text[i] !== '\"') {\n i++;\n continue;\n }\n const innerStart = i + 1;\n let j = innerStart;\n while (j < n) {\n const c = text[j];\n if (c === '\\\\') {\n j += 2;\n continue;\n }\n if (c === '\"') break;\n j++;\n }\n if (j < n) {\n const inner = text.slice(innerStart, j);\n if (inner.length > THRESHOLD && !inner.includes(SENTINEL_PREFIX)) {\n hits.push({ innerStart, innerEnd: j, inner });\n }\n }\n i = j + 1;\n }\n return hits;\n}\n\n/**\n * Split an escaped JSON string into {prefix, middle, suffix}, cutting only at\n * escape-safe boundaries so neither piece ends mid-escape (`\\\"`, `\\uXXXX`, …).\n * Returns null when there isn't enough middle to be worth collapsing.\n */\nfunction splitPreserveEscapes(\n raw: string\n): { prefix: string; middle: string; suffix: string } | null {\n const n = raw.length;\n // Offsets that sit between complete characters/escape sequences.\n const safe = new Set<number>([0]);\n let i = 0;\n while (i < n) {\n if (raw[i] === '\\\\') {\n i = Math.min(i + (raw[i + 1] === 'u' ? 6 : 2), n);\n } else {\n i += 1;\n }\n safe.add(i);\n }\n let headCut = Math.min(HEAD_CHARS, n);\n while (headCut > 0 && !safe.has(headCut)) headCut--;\n let tailStart = Math.max(n - TAIL_CHARS, headCut);\n while (tailStart < n && !safe.has(tailStart)) tailStart++;\n const middle = raw.slice(headCut, tailStart);\n if (middle.length < MIN_MIDDLE_CHARS) return null;\n return {\n prefix: raw.slice(0, headCut),\n middle,\n suffix: raw.slice(tailStart),\n };\n}\n\nfunction formatSize(chars: number): string {\n // String length ≈ byte count for the typical ASCII payloads we collapse.\n if (chars < 1024) return `${chars} chars`;\n if (chars < 1024 * 1024) return `${(chars / 1024).toFixed(1)} KB`;\n return `${(chars / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction positionTouchesRange(pos: IPosition, range: IRange): boolean {\n // Pad by one column: injected chip text (before/after) anchors at the range\n // edge, so a click on the chip can map to the column just outside it.\n if (\n pos.lineNumber < range.startLineNumber ||\n pos.lineNumber > range.endLineNumber\n ) {\n return false;\n }\n if (\n pos.lineNumber === range.startLineNumber &&\n pos.column < range.startColumn - 1\n ) {\n return false;\n }\n if (\n pos.lineNumber === range.endLineNumber &&\n pos.column > range.endColumn + 1\n ) {\n return false;\n }\n return true;\n}\n\nfunction rangesOverlap(a: IRange, b: IRange): boolean {\n if (\n a.endLineNumber < b.startLineNumber ||\n b.endLineNumber < a.startLineNumber\n ) {\n return false;\n }\n if (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn) {\n return false;\n }\n if (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn) {\n return false;\n }\n return true;\n}\n\nexport function installLongStringCollapser(\n editorInstance: editor.IStandaloneCodeEditor,\n monaco: Monaco\n): CollapseController {\n ensureStyles();\n\n const tracked = new Map<number, TrackedString>();\n const disposables: IDisposable[] = [];\n let nextId = 1;\n let applying = false;\n\n const makeSentinel = (id: number) =>\n `${SENTINEL_PREFIX}${id}${SENTINEL_SUFFIX}`;\n\n /** Expand any collapsed sentinels in `text` back to their original middles. */\n function reconstruct(text: string): string {\n if (tracked.size === 0) return text;\n let out = text;\n for (const t of tracked.values()) {\n if (t.expanded) continue; // already full text in the model\n out = out.split(makeSentinel(t.id)).join(t.middle);\n }\n return out;\n }\n\n function collapsedDecoration(\n middleLen: number\n ): editor.IModelDecorationOptions {\n return {\n inlineClassName: 'jto-collapsed-token',\n after: {\n content: ` … ⟨ ${formatSize(middleLen)} ⟩ … `,\n inlineClassName: 'jto-collapsed-chip',\n },\n stickiness:\n monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n hoverMessage: { value: 'Click to expand the collapsed value' },\n };\n }\n\n function expandedDecoration(): editor.IModelDecorationOptions {\n return {\n before: {\n content: ' ⟨ collapse ⟩ ',\n inlineClassName: 'jto-expand-collapse-chip',\n },\n stickiness:\n monaco.editor.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n hoverMessage: { value: 'Click to collapse this value again' },\n };\n }\n\n /** Live ranges of currently-expanded tracked values (to avoid re-collapsing them). */\n function expandedRanges(model: editor.ITextModel): IRange[] {\n const ranges: IRange[] = [];\n for (const t of tracked.values()) {\n if (!t.expanded) continue;\n const r = model.getDecorationRange(t.decorationId);\n if (r) ranges.push(r);\n }\n return ranges;\n }\n\n function collapseHits(hits: ScanHit[]): void {\n const model = editorInstance.getModel();\n if (!model || hits.length === 0) return;\n applying = true;\n try {\n // Bottom-up: editing a lower region never invalidates the offsets above it.\n for (let k = hits.length - 1; k >= 0; k--) {\n const hit = hits[k];\n const split = splitPreserveEscapes(hit.inner);\n if (!split) continue;\n const id = nextId++;\n const sentinel = makeSentinel(id);\n const startPos = model.getPositionAt(hit.innerStart);\n const endPos = model.getPositionAt(hit.innerEnd);\n const innerRange = new monaco.Range(\n startPos.lineNumber,\n startPos.column,\n endPos.lineNumber,\n endPos.column\n );\n model.applyEdits([\n {\n range: innerRange,\n text: split.prefix + sentinel + split.suffix,\n forceMoveMarkers: true,\n },\n ]);\n // The sentinel sits between the (still-visible) head and tail.\n const sentinelStart = hit.innerStart + split.prefix.length;\n const tokenStart = model.getPositionAt(sentinelStart);\n const tokenEnd = model.getPositionAt(sentinelStart + sentinel.length);\n const tokenRange = new monaco.Range(\n tokenStart.lineNumber,\n tokenStart.column,\n tokenEnd.lineNumber,\n tokenEnd.column\n );\n const [decorationId] = editorInstance.deltaDecorations(\n [],\n [\n {\n range: tokenRange,\n options: collapsedDecoration(split.middle.length),\n },\n ]\n );\n tracked.set(id, {\n id,\n middle: split.middle,\n expanded: false,\n decorationId,\n });\n }\n } finally {\n applying = false;\n }\n }\n\n function expand(id: number): void {\n const model = editorInstance.getModel();\n const t = tracked.get(id);\n if (!model || !t || t.expanded) return;\n const range = model.getDecorationRange(t.decorationId);\n if (!range) return;\n applying = true;\n try {\n model.applyEdits([{ range, text: t.middle, forceMoveMarkers: true }]);\n const startOff = model.getOffsetAt({\n lineNumber: range.startLineNumber,\n column: range.startColumn,\n });\n const endPos = model.getPositionAt(startOff + t.middle.length);\n const middleRange = new monaco.Range(\n range.startLineNumber,\n range.startColumn,\n endPos.lineNumber,\n endPos.column\n );\n const [decorationId] = editorInstance.deltaDecorations(\n [t.decorationId],\n [{ range: middleRange, options: expandedDecoration() }]\n );\n t.decorationId = decorationId;\n t.expanded = true;\n } finally {\n applying = false;\n }\n }\n\n function recollapseOne(id: number): void {\n const model = editorInstance.getModel();\n const t = tracked.get(id);\n if (!model || !t || !t.expanded) return;\n const range = model.getDecorationRange(t.decorationId);\n if (!range) return;\n // Re-read in case the user edited the middle while it was expanded.\n const currentMiddle = model.getValueInRange(range);\n t.middle = currentMiddle;\n const sentinel = makeSentinel(id);\n applying = true;\n try {\n model.applyEdits([{ range, text: sentinel, forceMoveMarkers: true }]);\n const startOff = model.getOffsetAt({\n lineNumber: range.startLineNumber,\n column: range.startColumn,\n });\n const tokenEnd = model.getPositionAt(startOff + sentinel.length);\n const tokenRange = new monaco.Range(\n range.startLineNumber,\n range.startColumn,\n tokenEnd.lineNumber,\n tokenEnd.column\n );\n const [decorationId] = editorInstance.deltaDecorations(\n [t.decorationId],\n [\n {\n range: tokenRange,\n options: collapsedDecoration(currentMiddle.length),\n },\n ]\n );\n t.decorationId = decorationId;\n t.expanded = false;\n } finally {\n applying = false;\n }\n }\n\n disposables.push(\n editorInstance.onMouseDown((e) => {\n const pos = e.target.position;\n if (!pos) return;\n const model = editorInstance.getModel();\n if (!model) return;\n for (const t of tracked.values()) {\n const range = model.getDecorationRange(t.decorationId);\n if (!range) continue;\n if (positionTouchesRange(pos, range)) {\n if (t.expanded) recollapseOne(t.id);\n else expand(t.id);\n e.event.preventDefault();\n e.event.stopPropagation();\n return;\n }\n }\n })\n );\n\n // Copy/cut must yield the REAL value, not the hidden `§jtoc:<id>§` sentinel\n // (it lives in the model text — CSS only hides it). Intercept in the capture\n // phase so we run before Monaco's own clipboard handler, then fully take over\n // (set the reconstructed text, and for cut delete the selection ourselves).\n const handleClipboard = (e: ClipboardEvent) => {\n if (tracked.size === 0) return;\n const model = editorInstance.getModel();\n const selection = editorInstance.getSelection();\n if (!model || !selection || selection.isEmpty()) return;\n const selected = model.getValueInRange(selection);\n if (!selected.includes(SENTINEL_PREFIX)) return;\n const reconstructed = reconstruct(selected);\n if (reconstructed === selected) return;\n e.clipboardData?.setData('text/plain', reconstructed);\n e.preventDefault();\n e.stopImmediatePropagation();\n if (e.type === 'cut') {\n // Real content change — leave `applying` unset so the edit is persisted.\n editorInstance.executeEdits('jto-collapse-cut', [\n { range: selection, text: '' },\n ]);\n }\n };\n\n const domNode = editorInstance.getDomNode();\n if (domNode) {\n domNode.addEventListener('copy', handleClipboard, true);\n domNode.addEventListener('cut', handleClipboard, true);\n disposables.push({\n dispose() {\n domNode.removeEventListener('copy', handleClipboard, true);\n domNode.removeEventListener('cut', handleClipboard, true);\n },\n });\n }\n\n return {\n recollapse() {\n const model = editorInstance.getModel();\n if (!model) return;\n // Restore any live sentinels to their full text first, so a redundant\n // call (or one after the model was edited) never strands a sentinel in\n // the model with no mapping — which would otherwise be saved verbatim.\n applying = true;\n try {\n for (const t of tracked.values()) {\n if (t.expanded) continue;\n const r = model.getDecorationRange(t.decorationId);\n if (r) {\n model.applyEdits([\n { range: r, text: t.middle, forceMoveMarkers: true },\n ]);\n }\n }\n } finally {\n applying = false;\n }\n const stale = [...tracked.values()].map((t) => t.decorationId);\n if (stale.length) editorInstance.deltaDecorations(stale, []);\n tracked.clear();\n collapseHits(scanLongStrings(model.getValue()));\n },\n\n collapseNew(cursorOffset?: number) {\n const model = editorInstance.getModel();\n if (!model) return;\n const skip = expandedRanges(model);\n const hits = scanLongStrings(model.getValue()).filter((hit) => {\n // Don't yank the string the user is currently typing into.\n if (\n cursorOffset !== undefined &&\n cursorOffset >= hit.innerStart - 1 &&\n cursorOffset <= hit.innerEnd + 1\n ) {\n return false;\n }\n // Don't re-collapse a value the user has deliberately expanded.\n const start = model.getPositionAt(hit.innerStart);\n const end = model.getPositionAt(hit.innerEnd);\n const hitRange: IRange = {\n startLineNumber: start.lineNumber,\n startColumn: start.column,\n endLineNumber: end.lineNumber,\n endColumn: end.column,\n };\n return !skip.some((r) => rangesOverlap(r, hitRange));\n });\n collapseHits(hits);\n },\n\n toStorageValue(modelText: string): string {\n return reconstruct(modelText);\n },\n\n isApplyingEdits() {\n return applying;\n },\n\n isRangeCollapsed(range: IRange): boolean {\n const model = editorInstance.getModel();\n if (!model) return false;\n for (const t of tracked.values()) {\n if (t.expanded) continue;\n const r = model.getDecorationRange(t.decorationId);\n if (r && rangesOverlap(r, range)) return true;\n }\n return false;\n },\n\n resyncDecorations() {\n const model = editorInstance.getModel();\n if (!model || tracked.size === 0) return;\n const text = model.getValue();\n for (const t of [...tracked.values()]) {\n if (t.expanded) {\n // The full value is plain text in the model; if the collapse chip\n // still marks exactly that text, keep it — otherwise drop the entry\n // (the value simply stays expanded).\n const r = model.getDecorationRange(t.decorationId);\n if (!r || model.getValueInRange(r) !== t.middle) {\n editorInstance.deltaDecorations([t.decorationId], []);\n tracked.delete(t.id);\n }\n continue;\n }\n const sentinel = makeSentinel(t.id);\n const offset = text.indexOf(sentinel);\n if (offset === -1) {\n // Sentinel text was destroyed by an edit; the hidden middle is gone\n // the same way it would be if the user deleted the chip directly.\n editorInstance.deltaDecorations([t.decorationId], []);\n tracked.delete(t.id);\n continue;\n }\n const start = model.getPositionAt(offset);\n const end = model.getPositionAt(offset + sentinel.length);\n const current = model.getDecorationRange(t.decorationId);\n if (\n current &&\n current.startLineNumber === start.lineNumber &&\n current.startColumn === start.column &&\n current.endLineNumber === end.lineNumber &&\n current.endColumn === end.column\n ) {\n continue; // already anchored correctly\n }\n const [decorationId] = editorInstance.deltaDecorations(\n [t.decorationId],\n [\n {\n range: new monaco.Range(\n start.lineNumber,\n start.column,\n end.lineNumber,\n end.column\n ),\n options: collapsedDecoration(t.middle.length),\n },\n ]\n );\n t.decorationId = decorationId;\n }\n },\n\n dispose() {\n for (const d of disposables) d.dispose();\n const model = editorInstance.getModel();\n if (model) {\n const ids = [...tracked.values()].map((t) => t.decorationId);\n if (ids.length) editorInstance.deltaDecorations(ids, []);\n }\n tracked.clear();\n },\n };\n}\n","import React, { useState, useEffect } from 'react';\nimport {\n AlertCircle,\n ChevronDown,\n ChevronUp,\n X,\n AlertTriangle,\n Copy,\n Check,\n} from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport type { JsonEditorError } from '../../lib/json-types';\n\ninterface ValidationPanelProps {\n errors: JsonEditorError[];\n onErrorClick?: (error: JsonEditorError) => void;\n onClose?: () => void;\n className?: string;\n isMinimized?: boolean;\n onToggleMinimize?: () => void;\n}\n\nexport function ValidationPanel({\n errors,\n onErrorClick,\n onClose,\n className,\n isMinimized = false,\n onToggleMinimize,\n}: ValidationPanelProps) {\n const [isExpanded, setIsExpanded] = useState(!isMinimized);\n\n useEffect(() => {\n setIsExpanded(!isMinimized);\n }, [isMinimized]);\n\n const hasErrors = errors.length > 0;\n const errorCount = errors.length;\n\n if (!hasErrors) return null;\n\n const toggleExpanded = () => {\n const newExpanded = !isExpanded;\n setIsExpanded(newExpanded);\n onToggleMinimize?.();\n };\n\n return (\n <div\n className={cn(\n 'absolute bottom-0 left-0 right-0 z-50 bg-background border-t shadow-lg transition-all duration-200',\n isExpanded ? 'h-48' : 'h-10',\n className\n )}\n >\n {/* Header Bar */}\n <div\n className={cn(\n 'flex items-center justify-between px-3 py-2 cursor-pointer',\n 'bg-destructive/10 border-b border-destructive/20',\n 'hover:bg-destructive/15 transition-colors'\n )}\n onClick={toggleExpanded}\n >\n <div className=\"flex items-center gap-2\">\n <AlertCircle className=\"w-4 h-4 text-destructive\" />\n <span className=\"text-sm font-medium text-destructive\">\n {errorCount} Validation Error{errorCount !== 1 ? 's' : ''}\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <CopyErrorsButton errors={errors} />\n <button\n onClick={(e) => {\n e.stopPropagation();\n toggleExpanded();\n }}\n className=\"p-1 hover:bg-destructive/20 rounded-sm transition-colors\"\n aria-label={isExpanded ? 'Minimize' : 'Expand'}\n >\n {isExpanded ? (\n <ChevronDown className=\"w-4 h-4\" />\n ) : (\n <ChevronUp className=\"w-4 h-4\" />\n )}\n </button>\n {onClose && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n className=\"p-1 hover:bg-destructive/20 rounded-sm transition-colors\"\n aria-label=\"Close validation panel\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Error List */}\n {isExpanded && (\n <div className=\"overflow-y-auto h-[calc(100%-2.5rem)]\">\n <div className=\"divide-y divide-border/50\">\n {errors.map((error, index) => (\n <ErrorItem\n key={`${error.path}-${index}`}\n error={error}\n onClick={() => onErrorClick?.(error)}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction CopyErrorsButton({ errors }: { errors: JsonEditorError[] }) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = (e: React.MouseEvent) => {\n e.stopPropagation();\n const text = errors\n .map((err) => {\n const loc =\n err.startLineNumber && err.startColumn\n ? `Line ${err.startLineNumber}:${err.startColumn}`\n : 'Unknown location';\n return `${loc} — ${err.message}`;\n })\n .join('\\n');\n navigator.clipboard.writeText(text).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n };\n\n return (\n <button\n onClick={handleCopy}\n className={cn(\n 'flex items-center gap-1 px-1.5 py-1 rounded-sm transition-all duration-200 cursor-pointer',\n copied ? 'bg-success/10 text-success' : 'hover:bg-destructive/20'\n )}\n aria-label=\"Copy all errors\"\n >\n {copied ? (\n <>\n <Check className=\"w-3.5 h-3.5\" />\n <span className=\"text-xs font-medium\">Copied</span>\n </>\n ) : (\n <Copy className=\"w-4 h-4\" />\n )}\n </button>\n );\n}\n\ninterface ErrorItemProps {\n error: JsonEditorError;\n onClick?: () => void;\n}\n\nfunction ErrorItem({ error, onClick }: ErrorItemProps) {\n const getSeverityIcon = (severity: string) => {\n switch (severity) {\n case 'error':\n return (\n <AlertCircle className=\"w-4 h-4 text-destructive flex-shrink-0\" />\n );\n case 'warning':\n return <AlertTriangle className=\"w-4 h-4 text-warning flex-shrink-0\" />;\n default:\n return <AlertCircle className=\"w-4 h-4 text-data-blue flex-shrink-0\" />;\n }\n };\n\n const formatPath = (path: string) => {\n if (!path) return 'Document root';\n // Remove leading slash and format nicely\n return path.replace(/^\\//, '').replace(/\\//g, ' → ');\n };\n\n return (\n <div\n className={cn(\n 'px-3 py-2 hover:bg-muted/50 cursor-pointer transition-colors',\n 'group'\n )}\n onClick={onClick}\n >\n <div className=\"flex items-start gap-2\">\n {getSeverityIcon(error.severity)}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <span className=\"text-xs font-mono text-muted-foreground\">\n {error.startLineNumber && error.startColumn\n ? `Line ${error.startLineNumber}:${error.startColumn}`\n : 'Unknown location'}\n </span>\n {error.path && (\n <>\n <span className=\"text-xs text-muted-foreground\">•</span>\n <span className=\"text-xs text-muted-foreground truncate\">\n {formatPath(error.path)}\n </span>\n </>\n )}\n </div>\n <p className=\"text-sm text-foreground\">{error.message}</p>\n {error.code && error.code !== 'validation_error' && (\n <span className=\"text-xs text-muted-foreground font-mono mt-1 inline-block\">\n Code: {error.code}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// Status bar component for minimal error display\nexport function ValidationStatusBar({\n errors,\n onClick,\n className,\n}: {\n errors: JsonEditorError[];\n onClick?: () => void;\n className?: string;\n}) {\n if (errors.length !== 0) {\n return (\n <div\n className={cn(\n 'flex items-center gap-2 px-2 py-1 text-xs cursor-pointer',\n 'bg-destructive/10 text-destructive hover:bg-destructive/15 transition-colors',\n className\n )}\n onClick={onClick}\n >\n <AlertCircle className=\"w-3 h-3\" />\n <span>\n {errors.length} error{errors.length !== 1 ? 's' : ''}\n </span>\n </div>\n );\n }\n\n return null;\n}\n","import React, { useRef, useEffect, useState, useCallback } from 'react';\nimport { useTheme } from '../theme-provider';\nimport Editor, { Monaco, DiffEditor } from '@monaco-editor/react';\nimport debounce from 'lodash.debounce';\nimport type { editor } from 'monaco-editor';\nimport { useDocumentsStore } from '../../store/documents-store-provider';\nimport { useOutputStore } from '../../store/output-store-provider';\nimport { Button } from '../ui/button';\nimport { type JsonEditorError } from '../../lib/json-types';\n// configureMonacoInstance is called at startup (main.tsx) and by useMonacoPlugins\nimport { useEditorRefsStore } from '../../store/editor-refs-store';\nimport {\n getSelectionContext,\n createContextSnippet,\n} from '../../lib/monaco-selection-utils';\nimport {\n installLongStringCollapser,\n type CollapseController,\n} from '../../lib/monaco-collapse-strings';\nimport { ValidationPanel, ValidationStatusBar } from './validation-panel';\nimport { monacoThemeFor, registerMonacoThemes } from '../../lib/monaco-theme';\nimport { FORMAT } from '../../lib/env';\n\n/**\n * Ensure defaultPath matches the document schema's fileMatch (*.FORMAT.json).\n *\n * Documents are discovered with their extension stripped, so `name` is\n * `contract-v2`, not `contract-v2.docx.json`. A model URI of `contract-v2.json`\n * matches no registered schema, leaving Monaco's JSON worker on its\n * schema-less path: no validation, no hovers, and \"completions\" that are just\n * values already present in the file. Mirrors resolveThemeDefaultPath.\n */\nfunction resolveDocumentDefaultPath(name: string): string {\n const ext = `.${FORMAT}.json`;\n if (name.endsWith(ext)) return name;\n const base = name\n .replace(/\\.\\w+\\.theme\\.json$/, '')\n .replace(/\\.\\w+\\.json$/, '')\n .replace(/\\.json$/, '');\n return base + ext;\n}\n\ninterface EditorMonacoJsonProps {\n name: string;\n defaultValue?: string;\n value?: string; // when provided, the editor becomes controlled\n saveDocumentDebounceWait: number;\n}\n\nfunction EditorMonacoJson({\n name,\n defaultValue,\n value,\n saveDocumentDebounceWait,\n}: EditorMonacoJsonProps) {\n console.debug(`Render EditorMonacoJson (name: ${name})`);\n\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n const { resolvedTheme } = useTheme();\n const saveDocument = useDocumentsStore((state) => state.saveDocument);\n const bumpEditSequence = useOutputStore((state) => state.bumpEditSequence);\n const setOutput = useOutputStore((state) => state.setOutput);\n const closeDocument = useDocumentsStore((state) => state.closeDocument);\n const pendingDiff = useDocumentsStore((state) => state.pendingDiffs[name]);\n const clearPendingDiff = useDocumentsStore((state) => state.clearPendingDiff);\n const [validationErrors, setValidationErrors] = useState<JsonEditorError[]>(\n []\n );\n const [showValidationPanel, setShowValidationPanel] = useState(true);\n const [isValidationPanelMinimized, setIsValidationPanelMinimized] =\n useState(false);\n const decorationIdsRef = useRef<string[]>([]);\n const collapseRef = useRef<CollapseController | null>(null);\n // The full text we last wrote to the store. When the controlled `value` prop\n // echoes this back, we must NOT let Monaco replace the (collapsed) model with\n // it — that would expand every chip and jump the cursor on each save.\n const lastSavedRef = useRef<string | null>(null);\n // The value actually handed to <Editor>: updated only on genuine external\n // changes (document switch, AI apply), never on our own save echoes.\n const [editorValue, setEditorValue] = useState<string | undefined>(\n value ?? defaultValue\n );\n const { registerEditor, unregisterEditor, setActiveEditor } =\n useEditorRefsStore();\n\n const debouncedSaveDocumentRef = useRef(\n debounce(saveDocument, saveDocumentDebounceWait)\n );\n\n // Collapse newly-pasted long strings after typing settles (skips the string\n // under the cursor so it never yanks text mid-edit). Re-anchor existing\n // chips first: undo of an outline reorder moves sentinel text without\n // moving its decoration.\n const debouncedCollapseNewRef = useRef(\n debounce(() => {\n const editorInstance = editorRef.current;\n const controller = collapseRef.current;\n if (!editorInstance || !controller) return;\n controller.resyncDecorations();\n const position = editorInstance.getPosition();\n const model = editorInstance.getModel();\n const cursorOffset =\n position && model ? model.getOffsetAt(position) : undefined;\n controller.collapseNew(cursorOffset);\n }, 600)\n );\n\n // Setup Monaco editor for JSON with schema validation\n // Note: schema configuration is handled by configureMonaco() at startup\n // and updateMonacoWithPlugins() via useMonacoPlugins hook.\n // Calling configureMonacoInstance here would overwrite plugin-aware schemas.\n const handleEditorWillMount = useCallback((monaco: Monaco) => {\n // Idempotent; guards the case where an editor mounts before the global\n // configureMonaco() promise has resolved.\n registerMonacoThemes(monaco);\n console.debug('Setting up Monaco for JSON editor');\n }, []);\n\n // Reconstruct the full document (collapsed sentinels → original values) before persisting.\n const toStorageValue = useCallback(\n (modelText: string) =>\n collapseRef.current\n ? collapseRef.current.toStorageValue(modelText)\n : modelText,\n []\n );\n\n function handleEditorDidMount(\n editor: editor.IStandaloneCodeEditor,\n monaco: Monaco\n ) {\n console.debug(`EditorDidMount: (name: ${name})`);\n editorRef.current = editor;\n monacoRef.current = monaco;\n\n // Ensure the model's language is set to JSON for schema validation\n const model = editor.getModel();\n if (model) {\n monaco.editor.setModelLanguage(model, 'json');\n console.debug('Model language set to JSON for:', model.uri.toString());\n }\n\n // Collapse very long string values (base64, big blobs, …) into clickable chips\n collapseRef.current = installLongStringCollapser(editor, monaco);\n collapseRef.current.recollapse();\n\n // Register editor in the refs store. Pass the sentinel reconstructor so any\n // consumer reading live text (preview/build) expands collapsed strings, and\n // the collapse controller so outline reorders can re-anchor chips.\n registerEditor(name, editor, monaco, toStorageValue, collapseRef.current);\n setActiveEditor(name);\n\n // Add context menu action for AI assistant\n editor.addAction({\n id: 'send-to-ai-assistant',\n label: 'Send to AI Assistant (⌘K)',\n contextMenuGroupId: 'navigation',\n contextMenuOrder: 1.5,\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyK],\n run: function () {\n // Use the editor reference from closure instead of the parameter\n const selection = getSelectionContext(editor, monaco);\n if (selection) {\n const snippet = createContextSnippet(selection);\n // Dispatch event for the chat panel to capture\n window.dispatchEvent(\n new CustomEvent('monaco-selection-to-ai', {\n detail: {\n documentName: name,\n selection,\n snippet,\n },\n })\n );\n }\n },\n });\n\n // Set up keyboard shortcuts\n // Cmd+K => send selection to AI assistant\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyK, () => {\n const selection = getSelectionContext(editor, monaco);\n if (selection) {\n const snippet = createContextSnippet(selection);\n window.dispatchEvent(\n new CustomEvent('monaco-selection-to-ai', {\n detail: {\n documentName: name,\n selection,\n snippet,\n },\n })\n );\n }\n });\n\n // Cmd+S => save command\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, () => {\n const currentValue = toStorageValue(editor.getValue());\n if (currentValue) {\n lastSavedRef.current = currentValue;\n saveDocument(name, currentValue);\n }\n });\n\n // Cmd+W => close command\n editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyW, () => {\n const currentValue = toStorageValue(editor.getValue());\n if (currentValue) {\n lastSavedRef.current = currentValue;\n saveDocument(name, currentValue);\n }\n closeDocument(name);\n });\n\n // Format document shortcut (Shift+Alt+F)\n editor.addCommand(\n monaco.KeyMod.Shift | monaco.KeyMod.Alt | monaco.KeyCode.KeyF,\n () => {\n editor.getAction('editor.action.formatDocument')?.run();\n }\n );\n\n // Initial validation will be handled by Monaco's onValidate\n }\n\n function handleEditorValidation(markers: editor.IMarker[]) {\n // Convert Monaco's native JSON validation markers to our error format\n console.debug('Monaco validation markers:', markers);\n\n // Drop markers that fall inside a collapsed sentinel — the user is seeing a\n // chip, not the real value, so a complaint about it would be confusing.\n const visibleMarkers = collapseRef.current\n ? markers.filter(\n (marker) =>\n !collapseRef.current!.isRangeCollapsed({\n startLineNumber: marker.startLineNumber,\n startColumn: marker.startColumn,\n endLineNumber: marker.endLineNumber,\n endColumn: marker.endColumn,\n })\n )\n : markers;\n\n const errors: JsonEditorError[] = visibleMarkers.map((marker) => ({\n path: '', // Monaco doesn't provide JSON path, but we don't need it for display\n message: marker.message,\n code:\n typeof marker.code === 'string'\n ? marker.code\n : marker.code?.value || 'validation_error',\n startLineNumber: marker.startLineNumber,\n startColumn: marker.startColumn,\n endLineNumber: marker.endLineNumber,\n endColumn: marker.endColumn,\n severity:\n marker.severity === monacoRef.current?.MarkerSeverity.Error\n ? 'error'\n : marker.severity === monacoRef.current?.MarkerSeverity.Warning\n ? 'warning'\n : 'info',\n }));\n\n setValidationErrors(errors);\n setOutput({\n hasValidationErrors: errors.some((e) => e.severity === 'error'),\n });\n\n // Decorations are now handled by Monaco's native validation\n decorationIdsRef.current = [];\n\n // Show validation panel if there are errors\n if (errors.length > 0 && !showValidationPanel) {\n setShowValidationPanel(true);\n setIsValidationPanelMinimized(false);\n }\n }\n\n // Flush debounced saveDocument on unmount and unregister editor\n useEffect(() => {\n const debouncedSaveDocument = debouncedSaveDocumentRef?.current;\n const debouncedCollapseNew = debouncedCollapseNewRef?.current;\n return () => {\n debouncedSaveDocument?.flush();\n debouncedCollapseNew?.cancel();\n collapseRef.current?.dispose();\n collapseRef.current = null;\n // Decorations cleanup handled by Monaco\n unregisterEditor(name);\n console.debug(`EditorWillUnMount: (name: ${name})`);\n };\n }, [name, unregisterEditor]);\n\n // Detect genuine external content changes. Our own save echoes (value ===\n // lastSaved) are ignored, so Monaco never sees a value change for them and\n // leaves the collapsed model untouched.\n useEffect(() => {\n if (value === undefined) return;\n if (value === lastSavedRef.current) return;\n // A queued collapse pass holds offsets into the model we are about to\n // replace, so drop it; the recollapse below rebuilds that state anyway.\n debouncedCollapseNewRef.current.cancel();\n // Replace the model ourselves rather than letting the react wrapper diff\n // its `value` prop against the model. The two are not comparable once the\n // collapser has run — the model holds sentinels where long strings used to\n // be, so it is both shorter than and textually unlike the document. The\n // wrapper's edit is computed from that mismatch and can leave the previous\n // document's tail stranded past the end of the new one, which surfaces as\n // a bogus \"End of file expected\" error on a perfectly valid document.\n const model = editorRef.current?.getModel();\n if (model && model.getValue() !== value) model.setValue(value);\n setEditorValue(value);\n }, [value]);\n\n // When an external change actually lands, Monaco replaces the model — re-run\n // the collapse pass on the new text. Skip the first run: the initial collapse\n // happens in handleEditorDidMount.\n const didMountValueEffectRef = useRef(false);\n useEffect(() => {\n if (!didMountValueEffectRef.current) {\n didMountValueEffectRef.current = true;\n return;\n }\n if (!collapseRef.current) return;\n const handle = setTimeout(() => {\n // Same reasoning as above: the replacement itself queues a collapse pass\n // anchored to pre-replacement offsets. recollapse() resets state and\n // re-scans, so that queued pass is both redundant and unsafe.\n debouncedCollapseNewRef.current.cancel();\n collapseRef.current?.recollapse();\n }, 0);\n return () => clearTimeout(handle);\n }, [editorValue]);\n\n // Handle error click - navigate to error in editor\n const handleErrorClick = useCallback((error: JsonEditorError) => {\n if (editorRef.current && error.startLineNumber && error.startColumn) {\n // Navigate to error position\n editorRef.current.setPosition({\n lineNumber: error.startLineNumber,\n column: error.startColumn,\n });\n editorRef.current.revealLineInCenter(error.startLineNumber);\n editorRef.current.focus();\n }\n }, []);\n\n return (\n <div className=\"relative h-full\">\n {pendingDiff ? (\n <>\n <div className=\"flex items-center justify-between px-2 py-1 border-b bg-muted/40 text-xs\">\n <div>\n Review changes for <span className=\"font-medium\">{name}</span>\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => clearPendingDiff(name)}\n >\n Discard\n </Button>\n <Button\n size=\"sm\"\n onClick={() => {\n saveDocument(name, pendingDiff.modified);\n clearPendingDiff(name, true);\n }}\n >\n Apply Changes\n </Button>\n </div>\n </div>\n <DiffEditor\n height=\"calc(100% - 32px)\"\n original={pendingDiff.original}\n modified={pendingDiff.modified}\n language=\"json\"\n theme={monacoThemeFor(resolvedTheme)}\n options={{\n readOnly: true,\n renderSideBySide: true,\n originalEditable: false,\n automaticLayout: true,\n minimap: { enabled: false },\n }}\n beforeMount={handleEditorWillMount}\n />\n </>\n ) : (\n <Editor\n height=\"100%\"\n defaultLanguage=\"json\"\n theme={monacoThemeFor(resolvedTheme)}\n defaultPath={resolveDocumentDefaultPath(name)}\n value={editorValue}\n beforeMount={handleEditorWillMount}\n onMount={handleEditorDidMount}\n onValidate={handleEditorValidation}\n onChange={(value) => {\n // Ignore our own collapse/expand edits — they don't change the\n // real document and saving the sentinel would lose data.\n if (collapseRef.current?.isApplyingEdits()) return;\n if (value) {\n bumpEditSequence();\n const storage = toStorageValue(value);\n lastSavedRef.current = storage;\n debouncedSaveDocumentRef.current(name, storage);\n debouncedCollapseNewRef.current();\n }\n }}\n options={{\n minimap: { enabled: true },\n scrollBeyondLastLine: true,\n wordWrap: 'on',\n automaticLayout: true,\n formatOnPaste: true,\n formatOnType: true,\n tabSize: 2,\n insertSpaces: true,\n detectIndentation: false,\n folding: true,\n foldingStrategy: 'indentation',\n showFoldingControls: 'always',\n bracketPairColorization: { enabled: true },\n guides: {\n bracketPairs: true,\n indentation: true,\n },\n // Enhanced suggest options for better autocomplete\n suggest: {\n showProperties: true,\n showMethods: true,\n showFunctions: true,\n showConstructors: true,\n showDeprecated: true,\n showFields: true,\n showVariables: true,\n showClasses: true,\n showStructs: true,\n showInterfaces: true,\n showModules: true,\n showTypeParameters: true,\n showValues: true,\n showConstants: true,\n showEnums: true,\n showEnumMembers: true,\n showKeywords: true,\n showWords: false,\n showColors: true,\n showFiles: false,\n showReferences: true,\n showFolders: false,\n showOperators: true,\n showUnits: true,\n showSnippets: true,\n snippetsPreventQuickSuggestions: false,\n insertMode: 'insert', // Changed from 'replace' to 'insert' for better UX\n filterGraceful: true, // Allow fuzzy matching\n localityBonus: true, // Prioritize nearby suggestions\n shareSuggestSelections: true, // Share suggestions across files\n showIcons: true, // Show icons in suggestions\n },\n // Quick suggestions appear faster\n quickSuggestions: {\n strings: true,\n comments: false,\n other: true,\n },\n quickSuggestionsDelay: 10, // Faster suggestions\n suggestSelection: 'first',\n suggestOnTriggerCharacters: true,\n acceptSuggestionOnEnter: 'on',\n acceptSuggestionOnCommitCharacter: true,\n wordBasedSuggestions: 'off', // Disable word-based to rely on schema\n // IntelliSense features\n parameterHints: {\n enabled: true,\n cycle: true,\n },\n hover: {\n enabled: true,\n delay: 300,\n sticky: true,\n },\n // Better completion behavior\n tabCompletion: 'on',\n snippetSuggestions: 'inline',\n inlineSuggest: {\n enabled: true,\n },\n }}\n />\n )}\n\n {/* Validation Status Bar */}\n <div className=\"absolute top-0 right-0\">\n <ValidationStatusBar\n errors={validationErrors}\n onClick={() => {\n setShowValidationPanel(true);\n setIsValidationPanelMinimized(false);\n }}\n />\n </div>\n\n {/* Enhanced Validation Panel */}\n {showValidationPanel && validationErrors.length > 0 && (\n <ValidationPanel\n errors={validationErrors}\n isMinimized={isValidationPanelMinimized}\n onToggleMinimize={() =>\n setIsValidationPanelMinimized(!isValidationPanelMinimized)\n }\n onErrorClick={handleErrorClick}\n onClose={() => setShowValidationPanel(false)}\n className=\"z-40\"\n />\n )}\n </div>\n );\n}\n\nexport const EditorMonacoJsonMemoized = React.memo(\n EditorMonacoJson,\n (prev, next) => {\n return (\n prev.name === next.name &&\n prev.value === next.value &&\n prev.saveDocumentDebounceWait === next.saveDocumentDebounceWait\n );\n }\n);\n"],"names":["getSelectionContext","editor","monaco","model","selection","finalText","getWordAtCursor","fullDocumentText","fullDocument","isValidJson","jsonPath","getJsonPathAtPosition","propertyKey","extractPropertyKey","_monaco","position","word","documentText","lineNumber","column","lines","path","depth","inArray","arrayIndex","i","line","j","char","_a","propertyMatch","_column","prevLine","prevMatch","extractJsonSubtree","obj","parts","current","part","arrayMatch","key","index","createContextSnippet","context","subtree","subtreeStr","THRESHOLD","HEAD_CHARS","TAIL_CHARS","MIN_MIDDLE_CHARS","SENTINEL_PREFIX","SENTINEL_SUFFIX","STYLE_ID","ensureStyles","style","scanLongStrings","text","hits","n","innerStart","c","inner","splitPreserveEscapes","raw","safe","headCut","tailStart","middle","formatSize","chars","positionTouchesRange","pos","range","rangesOverlap","a","b","installLongStringCollapser","editorInstance","tracked","disposables","nextId","applying","makeSentinel","id","reconstruct","out","t","collapsedDecoration","middleLen","expandedDecoration","expandedRanges","ranges","r","collapseHits","k","hit","split","sentinel","startPos","endPos","innerRange","sentinelStart","tokenStart","tokenEnd","tokenRange","decorationId","expand","startOff","middleRange","recollapseOne","currentMiddle","e","handleClipboard","selected","reconstructed","domNode","stale","cursorOffset","skip","start","end","hitRange","modelText","offset","d","ids","ValidationPanel","errors","onErrorClick","onClose","className","isMinimized","onToggleMinimize","isExpanded","setIsExpanded","useState","useEffect","hasErrors","errorCount","toggleExpanded","jsxs","cn","jsx","AlertCircle","CopyErrorsButton","ChevronDown","ChevronUp","X","error","ErrorItem","copied","setCopied","handleCopy","err","Fragment","Check","Copy","onClick","getSeverityIcon","severity","AlertTriangle","formatPath","ValidationStatusBar","resolveDocumentDefaultPath","name","ext","FORMAT","EditorMonacoJson","defaultValue","value","saveDocumentDebounceWait","editorRef","useRef","monacoRef","resolvedTheme","useTheme","saveDocument","useDocumentsStore","state","bumpEditSequence","useOutputStore","setOutput","closeDocument","pendingDiff","clearPendingDiff","validationErrors","setValidationErrors","showValidationPanel","setShowValidationPanel","isValidationPanelMinimized","setIsValidationPanelMinimized","decorationIdsRef","collapseRef","lastSavedRef","editorValue","setEditorValue","registerEditor","unregisterEditor","setActiveEditor","useEditorRefsStore","debouncedSaveDocumentRef","debounce","debouncedCollapseNewRef","controller","handleEditorWillMount","useCallback","registerMonacoThemes","toStorageValue","handleEditorDidMount","snippet","currentValue","handleEditorValidation","markers","marker","_b","_c","debouncedSaveDocument","debouncedCollapseNew","didMountValueEffectRef","handle","handleErrorClick","Button","DiffEditor","monacoThemeFor","Editor","storage","EditorMonacoJsonMemoized","React","prev","next"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as K,j as Q,e as T,g as Y}from"./react-vendor-BmQ2Ko_D.js";import{r as Z}from"./radix-ui-DFNP5I4e.js";import{d as ee}from"./ui-vendor-DpjQWJgX.js";import{c as te}from"./index-DLlW4q4v.js";import{c as re}from"./state-vendor-Cq67_JbF.js";const ne=ee("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 px-3",lg:"h-10 px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),ie=K.forwardRef(({className:u,variant:f,size:r,asChild:o=!1,...a},g)=>{const b=o?Z:"button";return Q.jsx(b,{className:te(ne({variant:f,size:r,className:u})),ref:g,...a})});ie.displayName="Button";var M,F;function oe(){if(F)return M;F=1;var u="Expected a function",f=NaN,r="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,g=/^0b[01]+$/i,b=/^0o[0-7]+$/i,S=parseInt,x=typeof T=="object"&&T&&T.Object===Object&&T,k=typeof self=="object"&&self&&self.Object===Object&&self,W=x||k||Function("return this")(),$=Object.prototype,z=$.toString,V=Math.max,q=Math.min,I=function(){return W.Date.now()};function D(e,n,s){var l,v,E,m,i,d,p=0,w=!1,y=!1,O=!0;if(typeof e!="function")throw new TypeError(u);n=R(n)||0,N(s)&&(w=!!s.leading,y="maxWait"in s,E=y?V(R(s.maxWait)||0,n):E,O="trailing"in s?!!s.trailing:O);function _(t){var c=l,h=v;return l=v=void 0,p=t,m=e.apply(h,c),m}function H(t){return p=t,i=setTimeout(j,n),w?_(t):m}function U(t){var c=t-d,h=t-p,A=n-c;return y?q(A,E-h):A}function B(t){var c=t-d,h=t-p;return d===void 0||c>=n||c<0||y&&h>=E}function j(){var t=I();if(B(t))return C(t);i=setTimeout(j,U(t))}function C(t){return i=void 0,O&&l?_(t):(l=v=void 0,m)}function X(){i!==void 0&&clearTimeout(i),p=0,l=d=v=i=void 0}function J(){return i===void 0?m:C(I())}function L(){var t=I(),c=B(t);if(l=arguments,v=this,d=t,c){if(i===void 0)return H(d);if(y)return i=setTimeout(j,n),_(d)}return i===void 0&&(i=setTimeout(j,n)),m}return L.cancel=X,L.flush=J,L}function N(e){var n=typeof e;return!!e&&(n=="object"||n=="function")}function G(e){return!!e&&typeof e=="object"}function P(e){return typeof e=="symbol"||G(e)&&z.call(e)==r}function R(e){if(typeof e=="number")return e;if(P(e))return f;if(N(e)){var n=typeof e.valueOf=="function"?e.valueOf():e;e=N(n)?n+"":n}if(typeof e!="string")return e===0?e:+e;e=e.replace(o,"");var s=g.test(e);return s||b.test(e)?S(e.slice(2),s?2:8):a.test(e)?f:+e}return M=D,M}var se=oe();const le=Y(se),me=re((u,f)=>({editors:new Map,activeEditorName:null,registerEditor:(r,o,a,g,b)=>{u(S=>{const x=new Map(S.editors);return x.set(r,{editor:o,monaco:a,documentName:r,toStorageValue:g??(k=>k),collapse:b}),{editors:x}})},unregisterEditor:r=>{u(o=>{const a=new Map(o.editors);return a.delete(r),{editors:a,activeEditorName:o.activeEditorName===r?null:o.activeEditorName}})},setActiveEditor:r=>{u({activeEditorName:r})},getActiveEditor:()=>{const r=f();return r.activeEditorName&&r.editors.get(r.activeEditorName)||null},getEditor:r=>f().editors.get(r)||null}));export{ie as B,le as d,me as u};
|
|
2
|
-
//# sourceMappingURL=editor-refs-store-DKOJcTAk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./files/inter-cyrillic-ext-wght-normal.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./files/inter-cyrillic-wght-normal.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./files/inter-greek-ext-wght-normal.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./files/inter-greek-wght-normal.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./files/inter-vietnamese-wght-normal.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./files/inter-latin-ext-wght-normal.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./files/inter-latin-wght-normal.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer theme{:root,:host{--font-sans:"Inter Variable","Inter",system-ui,-apple-system,"Segoe UI",sans-serif;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-4xl:56rem;--container-5xl:64rem;--text-xs:11px;--text-xs--line-height:16px;--text-sm:13px;--text-sm--line-height:18px;--text-base:14px;--text-base--line-height:20px;--text-lg:16px;--text-lg--line-height:24px;--text-2xl:24px;--text-2xl--line-height:30px;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-xl:10px;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:"Inter Variable","Inter",system-ui,-apple-system,"Segoe UI",sans-serif;--default-mono-font-family:ui-monospace,"SFMono-Regular","SF Mono","Menlo","Consolas",monospace;--animate-progress-indeterminate:progress-indeterminate 1.4s ease-in-out infinite}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--background:216 29% 97%;--foreground:225 28% 14%;--card:0 0% 100%;--card-foreground:225 28% 14%;--popover:0 0% 100%;--popover-foreground:225 28% 14%;--secondary:228 33% 98%;--secondary-foreground:225 28% 14%;--muted:228 33% 98%;--muted-foreground:218 30% 47%;--accent:228 33% 98%;--accent-foreground:225 28% 14%;--border:218 23% 91%;--input:218 23% 91%;--primary:229 24.8% 29.2%;--primary-foreground:0 0% 100%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--ring:223 92% 64%;--radius:.375rem;--warning:32 95% 44%;--warning-foreground:0 0% 100%;--warning-bg:48 96% 89%;--warning-bg-foreground:22 78% 26%;--success:142 72% 36%;--success-foreground:0 0% 100%;--success-bg:141 79% 93%;--success-bg-foreground:145 80% 17%;--destructive-bg:0 93% 94%;--destructive-bg-foreground:0 63% 31%;--header-bg:228 33% 98%;--accent2:28 80% 52%;--accent2-foreground:0 0% 100%;--data-blue:223 92% 64%;--data-blue-bg:214 95% 93%;--data-blue-bg-foreground:226 57% 21%;--chart-1:227 25% 15%;--chart-2:223 92% 64%;--chart-3:258 90% 66%;--chart-4:142 72% 36%;--chart-5:218 30% 47%;--sidebar:0 0% 100%;--sidebar-foreground:225 28% 14%;--sidebar-accent:220 20% 94%;--sidebar-accent-foreground:225 28% 14%;--sidebar-border:218 23% 91%;--sidebar-ring:223 92% 64%;--sidebar-primary:223 92% 64%;--sidebar-primary-foreground:0 0% 100%;--switch-off:220 24% 82%;--surface-editor:0 0% 100%;--surface-preview:216 29% 97%;--surface-chat:0 0% 100%}.dark{--background:227 24.7% 15.1%;--foreground:0 0% 98%;--card:228 22% 20%;--card-foreground:0 0% 98%;--popover:228 22% 25%;--popover-foreground:0 0% 98%;--secondary:228 18% 28%;--secondary-foreground:0 0% 98%;--muted:228 18% 28%;--muted-foreground:218 28% 72%;--accent:228 18% 28%;--accent-foreground:0 0% 98%;--border:228 16% 34%;--input:228 16% 34%;--primary:223 92% 75%;--primary-foreground:227 25% 12%;--destructive:0 93.5% 81.8%;--destructive-foreground:227 24.7% 15.1%;--ring:223 92% 72%;--warning:45 96% 74%;--warning-foreground:240 5.9% 10%;--warning-bg:26 55% 18%;--warning-bg-foreground:48 97% 77%;--success:158 64% 52%;--success-foreground:240 5.9% 10%;--success-bg:142 40% 16%;--success-bg-foreground:141 79% 85%;--destructive-bg:0 40% 18%;--destructive-bg-foreground:0 96% 89%;--header-bg:228 18% 28%;--accent2:28 85% 62%;--accent2-foreground:25 60% 12%;--data-blue:223 100% 74%;--data-blue-bg:226 45% 22%;--data-blue-bg-foreground:214 95% 87%;--sidebar:222 30% 9%;--sidebar-foreground:215 20% 82%;--sidebar-accent:229 22% 20%;--sidebar-accent-foreground:0 0% 100%;--sidebar-border:229 18% 22%;--sidebar-ring:223 92% 72%;--sidebar-primary:223 92% 75%;--sidebar-primary-foreground:227 25% 12%;--chart-1:229 51.1% 56.7%;--chart-2:223 92% 64%;--chart-3:258 90% 72%;--chart-4:160 84% 45%;--chart-5:215 20% 72%;--switch-off:228 14% 42%;--surface-editor:228 22% 20%;--surface-preview:227 24.7% 15.1%;--surface-chat:228 22% 20%}*,:after,:before,::backdrop{border-color:hsl(var(--border))}::file-selector-button{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-sans);font-feature-settings:"cv02","cv03","cv04","cv11";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button:not(:disabled):not([aria-disabled=true]),[role=button]:not([aria-disabled=true]),[role=tab]:not([aria-disabled=true]),[role=switch]:not([aria-disabled=true]),[role=checkbox]:not([aria-disabled=true]),[role=radio]:not([aria-disabled=true]),[role=menuitem],[role=menuitemcheckbox],[role=menuitemradio],[role=option],label:has(>button,>input[type=checkbox],>input[type=radio],>input[type=file]){cursor:pointer}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-1\.5{top:calc(var(--spacing)*-1.5)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.-right-1\.5{right:calc(var(--spacing)*-1.5)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-1\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-2\.5{right:calc(var(--spacing)*2.5)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-1\.5{bottom:calc(var(--spacing)*1.5)}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.my-0\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-\[15px\]{margin-left:15px}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-1\.5{width:calc(var(--spacing)*1.5);height:calc(var(--spacing)*1.5)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-\[1\.2rem\]{height:1.2rem}.h-\[1\.15rem\]{height:1.15rem}.h-\[1px\]{height:1px}.h-\[18px\]{height:18px}.h-\[420px\]{height:420px}.h-\[600px\]{height:600px}.h-\[calc\(100\%-2\.5rem\)\]{height:calc(100% - 2.5rem)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[38vh\]{max-height:38vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-9{min-height:calc(var(--spacing)*9)}.min-h-\[36px\]{min-height:36px}.min-h-\[80px\]{min-height:80px}.min-h-\[200px\]{min-height:200px}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-2\/5{width:40%}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-44{width:calc(var(--spacing)*44)}.w-52{width:calc(var(--spacing)*52)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[--sidebar-width\]{width:--sidebar-width}.w-\[1\.2rem\]{width:1.2rem}.w-\[1px\]{width:1px}.w-\[2px\]{width:2px}.w-\[240px\]{width:240px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[--skeleton-width\]{max-width:--skeleton-width}.max-w-\[90\%\]{max-width:90%}.max-w-\[110px\]{max-width:110px}.max-w-\[120px\]{max-width:120px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[280px\]{max-width:280px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-4{min-width:calc(var(--spacing)*4)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[260px\]{min-width:260px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-0{rotate:none}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-progress-indeterminate{animation:var(--animate-progress-indeterminate)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-px{gap:1px}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-0\.5{column-gap:calc(var(--spacing)*.5)}.gap-x-1{column-gap:calc(var(--spacing)*1)}.gap-x-2{column-gap:calc(var(--spacing)*2)}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*4)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border\/50>:not(:last-child)){border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/50>:not(:last-child)){border-color:color-mix(in oklab,hsl(var(--border))50%,transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-md{border-top-left-radius:calc(var(--radius) - 2px);border-top-right-radius:calc(var(--radius) - 2px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-border,.border-border\/40{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/40{border-color:color-mix(in oklab,hsl(var(--border))40%,transparent)}}.border-border\/60{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/60{border-color:color-mix(in oklab,hsl(var(--border))60%,transparent)}}.border-destructive,.border-destructive\/20{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.border-destructive\/20{border-color:color-mix(in oklab,hsl(var(--destructive))20%,transparent)}}.border-destructive\/30{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.border-destructive\/30{border-color:color-mix(in oklab,hsl(var(--destructive))30%,transparent)}}.border-foreground{border-color:hsl(var(--foreground))}.border-input{border-color:hsl(var(--input))}.border-muted-foreground,.border-muted-foreground\/40{border-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.border-muted-foreground\/40{border-color:color-mix(in oklab,hsl(var(--muted-foreground))40%,transparent)}}.border-muted-foreground\/50{border-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.border-muted-foreground\/50{border-color:color-mix(in oklab,hsl(var(--muted-foreground))50%,transparent)}}.border-primary{border-color:hsl(var(--primary))}.border-primary-foreground\/20{border-color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){.border-primary-foreground\/20{border-color:color-mix(in oklab,hsl(var(--primary-foreground))20%,transparent)}}.border-primary\/20{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/20{border-color:color-mix(in oklab,hsl(var(--primary))20%,transparent)}}.border-secondary{border-color:hsl(var(--secondary))}.border-sidebar-border,.border-sidebar-border\/70{border-color:hsl(var(--sidebar-border))}@supports (color:color-mix(in lab,red,red)){.border-sidebar-border\/70{border-color:color-mix(in oklab,hsl(var(--sidebar-border))70%,transparent)}}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-destructive{border-left-color:hsl(var(--destructive))}.border-l-transparent{border-left-color:#0000}.bg-accent{background-color:hsl(var(--accent))}.bg-accent2{background-color:hsl(var(--accent2))}.bg-background,.bg-background\/60{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/60{background-color:color-mix(in oklab,hsl(var(--background))60%,transparent)}}.bg-background\/80{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,hsl(var(--background))80%,transparent)}}.bg-background\/95{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/95{background-color:color-mix(in oklab,hsl(var(--background))95%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-border,.bg-border\/60{background-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.bg-border\/60{background-color:color-mix(in oklab,hsl(var(--border))60%,transparent)}}.bg-card{background-color:hsl(var(--card))}.bg-data-blue{background-color:hsl(var(--data-blue))}.bg-data-blue-bg{background-color:hsl(var(--data-blue-bg))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive-bg{background-color:hsl(var(--destructive-bg))}.bg-destructive\/10{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,hsl(var(--destructive))10%,transparent)}}.bg-header-bg{background-color:hsl(var(--header-bg))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground\/30{background-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/30{background-color:color-mix(in oklab,hsl(var(--muted-foreground))30%,transparent)}}.bg-muted\/10{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/10{background-color:color-mix(in oklab,hsl(var(--muted))10%,transparent)}}.bg-muted\/30{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,hsl(var(--muted))30%,transparent)}}.bg-muted\/40{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,hsl(var(--muted))40%,transparent)}}.bg-muted\/50{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,hsl(var(--muted))50%,transparent)}}.bg-muted\/60{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,hsl(var(--muted))60%,transparent)}}.bg-muted\/80{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/80{background-color:color-mix(in oklab,hsl(var(--muted))80%,transparent)}}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary-foreground\/10{background-color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-primary-foreground\/10{background-color:color-mix(in oklab,hsl(var(--primary-foreground))10%,transparent)}}.bg-primary-foreground\/20{background-color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-primary-foreground\/20{background-color:color-mix(in oklab,hsl(var(--primary-foreground))20%,transparent)}}.bg-primary\/5{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,hsl(var(--primary))5%,transparent)}}.bg-primary\/10{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,hsl(var(--primary))10%,transparent)}}.bg-primary\/70{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/70{background-color:color-mix(in oklab,hsl(var(--primary))70%,transparent)}}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar))}.bg-sidebar-accent,.bg-sidebar-accent\/40{background-color:hsl(var(--sidebar-accent))}@supports (color:color-mix(in lab,red,red)){.bg-sidebar-accent\/40{background-color:color-mix(in oklab,hsl(var(--sidebar-accent))40%,transparent)}}.bg-sidebar-accent\/60{background-color:hsl(var(--sidebar-accent))}@supports (color:color-mix(in lab,red,red)){.bg-sidebar-accent\/60{background-color:color-mix(in oklab,hsl(var(--sidebar-accent))60%,transparent)}}.bg-sidebar-border,.bg-sidebar-border\/70{background-color:hsl(var(--sidebar-border))}@supports (color:color-mix(in lab,red,red)){.bg-sidebar-border\/70{background-color:color-mix(in oklab,hsl(var(--sidebar-border))70%,transparent)}}.bg-success{background-color:hsl(var(--success))}.bg-success-bg{background-color:hsl(var(--success-bg))}.bg-success\/10{background-color:hsl(var(--success))}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,hsl(var(--success))10%,transparent)}}.bg-surface-chat{background-color:hsl(var(--surface-chat))}.bg-surface-editor{background-color:hsl(var(--surface-editor))}.bg-surface-preview{background-color:hsl(var(--surface-preview))}.bg-transparent{background-color:#0000}.bg-warning{background-color:hsl(var(--warning))}.bg-warning-bg{background-color:hsl(var(--warning-bg))}.bg-warning\/10{background-color:hsl(var(--warning))}@supports (color:color-mix(in lab,red,red)){.bg-warning\/10{background-color:color-mix(in oklab,hsl(var(--warning))10%,transparent)}}.bg-warning\/15{background-color:hsl(var(--warning))}@supports (color:color-mix(in lab,red,red)){.bg-warning\/15{background-color:color-mix(in oklab,hsl(var(--warning))15%,transparent)}}.bg-warning\/20{background-color:hsl(var(--warning))}@supports (color:color-mix(in lab,red,red)){.bg-warning\/20{background-color:color-mix(in oklab,hsl(var(--warning))20%,transparent)}}.bg-white{background-color:var(--color-white)}.fill-current{fill:currentColor}.fill-primary{fill:hsl(var(--primary))}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-\[1px\]{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-12{padding-block:calc(var(--spacing)*12)}.py-px{padding-block:1px}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-7{padding-right:calc(var(--spacing)*7)}.pr-8{padding-right:calc(var(--spacing)*8)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-0\.5{padding-bottom:calc(var(--spacing)*.5)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-7{padding-left:calc(var(--spacing)*7)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace}.font-sans{font-family:Inter Variable,Inter,system-ui,-apple-system,Segoe UI,sans-serif}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-accent2{color:hsl(var(--accent2))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-data-blue{color:hsl(var(--data-blue))}.text-data-blue-bg-foreground{color:hsl(var(--data-blue-bg-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-bg-foreground{color:hsl(var(--destructive-bg-foreground))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.text-destructive\/80{color:color-mix(in oklab,hsl(var(--destructive))80%,transparent)}}.text-foreground,.text-foreground\/50{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/50{color:color-mix(in oklab,hsl(var(--foreground))50%,transparent)}}.text-foreground\/80{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,hsl(var(--foreground))80%,transparent)}}.text-muted-foreground,.text-muted-foreground\/60{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,hsl(var(--muted-foreground))60%,transparent)}}.text-muted-foreground\/70{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,hsl(var(--muted-foreground))70%,transparent)}}.text-muted-foreground\/80{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/80{color:color-mix(in oklab,hsl(var(--muted-foreground))80%,transparent)}}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground,.text-primary-foreground\/50{color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){.text-primary-foreground\/50{color:color-mix(in oklab,hsl(var(--primary-foreground))50%,transparent)}}.text-primary-foreground\/60{color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){.text-primary-foreground\/60{color:color-mix(in oklab,hsl(var(--primary-foreground))60%,transparent)}}.text-primary\/60{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.text-primary\/60{color:color-mix(in oklab,hsl(var(--primary))60%,transparent)}}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-accent-foreground,.text-sidebar-accent-foreground\/70{color:hsl(var(--sidebar-accent-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-accent-foreground\/70{color:color-mix(in oklab,hsl(var(--sidebar-accent-foreground))70%,transparent)}}.text-sidebar-foreground,.text-sidebar-foreground\/40{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/40{color:color-mix(in oklab,hsl(var(--sidebar-foreground))40%,transparent)}}.text-sidebar-foreground\/45{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/45{color:color-mix(in oklab,hsl(var(--sidebar-foreground))45%,transparent)}}.text-sidebar-foreground\/50{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/50{color:color-mix(in oklab,hsl(var(--sidebar-foreground))50%,transparent)}}.text-sidebar-foreground\/55{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/55{color:color-mix(in oklab,hsl(var(--sidebar-foreground))55%,transparent)}}.text-sidebar-foreground\/60{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/60{color:color-mix(in oklab,hsl(var(--sidebar-foreground))60%,transparent)}}.text-sidebar-foreground\/65{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/65{color:color-mix(in oklab,hsl(var(--sidebar-foreground))65%,transparent)}}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,hsl(var(--sidebar-foreground))70%,transparent)}}.text-sidebar-foreground\/80{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/80{color:color-mix(in oklab,hsl(var(--sidebar-foreground))80%,transparent)}}.text-sidebar-foreground\/85{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/85{color:color-mix(in oklab,hsl(var(--sidebar-foreground))85%,transparent)}}.text-success{color:hsl(var(--success))}.text-success-bg-foreground{color:hsl(var(--success-bg-foreground))}.text-warning{color:hsl(var(--warning))}.text-warning-bg-foreground{color:hsl(var(--warning-bg-foreground))}.text-warning\/80{color:hsl(var(--warning))}@supports (color:color-mix(in lab,red,red)){.text-warning\/80{color:color-mix(in oklab,hsl(var(--warning))80%,transparent)}}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_-2px_0_hsl\(var\(--ring\)\)\]{--tw-shadow:inset 0 -2px 0 var(--tw-shadow-color,hsl(var(--ring)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[inset_0_2px_0_hsl\(var\(--ring\)\)\]{--tw-shadow:inset 0 2px 0 var(--tw-shadow-color,hsl(var(--ring)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[hsl\(var\(--sidebar\)\)\]{--tw-ring-color:hsl(var(--sidebar))}.ring-primary\/40{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.ring-primary\/40{--tw-ring-color:color-mix(in oklab,hsl(var(--primary))40%,transparent)}}.ring-sidebar-ring{--tw-ring-color:hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opa\]{transition-property:margin,opa;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-\[cubic-bezier\(0\.16\,1\,0\.3\,1\)\]{--tw-ease:cubic-bezier(.16,1,.3,1);transition-timing-function:cubic-bezier(.16,1,.3,1)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-500{animation-duration:.5s}.ease-\[cubic-bezier\(0\.16\,1\,0\.3\,1\)\]{animation-timing-function:cubic-bezier(.16,1,.3,1)}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{animation-timing-function:linear}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.fade-in-0{--tw-enter-opacity:0}.running{animation-play-state:running}.zoom-in-95{--tw-enter-scale:.95}.group-focus-within\/menu-item\:opacity-0:is(:where(.group\/menu-item):focus-within *){opacity:0}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/menu-item\:opacity-0:is(:where(.group\/menu-item):hover *){opacity:0}.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\/msg\:opacity-100:is(:where(.group\/msg):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.group-focus-visible\/row\:opacity-100:is(:where(.group\/row):focus-visible *){opacity:1}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]:is(:where(.group)[data-collapsible=icon] *){width:--sidebar-width-icon}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:hsl(var(--sidebar-border))}.group-data-\[variant\=floating\]\:shadow:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:color-mix(in oklab,hsl(var(--muted))40%,transparent)}}.group-\[\.destructive\]\:text-destructive-foreground\/70:is(:where(.group).destructive *){color:hsl(var(--destructive-foreground))}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:text-destructive-foreground\/70:is(:where(.group).destructive *){color:color-mix(in oklab,hsl(var(--destructive-foreground))70%,transparent)}}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:hsl(var(--sidebar-accent-foreground))}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:hsl(var(--sidebar-accent-foreground))}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:overflow-hidden::placeholder{overflow:hidden}.placeholder\:text-ellipsis::placeholder{text-overflow:ellipsis}.placeholder\:whitespace-nowrap::placeholder{white-space:nowrap}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-sidebar-foreground\/60::placeholder{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-sidebar-foreground\/60::placeholder{color:color-mix(in oklab,hsl(var(--sidebar-foreground))60%,transparent)}}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.focus-within\:opacity-100:focus-within{opacity:1}@media (hover:hover){.hover\:bg-accent:hover,.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,hsl(var(--accent))50%,transparent)}}.hover\:bg-destructive\/15:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/15:hover{background-color:color-mix(in oklab,hsl(var(--destructive))15%,transparent)}}.hover\:bg-destructive\/20:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab,hsl(var(--destructive))20%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,hsl(var(--destructive))90%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/30:hover{background-color:color-mix(in oklab,hsl(var(--muted))30%,transparent)}}.hover\:bg-muted\/40:hover{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/40:hover{background-color:color-mix(in oklab,hsl(var(--muted))40%,transparent)}}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,hsl(var(--muted))50%,transparent)}}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/60:hover{background-color:color-mix(in oklab,hsl(var(--muted))60%,transparent)}}.hover\:bg-primary-foreground\/20:hover{background-color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary-foreground\/20:hover{background-color:color-mix(in oklab,hsl(var(--primary-foreground))20%,transparent)}}.hover\:bg-primary\/10:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,hsl(var(--primary))10%,transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,hsl(var(--primary))90%,transparent)}}.hover\:bg-secondary:hover,.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,hsl(var(--secondary))80%,transparent)}}.hover\:bg-sidebar-accent:hover,.hover\:bg-sidebar-accent\/60:hover{background-color:hsl(var(--sidebar-accent))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sidebar-accent\/60:hover{background-color:color-mix(in oklab,hsl(var(--sidebar-accent))60%,transparent)}}.hover\:bg-warning\/20:hover{background-color:hsl(var(--warning))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/20:hover{background-color:color-mix(in oklab,hsl(var(--warning))20%,transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover,.hover\:text-destructive\/80:hover{color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.hover\:text-destructive\/80:hover{color:color-mix(in oklab,hsl(var(--destructive))80%,transparent)}}.hover\:text-foreground:hover,.hover\:text-foreground\/80:hover{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.hover\:text-foreground\/80:hover{color:color-mix(in oklab,hsl(var(--foreground))80%,transparent)}}.hover\:text-primary-foreground\/80:hover{color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary-foreground\/80:hover{color:color-mix(in oklab,hsl(var(--primary-foreground))80%,transparent)}}.hover\:text-primary\/80:hover{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab,hsl(var(--primary))80%,transparent)}}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:text-sidebar-foreground:hover{color:hsl(var(--sidebar-foreground))}.hover\:text-warning\/80:hover{color:hsl(var(--warning))}@supports (color:color-mix(in lab,red,red)){.hover\:text-warning\/80:hover{color:color-mix(in oklab,hsl(var(--warning))80%,transparent)}}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:is(:where(.group)[data-collapsible=offcanvas] *):hover{background-color:hsl(var(--sidebar))}.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:color-mix(in oklab,hsl(var(--destructive))30%,transparent)}}.group-\[\.destructive\]\:hover\:bg-destructive:is(:where(.group).destructive *):hover{background-color:hsl(var(--destructive))}.group-\[\.destructive\]\:hover\:text-destructive-foreground:is(:where(.group).destructive *):hover{color:hsl(var(--destructive-foreground))}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-destructive:focus{color:hsl(var(--destructive))}.focus\:opacity-100:focus{opacity:1}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary\/40:focus{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.focus\:ring-primary\/40:focus{--tw-ring-color:color-mix(in oklab,hsl(var(--primary))40%,transparent)}}.focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.group-\[\.destructive\]\:focus\:ring-destructive:is(:where(.group).destructive *):focus{--tw-ring-color:hsl(var(--destructive))}.group-\[\.destructive\]\:focus\:ring-destructive-foreground\/40:is(:where(.group).destructive *):focus{--tw-ring-color:hsl(var(--destructive-foreground))}@supports (color:color-mix(in lab,red,red)){.group-\[\.destructive\]\:focus\:ring-destructive-foreground\/40:is(:where(.group).destructive *):focus{--tw-ring-color:color-mix(in oklab,hsl(var(--destructive-foreground))40%,transparent)}}.focus-visible\:h-9:focus-visible{height:calc(var(--spacing)*9)}.focus-visible\:border-primary\/50:focus-visible{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.focus-visible\:border-primary\/50:focus-visible{border-color:color-mix(in oklab,hsl(var(--primary))50%,transparent)}}.focus-visible\:border-sidebar-ring:focus-visible{border-color:hsl(var(--sidebar-ring))}.focus-visible\:bg-sidebar-accent\/60:focus-visible{background-color:hsl(var(--sidebar-accent))}@supports (color:color-mix(in lab,red,red)){.focus-visible\:bg-sidebar-accent\/60:focus-visible{background-color:color-mix(in oklab,hsl(var(--sidebar-accent))60%,transparent)}}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-primary\/30:focus-visible{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-primary\/30:focus-visible{--tw-ring-color:color-mix(in oklab,hsl(var(--primary))30%,transparent)}}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color:hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar))}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-.5rem}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:.5rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-.5rem}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:.5rem}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:hsl(var(--sidebar-accent-foreground))}}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-switch-off[data-state=unchecked]{background-color:hsl(var(--switch-off))}@media (min-width:40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing)*0)}.sm\:bottom-0{bottom:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:max-w-5xl{max-width:var(--container-5xl)}.sm\:max-w-\[425px\]{max-width:425px}.sm\:max-w-\[525px\]{max-width:525px}.sm\:max-w-\[560px\]{max-width:560px}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media (min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:var(--radius-xl)}.md\:peer-data-\[variant\=inset\]\:shadow:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (min-width:48rem){.after\:md\:hidden:after{display:none}}@media (min-width:64rem){.lg\:flex{display:flex}.lg\:hidden{display:none}}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:scale-0:where(.dark,.dark *){--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.dark\:scale-100:where(.dark,.dark *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.dark\:-rotate-90:where(.dark,.dark *){rotate:-90deg}.dark\:rotate-0:where(.dark,.dark *){rotate:none}.\[\&_\[data-radix-scroll-area-viewport\]\>div\]\:\!block [data-radix-scroll-area-viewport]>div{display:block!important}.\[\&_h1\]\:my-2 h1{margin-block:calc(var(--spacing)*2)}.\[\&_h1\]\:text-base h1{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_h2\]\:my-1\.5 h2{margin-block:calc(var(--spacing)*1.5)}.\[\&_h2\]\:text-sm h2{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_h3\]\:my-1 h3{margin-block:calc(var(--spacing)*1)}.\[\&_h3\]\:text-sm h3{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_li\]\:my-0\.5 li{margin-block:calc(var(--spacing)*.5)}.\[\&_ol\]\:my-1 ol,.\[\&_p\]\:my-1 p{margin-block:calc(var(--spacing)*1)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_ul\]\:my-1 ul{margin-block:calc(var(--spacing)*1)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>div\>div\]\:\!h-full>div>div{height:100%!important}.\[\&\>span\]\:flex>span{display:flex}.\[\&\>span\]\:min-w-0>span{min-width:calc(var(--spacing)*0)}.\[\&\>span\]\:items-center>span{align-items:center}.\[\&\>span\]\:gap-1\.5>span{gap:calc(var(--spacing)*1.5)}.\[\&\>span\]\:break-words>span{overflow-wrap:break-word}.\[\&\>span\]\:whitespace-normal>span{white-space:normal}.\[\&\>span\]\:whitespace-nowrap>span{white-space:nowrap}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:top-4>svg{top:calc(var(--spacing)*4)}.\[\&\>svg\]\:left-4>svg{left:calc(var(--spacing)*4)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-data-blue-bg-foreground>svg{color:hsl(var(--data-blue-bg-foreground))}.\[\&\>svg\]\:text-destructive-bg-foreground>svg{color:hsl(var(--destructive-bg-foreground))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\]\:text-success-bg-foreground>svg{color:hsl(var(--success-bg-foreground))}.\[\&\>svg\]\:text-warning-bg-foreground>svg{color:hsl(var(--warning-bg-foreground))}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:calc(var(--spacing)*7)}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-primary-foreground\/20{background-color:hsl(var(--primary-foreground))}@supports (color:color-mix(in lab,red,red)){[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-primary-foreground\/20{background-color:color-mix(in oklab,hsl(var(--primary-foreground))20%,transparent)}}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}}*{scrollbar-width:thin;scrollbar-color:hsl(var(--border))transparent}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--border));border-radius:3px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.4)}.jto-outline-flash{background:hsl(var(--ring)/.16);border-radius:2px}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes progress-indeterminate{0%{transform:translate(-100%)}to{transform:translate(350%)}}
|