@runweave/server-darwin-x64 0.1.3 → 0.1.4
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/manifest.json +156 -156
- package/native.tar.gz +0 -0
- package/package.json +1 -1
- package/payload/app-server/build-info.json +4 -4
- package/payload/app-server/index.cjs +100 -71
- package/payload/app-server/index.cjs.map +1 -1
- package/payload/backend/build-info.json +4 -4
- package/payload/backend/dev-resources/control.cjs +2 -0
- package/payload/backend/evolution-sqlite-worker.cjs +58 -1
- package/payload/backend/index.cjs +2914 -2043
- package/payload/frontend/dist/assets/{_baseUniq-Z8S1OGl1.js → _baseUniq-2DZJ97aQ.js} +1 -1
- package/payload/frontend/dist/assets/{access-BkQls-gl.js → access-Jw5gZrYY.js} +1 -1
- package/payload/frontend/dist/assets/{advanced-Cwuko7dT.js → advanced-DRe-Doxo.js} +1 -1
- package/payload/frontend/dist/assets/{appearance-D1NbgiL9.js → appearance-D1wpkdXT.js} +1 -1
- package/payload/frontend/dist/assets/{arc-yTzSLmPE.js → arc-keTQ5uhA.js} +1 -1
- package/payload/frontend/dist/assets/{architectureDiagram-Q4EWVU46-BvvnA771.js → architectureDiagram-Q4EWVU46-BXbCJ77m.js} +1 -1
- package/payload/frontend/dist/assets/{blockDiagram-DXYQGD6D-4mSkYwEH.js → blockDiagram-DXYQGD6D-De0Ki8tO.js} +1 -1
- package/payload/frontend/dist/assets/{c4Diagram-AHTNJAMY-BFsQYjNJ.js → c4Diagram-AHTNJAMY-EfazoSVi.js} +1 -1
- package/payload/frontend/dist/assets/channel-CExZE0tD.js +1 -0
- package/payload/frontend/dist/assets/{chunk-4BX2VUAB-B4j2kD8S.js → chunk-4BX2VUAB-BXCGPL07.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-4TB4RGXK-BHHtOn_W.js → chunk-4TB4RGXK-ByjQ1_yc.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-55IACEB6-npi1DjnI.js → chunk-55IACEB6-D-KjMbGJ.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-EDXVE4YY-6XoKXtpJ.js → chunk-EDXVE4YY-tAgLMZ4w.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-FMBD7UC4-D5wdm5pu.js → chunk-FMBD7UC4-D3J3ERtV.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-OYMX7WX6-CdQRrw_z.js → chunk-OYMX7WX6-DZHtmvkW.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-QZHKN3VN-j-pcsMU1.js → chunk-QZHKN3VN-D6IIGd1d.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-YZCP3GAM-ISBm3jAD.js → chunk-YZCP3GAM-KD19-lMa.js} +1 -1
- package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-DNOAkizi.js +1 -0
- package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-DNOAkizi.js +1 -0
- package/payload/frontend/dist/assets/clone-CzOxlTa8.js +1 -0
- package/payload/frontend/dist/assets/connection-Cm6G1HOW.js +12 -0
- package/payload/frontend/dist/assets/{connections-BuXymnab.js → connections-B8tSRWt9.js} +1 -1
- package/payload/frontend/dist/assets/{cose-bilkent-S5V4N54A-D3ioXA7D.js → cose-bilkent-S5V4N54A-AYXbL8jP.js} +1 -1
- package/payload/frontend/dist/assets/{dagre-KV5264BT-DjtjEtE5.js → dagre-KV5264BT-DCunJ-sG.js} +1 -1
- package/payload/frontend/dist/assets/{desktop-Du3Gd9LW.js → desktop-DnY652OH.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-5BDNPKRD-CtxPyS9C.js → diagram-5BDNPKRD-Ch2b63ll.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-G4DWMVQ6-ikqU0pq3.js → diagram-G4DWMVQ6-BAuc_Uar.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-MMDJMWI5-CoKNp7eo.js → diagram-MMDJMWI5-DH8qMuDA.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-TYMM5635-7xoHFg4D.js → diagram-TYMM5635-BflD7Kjb.js} +1 -1
- package/payload/frontend/dist/assets/{erDiagram-SMLLAGMA-Da8Jm4bc.js → erDiagram-SMLLAGMA-BGzvzTP9.js} +1 -1
- package/payload/frontend/dist/assets/{flowDiagram-DWJPFMVM-bcIflYKx.js → flowDiagram-DWJPFMVM-BR4mXArp.js} +1 -1
- package/payload/frontend/dist/assets/{ganttDiagram-T4ZO3ILL-CCSwpL4k.js → ganttDiagram-T4ZO3ILL-uXtJoz5O.js} +1 -1
- package/payload/frontend/dist/assets/{gitGraphDiagram-UUTBAWPF-C5YN1uxh.js → gitGraphDiagram-UUTBAWPF-BeLB68OO.js} +1 -1
- package/payload/frontend/dist/assets/{graph-DhVKaWIc.js → graph-DakNuFNs.js} +1 -1
- package/payload/frontend/dist/assets/{image-CAXFSZmt.js → image-BICNaNq8.js} +1 -1
- package/payload/frontend/dist/assets/{index-BPgmi_HT.js → index-Cf9Vl4GJ.js} +92 -89
- package/payload/frontend/dist/assets/{infoDiagram-42DDH7IO-CKUkVeJd.js → infoDiagram-42DDH7IO-CAGn0b04.js} +1 -1
- package/payload/frontend/dist/assets/{ishikawaDiagram-UXIWVN3A-Cu6SCNrB.js → ishikawaDiagram-UXIWVN3A-fbaDUCpd.js} +1 -1
- package/payload/frontend/dist/assets/{journeyDiagram-VCZTEJTY-BJsUgp8J.js → journeyDiagram-VCZTEJTY-ZOmjleqG.js} +1 -1
- package/payload/frontend/dist/assets/{kanban-definition-6JOO6SKY-BGowhqfi.js → kanban-definition-6JOO6SKY-BmODq4tv.js} +1 -1
- package/payload/frontend/dist/assets/{layout-CunOX6M2.js → layout-CLfuo3Vs.js} +1 -1
- package/payload/frontend/dist/assets/{linear-C_0D1AIt.js → linear-csTsZ7Al.js} +1 -1
- package/payload/frontend/dist/assets/main-DtzgJZEf.css +33 -0
- package/payload/frontend/dist/assets/{main-D9JUBZrL.js → main-DwDuhfcr.js} +154 -151
- package/payload/frontend/dist/assets/{min-CYRFaNhC.js → min-B4B7Rr4j.js} +1 -1
- package/payload/frontend/dist/assets/{mindmap-definition-QFDTVHPH-CC29vHKR.js → mindmap-definition-QFDTVHPH-CiV2UasH.js} +1 -1
- package/payload/frontend/dist/assets/{monitoring-CSJEFZ4D.js → monitoring-1_Fnxura.js} +1 -1
- package/payload/frontend/dist/assets/{notifications-B6plZwi5.js → notifications-VJaMbzoX.js} +1 -1
- package/payload/frontend/dist/assets/{pieDiagram-DEJITSTG-ZPTChlGS.js → pieDiagram-DEJITSTG-DwazVxKI.js} +1 -1
- package/payload/frontend/dist/assets/{quadrantDiagram-34T5L4WZ-B4sL0Weo.js → quadrantDiagram-34T5L4WZ-CAn9HHbO.js} +1 -1
- package/payload/frontend/dist/assets/{record-content-DBb8tU0P.js → record-content-Bewq09_f.js} +1 -1
- package/payload/frontend/dist/assets/{requirementDiagram-MS252O5E-Q2PHuGEG.js → requirementDiagram-MS252O5E-CFot9peV.js} +1 -1
- package/payload/frontend/dist/assets/{sankeyDiagram-XADWPNL6-k8w1jlHT.js → sankeyDiagram-XADWPNL6-CdRX6WuA.js} +1 -1
- package/payload/frontend/dist/assets/{sequenceDiagram-FGHM5R23-0qPxopqC.js → sequenceDiagram-FGHM5R23-vRc1a5W1.js} +1 -1
- package/payload/frontend/dist/assets/{stateDiagram-FHFEXIEX-BHxYXi2c.js → stateDiagram-FHFEXIEX-Bxcr7s70.js} +1 -1
- package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-YGvbZNwL.js +1 -0
- package/payload/frontend/dist/assets/{status-Zy2MW6gr.js → status-9tZZeoV7.js} +1 -1
- package/payload/frontend/dist/assets/suiji-DX2ioZ0I.js +1 -0
- package/payload/frontend/dist/assets/{svg-vmNZnz5w.js → svg-qpyWsADE.js} +1 -1
- package/payload/frontend/dist/assets/{tabs-C257BfM6.js → tabs-CwPtRQY0.js} +1 -1
- package/payload/frontend/dist/assets/{timeline-definition-GMOUNBTQ-BC_3Dip2.js → timeline-definition-GMOUNBTQ-2mD2ePS6.js} +1 -1
- package/payload/frontend/dist/assets/{vennDiagram-DHZGUBPP-V_X88VPq.js → vennDiagram-DHZGUBPP-w4DbLykx.js} +1 -1
- package/payload/frontend/dist/assets/{wardley-RL74JXVD-CflQhbCA.js → wardley-RL74JXVD-C3H8SQaZ.js} +1 -1
- package/payload/frontend/dist/assets/{wardleyDiagram-NUSXRM2D-C75i3btX.js → wardleyDiagram-NUSXRM2D-DEI0kC2c.js} +1 -1
- package/payload/frontend/dist/assets/{xychartDiagram-5P7HB3ND-KIYpQyyi.js → xychartDiagram-5P7HB3ND-DDVlpQ28.js} +1 -1
- package/payload/frontend/dist/build-info.json +4 -4
- package/payload/frontend/dist/companion.html +1 -1
- package/payload/frontend/dist/index.html +3 -3
- package/payload/server/index.cjs +2 -0
- package/payload/frontend/dist/assets/channel-DGu_xwRJ.js +0 -1
- package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-Xx1qN_NY.js +0 -1
- package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-Xx1qN_NY.js +0 -1
- package/payload/frontend/dist/assets/clone-DdDT5GkX.js +0 -1
- package/payload/frontend/dist/assets/connection-BL2ZiJKS.js +0 -12
- package/payload/frontend/dist/assets/main-C-ZLrzMh.css +0 -33
- package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-s5VUMcqx.js +0 -1
- package/payload/frontend/dist/assets/suiji-5pox13NE.js +0 -1
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
var We=Object.defineProperty;var Je=(a,t,s)=>t in a?We(a,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[t]=s;var P=(a,t,s)=>Je(a,typeof t!="symbol"?t+"":t,s);import{j as e,r as p,u as z}from"./index-D9-cSGu-.js";import{s as Pe,t as se,B as h,I as G,v as _e,w as Ge,x as Qe,y as Ze,E as Xe,P as Ye,N as et,G as tt,J as st,K as it,h as at,r as rt,O as nt,X as ot,Q as we}from"./main-D9JUBZrL.js";import{S as Ae,r as he,R as Ne,a as Be}from"./record-content-DBb8tU0P.js";/**
|
|
2
|
-
* @license lucide-react v0.484.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const lt=[["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2",key:"1ksdt3"}],["path",{d:"M22 13a18.15 18.15 0 0 1-20 0",key:"12hx5q"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]],ct=Pe("briefcase-business",lt);/**
|
|
7
|
-
* @license lucide-react v0.484.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const dt=[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]],ut=Pe("list-checks",dt),ye={progress:"有进展",discussed:"讨论",documented:"已记录",attempted:"尝试","agent-reported":"Agent 反馈",verified:"已验证"},Fe=()=>new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(new Date),re="/api/suiji/v1/work-facts",W=a=>a instanceof Error?a.message:"操作失败";class ht{constructor(t,s){P(this,"state",{items:[],days:[],cursor:null,from:"",to:"",loading:!1,busy:!1,error:""});P(this,"listeners",new Set);P(this,"generation",0);P(this,"alive",!0);P(this,"writable",!1);P(this,"read");P(this,"writes",Promise.resolve());P(this,"subscribe",t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}));P(this,"snapshot",()=>this.state);this.client=t,this.store=s}set(t){this.alive&&this.client.active&&(this.state={...this.state,...t},this.listeners.forEach(s=>s()))}persist(t,s){const i=structuredClone(s),r=this.writes.catch(()=>{}).then(()=>this.store.set(t,i));return this.writes=r,r}dispose(){var t;this.alive=!1,++this.generation,(t=this.read)==null||t.abort()}async settled(){await this.writes.catch(()=>{})}async initialize(){this.alive=!0;try{const[t,s,i]=await Promise.all([this.store.get("work:dates"),this.store.get("work:reclassify:active"),this.store.get("work:reclassify:undo")]),r=s?await this.store.get("work:reclassify:"+s):void 0;this.set({...t??{},batch:r,undo:i}),await this.load()}catch(t){this.set({error:W(t)})}}async load(t=!1,s=!0){var l;if(t&&(!this.state.cursor||this.state.loading))return;(l=this.read)==null||l.abort(),this.read=new AbortController;const i=++this.generation,{from:r,to:o,cursor:d}=this.state;this.set({loading:!0,error:"",...t?{}:{items:[],days:[],cursor:null}});const c=new URLSearchParams({...r?{from:r}:{},...o?{to:o}:{},...t&&d?{cursor:d}:{}});try{const u=await this.client.request(re+"?"+c,"GET",void 0,void 0,this.read.signal);if(!this.alive||i!==this.generation)return;const m=t?Object.values(Object.fromEntries([...this.state.days,...u.days].map(g=>[g.date,g]))):u.days;this.set({items:t?[...this.state.items,...u.items]:u.items,days:m,cursor:u.nextCursor})}catch(u){if(!this.alive||i!==this.generation)return;if(u instanceof se&&u.detail.error.code==="WORK_FEED_CHANGED"&&s){await this.load(!1,!1);return}this.set({error:W(u)})}finally{i===this.generation&&this.set({loading:!1})}}async dates(t,s){if(t&&s&&t>s){this.set({error:"开始日期不能晚于结束日期"});return}await this.persist("work:dates",{from:t,to:s}),this.set({from:t,to:s}),await this.load()}async detail(t){try{const s=await this.client.request(re+"/"+t);this.set({detail:s.fact})}catch(s){this.set({error:W(s)})}}closeDetail(){this.set({detail:void 0})}async edit(t){try{await this.writes;const s=(t==null?void 0:t.id)??"new",i=s==="new"?"work:new":"work:edit:"+s,r=await this.store.get(i)??{id:s,fields:t?{workDate:t.workDate,title:t.title,statement:t.statement,status:t.status,project:t.project}:{workDate:Fe(),title:"",statement:"",status:"progress",project:null},...t?{base:t}:{}};await this.persist(i,r),this.set({draft:r,error:""})}catch(s){this.set({error:W(s)})}}update(t){const s=this.state.draft;if(!this.writable||!s||s.pending||this.state.busy)return;const i={...s,fields:{...s.fields,...t}};this.set({draft:i}),this.persist(i.id==="new"?"work:new":"work:edit:"+i.id,i).catch(r=>this.set({error:W(r)}))}closeEditor(){this.state.busy||this.set({draft:void 0})}async discardEditor(){const t=this.state.draft;if(!(!t||t.pending||this.state.busy))try{await this.writes,await this.store.remove(t.id==="new"?"work:new":"work:edit:"+t.id),this.set({draft:void 0})}catch(s){this.set({error:W(s)})}}async refreshVersion(){const t=this.state.draft;if(!(!(t!=null&&t.base)||t.pending||this.state.busy))try{const{fact:s}=await this.client.request(re+"/"+t.id),i={...t,base:s};await this.persist("work:edit:"+t.id,i),this.set({draft:i,detail:s,error:"已读取当前版本,下方保留你的草稿;请核对最新事实后再保存。"})}catch(s){this.set({error:W(s)})}}async save(){var i,r;let t=this.state.draft;if(!this.writable||!t||this.state.busy)return;this.set({busy:!0,error:""});const s=t.id==="new"?"work:new":"work:edit:"+t.id;try{if(await this.writes,!t.pending){const c=t.fields;if(!c.title.trim()||!c.statement.trim()||[...c.title.trim()].length>80||[...c.statement].length>4e3||[...((i=c.project)==null?void 0:i.trim())??""].length>80||!/^\d{4}-\d\d-\d\d$/.test(c.workDate))throw new Error("请填写有效工作日期、1–80字标题及1–4000字正文;项目最多80字");const l={...c,title:c.title.trim(),project:((r=c.project)==null?void 0:r.trim())||null},u=t.base?{expectedVersion:t.base.version,...Object.fromEntries(Object.entries(l).filter(([m,g])=>g!==t.base[m]))}:l;if(t.base&&Object.keys(u).length===1){this.set({draft:void 0});return}t={...t,pending:{key:crypto.randomUUID(),method:t.base?"PATCH":"POST",path:re+(t.base?"/"+t.id:""),data:u}},await this.persist(s,t),this.set({draft:t})}const o=t.pending,{fact:d}=await this.client.request(o.path,o.method,o.data,o.key);if(!(d!=null&&d.id)||t.base&&d.id!==t.id||Object.entries(o.data).some(([c,l])=>c!=="expectedVersion"&&d[c]!==l))throw new Error("保存回执不匹配,请手动确认原请求");await this.store.remove(s),this.set({draft:void 0,detail:d}),await this.dates(d.workDate,d.workDate)}catch(o){o instanceof se&&!o.uncertain&&t.pending&&(t={...t,pending:void 0},await this.persist(s,t),this.set({draft:t})),this.set({error:W(o)})}finally{this.set({busy:!1})}}async beginBatch(t,s=!1){if(!(this.state.batch||this.state.busy))try{const i={id:crypto.randomUUID(),rows:t,project:"",...s?{undo:s}:{}};await this.persist("work:reclassify:"+i.id,i),await this.persist("work:reclassify:active",i.id),this.set({batch:i,error:""})}catch(i){this.set({error:W(i)})}}updateBatch(t,s){const i=this.state.batch;if(!i||i.pending||this.state.busy)return;const r={...i,rows:t,project:s};this.set({batch:r}),this.persist("work:reclassify:"+i.id,r).catch(o=>this.set({error:W(o)}))}async refreshBatch(){const t=this.state.batch;if(!(!this.writable||!t||t.undo||t.pending||this.state.busy))try{const s=await Promise.all(t.rows.map(async r=>(await this.client.request(re+"/"+r.id)).fact)),i={...t,rows:s};await this.persist("work:reclassify:"+t.id,i),this.set({batch:i,error:"已读取所选事实的最新版本,请核对后再确认归类。"})}catch(s){this.set({error:W(s)})}}async cancelBatch(){const t=this.state.batch;if(!(!t||t.pending||this.state.busy))try{await this.writes,await this.store.remove("work:reclassify:"+t.id),await this.store.remove("work:reclassify:active"),this.set({batch:void 0})}catch(s){this.set({error:W(s)})}}async undo(){this.state.undo&&!this.state.batch&&await this.beginBatch([],!0)}async commitBatch(){let t=this.state.batch;if(!this.writable||!t||this.state.busy)return;this.set({busy:!0,error:""});const s="work:reclassify:"+t.id;try{if(await this.writes,!t.pending){if(!t.undo&&(t.rows.length<1||t.rows.length>100))throw new Error("请选择1–100条已加载记录");const l=t.undo?this.state.undo:{items:t.rows.map(u=>({id:u.id,expectedVersion:u.version})),project:t.project.trim()||null};if(!l)throw new Error("没有可撤销的项目调整");t={...t,pending:{path:re+(t.undo?"/reclassify/undo":"/reclassify"),method:"POST",data:l,key:crypto.randomUUID()}},await this.persist(s,t),this.set({batch:t})}const i=t.pending,{facts:r}=await this.client.request(i.path,i.method,i.data,i.key),o=i.data;if(!Array.isArray(r)||r.length!==o.items.length||o.items.some(l=>!r.some(u=>u.id===l.id&&u.version===l.expectedVersion+1&&u.project===("project"in l?l.project:o.project))))throw new Error("归类回执不匹配,请手动确认原请求");const d=t.undo?void 0:{items:r.map(l=>({id:l.id,expectedVersion:l.version,project:t.rows.find(u=>u.id===l.id).project}))};d?await this.persist("work:reclassify:undo",d):await this.store.remove("work:reclassify:undo"),await this.store.remove(s),await this.store.remove("work:reclassify:active");const c=r.find(l=>{var u;return l.id===((u=this.state.detail)==null?void 0:u.id)})??this.state.detail;this.set({batch:void 0,undo:d,detail:c}),await this.load()}catch(i){i instanceof se&&!i.uncertain&&t.pending&&(t={...t,pending:void 0},await this.persist(s,t),this.set({batch:t})),this.set({error:W(i)})}finally{this.set({busy:!1})}}}function ft({model:a,writable:t}){const{draft:s,busy:i,error:r,detail:o}=a.state;if(!s)return null;const d=!t||i||!!s.pending,c=(l,u)=>a.update({[l]:u});return e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col","aria-label":"工作事实编辑",children:[e.jsxs("header",{className:"flex items-center justify-between border-b p-4",children:[e.jsx(h,{variant:"ghost",disabled:i,onClick:()=>a.closeEditor(),children:"返回"}),e.jsx("h2",{children:s.base?"编辑事实":"补记事实"}),e.jsx(h,{disabled:i||!t,onClick:()=>void a.save(),children:i?"保存中…":s.pending?"手动确认原请求":"保存"})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-5 overflow-y-auto p-5",children:[r?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:r}):null,s.pending?e.jsx("p",{role:"status",className:"text-sm",children:"保存结果待确认。原请求已保存在本机,返回或重启不会自动发送。"}):null,e.jsxs("label",{className:"space-y-2 text-sm",children:["工作日期",e.jsx(G,{type:"date","aria-label":"工作日期",disabled:d,value:s.fields.workDate,onChange:l=>c("workDate",l.target.value)})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["标题",e.jsx(G,{"aria-label":"事实标题",disabled:d,value:s.fields.title,onChange:l=>c("title",l.target.value)})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["事实正文",e.jsx("textarea",{"aria-label":"事实正文",disabled:d,className:"min-h-48 w-full rounded-xl border bg-background p-3",value:s.fields.statement,onChange:l=>c("statement",l.target.value)})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["实际状态",e.jsx("select",{"aria-label":"事实状态",disabled:d,className:"w-full rounded-xl border bg-background p-3",value:s.fields.status,onChange:l=>a.update({status:l.target.value}),children:Object.entries(ye).map(([l,u])=>e.jsx("option",{value:l,children:u},l))})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["项目(可选)",e.jsx(G,{"aria-label":"事实项目",placeholder:"未归类",disabled:d,value:s.fields.project??"",onChange:l=>a.update({project:l.target.value||null})})]}),s.base&&!s.pending?e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"outline",disabled:i,onClick:()=>void a.refreshVersion(),children:"读取最新版本并保留草稿"}),(o==null?void 0:o.id)===s.id?e.jsxs("div",{className:"whitespace-pre-wrap rounded-xl bg-secondary p-3 text-sm",children:[e.jsxs("p",{children:["服务当前 v",o.version," · ",o.workDate," ·"," ",o.project??"未归类"]}),e.jsx("strong",{children:o.title}),e.jsx("p",{children:o.statement})]}):null]}):null,e.jsx(h,{variant:"ghost",disabled:d,onClick:()=>void a.discardEditor(),children:"丢弃未保存草稿"})]})]})}function pt({model:a,writable:t}){const{batch:s,items:i,busy:r,error:o,undo:d}=a.state;if(!s)return null;const c=!t||r||!!s.pending,l=new Set(s.rows.map(m=>m.id)),u=[...s.rows,...i.filter(m=>!l.has(m.id))];return e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col","aria-label":"重新归类",children:[e.jsxs("header",{className:"flex items-center justify-between border-b p-4",children:[e.jsx("h2",{children:s.undo?"撤销本次归类":"重新归类"}),e.jsx(h,{variant:"ghost",disabled:c,onClick:()=>void a.cancelBatch(),children:"取消"})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-5",children:[o?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:o}):null,s.pending?e.jsx("p",{children:"操作结果待确认,原请求已保存在本机;不会自动重发。"}):null,s.undo?e.jsxs("p",{children:["按原成功回执的版本还原 ",(d==null?void 0:d.items.length)??0," ","条记录的项目;任何一条版本变化将整批停止。"]}):e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"ghost",disabled:c,onClick:()=>void a.refreshBatch(),children:"读取所选事实最新版本"}),e.jsxs("p",{className:"text-sm",children:["已选 ",s.rows.length," 条。仅修改项目,正文、日期和状态保持。"]}),e.jsx(h,{variant:"outline",disabled:c||i.length>100,onClick:()=>a.updateBatch([...new Map([...s.rows,...i].map(m=>[m.id,m])).values()],s.project),children:"全选已加载记录"}),a.state.cursor?e.jsx("p",{className:"text-sm text-muted-foreground",children:"还有未加载记录;返回列表加载后再选择。"}):null,e.jsxs("label",{className:"text-sm",children:["目标项目(留空为未归类)",e.jsx(G,{"aria-label":"目标项目",list:"work-projects",disabled:c,value:s.project,onChange:m=>a.updateBatch(s.rows,m.target.value)})]}),e.jsx("datalist",{id:"work-projects",children:[...new Set(i.map(m=>m.project).filter(m=>!!m))].map(m=>e.jsx("option",{value:m},m))}),e.jsx("div",{className:"flex flex-col gap-3",children:u.map(m=>e.jsxs("label",{className:"flex items-start gap-3 rounded-xl border p-3 text-sm",children:[e.jsx("input",{type:"checkbox","aria-label":`选择 ${m.title}`,disabled:c||!l.has(m.id)&&s.rows.length>=100,checked:l.has(m.id),onChange:g=>a.updateBatch(g.target.checked?[...s.rows,m]:s.rows.filter(n=>n.id!==m.id),s.project)}),e.jsxs("span",{children:[e.jsx("strong",{children:m.title}),e.jsx("br",{}),m.workDate," · ",m.project??"未归类",e.jsx("br",{}),e.jsx("small",{children:m.id})]})]},m.id))})]})]}),e.jsx("div",{className:"shrink-0 border-t bg-background p-4",children:e.jsx(h,{className:"h-auto min-h-10 w-full whitespace-normal break-words",disabled:!t||r||!s.undo&&!s.rows.length,onClick:()=>void a.commitBatch(),children:r?"保存中…":s.pending?"手动确认原请求":s.undo?"确认撤销项目调整":`确认 ${s.rows.length} 条 → ${s.project.trim()||"未归类"}`})})]})}function xt({model:a,active:t,writable:s,onReview:i}){const r=p.useSyncExternalStore(a.subscribe,a.snapshot),[o,d]=p.useState(!1),[c,l]=p.useState(""),[u,m]=p.useState(""),[g,n]=p.useState(!1);p.useEffect(()=>{a.writable=s},[a,s]),p.useEffect(()=>{t&&a.load()},[t,a]);const{detail:x,draft:k,batch:S}=r,v=j=>{const N=Math.round((Date.parse(Fe()+"T00:00:00Z")-Date.parse(j+"T00:00:00Z"))/864e5);return`${N===0?"今天 · ":N===1?"昨天 · ":N===2?"前天 · ":""}${j}`},b=()=>{const j=r.from&&r.to?Math.floor((Date.parse(r.to)-Date.parse(r.from))/864e5)+1:0;return j>0&&r.days.length===j&&r.days.every(N=>N.coverage==="complete"&&N.count===0)?"已导入范围内没有记录":r.days.some(N=>N.coverage==="partial")?"记录尚未完整导入":"这个日期范围尚未导入工作记录"};return e.jsxs("div",{className:"relative flex min-h-0 flex-1 flex-col",children:[e.jsxs("div",{className:k||S||x?"hidden":"flex min-h-0 flex-1 flex-col",children:[e.jsxs("header",{className:"flex shrink-0 items-center justify-between px-5 py-3",children:[e.jsx("h1",{className:"text-lg font-semibold",children:"工作"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(h,{variant:"ghost",size:"sm",onClick:()=>{l(r.from),m(r.to),d(j=>!j)},children:"日期"}),e.jsx(h,{variant:"ghost",size:"sm","aria-label":"工作更多",onClick:()=>n(j=>!j),children:"更多"})]})]}),g?e.jsxs("div",{className:"flex flex-wrap gap-2 border-y px-5 py-2",children:[e.jsx(h,{variant:"ghost",size:"sm",disabled:r.loading,onClick:()=>{n(!1),a.load()},children:"刷新工作"}),e.jsx(h,{variant:"ghost",size:"sm",onClick:()=>{n(!1),i()},children:"AI 回顾"}),e.jsx(h,{variant:"ghost",size:"sm",disabled:!s,onClick:()=>{n(!1),a.beginBatch([])},children:"重新归类"}),r.undo?e.jsx(h,{variant:"ghost",size:"sm",disabled:!s,onClick:()=>{n(!1),a.undo()},children:"撤销上次归类"}):null]}):null,o?e.jsxs("form",{className:"flex flex-col gap-3 border-y p-5",onSubmit:j=>{j.preventDefault(),(!c||!u||c<=u)&&(d(!1),a.dates(c,u))},children:[e.jsxs("label",{className:"text-sm",children:["开始日期",e.jsx(G,{type:"date","aria-label":"开始日期",value:c,onChange:j=>l(j.target.value)})]}),e.jsxs("label",{className:"text-sm",children:["结束日期",e.jsx(G,{type:"date","aria-label":"结束日期",value:u,onChange:j=>m(j.target.value)})]}),c&&u&&c>u?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:"开始日期不能晚于结束日期"}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{type:"submit",disabled:!!(c&&u&&c>u),children:"应用日期"}),e.jsx(h,{type:"button",variant:"outline",onClick:()=>{d(!1),a.dates("","")},children:"清空日期"}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>d(!1),children:"取消"})]})]}):null,r.from||r.to?e.jsxs("p",{className:"px-5 pb-2 text-sm text-muted-foreground",children:[r.from||"最早"," 至 ",r.to||"最近"]}):null,e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto px-5 pb-24","aria-label":"工作事实列表",children:[r.error?e.jsx("p",{role:"alert",className:"py-3 text-sm text-destructive",children:r.error}):null,[...new Set(r.items.map(j=>j.workDate))].map(j=>{var N;return e.jsxs("section",{className:"pb-5",children:[e.jsxs("h2",{className:"mb-3 text-sm font-medium text-muted-foreground",children:[v(j)," ",e.jsxs("span",{children:["· ",((N=r.days.find(C=>C.date===j))==null?void 0:N.count)??"…"," 条"]})]}),e.jsx("div",{className:"flex flex-col gap-3",children:r.items.filter(C=>C.workDate===j).map(C=>e.jsxs("button",{type:"button",onClick:()=>void a.detail(C.id),className:"rounded-2xl border bg-card p-4 text-left",children:[e.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[C.project??"未归类"," · ",ye[C.status]]}),e.jsx("h3",{className:"mb-2 font-semibold",children:C.title}),e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-7",children:C.statement})]},C.id))})]},j)}),!r.loading&&!r.items.length?e.jsx("p",{className:"py-16 text-center text-muted-foreground",children:b()}):null,r.loading?e.jsx("p",{role:"status",className:"py-8 text-center",children:"正在读取工作事实…"}):null,r.cursor?e.jsx(h,{variant:"outline",className:"w-full",disabled:r.loading,onClick:()=>void a.load(!0),children:"加载更多工作记录"}):null]}),e.jsx(h,{"aria-label":"补记工作事实",className:"absolute bottom-5 right-5 size-12 rounded-full text-2xl shadow-lg",disabled:!s,onClick:()=>void a.edit(),children:"+"})]}),x&&!k&&!S?e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col","aria-label":"工作事实详情",children:[e.jsxs("header",{className:"flex items-center justify-between border-b p-4",children:[e.jsx(h,{variant:"ghost",onClick:()=>a.closeDetail(),children:"返回工作"}),e.jsx(h,{variant:"ghost",disabled:!s,onClick:()=>void a.edit(x),children:"编辑事实"})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-5",children:[e.jsxs("p",{className:"mb-3 text-sm text-muted-foreground",children:[x.workDate," · ",x.project??"未归类"," ·"," ",ye[x.status]]}),e.jsx("h2",{className:"mb-4 text-xl font-semibold",children:x.title}),e.jsx("p",{className:"mb-6 whitespace-pre-wrap break-words leading-8",children:x.statement}),e.jsx(h,{variant:"outline",disabled:!s,onClick:()=>void a.beginBatch([x]),children:"重新归类这条"})]})]}):null,k?e.jsx(ft,{model:a,writable:s}):S?e.jsx(pt,{model:a,writable:s}):null]})}const de={bodyScalars:2e4,attachmentBytes:5*1024*1024,imagesPerRecord:1,markdownPerRecord:1,defaultPageSize:20,maxPageSize:100,tagsPerRecord:2,tagScalars:20};function Me(a){if(a.length>de.tagsPerRecord)throw new Error("最多 2 个标签");const t=a.map(s=>s.trim());if(t.some(s=>!s||[...s].length>de.tagScalars||/[\u0000-\u001f\u007f\uD800-\uDFFF]/u.test(s)))throw new Error("标签须为 1–20 个字符,不能包含控制字符或无效 Unicode");if(new Set(t).size!==t.length)throw new Error("标签不能重复");return t}function mt(a,t){var s,i;return(((s=a==null?void 0:a.latest)==null?void 0:s.sequence)??0)>(((i=t==null?void 0:t.latest)==null?void 0:i.sequence)??0)?a:t??a}function gt(a){return`使用随记 Skill 处理这条记录。先读取最新原文、全部跟进和相关附件,按我本次要求执行;成功后只追加最终成果,不记录过程或失败。未经我确认,不标记完成。
|
|
12
|
-
`+JSON.stringify({format:"suiji-handoff-v1",...a},null,2)}class Ue{constructor(t,s,i,r,o=!1){P(this,"listeners",new Set);P(this,"queue",Promise.resolve());P(this,"writes",0);P(this,"active",!0);P(this,"state");P(this,"correctionAbort");P(this,"correctionKey");P(this,"subscribe",t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}));P(this,"snapshot",()=>this.state);this.client=s,this.store=i,this.followupRecordId=r,this.historySupported=o,this.state={draft:t,busy:!1,localSaving:!1,message:t.frozen?"保存结果待确认,请手动重试;输入暂时锁定":"",localError:!1,conflict:!1}}get storeKey(){return this.followupRecordId?"followup:"+this.followupRecordId:"draft:"+this.state.draft.id}dispose(){var t;this.active=!1,(t=this.correctionAbort)==null||t.abort(),this.listeners.clear()}settled(){return this.queue}initialize(){return this.loadFeedbackState(),this.persist()}async discard(){if(!(this.state.busy||this.state.draft.frozen)){this.patch({busy:!0});try{await this.queue,this.check(),await this.store.remove(this.storeKey),this.patch({discarded:!0})}catch(t){this.patch({message:t instanceof Error?t.message:"放弃草稿失败"})}finally{this.patch({busy:!1})}}}check(){if(!this.active||!this.client.active)throw new DOMException("编辑会话已结束","AbortError")}patch(t){this.state={...this.state,...t},this.listeners.forEach(s=>s())}persist(t=this.state.draft){const s=structuredClone(t);++this.writes,this.patch({localSaving:!0});const i=this.queue.then(()=>this.store.set(this.storeKey,s));return this.queue=i.catch(()=>{}),i.then(()=>this.patch({localError:!1})).catch(r=>{throw this.patch({message:r instanceof Error?r.message:"本机草稿未保存",localError:!0}),r}).finally(()=>{--this.writes,this.patch({localSaving:this.writes>0})})}edit(t){if(this.state.busy||this.state.draft.frozen)return;const s={...this.state.draft,...t};this.patch({draft:s,...t.body!==void 0&&t.body!==this.state.draft.body?{correction:void 0,correctionSource:void 0}:{}}),this.persist(s).catch(()=>{})}async loadLexicon(){try{const t=await this.store.get("lexicon-intent");this.check(),this.patch({lexiconPending:!!t});const s=await this.client.request("/api/suiji/v1/correction-lexicon");this.check(),this.patch({lexicon:s})}catch(t){this.active&&this.patch({correctionMessage:t instanceof Error?t.message:"词库读取失败"})}}async correct(){const t=this.state.draft.body;if(this.state.busy||this.state.draft.frozen||!t.trim()||this.state.correctionBusy)return;if(this.correctionKey&&this.state.correctionSource!==t){this.patch({correctionMessage:"原请求结果待确认;请先取消,再对新正文发起纠错"});return}const s=new AbortController;this.correctionAbort=s;const i=this.correctionKey??crypto.randomUUID();this.correctionKey=i,this.patch({correctionBusy:!0,correction:void 0,correctionSource:t,correctionMessage:"正在纠正文字…"});try{let r=await this.client.request("/api/suiji/v1/corrections","POST",{text:t,...this.historySupported&&!this.followupRecordId?{feedbackCapable:!0,...this.state.draft.id!=="new"?{recordId:this.state.draft.id}:{}}:{}},i,s.signal);for(this.check(),this.patch({correction:r});r.status==="running"&&!s.signal.aborted;)await new Promise(o=>setTimeout(o,1e3)),this.check(),r=await this.client.request("/api/suiji/v1/corrections/"+r.id,"GET",void 0,void 0,s.signal),this.patch({correction:r});if(this.check(),s.signal.aborted)return;this.correctionKey=void 0,this.patch({correction:r,correctionMessage:r.status==="completed"?"":r.error??"纠错未完成"})}catch(r){this.active&&!s.signal.aborted&&this.patch({correctionMessage:"纠错结果待确认;再次点击会沿用同一请求。"+(r instanceof Error?r.message:"")})}finally{this.correctionAbort===s&&(this.correctionAbort=void 0,this.patch({correctionBusy:!1}))}}async cancelCorrection(){var s,i;const t=(s=this.state.correction)==null?void 0:s.id;(i=this.correctionAbort)==null||i.abort(),t&&await this.client.request("/api/suiji/v1/corrections/"+t,"DELETE").catch(()=>{}),this.correctionKey=void 0,this.patch({correction:void 0,correctionSource:void 0,correctionBusy:!1,correctionMessage:""})}applyCorrection(){const{correction:t,correctionSource:s,draft:i}=this.state;if(!t||t.status!=="completed"||!t.correctedText||s!==i.body||i.frozen||this.state.busy||!this.active||!this.client.active){this.patch({correctionMessage:"正文或编辑会话已变化,请重新纠错"});return}const r={...i,body:t.correctedText,correctionTrace:t.historyId&&this.state.correctionSource?{correctionId:t.id,inputText:this.state.correctionSource,correctedText:t.correctedText,applied:!0}:void 0};this.patch({draft:r,correction:void 0,correctionSource:void 0}),this.persist(r).catch(()=>{}),this.patch({correctionMessage:"已应用到本机草稿;点击保存才会更新记录"})}async putLexicon(t){this.check();const s=this.state.lexicon;if(!s)throw new Error("请先读取词库");const r=await this.store.get("lexicon-intent")??{key:crypto.randomUUID(),data:{expectedVersion:s.version,entries:t}};await this.store.set("lexicon-intent",r),this.patch({lexiconPending:!0});try{const o=await this.client.request("/api/suiji/v1/correction-lexicon","PUT",r.data,r.key);this.check(),await this.store.remove("lexicon-intent"),this.patch({lexicon:o,lexiconPending:!1,correctionMessage:"已记住;可在词库中撤销"})}catch(o){throw o instanceof se&&!o.uncertain&&(await this.store.remove("lexicon-intent"),this.patch({lexiconPending:!1})),this.patch({correctionMessage:o instanceof Error?o.message:"词库结果待确认,请手动重试"}),o}}async addFile(t){try{if(this.check(),t.size>de.attachmentBytes)throw new Error("每个附件最多 5 MiB");const s=["image/jpeg","image/png"].includes(t.type);if(!s&&!/\.md$/i.test(t.name))throw new Error("仅支持 JPEG、PNG 和 Markdown");s||new TextDecoder("utf-8",{fatal:!0}).decode(await t.arrayBuffer()),this.check();const i=this.state.draft,r=s?"image":"markdown";if(i.existing.some(o=>o.kind===r)||i.files.some(o=>(o.file.type.startsWith("image/")?"image":"markdown")===r))throw new Error("每条最多一张图片和一个 Markdown,请先移除原附件");s||(t=new File([t],t.name,{type:"text/markdown",lastModified:t.lastModified})),this.edit({files:[...i.files,{id:crypto.randomUUID(),file:t,key:crypto.randomUUID()}]})}catch(s){this.patch({message:s instanceof Error?s.message:"附件读取失败"})}}async save(){var t,s;if(!(this.state.busy||this.state.saved||this.state.savedFollowup)){this.patch({busy:!0,message:""});try{this.check();let i=this.state.draft;if(!this.followupRecordId&&!i.pending&&i.tags!==void 0&&(i={...i,tags:Me(i.tags)},this.patch({draft:i})),[...i.body].length>de.bodyScalars)throw new Error("正文最多 20,000 个字符");if(!i.body.trim()&&!i.existing.length&&!i.files.length)throw new Error("请输入正文或添加附件");if(await this.persist(i),this.check(),!i.pending){i={...i,frozen:!0},this.patch({draft:i}),await this.persist(i);for(const[d,c]of i.files.entries()){if(c.uploaded)continue;this.check();const l=new FormData;l.append("file",c.file,c.file.name);const u=await this.client.request("/api/suiji/v1/uploads","POST",l,c.key);this.check(),i={...i,files:i.files.map((m,g)=>g===d?{...m,uploaded:u.attachment}:m)},this.patch({draft:i}),await this.persist(i)}i={...i,pending:{path:this.followupRecordId?`/api/suiji/v1/records/${this.followupRecordId}/followups`:"/api/suiji/v1/records"+(i.id==="new"?"":"/"+i.id),method:this.followupRecordId||i.id==="new"?"POST":"PATCH",key:crypto.randomUUID(),data:{...this.followupRecordId?{}:{kind:i.kind,...i.id==="new"?{}:{expectedVersion:i.version}},body:i.body,...this.followupRecordId||i.tags===void 0?{}:{tags:i.tags},attachmentIds:[...i.existing.map(d=>d.id),...i.files.map(d=>d.uploaded.id)]}}},this.patch({draft:i}),await this.persist(i)}this.check();const r=i.pending,o=await this.client.request(r.path,r.method,r.data,r.key);if(this.check(),this.followupRecordId&&(!("followup"in o)||o.followup.recordId!==this.followupRecordId||o.followup.body!==i.body||JSON.stringify(o.followup.attachments.map(d=>d.id))!==JSON.stringify(i.files.map(d=>d.uploaded.id))||((t=o.followupSummary.latest)==null?void 0:t.sequence)!==o.followup.sequence))throw new Error("跟进响应与保存内容不一致,请手动重试确认");if("record"in o&&(o.record.body!==i.body||i.id!=="new"&&o.record.id!==i.id))throw new Error("记录响应与保存正文不一致,请手动重试确认");"record"in o&&((s=i.correctionTrace)!=null&&s.applied)&&(i.version===void 0||o.record.version>i.version)&&await this.enqueueFeedback({correctionId:i.correctionTrace.correctionId,key:crypto.randomUUID(),recordId:o.record.id,recordVersion:o.record.version,saveKey:r.key}).catch(()=>{}),await this.store.remove(this.storeKey),"record"in o&&this.retryFeedback(),"followup"in o?this.patch({savedFollowup:o}):this.patch({saved:o.record})}catch(i){if(!this.active)return;if(i instanceof se&&!i.uncertain){const r=i.detail.error.code==="VERSION_CONFLICT",o={...this.state.draft,frozen:!1,pending:void 0};this.patch({draft:o,conflict:r,message:i.message}),await this.persist(o).catch(()=>{})}else this.patch({message:(this.state.draft.frozen?"保存结果待确认,手动重试会沿用同一次请求。":"")+(i instanceof Error?i.message:"保存失败")})}finally{this.patch({busy:!1})}}}async loadPreferences(){if(this.historySupported)try{const t=await this.client.request("/api/suiji/v1/correction-preferences");this.check(),this.patch({preferences:t})}catch(t){this.patch({correctionMessage:t instanceof Error?t.message:"读取历史设置失败"})}}async setHistoryEnabled(t){const s=this.state.preferences;if(s)try{const i=await this.client.request("/api/suiji/v1/correction-preferences","PUT",{expectedVersion:s.version,historyEnabled:t},crypto.randomUUID());this.check(),this.patch({preferences:i})}catch(i){this.patch({correctionMessage:i instanceof Error?i.message:"设置失败"})}}async loadHistory(t){if(this.historySupported)try{const s=await this.client.request("/api/suiji/v1/correction-history"+(t?"?cursor="+encodeURIComponent(t):""));this.check(),this.patch({history:t&&this.state.history?{items:[...this.state.history.items,...s.items],nextCursor:s.nextCursor}:s})}catch(s){this.patch({correctionMessage:s instanceof Error?s.message:"历史读取失败"})}}async deleteHistory(t){try{await this.client.request("/api/suiji/v1/correction-history"+(t?"/"+t:""),"DELETE",void 0,crypto.randomUUID()),this.check(),await this.loadHistory(),await this.loadPreferences()}catch(s){this.patch({correctionMessage:s instanceof Error?s.message:"删除失败"})}}async loadFeedbackState(){const t=await this.store.get("feedback-intents").catch(()=>{});this.active&&this.patch({feedbackPending:!!(t!=null&&t.length)})}async enqueueFeedback(t){const s=await this.store.get("feedback-intents")??[];await this.store.set("feedback-intents",[...s,t]),this.patch({feedbackPending:!0})}async retryFeedback(){const t=await this.store.get("feedback-intents").catch(()=>{});if(!(t!=null&&t.length))return;const s=[];for(const i of t)try{await this.client.request("/api/suiji/v1/corrections/"+i.correctionId+"/feedback","POST",{recordId:i.recordId,recordVersion:i.recordVersion,saveKey:i.saveKey},i.key)}catch(r){(!(r instanceof se)||r.uncertain)&&s.push(i)}s.length?await this.store.set("feedback-intents",s):await this.store.remove("feedback-intents"),this.patch({feedbackPending:!!s.length})}async loadLatest(){if(!(this.state.busy||this.state.draft.id==="new"))try{const{record:t}=await this.client.request("/api/suiji/v1/records/"+this.state.draft.id);this.check(),this.patch({latest:t})}catch(t){this.patch({message:t instanceof Error?t.message:"读取最新版本失败"})}}acceptLatestVersion(){const t=this.state.latest;if(!t||this.state.busy||this.state.draft.frozen)return;const s={...this.state.draft,version:t.version,existing:t.attachments,files:[]};if(this.state.draft.files.length){this.patch({message:"本机还有新增附件,请先保存其文件并移除,再采用最新附件版本"});return}this.patch({draft:s,latest:void 0,conflict:!1,message:"已采用最新版本号与附件,本机正文、类型和标签选择保留;请比较后手动保存"}),this.persist(s).catch(()=>{})}}function vt({client:a,store:t,writable:s,alive:i,models:r,setEditor:o,setItems:d,setDetail:c,setMessage:l}){const u=z(g=>{if(!i.current||!a.active)return;const n=x=>({...x.version>g.version?x:g,followupSummary:mt(x.followupSummary,g.followupSummary)});d(x=>x.map(k=>k.id===g.id?n(k):k)),c(x=>(x==null?void 0:x.record.id)===g.id?{...x,record:n(x.record)}:x)}),m=z(async g=>{if(!(!s||g.deletedAt))try{const n="followup:"+g.id;let x=r.current.get(n);if(!x){const k=await t.get(n)??{id:g.id,kind:"note",body:"",existing:[],files:[]};if(!i.current)return;x=new Ue(k,a,t,g.id),r.current.set(n,x),await x.initialize()}i.current&&o(x)}catch(n){i.current&&l(n instanceof Error?n.message:"跟进草稿读取失败")}});return{acceptRecord:u,editFollowup:m}}function bt({client:a,store:t,writable:s,statusBusy:i,alive:r,setStatusBusy:o,setMessage:d,setPending:c,acceptRecord:l,setDetail:u,load:m}){return z(async(g,n)=>{var x;if(!(!s||i)){o(!0),d("");try{const k=await t.get("status:"+g.id);if(!k&&((x=await t.get("draft:"+g.id))!=null&&x.frozen))throw new Error("正文保存结果待确认,请先在编辑器确认");const S=k??{path:`/api/suiji/v1/records/${g.id}${"tags"in n?"":"trashed"in n?"/trash":"/task-status"}`,method:"tags"in n?"PATCH":"POST",key:crypto.randomUUID(),data:{expectedVersion:g.version,...n}};if(await t.set("status:"+g.id,S),!r.current)return;c(b=>new Set([...b,g.id]));const v=await a.request(S.path,S.method,S.data,S.key);if(!r.current)return;await t.remove("status:"+g.id),c(b=>{const j=new Set(b);return j.delete(g.id),j}),l(v.record),u(b=>(b==null?void 0:b.record.id)!==g.id?b:S.path.endsWith("/trash")||S.path.endsWith("/task-status")&&v.record.taskStatus==="done"?void 0:b),await m()}catch(k){if(!r.current)return;if(k instanceof se&&!k.uncertain)try{await t.remove("status:"+g.id),c(S=>{const v=new Set(S);return v.delete(g.id),v})}catch{d("本机状态确认写入失败,请手动重试");return}if(k instanceof se&&k.detail.error.code==="VERSION_CONFLICT"){try{const S=await a.request(`/api/suiji/v1/records/${g.id}`);l(S.record),d("记录已在其他地方更新,已显示最新内容,请重新选择标签或操作")}catch{d("记录已有新版本,读取失败,请返回列表重新打开后再操作")}return}d(k instanceof Error?k.message:"操作结果待确认")}finally{r.current&&o(!1)}}})}const De=["bg-emerald-100 text-emerald-900 dark:bg-emerald-950 dark:text-emerald-200","bg-blue-100 text-blue-900 dark:bg-blue-950 dark:text-blue-200","bg-purple-100 text-purple-900 dark:bg-purple-950 dark:text-purple-200","bg-pink-100 text-pink-900 dark:bg-pink-950 dark:text-pink-200","bg-orange-100 text-orange-900 dark:bg-orange-950 dark:text-orange-200","bg-teal-100 text-teal-900 dark:bg-teal-950 dark:text-teal-200"];function ke(a){let t=0;for(const s of a)t=(t*31+s.codePointAt(0))%De.length;return De[t]}function ue({tags:a=[],onSelect:t}){return a.length?e.jsx("div",{className:"relative flex flex-wrap gap-2",children:a.map(s=>t?e.jsx("button",{type:"button",className:`rounded-full px-2.5 py-1 text-xs break-all ${ke(s)}`,"aria-label":`筛选标签:${s}`,onClick:()=>t(s),children:s},s):e.jsx("span",{className:`rounded-full px-2.5 py-1 text-xs break-all ${ke(s)}`,children:s},s))}):null}function Le({selected:a=[],available:t,onChange:s}){const[i,r]=p.useState(!1),[o,d]=p.useState(""),[c,l]=p.useState(""),u=t.slice(0,6),m=n=>{try{s(Me([...a,n])),d(""),l(""),r(!1)}catch(x){l(x.message)}},g=n=>{s(a.filter(x=>x!==n)),l("")};return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[a.filter(n=>!u.includes(n)).map(n=>e.jsxs("button",{type:"button","aria-label":`移除标签:${n}`,className:`rounded-full px-2.5 py-1 text-sm break-all ${ke(n)}`,onClick:()=>g(n),children:[n," ×"]},n)),e.jsx(h,{type:"button",variant:"ghost",size:"sm",disabled:a.length>=2,"aria-expanded":i,onClick:()=>r(!i),children:"+标签"}),a.length>=2?e.jsx("span",{className:"text-xs text-muted-foreground",children:"最多 2 个标签"}):null]}),u.length?e.jsxs("div",{role:"group","aria-label":"最近使用的标签",className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:"最近使用"}),u.map(n=>{const x=a.includes(n);return e.jsxs(h,{type:"button",variant:x?"default":"outline",size:"sm","aria-pressed":x,disabled:!x&&a.length>=2,onClick:()=>x?g(n):m(n),children:[n,x?" ✓":""]},n)})]}):null,i&&a.length<2?e.jsxs("div",{className:"flex flex-col gap-2 rounded-xl border p-3",children:[e.jsx(G,{"aria-label":"标签名称",placeholder:"搜索或创建标签",value:o,onChange:n=>d(n.target.value),onKeyDown:n=>{n.key==="Enter"&&!n.nativeEvent.isComposing&&(n.preventDefault(),m(o))}}),e.jsx("div",{className:"flex max-h-40 flex-wrap gap-2 overflow-y-auto",children:t.filter(n=>!a.includes(n)&&n.includes(o.trim())).map(n=>e.jsx(h,{type:"button",variant:"outline",size:"sm",onClick:()=>m(n),children:n},n))}),o.trim()&&!t.includes(o.trim())?e.jsxs(h,{type:"button",variant:"outline",size:"sm",onClick:()=>m(o),children:["创建「",o.trim(),"」"]}):null]}):null,c?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:c}):null]})}function jt({available:a,selected:t,onSelect:s}){const[i,r]=p.useState(!1),[o,d]=p.useState(""),c=a.slice(0,5);if(t&&!c.includes(t)&&c.push(t),!c.length)return null;const l=u=>{s(u===t?"":u),r(!1),d("")};return e.jsxs("div",{className:"mb-4 flex flex-col gap-2","aria-label":"标签筛选",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[c.map(u=>e.jsxs(h,{type:"button",size:"sm",variant:t===u?"default":"outline","aria-pressed":t===u,onClick:()=>l(u),children:[u,t===u?" ×":""]},u)),e.jsx(h,{type:"button",variant:"ghost",size:"sm","aria-expanded":i,onClick:()=>r(!i),children:"更多标签"})]}),i?e.jsxs("div",{className:"flex flex-col gap-2 rounded-xl border p-3",children:[e.jsx(G,{"aria-label":"搜索标签",placeholder:"搜索已有标签",value:o,onChange:u=>d(u.target.value)}),e.jsx("div",{className:"flex max-h-48 flex-wrap gap-2 overflow-y-auto",children:a.filter(u=>u.includes(o.trim())).map(u=>e.jsx(h,{type:"button",size:"sm",variant:t===u?"default":"outline",onClick:()=>l(u),children:u},u))})]}):null]})}function wt(a,t){const s=[...new Set(t.map(r=>r.canonical))].filter(Boolean).sort((r,o)=>o.length-r.length),i=[];for(let r=0;r<a.length;){const o=s.find(d=>a.startsWith(d,r));if(o)i.push({text:o,term:t.find(d=>d.canonical===o)}),r+=o.length;else{const d=i.at(-1);d&&!d.term?d.text+=a.charAt(r):i.push({text:a.charAt(r)}),r++}}return i}function yt({model:a,selectedText:t,available:s}){var D,A,L,B,J,y;const i=p.useSyncExternalStore(a.subscribe,a.snapshot),[r,o]=p.useState(!1),[d,c]=p.useState(!1),[l,u]=p.useState(!1),[m,g]=p.useState(),[n,x]=p.useState(),[k,S]=p.useState("");p.useEffect(()=>{a.loadLexicon(),a.loadPreferences()},[a]);const v=((D=i.lexicon)==null?void 0:D.entries)??[],b=async()=>{if(!m||!i.lexicon)return;const w=m.canonical.trim(),I=m.variant.trim();if(!w)return;const F=structuredClone(v),M=structuredClone(v),$=M.find(E=>E.canonical===w);if($?I&&!$.variants.includes(I)&&$.variants.push(I):M.push({canonical:w,variants:I?[I]:[]}),JSON.stringify(M)===JSON.stringify(v)){S("这个写法已在词库中"),g(void 0);return}try{await a.putLexicon(M),x(F),g(void 0)}catch{}},j=async w=>{try{await a.putLexicon(v.filter(I=>I.canonical!==w))}catch{}},N=i.correction,C=(N==null?void 0:N.status)==="completed"&&N.correctedText;return e.jsxs("section",{className:"space-y-3 rounded-xl border p-4 text-sm","aria-label":"文字纠错",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(h,{type:"button",variant:"outline",disabled:!s||!i.draft.body.trim()||i.correctionBusy||i.draft.frozen,onClick:()=>void a.correct(),children:i.correctionBusy?"正在纠正…":"纠正文字"}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>c(!d),children:"纠错词库"}),a.historySupported?e.jsx(h,{type:"button",variant:"ghost",onClick:()=>{u(!l),l||a.loadHistory()},children:"历史辅助"}):null,t?e.jsx(h,{type:"button",variant:"ghost",onClick:()=>g({canonical:t,variant:""}),children:"记住选词"}):null]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"点击后,本次文字和专有词库会经 Codex CLI 发送给模型提供方。"}),s?null:e.jsx("p",{className:"text-xs text-muted-foreground",children:"此服务尚未启用文字纠错;词库仍可管理。"}),i.correctionMessage||k?e.jsx("p",{role:"status",children:k||i.correctionMessage}):null,i.feedbackPending?e.jsx(h,{type:"button",variant:"outline",onClick:()=>void a.retryFeedback(),children:"手动重试历史反馈"}):null,l&&a.historySupported?e.jsxs("div",{className:"space-y-2 rounded-lg border p-3",children:[e.jsx("strong",{children:"历史辅助"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"开启后,随记服务端会保存纠错前文本、候选和应用后实际保存的正文; 下次纠错会将少量相关修改示例连同本次文字发送给模型提供方。不会自动修改正式词库。"}),e.jsxs("label",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",checked:((A=i.preferences)==null?void 0:A.historyEnabled)??!1,disabled:!i.preferences,onChange:w=>void a.setHistoryEnabled(w.target.checked)}),"启用历史辅助"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"关闭后不再新增或使用历史。清空只删除纠错派生记录,不删除随记正文或词库。"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>void a.loadHistory(),children:"刷新历史"}),e.jsx(h,{type:"button",variant:"outline",disabled:!((L=i.history)!=null&&L.items.length),onClick:()=>void a.deleteHistory(),children:"清空纠错历史"})]}),(B=i.history)==null?void 0:B.items.map(w=>e.jsxs("div",{className:"space-y-1 rounded border p-2",children:[e.jsxs("p",{className:"whitespace-pre-wrap break-words",children:["候选:",w.correctedText]}),e.jsxs("p",{className:"whitespace-pre-wrap break-words",children:["保存:",w.finalText]}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>void a.deleteHistory(w.id),children:"删除"})]},w.id)),(J=i.history)!=null&&J.nextCursor?e.jsx(h,{type:"button",variant:"outline",onClick:()=>{var w;return void a.loadHistory((w=i.history)==null?void 0:w.nextCursor)},children:"加载更多"}):null]}):null,i.lexiconPending?e.jsx(h,{type:"button",variant:"outline",onClick:()=>void a.putLexicon(v).then(()=>{x(v),g(void 0),S("")}).catch(()=>{}),children:"手动重试确认词库写入"}):null,C?e.jsxs("div",{className:"space-y-3 rounded-lg border p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("strong",{children:"纠错预览"}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>o(!r),children:r?"收起原文":"查看原文"})]}),r?e.jsx("p",{className:"whitespace-pre-wrap break-words",children:i.correctionSource}):null,e.jsx("p",{className:"whitespace-pre-wrap break-words",children:wt(N.correctedText,N.suggestedTerms??[]).map((w,I)=>w.term?e.jsx("button",{type:"button",className:"decoration-dotted underline underline-offset-4",onClick:()=>g(w.term),children:w.text},I):e.jsx("span",{children:w.text},I))}),(y=N.uncertainTerms)!=null&&y.length?e.jsxs("p",{children:["仍不确定:",N.uncertainTerms.join("、"),"。请核对原文。"]}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{type:"button",onClick:()=>a.applyCorrection(),disabled:i.draft.body!==i.correctionSource||i.draft.frozen,children:"应用到草稿"}),e.jsx(h,{type:"button",variant:"outline",onClick:()=>void a.cancelCorrection(),children:"取消"})]})]}):null,m?e.jsxs("div",{className:"space-y-2 rounded-lg border p-3",children:[e.jsx("strong",{children:"记住这个写法"}),e.jsxs("label",{className:"block",children:["正确写法",e.jsx("input",{className:"w-full rounded border bg-background p-2",value:m.canonical,onChange:w=>g({...m,canonical:w.target.value})})]}),e.jsxs("label",{className:"block",children:["误识别写法(可留空)",e.jsx("input",{className:"w-full rounded border bg-background p-2",value:m.variant,onChange:w=>g({...m,variant:w.target.value})})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(h,{type:"button",disabled:i.lexiconPending||!i.lexicon,onClick:()=>void b(),children:"加入词库"}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>g(void 0),children:"取消"})]})]}):null,n?e.jsx(h,{type:"button",variant:"ghost",onClick:()=>{a.putLexicon(n).then(()=>x(void 0)).catch(()=>{})},children:"撤销本次添加"}):null,d?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("strong",{children:"纠错词库"}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>void a.loadLexicon(),children:"刷新"})]}),v.map(w=>e.jsxs("div",{className:"flex items-center justify-between gap-2 rounded border p-2",children:[e.jsxs("span",{children:[w.canonical,w.variants.length?` ← ${w.variants.join("、")}`:""]}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>void j(w.canonical),children:"移除"})]},w.canonical)),e.jsx(h,{type:"button",variant:"outline",onClick:()=>g({canonical:"",variant:""}),children:"新增词条"})]}):null]})}function kt({model:a,onClose:t,onSaved:s,onFollowupSaved:i,onDiscard:r,availableTags:o,correctionAvailable:d}){const c=p.useSyncExternalStore(a.subscribe,a.snapshot),{draft:l,busy:u}=c,m=z(s),[g,n]=p.useState(""),x=z(v=>{const b=Array.from(v.clipboardData.files).find(j=>j.type.startsWith("image/"));b&&(v.preventDefault(),v.stopPropagation(),!u&&!l.frozen&&a.addFile(b))}),k=z(v=>i==null?void 0:i(v));p.useEffect(()=>{c.savedFollowup&&k(c.savedFollowup)},[c.savedFollowup,k]);const S=z(r);return p.useEffect(()=>{c.saved&&m(c.saved)},[c.saved,m]),p.useEffect(()=>{c.discarded&&S()},[c.discarded,S]),e.jsxs(Ae,{title:a.followupRecordId?"追加跟进":l.id==="new"?"记下一点什么":"编辑记录",onBack:t,busy:u,onPaste:x,description:l.frozen?"保存结果待确认,请手动重试":"草稿自动保留,点保存后上传。",children:[e.jsxs("fieldset",{disabled:u||l.frozen,className:"flex flex-col gap-4",children:[a.followupRecordId?null:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{children:"类型"}),e.jsx("div",{role:"group","aria-label":"记录类型",className:"inline-flex gap-1 rounded-xl bg-secondary p-1",children:[["note","想法"],["task","待办"]].map(([v,b])=>e.jsx(h,{type:"button",size:"sm",variant:l.kind===v?"default":"ghost","aria-pressed":l.kind===v,onClick:()=>a.edit({kind:v}),children:b},v))})]}),!a.followupRecordId&&l.id!=="new"?e.jsx("p",{className:"text-sm text-muted-foreground",children:"切换为待办时设为未完成;切换为想法时清除待办状态。"}):null,e.jsxs("label",{className:"flex flex-col gap-2",children:[a.followupRecordId?"跟进内容":"原文",e.jsx("textarea",{"aria-label":a.followupRecordId?"跟进内容":"原文",value:l.body,onChange:v=>a.edit({body:v.target.value}),onSelect:v=>{const b=v.currentTarget;n(b.value.slice(b.selectionStart,b.selectionEnd).trim().slice(0,80))},placeholder:"此刻的想法、一个链接,或者以后想做的事……",className:"min-h-56 resize-y rounded-xl border bg-background p-4 leading-relaxed outline-none focus:ring-2 focus:ring-ring"})]}),d!==void 0?e.jsx(yt,{model:a,selectedText:g,available:d}):null,a.followupRecordId?null:e.jsx(Le,{selected:l.tags,available:o,onChange:v=>a.edit({tags:v})}),e.jsxs("span",{className:"text-right text-xs text-muted-foreground",children:[[...l.body].length.toLocaleString()," / 20,000"]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["添加图片或 Markdown",e.jsx("span",{className:"text-xs text-muted-foreground",children:"可在编辑区按 ⌘V / Ctrl+V 粘贴图片。"}),e.jsx("input",{"aria-label":"添加附件",type:"file",accept:"image/jpeg,image/png,.md",onChange:v=>{var j;const b=(j=v.target.files)==null?void 0:j[0];v.target.value="",b&&a.addFile(b)}})]}),[...l.existing.map(v=>({id:v.id,name:v.fileName,existing:!0})),...l.files.map(v=>({id:v.id,name:v.file.name,existing:!1}))].map(v=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border p-3",children:[e.jsx("span",{className:"truncate",children:v.name}),e.jsx(h,{type:"button",size:"sm",variant:"ghost",onClick:()=>a.edit(v.existing?{existing:l.existing.filter(b=>b.id!==v.id)}:{files:l.files.filter(b=>b.id!==v.id)}),children:"移除"})]},v.id))]}),c.message?e.jsx("p",{role:"alert",className:"whitespace-pre-wrap text-sm text-destructive",children:c.message}):null,c.conflict?e.jsx(h,{variant:"outline",onClick:()=>void a.loadLatest(),children:"查看最新原文"}):null,c.latest?e.jsxs("section",{className:"flex flex-col gap-3 rounded-xl border p-4",children:[e.jsx("p",{children:"云端标签"}),e.jsx(ue,{tags:c.latest.tags}),e.jsxs("p",{children:["本机标签",l.tags===void 0?":未修改,保存时保留云端标签":""]}),e.jsx(ue,{tags:l.tags}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["服务端版本 ",c.latest.version,",类型:",c.latest.kind==="note"?"想法":"待办","。请与上方本机草稿比较"]}),e.jsx("p",{className:"whitespace-pre-wrap break-words",children:c.latest.body}),e.jsx(h,{variant:"outline",onClick:()=>a.acceptLatestVersion(),children:"保留本机正文、类型和标签选择,采用最新版本继续编辑"})]}):null,e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{role:"status",className:"text-xs text-muted-foreground",children:c.localError?"本机草稿未保存":c.localSaving?"正在保存本机草稿…":"本机草稿已保存"}),e.jsx(h,{disabled:u,onClick:()=>void a.save(),children:u?"正在保存…":l.frozen?"手动重试确认":"保存"})]}),e.jsx(h,{variant:"ghost",disabled:u||l.frozen,onClick:()=>{window.confirm("放弃这份本机草稿?已保存的记录不会改变。")&&a.discard()},children:"放弃本机草稿"})]})}function Nt({record:a,client:t,writable:s,onAdd:i,onRecord:r,onOpenLink:o}){var v;const[d,c]=p.useState([]),[l,u]=p.useState(null),[m,g]=p.useState(!1),[n,x]=p.useState(""),k=p.useRef(0),S=z(async(b=!1)=>{const j=++k.current;g(!0),x("");try{const N=`/api/suiji/v1/records/${a.id}`,[C,D]=await Promise.all([t.request(N+"/followups"+(b&&l?"?cursor="+encodeURIComponent(l):"")),b?void 0:t.request(N)]);if(!t.active||j!==k.current)return;c(A=>b?[...A,...C.items.filter(L=>!A.some(B=>B.id===L.id))]:C.items),u(C.nextCursor),D&&r(D.record)}catch(N){j===k.current&&x(N instanceof Error?N.message:"跟进读取失败")}finally{j===k.current&&g(!1)}});return p.useEffect(()=>{const b=k;return S(),()=>{++b.current}},[S,a.id,t]),e.jsxs("section",{className:"flex flex-col gap-4 border-t pt-4","aria-label":"跟进",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("h3",{children:["跟进 ",((v=a.followupSummary)==null?void 0:v.count)??d.length," 条"]}),e.jsx(h,{variant:"ghost",disabled:m,onClick:()=>void S(),children:"刷新跟进"}),a.deletedAt?null:e.jsx(h,{disabled:!s,onClick:i,children:"追加跟进"})]}),n?e.jsx("p",{role:"alert",className:"text-destructive",children:n}):null,d.map(b=>e.jsxs("article",{className:"flex flex-col gap-2 rounded-xl border p-4",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:[b.source.actor==="app"?"你":`Agent${b.source.agentName?" · "+b.source.agentName:""}`," ","· ",he(b.createdAt)]}),b.source.sessionId?e.jsxs("p",{className:"break-all text-xs text-muted-foreground",children:["会话:",b.source.sessionId]}):null,e.jsx(Ne,{body:b.body,onOpenLink:o}),b.attachments.map(j=>e.jsx(Be,{attachment:j,client:t},j.id))]},b.id)),m?e.jsx("p",{role:"status",children:"正在读取跟进…"}):null,l?e.jsx(h,{variant:"outline",disabled:m,onClick:()=>void S(!0),children:"加载更早跟进"}):null]})}const Se=a=>a.kind==="note"?"想法":{open:"未完成",done:"已完成",archived:"不再做"}[a.taskStatus??"open"];function St({record:a,onOpenLink:t,client:s,onTag:i,availableTags:r,onTagsChange:o,message:d,onClose:c,onEdit:l,onStatus:u,onTrash:m,onReview:g,onRecreate:n,info:x,onFollowup:k,onRecord:S,writable:v,pending:b,busy:j,citedVersion:N}){var F,M;const[C,D]=p.useState(!1),[A,L]=p.useState(!1),[B,J]=p.useState(!1),[y,w]=p.useState("");p.useEffect(()=>{w("")},[a.id,a.body]),p.useEffect(()=>{if(!y)return;const $=window.setTimeout(()=>w(""),2500);return()=>window.clearTimeout($)},[y]);const I=z(async()=>{J(!0),w("");try{await navigator.clipboard.writeText(a.body),w(a.attachments.length?"正文已复制,附件未包含":"正文已复制")}catch{w("复制失败,请重试或选择正文手动复制")}finally{J(!1)}});return e.jsxs(Ae,{title:Se(a),description:he(a.createdAt),onBack:c,actions:e.jsxs(e.Fragment,{children:[e.jsx(h,{variant:"ghost",size:"icon","aria-label":"复制",title:a.body?"复制":"暂无正文可复制",disabled:!a.body||B,onClick:()=>void I(),children:e.jsx(_e,{className:"size-4"})}),e.jsx(h,{variant:"ghost",disabled:!v||b||j||!!a.deletedAt,onClick:l,children:"编辑"})]}),feedback:y?e.jsx("div",{className:"pointer-events-none absolute inset-x-4 bottom-5 z-10 flex justify-center",children:e.jsx("p",{role:"status",className:"rounded-full border bg-popover px-4 py-2.5 text-center text-sm text-popover-foreground shadow-lg",children:y})}):null,children:[N!==void 0&&N!==a.version?e.jsxs("p",{role:"status",className:"text-sm text-muted-foreground",children:["此记录已更新;回答引用的是版本 ",N,",下方是当前原文。"]}):null,e.jsx(Ne,{body:a.body,onOpenLink:t}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(ue,{tags:a.tags,onSelect:i}),a.deletedAt?null:e.jsx(h,{variant:"ghost",size:"sm",disabled:!v||b||j,"aria-expanded":A,onClick:()=>L(!A),children:A?"收起标签":(((F=a.tags)==null?void 0:F.length)??0)>=2?"管理标签":"添加标签"})]}),A&&!a.deletedAt?e.jsxs("fieldset",{disabled:!v||b||j,"aria-label":"快速编辑标签",className:"min-w-0 space-y-2 rounded-xl border p-3 disabled:opacity-60",children:[e.jsx(Le,{selected:a.tags,available:r,onChange:o}),e.jsx("p",{role:"status",className:"text-xs text-muted-foreground",children:j?"正在保存标签…":b?"保存结果待确认,请手动确认":"选择或移除后自动保存,最多 2 个标签"})]}):null,d?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:d}):null,e.jsx("div",{className:"flex flex-wrap gap-2",children:a.attachments.map($=>e.jsx(Be,{attachment:$,client:s},$.id))}),(M=x.features)!=null&&M.followups?e.jsxs(e.Fragment,{children:[a.deletedAt?null:e.jsx(h,{variant:"outline",onClick:()=>{navigator.clipboard.writeText(gt({endpoint:s.endpoint,serverId:x.serverId,ownerId:x.ownerId,recordId:a.id})).then(()=>w("交接指令已复制"),()=>w("复制失败,请重试"))},children:"交给 Agent"}),e.jsx(Nt,{record:a,client:s,writable:v,onAdd:k,onRecord:S,onOpenLink:t})]}):null,a.deletedAt?e.jsx("p",{role:"status",children:"已在回收站,恢复后可继续编辑。"}):null,b?e.jsx(h,{disabled:!v||j,onClick:()=>u("done"),children:"操作结果待确认 · 手动确认"}):null,e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(h,{variant:"outline",disabled:!!a.deletedAt,onClick:g,children:"聊聊这条"}),!a.deletedAt&&a.kind==="task"&&(a.taskStatus==="open"||b)?e.jsxs(e.Fragment,{children:[e.jsx(h,{disabled:!v||j,onClick:()=>u("done"),children:b?"手动确认操作":"标记完成"}),b?null:e.jsx(h,{variant:"outline",disabled:!v||j,onClick:()=>u("archived"),children:"不再做"})]}):!a.deletedAt&&a.taskStatus==="done"?e.jsx(h,{disabled:!v||j||b,onClick:()=>u("open"),children:"撤销完成"}):!a.deletedAt&&a.kind==="task"?e.jsx(h,{disabled:!v,onClick:n,children:"再次想做"}):null,a.deletedAt?e.jsx(h,{disabled:!v||b||j,onClick:()=>m(!1),children:"恢复记录"}):C?e.jsxs("div",{className:"flex flex-wrap items-center gap-2",role:"alert",children:[e.jsx("span",{children:"移入回收站后可恢复,正文和附件会保留。"}),e.jsx(h,{variant:"destructive",disabled:!v||b||j,onClick:()=>{D(!1),m(!0)},children:"确认移入回收站"}),e.jsx(h,{variant:"ghost",onClick:()=>D(!1),children:"取消"})]}):e.jsx(h,{variant:"destructive",disabled:!v||b||j,onClick:()=>D(!0),children:"移入回收站"})]})]})}function Ct({record:a,pending:t,onOpen:s,onOpenLink:i,onTag:r}){var o;return e.jsxs("article",{className:"relative flex flex-col gap-3 rounded-2xl border bg-card p-4 text-left shadow-sm transition-colors hover:bg-accent",children:[e.jsx("button",{type:"button","aria-label":`查看记录:${a.body||"附件记录"}`,onClick:s,className:"absolute inset-0 rounded-2xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"}),e.jsxs("span",{className:"pointer-events-none relative flex items-center justify-between gap-3 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[Se(a),t?" · 状态待确认":""]}),e.jsx("time",{children:he(a.createdAt)})]}),e.jsx(Ne,{onOpenLink:i,body:a.body||"附件记录",className:"pointer-events-none relative line-clamp-5"}),a.attachments.length?e.jsx("span",{className:"pointer-events-none relative text-xs text-muted-foreground",children:a.attachments.map(d=>d.fileName).join(" · ")}):null,(o=a.followupSummary)!=null&&o.latest?e.jsxs("p",{className:"pointer-events-none relative truncate text-sm text-muted-foreground",children:["跟进 ",a.followupSummary.count," 条 · ",a.followupSummary.latest.excerpt]}):null,e.jsx(ue,{tags:a.tags,onSelect:r})]})}function Et({client:a,info:t,scope:s,onScope:i,onOpen:r,onSave:o,writable:d,onLockedChange:c}){var J;const[l,u]=p.useState(""),[m,g]=p.useState([]),[n,x]=p.useState(),[k,S]=p.useState(!1),[v,b]=p.useState(""),j=p.useRef(void 0),N=p.useRef(!0);p.useEffect(()=>{c==null||c(!!(j.current||k||(n==null?void 0:n.status)==="running"))},[k,n,v,c]),p.useEffect(()=>(N.current=!0,()=>{N.current=!1}),[]);const C=z(async()=>{if(!(k||(n==null?void 0:n.status)==="running")){S(!0),b(""),j.current??(j.current={key:crypto.randomUUID(),input:{question:l,scope:s,history:m.flatMap(y=>{var w;return[{role:"user",text:y.question},{role:"assistant",text:((w=y.job.answer)==null?void 0:w.text)??""}]}).slice(-6)}});try{const y=await a.request("/api/suiji/v1/reviews","POST",j.current.input,j.current.key);N.current&&x(y)}catch(y){N.current&&b((y instanceof Error?y.message:"回顾请求失败")+"。问题保留,点击手动确认可重查同一次请求。")}finally{N.current&&S(!1)}}}),D=z(y=>{x(y),y.status!=="running"&&(y.status==="completed"?(g(w=>{var I;return[...w,{question:((I=j.current)==null?void 0:I.input.question)??l,job:y}]}),u(""),b("")):b(y.error??(y.status==="cancelled"?"已取消,原问题保留":"回顾未完成")),j.current=void 0)});p.useEffect(()=>{if(!n)return;if(n.status!=="running"){j.current&&D(n);return}let y=!0,w;const I=async()=>{try{const F=await a.request("/api/suiji/v1/reviews/"+n.id);if(!y)return;F.status!=="running"?D(F):w=setTimeout(()=>void I(),1500)}catch(F){y&&b((F instanceof Error?F.message:"无法读取进度")+"。可手动查询此回顾的进度。")}};return w=setTimeout(()=>void I(),800),()=>{y=!1,clearTimeout(w)}},[a,n,D]);const A=z(async()=>{if(n)try{D(await a.request("/api/suiji/v1/reviews/"+n.id)),b("")}catch(y){b(y instanceof Error?y.message:"查询失败")}}),L=z(async()=>{if(n)try{D(await a.request("/api/suiji/v1/reviews/"+n.id,"DELETE"))}catch(y){b(y instanceof Error?y.message:"取消失败,请手动重试")}}),B=k||(n==null?void 0:n.status)==="running";return(J=t.ai)!=null&&J.enabled?e.jsxs("section",{className:"flex flex-col gap-7",children:[e.jsxs("header",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-xl font-semibold",children:"从记录里,接着想"}),e.jsx("p",{className:"text-sm leading-6 text-muted-foreground",children:"主动发问后才检索。回答引用实际原文,保存结论由你决定。"})]}),m.map(y=>e.jsxs("article",{className:"flex flex-col gap-4",children:[e.jsx("p",{className:"ml-8 rounded-2xl bg-secondary p-4 whitespace-pre-wrap",children:y.question}),e.jsxs("div",{className:"flex flex-col gap-4 rounded-2xl border bg-card p-5",children:[e.jsx("p",{className:"whitespace-pre-wrap break-words leading-7",children:y.job.answer.text}),y.job.answer.citations.map((w,I)=>e.jsxs("button",{className:"flex flex-col gap-1 rounded-xl border p-3 text-left hover:bg-accent",onClick:()=>r(w.recordId,w.version),children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:["[",I+1,"] ",he(w.createdAt)," ·"," ",Se(w)," · 版本 ",w.version,w.attachment?` · ${w.attachment.fileName}`:""]}),e.jsx("span",{className:"whitespace-pre-wrap break-words text-sm",children:w.quote||"已读取图片附件"})]},I)),e.jsxs("p",{className:"text-xs leading-5 text-muted-foreground",children:["本次查看 ",y.job.answer.coverage.listedRecords," 条摘要、",y.job.answer.coverage.readRecords," 条原文、",y.job.answer.coverage.attachmentReads," ","段附件。关键词检索,未启用向量索引,未读取外链。"]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(h,{variant:"outline",size:"sm",disabled:!d,onClick:()=>o(y.job.answer.text,"note"),children:"另存笔记"}),e.jsx(h,{variant:"outline",size:"sm",disabled:!d,onClick:()=>o(y.job.answer.text,"task"),children:"新建待办"})]})]})]},y.job.id)),e.jsxs("form",{className:"flex flex-col gap-3 rounded-2xl border bg-card p-5",onSubmit:y=>{y.preventDefault(),C()},children:[e.jsxs("label",{className:"flex items-center gap-3 text-sm",children:["回顾范围",e.jsxs("select",{"aria-label":"回顾范围",disabled:B||!!j.current,value:s.kind,onChange:y=>i({kind:y.target.value}),className:"rounded-lg border bg-background p-2",children:[e.jsx("option",{value:"all",children:"全部历史"}),e.jsx("option",{value:"open",children:"当前待办"}),s.kind==="record"?e.jsx("option",{value:"record",children:"这条记录"}):null]})]}),e.jsx("label",{className:"sr-only",htmlFor:"suiji-question",children:"向随记提问"}),e.jsx("textarea",{id:"suiji-question",value:l,disabled:B||!!j.current,onChange:y=>u(y.target.value),maxLength:4e3,placeholder:"以前有哪些想做、后来放下的事?",className:"min-h-28 resize-y rounded-xl border bg-background p-3 leading-6"}),B?e.jsx("p",{role:"status",className:"text-sm text-muted-foreground",children:"正在检索与回顾,可以继续浏览记录…"}):null,v?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:v}):null,e.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[v&&!k?e.jsx(h,{type:"button",variant:"ghost",onClick:()=>{j.current=void 0,x(void 0),b("")},children:"结束此次等待,重新提问"}):null,(n==null?void 0:n.status)==="running"?e.jsxs(e.Fragment,{children:[e.jsx(h,{type:"button",variant:"outline",onClick:()=>void A(),children:"查询进度"}),e.jsx(h,{type:"button",variant:"outline",onClick:()=>void L(),children:"取消回顾"})]}):e.jsx(h,{type:"submit",disabled:k||!l.trim(),children:j.current?"手动确认请求":"发送"})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"对话仅保留在当前页面会话,刷新后不会自动重新执行。服务上的回顾结果保留 30 分钟。"})]}):e.jsxs("section",{className:"flex flex-col gap-3 py-16 text-center",children:[e.jsx("h2",{className:"text-xl",children:"AI 回顾尚未启用"}),e.jsx("p",{className:"text-muted-foreground",children:"当前服务没有可用的回顾模型。记录和待办仍可正常使用。"})]})}function It({active:a,disabled:t,loading:s,cursor:i,load:r}){const o=p.useRef(null),d=p.useRef(null),c=p.useRef(null),[l,u]=p.useState(!1);return p.useEffect(()=>{const m=o.current,g=d.current;if(!a||t||s||!i||l||!m||!g)return;const n=new IntersectionObserver(([x])=>{x!=null&&x.isIntersecting&&(n.disconnect(),r(!0))},{root:m,rootMargin:"0px 0px 200px 0px"});return n.observe(g),()=>n.disconnect()},[a,t,s,i,l,o,d,r]),{failed:l,scrollContainer:o,trigger:d,begin:(m,g,n)=>m&&(!g||n||c.current===g)?!1:(c.current=m?g:null,u(!1),!0),fail:m=>{m&&(c.current=null,u(!0))}}}function Rt({cursor:a,failed:t,loading:s,trigger:i,onRetry:r}){return e.jsx("div",{ref:i,className:"flex min-h-px justify-center gap-3",children:a&&t?e.jsx(h,{variant:"outline",disabled:s,onClick:r,children:"重试加载"}):null})}function Tt({connection:a,active:t=!0,headerActions:s,onOpenLink:i}){var Te,qe,ze;const{client:r,info:o,store:d}=a,[c]=p.useState(()=>new ht(r,d)),[l,u]=p.useState(!1),[m,g]=p.useState(),[n,x]=p.useState("records"),[k,S]=p.useState(""),[v,b]=p.useState("open"),[j,N]=p.useState(""),[C,D]=p.useState(""),[A,L]=p.useState([]),[B,J]=p.useState(!1),y=Ge(j,{wait:250}),w=p.useRef(0),[I,F]=p.useState([]),[M,$]=p.useState(null),[E,ne]=p.useState(!1),[fe,Y]=p.useState(""),[q,ee]=p.useState(),[V,ae]=p.useState(),[$e,Ce]=p.useState({kind:"all"}),[pe,xe]=p.useState(new Set),[Ee,Ve]=p.useState(!1),[te,Oe]=p.useState(!1),O=p.useRef(!0),Z=p.useRef(0),me=p.useRef(!1),le=p.useRef(void 0),ie=p.useRef(new Map),ge=z(async()=>{if(!(me.current||!navigator.locks)){me.current=!0;try{await navigator.locks.request("suiji-editor:"+d.scope,{ifAvailable:!0},async f=>{!f||!O.current||(Oe(!0),await new Promise(R=>{le.current=R}))})}finally{me.current=!1}}});p.useEffect(()=>{var R;O.current=!0,ge(),(R=o.features)!=null&&R.workRecords&&c.initialize();const f=ie.current;return()=>{O.current=!1,f.forEach(T=>T.dispose()),c.dispose(),Promise.all([...f.values()].map(T=>T.settled()).concat(c.settled())).finally(()=>{var T;(T=le.current)==null||T.call(le),d.close()})}},[ge,d,c,o]);const X=z(async(f=!1)=>{if(n==="ai"||n==="work"||!oe.begin(f,M,E))return;const R=++Z.current;ne(!0),Y(""),f||(F([]),$(null));const T=new URLSearchParams;n==="tasks"?(T.set("kind","task"),T.set("taskStatus",v)):k&&T.set("kind",k),n==="trash"&&T.set("trash","true"),y&&T.set("q",y),C&&T.set("tag",C),f&&M&&T.set("cursor",M);try{const[_,U]=await Promise.all([r.request("/api/suiji/v1/records?"+T),f?void 0:r.request("/api/suiji/v1/tags")]);if(!O.current||R!==Z.current)return;U&&L(U.items);const Q=await Promise.all(_.items.map(async H=>await d.get("status:"+H.id)?H.id:void 0));if(!O.current||R!==Z.current)return;F(H=>f?[...H,..._.items.filter(K=>!H.some(Ke=>Ke.id===K.id))]:_.items),$(_.nextCursor),xe(H=>new Set([...f?H:[],...Q.filter(K=>!!K)]))}catch(_){O.current&&R===Z.current&&(oe.fail(f),Y(_ instanceof Error?_.message:"读取失败"))}finally{O.current&&R===Z.current&&ne(!1)}});p.useEffect(()=>{t&&X()},[X,n,k,v,y,C,t]);const oe=It({active:t,disabled:n==="ai"||n==="work"||!!(q||V),loading:E,cursor:M,load:X}),ve=z(f=>{++Z.current,++w.current,F([]),$(null),ee(void 0),n==="ai"&&x("records"),f===C?X():D(f)}),Ie=z(async(f,R)=>{const T=Z.current,_=++w.current;try{const{record:U}=await r.request("/api/suiji/v1/records/"+f),Q=await d.get("status:"+f);if(!O.current||T!==Z.current||_!==w.current)return;xe(H=>{const K=new Set(H);return Q?K.add(f):K.delete(f),K}),F(H=>H.map(K=>K.id===U.id&&K.version<=U.version?U:K)),ee({record:U,citedVersion:R})}catch(U){O.current&&Y(U instanceof Error?U.message:"读取失败")}}),ce=z(async(f,R="task",T="")=>{var _;if(!(!te||f!=null&&f.deletedAt))try{if(f&&await d.get("status:"+f.id))throw new Error("记录操作待确认,请先手动确认");const U=(f==null?void 0:f.id)??"new";let Q=ie.current.get(U);if(Q&&T&&Y("已恢复原有草稿;新结论未覆盖它。请先处理当前草稿,再另存结论。"),!Q){const H=await d.get("draft:"+U);if(!O.current)return;const K=H??{id:U,kind:(f==null?void 0:f.kind)??R,body:(f==null?void 0:f.body)??T,tags:(f==null?void 0:f.tags)??[],version:f==null?void 0:f.version,existing:(f==null?void 0:f.attachments)??[],files:[]};Q=new Ue(K,r,d,void 0,((_=o.features)==null?void 0:_.correctionHistory)===!0),ie.current.set(U,Q),H&&T&&Y("已恢复原有草稿;新结论未覆盖它。请先处理当前草稿,再另存结论。"),await Q.initialize()}O.current&&ae(Q)}catch(U){O.current&&Y(U instanceof Error?U.message:"草稿读取失败")}}),{acceptRecord:be,editFollowup:He}=vt({client:r,store:d,writable:te,alive:O,models:ie,setEditor:ae,setItems:F,setDetail:ee,setMessage:Y}),je=bt({client:r,store:d,writable:te,statusBusy:Ee,alive:O,setStatusBusy:Ve,setMessage:Y,setPending:xe,acceptRecord:be,setDetail:ee,load:X}),Re=I.filter(f=>!!f.deletedAt==(n==="trash")&&(!C||(f.tags??[]).includes(C))&&(n==="tasks"?f.kind==="task"&&f.taskStatus===v:!k||f.kind===k)&&(n!=="records"||f.taskStatus!=="done"&&f.taskStatus!=="archived"||pe.has(f.id)));return e.jsxs("main",{className:"relative flex h-full min-h-0 flex-col bg-background text-foreground",children:[s&&n!=="ai"&&n!=="work"&&!q&&!V?Qe.createPortal(e.jsx(h,{variant:"ghost",size:"icon","aria-label":E?"刷新中":"刷新",title:"刷新",disabled:E,onClick:()=>void X(),children:e.jsx(Ze,{className:`size-4 ${E?"animate-spin":""}`})}),s):null,e.jsxs("div",{className:q||V?"hidden":"flex min-h-0 flex-1 flex-col",children:[(Te=o.features)!=null&&Te.workRecords?e.jsx("div",{className:n==="work"?"flex min-h-0 flex-1 flex-col":"hidden",children:e.jsx(xt,{model:c,active:n==="work",writable:te,onReview:()=>{g({tab:"work"}),x("ai")}})}):null,e.jsxs("div",{ref:oe.scrollContainer,className:n==="work"?"hidden":"min-h-0 flex-1 overflow-y-auto px-5 pt-4",children:[te?null:e.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-xl border p-4 text-sm",children:[e.jsx("p",{children:"另一随记页面正在编辑,当前可浏览。关闭那一页后可接管编辑。"}),e.jsx(h,{variant:"outline",size:"sm",onClick:()=>void ge(),children:"接管编辑"})]}),fe?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:fe}):null,e.jsxs("div",{hidden:n!=="ai",className:"pb-6",children:[m?e.jsxs(h,{variant:"ghost",onClick:()=>{x(m.tab),ee(m.detail),g(void 0)},children:["返回",m.detail?"原记录":"工作"]}):null,e.jsx(Et,{client:r,info:o,scope:$e,onScope:Ce,onOpen:(f,R)=>void Ie(f,R),onSave:(f,R)=>void ce(void 0,R,f),writable:te,onLockedChange:u})]}),n!=="ai"&&n!=="work"?e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[n==="tasks"?e.jsxs("label",{className:"flex items-center gap-3 text-sm",children:["状态",e.jsxs("select",{"aria-label":"待办状态",value:v,onChange:f=>b(f.target.value),className:"rounded-xl border bg-card p-2",children:[e.jsx("option",{value:"open",children:"未完成"}),e.jsx("option",{value:"done",children:"已完成"}),e.jsx("option",{value:"archived",children:"不再做"})]})]}):e.jsx("div",{className:"flex items-center gap-3 text-sm",children:e.jsx("div",{role:"group","aria-label":"类型筛选",className:"inline-flex gap-1 rounded-xl bg-secondary p-1",children:[["","全部"],["note","想法"],["task","待办"]].map(([f,R])=>e.jsx(h,{type:"button",size:"sm",variant:k===f?"default":"ghost","aria-pressed":k===f,onClick:()=>S(f),children:R},f))})}),e.jsx(h,{variant:"ghost",size:"icon","aria-label":"搜索记录","aria-pressed":B,onClick:()=>{B&&N(""),J(f=>!f)},children:e.jsx(Xe,{className:"size-4"})}),B?e.jsx(G,{autoFocus:!0,"aria-label":"搜索原文",placeholder:"搜索正文关键词",value:j,onChange:f=>N(f.target.value),className:"w-full"}):null]}),e.jsx(jt,{available:A,selected:C,onSelect:ve}),e.jsxs("section",{className:"flex flex-col gap-4 pb-20",children:[Re.map(f=>e.jsx(Ct,{record:f,pending:pe.has(f.id),onOpen:()=>void Ie(f.id),onOpenLink:i,onTag:ve},f.id)),E?e.jsx("p",{role:"status",className:"py-8 text-center text-muted-foreground",children:"正在读取记录…"}):Re.length===0?e.jsxs("div",{className:"flex flex-col gap-3 py-16 text-center",children:[e.jsx("h2",{className:"text-xl",children:j||C?"没有找到匹配的原文":n==="trash"?"回收站为空":"留一点想法在这里"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:j||C?"试试其他标签或更短的关键词。":n==="trash"?"删除的记录会保留在这里,可随时恢复。":"点右下角加号,记下一句想到的事。"})]}):null,e.jsx(Rt,{cursor:M,failed:oe.failed,loading:E,trigger:oe.trigger,onRetry:()=>void X(!0)})]})]}):null]}),n!=="trash"&&n!=="ai"&&n!=="work"?e.jsx(h,{"aria-label":"新增记录",className:"absolute bottom-20 right-5 size-12 rounded-full shadow-lg",disabled:!te,onClick:()=>void ce(),children:e.jsx(Ye,{})}):null,e.jsx("nav",{"aria-label":"随记导航",className:"grid shrink-0 grid-cols-4 border-t bg-background px-2 py-2",children:[["records","记录",et],["tasks","待办",ut],["trash","回收站",tt],(qe=o.features)!=null&&qe.workRecords?["work","工作",ct]:["ai","AI",st]].map(([f,R,T])=>e.jsxs("button",{type:"button","aria-current":n===f?"page":void 0,className:`flex flex-col items-center gap-1 rounded-lg py-2 text-xs ${n===f?"bg-secondary text-primary":"text-muted-foreground hover:bg-accent"}`,onClick:()=>{++Z.current,x(f)},children:[e.jsx(T,{className:"size-5"}),R]},f))})]}),q&&!V?e.jsx(St,{onOpenLink:i,...q,client:r,info:o,onFollowup:()=>void He(q.record),onRecord:be,onTag:ve,availableTags:A,onTagsChange:f=>void je(q.record,{tags:f}),message:fe,onClose:()=>ee(void 0),onEdit:()=>void ce(q.record),onStatus:f=>void je(q.record,{targetStatus:f}),onTrash:f=>void je(q.record,{trashed:f}),onReview:()=>{g({tab:n,detail:q}),l||Ce({kind:"record",recordId:q.record.id}),ee(void 0),x("ai")},onRecreate:()=>void ce(void 0,"task",q.record.body),writable:te,pending:pe.has(q.record.id),busy:Ee},q.record.id):null,V?e.jsx(kt,{model:V,correctionAvailable:(ze=o.features)==null?void 0:ze.correction,availableTags:A,onClose:()=>{V.cancelCorrection(),ae(void 0)},onDiscard:()=>{ie.current.delete(V.followupRecordId?"followup:"+V.followupRecordId:V.state.draft.id),V.dispose(),ae(void 0)},onFollowupSaved:f=>{const R=f.followup.recordId;ie.current.delete("followup:"+R),V.dispose(),ae(void 0),(q==null?void 0:q.record.id)===R&&be({...q.record,followupSummary:f.followupSummary}),X()},onSaved:f=>{q&&ee({record:f}),ie.current.delete(V.followupRecordId?"followup:"+V.followupRecordId:V.state.draft.id),V.dispose(),ae(void 0),X()}}):null]})}function At({active:a=!0,accountOnly:t=!1,onClose:s,onOpenLink:i}){const{accounts:r,endpoint:o,setEndpoint:d,username:c,setUsername:l,password:u,setPassword:m,busy:g,message:n,connection:x,needsLogin:k,setNeedsLogin:S,ensure:v,initialize:b,connect:j,switchEnvironment:N,logout:C,editAccount:D,isCurrent:A}=it(),[L,B]=p.useState(t),[J,y]=p.useState(null),w=p.useRef(!0);p.useEffect(()=>(w.current=!0,v(),()=>{w.current=!1}),[v]),p.useEffect(()=>{x&&B(t)},[x,t]);const I=z(E=>{const ne=x==null?void 0:x.client;i==null||i(E,()=>w.current&&!!ne&&A(ne))}),F=z(async E=>{$&&!window.confirm("放弃当前环境未保存的账户修改?")||await N(E)}),M=r==null?void 0:r.profiles[r.active],$=t&&!!M&&!x&&(o!==M.endpoint||c!==M.username||u!==(M.password??""));return at($,t&&g&&$),e.jsxs("section",{className:"suiji-theme flex h-full min-h-0 flex-col bg-background text-foreground","aria-label":"随记内容",children:[e.jsxs("header",{className:"flex h-14 shrink-0 items-center gap-2 border-b px-4",children:[L&&x&&!t?e.jsx(h,{variant:"ghost",size:"icon","aria-label":"返回随记",onClick:()=>B(!1),children:e.jsx(rt,{className:"size-4"})}):null,e.jsx("h1",{className:"font-semibold",children:L?"账户设置":"随记"}),(r==null?void 0:r.active)==="development"?e.jsx("span",{className:"rounded bg-secondary px-2 py-0.5 text-xs",children:"开发"}):null,e.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[L?null:e.jsx("div",{ref:y,className:"flex"}),x&&!L?e.jsx(h,{variant:"ghost",size:"icon","aria-label":"随记设置",onClick:()=>B(!0),children:e.jsx(nt,{className:"size-4"})}):null,s?e.jsx(h,{variant:"ghost",size:"icon","aria-label":"关闭随记",onClick:s,children:e.jsx(ot,{className:"size-4"})}):null]})]}),x&&!t?e.jsx("div",{hidden:L,className:"min-h-0 flex-1",children:e.jsx(Tt,{connection:x,active:a,headerActions:J,onOpenLink:i?I:void 0},x.store.scope)}):null,t||L||!x?e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto p-5",children:[r?e.jsxs(e.Fragment,{children:[e.jsx("fieldset",{disabled:g,className:"mb-6 flex gap-2","aria-label":"账户环境",children:["production","development"].map(E=>e.jsx(h,{className:"flex-1",variant:r.active===E?"default":"outline","aria-pressed":r.active===E,onClick:()=>void F(E),children:we(E)},E))}),e.jsx("p",{className:"mb-5 text-sm text-muted-foreground",children:x?"切换环境会保留各自的账户和草稿。":"首次登录后,下次打开会自动连接。"}),x?e.jsxs("div",{className:"flex flex-col gap-4 text-sm",children:[e.jsxs("p",{children:["已登录",we(r.active),"环境 · ",c]}),e.jsx("p",{className:"break-all text-muted-foreground",children:o}),e.jsx(h,{variant:"outline",disabled:g,onClick:D,children:"修改账户配置"}),e.jsxs(h,{variant:"destructive",disabled:g,onClick:()=>void C(),children:["退出",we(r.active),"账户"]})]}):k?e.jsxs("form",{className:"flex flex-col gap-5",onSubmit:E=>{E.preventDefault(),j(r,!0)},children:[e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["服务地址",e.jsx(G,{"aria-label":"随记服务地址",type:"url",value:o,required:!0,disabled:g,onChange:E=>d(E.target.value),placeholder:"https://你的随记服务"})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["账号",e.jsx(G,{"aria-label":"随记账号",autoComplete:"username",value:c,required:!0,disabled:g,onChange:E=>l(E.target.value)})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["密码",e.jsx(G,{"aria-label":"随记密码",type:"password",autoComplete:"current-password",value:u,required:!0,disabled:g,onChange:E=>m(E.target.value)})]}),e.jsx(h,{type:"submit",disabled:g,children:g?"正在连接…":"登录随记"})]}):e.jsxs("div",{className:"flex flex-col gap-4 text-sm",children:[e.jsx("p",{children:g?"正在恢复已保存的账户…":"暂时无法连接,账户和草稿已保留。"}),e.jsx(h,{variant:"outline",disabled:g,onClick:()=>S(!0),children:"修改账户配置"})]})]}):null,g?e.jsx("p",{role:"status",className:"mt-4 text-sm",children:"正在连接…"}):null,n?e.jsxs("div",{className:"mt-4 flex flex-col gap-3",children:[e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:n}),e.jsx(h,{variant:"outline",disabled:g,onClick:()=>void b(),children:"重试连接"})]}):null]}):null]})}export{At as default};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
.settings-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;background:hsl(var(--background));color:hsl(var(--foreground))}.settings-sidebar{width:208px;flex-shrink:0;display:flex;flex-direction:column;overflow-y:auto;padding:8px;border-right:1px solid hsl(var(--border));background:hsl(var(--muted) / .35)}.settings-back{position:sticky;top:0;z-index:1;flex-shrink:0;background:hsl(var(--background));display:flex;align-items:center;gap:8px;padding:5px 8px;color:hsl(var(--muted-foreground));font-size:12px}.settings-nav{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;border-radius:6px;text-align:left;font-size:13px;line-height:18px}.settings-nav:hover,.settings-nav.active{background:hsl(var(--muted))}.settings-nav.active{font-weight:600}.settings-content{flex:1;min-width:0;overflow:auto;padding:20px 24px;font-size:13px}.settings-wrap{width:100%}.management-wrap{display:flex;flex-direction:column;height:100%;min-height:0}.management-wrap>header{flex-shrink:0}.management-content{flex:1;min-height:0;min-width:0;overflow:auto}.settings-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.settings-tabs button{border-radius:8px;padding:5px 10px;font-size:13px;color:hsl(var(--muted-foreground))}.settings-tabs button[aria-current]{color:hsl(var(--foreground));background:hsl(var(--muted))}.settings-screen section{min-width:0}@media(max-width:1000px){.settings-sidebar{width:196px}.settings-content{padding:16px}}@media(max-width:760px){.settings-sidebar{width:176px;padding:8px}.settings-nav{font-size:12px;gap:6px;padding:5px 8px}.settings-content{padding:12px}}.settings-content>.settings-wrap>header h1{font-size:20px;line-height:1.2}.settings-models [class*=bg-slate-]{background:hsl(var(--muted) / .4)}.settings-models [class*=border-slate-]{border-color:hsl(var(--border))}.settings-models [class*=text-slate-]{color:hsl(var(--muted-foreground))}.settings-models .text-slate-100,.settings-models .text-slate-200,.settings-models .text-white{color:hsl(var(--foreground))}.settings-screen main main{min-height:0}/**
|
|
2
|
-
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
|
-
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
|
-
* https://github.com/chjj/term.js
|
|
5
|
-
* @license MIT
|
|
6
|
-
*
|
|
7
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
-
* in the Software without restriction, including without limitation the rights
|
|
10
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
-
* furnished to do so, subject to the following conditions:
|
|
13
|
-
*
|
|
14
|
-
* The above copyright notice and this permission notice shall be included in
|
|
15
|
-
* all copies or substantial portions of the Software.
|
|
16
|
-
*
|
|
17
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
-
* THE SOFTWARE.
|
|
24
|
-
*
|
|
25
|
-
* Originally forked from (with the author's permission):
|
|
26
|
-
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
27
|
-
* http://bellard.org/jslinux/
|
|
28
|
-
* Copyright (c) 2011 Fabrice Bellard
|
|
29
|
-
* The original design remains. The terminal itself
|
|
30
|
-
* has been extended to include xterm CSI codes, among
|
|
31
|
-
* other features.
|
|
32
|
-
*/.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::-moz-selection{color:transparent}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;-moz-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:-moz-fit-content;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.terminal-renderer{width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}.terminal-renderer .xterm{height:100%}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
|
|
33
|
-
*/*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:hsl(var(--border))}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{top:0;bottom:0}.-bottom-0\.5{bottom:-.125rem}.-bottom-1{bottom:-.25rem}.-left-\[9999em\]{left:-9999em}.-right-0\.5{right:-.125rem}.-right-1{right:-.25rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-20{bottom:5rem}.bottom-3\.5{bottom:.875rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.bottom-full{bottom:100%}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[50\%\]{left:50%}.left-auto{left:auto}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-2{right:.5rem}.right-20{right:5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-6{right:1.5rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-2\.5{top:.625rem}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-5{top:1.25rem}.top-8{top:2rem}.top-\[22px\]{top:22px}.top-\[50\%\]{top:50%}.top-full{top:100%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[70\]{z-index:70}.z-\[80\]{z-index:80}.m-0{margin:0}.m-2{margin:.5rem}.m-4{margin:1rem}.m-auto{margin:auto}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.\!mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-8{margin-left:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.line-clamp-5{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-1\.5{width:.375rem;height:.375rem}.size-12{width:3rem;height:3rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[19px\]{height:19px}.h-\[26px\]{height:26px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[--radix-context-menu-content-available-height\]{max-height:var(--radix-context-menu-content-available-height)}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[65dvh\]{max-height:65dvh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[84vh\]{max-height:84vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[86vh\]{max-height:86vh}.max-h-\[90dvh\]{max-height:90dvh}.max-h-\[calc\(100dvh-190px\)\]{max-height:calc(100dvh - 190px)}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.max-h-\[min\(720px\,75vh\)\]{max-height:min(720px,75vh)}.max-h-full{max-height:100%}.max-h-none{max-height:none}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-28{min-height:7rem}.min-h-32{min-height:8rem}.min-h-48{min-height:12rem}.min-h-56{min-height:14rem}.min-h-64{min-height:16rem}.min-h-7{min-height:1.75rem}.min-h-72{min-height:18rem}.min-h-\[14rem\]{min-height:14rem}.min-h-\[160px\]{min-height:160px}.min-h-\[320px\]{min-height:320px}.min-h-\[34px\]{min-height:34px}.min-h-\[420px\]{min-height:420px}.min-h-\[42px\]{min-height:42px}.min-h-\[54px\]{min-height:54px}.min-h-\[72px\]{min-height:72px}.min-h-full{min-height:100%}.min-h-px{min-height:1px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[18rem\]{width:18rem}.w-\[218px\]{width:218px}.w-\[220px\]{width:220px}.w-\[320px\]{width:320px}.w-\[440px\]{width:440px}.w-\[480px\]{width:480px}.w-\[76px\]{width:76px}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-\[min\(24rem\,calc\(100vw-2rem\)\)\]{width:min(24rem,calc(100vw - 2rem))}.w-\[min\(48rem\,calc\(100vw-2rem\)\)\]{width:min(48rem,calc(100vw - 2rem))}.w-\[min\(64rem\,100vw\)\]{width:min(64rem,100vw)}.w-\[min\(780px\,calc\(100vw-48px\)\)\]{width:min(780px,calc(100vw - 48px))}.w-\[min\(92vw\,42rem\)\]{width:min(92vw,42rem)}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-screen{width:100vw}.min-w-0{min-width:0px}.min-w-16{min-width:4rem}.min-w-3{min-width:.75rem}.min-w-3\.5{min-width:.875rem}.min-w-4{min-width:1rem}.min-w-40{min-width:10rem}.min-w-7{min-width:1.75rem}.min-w-72{min-width:18rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[19px\]{min-width:19px}.min-w-\[320px\]{min-width:320px}.min-w-\[720px\]{min-width:720px}.min-w-\[760px\]{min-width:760px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-12{max-width:3rem}.max-w-2xl{max-width:42rem}.max-w-36{max-width:9rem}.max-w-3xl{max-width:48rem}.max-w-44{max-width:11rem}.max-w-48{max-width:12rem}.max-w-4xl{max-width:56rem}.max-w-56{max-width:14rem}.max-w-64{max-width:16rem}.max-w-\[14rem\]{max-width:14rem}.max-w-\[160px\]{max-width:160px}.max-w-\[18rem\]{max-width:18rem}.max-w-\[220px\]{max-width:220px}.max-w-\[80\%\]{max-width:80%}.max-w-\[calc\(100vw-16px\)\]{max-width:calc(100vw - 16px)}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.basis-72{flex-basis:18rem}.table-fixed{table-layout:fixed}.origin-\[--radix-context-menu-content-transform-origin\]{transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.-translate-x-1{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/2{--tw-translate-x: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.scroll-m-6{scroll-margin:1.5rem}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[1\.3fr_0\.6fr_1\.6fr_0\.8fr_1fr_24px\]{grid-template-columns:1.3fr .6fr 1.6fr .8fr 1fr 24px}.grid-cols-\[18px_90px_minmax\(0\,1fr\)\]{grid-template-columns:18px 90px minmax(0,1fr)}.grid-cols-\[220px_minmax\(0\,1fr\)\]{grid-template-columns:220px minmax(0,1fr)}.grid-cols-\[240px_minmax\(0\,1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.grid-cols-\[300px_minmax\(0\,1fr\)\]{grid-template-columns:300px minmax(0,1fr)}.grid-cols-\[32px_minmax\(0\,1fr\)\]{grid-template-columns:32px minmax(0,1fr)}.grid-cols-\[4rem_minmax\(0\,1fr\)\]{grid-template-columns:4rem minmax(0,1fr)}.grid-cols-\[5\.75rem_minmax\(0\,1fr\)\]{grid-template-columns:5.75rem minmax(0,1fr)}.grid-cols-\[56px_minmax\(0\,1fr\)\]{grid-template-columns:56px minmax(0,1fr)}.grid-cols-\[80px_1fr\]{grid-template-columns:80px 1fr}.grid-cols-\[8rem_minmax\(0\,1fr\)\]{grid-template-columns:8rem minmax(0,1fr)}.grid-cols-\[9rem_minmax\(0\,1fr\)\]{grid-template-columns:9rem minmax(0,1fr)}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_repeat\(3\,auto\)\]{grid-template-columns:minmax(0,1fr) repeat(3,auto)}.grid-cols-\[minmax\(190px\,0\.38fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(190px,.38fr) minmax(0,1fr)}.grid-cols-\[minmax\(260px\,320px\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(260px,320px) minmax(0,1fr)}.grid-rows-none{grid-template-rows:none}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-center{align-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.divide-slate-800>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 41 59 / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overscroll-contain{overscroll-behavior:contain}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[1\.25rem\]{border-radius:1.25rem}.rounded-\[1\.75rem\]{border-radius:1.75rem}.rounded-\[10px\]{border-radius:10px}.rounded-\[2rem\]{border-radius:2rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-r-0{border-right-width:0px}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-400\/25{border-color:#fbbf2440}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/25{border-color:#f59e0b40}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/35{border-color:#f59e0b59}.border-amber-500\/40{border-color:#f59e0b66}.border-amber-500\/50{border-color:#f59e0b80}.border-amber-700{--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.border-amber-800\/60{border-color:#92400e99}.border-amber-800\/70{border-color:#92400eb3}.border-amber-800\/80{border-color:#92400ecc}.border-amber-900{--tw-border-opacity: 1;border-color:rgb(120 53 15 / var(--tw-border-opacity, 1))}.border-amber-900\/50{border-color:#78350f80}.border-amber-900\/60{border-color:#78350f99}.border-amber-900\/80{border-color:#78350fcc}.border-background{border-color:hsl(var(--background))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-cyan-400\/40{border-color:#22d3ee66}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-emerald-500\/30{border-color:#10b9814d}.border-emerald-500\/40{border-color:#10b98166}.border-input{border-color:hsl(var(--input))}.border-orange-500\/30{border-color:#f973164d}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/40{border-color:#ef444466}.border-red-500\/50{border-color:#ef444480}.border-rose-500\/30{border-color:#f43f5e4d}.border-rose-700{--tw-border-opacity: 1;border-color:rgb(190 18 60 / var(--tw-border-opacity, 1))}.border-rose-900{--tw-border-opacity: 1;border-color:rgb(136 19 55 / var(--tw-border-opacity, 1))}.border-rose-900\/60{border-color:#88133799}.border-rose-900\/70{border-color:#881337b3}.border-sky-300{--tw-border-opacity: 1;border-color:rgb(125 211 252 / var(--tw-border-opacity, 1))}.border-sky-400{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.border-sky-500\/60{border-color:#0ea5e999}.border-sky-500\/70{border-color:#0ea5e9b3}.border-sky-700\/70{border-color:#0369a1b3}.border-sky-800\/60{border-color:#07598599}.border-sky-900{--tw-border-opacity: 1;border-color:rgb(12 74 110 / var(--tw-border-opacity, 1))}.border-sky-900\/70{border-color:#0c4a6eb3}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-500{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.border-slate-600{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-700\/70{border-color:#334155b3}.border-slate-700\/90{border-color:#334155e6}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/80{border-color:#1e293bcc}.border-transparent{border-color:transparent}.bg-\[\#07111f\]\/95{background-color:#07111ff2}.bg-\[\#0b1220\]{--tw-bg-opacity: 1;background-color:rgb(11 18 32 / var(--tw-bg-opacity, 1))}.bg-\[\#30d158\]{--tw-bg-opacity: 1;background-color:rgb(48 209 88 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(var\(--primary\)\)\]{background-color:hsl(var(--primary))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-400\/20{background-color:#fbbf2433}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/5{background-color:#f59e0b0d}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-amber-950\/20{background-color:#451a0333}.bg-amber-950\/30{background-color:#451a034d}.bg-background{background-color:hsl(var(--background))}.bg-background\/45{background-color:hsl(var(--background) / .45)}.bg-background\/55{background-color:hsl(var(--background) / .55)}.bg-background\/60{background-color:hsl(var(--background) / .6)}.bg-background\/70{background-color:hsl(var(--background) / .7)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-background\/95{background-color:hsl(var(--background) / .95)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/30{background-color:#0000004d}.bg-black\/35{background-color:#00000059}.bg-black\/45{background-color:#00000073}.bg-black\/60{background-color:#0009}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-border\/60{background-color:hsl(var(--border) / .6)}.bg-card{background-color:hsl(var(--card))}.bg-card\/50{background-color:hsl(var(--card) / .5)}.bg-card\/55{background-color:hsl(var(--card) / .55)}.bg-card\/60{background-color:hsl(var(--card) / .6)}.bg-card\/70{background-color:hsl(var(--card) / .7)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/85{background-color:hsl(var(--card) / .85)}.bg-card\/90{background-color:hsl(var(--card) / .9)}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.bg-cyan-500\/15{background-color:#06b6d426}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/15{background-color:hsl(var(--destructive) / .15)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-300{--tw-bg-opacity: 1;background-color:rgb(110 231 183 / var(--tw-bg-opacity, 1))}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-emerald-950\/20{background-color:#022c2233}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/15{background-color:hsl(var(--muted) / .15)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/35{background-color:hsl(var(--muted) / .35)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/45{background-color:hsl(var(--muted) / .45)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/55{background-color:hsl(var(--muted) / .55)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-muted\/70{background-color:hsl(var(--muted) / .7)}.bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity, 1))}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-orange-500\/5{background-color:#f973160d}.bg-orange-700{--tw-bg-opacity: 1;background-color:rgb(194 65 12 / var(--tw-bg-opacity, 1))}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-popover\/95{background-color:hsl(var(--popover) / .95)}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/\[0\.04\]{background-color:hsl(var(--primary) / .04)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.bg-rose-400{--tw-bg-opacity: 1;background-color:rgb(251 113 133 / var(--tw-bg-opacity, 1))}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/10{background-color:#f43f5e1a}.bg-rose-500\/15{background-color:#f43f5e26}.bg-rose-600{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1))}.bg-rose-950\/30{background-color:#4c05194d}.bg-rose-950\/40{background-color:#4c051966}.bg-rose-950\/90{background-color:#4c0519e6}.bg-rose-950\/95{background-color:#4c0519f2}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-sky-500\/20{background-color:#0ea5e933}.bg-sky-600{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.bg-sky-700{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.bg-sky-950{--tw-bg-opacity: 1;background-color:rgb(8 47 73 / var(--tw-bg-opacity, 1))}.bg-sky-950\/20{background-color:#082f4933}.bg-sky-950\/30{background-color:#082f494d}.bg-sky-950\/35{background-color:#082f4959}.bg-sky-950\/70{background-color:#082f49b3}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.bg-slate-500\/15{background-color:#64748b26}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-slate-700\/25{background-color:#33415540}.bg-slate-700\/60{background-color:#33415599}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/60{background-color:#1e293b99}.bg-slate-800\/80{background-color:#1e293bcc}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/35{background-color:#0f172a59}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-900\/60{background-color:#0f172a99}.bg-slate-900\/70{background-color:#0f172ab3}.bg-slate-900\/80{background-color:#0f172acc}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/30{background-color:#0206174d}.bg-slate-950\/40{background-color:#02061766}.bg-slate-950\/50{background-color:#02061780}.bg-slate-950\/60{background-color:#02061799}.bg-slate-950\/80{background-color:#020617cc}.bg-slate-950\/90{background-color:#020617e6}.bg-slate-950\/95{background-color:#020617f2}.bg-stone-100{--tw-bg-opacity: 1;background-color:rgb(245 245 244 / var(--tw-bg-opacity, 1))}.bg-teal-100{--tw-bg-opacity: 1;background-color:rgb(204 251 241 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-\[radial-gradient\(circle_at_top\,rgba\(70\,130\,145\,0\.18\)\,transparent_30\%\)\,radial-gradient\(circle_at_bottom_left\,rgba\(195\,172\,135\,0\.16\)\,transparent_35\%\)\]{background-image:radial-gradient(circle at top,rgba(70,130,145,.18),transparent 30%),radial-gradient(circle at bottom left,rgba(195,172,135,.16),transparent 35%)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-stone-100{--tw-gradient-from: #f5f5f4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 245 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-neutral-900{--tw-gradient-to: #171717 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.fill-sky-400{fill:#38bdf8}.fill-sky-400\/30{fill:#38bdf84d}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-7{padding-top:1.75rem;padding-bottom:1.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[5px\]{padding-top:5px;padding-bottom:5px}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.pt-9{padding-top:2.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[0\.62rem\]{font-size:.62rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.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)}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-\[18px\]{line-height:18px}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[-0\.01em\]{letter-spacing:-.01em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.24em\]{letter-spacing:.24em}.tracking-\[0\.28em\]{letter-spacing:.28em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-\[0\.38em\]{letter-spacing:.38em}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-normal{letter-spacing:0em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#07140a\]{--tw-text-opacity: 1;color:rgb(7 20 10 / var(--tw-text-opacity, 1))}.text-\[hsl\(var\(--primary\)\)\]{color:hsl(var(--primary))}.text-amber-100{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-400\/80{color:#fbbf24cc}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-50{--tw-text-opacity: 1;color:rgb(236 254 255 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-200{--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.text-emerald-200\/70{color:#a7f3d0b3}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-900{--tw-text-opacity: 1;color:rgb(6 78 59 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-muted-foreground\/75{color:hsl(var(--muted-foreground) / .75)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-orange-300{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.text-pink-900{--tw-text-opacity: 1;color:rgb(131 24 67 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-900{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-rose-100{--tw-text-opacity: 1;color:rgb(255 228 230 / var(--tw-text-opacity, 1))}.text-rose-200{--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-200{--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.text-sky-300{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-teal-900{--tw-text-opacity: 1;color:rgb(19 78 74 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.decoration-dotted{text-decoration-style:dotted}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[-18px_18px_55px_rgba\(0\,0\,0\,0\.42\)\]{--tw-shadow: -18px 18px 55px rgba(0,0,0,.42);--tw-shadow-colored: -18px 18px 55px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_10px_rgba\(34\,211\,238\,0\.75\)\]{--tw-shadow: 0 0 10px rgba(34,211,238,.75);--tw-shadow-colored: 0 0 10px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(251\,191\,36\,0\.55\)\]{--tw-shadow: 0 0 8px rgba(251,191,36,.55);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_12px_28px_-24px_rgba\(15\,23\,42\,0\.95\)\]{--tw-shadow: 0 12px 28px -24px rgba(15,23,42,.95);--tw-shadow-colored: 0 12px 28px -24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_16px_40px_-22px_hsl\(var\(--primary\)\/0\.8\)\]{--tw-shadow: 0 16px 40px -22px hsl(var(--primary)/.8);--tw-shadow-colored: 0 16px 40px -22px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_44px_-30px_rgba\(15\,23\,42\,0\.9\)\]{--tw-shadow: 0 18px 44px -30px rgba(15,23,42,.9);--tw-shadow-colored: 0 18px 44px -30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_70px_-54px_rgba\(17\,24\,39\,0\.75\)\]{--tw-shadow: 0 18px 70px -54px rgba(17,24,39,.75);--tw-shadow-colored: 0 18px 70px -54px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_20px_80px_-64px_rgba\(17\,24\,39\,0\.8\)\]{--tw-shadow: 0 20px 80px -64px rgba(17,24,39,.8);--tw-shadow-colored: 0 20px 80px -64px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_24px_80px_-36px_rgba\(17\,24\,39\,0\.8\)\]{--tw-shadow: 0 24px 80px -36px rgba(17,24,39,.8);--tw-shadow-colored: 0 24px 80px -36px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_24px_80px_rgba\(0\,0\,0\,0\.55\)\]{--tw-shadow: 0 24px 80px rgba(0,0,0,.55);--tw-shadow-colored: 0 24px 80px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_24px_90px_-58px_rgba\(17\,24\,39\,0\.75\)\]{--tw-shadow: 0 24px 90px -58px rgba(17,24,39,.75);--tw-shadow-colored: 0 24px 90px -58px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_28px_90px_-40px_rgba\(15\,23\,42\,0\.82\)\]{--tw-shadow: 0 28px 90px -40px rgba(15,23,42,.82);--tw-shadow-colored: 0 28px 90px -40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_34px_120px_-72px_rgba\(15\,23\,42\,0\.92\)\]{--tw-shadow: 0 34px 120px -72px rgba(15,23,42,.92);--tw-shadow-colored: 0 34px 120px -72px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_34px_120px_-72px_rgba\(17\,24\,39\,0\.82\)\]{--tw-shadow: 0 34px 120px -72px rgba(17,24,39,.82);--tw-shadow-colored: 0 34px 120px -72px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_0_1px_0_rgba\(148\,163\,184\,0\.18\)\]{--tw-shadow: inset 0 1px 0 rgba(148,163,184,.18);--tw-shadow-colored: inset 0 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.03\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.03);--tw-shadow-colored: inset 0 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-slate-950\/30{--tw-shadow-color: rgb(2 6 23 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-950\/40{--tw-shadow-color: rgb(2 6 23 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-950\/45{--tw-shadow-color: rgb(2 6 23 / .45);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-primary{--tw-ring-color: hsl(var(--primary))}.ring-sky-400\/70{--tw-ring-color: rgb(56 189 248 / .7)}.ring-sky-800{--tw-ring-opacity: 1;--tw-ring-color: rgb(7 89 133 / var(--tw-ring-opacity, 1))}.ring-slate-950{--tw-ring-opacity: 1;--tw-ring-color: rgb(2 6 23 / var(--tw-ring-opacity, 1))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);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)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));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)}.invert{--tw-invert: invert(100%);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)}.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{--tw-backdrop-blur: blur(8px);-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-\[1px\]{--tw-backdrop-blur: blur(1px);-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(4px);-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-xl{--tw-backdrop-blur: blur(24px);-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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-150{transition-delay:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[contain-intrinsic-size\:auto_180px\]{contain-intrinsic-size:auto 180px}.\[content-visibility\:auto\]{content-visibility:auto}.\[overflow-anchor\:none\]{overflow-anchor:none}.\[scrollbar-width\:none\]{scrollbar-width:none}.\[writing-mode\:vertical-rl\]{writing-mode:vertical-rl}:root{--background: 40 24% 96%;--foreground: 210 22% 13%;--card: 0 0% 100%;--card-foreground: 210 22% 13%;--popover: 0 0% 100%;--popover-foreground: 210 22% 13%;--primary: 191 52% 32%;--primary-foreground: 0 0% 100%;--secondary: 42 16% 90%;--secondary-foreground: 210 22% 13%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--muted: 42 16% 90%;--muted-foreground: 212 13% 36%;--accent: 42 16% 90%;--accent-foreground: 210 22% 13%;--border: 38 16% 80%;--input: 38 16% 80%;--ring: 191 52% 32%}.dark{--background: 210 17% 10%;--foreground: 42 32% 95%;--card: 215 18% 14%;--card-foreground: 42 32% 95%;--popover: 215 18% 14%;--popover-foreground: 42 32% 95%;--primary: 190 46% 56%;--primary-foreground: 210 17% 10%;--secondary: 214 14% 18%;--secondary-foreground: 42 32% 95%;--destructive: 0 63% 31%;--destructive-foreground: 42 32% 95%;--muted: 214 14% 18%;--muted-foreground: 42 12% 74%;--accent: 214 14% 18%;--accent-foreground: 42 32% 95%;--border: 214 14% 22%;--input: 214 14% 22%;--ring: 190 46% 56%}*{box-sizing:border-box}html{width:100%;min-height:100%;overflow-x:hidden}body{margin:0;width:100%;max-width:100%;min-height:100vh;min-height:100dvh;overflow-x:hidden;color:hsl(var(--foreground));background:radial-gradient(circle at top,rgba(80,132,142,.18),transparent 28%),radial-gradient(circle at bottom left,rgba(210,178,130,.16),transparent 30%),hsl(var(--background));font-family:ui-sans-serif,system-ui,sans-serif;text-rendering:optimizeLegibility}#root{width:100%;max-width:100%;min-height:100vh;min-height:100dvh;overflow-x:hidden}button,input,textarea,iframe,canvas{font:inherit}::-moz-selection{background:#3a7a8433}::selection{background:#3a7a8433}@keyframes fade-rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes scale-fade{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes panel-in{0%{opacity:0;transform:translate(18px)}to{opacity:1;transform:translate(0)}}.animate-fade-rise{animation:fade-rise .56s cubic-bezier(.22,1,.36,1) both}.animate-scale-fade{animation:scale-fade .18s cubic-bezier(.22,1,.36,1) both}.animate-panel-in{animation:panel-in .26s cubic-bezier(.22,1,.36,1) both}@property --shimmer-track-height{syntax: "<length>"; inherits: true; initial-value: 200px;}@property --shimmer-angle{syntax: "<angle>"; inherits: true; initial-value: 15deg;}@keyframes tw-shimmer{0%{background-position:100% 0}}.shimmer{--_gradient-width: calc( var(--_spread) + var(--shimmer-track-height) * tan(var(--shimmer-angle)) );--_active-distance: calc( var(--shimmer-track-width, 200px) + var(--_gradient-width) );--_duration: var( --shimmer-duration, calc(var(--_active-distance) / var(--_speed) / 1px * 1000) );--_repeat-delay: var(--shimmer-repeat-delay, calc(20000 / var(--_speed)));--_repeat-delay-px: calc( var(--_repeat-delay) * var(--_active-distance) / var(--_duration) );--_xy-offset-px: calc( (var(--shimmer-x, 0) + var(--shimmer-y, 0) * tan(var(--shimmer-angle))) * 1px );--_bg-width: calc( 100% + var(--shimmer-track-width, 100%) + var(--_gradient-width) + var(--_repeat-delay-px) );--_position: calc( var( --shimmer-track-width, (100% - var(--_gradient-width) - var(--_repeat-delay-px)) / 2 ) + var(--_gradient-width) / 2 + var(--_repeat-delay-px) - var(--_xy-offset-px) );--_mix-96: color-mix(in oklch, var(--_fg), var(--_bg) 96%);--_mix-83: color-mix(in oklch, var(--_fg), var(--_bg) 83%);--_mix-67: color-mix(in oklch, var(--_fg), var(--_bg) 67%);--_mix-50: color-mix(in oklch, var(--_fg), var(--_bg) 50%);--_mix-33: color-mix(in oklch, var(--_fg), var(--_bg) 33%);--_mix-17: color-mix(in oklch, var(--_fg), var(--_bg) 17%);--_mix-4: color-mix(in oklch, var(--_fg), var(--_bg) 4%);background:linear-gradient(calc(90deg + var(--shimmer-angle)),var(--_bg) calc(var(--_position) - var(--_spread) * .5),var(--_mix-96) calc(var(--_position) - var(--_spread) * .44),var(--_mix-83) calc(var(--_position) - var(--_spread) * .37),var(--_mix-67) calc(var(--_position) - var(--_spread) * .31),var(--_mix-50) calc(var(--_position) - var(--_spread) * .25),var(--_mix-33) calc(var(--_position) - var(--_spread) * .19),var(--_mix-17) calc(var(--_position) - var(--_spread) * .12),var(--_mix-4) calc(var(--_position) - var(--_spread) * .06),var(--_fg) var(--_position),var(--_mix-4) calc(var(--_position) + var(--_spread) * .06),var(--_mix-17) calc(var(--_position) + var(--_spread) * .12),var(--_mix-33) calc(var(--_position) + var(--_spread) * .19),var(--_mix-50) calc(var(--_position) + var(--_spread) * .25),var(--_mix-67) calc(var(--_position) + var(--_spread) * .31),var(--_mix-83) calc(var(--_position) + var(--_spread) * .37),var(--_mix-96) calc(var(--_position) + var(--_spread) * .44),var(--_bg) calc(var(--_position) + var(--_spread) * .5)) 0 0 / var(--_bg-width) 100% no-repeat;animation:tw-shimmer 1s linear 0s infinite backwards;animation-duration:calc((var(--_duration) + var(--_repeat-delay)) * 1ms)}.shimmer:not(.shimmer-bg){--_speed: var(--shimmer-speed, 200);--_spread: var(--shimmer-spread, calc(4ch + 80px) );--_bg: currentColor;--_fg: var(--shimmer-color, rgb(255 255 255 / .28));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.dark .shimmer:not(.shimmer-bg){--_fg: var(--shimmer-color, rgb(255 255 255 / .68))}.shimmer-bg{--_speed: var(--shimmer-speed, 1000);--_spread: var(--shimmer-spread, 480px);--_bg: transparent;--_fg: var(--shimmer-color, rgb(0 0 0 / .06))}.dark .shimmer-bg{--_fg: var(--shimmer-color, rgb(0 0 0 / .3))}.shimmer-invert:not(.shimmer-bg){--shimmer-color: rgb(255 255 255 / .72)}.dark .shimmer-invert:not(.shimmer-bg){--shimmer-color: rgb(255 255 255 / .22)}@supports (color: oklch(from currentColor l c h)){.shimmer:not(.shimmer-bg){--_fg: var( --shimmer-color, oklch(from currentColor l c h / calc(alpha/5) ) )}.dark .shimmer:not(.shimmer-bg){--_fg: var( --shimmer-color, oklch(from currentColor max(.8, calc(l + .4) ) c h / calc(alpha + .4) ) )}.shimmer-bg{--_fg: var(--shimmer-color, oklch(from currentColor 0 c h / .06))}.dark .shimmer-bg{--_fg: var(--shimmer-color, oklch(from currentColor 0 c h / .3))}.shimmer-invert:not(.shimmer-bg){--shimmer-color: oklch( from currentColor min( calc(l - .4) , .2) c h / calc(alpha + .4) )}.dark .shimmer-invert:not(.shimmer-bg){--shimmer-color: oklch(from currentColor l c h / calc(alpha/5) )}}.shimmer-container{container-type:inline-size}.shimmer-container .shimmer{--shimmer-track-width: 100cqw;--shimmer-track-height: max(100cqh, 50cqw, 200px)}@-moz-document url-prefix(){.shimmer{--_duration: var(--shimmer-duration, calc(375000 / var(--_speed)))}}@media(prefers-reduced-motion:reduce){.animate-fade-rise,.animate-scale-fade,.animate-panel-in,.shimmer{animation:none}.shimmer:not(.shimmer-bg){background:none;-webkit-text-fill-color:currentColor}}.suiji-theme{--background: 42 32% 96%;--foreground: 145 12% 20%;--card: 45 30% 99%;--card-foreground: 145 12% 20%;--popover: 45 30% 99%;--popover-foreground: 145 12% 20%;--primary: 151 22% 34%;--primary-foreground: 0 0% 100%;--secondary: 143 17% 90%;--secondary-foreground: 145 12% 20%;--muted: 40 18% 92%;--muted-foreground: 140 6% 43%;--accent: 143 20% 93%;--accent-foreground: 145 12% 20%;--destructive: 0 65% 42%;--destructive-foreground: 0 0% 100%;--border: 45 14% 84%;--input: 45 14% 84%;--ring: 151 22% 34%;color:hsl(var(--foreground));color-scheme:light}.dark .suiji-theme{--background: 150 12% 9%;--foreground: 140 15% 92%;--card: 150 10% 13%;--card-foreground: 140 15% 92%;--popover: 150 10% 13%;--popover-foreground: 140 15% 92%;--primary: 151 32% 64%;--primary-foreground: 150 20% 10%;--secondary: 150 14% 20%;--secondary-foreground: 140 15% 92%;--muted: 150 8% 18%;--muted-foreground: 140 8% 67%;--accent: 150 16% 23%;--accent-foreground: 140 15% 92%;--destructive: 0 75% 72%;--destructive-foreground: 0 35% 12%;--border: 150 8% 28%;--input: 150 8% 28%;--ring: 151 32% 64%;color-scheme:dark}:where(.suiji-theme,.suiji-theme *){border-color:hsl(var(--border))}@keyframes suiji-drawer-enter{0%{transform:translate(100%)}to{transform:translate(0)}}@media(prefers-reduced-motion:no-preference){.suiji-drawer[open]{animation:suiji-drawer-enter .18s ease-out}}[data-native-overlay-pending]{opacity:0!important;pointer-events:none!important}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-slate-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-500::placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.backdrop\:bg-black\/30::backdrop{background-color:#0000004d}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-x-0:before{content:var(--tw-content);left:0;right:0}.before\:inset-y-0:before{content:var(--tw-content);top:0;bottom:0}.before\:bottom-0:before{content:var(--tw-content);bottom:0}.before\:left-1\/2:before{content:var(--tw-content);left:50%}.before\:top-1\/2:before{content:var(--tw-content);top:50%}.before\:h-0\.5:before{content:var(--tw-content);height:.125rem}.before\:h-px:before{content:var(--tw-content);height:1px}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:w-px:before{content:var(--tw-content);width:1px}.before\:-translate-x-1\/2:before{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:-translate-y-1\/2:before{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:bg-sky-400:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.before\:bg-sky-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.before\:bg-transparent:before{content:var(--tw-content);background-color:transparent}.before\:transition-colors:before{content:var(--tw-content);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.first\:border-0:first-child{border-width:0px}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:border-cyan-400\/45:focus-within{border-color:#22d3ee73}.focus-within\:border-slate-400:focus-within{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.focus-within\:shadow-\[0_18px_50px_rgba\(2\,6\,23\,0\.52\)\,0_0_0_1px_rgba\(34\,211\,238\,0\.12\)\]:focus-within{--tw-shadow: 0 18px 50px rgba(2,6,23,.52),0 0 0 1px rgba(34,211,238,.12);--tw-shadow-colored: 0 18px 50px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:-translate-y-0\.5:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-border:hover{border-color:hsl(var(--border))}.hover\:border-cyan-300\/60:hover{border-color:#67e8f999}.hover\:border-cyan-400\/40:hover{border-color:#22d3ee66}.hover\:border-cyan-400\/45:hover{border-color:#22d3ee73}.hover\:border-slate-500:hover{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.hover\:border-slate-600:hover{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.hover\:border-slate-700:hover{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-500:hover{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-950\/30:hover{background-color:#451a034d}.hover\:bg-black\/5:hover{background-color:#0000000d}.hover\:bg-cyan-400\/10:hover{background-color:#22d3ee1a}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/20:hover{background-color:#10b98133}.hover\:bg-emerald-950\/30:hover{background-color:#022c224d}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted) / .3)}.hover\:bg-muted\/35:hover{background-color:hsl(var(--muted) / .35)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-muted\/70:hover{background-color:hsl(var(--muted) / .7)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-500\/15:hover{background-color:#ef444426}.hover\:bg-rose-500:hover{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-500\/90:hover{background-color:#f43f5ee6}.hover\:bg-rose-950\/50:hover{background-color:#4c051980}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sky-500:hover{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.hover\:bg-sky-500\/10:hover{background-color:#0ea5e91a}.hover\:bg-sky-500\/20:hover{background-color:#0ea5e933}.hover\:bg-sky-600:hover{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-600:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700\/70:hover{background-color:#334155b3}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/40:hover{background-color:#1e293b66}.hover\:bg-slate-800\/50:hover{background-color:#1e293b80}.hover\:bg-slate-800\/80:hover{background-color:#1e293bcc}.hover\:bg-slate-900:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-900\/45:hover{background-color:#0f172a73}.hover\:bg-slate-900\/70:hover{background-color:#0f172ab3}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-100:hover{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.hover\:text-cyan-100:hover{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.hover\:text-cyan-50:hover{--tw-text-opacity: 1;color:rgb(236 254 255 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-indigo-200:hover{--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-rose-100:hover{--tw-text-opacity: 1;color:rgb(255 228 230 / var(--tw-text-opacity, 1))}.hover\:text-rose-200:hover{--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.hover\:text-rose-300:hover{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.hover\:text-rose-400:hover{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.hover\:text-sky-100:hover{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.hover\:text-sky-200:hover{--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.hover\:text-sky-300:hover{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.hover\:text-slate-100:hover{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.hover\:text-slate-300:hover{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_22px_50px_-24px_hsl\(var\(--primary\)\/0\.82\)\]:hover{--tw-shadow: 0 22px 50px -24px hsl(var(--primary)/.82);--tw-shadow-colored: 0 22px 50px -24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-\[0_22px_50px_-24px_rgba\(244\,63\,94\,0\.82\)\]:hover{--tw-shadow: 0 22px 50px -24px rgba(244,63,94,.82);--tw-shadow-colored: 0 22px 50px -24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:before\:bg-sky-400\/60:hover:before{content:var(--tw-content);background-color:#38bdf899}.focus\:border-primary:focus{border-color:hsl(var(--primary))}.focus\:border-primary\/50:focus{border-color:hsl(var(--primary) / .5)}.focus\:border-sky-400:focus{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.focus\:border-sky-500:focus{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.focus\:border-sky-600:focus{--tw-border-opacity: 1;border-color:rgb(2 132 199 / var(--tw-border-opacity, 1))}.focus\:border-slate-400:focus{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.focus\:border-slate-500:focus{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-muted:focus{background-color:hsl(var(--muted))}.focus\:bg-transparent:focus{background-color:transparent}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-amber-300:focus{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.focus\:text-muted-foreground:focus{color:hsl(var(--muted-foreground))}.focus\:text-rose-400:focus{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-slate-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(100 116 139 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:bg-slate-700:focus-visible{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.focus-visible\:bg-slate-900:focus-visible{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.focus-visible\:text-slate-100:focus-visible{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.focus-visible\:text-slate-200:focus-visible{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.focus-visible\:text-slate-300:focus-visible{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-cyan-300:focus-visible{outline-color:#67e8f9}.focus-visible\:outline-emerald-400:focus-visible{outline-color:#34d399}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:outline-sky-400:focus-visible{outline-color:#38bdf8}.focus-visible\:outline-slate-300:focus-visible{outline-color:#cbd5e1}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset: inset}.focus-visible\:ring-primary\/30:focus-visible{--tw-ring-color: hsl(var(--primary) / .3)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sky-400:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(56 189 248 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-slate-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(100 116 139 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.focus-visible\:before\:bg-sky-400\/60:focus-visible:before{content:var(--tw-content);background-color:#38bdf899}.active\:scale-\[0\.985\]:active{--tw-scale-x: .985;--tw-scale-y: .985;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:bg-cyan-400\/15:active{background-color:#22d3ee26}.active\:bg-cyan-400\/35:active{background-color:#22d3ee59}.active\:bg-slate-700:active{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.active\:bg-slate-800:active{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-slate-700:disabled{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.disabled\:border-slate-800:disabled{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.disabled\:bg-slate-800\/70:disabled{background-color:#1e293bb3}.disabled\:bg-slate-900\/50:disabled{background-color:#0f172a80}.disabled\:text-muted-foreground:disabled{color:hsl(var(--muted-foreground))}.disabled\:text-slate-500:disabled{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.disabled\:text-slate-600:disabled{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-100{opacity:1}.group:focus-visible .group-focus-visible\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-pressed\:bg-accent[aria-pressed=true]{background-color:hsl(var(--accent))}.aria-selected\:bg-slate-800\/80[aria-selected=true]{background-color:#1e293bcc}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-muted[data-state=open]{background-color:hsl(var(--muted))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.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-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[resizing\=true\]\:before\:w-0\.5[data-resizing=true]:before{content:var(--tw-content);width:.125rem}.data-\[resizing\=true\]\:before\:bg-sky-400[data-resizing=true]:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}@media(prefers-reduced-motion:no-preference){@keyframes pulse{50%{opacity:.5}}.motion-safe\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}}.dark\:bg-blue-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(23 37 84 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:bg-orange-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(67 20 7 / var(--tw-bg-opacity, 1))}.dark\:bg-pink-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(80 7 36 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 7 100 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(4 47 46 / var(--tw-bg-opacity, 1))}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-orange-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity, 1))}.dark\:text-pink-200:is(.dark *){--tw-text-opacity: 1;color:rgb(251 207 232 / var(--tw-text-opacity, 1))}.dark\:text-purple-200:is(.dark *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-teal-200:is(.dark *){--tw-text-opacity: 1;color:rgb(153 246 228 / var(--tw-text-opacity, 1))}@media(max-width:1379px){.max-\[1379px\]\:fixed{position:fixed}.max-\[1379px\]\:inset-y-0{top:0;bottom:0}.max-\[1379px\]\:right-0{right:0}.max-\[1379px\]\:z-50{z-index:50}.max-\[1379px\]\:w-\[min\(92vw\,420px\)\]{width:min(92vw,420px)}.max-\[1379px\]\:shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media not all and (min-width:1024px){.max-lg\:min-w-0{min-width:0px}.max-lg\:flex-1{flex:1 1 0%}}@media not all and (min-width:768px){.max-md\:mt-0{margin-top:0}.max-md\:block{display:block}.max-md\:flex{display:flex}.max-md\:contents{display:contents}.max-md\:hidden{display:none}.max-md\:w-28{width:7rem}.max-md\:max-w-40{max-width:10rem}.max-md\:shrink-0{flex-shrink:0}.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.max-md\:grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.max-md\:gap-2{gap:.5rem}.max-md\:overflow-hidden{overflow:hidden}.max-md\:overflow-x-auto{overflow-x:auto}.max-md\:border-b{border-bottom-width:1px}.max-md\:border-r-0{border-right-width:0px}.max-md\:px-3{padding-left:.75rem;padding-right:.75rem}.max-md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.max-md\:\[scrollbar-width\:none\]{scrollbar-width:none}}@media not all and (min-width:640px){.max-sm\:hidden{display:none}.max-sm\:w-full{width:100%}.max-sm\:max-w-36{max-width:9rem}.max-sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.max-sm\:flex-col{flex-direction:column}}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:hidden{display:none}.sm\:w-\[560px\]{width:560px}.sm\:max-w-2xl,.sm\:max-w-\[42rem\]{max-width:42rem}.sm\:max-w-\[460px\]{max-width:460px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-7{padding:1.75rem}.sm\:p-9{padding:2.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}}@media(min-width:768px){.md\:h-8{height:2rem}.md\:w-8{width:2rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:bg-primary\/10{background-color:hsl(var(--primary) / .1)}.md\:p-9{padding:2.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,0\.9fr\)_minmax\(0\,1\.1fr\)\]{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1\.4fr\)_minmax\(280px\,0\.6fr\)\]{grid-template-columns:minmax(0,1.4fr) minmax(280px,.6fr)}.xl\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(280px\,0\.7fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr)}.xl\:grid-cols-\[minmax\(280px\,0\.7fr\)_minmax\(0\,1\.3fr\)\]{grid-template-columns:minmax(280px,.7fr) minmax(0,1.3fr)}}@media(min-width:1380px){.min-\[1380px\]\:block{display:block}.min-\[1380px\]\:hidden{display:none}.min-\[1380px\]\:grid-cols-\[300px_minmax\(0\,1fr\)_380px\]{grid-template-columns:300px minmax(0,1fr) 380px}}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}@media not all and (min-width:768px){.max-md\:\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}}.\[\&\>div\]\:shrink-0>div{flex-shrink:0}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&_\.rw-image-preview__button\]\:min-h-0 .rw-image-preview button{min-height:0px}.\[\&_\.rw-image-preview__open\]\:hidden .rw-image-preview open{display:none}.\[\&_a\]\:break-all a{word-break:break-all}.\[\&_a\]\:text-cyan-300 a{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.\[\&_a\]\:text-primary a{color:hsl(var(--primary))}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_blockquote\]\:border-l blockquote{border-left-width:1px}.\[\&_blockquote\]\:border-slate-700 blockquote{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.\[\&_blockquote\]\:pl-3 blockquote{padding-left:.75rem}.\[\&_code\]\:rounded code{border-radius:.25rem}.\[\&_code\]\:bg-slate-900 code{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.\[\&_code\]\:px-1 code{padding-left:.25rem;padding-right:.25rem}.\[\&_h1\]\:mb-3 h1{margin-bottom:.75rem}.\[\&_h1\]\:text-2xl h1{font-size:1.5rem;line-height:2rem}.\[\&_h1\]\:font-semibold h1{font-weight:600}.\[\&_h2\]\:mb-2 h2{margin-bottom:.5rem}.\[\&_h2\]\:mt-6 h2{margin-top:1.5rem}.\[\&_h2\]\:text-xl h2{font-size:1.25rem;line-height:1.75rem}.\[\&_h2\]\:font-semibold h2{font-weight:600}.\[\&_h3\]\:mb-2 h3{margin-bottom:.5rem}.\[\&_h3\]\:mt-5 h3{margin-top:1.25rem}.\[\&_h3\]\:text-lg h3{font-size:1.125rem;line-height:1.75rem}.\[\&_h3\]\:font-semibold h3{font-weight:600}.\[\&_hr\]\:border-slate-800 hr{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_img\]\:my-4 img{margin-top:1rem;margin-bottom:1rem}.\[\&_img\]\:max-w-full img{max-width:100%}.\[\&_img\]\:cursor-zoom-in img{cursor:zoom-in}.\[\&_img\]\:rounded-lg img{border-radius:.5rem}.\[\&_img\]\:border img{border-width:1px}.\[\&_img\]\:border-slate-800 img{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_li\]\:my-1 li{margin-top:.25rem;margin-bottom:.25rem}.\[\&_li\]\:ml-4 li{margin-left:1rem}.\[\&_ol\]\:ml-5 ol{margin-left:1.25rem}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_p\+p\]\:mt-2 p+p{margin-top:.5rem}.\[\&_p\]\:my-3 p{margin-top:.75rem;margin-bottom:.75rem}.\[\&_pre\]\:my-4 pre{margin-top:1rem;margin-bottom:1rem}.\[\&_pre\]\:overflow-auto pre{overflow:auto}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_pre\]\:rounded-lg pre{border-radius:.5rem}.\[\&_pre\]\:bg-slate-900 pre{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.\[\&_pre\]\:p-3 pre{padding:.75rem}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_table\]\:my-4 table{margin-top:1rem;margin-bottom:1rem}.\[\&_table\]\:block table{display:block}.\[\&_table\]\:w-full table{width:100%}.\[\&_table\]\:border-collapse table{border-collapse:collapse}.\[\&_table\]\:overflow-x-auto table{overflow-x:auto}.\[\&_td\]\:border td{border-width:1px}.\[\&_td\]\:border-slate-800 td{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_td\]\:px-2 td{padding-left:.5rem;padding-right:.5rem}.\[\&_td\]\:py-1 td{padding-top:.25rem;padding-bottom:.25rem}.\[\&_th\]\:border th{border-width:1px}.\[\&_th\]\:border-slate-800 th{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_th\]\:px-2 th{padding-left:.5rem;padding-right:.5rem}.\[\&_th\]\:py-1 th{padding-top:.25rem;padding-bottom:.25rem}.\[\&_ul\]\:ml-5 ul{margin-left:1.25rem}.\[\&_ul\]\:list-disc ul{list-style-type:disc}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as r,b as e,a,S as s}from"./chunk-OYMX7WX6-CdQRrw_z.js";import{_ as i}from"./index-BPgmi_HT.js";import"./chunk-55IACEB6-npi1DjnI.js";import"./chunk-EDXVE4YY-6XoKXtpJ.js";import"./index-D9-cSGu-.js";import"./main-D9JUBZrL.js";import"./record-content-DBb8tU0P.js";var n={parser:a,get db(){return new s(2)},renderer:e,styles:r,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{n as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./index-D9-cSGu-.js";import o from"./connection-BL2ZiJKS.js";import"./main-D9JUBZrL.js";import"./record-content-DBb8tU0P.js";function n(){return t.jsx(o,{accountOnly:!0})}export{n as default};
|