local-serverless-stack 0.16.0 → 0.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +6 -4
- package/dist/server/engine/emulators/sqs/index.d.ts +3 -0
- package/dist/server/engine/emulators/sqs/index.d.ts.map +1 -1
- package/dist/server/engine/emulators/sqs/index.js +49 -4
- package/dist/server/engine/emulators/sqs/index.js.map +1 -1
- package/dist/server/engine/emulators/sqs/queue.d.ts +14 -0
- package/dist/server/engine/emulators/sqs/queue.d.ts.map +1 -1
- package/dist/server/engine/emulators/sqs/queue.js +79 -0
- package/dist/server/engine/emulators/sqs/queue.js.map +1 -1
- package/dist/server/services/cloudformation-parser.d.ts +9 -0
- package/dist/server/services/cloudformation-parser.d.ts.map +1 -1
- package/dist/server/services/cloudformation-parser.js +78 -12
- package/dist/server/services/cloudformation-parser.js.map +1 -1
- package/dist/server/services/gateway-manager.d.ts.map +1 -1
- package/dist/server/services/gateway-manager.js +2 -2
- package/dist/server/services/gateway-manager.js.map +1 -1
- package/dist/server/services/lambda-invoke-uri.d.ts +3 -0
- package/dist/server/services/lambda-invoke-uri.d.ts.map +1 -0
- package/dist/server/services/lambda-invoke-uri.js +32 -0
- package/dist/server/services/lambda-invoke-uri.js.map +1 -0
- package/dist/server/services/raw-api-assembler.d.ts.map +1 -1
- package/dist/server/services/raw-api-assembler.js +18 -6
- package/dist/server/services/raw-api-assembler.js.map +1 -1
- package/dist/server/services/resource-provisioner.d.ts +2 -0
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +43 -1
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/dist/ui/assets/ApisPage-9Lk0_ZLj.js +1 -0
- package/dist/ui/assets/BucketDetailPage-CdLGW5em.js +1 -0
- package/dist/ui/assets/BucketsPage-CDP95vp8.js +1 -0
- package/dist/ui/assets/DynamoPage-CV7omZpi.js +1 -0
- package/dist/ui/assets/DynamoTablePage-C8v42fy7.js +3 -0
- package/dist/ui/assets/LambdaDetailPage-DkGxePSD.js +4 -0
- package/dist/ui/assets/LambdasPage-Bg7_taxW.js +1 -0
- package/dist/ui/assets/OpenSearchCollectionPage-Ci1hHyy2.js +1 -0
- package/dist/ui/assets/OpenSearchPage-CBKqZeim.js +1 -0
- package/dist/ui/assets/{OverviewPage-qEl0a-0B.css → OverviewPage-C7JlCyW1.css} +1 -1
- package/dist/ui/assets/OverviewPage-D8lrE9rQ.js +1 -0
- package/dist/ui/assets/QueueDetailPage-D0DSIGZ2.js +1 -0
- package/dist/ui/assets/QueuesPage-BXebf6st.js +1 -0
- package/dist/ui/assets/SecretsPage-Be2Nw9BM.js +1 -0
- package/dist/ui/assets/{SecretsPage-Dnkt3P3P.css → SecretsPage-D3XYogv-.css} +1 -1
- package/dist/ui/assets/ServiceDetailPage-DZpczZ-G.js +2 -0
- package/dist/ui/assets/ServicesPage-CdzxEqs3.js +2 -0
- package/dist/ui/assets/index-C1Wb35Y8.css +1 -0
- package/dist/ui/assets/index-CGpxa55R.js +37 -0
- package/dist/ui/index.html +2 -2
- package/package.json +1 -1
- package/dist/ui/assets/ApisPage-CXVLYVM6.js +0 -1
- package/dist/ui/assets/BucketDetailPage-BU7ytv7P.js +0 -1
- package/dist/ui/assets/BucketsPage-6oRAkKhU.js +0 -1
- package/dist/ui/assets/DynamoPage-DU29K5hT.js +0 -1
- package/dist/ui/assets/DynamoTablePage-BsVCgzws.js +0 -3
- package/dist/ui/assets/LambdaDetailPage-CgDlY1Kc.js +0 -4
- package/dist/ui/assets/LambdasPage-CB59BQVb.js +0 -1
- package/dist/ui/assets/OpenSearchCollectionPage-PhV7ZitS.js +0 -1
- package/dist/ui/assets/OpenSearchPage-DMq5T-jO.js +0 -1
- package/dist/ui/assets/OverviewPage-B7i6ZutS.js +0 -1
- package/dist/ui/assets/QueueDetailPage-CDM38X1V.js +0 -1
- package/dist/ui/assets/QueuesPage-6py2nlnw.js +0 -1
- package/dist/ui/assets/SecretsPage-BlllDXAl.js +0 -1
- package/dist/ui/assets/ServiceDetailPage-ghEHM9ko.js +0 -2
- package/dist/ui/assets/ServicesPage-C0E9vXE2.js +0 -2
- package/dist/ui/assets/index-DdoMwcQX.css +0 -1
- package/dist/ui/assets/index-VlhdCpKx.js +0 -37
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as ae,m as r,e as v,W as e,t as d,$ as t,j as a,u as P,H as q,N as ze,I as A,f as c,q as g,i as s,A as k,g as h,F as D,n as J,O as $e,V as m,s as C,J as te,v as le,B as ne,C as Ve,d as W,a2 as Ie,p as se,x as qe,G as he,r as y,b as Y,a as Q,c as ue,l as xe,o as Ce,_ as Ne,z as K,y as Se,K as Me,L as Z,M as ee,w as X,Q as Ae,P as De,X as Pe,Y as ie}from"./index-CGpxa55R.js";const je=["onClick"],Ue={key:0,style:{padding:"0.75rem 1rem","border-top":"1px solid var(--tree-color-border, #e5e7eb)"}},Fe={key:0},Oe={class:"mono",style:{"white-space":"pre-wrap","word-break":"break-word","font-size":"0.78rem",background:"var(--tree-color-surface-muted, #f6f7f9)",padding:"0.5rem","border-radius":"6px","max-height":"280px",overflow:"auto"}},Te=ae({__name:"QueueSendReceivePanel",props:{queue:{}},emits:["refresh"],setup(T,{emit:L}){const _=T,j=L,z=ue(),U=y(""),R=y(0),f=y("default"),x=y(""),$=y([]),N=y(!1),S=y(null),M=y(null),B=y(10),V=y(0),E=y(0),b=y([]),F=y(!1),o=y(null),u=y({}),p=y(!1),G=y(!1),H=y({}),re=[{value:"String",label:"String"},{value:"Number",label:"Number"},{value:"Binary",label:"Binary"}],O=Y(()=>_.queue.fifo),oe=[{key:"preview",label:"Body preview"},{key:"messageId",label:"Message ID"},{key:"sentAt",label:"Sent at"},{key:"attrs",label:"Attrs",align:"right"},{key:"actions",label:"",align:"right"}],de=Y(()=>b.value.map((i,l)=>{var n;return{__id:l,__raw:i,messageId:i.messageId||"—",preview:me(i.body),sentAt:fe((n=i.attributes)==null?void 0:n.SentTimestamp),attrs:i.messageAttributes?Object.keys(i.messageAttributes).length:0}}));function me(i){if(!i)return"—";const l=i.replace(/\s+/g," ").trim();return l.length>80?`${l.slice(0,80)}…`:l}function fe(i){if(!i)return"—";const l=Number(i);return l?new Date(l).toLocaleString():"—"}function ve(){$.value.push({name:"",type:"String",value:""})}function ge(i){$.value.splice(i,1)}function pe(i){if(!i)return"";const l=i.trim();if(!(l.startsWith("{")||l.startsWith("[")))return i;try{return JSON.stringify(JSON.parse(l),null,2)}catch{return i}}function ye(i){H.value[i]=!H.value[i]}async function be(){if(!U.value.trim()){S.value="Message body is required";return}N.value=!0,S.value=null;try{const i=$.value.filter(n=>n.name.trim()),l=await Q.sendQueueMessage(_.queue.name,{body:U.value,delaySeconds:O.value?void 0:R.value||void 0,messageAttributes:i.length?i:void 0,messageGroupId:O.value?f.value||"default":void 0,messageDeduplicationId:O.value&&x.value?x.value:void 0});M.value={messageId:l.messageId,sequenceNumber:l.sequenceNumber},z.add({title:"Message sent",description:l.messageId,variant:"success"}),j("refresh")}catch(i){S.value=i.message||"Failed to send message"}finally{N.value=!1}}async function ce(){F.value=!0,o.value=null;try{const i=await Q.receiveQueueMessages(_.queue.name,{maxNumberOfMessages:B.value,visibilityTimeout:E.value,waitTimeSeconds:V.value});b.value=i.messages,i.messages.length||z.add({title:"No messages available",description:"The queue returned an empty batch.",variant:"info"}),j("refresh")}catch(i){o.value=i.message||"Failed to poll messages"}finally{F.value=!1}}async function we(i){if(!(!i.receiptHandle||!i.messageId)){u.value[i.messageId]=!0;try{await Q.deleteQueueMessage(_.queue.name,i.receiptHandle),b.value=b.value.filter(l=>l.messageId!==i.messageId),z.add({title:"Message deleted",variant:"success"}),j("refresh")}catch(l){z.add({title:"Failed to delete message",description:l.message,variant:"danger"})}finally{delete u.value[i.messageId]}}}async function ke(){G.value=!0;try{await Q.purgeQueue(_.queue.name),b.value=[],z.add({title:"Queue purged",description:"All messages were removed. It can take up to 60s to fully clear.",variant:"warning"}),j("refresh")}catch(i){z.add({title:"Failed to purge queue",description:i.message,variant:"danger"})}finally{G.value=!1,p.value=!1}}function _e(i){var l;(l=navigator.clipboard)==null||l.writeText(i).then(()=>{z.add({title:"Copied to clipboard",variant:"info"})})}return(i,l)=>(r(),v(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...l[13]||(l[13]=[s("Send a message",-1)])]),_:1}),O.value?(r(),v(e(C),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...l[14]||(l[14]=[s("FIFO",-1)])]),_:1})):c("",!0)]),_:1})]),footer:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(k),{variant:"solid",loading:N.value,onClick:be},{default:t(()=>[...l[18]||(l[18]=[s("Send message",-1)])]),_:1},8,["loading"]),a(e(k),{variant:"ghost",disabled:N.value,onClick:l[4]||(l[4]=n=>U.value="")},{default:t(()=>[...l[19]||(l[19]=[s("Clear",-1)])]),_:1},8,["disabled"])]),_:1}),M.value?(r(),v(e(g),{key:0,tone:"muted",family:"mono",size:"xs"},{default:t(()=>[s(" Last sent: "+m(M.value.messageId)+" ",1),M.value.sequenceNumber?(r(),h(D,{key:0},[s(" · seq "+m(M.value.sequenceNumber),1)],64)):c("",!0)]),_:1})):c("",!0)]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.75rem"},{default:t(()=>[a(e(q),{label:"Message body",hint:"Plain text or JSON"},{default:t(()=>[a(e(ze),{modelValue:U.value,"onUpdate:modelValue":l[0]||(l[0]=n=>U.value=n),rows:6,placeholder:'{"event": "order.created", "orderId": "abc-123"}'},null,8,["modelValue"])]),_:1}),a(e(d),{direction:"horizontal",gap:"1rem"},{default:t(()=>[O.value?c("",!0):(r(),v(e(q),{key:0,label:"Delay (seconds)",hint:"0–900",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:R.value,"onUpdate:modelValue":l[1]||(l[1]=n=>R.value=n),modelModifiers:{number:!0},type:"number",min:"0",max:"900"},null,8,["modelValue"])]),_:1})),O.value?(r(),v(e(q),{key:1,label:"MessageGroupId",hint:"Required for FIFO. Defaults to 'default'.",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:f.value,"onUpdate:modelValue":l[2]||(l[2]=n=>f.value=n),placeholder:"default"},null,8,["modelValue"])]),_:1})):c("",!0),O.value?(r(),v(e(q),{key:2,label:"MessageDeduplicationId",hint:"Optional if content-based dedup is on",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:x.value,"onUpdate:modelValue":l[3]||(l[3]=n=>x.value=n),placeholder:"auto"},null,8,["modelValue"])]),_:1})):c("",!0)]),_:1}),a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(d),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e(g),{weight:"semibold",size:"sm"},{default:t(()=>[...l[15]||(l[15]=[s("Message attributes – optional",-1)])]),_:1}),a(e(k),{size:"sm",variant:"outline",onClick:ve},{default:t(()=>[...l[16]||(l[16]=[s("Add attribute",-1)])]),_:1})]),_:1}),(r(!0),h(D,null,J($.value,(n,I)=>(r(),v(e(d),{key:`a-${I}`,direction:"horizontal",gap:"0.5rem",align:"end"},{default:t(()=>[a(e(q),{label:"Name",style:{flex:"1.4"}},{default:t(()=>[a(e(A),{modelValue:n.name,"onUpdate:modelValue":w=>n.name=w,placeholder:"contentType"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(q),{label:"Type",style:{flex:"0.9"}},{default:t(()=>[a(e($e),{modelValue:n.type,"onUpdate:modelValue":w=>n.type=w,options:re},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(q),{label:"Value",style:{flex:"2"}},{default:t(()=>[a(e(A),{modelValue:n.value,"onUpdate:modelValue":w=>n.value=w,placeholder:"application/json"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),a(e(k),{size:"sm",variant:"outline",onClick:w=>ge(I)},{default:t(()=>[...l[17]||(l[17]=[s("Remove",-1)])]),_:1},8,["onClick"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),S.value?(r(),v(e(te),{key:0,variant:"danger",dismissible:"",onDismiss:l[5]||(l[5]=n=>S.value=null)},{default:t(()=>[s(m(S.value),1)]),_:1})):c("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...l[20]||(l[20]=[s("Poll for messages",-1)])]),_:1}),a(e(C),{tone:"warning",variant:"soft"},{default:t(()=>[...l[21]||(l[21]=[s(" Messages become invisible during the visibility timeout ",-1)])]),_:1})]),_:1})]),footer:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem"},{default:t(()=>[a(e(k),{variant:"solid",loading:F.value,onClick:ce},{default:t(()=>[...l[22]||(l[22]=[s("Poll messages",-1)])]),_:1},8,["loading"]),a(e(k),{variant:"ghost",disabled:!b.value.length,onClick:l[9]||(l[9]=n=>b.value=[])},{default:t(()=>[...l[23]||(l[23]=[s(" Clear results ",-1)])]),_:1},8,["disabled"])]),_:1}),a(e(k),{size:"sm",variant:"outline",tone:"danger",onClick:l[10]||(l[10]=n=>p.value=!0)},{default:t(()=>[...l[24]||(l[24]=[s(" Purge queue ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(d),{direction:"horizontal",gap:"1rem"},{default:t(()=>[a(e(q),{label:"Max messages",hint:"1–10",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:B.value,"onUpdate:modelValue":l[6]||(l[6]=n=>B.value=n),modelModifiers:{number:!0},type:"number",min:"1",max:"10"},null,8,["modelValue"])]),_:1}),a(e(q),{label:"Visibility timeout (s)",hint:"0 keeps messages visible",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:E.value,"onUpdate:modelValue":l[7]||(l[7]=n=>E.value=n),modelModifiers:{number:!0},type:"number",min:"0"},null,8,["modelValue"])]),_:1}),a(e(q),{label:"Wait time (s)",hint:"0–20 (long polling)",style:{flex:"1"}},{default:t(()=>[a(e(A),{modelValue:V.value,"onUpdate:modelValue":l[8]||(l[8]=n=>V.value=n),modelModifiers:{number:!0},type:"number",min:"0",max:"20"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),o.value?(r(),v(e(te),{key:1,variant:"danger",dismissible:"",onDismiss:l[11]||(l[11]=n=>o.value=null)},{default:t(()=>[s(m(o.value),1)]),_:1})):c("",!0),a(e(P),{variant:"outline"},{header:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[s("Received messages ("+m(b.value.length)+")",1)]),_:1}),a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[...l[25]||(l[25]=[s(" Click a row to view the full body ",-1)])]),_:1})]),_:1})]),default:t(()=>[F.value&&!b.value.length?(r(),v(e(d),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(le),{label:"Polling..."})]),_:1})):b.value.length?(r(),v(e(Ve),{key:2,columns:oe,rows:de.value,"aria-label":"Received messages"},{"cell-preview":t(({row:n})=>[W("a",{href:"#",style:{"text-decoration":"none"},onClick:Ie(I=>ye(String(n.messageId)),["prevent"])},[a(e(g),{family:"mono",size:"sm"},{default:t(()=>[a(e(se),{name:H.value[String(n.messageId)]?"chevron-down":"chevron-right"},null,8,["name"]),s(" "+m(n.preview),1)]),_:2},1024)],8,je)]),"cell-messageId":t(({row:n})=>[a(e(g),{family:"mono",size:"xs"},{default:t(()=>[s(m(n.messageId),1)]),_:2},1024)]),"cell-sentAt":t(({row:n})=>[a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[s(m(n.sentAt),1)]),_:2},1024)]),"cell-attrs":t(({row:n})=>[Number(n.attrs)>0?(r(),v(e(C),{key:0,tone:"info",variant:"soft"},{default:t(()=>[s(m(n.attrs),1)]),_:2},1024)):(r(),v(e(g),{key:1,tone:"muted",size:"xs"},{default:t(()=>[...l[26]||(l[26]=[s("—",-1)])]),_:1}))]),"cell-actions":t(({row:n})=>[a(e(d),{direction:"horizontal",gap:"0.25rem",justify:"flex-end"},{default:t(()=>[a(e(k),{size:"sm",variant:"ghost",onClick:I=>_e(String(n.__raw.body||""))},{default:t(()=>[...l[27]||(l[27]=[s(" Copy ",-1)])]),_:1},8,["onClick"]),a(e(k),{size:"sm",variant:"outline",tone:"danger",loading:u.value[String(n.messageId)],onClick:I=>we(n.__raw)},{default:t(()=>[...l[28]||(l[28]=[s(" Delete ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)]),_:1},8,["rows"])):(r(),v(e(ne),{key:1,title:"No messages loaded",description:"Use Poll messages to fetch a batch from the queue."})),(r(!0),h(D,null,J(b.value,n=>(r(),h(D,{key:`detail-${n.messageId}`},[n.messageId&&H.value[n.messageId]?(r(),h("div",Ue,[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(C),{tone:"neutral",variant:"soft"},{default:t(()=>[s("id: "+m(n.messageId),1)]),_:2},1024),n.md5OfBody?(r(),v(e(C),{key:0,tone:"neutral",variant:"soft"},{default:t(()=>[s(" md5: "+m(n.md5OfBody.slice(0,12))+"… ",1)]),_:2},1024)):c("",!0),(r(!0),h(D,null,J(n.attributes||{},(I,w)=>(r(),v(e(C),{key:w,tone:"info",variant:"soft"},{default:t(()=>[s(m(w)+": "+m(I),1)]),_:2},1024))),128))]),_:2},1024),n.messageAttributes&&Object.keys(n.messageAttributes).length?(r(),h("div",Fe,[a(e(g),{weight:"semibold",size:"sm"},{default:t(()=>[...l[29]||(l[29]=[s("Message attributes",-1)])]),_:1}),a(e(d),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(r(!0),h(D,null,J(n.messageAttributes,(I,w)=>(r(),v(e(C),{key:`ma-${w}`,tone:"success",variant:"soft"},{default:t(()=>[s(m(w)+" ("+m(I.type||"String")+"): "+m(I.value),1)]),_:2},1024))),128))]),_:2},1024)])):c("",!0),a(e(qe)),W("pre",Oe,m(pe(n.body)),1)]),_:2},1024)])):c("",!0)],64))),128))]),_:1}),a(e(he),{open:p.value,"onUpdate:open":l[12]||(l[12]=n=>p.value=n),title:"Purge queue",description:`Delete every message in '${_.queue.name}'? AWS rate-limits PurgeQueue to once every 60 seconds.`,"confirm-label":"Purge","cancel-label":"Cancel",tone:"danger",loading:G.value,onConfirm:ke},null,8,["open","description","loading"])]),_:1}))}}),Re={style:{"padding-top":"1rem"}},Be={style:{"padding-top":"1rem"}},Qe={style:{"padding-top":"1rem"}},Le=ae({__name:"QueueDetail",props:{queueName:{}},emits:["back"],setup(T,{emit:L}){const _=T,j=L,z=Pe(),U=ie(),R=ue(),f=y(null),x=y(!0),$=y(null);let N=null;const S=["send-receive","consumers","attributes"],M=Y({get(){const o=String(z.query.tab||"");return S.includes(o)?o:"send-receive"},set(o){U.replace({query:{...z.query,tab:o==="send-receive"?void 0:o}})}}),B=Y(()=>{const o=f.value;if(!o)return 0;const u=o.available+o.inFlight+o.processed;return u?Math.round(o.processed/u*100):0});async function V(o=!0){o&&(x.value=!0);try{f.value=await Q.getQueue(_.queueName),$.value=null}catch(u){$.value=u.message||"Failed to load queue",f.value=null}finally{x.value=!1}}async function E(){if(f.value)try{await Q.resetQueueProcessed(f.value.name),R.add({title:"Processed counter reset",variant:"info"}),await V(!1)}catch(o){R.add({title:"Failed to reset counter",description:o.message,variant:"danger"})}}function b(o){return o===void 0?"—":o<60?`${o}s`:o<3600?`${Math.round(o/60)}m`:o<86400?`${Math.round(o/3600)}h`:`${Math.round(o/86400)}d`}function F(o){return o?new Date(o).toLocaleString():"—"}return xe(()=>{V(),N=window.setInterval(()=>V(!1),4e3)}),Ce(()=>{N&&window.clearInterval(N)}),Ne(()=>_.queueName,()=>V()),(o,u)=>(r(),v(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var p;return[a(e(k),{size:"sm",variant:"ghost",onClick:u[0]||(u[0]=G=>j("back"))},{default:t(()=>[a(e(se),{name:"arrow-left"}),u[5]||(u[5]=s(" Queues",-1))]),_:1}),a(e(g),{weight:"semibold",size:"lg"},{default:t(()=>[s(m(T.queueName),1)]),_:1}),(p=f.value)!=null&&p.fifo?(r(),v(e(C),{key:0,tone:"info",variant:"soft"},{default:t(()=>[...u[6]||(u[6]=[s("FIFO",-1)])]),_:1})):c("",!0)]}),_:1}),a(e(k),{size:"sm",variant:"ghost",loading:x.value,onClick:u[1]||(u[1]=p=>V())},{default:t(()=>[...u[7]||(u[7]=[s("Refresh",-1)])]),_:1},8,["loading"])]),_:1}),$.value?(r(),v(e(te),{key:0,variant:"danger",dismissible:"",onDismiss:u[2]||(u[2]=p=>$.value=null)},{default:t(()=>[s(m($.value),1)]),_:1})):c("",!0),x.value&&!f.value?(r(),v(e(d),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(le),{label:"Loading queue..."})]),_:1})):f.value?(r(),h(D,{key:2},[a(e(Se),{columns:4,gap:"0.75rem"},{default:t(()=>[a(e(K),{label:"Available",value:f.value.available,tone:"warning"},null,8,["value"]),a(e(K),{label:"In flight",value:f.value.inFlight,tone:"info"},null,8,["value"]),a(e(K),{label:"Delayed",value:f.value.delayed,tone:"neutral"},null,8,["value"]),a(e(K),{label:"Processed (session)",value:f.value.processed,tone:"success"},null,8,["value"])]),_:1}),a(e(De),{modelValue:M.value,"onUpdate:modelValue":u[4]||(u[4]=p=>M.value=p)},{default:t(()=>[a(e(Me),null,{default:t(()=>[a(e(Z),{value:"send-receive"},{default:t(()=>[...u[8]||(u[8]=[s("Send & receive",-1)])]),_:1}),a(e(Z),{value:"consumers"},{default:t(()=>[...u[9]||(u[9]=[s("Consumers",-1)])]),_:1}),a(e(Z),{value:"attributes"},{default:t(()=>[...u[10]||(u[10]=[s("Attributes",-1)])]),_:1})]),_:1}),a(e(ee),{value:"send-receive"},{default:t(()=>[W("div",Re,[a(Te,{queue:f.value,onRefresh:u[3]||(u[3]=p=>V(!1))},null,8,["queue"])])]),_:1}),a(e(ee),{value:"consumers"},{default:t(()=>[W("div",Be,[a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...u[11]||(u[11]=[s("Lambda event-source mappings",-1)])]),_:1})]),default:t(()=>[f.value.consumers.length?(r(),v(e(d),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[(r(!0),h(D,null,J(f.value.consumers,p=>(r(),v(e(P),{key:p.uuid||p.functionName,variant:"soft"},{default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(d),{direction:"vertical",gap:"0.125rem"},{default:t(()=>[a(e(g),{family:"mono"},{default:t(()=>[s(m(p.functionName),1)]),_:2},1024),a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[s(" UUID: "+m(p.uuid||"—")+" · batch size "+m(p.batchSize??"—"),1)]),_:2},1024)]),_:2},1024),a(e(C),{tone:p.enabled?"success":"neutral",variant:"soft"},{default:t(()=>[s(m(p.state||(p.enabled?"Enabled":"Disabled")),1)]),_:2},1032,["tone"])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),v(e(ne),{key:1,title:"No consumers attached",description:"No Lambda event-source mapping currently points at this queue."}))]),_:1})])]),_:1}),a(e(ee),{value:"attributes"},{default:t(()=>[W("div",Qe,[a(e(d),{direction:"vertical",gap:"1rem"},{default:t(()=>[a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...u[12]||(u[12]=[s("Identity",-1)])]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(d),{direction:"horizontal",justify:"space-between",wrap:"",gap:"0.5rem"},{default:t(()=>[a(e(g),{tone:"muted"},{default:t(()=>[...u[13]||(u[13]=[s("Queue URL",-1)])]),_:1}),a(e(g),{family:"mono",size:"sm"},{default:t(()=>[s(m(f.value.url),1)]),_:1})]),_:1}),a(e(d),{direction:"horizontal",justify:"space-between",wrap:"",gap:"0.5rem"},{default:t(()=>[a(e(g),{tone:"muted"},{default:t(()=>[...u[14]||(u[14]=[s("ARN",-1)])]),_:1}),a(e(g),{family:"mono",size:"sm"},{default:t(()=>[s(m(f.value.arn||"—"),1)]),_:1})]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...u[15]||(u[15]=[s("Configuration",-1)])]),_:1})]),footer:t(()=>[a(e(g),{tone:"muted",size:"xs"},{default:t(()=>[s(" Created "+m(F(f.value.createdAt))+" · last polled "+m(F(f.value.lastPolledAt)),1)]),_:1})]),default:t(()=>[a(e(d),{direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[a(e(X),{size:"sm",variant:"soft"},{default:t(()=>[s(" FIFO: "+m(f.value.fifo?"yes":"no"),1)]),_:1}),a(e(X),{size:"sm",variant:"soft"},{default:t(()=>[s(" Visibility timeout: "+m(b(f.value.visibilityTimeout)),1)]),_:1}),a(e(X),{size:"sm",variant:"soft"},{default:t(()=>[s(" Retention: "+m(b(f.value.messageRetentionPeriod)),1)]),_:1}),a(e(X),{size:"sm",variant:"soft"},{default:t(()=>[s(" Delayed: "+m(f.value.delayed),1)]),_:1})]),_:1})]),_:1}),a(e(P),{variant:"outline"},{header:t(()=>[a(e(g),{weight:"semibold"},{default:t(()=>[...u[16]||(u[16]=[s("Throughput",-1)])]),_:1})]),footer:t(()=>[a(e(d),{direction:"horizontal",justify:"flex-end"},{default:t(()=>[a(e(k),{size:"sm",variant:"ghost",onClick:E},{default:t(()=>[...u[18]||(u[18]=[s(" Reset processed counter ",-1)])]),_:1})]),_:1})]),default:t(()=>[a(e(d),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(d),{direction:"horizontal",justify:"space-between",align:"center"},{default:t(()=>[a(e(g),{tone:"muted"},{default:t(()=>[...u[17]||(u[17]=[s("Processed share (this session)",-1)])]),_:1}),a(e(g),{family:"mono"},{default:t(()=>[s(m(B.value)+"%",1)]),_:1})]),_:1}),a(e(Ae),{value:B.value},null,8,["value"])]),_:1})]),_:1})]),_:1})])]),_:1})]),_:1},8,["modelValue"])],64)):c("",!0)]),_:1}))}}),Je=ae({__name:"QueueDetailPage",props:{queueName:{}},setup(T){const L=ie();function _(){L.push("/queues")}return(j,z)=>(r(),v(Le,{"queue-name":T.queueName,onBack:_},null,8,["queue-name"]))}});export{Je as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as Q,Y as B,l as L,o as P,m as u,e as o,W as a,t as f,$ as e,j as s,y as V,z as p,J as j,i,V as r,f as D,u as U,v as A,B as T,C as O,s as g,A as E,g as J,F as M,n as W,w as F,R as Y,q as y,D as G,r as _,b as w,a as C}from"./index-CGpxa55R.js";const H=Q({__name:"QueuesView",setup(z){const h=B(),c=_([]),$=_({}),v=_(!0),m=_(null);let k=null;const N=[{key:"name",label:"Queue"},{key:"service",label:"Service"},{key:"available",label:"Available",align:"right"},{key:"inFlight",label:"In flight",align:"right"},{key:"processed",label:"Processed",align:"right"},{key:"consumers",label:"Consumers"},{key:"actions",label:"",align:"right"}],x=w(()=>c.value.map(l=>({...l,consumersCount:l.consumers.length,service:$.value[l.name]||""}))),b=w(()=>({queues:c.value.length,available:c.value.reduce((l,n)=>l+n.available,0),inFlight:c.value.reduce((l,n)=>l+n.inFlight,0),processed:c.value.reduce((l,n)=>l+n.processed,0)}));async function S(){try{const[l,n]=await Promise.all([C.listQueues(),C.listResourceOwners().catch(()=>({tables:[],queues:[],topics:[],buckets:[]}))]);c.value=l;const t={};for(const d of n.queues)t[d.name]=d.service;$.value=t,m.value=null}catch(l){m.value=l.message||"Failed to load queues"}finally{v.value=!1}}function I(l){h.push(`/queues/${encodeURIComponent(l)}`)}function R(l){return l.available>0?"warning":l.inFlight>0?"info":l.consumers.some(n=>n.enabled)?"success":"neutral"}function q(l){return l.available>0?"Backlog":l.inFlight>0?"Processing":l.consumers.length?"Idle":"No consumers"}return L(()=>{S(),k=window.setInterval(S,4e3)}),P(()=>{k&&window.clearInterval(k)}),(l,n)=>(u(),o(a(f),{direction:"vertical",gap:"1.25rem"},{default:e(()=>[s(a(V),{columns:4,gap:"1rem"},{default:e(()=>[s(a(p),{label:"Queues",value:b.value.queues,tone:"info",loading:v.value},null,8,["value","loading"]),s(a(p),{label:"Available messages",value:b.value.available,tone:"warning",loading:v.value},null,8,["value","loading"]),s(a(p),{label:"In flight",value:b.value.inFlight,tone:"info",loading:v.value},null,8,["value","loading"]),s(a(p),{label:"Processed",value:b.value.processed,tone:"success",loading:v.value},null,8,["value","loading"])]),_:1}),m.value?(u(),o(a(j),{key:0,variant:"danger",dismissible:"",onDismiss:n[0]||(n[0]=t=>m.value=null)},{default:e(()=>[i(r(m.value),1)]),_:1})):D("",!0),s(a(U),{variant:"outline"},{header:e(()=>[s(a(f),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:e(()=>[s(a(y),{weight:"semibold"},{default:e(()=>[...n[1]||(n[1]=[i("SQS Queues",-1)])]),_:1}),s(a(y),{tone:"muted"},{default:e(()=>[...n[2]||(n[2]=[i("Live · refreshes every 4s",-1)])]),_:1})]),_:1})]),default:e(()=>[v.value?(u(),o(a(f),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:e(()=>[s(a(A),{label:"Loading queues..."})]),_:1})):c.value.length?(u(),o(a(O),{key:2,columns:N,rows:x.value,"aria-label":"SQS queues"},{"cell-name":e(({row:t})=>[s(a(f),{direction:"vertical",gap:"0.125rem"},{default:e(()=>[s(a(G),{to:`/queues/${encodeURIComponent(String(t.name))}`,style:{"font-weight":"600"}},{default:e(()=>[i(r(t.name),1)]),_:2},1032,["to"]),s(a(y),{tone:"muted",family:"mono",size:"xs"},{default:e(()=>[i(r(String(t.arn||t.url||"")),1)]),_:2},1024)]),_:2},1024)]),"cell-service":e(({row:t})=>[t.service?(u(),o(a(Y),{key:0,to:`/services/${encodeURIComponent(String(t.service))}`,style:{"text-decoration":"none"}},{default:e(()=>[s(a(F),{size:"sm",variant:"soft",clickable:""},{default:e(()=>[i(r(t.service),1)]),_:2},1024)]),_:2},1032,["to"])):(u(),o(a(y),{key:1,tone:"muted",size:"xs"},{default:e(()=>[...n[3]||(n[3]=[i("unmanaged",-1)])]),_:1}))]),"cell-available":e(({row:t})=>[s(a(g),{tone:Number(t.available)>0?"warning":"neutral",variant:"soft"},{default:e(()=>[i(r(t.available),1)]),_:2},1032,["tone"])]),"cell-inFlight":e(({row:t})=>[s(a(g),{tone:Number(t.inFlight)>0?"info":"neutral",variant:"soft"},{default:e(()=>[i(r(t.inFlight),1)]),_:2},1032,["tone"])]),"cell-processed":e(({row:t})=>[s(a(g),{tone:"success",variant:"soft"},{default:e(()=>[i(r(t.processed),1)]),_:2},1024)]),"cell-consumers":e(({row:t})=>[s(a(f),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:e(()=>[t.consumers.length?(u(!0),J(M,{key:0},W(t.consumers,d=>(u(),o(a(F),{key:d.uuid||d.functionName,size:"sm",variant:d.enabled?"solid":"outline"},{default:e(()=>[i(r(d.functionName),1)]),_:2},1032,["variant"]))),128)):(u(),o(a(g),{key:1,tone:"neutral",variant:"soft"},{default:e(()=>[...n[4]||(n[4]=[i("No consumers",-1)])]),_:1}))]),_:2},1024)]),"cell-actions":e(({row:t})=>[s(a(f),{direction:"horizontal",gap:"0.375rem",justify:"flex-end"},{default:e(()=>[s(a(g),{tone:R(t),variant:"solid"},{default:e(()=>[i(r(q(t)),1)]),_:2},1032,["tone"]),s(a(E),{size:"sm",variant:"ghost",onClick:d=>I(String(t.name))},{default:e(()=>[...n[5]||(n[5]=[i(" Open ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["rows"])):(u(),o(a(T),{key:1,title:"No queues found",description:"Register a microservice that defines SQS resources or create queues directly in LocalStack."}))]),_:1})]),_:1}))}}),X=Q({__name:"QueuesPage",setup(z){return(h,c)=>(u(),o(H))}});export{X as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as q,l as H,o as Q,m as i,e as u,W as e,t as d,$ as t,j as s,y as X,z as j,J as Y,i as r,V as o,f as m,u as Z,v as F,B as U,C as A,A as V,q as f,w as E,s as T,I as ee,E as te,g as D,d as W,F as ae,n as le,r as c,b as w,a as L,c as ne}from"./index-CGpxa55R.js";import{_ as se}from"./_plugin-vue_export-helper-DlAUqK2U.js";const re={key:0},ie={key:0,class:"secret-value"},oe=q({__name:"SecretsList",setup(M){const p=ne(),y=c([]),b=c(!0),_=c(null),h=c("");let C=null;const S=c(!1),k=c(null),v=c(null),$=c(!1),g=c(null),z=c(!1),O=[{key:"name",label:"Secret"},{key:"description",label:"Description"},{key:"versions",label:"Versions",align:"right"},{key:"lastChanged",label:"Last changed"},{key:"actions",label:"",align:"right"}],x=w(()=>y.value.map(n=>({...n,versions:n.versionCount,lastChanged:n.lastChangedDate?new Date(n.lastChangedDate).toLocaleString():"—",scheduledDeletion:!!n.deletedDate})).sort((n,a)=>n.name.localeCompare(a.name))),B=w(()=>{const n=h.value.trim().toLowerCase();return n?x.value.filter(a=>a.name.toLowerCase().includes(n)||(a.description||"").toLowerCase().includes(n)):x.value}),N=w(()=>({secrets:y.value.length,versions:y.value.reduce((n,a)=>n+a.versionCount,0)})),J=w(()=>{var n;return Object.entries(((n=v.value)==null?void 0:n.versionStages)??{}).map(([a,l])=>({versionId:a,stages:l.join(", "),current:l.includes("AWSCURRENT")}))});async function I(){try{const n=await L.listSecrets();y.value=n.secrets,_.value=null}catch(n){_.value=n.message||"Failed to load secrets"}finally{b.value=!1}}async function R(n){k.value=n,S.value=!0,v.value=null,g.value=null,$.value=!0;try{v.value=await L.describeSecret(n)}catch(a){p.add({title:"Failed to load secret",description:a.message,variant:"danger"})}finally{$.value=!1}}async function K(){if(k.value){z.value=!0;try{g.value=await L.getSecretValue(k.value)}catch(n){p.add({title:"Failed to reveal value",description:n.message,variant:"danger"})}finally{z.value=!1}}}async function P(){var a,l;const n=((a=g.value)==null?void 0:a.secretString)??((l=g.value)==null?void 0:l.secretBinary);if(n)try{await navigator.clipboard.writeText(n),p.add({title:"Copied to clipboard",variant:"success"})}catch{p.add({title:"Copy failed",variant:"danger"})}}return H(()=>{I(),C=window.setInterval(I,15e3)}),Q(()=>{C&&window.clearInterval(C)}),(n,a)=>(i(),u(e(d),{direction:"vertical",gap:"1.25rem"},{default:t(()=>[s(e(X),{columns:2,gap:"1rem"},{default:t(()=>[s(e(j),{label:"Secrets",value:N.value.secrets,tone:"info",loading:b.value},null,8,["value","loading"]),s(e(j),{label:"Versions",value:N.value.versions,tone:"success",loading:b.value},null,8,["value","loading"])]),_:1}),_.value?(i(),u(e(Y),{key:0,variant:"danger",dismissible:"",onDismiss:a[0]||(a[0]=l=>_.value=null)},{default:t(()=>[r(o(_.value),1)]),_:1})):m("",!0),s(e(Z),{variant:"outline"},{header:t(()=>[s(e(d),{direction:"horizontal",justify:"space-between",align:"center",gap:"1rem"},{default:t(()=>[s(e(f),{weight:"semibold"},{default:t(()=>[...a[3]||(a[3]=[r("Secrets Manager",-1)])]),_:1}),s(e(d),{direction:"horizontal",align:"center",gap:"1rem"},{default:t(()=>[s(e(ee),{modelValue:h.value,"onUpdate:modelValue":a[1]||(a[1]=l=>h.value=l),placeholder:"Filter secrets...",style:{"min-width":"16rem"}},null,8,["modelValue"]),s(e(f),{tone:"muted",size:"xs"},{default:t(()=>[...a[4]||(a[4]=[r("Refreshes every 15s",-1)])]),_:1})]),_:1})]),_:1})]),default:t(()=>[b.value?(i(),u(e(d),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[s(e(F),{label:"Loading secrets..."})]),_:1})):x.value.length?B.value.length?(i(),u(e(A),{key:3,columns:O,rows:B.value,"aria-label":"Secrets"},{"cell-name":t(({row:l})=>[s(e(d),{direction:"horizontal",align:"center",gap:"0.5rem"},{default:t(()=>[s(e(f),{weight:"semibold",style:{cursor:"pointer","text-decoration":"underline","text-decoration-style":"dotted","text-underline-offset":"3px"},onClick:G=>R(String(l.name))},{default:t(()=>[r(o(l.name),1)]),_:2},1032,["onClick"]),l.scheduledDeletion?(i(),u(e(T),{key:0,tone:"warning",variant:"soft"},{default:t(()=>[...a[5]||(a[5]=[r("deletion scheduled",-1)])]),_:1})):m("",!0)]),_:2},1024)]),"cell-description":t(({row:l})=>[s(e(f),{tone:"muted",size:"sm"},{default:t(()=>[r(o(l.description||"—"),1)]),_:2},1024)]),"cell-versions":t(({row:l})=>[s(e(E),{size:"sm",variant:"soft"},{default:t(()=>[r(o(l.versions),1)]),_:2},1024)]),"cell-lastChanged":t(({row:l})=>[s(e(f),{tone:"muted",family:"mono",size:"xs"},{default:t(()=>[r(o(l.lastChanged),1)]),_:2},1024)]),"cell-actions":t(({row:l})=>[s(e(V),{size:"sm",variant:"soft",onClick:G=>R(String(l.name))},{default:t(()=>[...a[6]||(a[6]=[r("Inspect",-1)])]),_:1},8,["onClick"])]),_:1},8,["rows"])):(i(),u(e(U),{key:2,title:"No matching secrets",description:`No secrets match "${h.value}".`},null,8,["description"])):(i(),u(e(U),{key:1,title:"No secrets",description:"Create one with the AWS SDK (CreateSecret) against the engine endpoint — e.g. a signing key an identity service reads at boot."}))]),_:1}),s(e(te),{open:S.value,"onUpdate:open":a[2]||(a[2]=l=>S.value=l),title:k.value?`Secret — ${k.value}`:"Secret",size:"lg"},{default:t(()=>[$.value?(i(),u(e(d),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[s(e(F),{label:"Loading secret..."})]),_:1})):v.value?(i(),u(e(d),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>[s(e(d),{direction:"vertical",gap:"0.35rem"},{default:t(()=>[s(e(f),{tone:"muted",family:"mono",size:"xs",style:{"word-break":"break-all"}},{default:t(()=>[r(o(v.value.arn),1)]),_:1}),v.value.description?(i(),D("span",re,o(v.value.description),1)):m("",!0)]),_:1}),W("div",null,[s(e(f),{weight:"semibold",size:"sm"},{default:t(()=>[...a[7]||(a[7]=[r("Versions & staging labels",-1)])]),_:1}),s(e(A),{columns:[{key:"versionId",label:"Version"},{key:"stages",label:"Staging labels"}],rows:J.value,"aria-label":"Secret versions and staging labels"},{"cell-versionId":t(({row:l})=>[s(e(f),{family:"mono",size:"xs"},{default:t(()=>[r(o(l.versionId),1)]),_:2},1024)]),"cell-stages":t(({row:l})=>[s(e(T),{tone:l.current?"success":"neutral",variant:"soft"},{default:t(()=>[r(o(l.stages),1)]),_:2},1032,["tone"])]),_:1},8,["rows"])]),v.value.tags.length?(i(),u(e(d),{key:0,direction:"horizontal",gap:"0.5rem",wrap:""},{default:t(()=>[(i(!0),D(ae,null,le(v.value.tags,l=>(i(),u(e(E),{key:l.key,size:"sm",variant:"soft"},{default:t(()=>[r(o(l.key)+"="+o(l.value),1)]),_:2},1024))),128))]),_:1})):m("",!0),W("div",null,[s(e(d),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[s(e(V),{size:"sm",variant:"solid",loading:z.value,onClick:K},{default:t(()=>[r(o(g.value?"Refresh value":"Reveal current value"),1)]),_:1},8,["loading"]),g.value?(i(),u(e(V),{key:0,size:"sm",variant:"ghost",onClick:P},{default:t(()=>[...a[8]||(a[8]=[r("Copy",-1)])]),_:1})):m("",!0)]),_:1}),g.value?(i(),D("pre",ie,o(g.value.secretString??`(binary, base64) ${g.value.secretBinary}`),1)):m("",!0)])]),_:1})):m("",!0)]),_:1},8,["open","title"])]),_:1}))}}),ue=se(oe,[["__scopeId","data-v-1bcb0715"]]),ve=q({__name:"SecretsPage",setup(M){return(p,y)=>(i(),u(ue))}});export{ve as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.secret-value[data-v-
|
|
1
|
+
.secret-value[data-v-1bcb0715]{margin-top:.6rem;padding:.6rem .75rem;border-radius:6px;background:var(--tree-color-surface-sunken, rgba(127, 127, 127, .1));font-family:var(--tree-font-mono, monospace);font-size:.8rem;white-space:pre-wrap;word-break:break-all}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as ue,l as se,o as de,_ as ve,e as v,$ as t,W as e,t as r,a as I,r as z,m as i,j as a,R as V,A as D,p as M,i as l,q as m,V as s,s as p,f as g,J as fe,v as me,g as y,z as q,y as ce,d as X,u as Z,B as ge,F as b,n as _,w as k,E as pe,G as ye,b as be,c as we,Y as ze}from"./index-CGpxa55R.js";const _e={class:"logs-pre"},he=ue({__name:"ServiceDetailPage",props:{serviceName:{}},setup(T){const w=T,ee=ze(),S=we(),c=z(null),x=z(!0),C=z(null),F=z(!1),R=z(!1),U=z(!1),Q=z([]),A=z("stopped");let h=null,P=null;const E=z(!1),o=be(()=>{var n;const f={lambda:[],dynamodb:[],sqs:[],sns:[],s3:[],eventbus:[],"event-rule":[],opensearch:[],"event-source":[]};for(const d of((n=c.value)==null?void 0:n.resources)||[])f[d.type]||(f[d.type]=[]),f[d.type].push(d);return f});async function N(){x.value=!0;try{c.value=await I.getService(w.serviceName),C.value=null}catch(f){C.value=f.message||"Service not found",c.value=null}finally{x.value=!1}}async function te(){if(!F.value){F.value=!0;try{await I.startService(w.serviceName),S.add({title:"Service started",description:w.serviceName,variant:"success"}),await N()}catch(f){S.add({title:"Failed to start",description:f.message,variant:"danger"})}finally{F.value=!1}}}async function ae(){if(!R.value){R.value=!0;try{await I.stopService(w.serviceName),S.add({title:"Service stopped",description:w.serviceName,variant:"info"}),await N()}catch(f){S.add({title:"Failed to stop",description:f.message,variant:"danger"})}finally{R.value=!1}}}async function G(){try{const f=await I.getServiceLogs(w.serviceName);Q.value=f.logs||[],A.value=f.status||"stopped"}catch(f){console.error("Failed to fetch logs:",f)}}function ne(){U.value=!0,G(),h&&window.clearInterval(h),h=window.setInterval(G,2e3)}function le(){U.value=!1,h&&window.clearInterval(h),h=null}async function re(){try{await I.deleteService(w.serviceName),S.add({title:"Service deleted",description:w.serviceName,variant:"info"}),ee.push("/services")}catch(f){S.add({title:"Failed to delete",description:f.message,variant:"danger"})}finally{E.value=!1}}function ie(f){switch(f){case"running":return"success";case"registered":return"warning";case"stopped":return"neutral";default:return"danger"}}function oe(f){return f?new Date(f).toLocaleString():"—"}return se(()=>{N(),P=window.setInterval(N,1e4)}),de(()=>{P&&window.clearInterval(P),h&&window.clearInterval(h)}),ve(()=>w.serviceName,N),(f,n)=>(i(),v(e(r),{direction:"vertical",gap:"1.25rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>{var d;return[a(e(V),{to:"/services",style:{"text-decoration":"none"}},{default:t(()=>[a(e(D),{size:"sm",variant:"ghost"},{default:t(()=>[a(e(M),{name:"arrow-left"}),n[5]||(n[5]=l(" Services",-1))]),_:1})]),_:1}),a(e(m),{weight:"semibold",size:"lg"},{default:t(()=>[l(s(T.serviceName),1)]),_:1}),(d=c.value)!=null&&d.status?(i(),v(e(p),{key:0,tone:ie(c.value.status),variant:"soft"},{default:t(()=>[l(s(c.value.status),1)]),_:1},8,["tone"])):g("",!0)]}),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem"},{default:t(()=>{var d,$;return[a(e(D),{size:"sm",variant:"soft",disabled:((d=c.value)==null?void 0:d.status)==="running",loading:F.value,onClick:te},{default:t(()=>[...n[6]||(n[6]=[l(" Start ",-1)])]),_:1},8,["disabled","loading"]),a(e(D),{size:"sm",variant:"soft",disabled:(($=c.value)==null?void 0:$.status)!=="running",loading:R.value,onClick:ae},{default:t(()=>[...n[7]||(n[7]=[l(" Stop ",-1)])]),_:1},8,["disabled","loading"]),a(e(D),{size:"sm",variant:"ghost",onClick:ne},{default:t(()=>[...n[8]||(n[8]=[l("Logs",-1)])]),_:1}),a(e(D),{size:"sm",variant:"ghost",loading:x.value,onClick:N},{default:t(()=>[...n[9]||(n[9]=[l("Refresh",-1)])]),_:1},8,["loading"]),a(e(D),{size:"sm",variant:"danger",onClick:n[0]||(n[0]=L=>E.value=!0)},{default:t(()=>[...n[10]||(n[10]=[l("Delete",-1)])]),_:1})]}),_:1})]),_:1}),C.value?(i(),v(e(fe),{key:0,variant:"danger",dismissible:"",onDismiss:n[1]||(n[1]=d=>C.value=null)},{default:t(()=>[l(s(C.value),1)]),_:1})):g("",!0),x.value&&!c.value?(i(),v(e(r),{key:1,direction:"horizontal",justify:"center",align:"center"},{default:t(()=>[a(e(me),{label:"Loading service..."})]),_:1})):c.value?(i(),y(b,{key:2},[a(e(ce),{columns:5,gap:"1rem"},{default:t(()=>{var d,$,L,j,B;return[a(e(q),{label:"Lambdas",value:((d=o.value.lambda)==null?void 0:d.length)||0,tone:"info"},null,8,["value"]),a(e(q),{label:"Tables",value:(($=o.value.dynamodb)==null?void 0:$.length)||0,tone:"info"},null,8,["value"]),a(e(q),{label:"Queues",value:((L=o.value.sqs)==null?void 0:L.length)||0,tone:"warning"},null,8,["value"]),a(e(q),{label:"Topics",value:((j=o.value.sns)==null?void 0:j.length)||0,tone:"info"},null,8,["value"]),a(e(q),{label:"Buckets",value:((B=o.value.s3)==null?void 0:B.length)||0,tone:"neutral"},null,8,["value"])]}),_:1}),a(e(Z),{variant:"outline"},{header:t(()=>[a(e(m),{weight:"semibold"},{default:t(()=>[...n[11]||(n[11]=[l("Metadata",-1)])]),_:1})]),default:t(()=>[a(e(r),{direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",justify:"space-between"},{default:t(()=>[a(e(m),{tone:"muted"},{default:t(()=>[...n[12]||(n[12]=[l("Path",-1)])]),_:1}),a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.root),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",justify:"space-between"},{default:t(()=>[a(e(m),{tone:"muted"},{default:t(()=>[...n[13]||(n[13]=[l("Region",-1)])]),_:1}),a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.region||"—"),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",justify:"space-between"},{default:t(()=>[a(e(m),{tone:"muted"},{default:t(()=>[...n[14]||(n[14]=[l("Invoke port",-1)])]),_:1}),a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.invokePort??"—"),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",justify:"space-between"},{default:t(()=>[a(e(m),{tone:"muted"},{default:t(()=>[...n[15]||(n[15]=[l("PID",-1)])]),_:1}),a(e(m),{family:"mono"},{default:t(()=>[l(s(c.value.pid??"—"),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",justify:"space-between"},{default:t(()=>[a(e(m),{tone:"muted"},{default:t(()=>[...n[16]||(n[16]=[l("Last updated",-1)])]),_:1}),X("span",null,s(oe(c.value.lastUpdated)),1)]),_:1})]),_:1})]),_:1}),a(e(Z),{variant:"outline"},{header:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center",justify:"space-between"},{default:t(()=>[a(e(m),{weight:"semibold"},{default:t(()=>[...n[17]||(n[17]=[l("Declared resources",-1)])]),_:1}),a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>{var d;return[l(s(((d=c.value.resources)==null?void 0:d.length)||0)+" total ",1)]}),_:1})]),_:1})]),default:t(()=>{var d;return[(d=c.value.resources)!=null&&d.length?(i(),v(e(r),{key:1,direction:"vertical",gap:"1rem"},{default:t(()=>{var $,L,j,B,J,W,Y,H,K;return[($=o.value.dynamodb)!=null&&$.length?(i(),v(e(r),{key:0,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[18]||(n[18]=[l("DynamoDB tables",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.dynamodb.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value.dynamodb,u=>(i(),v(e(V),{key:`db-${u.name}`,to:`/dynamo/${encodeURIComponent(u.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[l(s(u.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):g("",!0),(L=o.value.sqs)!=null&&L.length?(i(),v(e(r),{key:1,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"warning",variant:"soft"},{default:t(()=>[...n[19]||(n[19]=[l("SQS queues",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.sqs.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value.sqs,u=>(i(),v(e(V),{key:`q-${u.name}`,to:"/queues",style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[l(s(u.name),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(j=o.value.sns)!=null&&j.length?(i(),v(e(r),{key:2,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[20]||(n[20]=[l("SNS topics",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.sns.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value.sns,u=>(i(),v(e(k),{key:`t-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(B=o.value.s3)!=null&&B.length?(i(),v(e(r),{key:3,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[21]||(n[21]=[l("S3 buckets",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.s3.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value.s3,u=>(i(),v(e(V),{key:`b-${u.name}`,to:`/buckets/${encodeURIComponent(u.name)}`,style:{"text-decoration":"none"}},{default:t(()=>[a(e(k),{size:"sm",variant:"soft",clickable:""},{default:t(()=>[l(s(u.name),1)]),_:2},1024)]),_:2},1032,["to"]))),128))]),_:1})]),_:1})):g("",!0),(J=o.value.lambda)!=null&&J.length?(i(),v(e(r),{key:4,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[22]||(n[22]=[l("Lambda functions",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.lambda.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value.lambda,u=>(i(),v(e(k),{key:`l-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[a(e(M),{name:"code"}),l(" "+s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(W=o.value.eventbus)!=null&&W.length?(i(),v(e(r),{key:5,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[23]||(n[23]=[l("EventBridge buses",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.eventbus.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value.eventbus,u=>(i(),v(e(k),{key:`eb-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(Y=o.value["event-rule"])!=null&&Y.length?(i(),v(e(r),{key:6,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[24]||(n[24]=[l("EventBridge rules",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value["event-rule"].length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value["event-rule"],(u,O)=>(i(),v(e(k),{key:`er-${O}-${u.name}`,size:"sm",variant:"outline"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(H=o.value.opensearch)!=null&&H.length?(i(),v(e(r),{key:7,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"info",variant:"soft"},{default:t(()=>[...n[25]||(n[25]=[l("OpenSearch collections",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value.opensearch.length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value.opensearch,u=>(i(),v(e(k),{key:`os-${u.name}`,size:"sm",variant:"soft"},{default:t(()=>[a(e(M),{name:"search"}),l(" "+s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0),(K=o.value["event-source"])!=null&&K.length?(i(),v(e(r),{key:8,direction:"vertical",gap:"0.5rem"},{default:t(()=>[a(e(r),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:t(()=>[a(e(p),{tone:"neutral",variant:"soft"},{default:t(()=>[...n[26]||(n[26]=[l("Event-source mappings",-1)])]),_:1}),a(e(m),{tone:"muted"},{default:t(()=>[l(s(o.value["event-source"].length),1)]),_:1})]),_:1}),a(e(r),{direction:"horizontal",gap:"0.375rem",wrap:""},{default:t(()=>[(i(!0),y(b,null,_(o.value["event-source"],(u,O)=>(i(),v(e(k),{key:`es-${O}-${u.name}`,size:"sm",variant:"outline"},{default:t(()=>[l(s(u.name),1)]),_:2},1024))),128))]),_:1})]),_:1})):g("",!0)]}),_:1})):(i(),v(e(ge),{key:0,title:"No resources declared",description:"This service's CloudFormation template has no resources LSS understands yet."}))]}),_:1})],64)):g("",!0),a(e(pe),{open:U.value,"onUpdate:open":[n[2]||(n[2]=d=>U.value=d),n[3]||(n[3]=d=>{d||le()})],title:`Logs — ${T.serviceName}`,description:`Status: ${A.value}`,size:"lg"},{default:t(()=>[X("pre",_e,s(Q.value.join(`
|
|
2
|
+
`)||"— no output yet —"),1)]),_:1},8,["open","title","description"]),a(e(ye),{open:E.value,"onUpdate:open":n[4]||(n[4]=d=>E.value=d),title:`Delete service “${T.serviceName}”?`,description:"This removes the service from the cache and cleans up its provisioned resources in LocalStack.","confirm-label":"Delete","cancel-label":"Cancel","confirm-variant":"danger",onConfirm:re},null,8,["open","title"])]),_:1}))}});export{he as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as E,l as se,o as re,m as i,e as o,W as t,u as ne,$ as s,t as h,j as n,v as le,B as ie,C as oe,A as B,i as l,V as u,w as g,p,f as v,q as D,s as ue,D as de,E as ce,d as ve,G as fe,H as ge,I as pe,a1 as me,r as d,b as O,a as $,c as ke}from"./index-CGpxa55R.js";const ye={class:"logs-pre"},Se=E({__name:"ServicesList",setup(G){const c=ke(),z=d([]),U=d(!0),C=d(!1),m=d(""),S=d(null),x=d([]),V=d("stopped"),f=d(null),k=d({}),y=d({}),b=d(null),L=d(!1);let I=null;const H=[{key:"name",label:"Name"},{key:"status",label:"Status"},{key:"root",label:"Path"},{key:"resourceBreakdown",label:"Resources"},{key:"lastUpdated",label:"Last updated"},{key:"actions",label:"Actions",align:"right"}],W=O(()=>z.value.map(a=>({...a}))),F=O({get:()=>S.value!==null,set:a=>{a||Y()}});async function w(){try{z.value=await $.listServices()}catch(a){console.error("Failed to load services:",a)}finally{U.value=!1}}async function J(a){if(!k.value[a]){k.value={...k.value,[a]:!0};try{await $.startService(a),c.add({title:"Service started",description:a,variant:"success"}),await w()}catch(r){c.add({title:"Failed to start service",description:r.message,variant:"danger"})}finally{k.value={...k.value,[a]:!1}}}}async function Q(a){if(!y.value[a]){y.value={...y.value,[a]:!0};try{await $.stopService(a),c.add({title:"Service stopped",description:a,variant:"info"}),await w()}catch(r){c.add({title:"Failed to stop service",description:r.message,variant:"danger"})}finally{y.value={...y.value,[a]:!1}}}}async function N(a){try{const r=await $.getServiceLogs(a);x.value=r.logs||[],V.value=r.status||"stopped"}catch(r){console.error("Failed to fetch logs:",r)}}function X(a){S.value=a,N(a),f.value&&window.clearInterval(f.value),f.value=window.setInterval(()=>N(a),2e3)}function Y(){S.value=null,x.value=[],f.value&&window.clearInterval(f.value),f.value=null}async function R(){if(m.value.trim()){C.value=!0;try{await $.registerService(m.value),c.add({title:"Service registered",description:m.value,variant:"success"}),m.value="",await w()}catch(a){c.add({title:"Failed to register service",description:a.message,variant:"danger"})}finally{C.value=!1}}}function Z(a){b.value=a,L.value=!0}async function ee(){if(!b.value)return;const a=b.value;try{await $.deleteService(a),c.add({title:"Service deleted",description:a,variant:"info"}),await w()}catch(r){c.add({title:"Failed to delete service",description:r.message,variant:"danger"})}finally{b.value=null,L.value=!1}}function te(a){return new Date(a).toLocaleString()}function ae(a){switch(a){case"running":return"success";case"registered":return"warning";case"stopped":return"neutral";default:return"danger"}}return se(()=>{w(),I=window.setInterval(w,1e4)}),re(()=>{I&&window.clearInterval(I),f.value&&window.clearInterval(f.value)}),(a,r)=>(i(),o(t(ne),{variant:"outline"},{header:s(()=>[n(t(h),{direction:"horizontal",gap:"0.75rem",align:"center",justify:"space-between"},{default:s(()=>[n(t(D),{weight:"semibold"},{default:s(()=>[...r[3]||(r[3]=[l("Microservices",-1)])]),_:1}),n(t(h),{direction:"horizontal",gap:"0.5rem",align:"center"},{default:s(()=>[n(t(ge),{hint:"Absolute path to a Serverless project",htmlFor:"register-path"},{default:s(()=>[n(t(pe),{modelValue:m.value,"onUpdate:modelValue":r[0]||(r[0]=e=>m.value=e),placeholder:"/path/to/microservice",disabled:C.value,onKeyup:me(R,["enter"])},null,8,["modelValue","disabled"])]),_:1}),n(t(B),{variant:"solid",loading:C.value,disabled:!m.value.trim(),onClick:R},{default:s(()=>[...r[4]||(r[4]=[l(" Register ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),default:s(()=>[U.value?(i(),o(t(h),{key:0,direction:"horizontal",justify:"center",align:"center"},{default:s(()=>[n(t(le),{label:"Loading services..."})]),_:1})):z.value.length?(i(),o(t(oe),{key:2,columns:H,rows:W.value,"aria-label":"Registered microservices"},{"cell-name":s(({row:e})=>[n(t(de),{to:`/services/${encodeURIComponent(String(e.name))}`},{default:s(()=>[n(t(D),{weight:"semibold"},{default:s(()=>[l(u(e.name),1)]),_:2},1024)]),_:2},1032,["to"])]),"cell-status":s(({row:e})=>[n(t(ue),{tone:ae(String(e.status)),variant:"soft"},{default:s(()=>[l(u(e.status),1)]),_:2},1032,["tone"])]),"cell-root":s(({row:e})=>[n(t(D),{family:"mono"},{default:s(()=>[l(u(e.root),1)]),_:2},1024)]),"cell-resourceBreakdown":s(({row:e})=>[n(t(h),{direction:"horizontal",gap:"0.25rem",wrap:""},{default:s(()=>{var _,j,T,q,A,M,P,K;return[(_=e.resourceBreakdown)!=null&&_.lambdas?(i(),o(t(g),{key:0,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"code"}),l(" "+u(e.resourceBreakdown.lambdas),1)]),_:2},1024)):v("",!0),(j=e.resourceBreakdown)!=null&&j.tables?(i(),o(t(g),{key:1,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"database"}),l(" "+u(e.resourceBreakdown.tables),1)]),_:2},1024)):v("",!0),(T=e.resourceBreakdown)!=null&&T.queues?(i(),o(t(g),{key:2,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"inbox"}),l(" "+u(e.resourceBreakdown.queues),1)]),_:2},1024)):v("",!0),(q=e.resourceBreakdown)!=null&&q.topics?(i(),o(t(g),{key:3,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"megaphone"}),l(" "+u(e.resourceBreakdown.topics),1)]),_:2},1024)):v("",!0),(A=e.resourceBreakdown)!=null&&A.buckets?(i(),o(t(g),{key:4,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"archive"}),l(" "+u(e.resourceBreakdown.buckets),1)]),_:2},1024)):v("",!0),(M=e.resourceBreakdown)!=null&&M.buses?(i(),o(t(g),{key:5,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"shuffle"}),l(" "+u(e.resourceBreakdown.buses),1)]),_:2},1024)):v("",!0),(P=e.resourceBreakdown)!=null&&P.eventRules?(i(),o(t(g),{key:6,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"target"}),l(" "+u(e.resourceBreakdown.eventRules),1)]),_:2},1024)):v("",!0),(K=e.resourceBreakdown)!=null&&K.collections?(i(),o(t(g),{key:7,size:"sm",variant:"soft"},{default:s(()=>[n(t(p),{name:"search"}),l(" "+u(e.resourceBreakdown.collections),1)]),_:2},1024)):v("",!0),e.resourcesCount?v("",!0):(i(),o(t(D),{key:8,tone:"muted",size:"xs"},{default:s(()=>[...r[5]||(r[5]=[l(" none ",-1)])]),_:1}))]}),_:2},1024)]),"cell-lastUpdated":s(({row:e})=>[l(u(te(Number(e.lastUpdated))),1)]),"cell-actions":s(({row:e})=>[n(t(h),{direction:"horizontal",gap:"0.375rem",justify:"flex-end",wrap:""},{default:s(()=>[n(t(B),{size:"sm",variant:"soft",disabled:e.status==="running"||k.value[String(e.name)],loading:k.value[String(e.name)],onClick:_=>J(String(e.name))},{default:s(()=>[...r[6]||(r[6]=[l(" Start ",-1)])]),_:1},8,["disabled","loading","onClick"]),n(t(B),{size:"sm",variant:"soft",disabled:e.status!=="running"||y.value[String(e.name)],loading:y.value[String(e.name)],onClick:_=>Q(String(e.name))},{default:s(()=>[...r[7]||(r[7]=[l(" Stop ",-1)])]),_:1},8,["disabled","loading","onClick"]),n(t(B),{size:"sm",variant:"ghost",onClick:_=>X(String(e.name))},{default:s(()=>[...r[8]||(r[8]=[l(" Logs ",-1)])]),_:1},8,["onClick"]),n(t(B),{size:"sm",variant:"danger",onClick:_=>Z(String(e.name))},{default:s(()=>[...r[9]||(r[9]=[l(" Delete ",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:1},8,["rows"])):(i(),o(t(ie),{key:1,title:"No services registered",description:"Register your first microservice using the form above."})),n(t(ce),{open:F.value,"onUpdate:open":r[1]||(r[1]=e=>F.value=e),title:S.value?`Logs — ${S.value}`:"Logs",description:S.value?`Status: ${V.value}`:"",size:"lg"},{default:s(()=>[ve("pre",ye,u(x.value.join(`
|
|
2
|
+
`)||"— no output yet —"),1)]),_:1},8,["open","title","description"]),n(t(fe),{open:L.value,"onUpdate:open":r[2]||(r[2]=e=>L.value=e),title:`Delete service${b.value?` “${b.value}”`:""}?`,description:"This removes the service from the cache and cleans up its provisioned resources in LocalStack.","confirm-label":"Delete","cancel-label":"Cancel","confirm-variant":"danger",onConfirm:ee},null,8,["open","title"])]),_:1}))}}),we=E({__name:"ServicesPage",setup(G){return(c,z)=>(i(),o(Se))}});export{we as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--tree-font-family-sans:"Google Sans Flex", "Segoe UI", sans-serif;--tree-font-family-mono:"Google Sans Code", "SFMono-Regular", monospace;--tree-font-size-xs:.6875rem;--tree-font-size-sm:.8125rem;--tree-font-size-md:.9375rem;--tree-font-size-base:.9375rem;--tree-font-size-lg:1.125rem;--tree-font-size-xl:1.375rem;--tree-font-size-2xl:1.375rem;--tree-font-size-3xl:1.75rem;--tree-font-size-4xl:2.25rem;--tree-font-size-5xl:3rem;--tree-font-weight-regular:400;--tree-font-weight-medium:500;--tree-font-weight-semibold:600;--tree-font-weight-bold:700;--tree-font-weight-extrabold:800;--tree-font-lineHeight-compact:1.1;--tree-font-lineHeight-ui:1.15;--tree-font-lineHeight-tight:1.25;--tree-font-lineHeight-heading:1.3;--tree-font-lineHeight-base:1.5;--tree-font-lineHeight-body:1.6;--tree-font-lineHeight-relaxed:1.65;--tree-space-0:0;--tree-space-1:.25rem;--tree-space-2:.5rem;--tree-space-3:.75rem;--tree-space-4:1rem;--tree-space-5:1.25rem;--tree-space-6:1.5rem;--tree-space-8:2rem;--tree-space-12:3rem;--tree-space-16:4rem;--tree-radius-sm:.375rem;--tree-radius-md:.625rem;--tree-radius-lg:.875rem;--tree-radius-pill:999px;--tree-shadow-xs:0 1px 2px #0f172a0f;--tree-shadow-sm:0 6px 18px #0f172a14;--tree-shadow-md:0 14px 34px #0f172a1f;--tree-gradient-brand:linear-gradient(135deg, var(--tree-color-brand-primary), var(--tree-color-brand-hover));--tree-border-width-subtle:1px;--tree-border-width-strong:1.5px;--tree-motion-duration-fast:.1s;--tree-motion-duration-moderate:.2s;--tree-motion-duration-normal:.3s;--tree-motion-duration-slow:.4s;--tree-motion-duration-slower:.5s;--tree-motion-easing-standard:cubic-bezier(.2, 0, 0, 1);--tree-motion-easing-easeOut:cubic-bezier(0, 0, .2, 1);--tree-motion-easing-easeInOut:cubic-bezier(.4, 0, .2, 1);--tree-motion-easing-easeIn:cubic-bezier(.4, 0, 1, 1);--tree-size-control-sm:2rem;--tree-size-control-md:2.5rem;--tree-size-control-lg:3rem;--tree-size-icon-sm:1rem;--tree-size-icon-md:1.25rem;--tree-size-icon-lg:1.5rem;--tree-size-icon-xl:2rem;--tree-size-icon-2xl:3rem;--tree-layout-grid-columns:12;--tree-layout-grid-base:8px;--tree-layout-gutter-sm:1rem;--tree-layout-gutter-md:1.5rem;--tree-layout-margin-sm:1.5rem;--tree-layout-margin-md:2rem;--tree-layout-margin-lg:3rem;--tree-z-base:1;--tree-z-dropdown:1000;--tree-z-popover:1050;--tree-z-sticky:1100;--tree-z-overlay:1200;--tree-z-modal:1300;--tree-z-toast:1400;--tree-breakpoint-sm:640px;--tree-breakpoint-md:768px;--tree-breakpoint-lg:1024px;--tree-breakpoint-xl:1280px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--tree-color-bg-primary:#f6f8fa;--tree-color-bg-surface:#fff;--tree-color-bg-subtle:#eff2f5;--tree-color-border-default:#d0d7de;--tree-color-border-strong:#afb8c1;--tree-color-text-primary:#1f2328;--tree-color-text-muted:#59636e;--tree-color-text-inverse:#fff;--tree-color-brand-primary:#0969da;--tree-color-brand-hover:#0550ae;--tree-color-brand-soft:#ddf4ff;--tree-color-brand-contrast:#fff;--tree-color-status-success:#1a7f37;--tree-color-status-warning:#9a6700;--tree-color-status-error:#d1242f;--tree-color-status-info:#0969da;--tree-color-chart-1:#2a78d6;--tree-color-chart-2:#1baf7a;--tree-color-chart-3:#eda100;--tree-color-chart-4:#008300;--tree-color-chart-5:#4a3aa7;--tree-color-chart-6:#e34948;--tree-color-chart-7:#e87ba4;--tree-color-chart-8:#eb6834;--tree-color-overlay:#1f232880;--tree-color-focus-ring:#0969da52}[data-tree-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--tree-color-bg-primary:#f6f8fa;--tree-color-bg-surface:#fff;--tree-color-bg-subtle:#eff2f5;--tree-color-border-default:#d0d7de;--tree-color-border-strong:#afb8c1;--tree-color-text-primary:#1f2328;--tree-color-text-muted:#59636e;--tree-color-text-inverse:#fff;--tree-color-brand-primary:#0969da;--tree-color-brand-hover:#0550ae;--tree-color-brand-soft:#ddf4ff;--tree-color-brand-contrast:#fff;--tree-color-status-success:#1a7f37;--tree-color-status-warning:#9a6700;--tree-color-status-error:#d1242f;--tree-color-status-info:#0969da;--tree-color-chart-1:#2a78d6;--tree-color-chart-2:#1baf7a;--tree-color-chart-3:#eda100;--tree-color-chart-4:#008300;--tree-color-chart-5:#4a3aa7;--tree-color-chart-6:#e34948;--tree-color-chart-7:#e87ba4;--tree-color-chart-8:#eb6834;--tree-color-overlay:#1f232880;--tree-color-focus-ring:#0969da52}[data-tree-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--tree-color-bg-primary:#1c2128;--tree-color-bg-surface:#22272e;--tree-color-bg-subtle:#2d333b;--tree-color-border-default:#444c56;--tree-color-border-strong:#576270;--tree-color-text-primary:#adbac7;--tree-color-text-muted:#95a3b2;--tree-color-text-inverse:#1c2128;--tree-color-brand-primary:#539bf5;--tree-color-brand-hover:#6cabf7;--tree-color-brand-soft:#1a3453;--tree-color-brand-contrast:#0a1a2f;--tree-color-status-success:#57ab5a;--tree-color-status-warning:#c69026;--tree-color-status-error:#f47067;--tree-color-status-info:#6cb6ff;--tree-color-chart-1:#3987e5;--tree-color-chart-2:#199e70;--tree-color-chart-3:#c98500;--tree-color-chart-4:#008300;--tree-color-chart-5:#9085e9;--tree-color-chart-6:#e66767;--tree-color-chart-7:#d55181;--tree-color-chart-8:#d95926;--tree-color-overlay:#0d111799;--tree-color-focus-ring:#539bf552}@media(prefers-color-scheme:dark){:root:not([data-tree-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--tree-color-bg-primary:#1c2128;--tree-color-bg-surface:#22272e;--tree-color-bg-subtle:#2d333b;--tree-color-border-default:#444c56;--tree-color-border-strong:#576270;--tree-color-text-primary:#adbac7;--tree-color-text-muted:#95a3b2;--tree-color-text-inverse:#1c2128;--tree-color-brand-primary:#539bf5;--tree-color-brand-hover:#6cabf7;--tree-color-brand-soft:#1a3453;--tree-color-brand-contrast:#0a1a2f;--tree-color-status-success:#57ab5a;--tree-color-status-warning:#c69026;--tree-color-status-error:#f47067;--tree-color-status-info:#6cb6ff;--tree-color-chart-1:#3987e5;--tree-color-chart-2:#199e70;--tree-color-chart-3:#c98500;--tree-color-chart-4:#008300;--tree-color-chart-5:#9085e9;--tree-color-chart-6:#e66767;--tree-color-chart-7:#d55181;--tree-color-chart-8:#d95926;--tree-color-overlay:#0d111799;--tree-color-focus-ring:#539bf552}}*,:before,:after{box-sizing:border-box}html{font-family:var(--tree-font-family-sans)}.t-visually-hidden{clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}table.t-visually-hidden{table-layout:fixed}.t-button,.t-input,.t-combobox,.t-file-upload,.t-checkbox,.t-switch,.t-select,.t-card,.t-badge,.t-alert,.t-empty-state,.t-timeline,.t-toast,.t-pagination,.t-page-header,.t-tooltip__content{font-family:var(--tree-font-family-sans)}.t-button{--tree-button-bg:var(--tree-color-brand-primary);--tree-button-text:var(--tree-color-brand-contrast);--tree-button-border:transparent;--tree-button-shadow:transparent;justify-content:center;align-items:center;gap:var(--tree-space-2);min-width:max-content;height:var(--tree-size-control-md);padding-inline:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-button-border);border-radius:var(--tree-radius-md);background:var(--tree-button-bg);color:var(--tree-button-text);box-shadow:0 0 0 0 var(--tree-button-shadow);font-size:var(--tree-font-size-md);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-tight);cursor:pointer;transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);text-decoration:none;display:inline-flex;position:relative}.t-button:after{content:"";width:100%;min-width:44px;height:100%;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-button:hover:not(.is-disabled){transform:translateY(-1px)}.t-button:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-button.is-disabled{opacity:.65;cursor:not-allowed}.t-button--sm{height:var(--tree-size-control-sm);padding-inline:var(--tree-space-3);font-size:var(--tree-font-size-sm)}.t-button--lg{height:var(--tree-size-control-lg);padding-inline:var(--tree-space-5);font-size:var(--tree-font-size-lg)}.t-button--block{width:100%;min-width:0}.t-button--align-start{justify-content:flex-start}.t-button--align-end{justify-content:flex-end}.t-button--icon{width:var(--tree-size-control-md);min-width:var(--tree-size-control-md);gap:0;padding-inline:0}.t-button--sm.t-button--icon{width:var(--tree-size-control-sm);min-width:var(--tree-size-control-sm)}.t-button--lg.t-button--icon{width:var(--tree-size-control-lg);min-width:var(--tree-size-control-lg)}.t-button--solid{--tree-button-bg:var(--tree-color-brand-primary);--tree-button-text:var(--tree-color-brand-contrast)}.t-button--outline{--tree-button-bg:var(--tree-color-bg-surface);--tree-button-text:var(--tree-color-text-primary);--tree-button-border:var(--tree-color-border-default)}.t-button--ghost{--tree-button-bg:transparent;--tree-button-text:var(--tree-color-text-primary)}.t-button--soft{--tree-button-bg:var(--tree-color-brand-soft);--tree-button-text:var(--tree-color-brand-primary)}.t-button--danger{--tree-button-bg:var(--tree-color-status-error);--tree-button-text:var(--tree-color-brand-contrast)}.t-button--brand{--tree-button-bg:var(--tree-gradient-brand);--tree-button-text:var(--tree-color-brand-contrast);--tree-button-border:transparent}.t-button--brand:hover:not(.is-disabled){filter:saturate(1.08)brightness(1.04)}.t-button__icon,.t-button__spinner,.t-badge__icon,.t-input__slot{justify-content:center;align-items:center;display:inline-flex}.t-button__spinner .t-spinner{color:currentColor}.t-input{align-items:center;gap:var(--tree-space-2);width:100%;min-inline-size:0;min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-input:focus-within{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-input.is-invalid{border-color:var(--tree-color-status-error)}.t-input.is-disabled{opacity:.68;cursor:not-allowed}.t-input--sm{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.t-input--lg{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.t-input__field{width:100%;min-width:0;color:inherit;font:inherit;background:0 0;border:0;outline:none;padding:0}.t-input__field::placeholder,.t-input__slot{color:var(--tree-color-text-muted)}.t-date-time-picker__content{gap:var(--tree-space-4);width:min(22rem,100vw - 2rem)}.t-date-time-picker__calendar{gap:var(--tree-space-3);display:grid}.t-date-time-picker__summary,.t-date-time-picker__time,.t-date-time-picker__footer{padding-top:var(--tree-space-3);border-top:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-date-time-picker__summary{gap:.35rem;display:grid}.t-date-time-picker__eyebrow{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);letter-spacing:.08em;line-height:var(--tree-font-lineHeight-ui);text-transform:uppercase;margin:0}.t-date-time-picker__summary-value{color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-ui);margin:0}.t-date-time-picker__time{gap:var(--tree-space-3);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.t-date-time-picker__time-field{gap:var(--tree-space-1);display:grid}.t-date-time-picker__time-label{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);text-transform:uppercase}.t-date-time-picker__select{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;min-height:2.5rem;padding:0 var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);font:inherit;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-date-time-picker__select:focus-visible{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-date-time-picker__select:disabled{opacity:.68;cursor:not-allowed}.t-date-time-picker__footer{justify-content:flex-end;gap:var(--tree-space-2);display:flex}.t-file-upload{gap:var(--tree-space-3);width:100%;display:grid}.t-file-upload__dropzone{justify-items:center;gap:var(--tree-space-3);width:100%;padding:var(--tree-space-5);border:var(--tree-border-width-subtle) dashed var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:color-mix(in srgb,var(--tree-color-bg-subtle) 76%,var(--tree-color-bg-surface));color:var(--tree-color-text-primary);text-align:center;cursor:pointer;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:grid;position:relative}.t-file-upload__dropzone:hover{transform:translateY(-1px)}.t-file-upload__dropzone:focus-visible{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-file-upload.is-drag-active .t-file-upload__dropzone{border-color:var(--tree-color-brand-primary);background:color-mix(in srgb,var(--tree-color-brand-soft) 55%,var(--tree-color-bg-surface));box-shadow:0 0 0 6px color-mix(in srgb,var(--tree-color-brand-primary) 24%,transparent);border-style:solid;transform:translateY(-2px)}.t-file-upload.is-drag-reject .t-file-upload__dropzone{border-color:var(--tree-color-status-error);background:color-mix(in srgb,var(--tree-color-status-error) 10%,var(--tree-color-bg-surface));box-shadow:0 0 0 6px color-mix(in srgb,var(--tree-color-status-error) 24%,transparent);border-style:solid;transform:translateY(-2px)}.t-file-upload.has-files .t-file-upload__dropzone{background:var(--tree-color-bg-surface);border-style:solid}.t-file-upload.is-invalid .t-file-upload__dropzone{border-color:var(--tree-color-status-error)}.t-file-upload.is-disabled .t-file-upload__dropzone{opacity:.68;cursor:not-allowed}.t-file-upload__icon{border-radius:var(--tree-radius-pill);background:var(--tree-color-brand-soft);width:3rem;height:3rem;color:var(--tree-color-brand-primary);justify-content:center;align-items:center;display:inline-flex}.t-file-upload__icon-mark{font-size:1.5rem;font-weight:var(--tree-font-weight-semibold);line-height:1}.t-file-upload__content{gap:var(--tree-space-2);justify-items:center;width:min(100%,30rem);display:grid}.t-file-upload__label{color:var(--tree-color-text-primary);font-size:var(--tree-font-size-lg);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);margin:0}.t-file-upload__description{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-body);margin:0}.t-file-upload__browse{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-3);border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-surface);color:var(--tree-color-brand-primary);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);box-shadow:inset 0 0 0 1px var(--tree-color-border-default);justify-content:center;align-items:center;display:inline-flex}.t-file-upload__spinner{top:var(--tree-space-3);right:var(--tree-space-3);position:absolute}.t-file-upload__feedback{gap:var(--tree-space-1);color:var(--tree-color-status-error);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-body);margin:0;padding:0;list-style:none;display:grid}.t-file-upload__files{gap:var(--tree-space-2);display:grid}.t-file-upload__files-header{justify-content:space-between;align-items:center;gap:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-file-upload__files-label{color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);margin:0}.t-file-upload__list{gap:var(--tree-space-2);margin:0;padding:0;list-style:none;display:grid}.t-file-upload__file{justify-content:space-between;align-items:center;gap:var(--tree-space-3);width:100%;padding:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);display:flex}.t-file-upload__file-copy{gap:var(--tree-space-1);flex:auto;min-width:0;display:grid}.t-file-upload__thumb{width:var(--tree-size-control-lg);height:var(--tree-size-control-lg);border-radius:var(--tree-radius-sm);background:var(--tree-color-bg-subtle);color:var(--tree-color-text-muted);flex:none;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.t-file-upload__thumb-image{object-fit:cover;width:100%;height:100%;display:block}.t-file-upload__thumb-fallback{font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-ui)}.t-file-upload__file-progress{width:100%;margin-block-start:var(--tree-space-1)}.t-file-upload__file-status,.t-file-upload__file-error{font-size:var(--tree-font-size-xs);line-height:var(--tree-font-lineHeight-ui);margin:0}.t-file-upload__file-status{color:var(--tree-color-text-muted)}.t-file-upload__file-error{color:var(--tree-color-status-error)}.t-file-upload__proof{margin-inline-end:var(--tree-space-1)}.t-file-upload__file.is-error{border-color:var(--tree-color-status-error);background:color-mix(in srgb,var(--tree-color-status-error) 8%,var(--tree-color-bg-surface))}.t-file-upload__file.is-success{border-color:color-mix(in srgb,var(--tree-color-status-success) 45%,var(--tree-color-border-default))}.t-file-upload__file.is-error .t-file-upload__file-status{color:var(--tree-color-status-error)}.t-file-upload__file.is-success .t-file-upload__file-status{color:var(--tree-color-status-success)}.t-file-upload__file.is-error .t-progress{color:var(--tree-color-status-error)}.t-file-upload__file.is-paused .t-progress{color:var(--tree-color-text-muted)}.t-file-upload__file.is-success .t-progress{color:var(--tree-color-status-success)}.t-file-upload__file-name,.t-file-upload__file-meta{margin:0}.t-file-upload__file-name{color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);word-break:break-word}.t-file-upload__file-meta{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);line-height:var(--tree-font-lineHeight-ui)}.t-file-upload__clear{color:var(--tree-color-brand-primary);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);cursor:pointer;background:0 0;border:0;padding:0}.t-file-upload__remove,.t-file-upload__retry{min-block-size:var(--tree-size-control-lg);padding-inline:var(--tree-space-2);border-radius:var(--tree-radius-sm);color:var(--tree-color-brand-primary);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;display:inline-flex}.t-file-upload__retry{color:var(--tree-color-status-error);font-weight:var(--tree-font-weight-semibold)}.t-file-upload__clear:disabled,.t-file-upload__remove:disabled,.t-file-upload__retry:disabled{opacity:.5;cursor:not-allowed}.t-file-upload__clear:focus-visible,.t-file-upload__remove:focus-visible,.t-file-upload__retry:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);border-radius:var(--tree-radius-sm);outline:none}.t-file-upload__actions{gap:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-file-upload--sm{gap:var(--tree-space-2)}.t-file-upload--sm .t-file-upload__dropzone{padding:var(--tree-space-4)}.t-file-upload--sm .t-file-upload__icon{width:2.5rem;height:2.5rem}.t-file-upload--sm .t-file-upload__label{font-size:var(--tree-font-size-md)}.t-file-upload--lg .t-file-upload__dropzone{padding:var(--tree-space-6)}.t-file-upload--lg .t-file-upload__icon{width:3.5rem;height:3.5rem}.t-file-upload--lg .t-file-upload__label{font-size:var(--tree-font-size-xl)}.t-textarea{align-items:flex-start;gap:var(--tree-space-2);width:100%;padding:var(--tree-space-2) var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-textarea:focus-within{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-textarea.is-invalid{border-color:var(--tree-color-status-error)}.t-textarea.is-disabled{opacity:.68;cursor:not-allowed}.t-textarea--sm{padding:var(--tree-space-1) var(--tree-space-2);font-size:var(--tree-font-size-sm)}.t-textarea--lg{padding:var(--tree-space-3) var(--tree-space-4);font-size:var(--tree-font-size-lg)}.t-textarea__field{width:100%;min-width:0;color:inherit;font:inherit;resize:vertical;background:0 0;border:0;outline:none;padding:0}.t-textarea__field::placeholder{color:var(--tree-color-text-muted)}.t-date-picker{width:100%;min-inline-size:0;display:grid;position:relative}.t-date-picker__trigger,.t-date-picker__nav,.t-date-picker__day{font:inherit}.t-date-picker__trigger{align-items:center;gap:var(--tree-space-2);width:100%;min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);text-align:left;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-date-picker__trigger:focus-visible,.t-date-picker.is-open .t-date-picker__trigger{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-date-picker.is-disabled .t-date-picker__trigger{opacity:.68;cursor:not-allowed}.t-date-picker.is-invalid .t-date-picker__trigger{border-color:var(--tree-color-status-error)}.t-date-picker--sm .t-date-picker__trigger{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.t-date-picker--lg .t-date-picker__trigger{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.t-date-picker__value{min-width:0;color:inherit;flex:1}.t-date-picker__value[data-placeholder]{color:var(--tree-color-text-muted)}.t-date-picker__slot{color:var(--tree-color-text-muted);justify-content:center;align-items:center;display:inline-flex}.t-date-picker__content{top:calc(100% + var(--tree-space-2));z-index:var(--tree-z-dropdown);gap:var(--tree-space-3);width:min(20rem,100vw - 2rem);padding:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);display:grid;position:absolute;left:0}.t-date-picker__header,.t-date-picker__weekdays,.t-date-picker__row{gap:var(--tree-space-1);grid-template-columns:repeat(7,minmax(0,1fr));display:grid}.t-date-picker__header{grid-template-columns:2rem 1fr 2rem;align-items:center}.t-date-picker__month{font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-ui);text-align:center;text-transform:capitalize;margin:0}.t-date-picker__nav{border-radius:var(--tree-radius-sm);width:2rem;height:2rem;color:var(--tree-color-text-muted);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-date-picker__nav:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-date-picker__nav:hover:not(:disabled),.t-date-picker__day:hover:not(:disabled){background:var(--tree-color-brand-soft);color:var(--tree-color-brand-primary)}.t-date-picker__nav:focus-visible,.t-date-picker__day:focus-visible{box-shadow:0 0 0 3px var(--tree-color-focus-ring);outline:none}.t-date-picker__nav:disabled,.t-date-picker__day:disabled{opacity:.45;cursor:not-allowed}.t-date-picker__weekday{font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-muted);text-align:center;text-transform:uppercase}.t-date-picker__grid{gap:var(--tree-space-1);display:grid}.t-date-picker__cell{justify-content:center;display:flex}.t-date-picker__day{border-radius:var(--tree-radius-pill);width:2.25rem;height:2.25rem;color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-date-picker__day:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-date-picker__day.is-muted{color:var(--tree-color-text-muted)}.t-date-picker__day.is-today:not(.is-selected){box-shadow:inset 0 0 0 1px var(--tree-color-border-strong)}.t-date-picker__day.is-selected{background:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast)}.t-modal,.t-modal__trigger{display:inline-flex}.t-modal__portal{z-index:var(--tree-z-modal);position:fixed;top:0;right:0;bottom:0;left:0}.t-modal__backdrop{background:var(--tree-color-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);position:absolute;top:0;right:0;bottom:0;left:0}.t-modal__positioner{min-height:100%;padding:var(--tree-space-4);justify-content:center;align-items:center;display:flex;position:relative}.t-modal__surface{gap:var(--tree-space-3);width:min(100%,34rem);max-height:min(90vh,48rem);padding:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);display:grid;position:relative;overflow:auto}.t-modal__surface:focus-visible{box-shadow:var(--tree-shadow-md),0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-modal__surface--sm{width:min(100%,28rem)}.t-modal__surface--lg{width:min(100%,42rem)}.t-modal__topbar{justify-content:space-between;align-items:start;gap:var(--tree-space-3);display:flex}.t-modal__header{min-width:0}.t-modal__title{font-size:var(--tree-font-size-xl);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);color:var(--tree-color-text-primary);margin:0}.t-modal__description{font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-body);color:var(--tree-color-text-muted);margin:0}.t-modal__body{gap:var(--tree-space-3);color:var(--tree-color-text-primary);display:grid}.t-modal__footer{justify-content:end;gap:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-modal__close{border-radius:var(--tree-radius-md);width:2.75rem;height:2.75rem;color:var(--tree-color-text-muted);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-modal__close:hover{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-modal__close:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-card{gap:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);box-shadow:var(--tree-shadow-xs);display:grid}.t-card--sm{padding:var(--tree-space-3)}.t-card--md{padding:var(--tree-space-4)}.t-card--lg{padding:var(--tree-space-5)}.t-card--soft{background:var(--tree-color-bg-subtle)}.t-card--inset{background:var(--tree-color-bg-subtle);border-color:var(--tree-color-border-default);box-shadow:none}.t-card--interactive{color:inherit;cursor:pointer;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);text-decoration:none}.t-card--interactive:hover{border-color:var(--tree-color-border-strong);box-shadow:var(--tree-shadow-md)}.t-card--interactive:focus-visible{box-shadow:0 0 0 2px var(--tree-color-focus-ring);outline:none}.t-card__header,.t-card__footer{color:var(--tree-color-text-muted)}.t-card__header{justify-content:space-between;align-items:center;gap:var(--tree-space-3);flex-wrap:wrap;display:flex}.t-card__title{min-width:0;font-size:var(--tree-font-size-lg);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);color:var(--tree-color-text-primary)}.t-card__actions{align-items:center;gap:var(--tree-space-2);flex-shrink:0;display:flex}.t-card__body{gap:var(--tree-space-2);display:grid}.t-confirm-dialog{gap:var(--tree-space-4);display:grid}.t-confirm-dialog--with-icon{grid-template-columns:auto 1fr;align-items:start}.t-confirm-dialog__icon{border-radius:var(--tree-radius-pill);background:color-mix(in srgb,var(--tree-color-status-error) 12%,var(--tree-color-bg-surface));width:2.75rem;height:2.75rem;color:var(--tree-color-status-error);justify-content:center;align-items:center;display:inline-flex}.t-confirm-dialog__body{gap:var(--tree-space-2);color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-body);display:grid}.t-confirm-dialog__body>:first-child{margin-top:0}.t-confirm-dialog__body>:last-child{margin-bottom:0}.t-empty-state{justify-items:center;gap:var(--tree-space-4);width:100%;padding:var(--tree-space-5);border:var(--tree-border-width-subtle) dashed var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:color-mix(in srgb,var(--tree-color-bg-subtle) 72%,var(--tree-color-bg-surface));color:var(--tree-color-text-primary);text-align:center;display:grid}.t-empty-state--sm{padding:var(--tree-space-4);gap:var(--tree-space-3)}.t-empty-state--lg{padding:var(--tree-space-6);gap:var(--tree-space-5)}.t-empty-state__icon{border-radius:var(--tree-radius-pill);background:var(--tree-color-brand-soft);width:3.5rem;height:3.5rem;color:var(--tree-color-brand-primary);justify-content:center;align-items:center;display:inline-flex}.t-empty-state--sm .t-empty-state__icon{width:3rem;height:3rem}.t-empty-state--lg .t-empty-state__icon{width:4rem;height:4rem}.t-empty-state__content{gap:var(--tree-space-2);justify-items:center;width:min(100%,32rem);display:grid}.t-empty-state__title{font-size:var(--tree-font-size-xl);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);color:var(--tree-color-text-primary);margin:0}.t-empty-state--sm .t-empty-state__title{font-size:var(--tree-font-size-lg)}.t-empty-state--lg .t-empty-state__title{font-size:var(--tree-font-size-2xl)}.t-empty-state__description{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-body);margin:0}.t-empty-state__body{gap:var(--tree-space-2);color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-body);display:grid}.t-empty-state__actions{justify-content:center;gap:var(--tree-space-2);margin-top:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-icon{vertical-align:middle;color:currentColor;flex-shrink:0;display:inline-block}.t-badge{--tree-badge-solid-bg:var(--tree-color-brand-primary);--tree-badge-solid-text:var(--tree-color-brand-contrast);--tree-badge-outline-bg:var(--tree-color-bg-surface);--tree-badge-outline-text:var(--tree-color-text-primary);--tree-badge-outline-border:var(--tree-color-border-default);--tree-badge-ghost-bg:transparent;--tree-badge-ghost-text:var(--tree-color-text-muted);--tree-badge-soft-bg:var(--tree-color-brand-soft);--tree-badge-soft-text:var(--tree-color-brand-primary);--tree-badge-danger-bg:color-mix(in srgb, var(--tree-color-status-error) 16%, var(--tree-color-bg-surface));--tree-badge-danger-text:var(--tree-color-status-error);align-items:center;gap:var(--tree-space-2);border:var(--tree-border-width-subtle) solid transparent;border-radius:var(--tree-radius-pill);width:fit-content;padding-inline:var(--tree-space-3);font-weight:var(--tree-font-weight-medium);line-height:1;display:inline-flex}.t-badge--tone-success{--tree-badge-solid-bg:var(--tree-color-status-success);--tree-badge-outline-text:var(--tree-color-status-success);--tree-badge-outline-border:color-mix(in srgb, var(--tree-color-status-success) 36%, var(--tree-color-border-default));--tree-badge-ghost-text:var(--tree-color-status-success);--tree-badge-soft-bg:color-mix(in srgb, var(--tree-color-status-success) 14%, var(--tree-color-bg-surface));--tree-badge-soft-text:var(--tree-color-status-success);--tree-badge-danger-bg:color-mix(in srgb, var(--tree-color-status-success) 18%, var(--tree-color-bg-surface));--tree-badge-danger-text:var(--tree-color-status-success)}.t-badge--tone-warning{--tree-badge-solid-bg:var(--tree-color-status-warning);--tree-badge-outline-text:var(--tree-color-status-warning);--tree-badge-outline-border:color-mix(in srgb, var(--tree-color-status-warning) 36%, var(--tree-color-border-default));--tree-badge-ghost-text:var(--tree-color-status-warning);--tree-badge-soft-bg:color-mix(in srgb, var(--tree-color-status-warning) 14%, var(--tree-color-bg-surface));--tree-badge-soft-text:var(--tree-color-status-warning);--tree-badge-danger-bg:color-mix(in srgb, var(--tree-color-status-warning) 18%, var(--tree-color-bg-surface));--tree-badge-danger-text:var(--tree-color-status-warning)}.t-badge--tone-danger{--tree-badge-solid-bg:var(--tree-color-status-error);--tree-badge-outline-text:var(--tree-color-status-error);--tree-badge-outline-border:color-mix(in srgb, var(--tree-color-status-error) 36%, var(--tree-color-border-default));--tree-badge-ghost-text:var(--tree-color-status-error);--tree-badge-soft-bg:color-mix(in srgb, var(--tree-color-status-error) 14%, var(--tree-color-bg-surface));--tree-badge-soft-text:var(--tree-color-status-error)}.t-badge--tone-info{--tree-badge-solid-bg:var(--tree-color-status-info);--tree-badge-outline-text:var(--tree-color-status-info);--tree-badge-outline-border:color-mix(in srgb, var(--tree-color-status-info) 36%, var(--tree-color-border-default));--tree-badge-ghost-text:var(--tree-color-status-info);--tree-badge-soft-bg:color-mix(in srgb, var(--tree-color-status-info) 14%, var(--tree-color-bg-surface));--tree-badge-soft-text:var(--tree-color-status-info);--tree-badge-danger-bg:color-mix(in srgb, var(--tree-color-status-info) 18%, var(--tree-color-bg-surface));--tree-badge-danger-text:var(--tree-color-status-info)}.t-badge--sm{min-height:1.5rem;font-size:var(--tree-font-size-xs)}.t-badge--md{min-height:1.75rem;font-size:var(--tree-font-size-sm)}.t-badge--lg{min-height:2rem;font-size:var(--tree-font-size-md)}.t-badge--solid{background:var(--tree-badge-solid-bg);color:var(--tree-badge-solid-text)}.t-badge--outline{background:var(--tree-badge-outline-bg);color:var(--tree-badge-outline-text);border-color:var(--tree-badge-outline-border)}.t-badge--ghost{background:var(--tree-badge-ghost-bg);color:var(--tree-badge-ghost-text)}.t-badge--soft{background:var(--tree-badge-soft-bg);color:var(--tree-badge-soft-text)}.t-badge--danger{background:var(--tree-badge-danger-bg);color:var(--tree-badge-danger-text)}.t-spinner{--tree-spinner-size:var(--tree-size-icon-md);width:var(--tree-spinner-size);height:var(--tree-spinner-size);color:var(--tree-color-brand-primary);justify-content:center;align-items:center;display:inline-flex}.t-spinner--sm{--tree-spinner-size:var(--tree-size-icon-sm)}.t-spinner--lg{--tree-spinner-size:var(--tree-size-icon-lg)}.t-spinner__ring{border:2px solid color-mix(in srgb,currentColor 20%,transparent);border-right-color:#0000;border-radius:50%;width:100%;height:100%;animation:.7s linear infinite t-spin}.t-tooltip{display:inline-flex;position:relative}.t-tooltip__trigger{display:inline-flex}.t-tooltip__content{z-index:var(--tree-z-dropdown);min-width:max-content;max-width:18rem;padding:var(--tree-space-2) var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-text-primary);color:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-sm);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-base);position:absolute;left:50%;transform:translate(-50%)}.t-tooltip__content--top{bottom:calc(100% + var(--tree-space-2))}.t-tooltip__content--bottom{top:calc(100% + var(--tree-space-2))}.t-tooltip__content--left{top:50%;left:auto;right:calc(100% + var(--tree-space-2));transform:translateY(-50%)}.t-tooltip__content--right{top:50%;left:calc(100% + var(--tree-space-2));transform:translateY(-50%)}.t-fade-enter-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-easeOut),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-easeOut)}.t-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-easeIn),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-easeIn)}.t-fade-enter-from,.t-fade-leave-to{opacity:0;transform:translate(-50%,4px)}.t-tooltip__content--left.t-fade-enter-from,.t-tooltip__content--left.t-fade-leave-to{opacity:0;transform:translateY(-50%)translate(4px)}.t-tooltip__content--right.t-fade-enter-from,.t-tooltip__content--right.t-fade-leave-to{opacity:0;transform:translateY(-50%)translate(-4px)}.t-date-picker .t-fade-enter-from,.t-date-picker .t-fade-leave-to{transform:translateY(4px)}.t-modal-fade-enter-active{transition:opacity var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeOut),transform var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeOut)}.t-modal-fade-leave-active{transition:opacity var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeIn),transform var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeIn)}.t-modal-fade-enter-from,.t-modal-fade-leave-to{opacity:0}.t-modal-fade-enter-from .t-modal__surface,.t-modal-fade-leave-to .t-modal__surface{transform:translateY(.5rem)scale(.98)}.t-drawer{display:inline-flex}:is(.t-drawer:not(:has(>.t-drawer__trigger)),.t-modal:not(:has(>.t-modal__trigger))){display:contents}.t-drawer__trigger{display:inline-flex}.t-drawer__portal{z-index:var(--tree-z-modal);position:fixed;top:0;right:0;bottom:0;left:0}.t-drawer__backdrop{background:var(--tree-color-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);position:absolute;top:0;right:0;bottom:0;left:0}.t-drawer__surface{gap:var(--tree-space-3);padding:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);grid-template-rows:auto auto 1fr auto;display:grid;position:fixed;overflow:auto}.t-drawer__surface:focus-visible{box-shadow:var(--tree-shadow-md),0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-drawer__surface--right{border-radius:var(--tree-radius-lg) 0 0 var(--tree-radius-lg);top:0;bottom:0;right:0}.t-drawer__surface--left{border-radius:0 var(--tree-radius-lg) var(--tree-radius-lg) 0;top:0;bottom:0;left:0}.t-drawer__surface--top{border-radius:0 0 var(--tree-radius-lg) var(--tree-radius-lg);top:0;left:0;right:0}.t-drawer__surface--bottom{border-radius:var(--tree-radius-lg) var(--tree-radius-lg) 0 0;bottom:0;left:0;right:0}.t-drawer__surface--right.t-drawer__surface--sm,.t-drawer__surface--left.t-drawer__surface--sm{width:min(100%,20rem)}.t-drawer__surface--right.t-drawer__surface--md,.t-drawer__surface--left.t-drawer__surface--md{width:min(100%,28rem)}.t-drawer__surface--right.t-drawer__surface--lg,.t-drawer__surface--left.t-drawer__surface--lg{width:min(100%,40rem)}.t-drawer__surface--top.t-drawer__surface--sm,.t-drawer__surface--bottom.t-drawer__surface--sm{height:min(100%,14rem)}.t-drawer__surface--top.t-drawer__surface--md,.t-drawer__surface--bottom.t-drawer__surface--md{height:min(100%,22rem)}.t-drawer__surface--top.t-drawer__surface--lg,.t-drawer__surface--bottom.t-drawer__surface--lg{height:min(100%,32rem)}.t-drawer__topbar{justify-content:space-between;align-items:start;gap:var(--tree-space-3);display:flex}.t-drawer__header{min-width:0}.t-drawer__title{font-size:var(--tree-font-size-xl);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);color:var(--tree-color-text-primary);margin:0}.t-drawer__description{font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-body);color:var(--tree-color-text-muted);margin:0}.t-drawer__body{gap:var(--tree-space-3);color:var(--tree-color-text-primary);padding:var(--tree-space-1);margin:calc(var(--tree-space-1) * -1);display:grid;overflow:auto}.t-drawer__footer{justify-content:end;gap:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-drawer__close{border-radius:var(--tree-radius-md);width:2.75rem;height:2.75rem;color:var(--tree-color-text-muted);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-drawer__close:hover{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-drawer__close:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-drawer-fade-enter-active{transition:opacity var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeOut)}.t-drawer-fade-leave-active{transition:opacity var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeIn)}.t-drawer-fade-enter-active .t-drawer__surface{transition:transform var(--tree-motion-duration-normal) var(--tree-motion-easing-easeOut)}.t-drawer-fade-leave-active .t-drawer__surface{transition:transform var(--tree-motion-duration-normal) var(--tree-motion-easing-easeIn)}.t-drawer-fade-enter-from,.t-drawer-fade-leave-to{opacity:0}.t-drawer-fade-enter-from .t-drawer__surface--right,.t-drawer-fade-leave-to .t-drawer__surface--right{transform:translate(100%)}.t-drawer-fade-enter-from .t-drawer__surface--left,.t-drawer-fade-leave-to .t-drawer__surface--left{transform:translate(-100%)}.t-drawer-fade-enter-from .t-drawer__surface--top,.t-drawer-fade-leave-to .t-drawer__surface--top{transform:translateY(-100%)}.t-drawer-fade-enter-from .t-drawer__surface--bottom,.t-drawer-fade-leave-to .t-drawer__surface--bottom{transform:translateY(100%)}.t-checkbox{align-items:center;gap:var(--tree-space-2);cursor:pointer;font-family:var(--tree-font-family-sans);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);display:inline-flex;position:relative}.t-checkbox.is-disabled{opacity:.65;cursor:not-allowed}.t-checkbox__input{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.t-checkbox__control{border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-sm);background:var(--tree-color-bg-surface);width:1.25rem;height:1.25rem;color:var(--tree-color-brand-contrast);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-checkbox__control:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-checkbox.is-checked .t-checkbox__control,.t-checkbox.is-indeterminate .t-checkbox__control{background:var(--tree-color-brand-primary);border-color:var(--tree-color-brand-primary)}.t-checkbox__input:focus-visible~.t-checkbox__control{box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-checkbox.is-invalid .t-checkbox__control{border-color:var(--tree-color-status-error)}.t-checkbox__icon{width:.875rem;height:.875rem}.t-checkbox__label{-webkit-user-select:none;user-select:none}.t-checkbox--sm{font-size:var(--tree-font-size-sm)}.t-checkbox--sm .t-checkbox__control{width:1rem;height:1rem}.t-checkbox--sm .t-checkbox__icon{width:.75rem;height:.75rem}.t-checkbox--lg{font-size:var(--tree-font-size-lg)}.t-checkbox--lg .t-checkbox__control{width:1.5rem;height:1.5rem}.t-checkbox--lg .t-checkbox__icon{width:1rem;height:1rem}.t-radio{align-items:center;gap:var(--tree-space-2);cursor:pointer;font-family:var(--tree-font-family-sans);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);display:inline-flex;position:relative}.t-radio.is-disabled{opacity:.65;cursor:not-allowed}.t-radio__input{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.t-radio__control{border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-surface);width:1.25rem;height:1.25rem;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-radio__control:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-radio.is-checked .t-radio__control{background:var(--tree-color-bg-surface);border-color:var(--tree-color-brand-primary)}.t-radio__input:focus-visible~.t-radio__control{box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-radio.is-invalid .t-radio__control{border-color:var(--tree-color-status-error)}.t-radio__dot{border-radius:var(--tree-radius-pill);background:var(--tree-color-brand-primary);width:.5rem;height:.5rem;display:block}.t-radio__label{-webkit-user-select:none;user-select:none}.t-radio--sm{font-size:var(--tree-font-size-sm)}.t-radio--sm .t-radio__control{width:1rem;height:1rem}.t-radio--sm .t-radio__dot{width:.375rem;height:.375rem}.t-radio--lg{font-size:var(--tree-font-size-lg)}.t-radio--lg .t-radio__control{width:1.5rem;height:1.5rem}.t-radio--lg .t-radio__dot{width:.625rem;height:.625rem}.t-radio-group{gap:var(--tree-space-2);flex-direction:column;display:flex}.t-switch{align-items:center;gap:var(--tree-space-2);cursor:pointer;font-family:var(--tree-font-family-sans);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);display:inline-flex;position:relative}.t-switch.is-disabled{opacity:.65;cursor:not-allowed}.t-switch__input{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.t-switch__track{border:var(--tree-border-width-subtle) solid var(--tree-color-border-strong);border-radius:var(--tree-radius-pill);background:var(--tree-color-border-strong);width:2.5rem;height:1.5rem;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0;align-items:center;display:inline-flex;position:relative}.t-switch__track:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-switch__thumb{border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-surface);width:1.125rem;height:1.125rem;box-shadow:var(--tree-shadow-sm);transition:left var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);position:absolute;top:50%;left:.125rem;transform:translateY(-50%)}.t-switch.is-checked .t-switch__track{background:var(--tree-color-brand-primary);border-color:var(--tree-color-brand-primary)}.t-switch.is-checked .t-switch__thumb{left:calc(100% - 1.25rem)}.t-switch__input:focus-visible~.t-switch__track{box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-switch.is-invalid .t-switch__track{border-color:var(--tree-color-status-error)}.t-switch__label{-webkit-user-select:none;user-select:none}.t-switch--sm{font-size:var(--tree-font-size-sm)}.t-switch--sm .t-switch__track{width:2rem;height:1.25rem}.t-switch--sm .t-switch__thumb{width:.875rem;height:.875rem}.t-switch--sm.is-checked .t-switch__thumb{left:calc(100% - 1rem)}.t-switch--lg{font-size:var(--tree-font-size-lg)}.t-switch--lg .t-switch__track{width:3rem;height:1.75rem}.t-switch--lg .t-switch__thumb{width:1.375rem;height:1.375rem}.t-switch--lg.is-checked .t-switch__thumb{left:calc(100% - 1.5rem)}.t-combobox{width:100%;display:inline-flex;position:relative}.t-combobox__control{align-items:center;gap:var(--tree-space-2);width:100%;min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-combobox:focus-within .t-combobox__control,.t-combobox.is-open .t-combobox__control{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-combobox.is-invalid .t-combobox__control{border-color:var(--tree-color-status-error)}.t-combobox.is-invalid:focus-within .t-combobox__control,.t-combobox.is-invalid.is-open .t-combobox__control{box-shadow:0 0 0 4px color-mix(in srgb,var(--tree-color-status-error) 20%,transparent)}.t-combobox.is-disabled .t-combobox__control{opacity:.68;cursor:not-allowed}.t-combobox--sm .t-combobox__control{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.t-combobox--lg .t-combobox__control{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.t-combobox__input{width:100%;min-width:0;color:inherit;font:inherit;background:0 0;border:0;outline:none;padding:0}.t-combobox__input::placeholder{color:var(--tree-color-text-muted)}.t-combobox__slot{color:var(--tree-color-text-muted);justify-content:center;align-items:center;display:inline-flex}.t-combobox__indicator{width:1em;height:1em;color:var(--tree-color-text-muted);pointer-events:none;transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0}.t-combobox.is-open .t-combobox__indicator{transform:rotate(180deg)}.t-combobox__listbox{top:calc(100% + var(--tree-space-2));z-index:var(--tree-z-dropdown);width:100%;max-height:16rem;padding:var(--tree-space-1);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);margin:0;list-style:none;position:absolute;left:0;overflow-y:auto}.t-combobox__option{justify-content:space-between;align-items:flex-start;gap:var(--tree-space-3);padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-sm);color:var(--tree-color-text-primary);cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);outline:none;display:flex}.t-combobox__option:hover,.t-combobox__option.is-active{background:var(--tree-color-brand-soft)}.t-combobox__option.is-selected{font-weight:var(--tree-font-weight-medium);color:var(--tree-color-brand-primary)}.t-combobox__option.is-disabled{opacity:.5;cursor:not-allowed}.t-combobox__option.is-disabled:hover{background:0 0}.t-combobox__option-copy{gap:var(--tree-space-1);min-width:0;display:grid}.t-combobox__option-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.t-combobox__option-description{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-combobox__empty{padding:var(--tree-space-3);color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-combobox__check{width:1em;height:1em;color:var(--tree-color-brand-primary);flex-shrink:0;margin-top:.125rem}.t-combobox .t-fade-enter-active,.t-combobox .t-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-combobox .t-fade-enter-from,.t-combobox .t-fade-leave-to{opacity:0;transform:translateY(4px)}.t-select{width:100%;min-inline-size:0;display:inline-flex;position:relative}.t-select__trigger{align-items:center;gap:var(--tree-space-2);width:100%;min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);font:inherit;cursor:pointer;text-align:start;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-select__trigger:focus-visible{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-select.is-open .t-select__trigger{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-select.is-invalid .t-select__trigger{border-color:var(--tree-color-status-error)}.t-select.is-invalid .t-select__trigger:focus-visible,.t-select.is-invalid.is-open .t-select__trigger{box-shadow:0 0 0 4px color-mix(in srgb,var(--tree-color-status-error) 20%,transparent)}.t-select.is-disabled .t-select__trigger{opacity:.68;cursor:not-allowed}.t-select--sm .t-select__trigger{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.t-select--lg .t-select__trigger{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.t-select__value{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.t-select__value[data-placeholder]{color:var(--tree-color-text-muted)}.t-select__chevron{width:1em;height:1em;color:var(--tree-color-text-muted);pointer-events:none;transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0}.t-select.is-open .t-select__chevron{transform:rotate(180deg)}.t-select__slot{color:var(--tree-color-text-muted);justify-content:center;align-items:center;display:inline-flex}.t-select__listbox{top:calc(100% + var(--tree-space-2));z-index:var(--tree-z-dropdown);width:100%;max-height:15rem;padding:var(--tree-space-1);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);margin:0;list-style:none;position:absolute;left:0;overflow-y:auto}.t-select--drop-up .t-select__listbox{top:auto;bottom:calc(100% + var(--tree-space-2))}.t-select__option{align-items:center;gap:var(--tree-space-2);padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-sm);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);outline:none;display:flex}.t-select__option:hover,.t-select__option.is-focused{background:var(--tree-color-brand-soft)}.t-select__option:focus-visible{background:var(--tree-color-brand-soft);box-shadow:0 0 0 2px var(--tree-color-focus-ring) inset}.t-select__option.is-selected{font-weight:var(--tree-font-weight-medium);color:var(--tree-color-brand-primary)}.t-select__option.is-disabled{opacity:.5;cursor:not-allowed}.t-select__option.is-disabled:hover{background:0 0}.t-select__check{width:1em;height:1em;color:var(--tree-color-brand-primary);flex-shrink:0;margin-inline-start:auto}.t-select .t-fade-enter-active,.t-select .t-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-select .t-fade-enter-from,.t-select .t-fade-leave-to{opacity:0;transform:translateY(4px)}.t-form-field{gap:var(--tree-space-2);font-family:var(--tree-font-family-sans);display:grid}.t-form-field.is-disabled{opacity:.65}.t-form-field__label{align-items:center;gap:var(--tree-space-1);font-size:var(--tree-font-size-md);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);display:inline-flex}.t-form-field--sm .t-form-field__label{font-size:var(--tree-font-size-sm)}.t-form-field--lg .t-form-field__label{font-size:var(--tree-font-size-lg)}.t-form-field__required{color:var(--tree-color-status-error)}.t-form-field__control{display:grid}.t-form-field__hint{font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-base);color:var(--tree-color-text-muted);margin:0}.t-form-field__error{font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-base);color:var(--tree-color-status-error);margin:0}.t-progress{--tree-progress-height:.5rem;width:100%;color:var(--tree-color-brand-primary);align-items:center;display:inline-flex}.t-progress--sm{--tree-progress-height:.25rem}.t-progress--lg{--tree-progress-height:.75rem}.t-progress__track{width:100%;height:var(--tree-progress-height);background:color-mix(in srgb,currentColor 16%,transparent);border-radius:var(--tree-radius-pill);overflow:hidden}.t-progress__fill{border-radius:var(--tree-radius-pill);height:100%;transition:width var(--tree-motion-duration-normal) var(--tree-motion-easing-standard);background:currentColor}.t-progress--indeterminate .t-progress__fill{width:40%;animation:t-progress-slide 1.4s var(--tree-motion-easing-easeInOut) infinite}@keyframes t-progress-slide{0%{transform:translate(-100%)}to{transform:translate(250%)}}.t-alert{align-items:flex-start;gap:var(--tree-space-3);width:100%;padding:var(--tree-space-3) var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-alert-border);border-radius:var(--tree-radius-md);background:var(--tree-alert-bg);color:var(--tree-alert-text);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-body);display:flex}.t-alert--sm{padding:var(--tree-space-2) var(--tree-space-3);font-size:var(--tree-font-size-sm)}.t-alert--lg{padding:var(--tree-space-4) var(--tree-space-5);font-size:var(--tree-font-size-lg)}.t-alert--info{--tree-alert-bg:color-mix(in srgb, var(--tree-color-status-info) 10%, var(--tree-color-bg-surface));--tree-alert-border:color-mix(in srgb, var(--tree-color-status-info) 30%, var(--tree-color-border-default));--tree-alert-text:var(--tree-color-text-primary);--tree-alert-accent:var(--tree-color-status-info)}.t-alert--success{--tree-alert-bg:color-mix(in srgb, var(--tree-color-status-success) 10%, var(--tree-color-bg-surface));--tree-alert-border:color-mix(in srgb, var(--tree-color-status-success) 30%, var(--tree-color-border-default));--tree-alert-text:var(--tree-color-text-primary);--tree-alert-accent:var(--tree-color-status-success)}.t-alert--warning{--tree-alert-bg:color-mix(in srgb, var(--tree-color-status-warning) 10%, var(--tree-color-bg-surface));--tree-alert-border:color-mix(in srgb, var(--tree-color-status-warning) 30%, var(--tree-color-border-default));--tree-alert-text:var(--tree-color-text-primary);--tree-alert-accent:var(--tree-color-status-warning)}.t-alert--danger{--tree-alert-bg:color-mix(in srgb, var(--tree-color-status-error) 10%, var(--tree-color-bg-surface));--tree-alert-border:color-mix(in srgb, var(--tree-color-status-error) 30%, var(--tree-color-border-default));--tree-alert-text:var(--tree-color-text-primary);--tree-alert-accent:var(--tree-color-status-error)}.t-alert__icon{color:var(--tree-alert-accent);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.t-alert__content{flex:1;min-width:0}.t-alert__dismiss{border-radius:var(--tree-radius-sm);width:1.5rem;height:1.5rem;color:var(--tree-alert-accent);cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-alert__dismiss:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-alert__dismiss:hover{background:color-mix(in srgb,var(--tree-alert-accent) 14%,transparent)}.t-alert__dismiss:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-skeleton{background:color-mix(in srgb,var(--tree-color-text-primary) 12%,var(--tree-color-bg-surface));border-radius:var(--tree-radius-md);line-height:1;display:inline-block;position:relative;overflow:hidden}.t-skeleton--pulse{animation:1.5s ease-in-out infinite t-skeleton-pulse}.t-skeleton--wave{overflow:hidden}.t-skeleton--wave:after{content:"";background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--tree-color-bg-surface) 40%,transparent),transparent);animation:1.6s linear infinite t-skeleton-wave;position:absolute;top:0;right:0;bottom:0;left:0}@keyframes t-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes t-skeleton-wave{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes t-spin{to{transform:rotate(360deg)}}.t-toast-provider{z-index:var(--tree-z-toast);gap:var(--tree-space-2);max-width:min(100vw - var(--tree-space-4) * 2,24rem);pointer-events:none;flex-direction:column;max-height:100vh;display:flex;position:fixed}.t-toast-provider--top-right{top:var(--tree-space-4);right:var(--tree-space-4);align-items:flex-end}.t-toast-provider--top-left{top:var(--tree-space-4);left:var(--tree-space-4);align-items:flex-start}.t-toast-provider--top-center{top:var(--tree-space-4);align-items:center;left:50%;transform:translate(-50%)}.t-toast-provider--bottom-right{bottom:var(--tree-space-4);right:var(--tree-space-4);align-items:flex-end}.t-toast-provider--bottom-left{bottom:var(--tree-space-4);left:var(--tree-space-4);align-items:flex-start}.t-toast-provider--bottom-center{bottom:var(--tree-space-4);align-items:center;left:50%;transform:translate(-50%)}.t-toast{align-items:flex-start;gap:var(--tree-space-3);width:24rem;max-width:100%;padding:var(--tree-space-3) var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-toast-border);border-radius:var(--tree-radius-md);background:var(--tree-toast-bg);color:var(--tree-toast-text);font-family:var(--tree-font-family-sans);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-body);box-shadow:var(--tree-shadow-md);pointer-events:auto;display:flex}.t-toast--info{--tree-toast-bg:var(--tree-color-bg-surface);--tree-toast-border:color-mix(in srgb, var(--tree-color-status-info) 30%, var(--tree-color-border-default));--tree-toast-text:var(--tree-color-text-primary);--tree-toast-accent:var(--tree-color-status-info)}.t-toast--success{--tree-toast-bg:var(--tree-color-bg-surface);--tree-toast-border:color-mix(in srgb, var(--tree-color-status-success) 30%, var(--tree-color-border-default));--tree-toast-text:var(--tree-color-text-primary);--tree-toast-accent:var(--tree-color-status-success)}.t-toast--warning{--tree-toast-bg:var(--tree-color-bg-surface);--tree-toast-border:color-mix(in srgb, var(--tree-color-status-warning) 30%, var(--tree-color-border-default));--tree-toast-text:var(--tree-color-text-primary);--tree-toast-accent:var(--tree-color-status-warning)}.t-toast--danger{--tree-toast-bg:var(--tree-color-bg-surface);--tree-toast-border:color-mix(in srgb, var(--tree-color-status-error) 30%, var(--tree-color-border-default));--tree-toast-text:var(--tree-color-text-primary);--tree-toast-accent:var(--tree-color-status-error)}.t-toast__icon{color:var(--tree-toast-accent);flex-shrink:0;justify-content:center;align-items:center;margin-top:1px;display:inline-flex}.t-toast__content{flex:1;min-width:0}.t-toast__title{font-weight:var(--tree-font-weight-medium);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);margin:0}.t-toast__description{margin:var(--tree-space-1) 0 0;font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-body);color:var(--tree-color-text-muted)}.t-toast__close{border-radius:var(--tree-radius-sm);width:1.5rem;height:1.5rem;color:var(--tree-color-text-muted);cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-toast__close:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-toast__close:hover{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-toast__close:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-toast-enter-active{transition:opacity var(--tree-motion-duration-normal) var(--tree-motion-easing-easeOut),transform var(--tree-motion-duration-normal) var(--tree-motion-easing-easeOut)}.t-toast-leave-active{transition:opacity var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeIn),transform var(--tree-motion-duration-moderate) var(--tree-motion-easing-easeIn)}.t-toast-enter-from{opacity:0;transform:translateY(.75rem)}.t-toast-leave-to{opacity:0;transform:translate(1rem)}.t-pagination{font-family:var(--tree-font-family-sans);align-items:center;display:inline-flex}.t-pagination__list{align-items:center;gap:var(--tree-space-1);margin:0;padding:0;list-style:none;display:flex}.t-pagination__item{display:flex}.t-pagination__button{border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);font-family:inherit;font-weight:var(--tree-font-weight-medium);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);justify-content:center;align-items:center;display:inline-flex;position:relative}.t-pagination__button:after{content:"";min-width:44px;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-pagination__button:hover:not(:disabled):not(.is-active){background:var(--tree-color-bg-subtle);border-color:var(--tree-color-border-strong)}.t-pagination__button:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-pagination__button.is-active{background:var(--tree-color-brand-primary);border-color:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast)}.t-pagination__button:disabled{opacity:.5;cursor:not-allowed}.t-pagination__ellipsis{color:var(--tree-color-text-muted);pointer-events:none;justify-content:center;align-items:center;font-family:inherit;display:inline-flex}.t-pagination__icon{width:1em;height:1em}.t-pagination--sm .t-pagination__button{min-width:var(--tree-size-control-sm);height:var(--tree-size-control-sm);padding:0 var(--tree-space-2);font-size:var(--tree-font-size-xs)}.t-pagination--sm .t-pagination__ellipsis{min-width:var(--tree-size-control-sm);height:var(--tree-size-control-sm);font-size:var(--tree-font-size-xs)}.t-pagination--md .t-pagination__button{min-width:var(--tree-size-control-md);height:var(--tree-size-control-md);padding:0 var(--tree-space-3);font-size:var(--tree-font-size-sm)}.t-pagination--md .t-pagination__ellipsis{min-width:var(--tree-size-control-md);height:var(--tree-size-control-md);font-size:var(--tree-font-size-sm)}.t-pagination--lg .t-pagination__button{min-width:var(--tree-size-control-lg);height:var(--tree-size-control-lg);padding:0 var(--tree-space-4);font-size:var(--tree-font-size-md)}.t-pagination--lg .t-pagination__ellipsis{min-width:var(--tree-size-control-lg);height:var(--tree-size-control-lg);font-size:var(--tree-font-size-md)}.t-pagination.is-disabled{opacity:.5;pointer-events:none}.t-toast-move{transition:transform var(--tree-motion-duration-normal) var(--tree-motion-easing-standard)}.t-dropdown{display:inline-flex;position:relative}.t-dropdown__trigger-wrapper{display:inline-flex}.t-dropdown__trigger{align-items:center;gap:var(--tree-space-2);min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);font:inherit;cursor:pointer;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-dropdown__trigger:focus-visible{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-dropdown.is-open .t-dropdown__trigger{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-dropdown.is-disabled .t-dropdown__trigger{opacity:.68;cursor:not-allowed}.t-dropdown--sm .t-dropdown__trigger{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2);font-size:var(--tree-font-size-sm)}.t-dropdown--lg .t-dropdown__trigger{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4);font-size:var(--tree-font-size-lg)}.t-dropdown__label{text-align:start;flex:1;min-width:0}.t-dropdown__chevron{width:1em;height:1em;color:var(--tree-color-text-muted);pointer-events:none;transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0}.t-dropdown.is-open .t-dropdown__chevron{transform:rotate(180deg)}.t-dropdown__menu{top:calc(100% + var(--tree-space-2));z-index:var(--tree-z-dropdown);min-width:max-content;max-height:15rem;padding:var(--tree-space-1);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);margin:0;list-style:none;position:absolute;left:0;overflow-y:auto}.t-dropdown--align-end .t-dropdown__menu{left:auto;right:0}.t-dropdown__item{align-items:center;gap:var(--tree-space-2);padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-sm);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);white-space:nowrap;cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);outline:none;display:flex}.t-dropdown__item:hover,.t-dropdown__item.is-focused{background:var(--tree-color-brand-soft)}.t-dropdown__item:focus-visible{background:var(--tree-color-brand-soft);box-shadow:0 0 0 2px var(--tree-color-focus-ring) inset}.t-dropdown__item.is-disabled{opacity:.5;cursor:not-allowed}.t-dropdown__item.is-disabled:hover{background:0 0}.t-dropdown--sm .t-dropdown__item{padding:var(--tree-space-1) var(--tree-space-2);font-size:var(--tree-font-size-sm)}.t-dropdown--lg .t-dropdown__item{padding:var(--tree-space-3) var(--tree-space-4);font-size:var(--tree-font-size-lg)}.t-dropdown .t-fade-enter-active,.t-dropdown .t-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-dropdown .t-fade-enter-from,.t-dropdown .t-fade-leave-to{opacity:0;transform:translateY(4px)}.t-popover{display:inline-flex;position:relative}.t-popover__anchor{display:inline-flex}.t-popover__content{z-index:var(--tree-z-dropdown);min-width:12rem;max-width:24rem;padding:var(--tree-popover-pad,var(--tree-space-4));border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);box-shadow:var(--tree-shadow-md);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-base);outline:none;position:absolute}.t-popover__content--sm{--tree-popover-pad:var(--tree-space-3)}.t-popover__content--lg{--tree-popover-pad:var(--tree-space-5)}.t-popover__content--top{bottom:calc(100% + var(--tree-space-2));left:50%;transform:translate(-50%)}.t-popover__content--bottom{top:calc(100% + var(--tree-space-2));left:50%;transform:translate(-50%)}.t-popover__content--left{top:50%;right:calc(100% + var(--tree-space-2));transform:translateY(-50%)}.t-popover__content--right{top:50%;left:calc(100% + var(--tree-space-2));transform:translateY(-50%)}.t-popover__content--top.t-popover__content--align-start,.t-popover__content--bottom.t-popover__content--align-start{left:0;transform:none}.t-popover__content--top.t-popover__content--align-end,.t-popover__content--bottom.t-popover__content--align-end{left:auto;right:0;transform:none}.t-popover__content--left.t-popover__content--align-start,.t-popover__content--right.t-popover__content--align-start{top:0;transform:none}.t-popover__content--left.t-popover__content--align-end,.t-popover__content--right.t-popover__content--align-end{top:auto;bottom:0;transform:none}.t-popover-fade-enter-active,.t-popover-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-easeOut),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-easeOut)}.t-popover-fade-enter-from,.t-popover-fade-leave-to{opacity:0}.t-popover__content--top.t-popover-fade-enter-from,.t-popover__content--top.t-popover-fade-leave-to{transform:translate(-50%)translateY(4px)}.t-popover__content--bottom.t-popover-fade-enter-from,.t-popover__content--bottom.t-popover-fade-leave-to{transform:translate(-50%)translateY(-4px)}.t-popover__content--left.t-popover-fade-enter-from,.t-popover__content--left.t-popover-fade-leave-to{transform:translateY(-50%)translate(4px)}.t-popover__content--right.t-popover-fade-enter-from,.t-popover__content--right.t-popover-fade-leave-to{transform:translateY(-50%)translate(-4px)}.t-popover__content--align-start.t-popover__content--top.t-popover-fade-enter-from,.t-popover__content--align-start.t-popover__content--top.t-popover-fade-leave-to,.t-popover__content--align-start.t-popover__content--bottom.t-popover-fade-enter-from,.t-popover__content--align-start.t-popover__content--bottom.t-popover-fade-leave-to,.t-popover__content--align-end.t-popover__content--top.t-popover-fade-enter-from,.t-popover__content--align-end.t-popover__content--top.t-popover-fade-leave-to,.t-popover__content--align-end.t-popover__content--bottom.t-popover-fade-enter-from,.t-popover__content--align-end.t-popover__content--bottom.t-popover-fade-leave-to{transform:translateY(-4px)}.t-popover__content--align-start.t-popover__content--left.t-popover-fade-enter-from,.t-popover__content--align-start.t-popover__content--left.t-popover-fade-leave-to,.t-popover__content--align-start.t-popover__content--right.t-popover-fade-enter-from,.t-popover__content--align-start.t-popover__content--right.t-popover-fade-leave-to,.t-popover__content--align-end.t-popover__content--left.t-popover-fade-enter-from,.t-popover__content--align-end.t-popover__content--left.t-popover-fade-leave-to,.t-popover__content--align-end.t-popover__content--right.t-popover-fade-enter-from,.t-popover__content--align-end.t-popover__content--right.t-popover-fade-leave-to{transform:translate(4px)}.t-accordion{width:100%}.t-accordion__item{border-bottom:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-accordion__heading{font-size:inherit;font-weight:inherit;margin:0}.t-accordion__trigger{width:100%;min-height:var(--tree-size-control-md);padding:var(--tree-space-3) var(--tree-space-1);color:var(--tree-color-text-primary);font-family:var(--tree-font-family-sans);font-size:var(--tree-font-size-md);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-tight);text-align:left;cursor:pointer;transition:color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:none;justify-content:space-between;align-items:center;display:flex;position:relative}.t-accordion__trigger:after{content:"";width:100%;min-width:44px;height:100%;min-height:44px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.t-accordion__trigger:hover:not(:disabled){color:var(--tree-color-brand-primary)}.t-accordion__trigger:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);border-radius:var(--tree-radius-sm);outline:none}.t-accordion__trigger:disabled{opacity:.65;cursor:not-allowed}.t-accordion__icon{transition:transform var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard);flex-shrink:0}.t-accordion__icon.is-open{transform:rotate(180deg)}.t-accordion__content{overflow:hidden}.t-accordion__panel{padding:var(--tree-space-1) var(--tree-space-1) var(--tree-space-4);color:var(--tree-color-text-muted);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-base)}.t-accordion__item.is-disabled .t-accordion__trigger{opacity:.65;cursor:not-allowed}.t-breadcrumb{font-family:var(--tree-font-family-sans)}.t-breadcrumb__list{align-items:center;gap:var(--tree-space-1);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-tight);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.t-breadcrumb__item{align-items:center;display:inline-flex}.t-breadcrumb__item:not(:last-child):after{content:var(--tree-breadcrumb-separator,"/");margin-inline:var(--tree-space-2);color:var(--tree-color-text-muted);font-weight:var(--tree-font-weight-regular);pointer-events:none}.t-breadcrumb__link{color:var(--tree-color-text-muted);border-radius:var(--tree-radius-sm);padding:var(--tree-space-1) var(--tree-space-1);transition:color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);text-decoration:none}.t-breadcrumb__link:hover{color:var(--tree-color-brand-primary);text-decoration:underline}.t-breadcrumb__link:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-breadcrumb__current{color:var(--tree-color-text-primary);font-weight:var(--tree-font-weight-medium)}.t-tabs{flex-direction:column;width:100%;display:flex}.t-tabs__list{border-bottom:var(--tree-border-width-subtle) solid var(--tree-color-border-default);gap:0;margin:0;padding:0;display:flex}.t-tabs__tab{justify-content:center;align-items:center;gap:var(--tree-space-2);color:var(--tree-color-text-muted);font-family:var(--tree-font-family-sans);font-weight:var(--tree-font-weight-medium);cursor:pointer;white-space:nowrap;margin-bottom:calc(-1 * var(--tree-border-width-subtle));transition:color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;outline:none;display:inline-flex;position:relative}.t-tabs__tab:hover:not([disabled]){color:var(--tree-color-text-primary);border-bottom-color:var(--tree-color-border-strong)}.t-tabs__tab.is-active{color:var(--tree-color-brand-primary);border-bottom-color:var(--tree-color-brand-primary)}.t-tabs__tab--sm{padding:var(--tree-space-2) var(--tree-space-3);font-size:var(--tree-font-size-sm)}.t-tabs__tab--md{padding:var(--tree-space-2) var(--tree-space-4);font-size:var(--tree-font-size-md)}.t-tabs__tab--lg{padding:var(--tree-space-3) var(--tree-space-5);font-size:var(--tree-font-size-lg)}.t-tabs__tab:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);z-index:1}.t-tabs__tab.is-disabled,.t-tabs__tab[disabled]{opacity:.5;cursor:not-allowed}.t-tabs__panel{padding:var(--tree-space-4) 0;outline:none}.t-tabs__panel:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);border-radius:var(--tree-radius-sm)}.t-context-menu{display:contents}.t-context-menu__menu{z-index:var(--tree-z-dropdown);min-width:10rem;max-height:20rem;padding:var(--tree-space-1);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);margin:0;list-style:none;position:fixed;overflow-y:auto}.t-context-menu__item{align-items:center;gap:var(--tree-space-2);padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-sm);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);outline:none;display:flex}.t-context-menu__item:hover,.t-context-menu__item.is-focused{background:var(--tree-color-brand-soft)}.t-context-menu__item:focus-visible{background:var(--tree-color-brand-soft);box-shadow:0 0 0 2px var(--tree-color-focus-ring) inset}.t-context-menu__item.is-disabled{opacity:.5;cursor:not-allowed}.t-context-menu__item.is-disabled:hover{background:0 0}.t-context-menu--sm .t-context-menu__item{padding:var(--tree-space-1) var(--tree-space-2);font-size:var(--tree-font-size-sm)}.t-context-menu--lg .t-context-menu__item{padding:var(--tree-space-3) var(--tree-space-4);font-size:var(--tree-font-size-lg)}.t-context-menu__menu.t-fade-enter-active,.t-context-menu__menu.t-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-context-menu__menu.t-fade-enter-from,.t-context-menu__menu.t-fade-leave-to{opacity:0;transform:scale(.95)}.t-avatar{border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-subtle);color:var(--tree-color-text-muted);font-family:var(--tree-font-family-sans);font-weight:var(--tree-font-weight-medium);vertical-align:middle;-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}.t-avatar--sm{width:2rem;height:2rem;font-size:var(--tree-font-size-xs)}.t-avatar--md{width:2.5rem;height:2.5rem;font-size:var(--tree-font-size-sm)}.t-avatar--lg{width:3.5rem;height:3.5rem;font-size:var(--tree-font-size-md)}.t-avatar__image{object-fit:cover;border-radius:inherit;width:100%;height:100%}.t-avatar__initials{border-radius:inherit;justify-content:center;align-items:center;width:100%;height:100%;line-height:1;display:flex;overflow:hidden}.t-avatar__status{border-radius:var(--tree-radius-pill);border:2px solid var(--tree-color-bg-surface);background:var(--tree-color-text-muted);width:25%;min-width:8px;height:25%;min-height:8px;position:absolute;bottom:0;right:0}.t-avatar__status--online{background:var(--tree-color-status-success)}.t-avatar__status--offline{background:var(--tree-color-text-muted)}.t-avatar__status--busy{background:var(--tree-color-status-error)}.t-avatar__status--away{background:var(--tree-color-status-warning)}.t-divider{border:none;flex-shrink:0;margin:0}.t-divider--horizontal{border-top:var(--tree-border-width-subtle) solid var(--tree-color-border-default);width:100%;height:0;margin-block:var(--tree-space-3)}.t-divider--vertical{border-left:var(--tree-border-width-subtle) solid var(--tree-color-border-default);width:0;height:auto;margin-inline:var(--tree-space-3);align-self:stretch}.t-tag{align-items:center;gap:var(--tree-space-1);max-width:100%;font-family:var(--tree-font-family-sans);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-tight);border-radius:var(--tree-radius-pill);transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-tag--sm{height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2);font-size:var(--tree-font-size-xs)}.t-tag--md{height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);font-size:var(--tree-font-size-sm)}.t-tag--lg{height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4);font-size:var(--tree-font-size-md)}.t-tag--solid{background:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast);border:var(--tree-border-width-subtle) solid transparent}.t-tag--outline{color:var(--tree-color-text-primary);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);background:0 0}.t-tag--soft{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary);border:var(--tree-border-width-subtle) solid transparent}.t-tag.is-disabled{opacity:.5;cursor:not-allowed}.t-tag__icon{flex-shrink:0;align-items:center;display:inline-flex}.t-tag__label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.t-tag__remove{margin:0;color:inherit;cursor:pointer;border-radius:var(--tree-radius-pill);opacity:.7;transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;margin-inline-start:var(--tree-space-1);padding:0;display:inline-flex}.t-tag__remove:hover{opacity:1}.t-tag__remove:focus-visible{outline:2px solid var(--tree-color-focus-ring);outline-offset:1px}.t-tag__remove:disabled{cursor:not-allowed;opacity:.4}.t-timeline{gap:var(--tree-space-4);margin:0;padding:0;list-style:none;display:grid}.t-timeline__item{gap:var(--tree-space-3);grid-template-columns:auto minmax(0,1fr);align-items:start;display:grid}.t-timeline__rail{justify-content:center;width:1.5rem;min-height:100%;display:flex;position:relative}.t-timeline__line{top:1.125rem;bottom:calc(var(--tree-space-4) * -1);background:var(--tree-color-border-default);width:2px;position:absolute}.t-timeline__marker{border:2px solid var(--tree-color-bg-surface);border-radius:var(--tree-radius-pill);width:.875rem;height:.875rem;box-shadow:0 0 0 1px var(--tree-color-border-default);background:var(--tree-color-border-strong);color:var(--tree-color-bg-surface);justify-content:center;align-items:center;margin-top:.25rem;display:inline-flex}.t-timeline__marker--neutral{background:var(--tree-color-border-strong)}.t-timeline__marker--brand{background:var(--tree-color-brand-primary)}.t-timeline__marker--success{background:var(--tree-color-status-success)}.t-timeline__marker--warning{background:var(--tree-color-status-warning)}.t-timeline__marker--danger{background:var(--tree-color-status-error)}.t-timeline__marker>*{width:.75rem;height:.75rem}.t-timeline__content{gap:var(--tree-space-2);min-width:0;padding:var(--tree-space-3) var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-xs);display:grid}.t-timeline__meta{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);letter-spacing:.03em;text-transform:uppercase}.t-timeline__header{justify-content:space-between;align-items:baseline;gap:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-timeline__title{color:var(--tree-color-text-primary);font-size:var(--tree-font-size-md);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);margin:0}.t-timeline__timestamp{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);line-height:var(--tree-font-lineHeight-ui);white-space:nowrap}.t-timeline__description{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-body);margin:0}.t-timeline--sm{gap:var(--tree-space-3)}.t-timeline--sm .t-timeline__line{bottom:calc(var(--tree-space-3) * -1)}.t-timeline--sm .t-timeline__content{padding:var(--tree-space-2) var(--tree-space-3)}.t-timeline--sm .t-timeline__title{font-size:var(--tree-font-size-sm)}.t-timeline--lg{gap:var(--tree-space-5)}.t-timeline--lg .t-timeline__line{bottom:calc(var(--tree-space-5) * -1)}.t-timeline--lg .t-timeline__content{padding:var(--tree-space-4) var(--tree-space-5)}.t-timeline--lg .t-timeline__title{font-size:var(--tree-font-size-lg)}.t-table-wrapper{width:100%;overflow-x:auto}.t-table{border-collapse:collapse;width:100%;font-family:var(--tree-font-family-sans);font-size:var(--tree-font-size-sm);color:var(--tree-color-text-primary)}.t-table__caption{padding:var(--tree-space-3) var(--tree-space-4);text-align:left;font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);color:var(--tree-color-text-muted)}.t-table__head{border-bottom:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-table__header{padding:var(--tree-space-3) var(--tree-space-4);text-align:left;font-weight:var(--tree-font-weight-semibold);font-size:var(--tree-font-size-xs);color:var(--tree-color-text-muted);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;background:var(--tree-color-bg-subtle)}.t-table__header--sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.t-table__header--sortable:hover{background:var(--tree-color-brand-soft)}.t-table__header--sortable:focus-visible{outline:2px solid var(--tree-color-focus-ring);outline-offset:-2px}.t-table__header--center{text-align:center}.t-table__header--right{text-align:right}.t-table__header-content{align-items:center;gap:var(--tree-space-1);display:inline-flex}.t-table__sort-icon{align-items:center;display:inline-flex}.t-table__sort-icon.is-inactive{opacity:.4}.t-table__row{border-bottom:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-table__row:last-child{border-bottom:none}.t-table__body .t-table__row:nth-child(2n){background:var(--tree-color-bg-subtle)}.t-table__body .t-table__row:hover{background:var(--tree-color-brand-soft)}.t-table__body .t-table__row--muted{color:var(--tree-color-text-muted);background:0 0}.t-table__cell{padding:var(--tree-space-3) var(--tree-space-4)}.t-table__cell--center{text-align:center}.t-table__cell--right{text-align:right}.t-table__cell--empty{text-align:center;padding:var(--tree-space-8) var(--tree-space-4);color:var(--tree-color-text-muted)}.t-table--sm .t-table__header,.t-table--sm .t-table__cell{padding:var(--tree-space-2) var(--tree-space-3);font-size:var(--tree-font-size-xs)}.t-table--lg .t-table__header,.t-table--lg .t-table__cell{padding:var(--tree-space-4) var(--tree-space-5);font-size:var(--tree-font-size-md)}.t-pricing{gap:var(--tree-space-4);align-items:stretch;display:grid}.t-pricing-card{gap:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);box-shadow:var(--tree-shadow-xs);font-family:var(--tree-font-family-sans);flex-direction:column;height:100%;display:flex;position:relative}.t-pricing-card--sm{padding:var(--tree-space-4)}.t-pricing-card--md{padding:var(--tree-space-5)}.t-pricing-card--lg{padding:var(--tree-space-6)}.t-pricing-card--highlighted{border-color:var(--tree-color-brand-primary);border-width:var(--tree-border-width-strong);box-shadow:var(--tree-shadow-sm)}.t-pricing-card__badge{position:absolute;top:0;left:50%;transform:translate(-50%,-50%)}.t-pricing-card__header{gap:var(--tree-space-1);flex-direction:column;display:flex}.t-pricing-card__title{font-size:var(--tree-font-size-lg);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);color:var(--tree-color-text-primary);margin:0}.t-pricing-card--sm .t-pricing-card__title{font-size:var(--tree-font-size-md)}.t-pricing-card--lg .t-pricing-card__title{font-size:var(--tree-font-size-xl)}.t-pricing-card__description{font-size:var(--tree-font-size-sm);color:var(--tree-color-text-muted);line-height:var(--tree-font-lineHeight-body);margin:0}.t-pricing-card__price{align-items:baseline;gap:var(--tree-space-1);display:flex}.t-pricing-card__currency{font-size:var(--tree-font-size-lg);font-weight:var(--tree-font-weight-semibold);color:var(--tree-color-text-primary)}.t-pricing-card__amount{font-size:var(--tree-font-size-4xl);font-weight:var(--tree-font-weight-extrabold);line-height:var(--tree-font-lineHeight-compact);color:var(--tree-color-text-primary)}.t-pricing-card--sm .t-pricing-card__amount{font-size:var(--tree-font-size-3xl)}.t-pricing-card--lg .t-pricing-card__amount{font-size:var(--tree-font-size-5xl)}.t-pricing-card__period{font-size:var(--tree-font-size-sm);color:var(--tree-color-text-muted);font-weight:var(--tree-font-weight-regular)}.t-pricing-card__features{flex:1}.t-pricing-card__feature-list{gap:var(--tree-space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.t-pricing-card__feature-item{align-items:center;gap:var(--tree-space-2);font-size:var(--tree-font-size-sm);color:var(--tree-color-text-primary);line-height:var(--tree-font-lineHeight-base);display:flex}.t-pricing-card__feature-item--excluded{color:var(--tree-color-text-muted);text-decoration:line-through}.t-pricing-card__feature-icon{font-size:var(--tree-font-size-xs);color:var(--tree-color-status-success);flex-shrink:0}.t-pricing-card__feature-item--excluded .t-pricing-card__feature-icon{color:var(--tree-color-text-muted)}.t-pricing-card__action{margin-top:auto}.t-pricing-card__action .t-button{width:100%}.t-md-editor{border:1px solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-primary);font-family:var(--tree-font-family-sans);flex-direction:column;display:flex;overflow:hidden}.t-md-editor.is-disabled{opacity:.55;pointer-events:none}.t-md-editor__toolbar{align-items:center;gap:var(--tree-space-1);padding:var(--tree-space-2) var(--tree-space-3);background:var(--tree-color-bg-subtle);border-bottom:1px solid var(--tree-color-border-default);flex-wrap:wrap;display:flex}.t-md-editor__toolbar-group{align-items:center;gap:var(--tree-space-1);display:flex}.t-md-editor__toolbar-divider{background:var(--tree-color-border-default);width:1px;height:1.25rem;margin:0 var(--tree-space-1)}.t-md-editor__toolbar-btn{min-width:2rem;min-height:2rem;padding:var(--tree-space-1) var(--tree-space-2);border-radius:var(--tree-radius-md);color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);font-family:var(--tree-font-family-sans);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;line-height:1;transition:background .15s,color .15s;display:inline-flex}.t-md-editor__toolbar-btn:hover{background:var(--tree-color-brand-soft);color:var(--tree-color-text-primary)}.t-md-editor__toolbar-btn:focus-visible{outline:2px solid var(--tree-color-brand-primary);outline-offset:-2px}.t-md-editor__toolbar-btn:disabled{opacity:.4;cursor:not-allowed}.t-md-editor__body{flex-direction:row;flex:1;min-height:200px;display:flex}.t-md-editor__pane{flex:1;min-width:0}.t-md-editor__pane--preview{border-left:1px solid var(--tree-color-border-default)}.t-md-editor__textarea{width:100%;height:100%;min-height:200px;padding:var(--tree-space-3);color:var(--tree-color-text-primary);font-family:var(--tree-font-family-mono);font-size:var(--tree-font-size-sm);resize:vertical;background:0 0;border:none;outline:none;line-height:1.7;display:block}.t-md-editor__textarea::placeholder{color:var(--tree-color-text-muted)}.t-md-editor__preview{padding:var(--tree-space-3);color:var(--tree-color-text-primary);font-size:var(--tree-font-size-sm);word-break:break-word;min-height:200px;line-height:1.7;overflow-y:auto}.t-md-editor__heading{margin:0 0 var(--tree-space-2);color:var(--tree-color-text-primary);line-height:1.3}.t-md-editor__heading--1{font-size:var(--tree-font-size-2xl);border-bottom:1px solid var(--tree-color-border-default);padding-bottom:var(--tree-space-2)}.t-md-editor__heading--2{font-size:var(--tree-font-size-xl);border-bottom:1px solid var(--tree-color-border-default);padding-bottom:var(--tree-space-1)}.t-md-editor__heading--3{font-size:var(--tree-font-size-lg)}.t-md-editor__heading--4{font-size:var(--tree-font-size-md)}.t-md-editor__heading--5{font-size:var(--tree-font-size-sm)}.t-md-editor__heading--6{font-size:var(--tree-font-size-xs)}.t-md-editor__paragraph{margin:0 0 var(--tree-space-2)}.t-md-editor__blockquote{margin:0 0 var(--tree-space-2);padding:var(--tree-space-2) var(--tree-space-3);border-left:3px solid var(--tree-color-brand-primary);background:var(--tree-color-bg-subtle);color:var(--tree-color-text-muted);border-radius:0 var(--tree-radius-md) var(--tree-radius-md) 0}.t-md-editor__list{margin:0 0 var(--tree-space-2);padding-left:var(--tree-space-5)}.t-md-editor__code-block{margin:0 0 var(--tree-space-2);padding:var(--tree-space-3);background:var(--tree-color-bg-subtle);border:1px solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);font-family:var(--tree-font-family-mono);font-size:var(--tree-font-size-sm);line-height:1.5;overflow-x:auto}.t-md-editor__code-block code{font-size:inherit;background:0 0;padding:0}.t-md-editor__inline-code{background:var(--tree-color-bg-subtle);border:1px solid var(--tree-color-border-default);border-radius:var(--tree-radius-sm);font-family:var(--tree-font-family-mono);padding:.15em .4em;font-size:.9em}.t-md-editor__blocked-link{color:var(--tree-color-text-muted);text-underline-offset:.2em;cursor:not-allowed;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.t-md-editor__image{border-radius:var(--tree-radius-md);max-width:100%;height:auto;margin:var(--tree-space-2) 0}.t-md-editor__hr{border:none;border-top:1px solid var(--tree-color-border-default);margin:var(--tree-space-3) 0}.t-md-editor__preview a{color:var(--tree-color-brand-primary);text-decoration:underline}.t-md-editor__preview a:hover{opacity:.8}.t-md-editor__preview strong{font-weight:600}.t-md-editor__upload-bar{padding:var(--tree-space-1) var(--tree-space-3);background:var(--tree-color-bg-subtle);border-top:1px solid var(--tree-color-border-default);color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);text-align:center;animation:1.5s ease-in-out infinite t-md-editor-pulse}@keyframes t-md-editor-pulse{0%,to{opacity:1}50%{opacity:.5}}.t-md-editor--sm .t-md-editor__toolbar{padding:var(--tree-space-1) var(--tree-space-2)}.t-md-editor--sm .t-md-editor__textarea,.t-md-editor--sm .t-md-editor__preview{font-size:var(--tree-font-size-xs);padding:var(--tree-space-2);min-height:150px}.t-md-editor--sm .t-md-editor__body{min-height:150px}.t-md-editor--lg .t-md-editor__textarea,.t-md-editor--lg .t-md-editor__preview{font-size:var(--tree-font-size-md);padding:var(--tree-space-4);min-height:300px}.t-md-editor--lg .t-md-editor__body{min-height:300px}.t-stat{--tree-stat-accent:var(--tree-color-brand-primary);--tree-stat-soft:var(--tree-color-brand-soft);gap:var(--tree-space-3);width:100%;padding:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);box-shadow:var(--tree-shadow-xs);font-family:var(--tree-font-family-sans);grid-template-columns:auto 1fr;display:grid}.t-stat:not(.has-icon){grid-template-columns:1fr}.t-stat--neutral{--tree-stat-accent:var(--tree-color-text-primary);--tree-stat-soft:var(--tree-color-bg-subtle)}.t-stat--success{--tree-stat-accent:var(--tree-color-status-success);--tree-stat-soft:color-mix(in srgb, var(--tree-color-status-success) 14%, var(--tree-color-bg-surface))}.t-stat--warning{--tree-stat-accent:var(--tree-color-status-warning);--tree-stat-soft:color-mix(in srgb, var(--tree-color-status-warning) 14%, var(--tree-color-bg-surface))}.t-stat--danger{--tree-stat-accent:var(--tree-color-status-error);--tree-stat-soft:color-mix(in srgb, var(--tree-color-status-error) 14%, var(--tree-color-bg-surface))}.t-stat--info{--tree-stat-accent:var(--tree-color-status-info);--tree-stat-soft:color-mix(in srgb, var(--tree-color-status-info) 14%, var(--tree-color-bg-surface))}.t-stat__icon{border-radius:var(--tree-radius-pill);background:var(--tree-stat-soft);width:2.75rem;height:2.75rem;color:var(--tree-stat-accent);justify-content:center;align-items:center;display:inline-flex}.t-stat__body{gap:var(--tree-space-2);min-width:0;display:grid}.t-stat__loading{gap:var(--tree-space-3);width:100%;display:grid}.t-stat__loading-label,.t-stat__loading-value,.t-stat__loading-trend{width:100%}.t-stat__loading-label{max-width:9rem;height:.875rem}.t-stat__loading-value{max-width:7rem;height:2rem}.t-stat__loading-trend{max-width:10rem;height:.875rem}.t-stat__topline,.t-stat__content{justify-content:space-between;align-items:center;gap:var(--tree-space-3);flex-wrap:wrap;display:flex}.t-stat__label,.t-stat__meta,.t-stat__value,.t-stat__trend{margin:0}.t-stat__label,.t-stat__meta{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-stat__value{font-size:clamp(1.75rem,3vw,2.5rem);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-heading);letter-spacing:-.02em}.t-stat__trend{align-items:center;gap:var(--tree-space-1);border-radius:var(--tree-radius-pill);background:var(--tree-stat-soft);color:var(--tree-stat-accent);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);padding:.35rem .625rem;display:inline-flex}.t-stat__trend-indicator{font-weight:var(--tree-font-weight-semibold)}.t-number-input{width:100%;min-height:var(--tree-size-control-md);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);font-family:var(--tree-font-family-sans);align-items:stretch;display:inline-flex;overflow:hidden}.t-number-input:focus-within{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-number-input.is-invalid{border-color:var(--tree-color-status-error)}.t-number-input.is-invalid:focus-within{box-shadow:0 0 0 4px color-mix(in srgb,var(--tree-color-status-error) 20%,transparent)}.t-number-input.is-disabled{opacity:.68;cursor:not-allowed}.t-number-input--sm{min-height:var(--tree-size-control-sm)}.t-number-input--lg{min-height:var(--tree-size-control-lg)}.t-number-input__field{min-width:0;padding:0 var(--tree-space-3);color:inherit;font:inherit;text-align:center;background:0 0;border:0;outline:none;flex:1}.t-number-input:not(.has-controls) .t-number-input__field{text-align:start}.t-number-input__field::placeholder{color:var(--tree-color-text-muted)}.t-number-input__stepper{width:2.5rem;color:var(--tree-color-text-muted);font:inherit;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex}.t-number-input__stepper--decrement{border-inline-end:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-number-input__stepper--increment{border-inline-start:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-number-input__stepper:hover:not(:disabled){background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-number-input__stepper:focus-visible{box-shadow:inset 0 0 0 2px var(--tree-color-focus-ring);outline:none}.t-number-input__stepper:disabled{opacity:.45;cursor:not-allowed}.t-toggle-group{gap:var(--tree-space-2);font-family:var(--tree-font-family-sans);flex-wrap:wrap;display:inline-flex}.t-toggle-group__item{min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-4);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);font:inherit;font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-tight);cursor:pointer;transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);justify-content:center;align-items:center;display:inline-flex}.t-toggle-group__item:hover:not(:disabled){background:var(--tree-color-bg-subtle);transform:translateY(-1px)}.t-toggle-group__item:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-toggle-group__item.is-selected{background:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast);border-color:#0000}.t-toggle-group--soft .t-toggle-group__item:not(.is-selected){background:var(--tree-color-bg-subtle);border-color:#0000}.t-toggle-group--solid .t-toggle-group__item:not(.is-selected){background:color-mix(in srgb,var(--tree-color-text-primary) 8%,var(--tree-color-bg-surface));border-color:#0000}.t-toggle-group--sm .t-toggle-group__item{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-3);font-size:var(--tree-font-size-sm)}.t-toggle-group--lg .t-toggle-group__item{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-5);font-size:var(--tree-font-size-lg)}.t-toggle-group__item.is-disabled,.t-toggle-group__item:disabled{opacity:.55;cursor:not-allowed;transform:none}.t-selectable-list{gap:var(--tree-space-2);width:100%;padding:var(--tree-space-2);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-xs);font-family:var(--tree-font-family-sans);display:grid}.t-selectable-list__item{align-items:center;gap:var(--tree-space-3);width:100%;padding:var(--tree-space-3);border-radius:var(--tree-radius-md);color:inherit;text-align:start;cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;grid-template-columns:auto minmax(0,1fr) auto;display:grid}.t-selectable-list__item:hover:not(:disabled){background:var(--tree-color-bg-subtle);transform:translateY(-1px)}.t-selectable-list__item:focus-visible{box-shadow:inset 0 0 0 2px var(--tree-color-focus-ring);outline:none}.t-selectable-list__item.is-selected{background:var(--tree-color-brand-soft);color:var(--tree-color-brand-primary)}.t-selectable-list__item.is-disabled,.t-selectable-list__item:disabled{opacity:.5;cursor:not-allowed;transform:none}.t-selectable-list__indicator{border-radius:var(--tree-radius-pill);background:var(--tree-color-border-strong);width:.75rem;height:.75rem;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-selectable-list__item.is-selected .t-selectable-list__indicator{background:var(--tree-color-brand-primary);transform:scale(1.2)}.t-selectable-list__copy{gap:var(--tree-space-1);min-width:0;display:grid}.t-selectable-list__label{font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui)}.t-selectable-list__description,.t-selectable-list__meta,.t-selectable-list__empty{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-selectable-list__meta{justify-self:end}.t-selectable-list__empty{padding:var(--tree-space-4);text-align:center}.t-selectable-list--sm .t-selectable-list__item{padding:var(--tree-space-2)}.t-selectable-list--lg .t-selectable-list__item{padding:var(--tree-space-4)}.t-steps{gap:var(--tree-space-3);font-family:var(--tree-font-family-sans);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.t-steps--vertical{flex-direction:column}.t-steps__item{flex:14rem;list-style:none}.t-steps--vertical .t-steps__item{flex-basis:auto}.t-steps__button{align-items:center;gap:var(--tree-space-3);width:100%;padding:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);text-align:start;font:inherit;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);grid-template-columns:auto minmax(0,1fr) auto;display:grid}.t-steps.is-interactive .t-steps__button:not(:disabled){cursor:pointer}.t-steps.is-interactive .t-steps__button:hover:not(:disabled){transform:translateY(-1px)}.t-steps__button:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-steps__item.is-current .t-steps__button{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 1px var(--tree-color-brand-primary) inset}.t-steps__item.is-complete .t-steps__button{border-color:color-mix(in srgb,var(--tree-color-status-success) 40%,var(--tree-color-border-default))}.t-steps__item.is-error .t-steps__button{border-color:color-mix(in srgb,var(--tree-color-status-error) 50%,var(--tree-color-border-default))}.t-steps__button.is-disabled,.t-steps__button:disabled{opacity:.6;cursor:not-allowed;transform:none}.t-steps__indicator{border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-subtle);width:2rem;height:2rem;color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-semibold);justify-content:center;align-items:center;line-height:1;display:inline-flex}.t-steps__item.is-current .t-steps__indicator{background:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast)}.t-steps__item.is-complete .t-steps__indicator{background:var(--tree-color-status-success);color:var(--tree-color-brand-contrast)}.t-steps__item.is-error .t-steps__indicator{background:var(--tree-color-status-error);color:var(--tree-color-brand-contrast)}.t-steps__copy{gap:var(--tree-space-1);min-width:0;display:grid}.t-steps__label{font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui)}.t-steps__description,.t-steps__meta{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-steps__meta{justify-self:end}.t-steps--sm .t-steps__button{padding:var(--tree-space-2)}.t-steps--lg .t-steps__button{padding:var(--tree-space-4)}.t-tree-view{width:100%;padding:var(--tree-space-2);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-xs);font-family:var(--tree-font-family-sans)}.t-tree-view__root,.t-tree-view__group{gap:var(--tree-space-1);margin:0;padding:0;list-style:none;display:grid}.t-tree-view__node{list-style:none}.t-tree-view__row{--tree-tree-view-indent:calc((var(--tree-tree-view-level,1) - 1) * var(--tree-space-4));align-items:center;gap:var(--tree-space-2);padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-md);color:var(--tree-color-text-primary);cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);outline:none;grid-template-columns:auto auto minmax(0,1fr) auto;padding-inline-start:calc(var(--tree-space-3) + var(--tree-tree-view-indent));display:grid}.t-tree-view__row:hover{background:var(--tree-color-bg-subtle)}.t-tree-view__row:focus-visible{box-shadow:inset 0 0 0 2px var(--tree-color-focus-ring)}.t-tree-view__row.is-selected{background:var(--tree-color-brand-soft)}.t-tree-view__row.is-disabled{opacity:.5;cursor:not-allowed}.t-tree-view__toggle,.t-tree-view__spacer{width:1.5rem;height:1.5rem}.t-tree-view__toggle{border-radius:var(--tree-radius-sm);color:var(--tree-color-text-muted);transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex}.t-tree-view__toggle:hover:not(:disabled){background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-tree-view__toggle.is-expanded{color:var(--tree-color-text-primary);transform:rotate(90deg)}.t-tree-view__toggle:disabled{cursor:not-allowed}.t-tree-view__marker{border:1px solid var(--tree-color-border-strong);border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-surface);width:1rem;height:1rem;color:var(--tree-color-brand-contrast);justify-content:center;align-items:center;display:inline-flex}.t-tree-view__marker.is-multiple{border-radius:var(--tree-radius-sm)}.t-tree-view__marker.is-selected{border-color:var(--tree-color-brand-primary);background:var(--tree-color-brand-primary)}.t-tree-view__copy{gap:var(--tree-space-1);min-width:0;display:grid}.t-tree-view__label{font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui)}.t-tree-view__description,.t-tree-view__meta,.t-tree-view__empty{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-tree-view__meta{justify-self:end}.t-tree-view__empty{padding:var(--tree-space-4);text-align:center}.t-multi-select{width:100%;min-inline-size:0;font-family:var(--tree-font-family-sans);display:inline-flex;position:relative}.t-multi-select__control{align-items:center;gap:var(--tree-space-2);width:100%;min-height:var(--tree-size-control-md);padding:var(--tree-space-2) var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);cursor:text;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-multi-select:focus-within .t-multi-select__control,.t-multi-select.is-open .t-multi-select__control{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-multi-select.is-invalid .t-multi-select__control{border-color:var(--tree-color-status-error)}.t-multi-select.is-invalid:focus-within .t-multi-select__control,.t-multi-select.is-invalid.is-open .t-multi-select__control{box-shadow:0 0 0 4px color-mix(in srgb,var(--tree-color-status-error) 20%,transparent)}.t-multi-select.is-disabled .t-multi-select__control{opacity:.68;cursor:not-allowed}.t-multi-select--sm .t-multi-select__control{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.t-multi-select--lg .t-multi-select__control{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.t-multi-select__slot{color:var(--tree-color-text-muted);align-items:center;display:inline-flex}.t-multi-select__values{align-items:center;gap:var(--tree-space-2);flex-wrap:wrap;flex:1;min-width:0;display:flex}.t-multi-select__tag{align-items:center;gap:var(--tree-space-1);border-radius:var(--tree-radius-pill);background:var(--tree-color-brand-soft);max-width:100%;color:var(--tree-color-brand-primary);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);padding:.25rem .5rem;display:inline-flex}.t-multi-select__tag-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.t-multi-select__tag-remove{width:1rem;height:1rem;color:inherit;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.t-multi-select__tag-remove:hover:not(:disabled){opacity:.8}.t-multi-select__overflow{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-multi-select__input{min-width:4rem;color:inherit;font:inherit;background:0 0;border:0;outline:none;flex:5rem;padding:0}.t-multi-select__input::placeholder{color:var(--tree-color-text-muted)}.t-multi-select__indicator{width:1rem;height:1rem;color:var(--tree-color-text-muted);transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0}.t-multi-select.is-open .t-multi-select__indicator{transform:rotate(180deg)}.t-multi-select__listbox{top:calc(100% + var(--tree-space-2));z-index:var(--tree-z-dropdown);width:100%;max-height:16rem;padding:var(--tree-space-1);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);margin:0;list-style:none;position:absolute;left:0;overflow-y:auto}.t-multi-select__option{justify-content:space-between;align-items:flex-start;gap:var(--tree-space-3);width:100%;padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-sm);color:var(--tree-color-text-primary);text-align:start;cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;display:flex}.t-multi-select__option:hover,.t-multi-select__option.is-active{background:var(--tree-color-brand-soft)}.t-multi-select__option.is-selected{color:var(--tree-color-brand-primary);font-weight:var(--tree-font-weight-medium)}.t-multi-select__option.is-disabled,.t-multi-select__option:disabled{opacity:.5;cursor:not-allowed}.t-multi-select__option.is-disabled:hover{background:0 0}.t-multi-select__option-copy{gap:var(--tree-space-1);min-width:0;display:grid}.t-multi-select__option-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.t-multi-select__option-description,.t-multi-select__empty{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-multi-select__empty{padding:var(--tree-space-3)}.t-multi-select__check{width:1rem;height:1rem;color:var(--tree-color-brand-primary);justify-content:center;align-items:center;display:inline-flex}.t-multi-select .t-fade-enter-active,.t-multi-select .t-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-multi-select .t-fade-enter-from,.t-multi-select .t-fade-leave-to{opacity:0;transform:translateY(4px)}.t-container{width:100%}.t-container.is-centered{margin-inline:auto}.t-container.is-padded{padding-inline:clamp(var(--tree-space-4),3vw,var(--tree-space-6))}.t-container--sm{max-width:40rem}.t-container--md{max-width:48rem}.t-container--lg{max-width:64rem}.t-container--xl{max-width:80rem}.t-container--full{max-width:none}.t-page{width:100%;display:block}.t-page.is-padded{padding-block:clamp(var(--tree-space-5),4vw,var(--tree-space-8))}.t-page__inner{flex-direction:column;display:flex}.t-page__inner--gap-sm{gap:var(--tree-space-4)}.t-page__inner--gap-md{gap:var(--tree-space-5)}.t-page__inner--gap-lg{gap:var(--tree-space-6)}.t-page-header{gap:var(--tree-space-3);flex-direction:column;display:flex}.t-page-header__breadcrumb,.t-page-header__content,.t-page-header__heading{min-width:0}.t-page-header__bar{justify-content:space-between;align-items:flex-start;gap:var(--tree-space-4);flex-wrap:wrap;display:flex}.t-page-header__heading{gap:var(--tree-space-1);flex-direction:column;display:flex}.t-page-header__title{color:var(--tree-color-text-primary);font-size:var(--tree-font-size-3xl);font-weight:var(--tree-font-weight-semibold);line-height:var(--tree-font-lineHeight-tight);letter-spacing:-.01em;margin:0}.t-page-header__subtitle{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-base);margin:0}.t-page-header__actions{align-items:center;gap:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-grid{width:100%;display:grid}.t-grid.is-dense{align-content:start}.t-stack{display:flex}.t-stack--vertical{flex-direction:column}.t-stack--horizontal{flex-direction:row}.t-stack.is-reversed.t-stack--vertical{flex-direction:column-reverse}.t-stack.is-reversed.t-stack--horizontal{flex-direction:row-reverse}.t-stack.is-wrapping{flex-wrap:wrap}.t-stack.is-grow{flex:1 1 0;min-block-size:0;min-inline-size:0}.t-stack--fill-viewport{min-block-size:100dvh}.t-stack--fill-parent{min-block-size:100%}.t-stack-item{min-inline-size:0}.t-split{gap:var(--tree-split-gap,var(--tree-space-5));align-items:var(--tree-split-align,flex-start);flex-wrap:wrap;display:flex}.t-split__main{flex:var(--tree-split-ratio,2) 1 0;min-inline-size:min(var(--tree-split-min,18rem),100%)}.t-split__aside{min-inline-size:min(var(--tree-split-min,18rem),100%);flex:1 1 0}.t-split--start>.t-split__aside{order:-1}.t-field-width--xs{max-inline-size:8rem}.t-field-width--sm{max-inline-size:12rem}.t-field-width--md{max-inline-size:18rem}.t-field-width--lg{max-inline-size:24rem}.t-field-width--xl{max-inline-size:32rem}.t-color-swatch{--tree-color-swatch-size:1.75rem;align-items:center;gap:var(--tree-space-2);flex-wrap:wrap;display:flex}.t-color-swatch--sm{--tree-color-swatch-size:1.5rem}.t-color-swatch--lg{--tree-color-swatch-size:2rem}.t-color-swatch__option,.t-color-swatch__custom{inline-size:var(--tree-color-swatch-size);block-size:var(--tree-color-swatch-size);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);cursor:pointer;padding:0}.t-color-swatch__option{border-radius:var(--tree-radius-pill)}.t-color-swatch__option.is-selected{outline:2px solid var(--tree-color-brand-primary);outline-offset:2px}.t-color-swatch__option:focus-visible,.t-color-swatch__custom:focus-visible{outline:2px solid var(--tree-color-focus-ring);outline-offset:2px}.t-color-swatch__custom{inline-size:calc(var(--tree-color-swatch-size) + var(--tree-space-2));border-radius:var(--tree-radius-sm);background:var(--tree-color-bg-surface)}.t-color-swatch__option:disabled,.t-color-swatch__custom:disabled{opacity:.5;cursor:not-allowed}.t-spacer{flex:auto;align-self:stretch}.t-kbd{min-inline-size:1.35rem;padding:0 var(--tree-space-1);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-sm);background:var(--tree-color-bg-surface);color:var(--tree-color-text-muted);font-family:var(--tree-font-family-mono);font-size:var(--tree-font-size-xs);line-height:var(--tree-font-lineHeight-tight);justify-content:center;align-items:center;display:inline-flex}.t-text{margin:0}.t-text--size-xs{font-size:var(--tree-font-size-xs)}.t-text--size-sm{font-size:var(--tree-font-size-sm)}.t-text--size-md{font-size:var(--tree-font-size-md)}.t-text--size-lg{font-size:var(--tree-font-size-lg)}.t-text--size-xl{font-size:var(--tree-font-size-xl)}.t-text--size-2xl{font-size:var(--tree-font-size-2xl)}.t-text--size-3xl{font-size:var(--tree-font-size-3xl)}.t-text--muted{color:var(--tree-color-text-muted)}.t-text--inverse{color:var(--tree-color-text-inverse)}.t-text--brand{color:var(--tree-color-brand-primary)}.t-text--weight-regular{font-weight:var(--tree-font-weight-regular)}.t-text--weight-medium{font-weight:var(--tree-font-weight-medium)}.t-text--weight-semibold{font-weight:var(--tree-font-weight-semibold)}.t-text--weight-bold{font-weight:var(--tree-font-weight-bold)}.t-text--family-sans{font-family:var(--tree-font-family-sans)}.t-text--family-mono{font-family:var(--tree-font-family-mono)}.t-text.is-truncated{text-overflow:ellipsis;white-space:nowrap;max-inline-size:100%;display:inline-block;overflow:hidden}.t-text.is-pre-wrap{white-space:pre-wrap;overflow-wrap:break-word}.t-navbar{background:color-mix(in srgb,var(--tree-color-bg-surface) 92%,var(--tree-color-bg-subtle));width:100%;color:var(--tree-color-text-primary);font-family:var(--tree-font-family-sans)}.t-navbar.is-bordered{border-bottom:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-navbar.is-elevated{box-shadow:var(--tree-shadow-sm)}.t-navbar.is-sticky{z-index:var(--tree-z-popover);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);position:sticky;top:0}.t-navbar__inner{align-items:center;gap:var(--tree-space-3);min-height:4rem;padding-inline:clamp(var(--tree-space-4),3vw,var(--tree-space-6));grid-template-columns:auto minmax(0,1fr) auto;display:grid}.t-navbar--sm .t-navbar__inner{min-height:3.5rem}.t-navbar--lg .t-navbar__inner{min-height:4.5rem}.t-navbar__section{align-items:center;gap:var(--tree-space-3);min-width:0;display:flex}.t-navbar__section--center{justify-content:center}.t-navbar__section--end{justify-content:flex-end}.t-sidebar{width:var(--tree-sidebar-width);min-width:var(--tree-sidebar-width);gap:var(--tree-space-4);padding:var(--tree-space-4);background:color-mix(in srgb,var(--tree-color-bg-surface) 88%,var(--tree-color-bg-subtle));color:var(--tree-color-text-primary);font-family:var(--tree-font-family-sans);transition:width var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard),min-width var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard),padding var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard);grid-template-rows:auto 1fr auto;display:grid}.t-sidebar.is-bordered.t-sidebar--left{border-right:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-sidebar.is-bordered.t-sidebar--right{border-left:var(--tree-border-width-subtle) solid var(--tree-color-border-default)}.t-sidebar.is-sticky{align-self:start;max-height:100vh;position:sticky;top:0}.t-sidebar.is-collapsed{width:var(--tree-sidebar-collapsed-width);min-width:var(--tree-sidebar-collapsed-width);padding-inline:var(--tree-space-3)}.t-sidebar.is-collapsed .t-sidebar__header,.t-sidebar.is-collapsed .t-sidebar__footer{justify-items:center}.t-sidebar__header,.t-sidebar__body,.t-sidebar__footer{gap:var(--tree-space-3);min-width:0;display:grid}.t-sidebar__body{align-content:start}.t-sidebar__toggle{justify-content:center;align-items:center;gap:var(--tree-space-2);width:100%;min-height:2.75rem;padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);color:var(--tree-color-text-muted);font:inherit;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;display:inline-flex}.t-sidebar__toggle:hover{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-sidebar__toggle:focus-visible{box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-sidebar.is-collapsed .t-sidebar__toggle{padding-inline:0}.t-nav-menu{width:100%;font-family:var(--tree-font-family-sans)}.t-nav-menu__list{gap:var(--tree-space-1);margin:0;padding:0;list-style:none;display:grid}.t-nav-menu__entry{list-style:none}.t-nav-menu__item{align-items:center;gap:var(--tree-space-3);width:100%;min-height:3rem;padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-md);color:var(--tree-color-text-primary);text-align:start;font:inherit;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;grid-template-columns:auto minmax(0,1fr) auto;display:grid}.t-nav-menu__item:hover:not(:disabled){background:var(--tree-color-bg-subtle);transform:translate(1px)}.t-nav-menu__item:focus-visible{box-shadow:inset 0 0 0 2px var(--tree-color-focus-ring);outline:none}.t-nav-menu__item.is-selected{background:var(--tree-color-brand-soft);color:var(--tree-color-brand-primary)}.t-nav-menu__item.is-disabled,.t-nav-menu__item:disabled{opacity:.5;cursor:not-allowed;transform:none}.t-nav-menu__icon{width:var(--tree-size-icon-md);height:var(--tree-size-icon-md);color:var(--tree-color-text-muted);flex-shrink:0}.t-nav-menu__item.is-selected .t-nav-menu__icon{color:var(--tree-color-brand-primary)}.t-nav-menu__marker{border-radius:var(--tree-radius-pill);background:color-mix(in srgb,var(--tree-color-bg-subtle) 74%,var(--tree-color-bg-surface));width:1.9rem;height:1.9rem;color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-semibold);justify-content:center;align-items:center;line-height:1;display:inline-flex}.t-nav-menu__item.is-selected .t-nav-menu__marker{background:var(--tree-color-brand-primary);color:var(--tree-color-brand-contrast)}.t-nav-menu__copy{gap:var(--tree-space-1);min-width:0;display:grid}.t-nav-menu__label{font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui)}.t-nav-menu__description,.t-nav-menu__empty{color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-ui)}.t-nav-menu__badge{border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-subtle);min-width:1.75rem;color:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-ui);justify-content:center;align-items:center;padding:.15rem .5rem;display:inline-flex}.t-nav-menu.is-collapsed .t-nav-menu__item{padding-inline:var(--tree-space-2);grid-template-columns:1fr;justify-items:center}.t-nav-menu.is-collapsed .t-nav-menu__copy,.t-nav-menu.is-collapsed .t-nav-menu__badge{display:none}.t-nav-menu__empty{padding:var(--tree-space-3);text-align:center}a.t-nav-menu__item{color:inherit;text-decoration:none}a.t-nav-menu__item.is-disabled{pointer-events:none}.t-link{font-family:inherit;font-weight:var(--tree-font-weight-medium);text-underline-offset:2px;cursor:pointer;transition:color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),text-decoration-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);text-decoration:underline;text-decoration-thickness:1px}.t-link:focus-visible{border-radius:var(--tree-radius-sm);box-shadow:0 0 0 2px var(--tree-color-focus-ring);outline:none}.t-link--underline-none,.t-link--underline-hover{text-decoration:none}.t-link--underline-hover:hover{text-decoration:underline}.t-link--weight-regular{font-weight:var(--tree-font-weight-regular)}.t-link--weight-semibold{font-weight:var(--tree-font-weight-semibold)}.t-link--default{color:var(--tree-color-brand-primary)}.t-link--default:hover{color:var(--tree-color-brand-hover)}.t-link--muted{color:var(--tree-color-text-muted)}.t-link--muted:hover{color:var(--tree-color-text-primary)}.t-link--danger{color:var(--tree-color-status-error)}.t-link--danger:hover{opacity:.85}.t-link.is-disabled{opacity:.5;cursor:not-allowed;text-decoration:none}.t-eyebrow{font-family:var(--tree-font-family-sans);font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);letter-spacing:.08em;text-transform:uppercase;line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-muted)}.t-app-shell{--tree-app-shell-sidebar-width:17.5rem;--tree-app-shell-collapsed-width:4.75rem;--tree-app-shell-track:var(--tree-app-shell-sidebar-width);--tree-app-shell-frame:color-mix(in srgb, var(--tree-color-bg-surface) 88%, var(--tree-color-bg-subtle));--tree-app-shell-content:var(--tree-color-bg-primary);grid-template-columns:var(--tree-app-shell-track) minmax(0,1fr);background:var(--tree-app-shell-frame);block-size:100dvh;inline-size:100%;color:var(--tree-color-text-primary);font-family:var(--tree-font-family-sans);transition:grid-template-columns var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard);grid-template-rows:auto minmax(0,1fr);grid-template-areas:"header header""sidebar main";display:grid;overflow:hidden}.t-app-shell--right{grid-template-columns:minmax(0,1fr) var(--tree-app-shell-track);grid-template-areas:"header header""main sidebar"}.t-app-shell.is-collapsed{--tree-app-shell-track:var(--tree-app-shell-collapsed-width)}.t-app-shell.is-mobile{grid-template-columns:minmax(0,1fr);grid-template-areas:"header""main"}.t-app-shell__header{--tree-app-shell-header-pad:clamp(var(--tree-space-4), 3vw, var(--tree-space-6));align-items:center;gap:var(--tree-space-3);min-block-size:4rem;min-inline-size:0;padding-inline:var(--tree-app-shell-header-pad);background:0 0;grid-area:header;display:flex}.t-app-shell__header-content{flex:auto;min-inline-size:0}.t-app-shell__header-end{align-items:center;gap:var(--tree-space-2);flex:none;min-inline-size:0;display:flex}.t-app-shell__header.has-start{grid-template-columns:var(--tree-app-shell-track) minmax(0,1fr);transition:grid-template-columns var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard);gap:0;padding-inline:0;display:grid}.t-app-shell__header.has-start>.t-app-shell__header-start{min-inline-size:0;padding-inline:var(--tree-app-shell-header-pad)}.t-app-shell__header.has-start>.t-app-shell__header-content{min-inline-size:0;padding-inline:0 var(--tree-app-shell-header-pad)}.t-app-shell__header.has-start.has-end{grid-template-columns:var(--tree-app-shell-track) minmax(0,1fr) auto}.t-app-shell__header.has-start.has-end>.t-app-shell__header-content{padding-inline:0}.t-app-shell__header.has-start.has-end>.t-app-shell__header-end{padding-inline:0 var(--tree-app-shell-header-pad)}.t-app-shell.is-mobile .t-app-shell__header.has-start{gap:var(--tree-space-3);padding-inline:var(--tree-app-shell-header-pad);display:flex}.t-app-shell.is-mobile .t-app-shell__header.has-start>.t-app-shell__header-start,.t-app-shell.is-mobile .t-app-shell__header.has-start>.t-app-shell__header-content,.t-app-shell.is-mobile .t-app-shell__header.has-start>.t-app-shell__header-end{padding-inline:0}.t-app-shell__menu-button{block-size:2.75rem;inline-size:2.75rem;border-radius:var(--tree-radius-md);color:inherit;cursor:pointer;transition:background var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:none;flex:none;justify-content:center;align-items:center;margin-inline-start:calc(-1 * var(--tree-space-2));padding:0;display:inline-flex}.t-app-shell__menu-button:hover{background:var(--tree-color-bg-subtle)}.t-app-shell__menu-button:focus-visible{outline:var(--tree-border-width-strong) solid var(--tree-color-focus-ring);outline-offset:2px}body:has(.t-app-shell){margin:0}.t-app-shell__sidebar{gap:var(--tree-space-4);min-block-size:0;padding:var(--tree-space-4);transition:padding var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard);background:0 0;flex-direction:column;grid-area:sidebar;display:flex;overflow:hidden auto}.t-app-shell__sidebar-body{flex:auto;min-block-size:0}.t-app-shell__sidebar-header,.t-app-shell__sidebar-footer{--tree-app-shell-rail-inset:var(--tree-space-3);padding-inline:var(--tree-app-shell-rail-inset)}.t-app-shell__sidebar-footer{gap:var(--tree-space-3);min-inline-size:0;display:grid}.t-app-shell__collapse-button{inline-size:var(--tree-size-control-sm);block-size:var(--tree-size-control-sm);border-radius:var(--tree-radius-md);color:var(--tree-color-text-muted);cursor:pointer;transition:background var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:0;justify-content:flex-start;justify-self:start;align-items:center;padding:0;display:inline-flex}.t-app-shell__collapse-button:hover{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-app-shell__collapse-button:focus-visible{outline:2px solid var(--tree-color-focus-ring);outline-offset:2px}.t-app-shell.is-collapsed .t-app-shell__sidebar-footer{justify-items:center}.t-app-shell.is-collapsed .t-app-shell__collapse-button{justify-content:center;justify-self:center}.t-app-shell.is-collapsed .t-app-shell__sidebar{padding-inline:var(--tree-space-3)}.t-app-shell__main{background:var(--tree-app-shell-content);grid-area:main;min-block-size:0;min-inline-size:0;overflow:auto}.t-app-shell--left:not(.is-mobile) .t-app-shell__main{border-start-start-radius:var(--tree-radius-lg)}.t-app-shell--right:not(.is-mobile) .t-app-shell__main{border-start-end-radius:var(--tree-radius-lg)}.t-app-shell.is-immersive{grid-template:"main"minmax(0,1fr)/minmax(0,1fr)}.t-app-shell.is-immersive>.t-app-shell__header,.t-app-shell.is-immersive>.t-app-shell__sidebar{display:none}.t-app-shell.is-immersive .t-app-shell__main{border-radius:0}.t-app-shell__overlay{z-index:var(--tree-z-modal);position:fixed;top:0;right:0;bottom:0;left:0}.t-app-shell__backdrop{background:var(--tree-color-overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);position:absolute;top:0;right:0;bottom:0;left:0}.t-app-shell__drawer{inline-size:min(100%,var(--tree-app-shell-sidebar-width));padding:var(--tree-space-3) var(--tree-space-4) var(--tree-space-4);background:color-mix(in srgb,var(--tree-color-bg-surface) 96%,var(--tree-color-bg-subtle));color:var(--tree-color-text-primary);box-shadow:var(--tree-shadow-md);grid-template-rows:auto minmax(0,1fr);display:grid;position:absolute;inset-block:0}.t-app-shell__drawer:focus-visible{box-shadow:var(--tree-shadow-md),0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-app-shell--left .t-app-shell__drawer{border-inline-end:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:0 var(--tree-radius-lg) var(--tree-radius-lg) 0;inset-inline-start:0}.t-app-shell--right .t-app-shell__drawer{border-inline-start:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-lg) 0 0 var(--tree-radius-lg);inset-inline-end:0}.t-app-shell__drawer-topbar{justify-content:flex-end;min-block-size:2.75rem;display:flex}.t-app-shell__drawer-close{border-radius:var(--tree-radius-md);block-size:2.75rem;inline-size:2.75rem;color:var(--tree-color-text-muted);cursor:pointer;transition:background var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.t-app-shell__drawer-close:hover{background:var(--tree-color-bg-subtle);color:var(--tree-color-text-primary)}.t-app-shell__drawer-close:focus-visible{outline:var(--tree-border-width-strong) solid var(--tree-color-focus-ring);outline-offset:2px}.t-app-shell__drawer-body{flex-direction:column;min-block-size:0;display:flex;overflow:hidden auto}.t-app-shell-fade-enter-active,.t-app-shell-fade-leave-active{transition:opacity var(--tree-motion-duration-moderate) var(--tree-motion-easing-standard)}.t-app-shell-fade-enter-from,.t-app-shell-fade-leave-to{opacity:0}@media(prefers-reduced-motion:reduce){.t-app-shell,.t-app-shell__sidebar,.t-app-shell-fade-enter-active,.t-app-shell-fade-leave-active{transition:none}}.t-sparkline{vertical-align:middle;color:var(--tree-color-chart-1);display:inline-block;overflow:visible}.t-sparkline__line{stroke:currentColor;fill:none;stroke-linejoin:round;stroke-linecap:round}.t-sparkline__area{fill:currentColor;opacity:.22}.t-sparkline__bar{fill:currentColor}.t-sparkline__point{fill:currentColor;stroke:var(--tree-color-bg-surface);stroke-width:1.5px}.t-chart{gap:var(--tree-space-3);width:100%;font-family:var(--tree-font-family-sans);color:var(--tree-color-text-primary);flex-direction:column;display:flex}.t-chart__canvas{width:100%;position:relative}.t-chart__svg{touch-action:none;width:100%;display:block;overflow:visible}.t-chart__gridline{stroke:var(--tree-color-border-default);stroke-width:1px}.t-chart__axis-label{fill:var(--tree-color-text-muted);font-size:var(--tree-font-size-xs);font-family:var(--tree-font-family-sans)}.t-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.t-chart__axis-label--x{text-anchor:middle}.t-chart__area{fill:currentColor;stroke:none;opacity:.12}.t-chart__line{stroke:currentColor;fill:none;stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.t-chart__bar{fill:currentColor;transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-chart__bars:hover .t-chart__bar:not(.is-active){opacity:.55}.t-chart__point{fill:currentColor;stroke:var(--tree-color-bg-surface);stroke-width:2px}.t-chart__crosshair{stroke:var(--tree-color-border-strong);stroke-width:1px;pointer-events:none}.t-chart__marker{fill:currentColor;stroke:var(--tree-color-bg-surface);stroke-width:2px;pointer-events:none}.t-chart__tooltip{min-width:8rem;max-width:16rem;padding:var(--tree-space-2) var(--tree-space-3);background:var(--tree-color-bg-surface);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);box-shadow:var(--tree-shadow-sm);pointer-events:none;z-index:var(--tree-z-base);position:absolute;transform:translate(-50%)}.t-chart__tooltip-label{margin:0 0 var(--tree-space-1);font-size:var(--tree-font-size-sm);font-weight:var(--tree-font-weight-semibold);color:var(--tree-color-text-primary)}.t-chart__tooltip-list{gap:var(--tree-space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.t-chart__tooltip-item{align-items:center;gap:var(--tree-space-2);font-size:var(--tree-font-size-sm);color:var(--tree-color-text-muted);display:flex}.t-chart__tooltip-dot{border-radius:var(--tree-radius-sm);flex-shrink:0;width:.625rem;height:.625rem}.t-chart__tooltip-value{font-weight:var(--tree-font-weight-medium);color:var(--tree-color-text-primary);font-variant-numeric:tabular-nums;margin-left:auto}.t-chart__legend,.t-donut-chart__legend{gap:var(--tree-space-2) var(--tree-space-4);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.t-chart__legend{justify-content:center}.t-chart__legend-item{align-items:center;gap:var(--tree-space-2);font-size:var(--tree-font-size-sm);color:var(--tree-color-text-muted);display:inline-flex}.t-chart__legend-swatch,.t-donut-chart__legend-swatch{border-radius:var(--tree-radius-sm);flex-shrink:0;width:.75rem;height:.75rem}.t-chart__empty{height:100%;color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);justify-content:center;align-items:center;display:flex}.t-chart__loading{justify-content:space-between;align-items:flex-end;gap:var(--tree-space-2);height:100%;padding:var(--tree-space-4);display:flex}.t-chart__loading-bar{background:var(--tree-color-bg-subtle);border-radius:var(--tree-radius-sm);animation:t-chart-pulse 1.4s var(--tree-motion-easing-easeInOut) infinite;flex:1}.t-chart.is-animated .t-chart__line{stroke-dasharray:1;stroke-dashoffset:1px;animation:t-chart-draw .7s var(--tree-motion-easing-standard) forwards}.t-chart.is-animated .t-chart__area{animation:t-chart-fade .7s var(--tree-motion-easing-standard)}.t-chart.is-animated .t-chart__bar{transform-box:fill-box;transform-origin:bottom;animation:t-chart-grow .5s var(--tree-motion-easing-standard) backwards}@keyframes t-chart-draw{to{stroke-dashoffset:0}}@keyframes t-chart-fade{0%{opacity:0}}@keyframes t-chart-grow{0%{transform:scaleY(0)}}@keyframes t-chart-pulse{0%,to{opacity:1}50%{opacity:.5}}.t-donut-chart{align-items:center;gap:var(--tree-space-5);font-family:var(--tree-font-family-sans);color:var(--tree-color-text-primary);flex-wrap:wrap;display:flex}.t-donut-chart__figure{flex-shrink:0;position:relative}.t-donut-chart__svg{display:block}.t-donut-chart__segment{cursor:default;transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),stroke-width var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);animation:t-chart-fade .5s var(--tree-motion-easing-standard) backwards}.t-donut-chart__segment--wedge{stroke:var(--tree-color-bg-surface);stroke-width:2px;stroke-linejoin:round}.t-donut-chart__segment.is-dimmed{opacity:.35}.t-donut-chart__center{justify-content:center;align-items:center;gap:var(--tree-space-1);text-align:center;pointer-events:none;flex-direction:column;display:flex;position:absolute;top:0;right:0;bottom:0;left:0}.t-donut-chart__center-value{font-size:var(--tree-font-size-3xl);font-weight:var(--tree-font-weight-bold);line-height:var(--tree-font-lineHeight-compact);letter-spacing:-.01em}.t-donut-chart__center-label{font-size:var(--tree-font-size-sm);color:var(--tree-color-text-muted)}.t-donut-chart__legend{gap:var(--tree-space-1);flex-direction:column;min-width:11rem}.t-donut-chart__legend-item{align-items:center;gap:var(--tree-space-2);padding:var(--tree-space-1) var(--tree-space-2);margin-inline:calc(-1 * var(--tree-space-2));font-size:var(--tree-font-size-sm);color:var(--tree-color-text-muted);border-radius:var(--tree-radius-sm);transition:background var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);cursor:default;display:flex}.t-donut-chart__legend-item.is-active{background:var(--tree-color-bg-subtle)}.t-donut-chart__legend-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--tree-color-text-primary);flex:1;overflow:hidden}.t-donut-chart__legend-value{text-align:right;font-variant-numeric:tabular-nums;min-width:2.5rem;font-weight:var(--tree-font-weight-medium);color:var(--tree-color-text-primary)}.t-donut-chart__legend-percent{text-align:right;font-variant-numeric:tabular-nums;min-width:2.75rem;color:var(--tree-color-text-muted)}.t-donut-chart__empty{width:100%;height:100%;color:var(--tree-color-text-muted);font-size:var(--tree-font-size-sm);justify-content:center;align-items:center;display:flex}.t-donut-chart__skeleton{border-radius:var(--tree-radius-pill);background:var(--tree-color-bg-subtle);width:100%;height:100%;animation:t-chart-pulse 1.4s var(--tree-motion-easing-easeInOut) infinite}@media(prefers-reduced-motion:reduce){.t-chart.is-animated .t-chart__line,.t-chart.is-animated .t-chart__area,.t-chart.is-animated .t-chart__bar,.t-donut-chart__segment{animation:none}.t-chart.is-animated .t-chart__line{stroke-dashoffset:0}}.t-flag{--tree-flag-height:var(--tree-size-icon-md);block-size:var(--tree-flag-height);inline-size:calc(var(--tree-flag-height) * 3 / 2);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-sm);background:var(--tree-color-bg-subtle);font-family:var(--tree-font-family-sans);vertical-align:middle;-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.t-flag--sm{--tree-flag-height:var(--tree-size-icon-sm)}.t-flag--md{--tree-flag-height:var(--tree-size-icon-md)}.t-flag--lg{--tree-flag-height:var(--tree-size-icon-lg)}.t-flag__image{object-fit:contain;width:100%;height:100%;display:block}.t-flag__fallback{font-size:var(--tree-font-size-xs);font-weight:var(--tree-font-weight-medium);line-height:var(--tree-font-lineHeight-tight);white-space:nowrap;color:var(--tree-color-text-muted);overflow:hidden}.t-flag--lg .t-flag__fallback{font-size:var(--tree-font-size-sm)}.t-language-select{width:100%;min-inline-size:0;display:inline-flex;position:relative}.t-language-select__trigger{align-items:center;gap:var(--tree-space-2);width:100%;min-height:var(--tree-size-control-md);padding-inline:var(--tree-space-3);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);color:var(--tree-color-text-primary);font:inherit;cursor:pointer;text-align:start;transition:border-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),box-shadow var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);display:inline-flex}.t-language-select__trigger:focus-visible{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring);outline:none}.t-language-select.is-open .t-language-select__trigger{border-color:var(--tree-color-brand-primary);box-shadow:0 0 0 4px var(--tree-color-focus-ring)}.t-language-select.is-invalid .t-language-select__trigger{border-color:var(--tree-color-status-error)}.t-language-select.is-invalid .t-language-select__trigger:focus-visible,.t-language-select.is-invalid.is-open .t-language-select__trigger{box-shadow:0 0 0 4px color-mix(in srgb,var(--tree-color-status-error) 20%,transparent)}.t-language-select.is-disabled .t-language-select__trigger{opacity:.68;cursor:not-allowed}.t-language-select--sm .t-language-select__trigger{min-height:var(--tree-size-control-sm);padding-inline:var(--tree-space-2)}.t-language-select--lg .t-language-select__trigger{min-height:var(--tree-size-control-lg);padding-inline:var(--tree-space-4)}.t-language-select__value{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.t-language-select__value[data-placeholder]{color:var(--tree-color-text-muted)}.t-language-select__chevron{width:1em;height:1em;color:var(--tree-color-text-muted);pointer-events:none;transition:transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);flex-shrink:0}.t-language-select.is-open .t-language-select__chevron{transform:rotate(180deg)}.t-language-select__slot{color:var(--tree-color-text-muted);justify-content:center;align-items:center;display:inline-flex}.t-language-select__listbox{top:calc(100% + var(--tree-space-2));z-index:var(--tree-z-dropdown);width:100%;max-height:15rem;padding:var(--tree-space-1);border:var(--tree-border-width-subtle) solid var(--tree-color-border-default);border-radius:var(--tree-radius-md);background:var(--tree-color-bg-surface);box-shadow:var(--tree-shadow-md);margin:0;list-style:none;position:absolute;left:0;overflow-y:auto}.t-language-select--drop-up .t-language-select__listbox{top:auto;bottom:calc(100% + var(--tree-space-2))}.t-language-select__option{align-items:center;gap:var(--tree-space-2);padding:var(--tree-space-2) var(--tree-space-3);border-radius:var(--tree-radius-sm);font-size:var(--tree-font-size-md);line-height:var(--tree-font-lineHeight-ui);color:var(--tree-color-text-primary);cursor:pointer;transition:background-color var(--tree-motion-duration-fast) var(--tree-motion-easing-standard);outline:none;display:flex}.t-language-select__option:hover,.t-language-select__option.is-focused{background:var(--tree-color-brand-soft)}.t-language-select__option:focus-visible{background:var(--tree-color-brand-soft);box-shadow:0 0 0 2px var(--tree-color-focus-ring) inset}.t-language-select__option.is-selected{font-weight:var(--tree-font-weight-medium);color:var(--tree-color-brand-primary)}.t-language-select__option.is-disabled{opacity:.5;cursor:not-allowed}.t-language-select__option.is-disabled:hover{background:0 0}.t-language-select__check{width:1em;height:1em;color:var(--tree-color-brand-primary);flex-shrink:0;margin-inline-start:auto}.t-language-select .t-fade-enter-active,.t-language-select .t-fade-leave-active{transition:opacity var(--tree-motion-duration-fast) var(--tree-motion-easing-standard),transform var(--tree-motion-duration-fast) var(--tree-motion-easing-standard)}.t-language-select .t-fade-enter-from,.t-language-select .t-fade-leave-to{opacity:0;transform:translateY(4px)}.t-language-select--switcher{width:auto}.t-language-select--switcher .t-language-select__trigger{gap:var(--tree-space-2);width:auto}.t-language-select--switcher .t-language-select__value{flex:0 auto}.t-language-select--icon-only .t-language-select__trigger{padding-inline:var(--tree-space-2)}.t-language-select--switcher .t-language-select__listbox{width:max-content;min-width:100%;left:auto;right:0}.t-language-select__translate{inline-size:var(--tree-size-icon-md);block-size:var(--tree-size-icon-md);color:var(--tree-color-text-muted);flex-shrink:0}.t-language-select--sm .t-language-select__translate{inline-size:var(--tree-size-icon-sm);block-size:var(--tree-size-icon-sm)}.t-language-select--lg .t-language-select__translate{inline-size:var(--tree-size-icon-lg);block-size:var(--tree-size-icon-lg)}.t-language-select__option-text{flex:1;min-width:0}.t-language-select__option-label{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.t-language-select__description{text-overflow:ellipsis;white-space:nowrap;font-size:var(--tree-font-size-sm);line-height:var(--tree-font-lineHeight-tight);color:var(--tree-color-text-muted);display:block;overflow:hidden}.t-language-select__empty{padding:var(--tree-space-2) var(--tree-space-3);font-size:var(--tree-font-size-sm);color:var(--tree-color-text-muted)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;background:var(--tree-color-bg-primary);color:var(--tree-color-text-primary);line-height:1.6}#app{min-height:100vh;width:100%}.brand-logo{height:2rem;width:auto;max-width:10rem;object-fit:contain;border-radius:var(--tree-radius-sm)}.mono{font-family:var(--tree-font-family-mono)}.logs-pre{margin:0;padding:1rem;background:#0b0c10;color:#d1d5db;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,Monaco,monospace;font-size:.85rem;overflow:auto;min-height:320px;max-height:60vh;white-space:pre-wrap;border-radius:.375rem}
|