blade-code 0.10.6 → 0.10.7

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.
Files changed (105) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-kcs3xa8f.js → chunk-0n04bmta.js} +2 -2
  3. package/dist/{chunk-g4q26d9a.js → chunk-0xm8hn2h.js} +2 -2
  4. package/dist/chunk-0z7q89w7.js +2 -0
  5. package/dist/{chunk-b4n34hrn.js → chunk-1sw9z975.js} +1 -1
  6. package/dist/{chunk-vvbd9fb5.js → chunk-1v7hpr34.js} +1 -1
  7. package/dist/{chunk-bnrce0hg.js → chunk-3fdyzgpv.js} +1 -1
  8. package/dist/{chunk-w154jyby.js → chunk-43j2f1b5.js} +1 -1
  9. package/dist/{chunk-dcvvxsa1.js → chunk-4hhkbyja.js} +2 -2
  10. package/dist/{chunk-n5m2p0bq.js → chunk-4rhssb85.js} +2 -2
  11. package/dist/chunk-598egka3.js +22 -0
  12. package/dist/chunk-5ak9tw83.js +100 -0
  13. package/dist/chunk-738pkjf8.js +1 -0
  14. package/dist/{chunk-76d7p64v.js → chunk-7a200q5g.js} +2 -2
  15. package/dist/{chunk-evaht3v4.js → chunk-7pkrwh10.js} +1 -1
  16. package/dist/chunk-7xfmzvxp.js +1 -0
  17. package/dist/{chunk-c2rhwxyn.js → chunk-847e0sk9.js} +1 -1
  18. package/dist/chunk-867rz2ss.js +1 -0
  19. package/dist/chunk-a3e97syg.js +3 -0
  20. package/dist/{chunk-frcg8gea.js → chunk-ahxc3n3g.js} +2 -2
  21. package/dist/{chunk-xkp4ph6v.js → chunk-akev4wsz.js} +1 -1
  22. package/dist/{chunk-c9tzf9r5.js → chunk-az4b6106.js} +1 -1
  23. package/dist/{chunk-kcwq1e7h.js → chunk-e9ckf8e7.js} +1 -1
  24. package/dist/{chunk-jqyvnmfr.js → chunk-f7854pbx.js} +48 -48
  25. package/dist/chunk-fwt0kje3.js +1 -0
  26. package/dist/{chunk-nfmsn652.js → chunk-g1q27q6q.js} +2 -2
  27. package/dist/chunk-g3wgzyhx.js +160 -0
  28. package/dist/chunk-g4snq0dx.js +1 -0
  29. package/dist/chunk-ggm04adj.js +1 -0
  30. package/dist/chunk-hpytxsge.js +1 -0
  31. package/dist/chunk-htr91q9c.js +1 -0
  32. package/dist/chunk-hwcp940f.js +1 -0
  33. package/dist/chunk-j5ysjbyr.js +10 -0
  34. package/dist/{chunk-sf9pe2n6.js → chunk-jpy61wna.js} +1 -1
  35. package/dist/chunk-kqpwz9b7.js +8 -0
  36. package/dist/{chunk-n9khyme2.js → chunk-m86ekqp0.js} +2 -2
  37. package/dist/{chunk-383vbwmt.js → chunk-m8k1mv0j.js} +1 -1
  38. package/dist/{chunk-p196e4rq.js → chunk-mt4328yf.js} +1 -1
  39. package/dist/{chunk-4y28hykg.js → chunk-ne7zdjrh.js} +1 -1
  40. package/dist/{chunk-7xm3vjkz.js → chunk-p0j8994h.js} +1 -1
  41. package/dist/{chunk-rag8zchg.js → chunk-p3ahf1fh.js} +1 -1
  42. package/dist/{chunk-1cvr3qtd.js → chunk-pt659n0v.js} +390 -406
  43. package/dist/chunk-q1gfeadm.js +1 -0
  44. package/dist/{chunk-gb4n3hwj.js → chunk-qk2z6gag.js} +2 -2
  45. package/dist/{chunk-hjsm6ejs.js → chunk-qqwgb9ja.js} +2 -2
  46. package/dist/{chunk-m4htdpr9.js → chunk-qycwavck.js} +72 -17
  47. package/dist/chunk-rk1w5pry.js +2 -0
  48. package/dist/{chunk-g9n211y4.js → chunk-rn908m3v.js} +2 -2
  49. package/dist/{chunk-w4zvftrw.js → chunk-rz2ftt6h.js} +2 -2
  50. package/dist/{chunk-9sfmrb1j.js → chunk-rz9yh6e4.js} +2 -2
  51. package/dist/{chunk-p4j4aawd.js → chunk-tc83e1b0.js} +1 -1
  52. package/dist/{chunk-bn0ge244.js → chunk-tcc3v4n2.js} +1 -1
  53. package/dist/{chunk-yt39kfc6.js → chunk-tp9zk241.js} +1 -1
  54. package/dist/{chunk-c8rky275.js → chunk-tzh4ahry.js} +1 -1
  55. package/dist/chunk-v0rn831t.js +1 -0
  56. package/dist/{chunk-xsmtpkjm.js → chunk-vafn0spm.js} +1 -1
  57. package/dist/{chunk-0rp2ck29.js → chunk-vcq624qv.js} +2 -2
  58. package/dist/chunk-vynsgc2g.js +1 -0
  59. package/dist/{chunk-6cv4gddv.js → chunk-w01sec4f.js} +2 -2
  60. package/dist/chunk-w0ena7fe.js +9 -0
  61. package/dist/{chunk-45dcfkwe.js → chunk-wmdgb5pz.js} +2 -2
  62. package/dist/{chunk-k0p9ecgc.js → chunk-wrbm6rch.js} +6 -6
  63. package/dist/{chunk-r083b7vn.js → chunk-x3780wpy.js} +2 -2
  64. package/dist/{chunk-v1p80wvh.js → chunk-y573s5r8.js} +2 -2
  65. package/dist/chunk-ydwjttdz.js +1 -0
  66. package/dist/{chunk-thvwt4kc.js → chunk-yyvx1avz.js} +3 -3
  67. package/dist/chunk-z9fsh3kn.js +1 -0
  68. package/dist/{chunk-rw6gv740.js → chunk-zjf1z27e.js} +1 -1
  69. package/dist/web/assets/ChatView-BYfHmxKJ.js +7 -0
  70. package/dist/web/assets/{CodeBlockHighlighter-CFW6qjnA.js → CodeBlockHighlighter-CC4e9nFc.js} +1 -1
  71. package/dist/web/assets/{FilePreview-CR_XetY0.js → FilePreview-C3HEoLYS.js} +1 -1
  72. package/dist/web/assets/{MarkdownRenderer-CVrxJswQ.js → MarkdownRenderer-COycrGUX.js} +3 -3
  73. package/dist/web/assets/{McpModal-BO-85gll.js → McpModal-CDgr9kVq.js} +1 -1
  74. package/dist/web/assets/{SettingsModal-CW87OnxI.js → SettingsModal-CvdVIbeG.js} +1 -1
  75. package/dist/web/assets/{SkillsModal-Q8ZFPhys.js → SkillsModal-lSX1ZKTu.js} +1 -1
  76. package/dist/web/assets/{TaskSwitcher-BzH-0QXr.js → TaskSwitcher-peKi9KvN.js} +1 -1
  77. package/dist/web/assets/{TerminalPanel-DTqvx8yB.js → TerminalPanel-DqQ-7CTG.js} +1 -1
  78. package/dist/web/assets/index-BF5HEN_f.js +32 -0
  79. package/dist/web/assets/index-BrkTYxtS.css +1 -0
  80. package/dist/web/index.html +2 -2
  81. package/package.json +1 -1
  82. package/dist/chunk-10k6egwk.js +0 -1
  83. package/dist/chunk-17xtw88g.js +0 -1
  84. package/dist/chunk-1kg9r8xp.js +0 -2
  85. package/dist/chunk-3kk3bk11.js +0 -1
  86. package/dist/chunk-47dsd91k.js +0 -99
  87. package/dist/chunk-4kaygjqv.js +0 -10
  88. package/dist/chunk-50fq7r0h.js +0 -22
  89. package/dist/chunk-59eje513.js +0 -1
  90. package/dist/chunk-710bvht9.js +0 -160
  91. package/dist/chunk-a9pbpgkg.js +0 -9
  92. package/dist/chunk-j1sd03h7.js +0 -1
  93. package/dist/chunk-jrh5tzc4.js +0 -1
  94. package/dist/chunk-kj1ah6kn.js +0 -1
  95. package/dist/chunk-n34z4c47.js +0 -1
  96. package/dist/chunk-qvabd0vg.js +0 -1
  97. package/dist/chunk-t75wspk3.js +0 -1
  98. package/dist/chunk-vddqv6fv.js +0 -1
  99. package/dist/chunk-wa7v7akz.js +0 -3
  100. package/dist/chunk-wxwqz67n.js +0 -1
  101. package/dist/chunk-x9hm3p3a.js +0 -1
  102. package/dist/chunk-xd2g4zjx.js +0 -1
  103. package/dist/web/assets/ChatView-Y-6k-ayR.js +0 -7
  104. package/dist/web/assets/index-B7etZcne.css +0 -1
  105. package/dist/web/assets/index-ClOgGy-I.js +0 -32
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 240 10% 3.9%;--sidebar-background: 240 4.8% 95.9%;--card: 0 0% 100%;--card-foreground: 240 10% 3.9%;--popover: 0 0% 100%;--popover-foreground: 240 10% 3.9%;--primary: 240 5.9% 10%;--primary-foreground: 0 0% 98%;--secondary: 240 4.8% 95.9%;--secondary-foreground: 240 5.9% 10%;--muted: 240 4.8% 95.9%;--muted-foreground: 240 3.8% 46.1%;--accent: 240 4.8% 95.9%;--accent-foreground: 240 5.9% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 240 5.9% 90%;--input: 240 5.9% 90%;--ring: 240 10% 3.9%;--radius: .5rem;--success: 142 76% 36%;--success-foreground: 0 0% 100%;--warning: 38 92% 50%;--warning-foreground: 0 0% 0%;--info: 217 91% 60%;--info-foreground: 0 0% 100%;--panel: 240 4.8% 95.9%;--panel-foreground: 240 10% 3.9%;--panel-hover: 240 4.8% 90%;--panel-active: 240 4.8% 85%;--subtle: 240 3.8% 46.1%;--subtle-foreground: 240 5.9% 10%;--deck-canvas: 0 0% 99%;--deck-canvas-veil: 220 15% 96%;--deck-surface: 0 0% 100%;--deck-surface-2: 220 20% 98.5%;--deck-border: 220 13% 91%;--deck-border-strong: 220 13% 82%;--deck-hairline: 220 15% 94%;--deck-ink: 222 22% 11%;--deck-ink-muted: 220 9% 46%;--deck-ink-faint: 220 9% 62%;--deck-accent: 152 62% 36%;--deck-accent-soft: 152 55% 92%;--deck-accent-glow: 152 82% 55%}.dark{--background: 0 0% 4.7%;--foreground: 0 0% 98%;--card: 240 10% 3.9%;--card-foreground: 0 0% 98%;--popover: 240 10% 3.9%;--popover-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 240 5.9% 10%;--secondary: 240 3.7% 15.9%;--secondary-foreground: 0 0% 98%;--muted: 240 3.7% 15.9%;--muted-foreground: 240 5% 64.9%;--accent: 240 3.7% 15.9%;--accent-foreground: 0 0% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 0 0% 98%;--border: 240 3.7% 15.9%;--input: 240 3.7% 15.9%;--ring: 240 4.9% 83.9%;--sidebar-background: 240 10% 3.9%;--success: 142 71% 45%;--success-foreground: 0 0% 0%;--warning: 38 92% 50%;--warning-foreground: 0 0% 0%;--info: 217 91% 60%;--info-foreground: 0 0% 100%;--panel: 240 6% 10%;--panel-foreground: 0 0% 90%;--panel-hover: 240 5% 17%;--panel-active: 220 13% 13%;--subtle: 240 5% 65%;--subtle-foreground: 0 0% 98%;--deck-canvas: 240 8% 5%;--deck-canvas-veil: 240 10% 7%;--deck-surface: 240 8% 8%;--deck-surface-2: 240 7% 10%;--deck-border: 240 5% 16%;--deck-border-strong: 240 5% 24%;--deck-hairline: 240 6% 13%;--deck-ink: 0 0% 96%;--deck-ink-muted: 240 5% 65%;--deck-ink-faint: 240 5% 42%;--deck-accent: 152 68% 48%;--deck-accent-soft: 152 30% 15%;--deck-accent-glow: 152 82% 60%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"cv02","cv03","cv04","cv11","ss01"}.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:2rem!important;padding-left:2rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.\!container{max-width:1400px!important}.container{max-width:1400px}}.\!field{height:2.25rem;width:100%;border-radius:calc(var(--radius) - 2px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.375rem .75rem;font-family:JetBrains Mono,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1));outline:2px solid transparent;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.\!field::-moz-placeholder{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.\!field::placeholder{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.\!field:focus{--tw-border-opacity: 1;border-color:rgb(161 161 170 / var(--tw-border-opacity, 1));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(161 161 170 / var(--tw-ring-opacity, 1))}.\!field:disabled{cursor:not-allowed;opacity:.5}.\!field:is(.dark *){--tw-border-opacity: 1;border-color:rgb(63 63 70 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(244 244 245 / var(--tw-text-opacity, 1))}.\!field:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.\!field:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.\!field:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(113 113 122 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(113 113 122 / var(--tw-ring-opacity, 1))}.field{height:2.25rem;width:100%;border-radius:calc(var(--radius) - 2px);border-width:1px;--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.375rem .75rem;font-family:JetBrains Mono,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1));outline:2px solid transparent;outline-offset:2px;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.field::-moz-placeholder{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.field::placeholder{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.field:focus{--tw-border-opacity: 1;border-color:rgb(161 161 170 / var(--tw-border-opacity, 1));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(161 161 170 / var(--tw-ring-opacity, 1))}.field:disabled{cursor:not-allowed;opacity:.5}.field:is(.dark *){--tw-border-opacity: 1;border-color:rgb(63 63 70 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(244 244 245 / var(--tw-text-opacity, 1))}.field:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.field:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.field:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(113 113 122 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(113 113 122 / var(--tw-ring-opacity, 1))}select.\!field,select.field{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none}select.\!field{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")!important;background-repeat:no-repeat!important;background-position:right .5rem center!important;background-size:1rem!important;padding-right:2rem!important}select.field{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:1rem;padding-right:2rem}.deck-canvas{background-color:hsl(var(--deck-canvas));background-image:radial-gradient(1200px 600px at 12% -10%,hsl(var(--deck-accent) / .06),transparent 60%),radial-gradient(900px 500px at 100% 0%,hsl(var(--deck-accent) / .04),transparent 55%),radial-gradient(circle at 1px 1px,hsl(var(--deck-ink) / .05) 1px,transparent 0);background-size:auto,auto,22px 22px;background-position:0 0,0 0,0 0}.dark .deck-canvas{background-image:radial-gradient(1200px 600px at 12% -10%,hsl(var(--deck-accent) / .12),transparent 60%),radial-gradient(900px 500px at 100% 0%,hsl(var(--deck-accent) / .06),transparent 55%),radial-gradient(circle at 1px 1px,hsl(var(--deck-ink) / .06) 1px,transparent 0)}.deck-eyebrow{font-family:JetBrains Mono,monospace;font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;font-weight:500}.deck-pulse-dot{position:relative;display:inline-block;width:6px;height:6px;border-radius:9999px;background-color:hsl(var(--deck-accent));box-shadow:0 0 0 2px hsl(var(--deck-accent) / .18)}.deck-pulse-dot:after{content:"";position:absolute;top:-4px;right:-4px;bottom:-4px;left:-4px;border-radius:9999px;border:1px solid hsl(var(--deck-accent) / .55);animation:deck-pulse 1.8s ease-out infinite}@keyframes deck-pulse{0%{transform:scale(.6);opacity:.9}to{transform:scale(1.9);opacity:0}}.deck-kbd{font-family:JetBrains Mono,monospace;font-size:10px;line-height:1;padding:3px 5px;border-radius:4px;border:1px solid hsl(var(--deck-border));background:hsl(var(--deck-surface));color:hsl(var(--deck-ink-muted));box-shadow:0 1px hsl(var(--deck-border))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-left-1{left:-.25rem}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2,.left-\[50\%\]{left:50%}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-\[3px\]{right:3px}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-3{top:.75rem}.top-4{top:1rem}.top-\[3px\]{top:3px}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.col-span-full{grid-column:1 / -1}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-1\.5{margin-left:.375rem;margin-right:.375rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-\[2px\]{margin-left:2px;margin-right:2px}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-2{margin-left:-.5rem}.-mr-1{margin-right:-.25rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[180px\]{height:180px}.h-\[220px\]{height:220px}.h-\[calc\(100\%-40px\)\]{height:calc(100% - 40px)}.h-\[min\(18rem\,45dvh\)\]{height:min(18rem,45dvh)}.h-\[min\(620px\,calc\(100dvh-24px\)\)\]{height:min(620px,calc(100dvh - 24px))}.h-\[min\(680px\,calc\(100dvh-24px\)\)\]{height:min(680px,calc(100dvh - 24px))}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-20{max-height:5rem}.max-h-36{max-height:9rem}.max-h-52{max-height:13rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-\[120px\]{max-height:120px}.max-h-\[160px\]{max-height:160px}.max-h-\[200px\]{max-height:200px}.max-h-\[232px\]{max-height:232px}.max-h-\[240px\]{max-height:240px}.max-h-\[310px\]{max-height:310px}.max-h-\[340px\]{max-height:340px}.max-h-\[calc\(100dvh-24px\)\]{max-height:calc(100dvh - 24px)}.max-h-\[min\(240px\,30dvh\)\]{max-height:min(240px,30dvh)}.max-h-\[min\(460px\,60vh\)\]{max-height:min(460px,60vh)}.max-h-\[min\(70vh\,520px\)\]{max-height:min(70vh,520px)}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-11{min-height:2.75rem}.min-h-36{min-height:9rem}.min-h-4{min-height:1rem}.min-h-6{min-height:1.5rem}.min-h-7{min-height:1.75rem}.min-h-8{min-height:2rem}.min-h-9{min-height:2.25rem}.min-h-\[100px\]{min-height:100px}.min-h-\[140px\]{min-height:140px}.min-h-\[148px\]{min-height:148px}.min-h-\[260px\]{min-height:260px}.min-h-\[54px\]{min-height:54px}.min-h-\[56px\]{min-height:56px}.min-h-\[58px\]{min-height:58px}.min-h-\[68px\]{min-height:68px}.min-h-\[80px\]{min-height:80px}.min-h-\[84px\]{min-height:84px}.min-h-full{min-height:100%}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[220px\]{width:220px}.w-\[260px\]{width:260px}.w-\[280px\]{width:280px}.w-\[2px\]{width:2px}.w-\[340px\]{width:340px}.w-\[3px\]{width:3px}.w-\[45\%\]{width:45%}.w-\[64px\]{width:64px}.w-\[calc\(100\%_-_2rem\)\]{width:calc(100% - 2rem)}.w-\[calc\(100vw-24px\)\]{width:calc(100vw - 24px)}.w-\[min\(680px\,calc\(100vw-32px\)\)\]{width:min(680px,calc(100vw - 32px))}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[180px\]{min-width:180px}.min-w-\[28px\]{min-width:28px}.min-w-\[360px\]{min-width:360px}.min-w-\[520px\]{min-width:520px}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-\[220px\]{max-width:220px}.max-w-\[400px\]{max-width:400px}.max-w-\[46rem\]{max-width:46rem}.max-w-\[560px\]{max-width:560px}.max-w-\[620px\]{max-width:620px}.max-w-\[85\%\]{max-width:85%}.max-w-\[960px\]{max-width:960px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.origin-\[--radix-popover-content-transform-origin\]{transform-origin:var(--radix-popover-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2\.5{--tw-translate-x: .625rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[1fr_180px_120px\]{grid-template-columns:1fr 180px 120px}.grid-cols-\[40px_40px_1fr\]{grid-template-columns:40px 40px 1fr}.grid-cols-\[minmax\(170px\,220px\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(170px,220px) minmax(0,1fr)}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-\[1px\]{gap:1px}.gap-\[3px\]{gap:3px}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-2{row-gap:.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-\[\#E5E7EB\]>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.divide-\[hsl\(var\(--deck-hairline\)\)\]>:not([hidden])~:not([hidden]){border-color:hsl(var(--deck-hairline))}.self-end{align-self:flex-end}.\!overflow-auto{overflow:auto!important}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[1px\]{border-radius:1px}.rounded-\[4px\]{border-radius:4px}.rounded-\[5px\]{border-radius:5px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0px}.border-dashed{border-style:dashed}.border-\[\#16A34A\]\/30{border-color:#16a34a4d}.border-\[\#22C55E\]{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-\[\#D1D5DB\]{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-\[\#DDD6FE\]{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-\[hsl\(var\(--deck-accent\)\/0\.45\)\]{border-color:hsl(var(--deck-accent)/.45)}.border-\[hsl\(var\(--deck-accent\)\/0\.5\)\]{border-color:hsl(var(--deck-accent)/.5)}.border-\[hsl\(var\(--deck-accent\)\/0\.55\)\]{border-color:hsl(var(--deck-accent)/.55)}.border-\[hsl\(var\(--deck-accent\)\/0\.7\)\]{border-color:hsl(var(--deck-accent)/.7)}.border-\[hsl\(var\(--deck-border\)\)\]{border-color:hsl(var(--deck-border))}.border-\[hsl\(var\(--deck-border\)\)\]\/60{border-color:hsl(var(--deck-border) / .6)}.border-\[hsl\(var\(--deck-border-strong\)\)\]{border-color:hsl(var(--deck-border-strong))}.border-\[hsl\(var\(--deck-hairline\)\)\]{border-color:hsl(var(--deck-hairline))}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-200\/50{border-color:#fde68a80}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-300\/60{border-color:#fcd34d99}.border-amber-300\/70{border-color:#fcd34db3}.border-amber-300\/80{border-color:#fcd34dcc}.border-amber-400\/70{border-color:#fbbf24b3}.border-amber-400\/80{border-color:#fbbf24cc}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-600{--tw-border-opacity: 1;border-color:rgb(217 119 6 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-emerald-300\/70{border-color:#6ee7b7b3}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-emerald-500\/20{border-color:#10b98133}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-200\/60{border-color:#fecaca99}.border-red-300\/70{border-color:#fca5a5b3}.border-red-500\/20{border-color:#ef444433}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-zinc-200{--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1))}.border-zinc-500\/20{border-color:#71717a33}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#111827\]{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-\[\#16A34A\]{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-\[\#16A34A\]\/10{background-color:#16a34a1a}.bg-\[\#16A34A\]\/20{background-color:#16a34a33}.bg-\[\#22C55E\]{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-\[\#22C55E\]\/10{background-color:#22c55e1a}.bg-\[\#22C55E\]\/20{background-color:#22c55e33}.bg-\[\#2563eb\]{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-\[\#3B82F6\]{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-\[\#3b82f6\]\/20{background-color:#3b82f633}.bg-\[\#6366F1\]{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-\[\#7C3AED\]{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity, 1))}.bg-\[\#D1D5DB\]{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-\[\#DBEAFE\]{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-\[\#DCFCE7\]{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-\[\#E5E7EB\]{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-\[\#EDE9FE\]{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.bg-\[\#EF4444\]{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-\[\#EF4444\]\/10{background-color:#ef44441a}.bg-\[\#F0FDF4\]{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-\[\#F3F4F6\]{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-\[\#F5F3FF\]{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-\[\#F9FAFB\]{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-\[\#FEE2E2\]{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-\[\#FEF3C7\]{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(var\(--deck-accent\)\)\]{background-color:hsl(var(--deck-accent))}.bg-\[hsl\(var\(--deck-accent-soft\)\)\]{background-color:hsl(var(--deck-accent-soft))}.bg-\[hsl\(var\(--deck-accent-soft\)\)\]\/55{background-color:hsl(var(--deck-accent-soft) / .55)}.bg-\[hsl\(var\(--deck-border\)\)\]{background-color:hsl(var(--deck-border))}.bg-\[hsl\(var\(--deck-border-strong\)\)\]\/60{background-color:hsl(var(--deck-border-strong) / .6)}.bg-\[hsl\(var\(--deck-canvas\)\)\]{background-color:hsl(var(--deck-canvas))}.bg-\[hsl\(var\(--deck-canvas\)\)\]\/90{background-color:hsl(var(--deck-canvas) / .9)}.bg-\[hsl\(var\(--deck-canvas-veil\)\)\]{background-color:hsl(var(--deck-canvas-veil))}.bg-\[hsl\(var\(--deck-canvas-veil\)\)\]\/60{background-color:hsl(var(--deck-canvas-veil) / .6)}.bg-\[hsl\(var\(--deck-canvas-veil\)\)\]\/70{background-color:hsl(var(--deck-canvas-veil) / .7)}.bg-\[hsl\(var\(--deck-hairline\)\)\]{background-color:hsl(var(--deck-hairline))}.bg-\[hsl\(var\(--deck-hairline\)\)\]\/70{background-color:hsl(var(--deck-hairline) / .7)}.bg-\[hsl\(var\(--deck-ink\)\)\]{background-color:hsl(var(--deck-ink))}.bg-\[hsl\(var\(--deck-ink-faint\)\)\]\/40{background-color:hsl(var(--deck-ink-faint) / .4)}.bg-\[hsl\(var\(--deck-ink-faint\)\)\]\/60{background-color:hsl(var(--deck-ink-faint) / .6)}.bg-\[hsl\(var\(--deck-surface\)\)\]{background-color:hsl(var(--deck-surface))}.bg-\[hsl\(var\(--deck-surface\)\)\]\/45{background-color:hsl(var(--deck-surface) / .45)}.bg-\[hsl\(var\(--deck-surface\)\)\]\/50{background-color:hsl(var(--deck-surface) / .5)}.bg-\[hsl\(var\(--deck-surface\)\)\]\/55{background-color:hsl(var(--deck-surface) / .55)}.bg-\[hsl\(var\(--deck-surface\)\)\]\/60{background-color:hsl(var(--deck-surface) / .6)}.bg-\[hsl\(var\(--deck-surface\)\)\]\/80{background-color:hsl(var(--deck-surface) / .8)}.bg-\[hsl\(var\(--deck-surface\)\)\]\/95{background-color:hsl(var(--deck-surface) / .95)}.bg-\[hsl\(var\(--deck-surface-2\)\)\]{background-color:hsl(var(--deck-surface-2))}.bg-\[hsl\(var\(--deck-surface-2\)\)\]\/50{background-color:hsl(var(--deck-surface-2) / .5)}.bg-\[hsl\(var\(--deck-surface-2\)\)\]\/60{background-color:hsl(var(--deck-surface-2) / .6)}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/60{background-color:#fffbeb99}.bg-amber-50\/70{background-color:#fffbebb3}.bg-amber-50\/80{background-color:#fffbebcc}.bg-amber-50\/95{background-color:#fffbebf2}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-black\/25{background-color:#00000040}.bg-black\/75{background-color:#000000bf}.bg-black\/80{background-color:#000c}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-50\/70{background-color:#fef2f2b3}.bg-red-50\/80{background-color:#fef2f2cc}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/5{background-color:#ef44440d}.bg-red-500\/80{background-color:#ef4444cc}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-600{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-50{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity: 1;background-color:rgb(237 233 254 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/60{background-color:#fff9}.bg-white\/65{background-color:#ffffffa6}.bg-white\/80{background-color:#fffc}.bg-zinc-100{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.bg-zinc-400{--tw-bg-opacity: 1;background-color:rgb(161 161 170 / var(--tw-bg-opacity, 1))}.bg-zinc-500\/10{background-color:#71717a1a}.bg-zinc-600{--tw-bg-opacity: 1;background-color:rgb(82 82 91 / var(--tw-bg-opacity, 1))}.stroke-\[2\.5\]{stroke-width:2.5}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-\[1px\]{padding:1px}.p-\[2px\]{padding:2px}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-1{padding-left:.25rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[0\.82em\]{font-size:.82em}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[8\.5px\]{font-size:8.5px}.text-\[8px\]{font-size:8px}.text-\[9\.5px\]{font-size:9.5px}.text-\[9px\]{font-size:9px}.text-\[clamp\(28px\,3vw\,34px\)\]{font-size:clamp(28px,3vw,34px)}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-\[1\.12\]{line-height:1.12}.leading-\[1\.45\]{line-height:1.45}.leading-\[1\.55\]{line-height:1.55}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[-0\.01em\]{letter-spacing:-.01em}.tracking-\[-0\.028em\]{letter-spacing:-.028em}.tracking-\[0\.02em\]{letter-spacing:.02em}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.1em\]{letter-spacing:.1em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#111827\]{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-\[\#15803D\]{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-\[\#166534\]{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-\[\#16A34A\]{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-\[\#1D4ED8\],.text-\[\#1d4ed8\]{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-\[\#22C55E\]{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-\[\#2563eb\]{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-\[\#374151\]{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-\[\#3b82f6\]{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-\[\#4B5563\]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-\[\#5B21B6\]{--tw-text-opacity: 1;color:rgb(91 33 182 / var(--tw-text-opacity, 1))}.text-\[\#6B7280\]{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-\[\#6D28D9\]{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-\[\#71717a\]{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.text-\[\#92400E\]{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-\[\#9CA3AF\]{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-\[\#DC2626\]{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-\[\#b45309\]{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-\[\#b91c1c\]{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-\[\#ef4444\]{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-\[\#f59e0b\]{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-\[\#f87171\]{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-\[hsl\(var\(--deck-accent\)\)\]{color:hsl(var(--deck-accent))}.text-\[hsl\(var\(--deck-canvas\)\)\]{color:hsl(var(--deck-canvas))}.text-\[hsl\(var\(--deck-ink\)\)\]{color:hsl(var(--deck-ink))}.text-\[hsl\(var\(--deck-ink\)\)\]\/85{color:hsl(var(--deck-ink) / .85)}.text-\[hsl\(var\(--deck-ink\)\)\]\/90{color:hsl(var(--deck-ink) / .9)}.text-\[hsl\(var\(--deck-ink-faint\)\)\]{color:hsl(var(--deck-ink-faint))}.text-\[hsl\(var\(--deck-ink-faint\)\)\]\/60{color:hsl(var(--deck-ink-faint) / .6)}.text-\[hsl\(var\(--deck-ink-faint\)\)\]\/70{color:hsl(var(--deck-ink-faint) / .7)}.text-\[hsl\(var\(--deck-ink-muted\)\)\]{color:hsl(var(--deck-ink-muted))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-amber-950{--tw-text-opacity: 1;color:rgb(69 26 3 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-rose-700{--tw-text-opacity: 1;color:rgb(190 18 60 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/80{color:#fffc}.text-zinc-400{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.text-zinc-600{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.text-zinc-700{--tw-text-opacity: 1;color:rgb(63 63 70 / var(--tw-text-opacity, 1))}.text-zinc-900{--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-\[\#16A34A\]{accent-color:#16A34A}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_4px_hsl\(var\(--deck-accent\)\/0\.65\)\]{--tw-shadow: 0 0 4px hsl(var(--deck-accent)/.65);--tw-shadow-colored: 0 0 4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_5px_hsl\(var\(--deck-accent-glow\)\/0\.75\)\]{--tw-shadow: 0 0 5px hsl(var(--deck-accent-glow)/.75);--tw-shadow-colored: 0 0 5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_5px_hsl\(var\(--deck-accent-glow\)\/0\.9\)\]{--tw-shadow: 0 0 5px hsl(var(--deck-accent-glow)/.9);--tw-shadow-colored: 0 0 5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_5px_rgba\(245\,158\,11\,0\.75\)\]{--tw-shadow: 0 0 5px rgba(245,158,11,.75);--tw-shadow-colored: 0 0 5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_5px_rgba\(59\,130\,246\,0\.7\)\]{--tw-shadow: 0 0 5px rgba(59,130,246,.7);--tw-shadow-colored: 0 0 5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_hsl\(var\(--deck-accent-glow\)\/0\.5\)\]{--tw-shadow: 0 0 6px hsl(var(--deck-accent-glow)/.5);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_hsl\(var\(--deck-accent-glow\)\/0\.9\)\]{--tw-shadow: 0 0 6px hsl(var(--deck-accent-glow)/.9);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_60px_-24px_hsl\(var\(--deck-accent\)\/0\.4\)\]{--tw-shadow: 0 18px 60px -24px hsl(var(--deck-accent)/.4);--tw-shadow-colored: 0 18px 60px -24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_1px_0_hsl\(var\(--deck-hairline\)\)\]{--tw-shadow: 0 1px 0 hsl(var(--deck-hairline));--tw-shadow-colored: 0 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_28px_80px_-32px_hsl\(var\(--deck-accent\)\/0\.28\)\,0_2px_0_hsl\(var\(--deck-hairline\)\)\]{--tw-shadow: 0 28px 80px -32px hsl(var(--deck-accent)/.28),0 2px 0 hsl(var(--deck-hairline));--tw-shadow-colored: 0 28px 80px -32px var(--tw-shadow-color), 0 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-\[hsl\(var\(--deck-accent\)\/0\.2\)\]{--tw-ring-color: hsl(var(--deck-accent)/.2)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur-xl{--tw-blur: blur(24px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-\[1px\]{--tw-backdrop-blur: blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[opacity\,color\,background-color\]{transition-property:opacity,color,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-none{transition-property:none}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.running{animation-play-state:running}.paused{animation-play-state:paused}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.placeholder\:text-\[\#9CA3AF\]::-moz-placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.placeholder\:text-\[\#9CA3AF\]::placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.placeholder\:text-\[hsl\(var\(--deck-ink-faint\)\)\]::-moz-placeholder{color:hsl(var(--deck-ink-faint))}.placeholder\:text-\[hsl\(var\(--deck-ink-faint\)\)\]::placeholder{color:hsl(var(--deck-ink-faint))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-1:before{content:var(--tw-content);top:.25rem;bottom:.25rem}.before\:left-0:before{content:var(--tw-content);left:0}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:rounded-full:before{content:var(--tw-content);border-radius:9999px}.before\:bg-\[hsl\(var\(--deck-accent\)\)\]:before{content:var(--tw-content);background-color:hsl(var(--deck-accent))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-px:after{content:var(--tw-content);width:1px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:bg-\[hsl\(var\(--deck-accent\)\)\]:after{content:var(--tw-content);background-color:hsl(var(--deck-accent))}.after\:bg-transparent:after{content:var(--tw-content);background-color:transparent}.after\:transition-colors:after{content:var(--tw-content);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.last\:mb-0:last-child{margin-bottom:0}.last\:border-b-0:last-child{border-bottom-width:0px}.focus-within\:border-\[hsl\(var\(--deck-accent\)\/0\.6\)\]:focus-within{border-color:hsl(var(--deck-accent)/.6)}.focus-within\:border-\[hsl\(var\(--deck-border-strong\)\)\]:focus-within{border-color:hsl(var(--deck-border-strong))}.focus-within\:border-amber-500:focus-within{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.focus-within\:ring-1:focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-within\:ring-\[hsl\(var\(--deck-accent\)\)\]:focus-within{--tw-ring-color: hsl(var(--deck-accent))}.focus-within\:ring-\[hsl\(var\(--deck-accent\)\/0\.25\)\]:focus-within{--tw-ring-color: hsl(var(--deck-accent)/.25)}.focus-within\:ring-\[hsl\(var\(--deck-border-strong\)\)\]:focus-within{--tw-ring-color: hsl(var(--deck-border-strong))}.focus-within\:ring-amber-400\/25:focus-within{--tw-ring-color: rgb(251 191 36 / .25)}.hover\:-translate-y-\[1px\]:hover{--tw-translate-y: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-\[hsl\(var\(--deck-accent\)\/0\.55\)\]:hover{border-color:hsl(var(--deck-accent)/.55)}.hover\:border-\[hsl\(var\(--deck-border\)\)\]:hover{border-color:hsl(var(--deck-border))}.hover\:border-\[hsl\(var\(--deck-border-strong\)\)\]:hover{border-color:hsl(var(--deck-border-strong))}.hover\:bg-\[\#0F172A\]:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#15803D\]:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#16A34A\]:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#2563EB\]:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#374151\]:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#4F46E5\]:hover{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#D1D5DB\]:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#DC2626\]:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#E5E7EB\]:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#E5E7EB\]\/60:hover{background-color:#e5e7eb99}.hover\:bg-\[\#F3F4F6\]:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#F9FAFB\]:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-\[hsl\(var\(--deck-accent\)\)\]\/90:hover{background-color:hsl(var(--deck-accent) / .9)}.hover\:bg-\[hsl\(var\(--deck-accent-soft\)\)\]:hover{background-color:hsl(var(--deck-accent-soft))}.hover\:bg-\[hsl\(var\(--deck-canvas\)\)\]:hover{background-color:hsl(var(--deck-canvas))}.hover\:bg-\[hsl\(var\(--deck-hairline\)\)\]\/50:hover{background-color:hsl(var(--deck-hairline) / .5)}.hover\:bg-\[hsl\(var\(--deck-hairline\)\)\]\/60:hover{background-color:hsl(var(--deck-hairline) / .6)}.hover\:bg-\[hsl\(var\(--deck-ink\)\)\]\/85:hover{background-color:hsl(var(--deck-ink) / .85)}.hover\:bg-\[hsl\(var\(--deck-surface\)\)\]:hover{background-color:hsl(var(--deck-surface))}.hover\:bg-\[hsl\(var\(--deck-surface\)\)\]\/40:hover{background-color:hsl(var(--deck-surface) / .4)}.hover\:bg-\[hsl\(var\(--deck-surface\)\)\]\/60:hover{background-color:hsl(var(--deck-surface) / .6)}.hover\:bg-\[hsl\(var\(--deck-surface\)\)\]\/65:hover{background-color:hsl(var(--deck-surface) / .65)}.hover\:bg-\[hsl\(var\(--deck-surface-2\)\)\]:hover{background-color:hsl(var(--deck-surface-2))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-500\/10:hover{background-color:#f59e0b1a}.hover\:bg-amber-700:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.hover\:bg-black:hover{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-100\/60:hover{background-color:#fee2e299}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-500:hover{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-500\/10:hover{background-color:#f43f5e1a}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-zinc-100:hover{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.hover\:text-\[\#111827\]:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\:text-\[\#374151\]:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-\[hsl\(var\(--deck-accent\)\)\]:hover{color:hsl(var(--deck-accent))}.hover\:text-\[hsl\(var\(--deck-ink\)\)\]:hover{color:hsl(var(--deck-ink))}.hover\:text-\[hsl\(var\(--deck-ink-muted\)\)\]:hover{color:hsl(var(--deck-ink-muted))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-rose-500:hover{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-\[0_10px_28px_-14px_hsl\(var\(--deck-accent\)\/0\.35\)\]:hover{--tw-shadow: 0 10px 28px -14px hsl(var(--deck-accent)/.35);--tw-shadow-colored: 0 10px 28px -14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:brightness-95:hover{--tw-brightness: brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:after\:bg-\[hsl\(var\(--deck-accent\)\/0\.6\)\]:hover:after{content:var(--tw-content);background-color:hsl(var(--deck-accent)/.6)}.focus\:border-\[\#22C55E\]:focus{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.focus\:border-\[\#8B5CF6\]:focus{--tw-border-opacity: 1;border-color:rgb(139 92 246 / var(--tw-border-opacity, 1))}.focus\:border-\[\#D1D5DB\]:focus{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.focus\:border-\[\#E5E7EB\]:focus{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.focus\:border-\[hsl\(var\(--deck-accent\)\)\]:focus{border-color:hsl(var(--deck-accent))}.focus\:border-\[hsl\(var\(--deck-accent\)\/0\.65\)\]:focus{border-color:hsl(var(--deck-accent)/.65)}.focus\:border-amber-500:focus{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-\[hsl\(var\(--deck-accent\)\)\]:focus{--tw-ring-color: hsl(var(--deck-accent))}.focus\:ring-\[hsl\(var\(--deck-accent-glow\)\)\]:focus{--tw-ring-color: hsl(var(--deck-accent-glow))}.focus\:ring-amber-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(245 158 11 / var(--tw-ring-opacity, 1))}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:bg-\[hsl\(var\(--deck-surface\)\)\]:focus-visible{background-color:hsl(var(--deck-surface))}.focus-visible\:bg-red-500\/10:focus-visible{background-color:#ef44441a}.focus-visible\:text-\[hsl\(var\(--deck-ink\)\)\]:focus-visible{color:hsl(var(--deck-ink))}.focus-visible\:underline:focus-visible{text-decoration-line:underline}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset: inset}.focus-visible\:ring-\[hsl\(var\(--deck-accent\)\)\]:focus-visible{--tw-ring-color: hsl(var(--deck-accent))}.focus-visible\:ring-\[hsl\(var\(--deck-accent\)\/0\.65\)\]:focus-visible{--tw-ring-color: hsl(var(--deck-accent)/.65)}.focus-visible\:ring-\[hsl\(var\(--deck-accent-glow\)\)\]\/50:focus-visible{--tw-ring-color: hsl(var(--deck-accent-glow) / .5)}.focus-visible\:ring-amber-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(245 158 11 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-red-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-white:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width: 0px}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-\[hsl\(var\(--deck-canvas\)\)\]:focus-visible{--tw-ring-offset-color: hsl(var(--deck-canvas))}.focus-visible\:after\:bg-\[hsl\(var\(--deck-accent\)\)\]:focus-visible:after{content:var(--tw-content);background-color:hsl(var(--deck-accent))}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:bg-\[\#E5E7EB\]:disabled{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.disabled\:text-\[\#9CA3AF\]:disabled{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.disabled\:opacity-35:disabled{opacity:.35}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-55:disabled{opacity:.55}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-65:disabled{opacity:.65}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:border-\[hsl\(var\(--deck-accent\)\)\]{border-color:hsl(var(--deck-accent))}.group:hover .group-hover\:border-\[hsl\(var\(--deck-accent\)\/0\.5\)\]{border-color:hsl(var(--deck-accent)/.5)}.group:hover .group-hover\:bg-\[hsl\(var\(--deck-accent-soft\)\)\]{background-color:hsl(var(--deck-accent-soft))}.group:hover .group-hover\:text-\[hsl\(var\(--deck-accent\)\)\]{color:hsl(var(--deck-accent))}.group\/proj:hover .group-hover\/proj\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.data-\[state\=active\]\:bg-\[hsl\(var\(--deck-canvas-veil\)\)\][data-state=active]{background-color:hsl(var(--deck-canvas-veil))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=active\]\:text-\[hsl\(var\(--deck-ink\)\)\][data-state=active]{color:hsl(var(--deck-ink))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.group[data-state=open] .group-data-\[state\=open\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:divide-\[\#27272a\]:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(39 39 42 / var(--tw-divide-opacity, 1))}.dark\:border-\[\#1f2937\]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.dark\:border-\[\#22C55E\]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.dark\:border-\[\#22C55E\]\/30:is(.dark *){border-color:#22c55e4d}.dark\:border-\[\#27272a\]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(39 39 42 / var(--tw-border-opacity, 1))}.dark\:border-\[\#3f3f46\]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(63 63 70 / var(--tw-border-opacity, 1))}.dark\:border-\[\#4C1D95\]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(76 29 149 / var(--tw-border-opacity, 1))}.dark\:border-\[\#52525b\]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(82 82 91 / var(--tw-border-opacity, 1))}.dark\:border-amber-400\/15:is(.dark *){border-color:#fbbf2426}.dark\:border-amber-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-800\/60:is(.dark *){border-color:#92400e99}.dark\:border-amber-800\/70:is(.dark *){border-color:#92400eb3}.dark\:border-amber-800\/80:is(.dark *){border-color:#92400ecc}.dark\:border-amber-900\/60:is(.dark *){border-color:#78350f99}.dark\:border-amber-900\/70:is(.dark *){border-color:#78350fb3}.dark\:border-blue-900\/60:is(.dark *){border-color:#1e3a8a99}.dark\:border-emerald-800\/70:is(.dark *){border-color:#065f46b3}.dark\:border-green-900\/60:is(.dark *){border-color:#14532d99}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-red-900:is(.dark *){--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity, 1))}.dark\:border-red-900\/50:is(.dark *){border-color:#7f1d1d80}.dark\:border-red-900\/60:is(.dark *){border-color:#7f1d1d99}.dark\:border-red-900\/70:is(.dark *){border-color:#7f1d1db3}.dark\:border-rose-900\/60:is(.dark *){border-color:#88133799}.dark\:border-zinc-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(63 63 70 / var(--tw-border-opacity, 1))}.dark\:border-zinc-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(39 39 42 / var(--tw-border-opacity, 1))}.dark\:bg-\[\#052E16\]\/50:is(.dark *){background-color:#052e1680}.dark\:bg-\[\#09090b\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(9 9 11 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0C0C0C\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(12 12 12 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0a0a0a\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(10 10 10 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#111113\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 17 19 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#111827\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#18181b\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#1E1B4B\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 27 75 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#1e1e1e\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#1e3a8a\]\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-\[\#1f2937\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#22C55E\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#22C55E\]\/10:is(.dark *){background-color:#22c55e1a}.dark\:bg-\[\#22C55E\]\/20:is(.dark *){background-color:#22c55e33}.dark\:bg-\[\#27272a\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#2E1065\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(46 16 101 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#3B82F6\]\/20:is(.dark *){background-color:#3b82f633}.dark\:bg-\[\#3b82f6\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#3f3f46\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#E5E5E5\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(229 229 229 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#EF4444\]\/10:is(.dark *){background-color:#ef44441a}.dark\:bg-\[\#EF4444\]\/20:is(.dark *){background-color:#ef444433}.dark\:bg-\[\#F59E0B\]\/20:is(.dark *){background-color:#f59e0b33}.dark\:bg-\[\#a1a1aa\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(161 161 170 / var(--tw-bg-opacity, 1))}.dark\:bg-\[hsl\(var\(--deck-surface\)\)\]:is(.dark *){background-color:hsl(var(--deck-surface))}.dark\:bg-amber-300:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-400\/\[0\.05\]:is(.dark *){background-color:#fbbf240d}.dark\:bg-amber-950\/20:is(.dark *){background-color:#451a0333}.dark\:bg-amber-950\/25:is(.dark *){background-color:#451a0340}.dark\:bg-amber-950\/30:is(.dark *){background-color:#451a034d}.dark\:bg-amber-950\/35:is(.dark *){background-color:#451a0359}.dark\:bg-amber-950\/40:is(.dark *){background-color:#451a0366}.dark\:bg-amber-950\/50:is(.dark *){background-color:#451a0380}.dark\:bg-amber-950\/60:is(.dark *){background-color:#451a0399}.dark\:bg-amber-950\/70:is(.dark *){background-color:#451a03b3}.dark\:bg-amber-950\/90:is(.dark *){background-color:#451a03e6}.dark\:bg-blue-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-950\/30:is(.dark *){background-color:#1725544d}.dark\:bg-emerald-950\/40:is(.dark *){background-color:#022c2266}.dark\:bg-green-950\/20:is(.dark *){background-color:#052e1633}.dark\:bg-orange-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(251 146 60 / var(--tw-bg-opacity, 1))}.dark\:bg-red-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.dark\:bg-red-950\/30:is(.dark *){background-color:#450a0a4d}.dark\:bg-red-950\/35:is(.dark *){background-color:#450a0a59}.dark\:bg-red-950\/40:is(.dark *){background-color:#450a0a66}.dark\:bg-red-950\/45:is(.dark *){background-color:#450a0a73}.dark\:bg-red-950\/50:is(.dark *){background-color:#450a0a80}.dark\:bg-rose-950\/30:is(.dark *){background-color:#4c05194d}.dark\:bg-sky-950\/40:is(.dark *){background-color:#082f4966}.dark\:bg-violet-950\/50:is(.dark *){background-color:#2e106580}.dark\:bg-zinc-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.dark\:bg-zinc-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity, 1))}.dark\:bg-zinc-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.dark\:bg-zinc-800\/70:is(.dark *){background-color:#27272ab3}.dark\:bg-zinc-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.dark\:bg-zinc-900\/50:is(.dark *){background-color:#18181b80}.dark\:text-\[\#0C0C0C\]:is(.dark *){--tw-text-opacity: 1;color:rgb(12 12 12 / var(--tw-text-opacity, 1))}.dark\:text-\[\#111827\]:is(.dark *){--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.dark\:text-\[\#18181b\]:is(.dark *){--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}.dark\:text-\[\#22C55E\]:is(.dark *){--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.dark\:text-\[\#3b82f6\]:is(.dark *){--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.dark\:text-\[\#60A5FA\]:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-\[\#60a5fa\]:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-\[\#71717a\]:is(.dark *){--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.dark\:text-\[\#86efac\]:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-\[\#93c5fd\]:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-\[\#94a3b8\]:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-\[\#C4B5FD\]:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-\[\#E5E5E5\]:is(.dark *){--tw-text-opacity: 1;color:rgb(229 229 229 / var(--tw-text-opacity, 1))}.dark\:text-\[\#FBBF24\]:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-\[\#a1a1aa\]:is(.dark *){--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.dark\:text-\[\#d4d4d8\]:is(.dark *){--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.dark\:text-\[\#f4f4f5\]:is(.dark *){--tw-text-opacity: 1;color:rgb(244 244 245 / var(--tw-text-opacity, 1))}.dark\:text-\[\#facc15\]:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:text-\[\#fca5a5\]:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-amber-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-orange-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-rose-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-zinc-100:is(.dark *){--tw-text-opacity: 1;color:rgb(244 244 245 / var(--tw-text-opacity, 1))}.dark\:text-zinc-200:is(.dark *){--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.dark\:text-zinc-300:is(.dark *){--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.dark\:text-zinc-400:is(.dark *){--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.dark\:text-zinc-50:is(.dark *){--tw-text-opacity: 1;color:rgb(250 250 250 / var(--tw-text-opacity, 1))}.dark\:text-zinc-500:is(.dark *){--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.dark\:text-zinc-600:is(.dark *){--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.dark\:text-zinc-900:is(.dark *){--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-\[\#71717a\]:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-\[\#71717a\]:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-zinc-600:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-zinc-600:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-\[\#18181b\]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-\[\#1ea34b\]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 163 75 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-\[\#1f1f23\]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 31 35 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-\[\#27272a\]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-\[\#27272a\]\/50:hover:is(.dark *){background-color:#27272a80}.dark\:hover\:bg-\[\#32323a\]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(50 50 58 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-\[\#3f3f46\]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-amber-900:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(120 53 15 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-amber-900\/50:hover:is(.dark *){background-color:#78350f80}.dark\:hover\:bg-red-900\/60:hover:is(.dark *){background-color:#7f1d1d99}.dark\:hover\:bg-red-950:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-950\/30:hover:is(.dark *){background-color:#450a0a4d}.dark\:hover\:bg-red-950\/60:hover:is(.dark *){background-color:#450a0a99}.dark\:hover\:bg-white:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-zinc-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-zinc-800\/50:hover:is(.dark *){background-color:#27272a80}.dark\:hover\:bg-zinc-900:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.dark\:hover\:text-\[\#E5E5E5\]:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 229 229 / var(--tw-text-opacity, 1))}.dark\:hover\:text-\[\#d4d4d8\]:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:hover\:text-zinc-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(228 228 231 / var(--tw-text-opacity, 1))}.dark\:hover\:text-zinc-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(212 212 216 / var(--tw-text-opacity, 1))}.dark\:hover\:shadow-\[0_10px_28px_-14px_hsl\(var\(--deck-accent\)\/0\.55\)\]:hover:is(.dark *){--tw-shadow: 0 10px 28px -14px hsl(var(--deck-accent)/.55);--tw-shadow-colored: 0 10px 28px -14px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:focus\:border-\[\#27272a\]:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(39 39 42 / var(--tw-border-opacity, 1))}.dark\:focus\:border-\[\#3f3f46\]:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(63 63 70 / var(--tw-border-opacity, 1))}.dark\:disabled\:bg-zinc-800:disabled:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.dark\:disabled\:text-zinc-600:disabled:is(.dark *){--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}@media not all and (min-width: 1024px){.max-lg\:fixed{position:fixed}.max-lg\:inset-0{top:0;right:0;bottom:0;left:0}.max-lg\:z-\[60\]{z-index:60}.max-lg\:hidden{display:none}.max-lg\:\!h-dvh{height:100dvh!important}.max-lg\:\!w-full{width:100%!important}.max-lg\:min-w-0{min-width:0px}.max-lg\:\!max-w-full{max-width:100%!important}.max-lg\:border-l-0{border-left-width:0px}}@media not all and (min-width: 640px){.max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-sm\:grid-rows-\[180px_minmax\(0\,1fr\)\]{grid-template-rows:180px minmax(0,1fr)}}@media (min-width: 640px){.sm\:top-\[18\%\]{top:18%}.sm\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}.sm\:h-auto{height:auto}.sm\:w-\[220px\]{width:220px}.sm\:max-w-\[320px\]{max-width:320px}.sm\:max-w-\[400px\]{max-width:400px}.sm\:max-w-\[480px\]{max-width:480px}.sm\:max-w-\[540px\]{max-width:540px}.sm\:max-w-\[820px\]{max-width:820px}.sm\:max-w-\[900px\]{max-width:900px}.sm\:max-w-xl{max-width:36rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:gap-5{gap:1.25rem}.sm\:space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-10{padding:2.5rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:inline-flex{display:inline-flex}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 1024px){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\>div\>div\.flex\]\:flex-wrap>div>div.flex{flex-wrap:wrap}.\[\&\>div\>div\.flex\]\:gap-2>div>div.flex{gap:.5rem}.\[\&\>div\]\:\!block>div{display:block!important}.\[\&_select\]\:max-w-full select{max-width:100%}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:h-3\.5 svg{height:.875rem}.\[\&_svg\]\:w-3\.5 svg{width:.875rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbUAA8AAAAACOgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgFwRca1NUQVQAAAIMAAAARgAAAF7mY9MfY21hcAAAAlQAAABRAAAAdAyHCodnYXNwAAACqAAAAAgAAAAIAAAAEGdseWYAAAKwAAAB6QAAAl7g5OpvaGVhZAAABJwAAAA2AAAANhSQ8UNoaGVhAAAE1AAAAB8AAAAkAcoBImhtdHgAAAT0AAAAHgAAADofBAM2bG9jYQAABRQAAAAgAAAAIATcBZ9tYXhwAAAFNAAAABwAAAAgAIcCb25hbWUAAAVQAAABEgAAAoA4pV3kcG9zdAAABmQAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpinMDAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAEGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWABNDDdYAAAB42kXIIQIBARQFwHl/QQIkWXInUAANXMOBJCcTd+KIGCjMNViq9/H0CM6P/S0j0bOwUqh08iEb8kPTXn3RiMoYhD90Nwc3AAB42lXIRwHCQBAF0JceehWAlTjhjikUgAVQA4mJLbdk5neUqHBVKWSv3XF2VCnt3AyevkVZv+sxBBbbq/6HfFP4hEcYQgEK82v1aHQ5RTs3FRQAAAAAAQAB//8AD3jabZA1tNRAFEDfTGDdfXHI2QQnZJJvK5ngDs13Welwt/78CtcS7xvcrcHKbXCtceh+wgtu437nXRCgC4BY9AGOXOAFYNHR0dzoKCGju8gJ6xiZaF3DWqcPBiSV5i2geaCgAlAJ77ghgjfiLC7KojvOZEmSXS63emXr5W7lsTLtXFMkRmks4ly+cYOEnvO2YLDNANv+9oJwhkpAAJAcHPG/1RC2BERc1ZGGMxYVWDyVSjc0NMaZELUf9e4JhCgNB3b2PiJRctuqZ0WPR8zilxutN/ji97vUBYMAnGjtzxjtK3wrDaMABo+R9KjWwNRUMppwuWS1QdfFZCIlMF2TxDGuJJlYW7OmVlvD+sx86b1hvC/l8yXf2hqZ66xbZ80yWzyD9/fzGaRzA58+nSOzYC+gw9AP+vyNqUAUhoD4lSnputbgUFPJ5O9Y+ReWlxkrc96naX08b3zk/KORb+E+VjYPmH1M6+UHeVlDtCzzGZ9FY8YMA8gPMsQA0jqaGkHT6cYSdVwl7Zs9Wzx+DyWUugPujd03T52ikrUvM26kF9PIcRmycuDBKcd3XRhPDgtnQACINzJ3fVl1tTB++3bc2S7kyD3cCQIQNMcSKaY2YOciE+d0zFbGjps6u0PILTFlRZHNJfAFnfeHtgAAAAABAAAAAjYEro52gl8PPPUAAwPoAAAAANvSppoAAAAA29rQ8vk5/tQEkgP8AAAABgACAAAAAAAAeNpjYGRgYP7z7woDA8uGn5Z/+1kmAUVQAR8Ar8AG6gB42mOKYIgCYiMkrAzCUHEbJJoBikHgCkMPAPDwCFUAAAAAABoAOwBGAFEAbwB3AKkAsQDmAQkBCQEJAQkBFgEveNpjYGRgYOBn3MGQx7CFgQ3MQwBmBiYALRoB+HjajJADbgVQEEXPZ20bQW3bthvXbr8Vp4to1KV0AV1Wb9JvZzJvzhvcB6CQL0wYzHnAj6E/yAYaDeVBNlJsMAfZxCy/QTbTy3eQLdTzGWQr3VwGuZhx2v/ZAIVUB9kc0TSUKJ8f5FIRHGPjnWs+2MKt+MYzt1xwr/jIk3JymR0X0wzIXKo7VbXjFvfLn3lTtCn7qPoB6+yyzb3qy8pdq/6hrj11fMj7OFbtEY+mrlU/516rVFCdVobplw/JEjVaCaqIYlUiUzOaW9aa/Q1idmlPXZHbCagW/B10XwaRi06VuVdMf+9DnIov6rlF8yzhUXxC/4c66Uz48UepqEN9N/Tzt2RwjOljsUUfj581AbaEXsIAAHjaY2BiAIP/qQxGQIqRAR3wA7EKw0lGJgYbRmZGFkZWRjZGdgZmRg5GTkYuRm42x6Si1LJU9tK8TAMTR1cI7WoB5btB+Zas6Ym5uYlgnoGjAZNzEF9icmlJanJ+bpJecmJxKg9IxtjADMwBAKDtHJg=) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA9UABAAAAAALMAAAA7zAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnAbhWocghYGYD9TVEFUXgCDBBEICrBAp3ILgjgAATYCJAOEKAQgBYUAB4xODAcbIiYzo8LGAQCKfn4o/usELQ4rdj22ABHwitFYjZPqB3XSqAbV3C5dFkHYtTehxpeGbU+3+QexdERCkxARw9oNxAyetvXzdhdjl/7aiBiHgcqBjZywaGPSh4mNFccpF3DHlfyO8Jc/OiSe/kb7/iQYRAE23iScpHngiRRBFETNiZzQwc2HOllJ0fqXIjTY8RTYbDsklKc81hGPQcOJojhD/w80ll1aG/qiQErbzqOXjmvOVKd14tuv+Hxrlbarq/5xH7CiMPjaZXlrfNSp7uqaroZXvYAzc8A0kH2zs3MvHQBUORcJ2GG2cdFRgArh+Sgb7yOsjImpmgM0kq1FwhQCQzQ1Mt+j7at5GSAAIQAAKFLk6uMul4pIl4HIpEEUK0dUMiCMmhFWNoSDC+Exghgzi5i3hNhtN9qaINo+EbQj1tEIgJVLj5oebQ6I1/fyLMQYALYgALKS0yEOQCJG89uIiEPKyeRDVCmC0HgZ203jIg7kk6cHxfEKeBSDXtxd6n5yJzqpfSgXs9xMri1fPezlKMAVcCGEIhmwHiDRtJOyKfXkGsAVqI7ohIZs0rsDM/IU4fuQgkppCk2n+VRHy6mFttJ26t16mBjQPyIeYhvZnyXaiDSeaAYYXLiKPIm4uKh1zIq6gSRVU7WNPIV5v1PwBOy07RrrT6skwoEAtYyZeYgpBUABaDEmtPWRGP/UGABFgUUjchFXAghAgAYQpyPkCIBBoRwQgU/g3kQcyqTY9KSDItmjjmmkP+qJHG3C66hjXhtlhzwglI+1+4Be+T77hYQxxeNkCIDaKU+ANXhkMqePOVAQr7uwCjoBlCdtHQE8TNRd17//A/evkhSpkOMDA9VTmwAVAbLNlwMkoAG5qG2bWCYA/h3uEYgEhFqSmJJPpCIFbJHg1Aw5GaAujjqMzIHc8NrIHBEJJjGZP3cuFQZD9PvzLvZIaCIjBcTvEnIzTWiGjqdzlD+VAO2TUERK8smEi8lNNOguiAM9P6Gfo6bX8bD0v7V/cPwA/fDBi0BaGgUllWy5AATy6X9gAZqRVIsMLuVmqQ3QmrBbiFgTiWbxLDj1hBqINGLVYewQwySWWRyeQK1kXVJ0S2UjZ5WgXaIOSTodp42CUzqHXH226ZfJI4tXth45eqnslGdQgSGFhmmMyOdTbEyJcdv56U0pNa3MDJ1JVRZUmldtkcESglQkAOA8AMgAoBeYLQi+wDxAtwAAGlXJUdVLPLmo/TLRystE3SsqO29LUY0hsrtvBoXUw1Fy+XjIhqbj4rEZISsUysW1L68PlGRwyWImjWXjS9LFyUzjC7v7Z5hYsYKRhIH49EyxTJxutwOy2PRxp1R63SVViB+eNFYRywlEzJBIMDIl5Aa4PtbFOno416WTTkfVQwSPgIve66BCbLAuLmpCh59ln5uFECODSuUIJ2CJCCzDwbf+DV2/3yTtan5J1gEVuilcVASHULO9Bt+nWkIEHMMit5gOxaO4JpWjvdzOcySeFek9q4dy3jxi2BxHwsuuo2CzbQ+KJWxyqPUJljVCU3WT8JwlhZyLkKODRhZkQByHu8ERJIcGBexSmdwGPfMPbjnC0SwRUTyCAIwY4Mdr9zxJTKE5yp0mcEe9s3Umm/TZp2s4X/27cQUmhrd4Ow4ibPOTOxxT6w+S8ENc9AGE7meFOlNbuzjngJtzjFKcrMsxtf4G4UIPcNGXbvwNaeDea6+1L7kaYG+M13a455pruOh5Ww0HlhllPy/PsqS9Zr7ZV9cSLODAoItzBt2cI5i1brCxQRIcH6yr9wV5+XjhtlxuziH7LiqGTXVnkfCZntd1doJ5liyIno6X3GqH56fcnGNwE2IXvYhw5a/MJGsMns/TOawd+2HX5kOXxQZFsYkwmMetzGtqKDKSe+h9h7jX77z2Snb98vyL7rjmil1N3B/cCBfsC5rymA/ExpPlni/DL9i7eflmn66oxrSlMRRB/8Dbq/e/3aN95L3BG+dFd1d+uCVzKhQy5/+I77CmWJ/o2Hygaay8yleXU1c1NH2IpqHOYUtriyWHf3iZwxjZvNxm/Ti/O5+22uC3nVFxhu1wvQc08ZZ+nb5/9oBF38ehJXaKPt7K6/v34Ltqai21rbXDXI3BRDa+9XDSGp8gzZZarV2ag9v3RBzSNfFjU/M+uVduNDTsMNY0GCOHDU3O4dazeb3zFXjg0rlPuiV75+m+kzV3v5qc/PHdJ2j6pI+wDP+U7mFPW/uw23ltZemTVTo+3+KNa1yyuwdmfI41j1/yvbG3oaLR3G3Sd1xdrNOUfAou3jYw0z860D9jr+9sqU1IIHve9W56/fIEU2fztvaqHQ213trhKauqjXVmr/kFxP1m7bdCE88Plpb1m840l/VNQz72QvvMPlc5z9fvKPt1xBtXv9yVZ9nGmxscXiDfwGcI4LQ9duBaG7Nxjw2aWMuArp7In2qxObTwKfr40/iy/j34zhqeN59qHuZqDBaysQWiL/PZsk4cyV13mvbwWw7phfEDC/O+fm9/ram+sspcXxs5hm9pHjufSujGRbKXaTPmBAPPfMm45bau15+jR/bbBx80mR7sCth94rfB6Q6sngJcuO1v4a7Lu157ad9GKIlypuEea9GDnXs0IytDmZ2Rka2cVv4jrIHmaFZ3O9OWlWX7gLuRH1mMjsxE8VrEH/XNRrErsh61R6PD3e2d7dDsb3Z38k15W/kFkrwmHk+PhWNKx3nLMhHkSl5ZLMvHWPGPfwRB9AKr2QoSUb4qSlB18X715zkqwRI0G3lvUOptugtcID+tsKQForrC+pqxS4X1dcof21bf4OQcbZ2Le6y53kKao3rxNWE9f1a+S3t2tiIu5yej2d/W12RozBwrLh7LbDT0NkUDi+HBQPj0xIlAoKHFFxAMPB8Vce+KKo28Rq0SHV3LUk6MNLv35DMrCzVNmbxBeCGCKzMtu20y8f+SVD4h31Sosky03Upl9YJxzh+L0ZFANLR4LOpYj452tne145E/wok2e6JX/xBX/vH8WaFQojdWlrhzuOXjs1Zn3cCkT4qWSmZeqX/B4tciE4HBmUBZwGxtMDaqnCpdllPVaIzdNw9ZqfDU30ppYDgw2B+A5JP5L8bj4tgWoy/t6WRRcO2P8uFDakiP2fMWaviyaOYFr94gE0nEsXysWligOuHRC2TiH0XSJ/4WqQcjE4GxmUAocKlG+jECgZHFwGX8vabVzf8f4KQSi8Gp6laIdgV0q8OzbmjyaWdnW1MQXZoJDb7ZaEdzVzMoNQiAGESUwszDAIzTDIqSxGFoxoRZ/vTKM8CfyZ9V/ZAPfzZ/Ds4tMHm0dSxCkOPaNpKlK8/KwGQVCdzqbPDn1HKuiT8WHUnStEQYZB2TC6WJ6spymNIjBV7JK5lSs1C5qDoRSYBUSlgH31LlM7X5O4o8eBxrX3MDwtOG1iZdZ/NjXsu0gBJohRVmlQNfwVfQmsReAdZEAahljqkMaxLHg/gT+BONkwxcgT0CH/5k/pQrcCpMUYiGtPqbDGvVgALfitYyTHyI7iP25WqsSqAlstCbcmZ3k0PcRZlgbs0KCrwb7lImBTqQCCawVEpMWHur0DRm3+9sVAOK6UQiqESr8NaEtY8Vu86AIjK3KRZhXNwqD34Oc38umLZM7/33+38/uOj7///Z9yMAAHqAUtN3Bsa/l9rSiKVxlONqqbKozYWfYMRMRkicEE2FhIs4TuWQJL0RDNwCPy0hP1CbGAVY9Mb6W+DZ2p14CIQoIBjqGKpe6lOONhDJTUFBXMgZYOPct8C7Ffmf2jR2ksQ72U7f6SBu5gywoW8x2Qhy1APl1CZGAQ4ksGGD8loGsjY0UQKXmhdvpBboCNglmiU2XUCieL2dF1bDaTacoykaTjgFAhquyoFkiSk0LZyooeM7gQDVIlmNOwCPlICNKQpatkhBhUQJpdLCVwFqWj3FQ8sWeajTWbJiLeRJQlRmsyh1YLRZtAzVNr0dAoCqYN6wXLhzQGL8LY6mvwSAd1698ly88s2Xfwa7FbVA/wsgBhQAgABfG3dQHs2o/066DhB0wWo68NIlpR8Rtqkj9flbwtMc3oZyWoIn3n+L86o5vA1V8ng6L4C9+Ax3YgMBHN8Er4rV97ZRXgdo2vF244hH35wAzlOM0Y1BABGNnNCZ4UFNPID7U9KeSCgiP5EiDnMizejpExlFzj9RIM2BE2MU8pwgViH7TAQQSqpgnDuJJAk2kHIaYDNnhs+sFsvBuaf5DXMbXT9uwvLIbk49b4mBNm3JsEV+85YtKUHWb5rT5ywap9WpUZtWo6q5Fot8W89a0m4OaXOK2Ywat2KaD3NdRi1S/+eloldCT0fn1K5q61Mpa6eaNrKMB6WMQqn83IfXmTNv1eIRiaKj7aOsikMmoxej+EfqsmjOpFHDLnneylGLQxT66vnHnh/n12VXDN1Hw6/bcNpctWo3vrwApZvfrdEDiP8IzgPkeiYUoQlzDvYWB0cnZ6uLq5t7+aRk5I6TIFGS5IqkSJWWXjqFDEqZVLJky5FrG7W8quQrUEijSLESWtsz0tErVVa9chUqValmUMNoh1omZjxSM4s69Ro0atKspTe1smrLpl2HTl262dg5OLm4eezMw6tHrz79BgzyGarXsBGjxqJtJvhNmjJtxqw58xYsWrJsxS4Bu61aE7THXvvsFxJ2wEERhxx2xFHHrIs6fuE/r+1vm6/8jhhtDCwnASDGR1h4SGhYwEGU1Y/Xffk5G4u9XgIAYtxyGpZ5y9sDdNbyP142W5DgAhoE7i3q0c5x2vm9v24aZuNohdcxqSEAz8up00My03HSwmqPa8bMecG3Tjzb+f9EelEtg2vpzPeiIEEBwSA8IEDBwAE9F5Z6vQIQjAnLGTgWLO+uZTL/qwGEAYOAQpg3TefgwBCQgBDzqukKDBAOoU3KVtqIbBXK9XpEAAujuudkZN724kIGmrtVaS38ZZLrS9/4fsKMQhN3yXK5gvSBvJ2Y9/Nydbcvb0bm58+e3FhmGfGLJ9u7axl1F1LQTbaCeyrbu7wFCsorFgV4qnh+GUrWtaczqkSBB96AEeKRB94k2SyLuyw3qwrxeg3P5FNR1Av1Gsq2/ds6dPPkBAAA) format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@@ -5,11 +5,11 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>BladeCode</title>
8
- <script type="module" crossorigin src="/assets/index-ClOgGy-I.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BF5HEN_f.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-DG5dkZ_t.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/vendor-radix-DBy9B2DN.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/vendor-icons-D_AkWmWB.js">
12
- <link rel="stylesheet" crossorigin href="/assets/index-B7etZcne.css">
12
+ <link rel="stylesheet" crossorigin href="/assets/index-BrkTYxtS.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blade-code",
3
- "version": "0.10.6",
3
+ "version": "0.10.7",
4
4
  "private": false,
5
5
  "description": "🗡️ Blade Code - 智能代码助手命令行工具",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- import{Hc as a,Ic as b,Jc as c}from"./chunk-hjsm6ejs.js";import"./chunk-b4n34hrn.js";import"./chunk-n9khyme2.js";import"./chunk-7xm3vjkz.js";import"./chunk-frcg8gea.js";import"./chunk-c2rhwxyn.js";export{b as resolveModelConfig,c as getModelDisplayName,a as getModelApiKeyEnvironmentVariable};
@@ -1 +0,0 @@
1
- import{Ob as a,Pb as b}from"./chunk-n5m2p0bq.js";import"./chunk-nfmsn652.js";import"./chunk-c2rhwxyn.js";export{a as globalOptions,b as cliConfig};
@@ -1,2 +0,0 @@
1
- var _=20,T=5242880,A=32000;
2
- export{_ as qe,T as re,A as se};
@@ -1 +0,0 @@
1
- import{Mc as a,Nc as b,Oc as c}from"./chunk-v1p80wvh.js";import"./chunk-0rp2ck29.js";import"./chunk-xkp4ph6v.js";import"./chunk-1kg9r8xp.js";import"./chunk-c9tzf9r5.js";import"./chunk-n9khyme2.js";import"./chunk-7xm3vjkz.js";import"./chunk-nfmsn652.js";import"./chunk-kcs3xa8f.js";import"./chunk-vvbd9fb5.js";import"./chunk-frcg8gea.js";import"./chunk-c2rhwxyn.js";export{c as snapshotWorkspaceModelResources,b as resolveWorkspaceModelResources,a as cloneWorkspaceModelConfig};
@@ -1,99 +0,0 @@
1
- import{Ab as m,Bb as p0,Cb as Pq,Db as n0,Eb as i0,Fb as d0,Hb as C0,Kb as r0,Lb as hq,wb as P,xb as Iq,yb as c0,zb as uq}from"./chunk-k0p9ecgc.js";import{Kc as B0}from"./chunk-b4n34hrn.js";import{fd as H0}from"./chunk-4y28hykg.js";import{od as _q}from"./chunk-p4j4aawd.js";import{sd as Y0}from"./chunk-6cv4gddv.js";import{qe as mq,re as vq}from"./chunk-1kg9r8xp.js";import{we as Bq}from"./chunk-c9tzf9r5.js";import{Ce as Z0,Fe as Q0}from"./chunk-7xm3vjkz.js";import{Je as c}from"./chunk-nfmsn652.js";import{Qe as Sq,Re as V0,Te as D,Ue as j,We as l0,Xe as l,Ye as G0}from"./chunk-frcg8gea.js";import{readdir as Aq,readFile as s,rm as _0,stat as w$}from"node:fs/promises";import*as X from"node:path";import{nanoid as y}from"nanoid";import{createHash as rq,randomUUID as oq}from"node:crypto";import*as S from"node:fs/promises";import*as X0 from"node:path";var Hq=1;function aq(q,$){let T=rq("sha256").update($).digest("hex");return X0.join(V0(q),".locks",`${T}.lock`)}function O0(q,$){return q instanceof Error&&"code"in q&&q.code===$}async function E0(q){try{let $=JSON.parse(await S.readFile(q,"utf8"));if($.version!==Hq||typeof $.sessionId!=="string"||typeof $.ownerId!=="string"||!Number.isInteger($.pid)||($.pid??0)<=0||typeof $.acquiredAt!=="string")return;return $}catch{return}}async function Zq(q){let $=await E0(q);if($)return $;return await new Promise((T)=>setTimeout(T,10)),E0(q)}function tq(q){try{return process.kill(q,0),!0}catch($){return O0($,"EPERM")}}async function Qq(q,$){let T;try{return T=await S.open(q,"wx",384),await T.writeFile(`${JSON.stringify($)}
2
- `,"utf8"),!0}catch(G){if(O0(G,"EEXIST"))return!1;if(T)await S.unlink(q).catch(()=>{return});throw G}finally{await T?.close().catch(()=>{return})}}class p extends Error{code="BLADE_SESSION_IN_USE";constructor(q){super(q?`Session is already active in another Blade process (PID ${q}). Stop that process or choose a different session.`:"Session is already active in another Blade process. Stop that process or choose a different session.");this.name="SessionInUseError"}}class n{filePath;record;released=!1;constructor(q,$){this.filePath=q;this.record=$}static async acquire(q,$=Bq()){let T=aq($,q),G={version:Hq,sessionId:q,ownerId:oq(),pid:process.pid,acquiredAt:new Date().toISOString()};if(await S.mkdir(X0.dirname(T),{recursive:!0,mode:448}),await Qq(T,G))return new n(T,G);let Z=await Zq(T);if(Z&&tq(Z.pid))throw new p(Z.pid);if(await S.unlink(T).catch((J)=>{if(!O0(J,"ENOENT"))throw J}),await Qq(T,G))return new n(T,G);throw new p((await Zq(T))?.pid)}async release(){if(this.released)return;if(this.released=!0,(await E0(this.filePath))?.ownerId!==this.record.ownerId)return;await S.unlink(this.filePath).catch(($)=>{if(!O0($,"ENOENT"))throw $})}}function sq(q,$){for(let T of q){if(T.type!=="part_created"||T.data.partType!=="tool_result")continue;let G=T.data.payload;if(!G||typeof G!=="object"||Array.isArray(G))continue;let Z=G;if(Z.toolCallId===$||T.data.partId===$||T.data.messageId===$)return Z}return}function Lq(q){let $=P(q),T=new Map;for(let G of $){if(G.type==="interaction_requested"){T.set(G.data.requestId,{request:G.data,hasToolResult:!1,hasRecoveryToolResult:!1});continue}if(G.type==="interaction_responded"){let Z=T.get(G.data.requestId);if(Z)Z.response=G.data;continue}if(G.type==="interaction_recovered"){let Z=T.get(G.data.requestId);if(Z)Z.recovery=G.data}}for(let G of T.values()){let Z=sq($,G.request.toolCallId);G.hasToolResult=Z!==void 0;let J=Z?.metadata&&typeof Z.metadata==="object"?Z.metadata:void 0;G.hasRecoveryToolResult=J?.interactionRecovery===!0&&J.requestId===G.request.requestId}return[...T.values()]}function Oq(q){return Lq(q).reverse().find(($)=>!$.response&&!$.recovery)}function $T(q){let $=new Map;for(let T of Lq(q))$.set(T.request.toolCallId,T);return[...$.values()].filter((T)=>T.response&&!T.recovery&&(!T.hasToolResult||T.hasRecoveryToolResult))}function Vq(q){if(!q)return;return{type:q.request.interactionType,requestId:q.request.requestId}}var w0={authentication:{message:"Provider authentication failed. Check model credentials.",retryable:!1},permission:{message:"Provider rejected this request. Check account and model permissions.",retryable:!1},rate_limit:{message:"Provider rate limit or quota exceeded.",retryable:!0},timeout:{message:"Provider request timed out.",retryable:!0},network:{message:"Provider connection failed.",retryable:!0},model_unavailable:{message:"The selected model is unavailable.",retryable:!0},context_limit:{message:"The request exceeded the model context limit.",retryable:!1},unsupported_input:{message:"The selected model does not support this input.",retryable:!1},runtime:{message:"Agent execution failed.",retryable:!0}};function eq(q){try{if(q instanceof Error)return q.message;if(q!==null&&typeof q==="object"&&"message"in q&&typeof q.message==="string")return q.message;return String(q)}catch{return"Unknown error"}}function q$(q){let $=q.toLowerCase();if(/\b(401|unauthorized|authentication|invalid (?:api[ _-]?)?key|api[ _-]?key|credential)\b/.test($))return"authentication";if(/\b(403|forbidden|permission denied|not permitted)\b/.test($))return"permission";if(/\b(429|rate limit|too many requests|quota)\b/.test($))return"rate_limit";if(/\b(timeout|timed out|deadline exceeded|etimedout)\b/.test($))return"timeout";if(/\b(econnreset|econnrefused|enotfound|network|socket|connection)\b/.test($))return"network";if(/\b(model not found|model unavailable|unsupported model|no such model)\b/.test($))return"model_unavailable";if(/\b(context (?:length|window)|maximum context|too many tokens|token limit)\b/.test($))return"context_limit";if(/\b(image|vision|multimodal|unsupported input|does not support)\b/.test($))return"unsupported_input";return"runtime"}function $$(q){return{code:q,...w0[q]}}function Xq(q){return $$(q$(eq(q)))}function b0(q){if(!q||typeof q!=="object")return!1;let $=q;if(typeof $.code!=="string"||!($.code in w0))return!1;let T=w0[$.code];return $.message===T.message&&$.retryable===T.retryable}import{promises as q0,realpathSync as G$}from"node:fs";import K0 from"node:path";import*as d from"fs/promises";import*as W from"path";var Kq=[".git",".claude","node_modules",".env",".env.local",".env.production",".env.development",".env.test"];class i extends Error{code;constructor(q,$){super(q);this.code=$;this.name="PathSecurityError"}}class k0{static normalize(q,$){let T=W.isAbsolute(q)?q:W.resolve($,q),G=W.normalize(T),Z=W.normalize($);if(!this.isWithinWorkspace(G,Z))throw new i(`Path outside workspace: ${q} (resolved to ${G}, workspace: ${Z})`,"PATH_OUTSIDE_WORKSPACE");return G}static checkRestricted(q){let $=q.split(W.sep);for(let T of Kq)if($.includes(T))throw new i(`Access denied: "${T}" is a protected directory`,"RESTRICTED_PATH")}static checkTraversal(q){if(q.includes(".."))throw new i(`Path traversal not allowed: ${q}`,"PATH_TRAVERSAL")}static async validatePath(q,$){this.checkTraversal(q);let T=this.normalize(q,$);this.checkRestricted(T);try{await d.access(T)}catch(G){throw new i(`Path not found: ${q}`,"PATH_NOT_FOUND")}return T}static async resolveSymlink(q,$){try{let T=await d.realpath(q),G=await d.realpath($);if(!this.isWithinWorkspace(T,G))throw new i(`Symlink points outside workspace: ${q} -> ${T}`,"SYMLINK_OUTSIDE_WORKSPACE");return T}catch(T){if(T instanceof i)throw T;return q}}static getRelativePath(q,$){return W.relative($,q)}static isWithinWorkspace(q,$){let T=W.resolve(q),G=W.resolve($),Z=W.relative(G,T);return Z===""||Z!==".."&&!Z.startsWith(`..${W.sep}`)&&!W.isAbsolute(Z)}static async isWithinWorkspaceResolved(q,$){let T=W.resolve($),G=W.isAbsolute(q)?W.resolve(q):W.resolve(T,q);if(!this.isWithinWorkspace(G,T))return!1;let Z;try{Z=await d.realpath(T)}catch{return!1}let J=G;while(!0){try{let Q=await d.realpath(J);return this.isWithinWorkspace(Q,Z)}catch(Q){let H=Q.code;if(H!=="ENOENT"&&H!=="ENOTDIR")return!1}let B=W.dirname(J);if(B===J)return!1;J=B}}static isRestricted(q){let $=q.split(W.sep);return Kq.some((T)=>$.includes(T))}}var $0=Y0("Tool");class h{static instance=null;accessedFiles=new Map;pathAliases=new Map;constructor(){}static getInstance(){if(!h.instance)h.instance=new h;return h.instance}async recordFileRead(q,$){try{let T=await q0.stat(q),G={filePath:K0.resolve(q),accessTime:Date.now(),mtime:T.mtimeMs,sessionId:$,lastOperation:"read"};this.setRecord(G),await this.recordAliases(q,G.filePath),$0.debug(`记录文件读取: ${q}`)}catch(T){$0.warn(`记录文件读取失败: ${q}`,T)}}async recordFileEdit(q,$,T="edit"){try{let G=await q0.stat(q),Z={filePath:K0.resolve(q),accessTime:Date.now(),mtime:G.mtimeMs,sessionId:$,lastOperation:T};this.setRecord(Z),await this.recordAliases(q,Z.filePath),$0.debug(`记录文件${T==="edit"?"编辑":"写入"}: ${q}`)}catch(G){$0.warn(`记录文件${T==="edit"?"编辑":"写入"}失败: ${q}`,G)}}hasFileBeenRead(q,$){let T=this.accessedFiles.get(this.resolveTrackedPath(q));if(!T)return!1;return $?T.has($):T.size>0}async checkFileModification(q,$){let T=this.getFileRecord(q,$);if(!T)return{modified:!1,message:"文件未被跟踪"};try{let G=await q0.stat(q);if(Math.abs(G.mtimeMs-T.mtime)>1)return{modified:!0,message:`文件在访问后被修改(访问时间: ${new Date(T.accessTime).toISOString()}, 当前修改时间: ${G.mtime.toISOString()})`};return{modified:!1}}catch(G){let Z=G;if(Z.code==="ENOENT")return{modified:!0,message:"文件已被删除"};return{modified:!1,message:`无法检查文件状态: ${Z.message}`}}}async checkExternalModification(q,$){let T=this.getFileRecord(q,$);if(!T)return{isExternal:!1,message:"文件未被跟踪"};try{let G=await q0.stat(q);if(G.mtimeMs-T.mtime>2000)return{isExternal:!0,message:`文件在 ${new Date(T.accessTime).toISOString()} (${T.lastOperation}) 之后被外部程序修改(当前修改时间: ${G.mtime.toISOString()})`};return{isExternal:!1}}catch(G){let Z=G;if(Z.code==="ENOENT")return{isExternal:!0,message:"文件已被删除"};return $0.warn(`检查文件外部修改失败: ${q}`,G),{isExternal:!1,message:`无法检查文件状态: ${Z.message}`}}}getFileRecord(q,$){let T=this.accessedFiles.get(this.resolveTrackedPath(q));if(!T)return;if($)return T.get($);return[...T.values()].sort((G,Z)=>Z.accessTime-G.accessTime)[0]}getTrackedRecords(){return[...this.accessedFiles.values()].flatMap((q)=>[...q.values()])}clearFileRecord(q,$){let T=this.resolveTrackedPath(q);if(!$){this.accessedFiles.delete(T),this.removeAliases(T);return}let G=this.accessedFiles.get(T);if(G?.delete($),G?.size===0)this.accessedFiles.delete(T),this.removeAliases(T)}clearAll(){this.accessedFiles.clear(),this.pathAliases.clear()}clearSession(q,$){for(let[T,G]of this.accessedFiles.entries()){if($&&!k0.isWithinWorkspace(T,$))continue;if(G.delete(q),G.size===0)this.accessedFiles.delete(T),this.removeAliases(T)}}getTrackedFiles(){return Array.from(this.accessedFiles.keys())}getTrackedFileCount(){return this.accessedFiles.size}static resetInstance(){h.instance=null}setRecord(q){let $=this.accessedFiles.get(q.filePath);if(!$)$=new Map,this.accessedFiles.set(q.filePath,$);$.set(q.sessionId,q)}async recordAliases(q,$){this.pathAliases.set(K0.resolve(q),$);let T=await q0.realpath(q).catch(()=>{return});if(T)this.pathAliases.set(T,$)}resolveTrackedPath(q){let $=K0.resolve(q);if(this.accessedFiles.has($))return $;let T=this.pathAliases.get($);if(T)return T;try{let G=G$.native($);return this.pathAliases.get(G)??G}catch{return $}}removeAliases(q){for(let[$,T]of this.pathAliases)if(T===q)this.pathAliases.delete($)}}import*as T0 from"node:crypto";import{promises as K}from"node:fs";import*as x from"node:path";import f0 from"write-file-atomic";var Yq="missing";class U0{sessionId;workspaceRoot;enableCheckpoints;maxSnapshots;snapshotDir;manifestPath;trackedFileBackups=new Map;snapshots=[];constructor(q){if(D(q.sessionId),this.sessionId=q.sessionId,q.workspaceRoot&&!x.isAbsolute(q.workspaceRoot))throw Error("Snapshot workspace root must be absolute");this.workspaceRoot=q.workspaceRoot?x.resolve(q.workspaceRoot):void 0,this.enableCheckpoints=q.enableCheckpoints??!0,this.maxSnapshots=q.maxSnapshots??10;let $=G0();this.snapshotDir=x.join($,"file-history",this.sessionId),this.manifestPath=x.join(this.snapshotDir,"manifest.json")}async initialize(){if(!this.enableCheckpoints)return;if(this.workspaceRoot)await this.selectWorkspaceSnapshotDir();await K.mkdir(this.snapshotDir,{recursive:!0,mode:493}),await this.loadManifest()}async selectWorkspaceSnapshotDir(){let q=G0(),$=await K.realpath(this.workspaceRoot).catch(()=>this.workspaceRoot),T=T0.createHash("sha256").update($).digest("hex").slice(0,24),G=x.join(q,"file-history",this.sessionId),Z=x.join(q,"file-history","workspaces",T,this.sessionId),J=x.join(Z,"manifest.json");try{await K.access(J)}catch{await this.migrateLegacySnapshotDir(G,Z,$)}this.snapshotDir=Z,this.manifestPath=J}async migrateLegacySnapshotDir(q,$,T){let G;try{G=JSON.parse(await K.readFile(x.join(q,"manifest.json"),"utf8"))}catch{return}if(G.schemaVersion!==1||!Array.isArray(G.snapshots)||!G.snapshots.every((Z)=>this.isWithinWorkspace(Z.filePath,T)))return;await K.mkdir(x.dirname($),{recursive:!0,mode:493});try{await K.rename(q,$)}catch(Z){let J=Z.code;if(J!=="ENOENT"&&J!=="EEXIST"&&J!=="ENOTEMPTY")throw Z}}isWithinWorkspace(q,$){if(!x.isAbsolute(q))return!1;let T=x.relative($,x.resolve(q));return T===""||T!==".."&&!T.startsWith(`..${x.sep}`)&&!x.isAbsolute(T)}async createSnapshot(q,$){if(!this.enableCheckpoints)return{backupFileName:"",version:0,backupTime:new Date};let T=await this.resolveFileIdentity(q),G=!0;try{await K.access(T)}catch{G=!1}let Z=this.trackedFileBackups.get(T),J=Z?Z.version+1:1,B=this.generateFileHash(T,J),Q=this.getSnapshotPath(B,J),H=new Date;if(G){let L=await K.readFile(T);await K.writeFile(Q,L)}let O={backupFileName:B,version:J,backupTime:H};return this.trackedFileBackups.set(T,O),this.snapshots.push({messageId:$,backupFileName:B,timestamp:H,filePath:T,version:J,existedBefore:G}),await this.cleanupOldSnapshots(T),await this.persistManifest(),O}async recordPostEditState(q,$){if(!this.enableCheckpoints||!$.backupFileName)return;let T=await this.resolveFileIdentity(q),G=this.snapshots.find((Z)=>Z.filePath===T&&Z.backupFileName===$.backupFileName&&Z.version===$.version);if(!G)throw Error(`未找到待完成的快照: ${T}`);G.postEditHash=await this.hashFile(T),await this.persistManifest()}async discardSnapshot(q,$){if(!this.enableCheckpoints||!$.backupFileName)return;let T=await this.resolveFileIdentity(q),G=this.snapshots.find((Z)=>Z.filePath===T&&Z.backupFileName===$.backupFileName&&Z.version===$.version);if(!G)return;this.removeSnapshot(G),await K.rm(this.getSnapshotPath(G.backupFileName,G.version),{force:!0}),await this.persistManifest()}async rewindLatest(q){let $=await this.resolveFileIdentity(q),T=this.snapshots.slice().reverse().find((J)=>J.filePath===$&&J.postEditHash!==void 0);if(!T?.postEditHash)throw Error(`未找到可回退快照: ${$}`);if(await this.hashFile($)!==T.postEditHash)throw Error(`文件在 Blade 编辑后已被修改,拒绝覆盖: ${$}`);let Z=this.getSnapshotPath(T.backupFileName,T.version);if(T.existedBefore){let J=await K.readFile(Z);await K.mkdir(x.dirname($),{recursive:!0}),await K.writeFile($,J)}else await K.rm($,{force:!0});return this.removeSnapshot(T),await K.rm(Z,{force:!0}),await this.persistManifest(),T}async restoreSnapshot(q,$){let T=await this.resolveFileIdentity(q),G=this.snapshots.slice().reverse().find((J)=>J.messageId===$&&J.filePath===T);if(!G)throw Error(`未找到快照: messageId=${$}, filePath=${T}`);let Z=this.getSnapshotPath(G.backupFileName,G.version);if(G.existedBefore){let J=await K.readFile(Z);await K.mkdir(x.dirname(T),{recursive:!0}),await K.writeFile(T,J)}else await K.rm(T,{force:!0})}async listSnapshots(q){let $=await this.resolveFileIdentity(q);return this.snapshots.filter((T)=>T.filePath===$)}async listAllSnapshots(){return this.snapshots.filter((q)=>q.postEditHash!==void 0)}async previewRewind(q){let $=this.buildRewindPlan(q);return{files:$.map((T)=>T.filePath),snapshotCount:$.reduce((T,G)=>T+G.selected.length,0)}}async rewindSnapshots(q){let $=this.buildRewindPlan(q);if($.length===0)return{files:[],snapshotCount:0};let T=new Map;for(let Z of $){let J,B=!0;try{J=await K.readFile(Z.filePath)}catch(H){if(H.code!=="ENOENT")throw H;B=!1}if((J?T0.createHash("sha256").update(J).digest("hex"):Yq)!==Z.latest.postEditHash)throw Error(`文件在 Blade 编辑后已被修改,拒绝覆盖: ${Z.filePath}`);if(T.set(Z.filePath,{existed:B,content:J}),Z.target.existedBefore)await K.access(this.getSnapshotPath(Z.target.backupFileName,Z.target.version))}let G=[...this.snapshots];try{for(let J of $)if(J.target.existedBefore){let B=await K.readFile(this.getSnapshotPath(J.target.backupFileName,J.target.version));await K.mkdir(x.dirname(J.filePath),{recursive:!0}),await f0(J.filePath,B)}else await K.rm(J.filePath,{force:!0});let Z=new Set($.flatMap((J)=>J.selected));this.snapshots=this.snapshots.filter((J)=>!Z.has(J)),this.rebuildTrackedFileBackups(),await this.persistManifest(),await Promise.all([...Z].map((J)=>K.rm(this.getSnapshotPath(J.backupFileName,J.version),{force:!0}).catch(()=>{return})))}catch(Z){this.snapshots=G,this.rebuildTrackedFileBackups();let J=[];for(let[B,Q]of T)try{if(Q.existed&&Q.content)await f0(B,Q.content);else await K.rm(B,{force:!0})}catch(H){J.push(H)}if(J.length>0)throw AggregateError([Z,...J],"快照回退失败且无法完整恢复回退前状态");throw Z}return{files:$.map((Z)=>Z.filePath),snapshotCount:$.reduce((Z,J)=>Z+J.selected.length,0)}}async commitSnapshots(q){let $=this.buildRewindPlan(q),T=new Set($.flatMap((Z)=>Z.selected));if(T.size===0)return{files:[],snapshotCount:0};let G=[...this.snapshots];this.snapshots=this.snapshots.filter((Z)=>!T.has(Z)),this.rebuildTrackedFileBackups();try{await this.persistManifest()}catch(Z){throw this.snapshots=G,this.rebuildTrackedFileBackups(),Z}return await Promise.all([...T].map((Z)=>K.rm(this.getSnapshotPath(Z.backupFileName,Z.version),{force:!0}).catch(()=>{return}))),{files:$.map((Z)=>Z.filePath),snapshotCount:T.size}}buildRewindPlan(q){let $=new Set(q),T=this.snapshots.filter((J)=>J.postEditHash!==void 0),G=T.filter((J)=>$.has(J.messageId));return[...new Set(G.map((J)=>J.filePath))].sort().map((J)=>{let B=T.filter((L)=>L.filePath===J),Q=B.filter((L)=>$.has(L.messageId)),H=B.indexOf(Q[0]),O=B.slice(H);if(O.length!==Q.length||O.some((L)=>!$.has(L.messageId)))throw Error(`请求的快照不是文件历史的连续后缀: ${J}`);return{filePath:J,selected:Q,target:Q[0],latest:Q.at(-1)}})}async loadManifest(){try{let q=await K.readFile(this.manifestPath,"utf-8"),$=JSON.parse(q);if($.schemaVersion!==1||!Array.isArray($.snapshots))throw Error("Unsupported snapshot manifest");this.snapshots=await Promise.all($.snapshots.map(async(T)=>({...T,filePath:await this.resolveFileIdentity(T.filePath),timestamp:new Date(T.timestamp)}))),this.rebuildTrackedFileBackups()}catch(q){if(q.code!=="ENOENT")throw q;this.snapshots=[],this.trackedFileBackups.clear()}}async persistManifest(){if(this.snapshots.length===0){await K.rm(this.manifestPath,{force:!0});return}let q={schemaVersion:1,snapshots:this.snapshots.map(($)=>({...$,timestamp:$.timestamp.toISOString()}))};await f0(this.manifestPath,JSON.stringify(q,null,2),{encoding:"utf-8",mode:384})}async cleanupOldSnapshots(q){let T=this.snapshots.filter((G)=>G.filePath===q).slice(0,-this.maxSnapshots);for(let G of T)await K.rm(this.getSnapshotPath(G.backupFileName,G.version),{force:!0}),this.removeSnapshot(G)}async cleanup(q=0){let $=this.snapshots.slice().sort((G,Z)=>Z.timestamp.getTime()-G.timestamp.getTime()),T=new Set($.slice(0,q));for(let G of this.snapshots)if(!T.has(G))await K.rm(this.getSnapshotPath(G.backupFileName,G.version),{force:!0});this.snapshots=$.slice(0,q).reverse(),this.rebuildTrackedFileBackups(),await this.persistManifest()}getSnapshotPath(q,$){return x.join(this.snapshotDir,`${q}@v${$}`)}async resolveFileIdentity(q){let $=x.resolve(q),T=[],G=$;while(!0){try{let J=await K.realpath(G);return x.join(J,...T.reverse())}catch(J){let B=J.code;if(B!=="ENOENT"&&B!=="ENOTDIR")throw J}let Z=x.dirname(G);if(Z===G)return $;T.push(x.basename(G)),G=Z}}async hashFile(q){try{let $=await K.readFile(q);return T0.createHash("sha256").update($).digest("hex")}catch($){if($.code==="ENOENT")return Yq;throw $}}removeSnapshot(q){let $=this.snapshots.indexOf(q);if($>=0)this.snapshots.splice($,1);this.rebuildTrackedFileBackups()}rebuildTrackedFileBackups(){this.trackedFileBackups.clear();for(let q of this.snapshots){let $=this.trackedFileBackups.get(q.filePath);if(!$||$.version<q.version)this.trackedFileBackups.set(q.filePath,{backupFileName:q.backupFileName,version:q.version,backupTime:q.timestamp})}}generateFileHash(q,$){let T=T0.createHash("md5");return T.update(`${q}:${$}`),T.digest("hex").substring(0,16)}getSnapshotDir(){return this.snapshotDir}getSessionId(){return this.sessionId}getTrackedFileCount(){return this.trackedFileBackups.size}getSnapshotCount(){return this.snapshots.length}}import{createHash as N$}from"node:crypto";import Dq from"node:path";import{StringDecoder as B$}from"node:string_decoder";function J$(q,$){let T=$;while(T<q.length&&(q[T]&192)===128)T+=1;return T}class g0{maxBytes;chunks=[];retainedBytes=0;omittedBytes=0;constructor(q=1048576){this.maxBytes=q;if(!Number.isSafeInteger(q)||q<=0)throw Error("maxBytes must be a positive safe integer")}append(q){let $=Buffer.isBuffer(q)?Buffer.from(q):Buffer.from(q);if($.length===0)return;this.chunks.push($),this.retainedBytes+=$.length,this.trimToLimit()}peek(){return{content:Buffer.concat(this.chunks,this.retainedBytes).toString("utf8"),omittedBytes:this.omittedBytes}}consume(){let q=this.peek();return this.chunks.length=0,this.retainedBytes=0,this.omittedBytes=0,q}trimToLimit(){while(this.retainedBytes>this.maxBytes){let q=this.chunks[0];if(!q)return;let $=this.retainedBytes-this.maxBytes;if(q.length<=$){this.chunks.shift(),this.retainedBytes-=q.length,this.omittedBytes+=q.length;continue}let T=J$(q,$);this.chunks[0]=q.subarray(T),this.retainedBytes-=T,this.omittedBytes+=T}}}var N0={maxLines:30,maxChars:3000,keepHead:10,keepTail:10,summarize:!0},r={maxLines:100,maxChars:1e4,keepHead:40,keepTail:40,summarize:!0},Uq={maxLines:200,maxChars:20000,keepHead:80,keepTail:80,summarize:!1},Z$={maxLines:150,maxChars:15000,keepHead:50,keepTail:50,summarize:!0},Q$=[{pattern:/^git\s+(rm|add)\s+(-r|--cached|-rf|-f)?\s*/i,config:N0,summaryTemplate:(q)=>`Successfully processed ${q} files`},{pattern:/^(npm|pnpm|yarn|bun)\s+(install|i|add|remove|uninstall)/i,config:N0,summaryTemplate:(q)=>`Package operation completed (${q} lines of output)`},{pattern:/^(npm|pnpm|yarn|bun)\s+(run|exec)\s+(build|compile|bundle)/i,config:r,summaryTemplate:(q)=>`Build completed (${q} lines of output)`},{pattern:/^(npm|pnpm|yarn|bun)\s+(run|exec)\s+(test|lint|check)/i,config:Uq},{pattern:/^git\s+(status|branch|remote)/i,config:r},{pattern:/^git\s+(log|diff|show)/i,config:Uq},{pattern:/^(ls|dir|tree)\s+/i,config:r,summaryTemplate:(q)=>`Listed ${q} items`},{pattern:/^find\s+/i,config:r,summaryTemplate:(q)=>`Found ${q} matches`},{pattern:/^(grep|rg|ag)\s+/i,config:r,summaryTemplate:(q)=>`Found ${q} matching lines`},{pattern:/^(docker|podman)\s+(build|pull|push)/i,config:N0,summaryTemplate:(q)=>`Docker operation completed (${q} lines)`},{pattern:/^(pip|pip3|poetry|pipenv)\s+(install|uninstall)/i,config:N0,summaryTemplate:(q)=>`Python package operation completed (${q} lines)`},{pattern:/^(cargo|rustup)\s+(build|install|update)/i,config:r,summaryTemplate:(q)=>`Rust operation completed (${q} lines)`},{pattern:/^(go)\s+(build|get|mod)/i,config:r,summaryTemplate:(q)=>`Go operation completed (${q} lines)`}];class y0{static getConfigForCommand(q){for(let{pattern:$,config:T,summaryTemplate:G}of Q$)if($.test(q))return{config:T,summaryTemplate:G};return{config:Z$}}static truncate(q,$){let{config:T,summaryTemplate:G}=this.getConfigForCommand($);return this.truncateWithConfig(q,T,G)}static truncateWithConfig(q,$,T){let G=q.length,Z=q.split(`
3
- `),J=Z.length;if(J<=$.maxLines&&G<=$.maxChars)return{content:q,truncated:!1,originalLines:J,originalChars:G};let B=Z.slice(0,$.keepHead),Q=Z.slice(-$.keepTail),H=J-$.keepHead-$.keepTail,O=B.join(`
4
- `);if(O+=`
5
-
6
- ... (${H} lines truncated, showing first ${$.keepHead} and last ${$.keepTail} of ${J} total) ...
7
-
8
- `,O+=Q.join(`
9
- `),O.length>$.maxChars){let V=Math.floor($.maxChars/2)-50,Y=O.slice(0,V),U=O.slice(-V);O=`${Y}
10
-
11
- ... (content truncated to ${$.maxChars} chars) ...
12
-
13
- ${U}`}let L=$.summarize&&T?T(J,G):void 0;if(L)O+=`
14
-
15
- [Summary: ${L}]`;return{content:O,truncated:!0,originalLines:J,originalChars:G,summary:L}}static truncateForLLM(q,$,T){let G=this.truncate(q,T),Z=this.truncate($,T),J;if(G.truncated||Z.truncated){let B=[];if(G.truncated)B.push(`stdout: ${G.originalLines} lines -> ${G.content.split(`
16
- `).length} lines`);if(Z.truncated)B.push(`stderr: ${Z.originalLines} lines -> ${Z.content.split(`
17
- `).length} lines`);J=`Output truncated: ${B.join(", ")}`}return{stdout:G.content,stderr:Z.content,truncationInfo:J}}static shouldTruncate(q,$){let{config:T}=this.getConfigForCommand($);return q.split(`
18
- `).length>T.maxLines||q.length>T.maxChars}static getStats(q){return{lines:q.split(`
19
- `).length,chars:q.length,words:q.split(/\s+/).filter(Boolean).length}}}var Nq=32768,H$=1048576,L$=65536,O$=3600000,xq=4096,V$=/[\u001B\u009B][[\]()#;?]*(?:(?:(?:[a-zA-Z\d]*(?:;[-a-zA-Z\d/#&.:=?%@~_]+)*)?\u0007)|(?:(?:\d{1,4}(?:[;:]\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]))/g;class j0{stream;executionId;onEvent;output=new g0(H$/2);decoder=new B$("utf8");sniffChunks=[];sniffBytes=0;binary=!1;totalBytes=0;streamedBytes=0;streamTruncated=!1;pendingEvents=[];constructor(q,$,T){this.stream=q;this.executionId=$;this.onEvent=T}append(q){let $=Buffer.isBuffer(q)?q:Buffer.from(q);if($.length===0)return;if(this.totalBytes+=$.length,this.sniffBytes<xq){let G=$.subarray(0,Math.min($.length,xq-this.sniffBytes));this.sniffChunks.push(G),this.sniffBytes+=G.length,this.binary=this.binary||Buffer.concat(this.sniffChunks).includes(0)}if(this.binary)return;let T=Fq(this.decoder.write($));this.output.append(T),this.emit(T)}finish(){if(this.binary)return;let q=Fq(this.decoder.end());this.output.append(q),this.emit(q)}snapshot(){let q=this.output.peek();if(this.binary)return{content:`[binary ${this.stream} omitted: ${this.totalBytes} bytes]`,omittedBytes:this.totalBytes,binary:!0};return{content:q.content,omittedBytes:q.omittedBytes,binary:!1}}async flushEvents(){await Promise.all(this.pendingEvents),this.pendingEvents.length=0}emit(q){if(!q||!this.onEvent||this.streamTruncated)return;let $=L$-this.streamedBytes;if($<=0){this.streamTruncated=!0;return}let T=X$(q,$);if(this.streamedBytes+=Buffer.byteLength(T),T.length<q.length)this.streamTruncated=!0;this.pendingEvents.push(Promise.resolve(this.onEvent({type:"output",executionId:this.executionId,stream:this.stream,chunk:T,streamedBytes:this.streamedBytes,streamTruncated:this.streamTruncated})).then(()=>{return}))}}function Fq(q){return q.replace(V$,"")}function X$(q,$){let T=Buffer.from(q);if(T.length<=$)return q;let G=$;while(G>0&&(T[G]&192)===128)G-=1;return T.subarray(0,G).toString("utf8")}function Wq(q){return q.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&apos;")}function K$(q){let $=q.trim();if(!$)throw Error("User shell command cannot be empty");if($.length>Nq)throw Error(`User shell command exceeds ${Nq} characters`);if($.includes("\x00"))throw Error("User shell command contains a null byte");return $}function Y$(){return{execute(q,$){return new Promise((T)=>{let G=process.platform==="win32"?process.env.COMSPEC||"cmd.exe":process.env.SHELL||"/bin/bash",Z=process.platform==="win32"?["/d","/s","/c",q]:["-l","-c",q],{child:J,processTree:B}=_q(G,Z,{cwd:$.cwd,env:$.env,stdio:["ignore","pipe","pipe"]}),Q="",H="",O=!1,L=!1,V=!1,Y,U=()=>{return Y??=B.terminate(),Y},b=setTimeout(()=>{O=!0,U()},$.timeoutMs),z=()=>{L=!0,U()};if($.signal.addEventListener("abort",z,{once:!0}),$.signal.aborted)z();J.stdout?.on("data",(C)=>{$.onOutput?.("stdout",C)}),J.stderr?.on("data",(C)=>{$.onOutput?.("stderr",C)});let w=async(C)=>{if(V)return;if(V=!0,clearTimeout(b),$.signal.removeEventListener("abort",z),O||L)await U();T({...C,stdout:"",stderr:"",timedOut:O,aborted:L})};J.once("error",(C)=>{w({exitCode:null,error:C.message})}),J.once("close",(C)=>{w({exitCode:C})})})}}}async function _T(q,$){let T=K$(q),G=$.timeoutMs??O$,Z=new j0("stdout",$.executionId,$.onEvent),J=new j0("stderr",$.executionId,$.onEvent),B=Date.now();await $.onEvent?.({type:"started",executionId:$.executionId,command:T});let Q,H=!1,O=!1;try{Q=await($.executor??Y$()).execute(T,{cwd:$.cwd,env:$.env,timeoutMs:G,signal:$.signal,onOutput:(z,w)=>{if(z==="stdout")H=!0;else O=!0;(z==="stdout"?Z:J).append(w)}})}catch(z){Q={exitCode:null,stdout:"",stderr:"",error:z instanceof Error?z.message:String(z)}}if(!H)Z.append(Q.stdout);if(!O)J.append(Q.stderr);Z.finish(),J.finish(),await Promise.all([Z.flushEvents(),J.flushEvents()]);let L=Z.snapshot(),V=J.snapshot(),Y=y0.truncateForLLM(L.content.trim(),V.content.trim(),T),U=Q.aborted||$.signal.aborted?"aborted":Q.timedOut?"timed_out":Q.error?"spawn_error":Q.exitCode===0?"completed":"failed",b={version:1,command:T,status:U,exitCode:Q.exitCode,durationMs:Math.max(0,Date.now()-B),stdout:Y.stdout,stderr:Q.error?[Y.stderr,Q.error].filter(Boolean).join(`
20
- `):Y.stderr,stdoutOmittedBytes:L.omittedBytes,stderrOmittedBytes:V.omittedBytes,binaryOutput:L.binary||V.binary,truncated:Boolean(Y.truncationInfo)||L.omittedBytes>0||V.omittedBytes>0};return await $.onEvent?.({type:"completed",executionId:$.executionId,record:b}),b}function CT(q){let $=[q.stdout?`stdout:
21
- ${q.stdout}`:"",q.stderr?`stderr:
22
- ${q.stderr}`:""].filter(Boolean).join(`
23
- `);return["<user_shell_command>",`<command>${Wq(q.command)}</command>`,"<result>",`Status: ${q.status}`,`Exit code: ${q.exitCode??"null"}`,`Duration: ${(q.durationMs/1000).toFixed(3)} seconds`,`Output:
24
- ${Wq($||"(no output)")}`,"</result>","</user_shell_command>"].join(`
25
- `)}function Cq(q){let $=[q.stdout,q.stderr?`stderr:
26
- ${q.stderr}`:""].filter(Boolean).join(`
27
- `);return[`! ${q.command}`,$||"(no output)"].join(`
28
- `)}function U$(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q;if($.version!==1||typeof $.command!=="string"||!["completed","failed","aborted","timed_out","spawn_error"].includes(String($.status))||$.exitCode!==null&&typeof $.exitCode!=="number"||typeof $.durationMs!=="number"||typeof $.stdout!=="string"||typeof $.stderr!=="string"||typeof $.stdoutOmittedBytes!=="number"||typeof $.stderrOmittedBytes!=="number"||typeof $.binaryOutput!=="boolean"||typeof $.truncated!=="boolean")return;return $}function x0(q){if(!q||typeof q!=="object"||Array.isArray(q))return;return U$(q.userShellCommand)}var F0=16777216,zq=65536,ET=1048576,x$=8,W0=200,F$=/(?:^|[_-])(?:api[_-]?key|authorization|bearer|cookie|credential|password|passwd|private[_-]?key|refresh[_-]?token|secret|session[_-]?token|token)(?:$|[_-])/i,W$=/(?<![:/A-Za-z0-9._-])\/[^\s"'`<>]+/g,_$=/(?<![A-Za-z0-9._-])[A-Za-z]:[\\/][^\s"'`<>]+/g,C$=new RegExp("\\u001b(?:\\[[0-?]*[ -/]*[@-~]|\\][^\\u0007]*(?:\\u0007|\\u001b\\\\))","g"),z$=/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?-----END [^-]*PRIVATE KEY-----/g;function f(q,$){return q.count+=1,$}function D$(q){return F$.test(q.replace(/[A-Z]/g,($)=>`_${$.toLowerCase()}`))}function R$(q){return[...q].filter(($)=>{if($===`
29
- `||$==="\r"||$==="\t")return!0;let T=$.codePointAt(0)??0;if(T<32||T===127)return!1;if(T>=57344&&T<=63743)return!1;if(T>=983040&&T<=1048573)return!1;if(T>=1048576&&T<=1114109)return!1;if(T>=917504&&T<=917631)return!1;return!/[\p{Cf}\p{Cn}]/u.test($)}).join("")}function k(q,$){let T=q.normalize("NFKC"),G=T.replace(C$,"");if(G!==T)$.count+=1;T=G,T=T.replace(z$,()=>f($,"[redacted-private-key]")),T=T.replace(/\bBearer\s+[^\s"'`]+/gi,()=>f($,"Bearer [redacted]")).replace(/\bsk-[A-Za-z0-9_-]{8,}\b/g,()=>f($,"[redacted-key]")).replace(/\bAKIA[0-9A-Z]{16}\b/g,()=>f($,"[redacted-aws-key]")).replace(/\b(api[_-]?key|access[_-]?token|authorization|cookie|password|passwd|refresh[_-]?token|secret|session[_-]?token)\b(\s*[:=]\s*)([^\s,;]+)/gi,(J,B,Q)=>`${B}${Q}${f($,"[redacted]")}`);let Z=R$(T);if(Z!==T)$.count+=1;return Z.replace(/\r\n?/g,`
30
- `)}function Rq(q,$,T){if(/^data:[^;,]+;base64,/i.test(q))return f(T,"[binary omitted]");let G=k(q,T),Z=Dq.resolve($);for(let J of[Z,Z.startsWith("/private/")?Z.slice(8):`/private${Z}`])G=G.replaceAll(J,".");return G=G.replace(W$,(J)=>J.startsWith("./")?J:f(T,"[host-path]")),G=G.replace(_$,()=>f(T,"[host-path]")),G=G.replace(/\bhttps?:\/\/[^\s"'`]+/gi,(J)=>{try{let B=new URL(J);if(B.username||B.password||B.search||B.hash)T.count+=1;return B.username="",B.password="",B.search="",B.hash="",B.toString()}catch{return f(T,"[redacted-url]")}}),G}function v0(q,$,T,G=0,Z){if(Z&&D$(Z))return f(T,"[redacted]");if(G>=x$)return f(T,"[depth limit]");if(typeof q==="string")return Rq(q,$,T);if(q===null||typeof q==="boolean"||typeof q==="number"&&Number.isFinite(q))return q;if(Array.isArray(q)){let J=q.slice(0,W0).map((B)=>v0(B,$,T,G+1));if(q.length>J.length)J.push(f(T,`[${q.length-J.length} items omitted]`));return J}if(q&&typeof q==="object"){let J={},B=Object.entries(q);for(let[Q,H]of B.slice(0,W0))J[k(Q,T)]=v0(H,$,T,G+1,Q);if(B.length>W0)J["[entries omitted]"]=B.length-W0;return J}return String(q)}function M$(q,$){let T=Buffer.from(q,"utf8");if(T.length<=$)return q;let G=T.subarray(0,$).toString("utf8");while(Buffer.byteLength(G,"utf8")>$)G=G.slice(0,-1);return G}function A$(q,$,T){let G=JSON.stringify(v0(q,$,T),null,2);if(Buffer.byteLength(G,"utf8")<=zq)return G;T.count+=1;let Z=`
31
- ... [activity truncated]`;return M$(G,zq-Buffer.byteLength(Z))+Z}function I0(q,$=""){let T=Math.max(2,...[...q.matchAll(/`+/g)].map((Z)=>Z[0].length)),G="`".repeat(T+1);return`${G}${$}
32
- ${q}
33
- ${G}`}function S0(q){return q.replace(/\s+/g," ").trim()}function E$(q){let $=new Map,T=new Map,G=new Map,Z=0;for(let J of P(q)){if(J.type==="message_created"){let L=T.get(J.data.messageId);if(L)L.role=J.data.role,L.metadata=J.data.metadata,$.set(J.data.messageId,L),T.delete(J.data.messageId);else if(!$.has(J.data.messageId))$.set(J.data.messageId,{order:Z++,role:J.data.role,parts:[],metadata:J.data.metadata});continue}if(J.type!=="part_created"&&J.type!=="part_updated")continue;let B=$.get(J.data.messageId)??T.get(J.data.messageId);if(!B)B={order:Z++,role:"activity",parts:[]},T.set(J.data.messageId,B);let Q=`${J.data.messageId}\x00${J.data.partType}\x00${J.data.partId}`,H=G.get(Q);if(H){H.event=J;continue}let O={order:Z++,event:J};G.set(Q,O),B.parts.push(O)}return[...$.values(),...T.values()].sort((J,B)=>J.order-B.order)}function m0(q,$,T,G){return`## Activity: ${q}
34
-
35
- ${I0(A$($,T.projectPath,G),"json")}`}function Mq(q,$,T={}){let G={count:0},Z=T.includeReasoning===!0,J=[],B=0,Q=0,H=0;for(let w of E$(q)){let C=x0(w.metadata);if(C){let R=k(C.command,G),M=k([C.stdout,C.stderr?`stderr:
36
- ${C.stderr}`:""].filter(Boolean).join(`
37
- `)||"(no output)",G);J.push(`## User shell command
38
-
39
- ${I0(`$ ${R}
40
- ${M}`,"console")}`),B+=1;continue}let I=[],o=[],_=[],u=Number.POSITIVE_INFINITY;for(let R of w.parts.sort((M,E)=>M.order-E.order)){let{partType:M,payload:E}=R.event.data;if(M==="text"){let N=E.text;if(typeof N==="string"&&N.trim())I.push(k(N,G)),u=Math.min(u,R.order)}else if(M==="image"){let N=E.mimeType;o.push(typeof N==="string"?`[Image: ${k(N,G)}]`:"[Image]"),u=Math.min(u,R.order)}else if(M==="reasoning"&&Z){let N=E.text;if(typeof N==="string"&&N.trim())_.push({order:R.order,markdown:`## Reasoning
41
-
42
- ${k(N,G).trim()}`}),H+=1}else if(M==="tool_call"){let N=E,a=typeof N.toolName==="string"?k(N.toolName,G):"unknown";_.push({order:R.order,markdown:m0(`${a} call`,N.input??{},$,G)}),Q+=1}else if(M==="tool_result"){let N=E,a=typeof N.toolName==="string"?k(N.toolName,G):"unknown";_.push({order:R.order,markdown:m0(`${a} result`,typeof N.error==="string"?{error:N.error}:{output:N.output??null},$,G)}),Q+=1}else if(M==="summary"){let N=E.text;if(typeof N==="string"&&N.trim())_.push({order:R.order,markdown:`## Summary
43
-
44
- ${k(N,G).trim()}`})}else if(M==="subtask_ref")_.push({order:R.order,markdown:m0("Subagent",E,$,G)}),Q+=1;else if(M==="diff"||M==="patch"){let N=typeof E==="string"?E:JSON.stringify(E,null,2);_.push({order:R.order,markdown:`## File changes
45
-
46
- ${I0(Rq(N,$.projectPath,G),"diff")}`}),Q+=1}}if((w.role==="user"||w.role==="assistant")&&(I.length>0||o.length>0))_.push({order:u,markdown:`## ${w.role==="user"?"User":"Assistant"}
47
-
48
- ${[...I,...o].join(`
49
-
50
- `).trim()}`}),B+=1;J.push(..._.sort((R,M)=>R.order-M.order).map((R)=>R.markdown))}if(J.length===0)throw Error("No conversation content to export");let O=`${J.join(`
51
-
52
- `)}
53
- `,L=Buffer.byteLength(O,"utf8");if(L>F0)throw Error(`Session export exceeds ${F0} bytes`);let V=N$("sha256").update(O).digest("hex"),Y=Dq.basename($.taskSourceProjectPath??$.projectPath),U=$.selectedModelId??$.taskModelId,z=["# Blade conversation","",`- Session: \`${$.sessionId}\``,...$.title?[`- Title: ${S0(k($.title,G))}`]:[],`- Project: \`${S0(k(Y,G))}\``,...U?[`- Model: \`${S0(k(U,G))}\``]:[],...$.permissionMode?[`- Permission mode: ${$.permissionMode}`]:[],`- Created: ${$.firstMessageTime}`,`- Updated: ${$.lastMessageTime}`,`- State: ${$.archivedAt?"archived":"active"}`,`- Reasoning: ${Z?"included":"omitted"}`,...$.reasoningEffort?[`- Reasoning effort: ${$.reasoningEffort}`]:[],...$.serviceTier?[`- Service tier: ${$.serviceTier}`]:[],...$.responseVerbosity?[`- Response verbosity: ${$.responseVerbosity}`]:[],...$.communicationStyle?[`- Communication style: ${$.communicationStyle}`]:[],...$.communicationStyleDigest?[`- Communication style SHA-256: \`${$.communicationStyleDigest}\``]:[],...$.projectInstructionsDigest?[`- Project instructions SHA-256: \`${$.projectInstructionsDigest}\``]:[],`- Content SHA-256: \`${V}\``,`- Content bytes: ${L}`,`- Redactions: ${G.count}`,"","---",""].join(`
54
- `)+`
55
- `+O;if(Buffer.byteLength(z,"utf8")>F0)throw Error(`Session export exceeds ${F0} bytes`);return{filename:`blade-session-${$.sessionId.slice(0,12)}.md`,markdown:z,contentSha256:V,contentBytes:L,messageCount:B,activityCount:Q,reasoningIncluded:Z,reasoningCount:H,redactionCount:G.count}}var u0=Y0("Service"),Eq=new Set(["queued","running","completed","failed","cancelled","interrupted"]),o0=new Set(["local","worktree"]),b$=new Set(["default","autoEdit","yolo","plan"]),k$=new Set(["applied","discarded","conflicted"]);class a0 extends Error{}function wq(q){try{return process.kill(q,0),!0}catch($){return $ instanceof Error&&"code"in $&&$.code==="EPERM"}}function bq(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q;if(["sessionId","name","branch","baseCommit","originalBranch","repositoryRoot","originalWorkspaceRoot","worktreeRoot","workspaceRoot"].some((G)=>typeof $[G]!=="string"||!$[G])||typeof $.sourceHadChanges!=="boolean"||$.sourceStateFingerprint!==void 0&&(typeof $.sourceStateFingerprint!=="string"||!/^[a-f0-9]{64}$/.test($.sourceStateFingerprint)))return;return $}function kq(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q;if(!k$.has(String($.status))||typeof $.updatedAt!=="string"||!Number.isFinite(Date.parse($.updatedAt))||$.sourceCommit!==void 0&&(typeof $.sourceCommit!=="string"||!/^[a-f0-9]{40,64}$/.test($.sourceCommit))||$.changedFiles!==void 0&&(typeof $.changedFiles!=="number"||!Number.isInteger($.changedFiles)||$.changedFiles<0)||$.message!==void 0&&(typeof $.message!=="string"||!$.message.trim()||$.message.length>500))return;return{status:$.status,updatedAt:$.updatedAt,...typeof $.sourceCommit==="string"?{sourceCommit:$.sourceCommit}:{},...typeof $.changedFiles==="number"?{changedFiles:$.changedFiles}:{},...typeof $.message==="string"?{message:$.message}:{}}}function fq(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q;if(["changedFiles","additions","deletions","commits"].some((G)=>typeof $[G]!=="number"||!Number.isInteger($[G])||$[G]<0))return;return $}function gq(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q;if($.version!==1||typeof $.prompt!=="string"||!$.prompt.trim()||$.prompt.length>32000||typeof $.sourceProjectPath!=="string"||!X.isAbsolute($.sourceProjectPath)||!o0.has($.isolation)||!z0($.permissionMode)||$.title!==void 0&&(typeof $.title!=="string"||!$.title.trim()||$.title.length>200)||$.modelId!==void 0&&(typeof $.modelId!=="string"||!$.modelId.trim()||$.modelId.length>500)||$.reasoningEffort!==void 0&&!B0($.reasoningEffort)||$.serviceTier!==void 0&&!Q0($.serviceTier)||$.responseVerbosity!==void 0&&!Z0($.responseVerbosity)||$.communicationStyle!==void 0&&!H0($.communicationStyle)||$.communicationStyleDigest!==void 0&&(typeof $.communicationStyleDigest!=="string"||!/^[a-f0-9]{64}$/.test($.communicationStyleDigest))||$.projectInstructionsDigest!==void 0&&(typeof $.projectInstructionsDigest!=="string"||!/^[a-f0-9]{64}$/.test($.projectInstructionsDigest)))return;let T;if($.attachments!==void 0){if(!Array.isArray($.attachments)||$.attachments.length>mq)return;let G=0;for(let Z of $.attachments){if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let J=Z;if(!["file","image","url"].includes(String(J.type)))return;for(let B of["path","url","content","mimeType","name"])if(J[B]!==void 0&&typeof J[B]!=="string")return;G+=typeof J.content==="string"?Buffer.byteLength(J.content):0}if(G>vq)return;T=$.attachments.map((Z)=>{let J=Z;return{type:J.type,...J.path!==void 0?{path:J.path}:{},...J.url!==void 0?{url:J.url}:{},...J.content!==void 0?{content:J.content}:{},...J.mimeType!==void 0?{mimeType:J.mimeType}:{},...J.name!==void 0?{name:J.name}:{}}})}return{version:1,prompt:$.prompt,...typeof $.title==="string"?{title:$.title}:{},sourceProjectPath:X.resolve($.sourceProjectPath),isolation:$.isolation,permissionMode:$.permissionMode,...typeof $.modelId==="string"?{modelId:$.modelId}:{},...B0($.reasoningEffort)?{reasoningEffort:$.reasoningEffort}:{},...Q0($.serviceTier)?{serviceTier:$.serviceTier}:{},...Z0($.responseVerbosity)?{responseVerbosity:$.responseVerbosity}:{},...H0($.communicationStyle)?{communicationStyle:$.communicationStyle}:{},...typeof $.communicationStyleDigest==="string"?{communicationStyleDigest:$.communicationStyleDigest}:{},...typeof $.projectInstructionsDigest==="string"?{projectInstructionsDigest:$.projectInstructionsDigest}:{},...T?{attachments:T}:{}}}function z0(q){return typeof q==="string"&&b$.has(q)}function yq(q){if(!q||typeof q!=="object"||Array.isArray(q))return;let $=q;if(typeof $.sessionId!=="string"||!$.sessionId||typeof $.projectPath!=="string"||!X.isAbsolute($.projectPath))return;return{sessionId:$.sessionId,projectPath:X.resolve($.projectPath)}}var lq={stat(q){return w$(q,{bigint:!0})},readFile(q){return s(q,"utf-8")}},J0=lq;function aT(q){J0=q}function tT(){J0=lq}class cq extends Error{constructor(q){super(`Session has no durable creation record: ${q}`);this.name="SessionMissingCreationError"}}class e extends Error{sessionId;archivedBySessionId;code="BLADE_SESSION_ARCHIVED";constructor(q,$){super(q===$?`Session is archived: ${q}`:`Session is archived by ancestor ${$}: ${q}`);this.sessionId=q;this.archivedBySessionId=$;this.name="SessionArchivedError"}}class v extends Error{code="BLADE_SESSION_ARCHIVE_CONFLICT";constructor(q){super(q);this.name="SessionArchiveConflictError"}}function P0(q,$){return`${q}\x00${$}`}function pq(q){return typeof q==="string"&&q.length<=64&&Number.isFinite(Date.parse(q))}function f$(q){let $=new Map(q.map((T)=>[P0(T.projectPath,T.sessionId),T]));return q.map((T)=>{let G=T,Z=new Set;while(G){let H=P0(G.projectPath,G.sessionId);if(Z.has(H))break;if(Z.add(H),pq(G.archivedAt))return{...T,archivedAt:G.archivedAt,archivedBySessionId:G.sessionId};G=G.parentId?$.get(P0(G.projectPath,G.parentId)):void 0}let{archivedAt:J,archivedBySessionId:B,...Q}=T;return Q})}function h0(q,$){let T=f$(q);if($===null)return T;return T.filter((G)=>Boolean(G.archivedAt)===$)}class F{static toUISafeMessages(q){let $=Date.now(),T=q.length,G=[];return q.forEach((Z,J)=>{if(Z.role!=="user"&&Z.role!=="assistant")return;let B;if(typeof Z.content==="string")B=Z.content;else if(Array.isArray(Z.content))B=Z.content.map((V)=>V.type==="text"?V.text:"[Image]").join("");else B="";let Q=B.trim();if(!Q)return;let H=x0(Z.metadata),O=H?Cq(H):Q,L=G[G.length-1];if(L&&L.role===Z.role&&L.content===O)return;G.push({id:`restored-${$}-${J}`,role:Z.role,content:O,timestamp:$-(T-J)*1000,metadata:Z.metadata&&typeof Z.metadata==="object"?Z.metadata:void 0})}),G}static async listSessionPage(q={}){let $=n0(q),T=await this.listSessionPageFromProjection($);if(T)return T;let Z=(await this.scanStoredSessions($.cwd??void 0,$.includeSubagents,$.cursor?5000:0,$.archived)).sort(i0),J=d0(Z,$);return{sessions:J.sessions.map((B)=>this.toPublicMetadata(B)),nextCursor:J.nextCursor}}static async listSessionPageFromProjection(q){let $=Pq(q);try{let T=await C0();if(!T)return null;await r0(T,this.projectionDeriver(),q.cursor?5000:0);let G=[],Z=[];if(q.cwd)G.push("s.project_path = ?"),Z.push(q.cwd);if(!q.includeSubagents)G.push("s.is_subagent = 0");if(G.push(q.archived?"a.session_id IS NOT NULL":"a.session_id IS NULL"),$){G.push(`(
56
- s.last_message_time < ?
57
- OR (
58
- s.last_message_time = ?
59
- AND (
60
- s.project_sort_key > ?
61
- OR (s.project_sort_key = ? AND s.session_sort_key > ?)
62
- )
63
- )
64
- )`);let H=p0($.projectPath);Z.push($.lastMessageTime,$.lastMessageTime,H,H,p0($.sessionId))}let B=T.prepare(`WITH RECURSIVE archive_members(
65
- project_path, session_id, archive_root_id, effective_archived_at, depth
66
- ) AS (
67
- SELECT project_path, session_id, session_id, archived_at, 0
68
- FROM sessions
69
- WHERE archived_at IS NOT NULL
70
- UNION ALL
71
- SELECT child.project_path, child.session_id, parent.archive_root_id,
72
- parent.effective_archived_at, parent.depth + 1
73
- FROM sessions child
74
- JOIN archive_members parent
75
- ON child.project_path = parent.project_path
76
- AND child.parent_id = parent.session_id
77
- WHERE parent.depth < 128
78
- ),
79
- ranked_archive AS (
80
- SELECT project_path, session_id, archive_root_id,
81
- effective_archived_at,
82
- ROW_NUMBER() OVER (
83
- PARTITION BY project_path, session_id
84
- ORDER BY depth ASC, archive_root_id ASC
85
- ) AS rank
86
- FROM archive_members
87
- )
88
- SELECT s.metadata_json, a.archive_root_id, a.effective_archived_at
89
- FROM sessions s
90
- LEFT JOIN ranked_archive a
91
- ON a.project_path = s.project_path
92
- AND a.session_id = s.session_id
93
- AND a.rank = 1
94
- ${G.length>0?`WHERE ${G.join(" AND ")}`:""}
95
- ORDER BY s.last_message_time DESC,
96
- s.project_sort_key ASC,
97
- s.session_sort_key ASC
98
- LIMIT ?`).all(...Z,q.limit+1).map((H)=>{let O=JSON.parse(H.metadata_json);if(H.archive_root_id&&H.effective_archived_at)return{...O,archivedAt:H.effective_archived_at,archivedBySessionId:H.archive_root_id};let{archivedAt:L,archivedBySessionId:V,...Y}=O;return Y}),Q=d0(B,q);return{sessions:Q.sessions.map((H)=>this.toPublicMetadata(H)),nextCursor:Q.nextCursor}}catch{return null}}static async listSessions(q={}){let $=n0(q),T=await this.scanStoredSessions($.cwd??void 0,$.includeSubagents,0,$.archived),G=new Set;return T.sort(i0).flatMap((Z)=>{let J=`${Z.projectPath}\x00${Z.sessionId}`;if(G.has(J))return[];return G.add(J),[this.toPublicMetadata(Z)]})}static async findSessionMetadata(q,$){if(D(q),$!==void 0){if(!X.isAbsolute($))throw Error("Session catalog cwd must be absolute");let G=X.resolve($),Z=this.getSessionFilePath(G,q);try{let J=await this.readStoredSessionMetadata(Z,q,G);if(J.projectPath!==G)return;if(!J.parentId||J.archivedAt)return this.toPublicMetadata(h0([J],null)[0]??J);let B=await this.scanStoredSessions(G,!0,0,null);return this.toPublicMetadata(B.find((Q)=>Q.sessionId===q)??J)}catch(J){if(J.code==="ENOENT")return;throw J}}let T=(await this.scanStoredSessions(void 0,!0,0,null)).filter((G)=>G.sessionId===q);if(T.length===0)return;if(T.length>1)throw Error(`Ambiguous session ID: ${q}`);return this.toPublicMetadata(T[0])}static async loadSession(q,$){try{if($){if(!X.isAbsolute($))throw Error("Session catalog cwd must be absolute");let G=X.resolve($),Z=this.getSessionFilePath(G,q);try{return await this.loadSessionFromFile(Z,q,G)}catch(J){if(J.code==="ENOENT")throw Error(`未找到会话: ${q}`);throw J}}let T=(await this.scanStoredSessions(void 0,!0,0,null)).find((G)=>G.sessionId===q);if(!T)throw Error(`未找到会话: ${q}`);return await this.loadSessionFromFile(T.filePath,q)}catch(T){throw u0.error(`[SessionService] 加载会话失败 (${q}):`,T),T}}static async exportSessionMarkdown(q,$,T={}){D(q);let G=this.resolveCatalogWorkspace($),Z=j(G,q),J;try{J=await this.readStableSessionSnapshot(Z,q)}catch(H){throw this.sanitizeStoredSessionError(H,q)}let B=this.projectMetadataFromEntries(J,q,G,Z);if(B.projectPath!==G)throw Error(`Session export workspace mismatch: ${q}`);let Q=B.archivedAt;if(!Q&&B.parentId)Q=(await this.findArchivedAncestor(B.parentId,G))?.archivedAt;return Mq(J,{...B,archivedAt:Q},T)}static async listRewindCheckpoints(q,$){D(q);let T=this.resolveCatalogWorkspace($),G=j(T,q),Z=await this.readStableSessionSnapshot(G,q);this.validateSessionWorkspace(Z,q,T);let J=new U0({sessionId:q,workspaceRoot:T});await J.initialize();let B=Iq(Z),Q=[];for(let H of B){let O=c0(Z,H.messageId),L=await J.previewRewind(O.snapshotMessageIds);Q.push({...H,fileCount:L.files.length})}return Q}static async rewindSession(q,$,T){D(q);let G=this.resolveCatalogWorkspace($);await this.assertSessionWritable(q,G);let Z=j(G,q),J=new m(Z),B;try{await J.appendValidatedAsync(async(Q)=>{this.validateSessionWorkspace(Q,q,G);let H=c0(Q,T.targetMessageId),O=new U0({sessionId:q,workspaceRoot:G});await O.initialize();let L=await O.previewRewind(H.snapshotMessageIds),V=T.mode==="conversation"?await O.commitSnapshots(H.snapshotMessageIds):await O.rewindSnapshots(H.snapshotMessageIds),Y=new Date().toISOString(),U={id:y(),sessionId:q,timestamp:Y,type:"session_rewound",cwd:G,gitBranch:l(G),version:c(),data:{rewindId:y(),targetMessageId:T.targetMessageId,mode:T.mode,restoredFiles:T.mode==="conversation"?[]:V.files,createdAt:Y}},b=P([...Q,U]);return B={checkpoint:{...H.checkpoint,fileCount:L.files.length},mode:T.mode,removedTurns:H.removedTurns,restoredFiles:U.data.restoredFiles,messages:this.convertJSONLToMessages(b)},U})}catch(Q){throw this.sanitizeStoredSessionError(Q,q)}if(!B)throw Error(`Session rewind did not produce a result: ${q}`);for(let Q of B.restoredFiles)h.getInstance().clearFileRecord(Q);return B}static async forkSession(q,$){D(q);let T=$.newSessionId??`fork-${Date.now()}-${y(8)}`;D(T);let G=this.resolveForkWorkspace($.sourceProjectPath),Z=this.resolveForkWorkspace($.targetProjectPath);if(G!==Z)throw Error("Session forks must stay in the source workspace");let J=j(G,q),B=await this.readStableSessionSnapshot(J,q),Q=this.getSessionCreatedEntry(B,q);if(Q.data.sessionId!==q)throw Error("Fork source session_created.data.sessionId must match the requested session ID");if(!X.isAbsolute(Q.cwd)||X.resolve(Q.cwd)!==G)throw Error("Fork source session_created.cwd must resolve to the requested source workspace");let H=this.projectMetadataFromEntries(B,q,G,J);if(H.archivedAt)throw new e(q,q);if(H.parentId){let A=await this.findArchivedAncestor(H.parentId,G);if(A)throw new e(q,A.sessionId)}let O=P(B),L=new Date().toISOString(),V=Q.data.rootId||q,Y=l(Z),U=c(),{status:b,taskStatus:z,taskStatusReason:w,taskFailure:C,taskStartedAt:I,taskCompletedAt:o,taskOwnerPid:_,taskPromptSummary:u,taskDispatch:R,taskModelId:M,taskRetriedFrom:E,taskDelivery:N,taskIsolation:a,taskSourceProjectPath:D0,taskWorktree:t0,taskDiffStat:s0,taskQueuePosition:e0,taskQueueDepth:qq,taskConcurrencyLimit:$q,pendingInteraction:Tq,...R0}=Q.data,M0={id:y(),sessionId:T,timestamp:L,type:"session_created",cwd:Z,gitBranch:Y,version:U,data:{...R0,sessionId:T,rootId:V,parentId:q,relationType:"fork",taskStatus:"completed",taskCompletedAt:L,taskIsolation:"local",taskSourceProjectPath:Z,createdAt:L,updatedAt:L}},L0=O.filter((A)=>A.type!=="session_created"&&A.type!=="inbox_acknowledged"&&A.type!=="interaction_requested"&&A.type!=="interaction_responded"&&A.type!=="interaction_recovered").map((A)=>{let A0={...A,id:y(),sessionId:T,cwd:Z,gitBranch:Y,version:U};if(A.type==="session_updated"){let{status:iq,taskStatus:Jq,taskStatusReason:g$,taskFailure:y$,taskStartedAt:j$,taskCompletedAt:S$,taskOwnerPid:m$,taskPromptSummary:v$,taskDispatch:I$,taskModelId:u$,taskRetriedFrom:P$,taskDelivery:h$,taskIsolation:l$,taskSourceProjectPath:c$,taskWorktree:p$,taskDiffStat:n$,taskQueuePosition:i$,taskQueueDepth:d$,taskConcurrencyLimit:r$,pendingInteraction:o$,...dq}=A.data;return{...A0,type:"session_updated",data:{...dq,sessionId:T,rootId:V,parentId:q,relationType:"fork"}}}if(A.type==="message_created"){let{inboxMessageId:iq,...Jq}=A.data;return{...A0,type:"message_created",data:Jq}}return A0}),g={id:y(),sessionId:T,timestamp:L,type:"session_updated",cwd:Z,gitBranch:Y,version:U,data:{sessionId:T,rootId:V,parentId:q,relationType:"fork",taskStatus:"completed",taskStatusReason:null,taskFailure:null,taskStartedAt:null,taskCompletedAt:L,taskOwnerPid:null,taskIsolation:"local",taskSourceProjectPath:Z,taskWorktree:null,taskDiffStat:null,taskDelivery:null,taskQueuePosition:null,taskQueueDepth:null,taskConcurrencyLimit:null,updatedAt:L}},t=[M0,...L0,g],Gq=j(Z,T);try{await new m(Gq).createExclusive(t)}catch(A){if(A.code==="EEXIST")throw Error(`Fork session already exists: ${T}`,{cause:A});throw A}let nq=this.projectMetadataFromEntries(t,T,Z,Gq);return{sessionId:T,parentSessionId:q,projectPath:Z,messages:this.convertJSONLToMessages(t),metadata:this.toPublicMetadata(nq)}}static async deleteSession(q,$){if(D(q),$){if(!X.isAbsolute($))throw Error("Session catalog cwd must be absolute");let G=X.resolve($),Z=this.getSessionFilePath(G,q),J=new m(Z),B;try{B=await J.deleteValidated((Q)=>{return this.projectMetadataFromEntries(Q,q,G,Z).projectPath===G})}catch(Q){if(!this.isCorruptSessionJSONLError(Q))throw Q;B=await J.delete()}if(!B)return 0;return await _0(X.join(X.dirname(Z),`${q}.inbox.json`),{force:!0}),await _0(l0(G,q),{force:!0}),await this.removeFromProjection(q,G),1}let T=(await this.scanStoredSessions(void 0,!0)).filter((G)=>G.sessionId===q);if(T.length===0)return 0;return await Promise.all(T.map(async(G)=>{await new m(G.filePath).delete(),await _0(X.join(X.dirname(G.filePath),`${G.sessionId}.inbox.json`),{force:!0}),await _0(l0(G.projectPath,G.sessionId),{force:!0}),await this.removeFromProjection(G.sessionId,G.projectPath)})),T.length}static async removeFromProjection(q,$){try{let T=await C0();if(T)hq(T,q,$)}catch{}}static validateTaskMetadataUpdate(q,$){if(q.taskPromptSummary!==void 0&&q.taskPromptSummary!==null&&(!q.taskPromptSummary.trim()||q.taskPromptSummary.length>1000))throw Error("Session task prompt summary must contain 1-1000 characters");if(q.taskFailure!==void 0&&q.taskFailure!==null&&!b0(q.taskFailure))throw Error("Invalid session task failure");if(q.taskDispatch!==void 0&&q.taskDispatch!==null&&!gq(q.taskDispatch))throw Error("Invalid durable task dispatch");if(q.taskModelId!==void 0&&q.taskModelId!==null&&(!q.taskModelId.trim()||q.taskModelId.length>500))throw Error("Invalid session task model ID");if(q.selectedModelId!==void 0&&q.selectedModelId!==null&&(!q.selectedModelId.trim()||q.selectedModelId.length>500))throw Error("Invalid selected session model ID");if(q.permissionMode!==void 0&&q.permissionMode!==null&&!z0(q.permissionMode))throw Error("Invalid session permission mode");if(q.reasoningEffort!==void 0&&q.reasoningEffort!==null&&!B0(q.reasoningEffort))throw Error("Invalid session reasoning effort");if(q.serviceTier!==void 0&&q.serviceTier!==null&&!Q0(q.serviceTier))throw Error("Invalid session service tier");if(q.responseVerbosity!==void 0&&q.responseVerbosity!==null&&!Z0(q.responseVerbosity))throw Error("Invalid session response verbosity");if(q.communicationStyle!==void 0&&q.communicationStyle!==null&&!H0(q.communicationStyle))throw Error("Invalid session communication style");if(q.communicationStyleDigest!==void 0&&q.communicationStyleDigest!==null&&!/^[a-f0-9]{64}$/.test(q.communicationStyleDigest))throw Error("Invalid session communication style digest");if(q.projectInstructionsDigest!==void 0&&q.projectInstructionsDigest!==null&&!/^[a-f0-9]{64}$/.test(q.projectInstructionsDigest))throw Error("Invalid session project instructions digest");if(q.taskRetriedFrom!==void 0&&q.taskRetriedFrom!==null&&!yq(q.taskRetriedFrom))throw Error("Invalid session task retry source");if(q.taskDelivery!==void 0&&q.taskDelivery!==null&&!kq(q.taskDelivery))throw Error("Invalid session task delivery");if(q.taskIsolation!==void 0&&q.taskIsolation!==null&&!o0.has(q.taskIsolation))throw Error(`Invalid session task isolation: ${String(q.taskIsolation)}`);if(q.taskSourceProjectPath!==void 0&&q.taskSourceProjectPath!==null&&!X.isAbsolute(q.taskSourceProjectPath))throw Error("Session task source project path must be absolute");if(q.taskWorktree!==void 0&&q.taskWorktree!==null){let T=bq(q.taskWorktree);if(!T||T.sessionId!==$||![T.repositoryRoot,T.originalWorkspaceRoot,T.worktreeRoot,T.workspaceRoot].every((G)=>X.isAbsolute(G)))throw Error("Invalid session task worktree metadata")}if(q.taskDiffStat!==void 0&&q.taskDiffStat!==null&&!fq(q.taskDiffStat))throw Error("Invalid session task diff stat");if(q.taskQueuePosition!==void 0&&q.taskQueuePosition!==null&&(!Number.isInteger(q.taskQueuePosition)||q.taskQueuePosition<1))throw Error("Invalid session task queue position");if(q.taskQueueDepth!==void 0&&q.taskQueueDepth!==null&&(!Number.isInteger(q.taskQueueDepth)||q.taskQueueDepth<0))throw Error("Invalid session task queue depth");if(q.taskConcurrencyLimit!==void 0&&q.taskConcurrencyLimit!==null&&(!Number.isInteger(q.taskConcurrencyLimit)||q.taskConcurrencyLimit<1))throw Error("Invalid session task concurrency limit");if(typeof q.taskQueuePosition==="number"&&typeof q.taskQueueDepth==="number"&&q.taskQueuePosition>q.taskQueueDepth)throw Error("Session task queue position exceeds queue depth")}static async createSessionMetadata(q,$,T={}){D(q),F.validateTaskMetadataUpdate(T,q);let G=F.resolveCatalogWorkspace($);if(T.taskWorktree&&X.resolve(T.taskWorktree.workspaceRoot)!==G)throw Error("Session task worktree must match the catalog workspace");let Z=new Date().toISOString(),J={id:y(),sessionId:q,timestamp:Z,type:"session_created",cwd:G,gitBranch:l(G),version:c(),data:{sessionId:q,rootId:q,...T.title!==void 0?{title:T.title}:{},taskStatus:T.taskStatus??"queued",...T.taskPromptSummary!==void 0?{taskPromptSummary:T.taskPromptSummary}:{},...T.taskDispatch!==void 0?{taskDispatch:T.taskDispatch}:{},...T.taskModelId!==void 0?{taskModelId:T.taskModelId}:{},...T.taskRetriedFrom!==void 0?{taskRetriedFrom:T.taskRetriedFrom}:{},...T.taskIsolation!==void 0?{taskIsolation:T.taskIsolation}:{},...T.taskSourceProjectPath!==void 0?{taskSourceProjectPath:T.taskSourceProjectPath}:{},...T.taskWorktree!==void 0?{taskWorktree:T.taskWorktree}:{},...T.selectedModelId!==void 0?{selectedModelId:T.selectedModelId}:{},...T.permissionMode!==void 0?{permissionMode:T.permissionMode}:{},...T.reasoningEffort!==void 0?{reasoningEffort:T.reasoningEffort}:{},...T.serviceTier!==void 0?{serviceTier:T.serviceTier}:{},...T.responseVerbosity!==void 0?{responseVerbosity:T.responseVerbosity}:{},...T.communicationStyle!==void 0?{communicationStyle:T.communicationStyle}:{},...T.communicationStyleDigest!==void 0?{communicationStyleDigest:T.communicationStyleDigest}:{},...T.projectInstructionsDigest!==void 0?{projectInstructionsDigest:T.projectInstructionsDigest}:{},createdAt:Z,updatedAt:Z}},B=F.getSessionFilePath(G,q);return await new m(B).createExclusive([J]),F.toPublicMetadata(F.projectMetadataFromEntries([J],q,G,B))}static async assertSessionWritable(q,$){let T=await this.findSessionMetadata(q,$);if(!T)throw Error(`Session not found: ${q}`);if(T.archivedAt)throw new e(q,T.archivedBySessionId??q);return T}static async findArchivedAncestor(q,$){let T=new Set,G=q;while(G){if(T.has(G))throw Error("Session lineage contains a cycle");T.add(G),D(G);let Z=j($,G),J;try{J=await s(Z,"utf8")}catch(Q){if(Q.code==="ENOENT")return;throw Q}let B=this.projectMetadataFromEntries(this.parseStoredSession(J,G),G,$,Z);if(B.projectPath!==$)throw Error("Session lineage escapes the requested workspace");if(B.archivedAt)return{sessionId:B.sessionId,archivedAt:B.archivedAt};G=B.parentId}return}static async listSessionArchiveMembers(q,$){D(q);let T=this.resolveCatalogWorkspace($),G=await this.scanStoredSessions(T,!0,0,null);if(!G.some((B)=>B.sessionId===q))throw Error(`Session not found: ${q}`);let Z=new Set([q]),J=!0;while(J){J=!1;for(let B of G)if(B.parentId&&Z.has(B.parentId)&&!Z.has(B.sessionId))Z.add(B.sessionId),J=!0}return G.filter((B)=>Z.has(B.sessionId)).sort((B,Q)=>B.sessionId.localeCompare(Q.sessionId)).map((B)=>this.toPublicMetadata(B))}static async archiveSession(q,$){D(q);let T=this.resolveCatalogWorkspace($),G=await this.findSessionMetadata(q,T);if(!G)throw Error(`Session not found: ${q}`);if(G.archivedAt)return G;let Z=await this.listSessionArchiveMembers(q,T),J=Z.find((Q)=>Q.taskStatus==="queued"||Q.taskStatus==="running");if(J)throw new v(`Stop session ${J.sessionId} before archiving this session tree`);let B=[];try{for(let L of Z)B.push(await n.acquire(L.sessionId,T));let Q=j(T,q),H=new m(Q),O=[];return await H.appendValidated((L)=>{let V=this.projectMetadataFromEntries(L,q,T,Q);if(V.archivedAt)throw new v(`Session archive state changed concurrently: ${q}`);if(V.taskStatus==="queued"||V.taskStatus==="running")throw new v(`Stop session ${q} before archiving it`);let Y=new Date().toISOString(),U={id:y(),sessionId:q,timestamp:Y,type:"session_updated",cwd:T,gitBranch:l(T),version:c(),data:{sessionId:q,archivedAt:Y,updatedAt:Y}};return O=[...L,U],U}),this.toPublicMetadata({...this.projectMetadataFromEntries(O,q,T,Q),archivedBySessionId:q})}catch(Q){if(Q instanceof v)throw Q;if(Q instanceof p)throw new v(Q.message);throw this.sanitizeStoredSessionError(Q,q)}finally{for(let Q of B.reverse())await Q.release()}}static async unarchiveSession(q,$){D(q);let T=this.resolveCatalogWorkspace($),G=await this.findSessionMetadata(q,T);if(!G)throw Error(`Session not found: ${q}`);if(!G.archivedAt)return G;if(G.archivedBySessionId&&G.archivedBySessionId!==q)throw new v(`Unarchive ancestor ${G.archivedBySessionId} to restore session ${q}`);let Z;try{Z=await n.acquire(q,T);let J=j(T,q),B=new m(J),Q=[];return await B.appendValidated((H)=>{if(!this.projectMetadataFromEntries(H,q,T,J).archivedAt)throw new v(`Session archive state changed concurrently: ${q}`);let L=new Date().toISOString(),V={id:y(),sessionId:q,timestamp:L,type:"session_updated",cwd:T,gitBranch:l(T),version:c(),data:{sessionId:q,archivedAt:null,updatedAt:L}};return Q=[...H,V],V}),this.toPublicMetadata(this.projectMetadataFromEntries(Q,q,T,J))}catch(J){if(J instanceof v)throw J;if(J instanceof p)throw new v(J.message);throw this.sanitizeStoredSessionError(J,q)}finally{await Z?.release()}}static async updateSessionMetadata(q,$,T){if(D(q),F.validateTaskMetadataUpdate(T,q),T.taskStatus!==void 0&&!Eq.has(T.taskStatus))throw Error(`Invalid session task status: ${String(T.taskStatus)}`);if(T.taskOwnerPid!==void 0&&T.taskOwnerPid!==null&&(!Number.isInteger(T.taskOwnerPid)||T.taskOwnerPid<=0))throw Error("Session task owner PID must be a positive integer");let G=F.resolveCatalogWorkspace($);if(T.taskWorktree&&X.resolve(T.taskWorktree.workspaceRoot)!==G)throw Error("Session task worktree must match the catalog workspace");let Z=F.getSessionFilePath(G,q),J=new m(Z),B=[];try{await J.appendValidatedAsync(async(Q)=>{let H=F.getSessionCreatedEntry(Q,q);if(H.data.sessionId!==q)throw Error(`Session metadata creation record sessionId mismatch: ${q}`);if(!X.isAbsolute(H.cwd)||X.resolve(H.cwd)!==G)throw Error(`Session metadata creation record cwd mismatch: ${q}`);let O=F.projectMetadataFromEntries(Q,q,G,Z);if(O.archivedAt)throw new e(q,q);if(O.parentId){let Y=await F.findArchivedAncestor(O.parentId,G);if(Y)throw new e(q,Y.sessionId)}let L=new Date().toISOString(),V={id:y(),sessionId:q,timestamp:L,type:"session_updated",cwd:G,gitBranch:l(G),version:c(),data:{sessionId:q,...T.title!==void 0?{title:T.title}:{},...T.taskStatus!==void 0?{taskStatus:T.taskStatus}:{},...T.taskStatusReason!==void 0?{taskStatusReason:T.taskStatusReason}:{},...T.taskFailure!==void 0?{taskFailure:T.taskFailure}:{},...T.taskStartedAt!==void 0?{taskStartedAt:T.taskStartedAt}:{},...T.taskCompletedAt!==void 0?{taskCompletedAt:T.taskCompletedAt}:{},...T.taskOwnerPid!==void 0?{taskOwnerPid:T.taskOwnerPid}:{},...T.taskPromptSummary!==void 0?{taskPromptSummary:T.taskPromptSummary}:{},...T.taskDispatch!==void 0?{taskDispatch:T.taskDispatch}:{},...T.taskModelId!==void 0?{taskModelId:T.taskModelId}:{},...T.taskRetriedFrom!==void 0?{taskRetriedFrom:T.taskRetriedFrom}:{},...T.taskDelivery!==void 0?{taskDelivery:T.taskDelivery}:{},...T.taskIsolation!==void 0?{taskIsolation:T.taskIsolation}:{},...T.taskSourceProjectPath!==void 0?{taskSourceProjectPath:T.taskSourceProjectPath}:{},...T.taskWorktree!==void 0?{taskWorktree:T.taskWorktree}:{},...T.taskDiffStat!==void 0?{taskDiffStat:T.taskDiffStat}:{},...T.taskQueuePosition!==void 0?{taskQueuePosition:T.taskQueuePosition}:{},...T.taskQueueDepth!==void 0?{taskQueueDepth:T.taskQueueDepth}:{},...T.taskConcurrencyLimit!==void 0?{taskConcurrencyLimit:T.taskConcurrencyLimit}:{},...T.selectedModelId!==void 0?{selectedModelId:T.selectedModelId}:{},...T.permissionMode!==void 0?{permissionMode:T.permissionMode}:{},...T.reasoningEffort!==void 0?{reasoningEffort:T.reasoningEffort}:{},...T.serviceTier!==void 0?{serviceTier:T.serviceTier}:{},...T.responseVerbosity!==void 0?{responseVerbosity:T.responseVerbosity}:{},...T.communicationStyle!==void 0?{communicationStyle:T.communicationStyle}:{},...T.communicationStyleDigest!==void 0?{communicationStyleDigest:T.communicationStyleDigest}:{},...T.projectInstructionsDigest!==void 0?{projectInstructionsDigest:T.projectInstructionsDigest}:{},updatedAt:L}};return B=[...Q,V],V})}catch(Q){throw F.sanitizeStoredSessionError(Q,q)}return F.toPublicMetadata(F.projectMetadataFromEntries(B,q,G,Z))}static async setSessionPermissionMode(q,$,T){if(D(q),!z0(T))throw Error("Invalid session permission mode");let G=F.resolveCatalogWorkspace($),Z=await F.findSessionMetadata(q,G);if(Z?.permissionMode===T)return Z;if(Z)return F.updateSessionMetadata(q,G,{permissionMode:T});try{return await F.createSessionMetadata(q,G,{taskStatus:"completed",permissionMode:T})}catch(J){if(J.code!=="EEXIST")throw J;return F.updateSessionMetadata(q,G,{permissionMode:T})}}static async findSessionTaskWorktree(q,$){D(q);let T=F.resolveCatalogWorkspace($),G=F.getSessionFilePath(T,q);try{return(await F.readStoredSessionMetadata(G,q,T)).taskWorktree}catch(Z){if(Z.code==="ENOENT")return;throw F.sanitizeStoredSessionError(Z,q)}}static async findSessionTaskDispatch(q,$){D(q);let T=F.resolveCatalogWorkspace($),G=F.getSessionFilePath(T,q);try{return(await F.readStoredSessionMetadata(G,q,T)).taskDispatch}catch(Z){if(Z.code==="ENOENT")return;throw F.sanitizeStoredSessionError(Z,q)}}static async loadSessionFromFile(q,$,T){let G=await s(q,"utf-8"),Z=this.parseStoredSession(G,$);if(T!==void 0){if(this.projectMetadataFromEntries(Z,$,T,q).projectPath!==T)throw Error(`未找到会话: ${$}`)}return this.convertJSONLToMessages(Z)}static convertJSONLToMessages(q){let $=[],T=new Map,G=new Map,Z=new Map,J=new Map,B=new Map;for(let Q of P(q)){if(Q.type==="message_created"){let H=Q.data.role==="assistant"&&Q.data.parentMessageId?Z.get(Q.data.parentMessageId):void 0,O=H??{role:Q.data.role,content:"",...Q.data.metadata||Q.data.inboxMessageId?{metadata:{...Q.data.metadata&&typeof Q.data.metadata==="object"&&!Array.isArray(Q.data.metadata)?Q.data.metadata:{},...Q.data.inboxMessageId?{inboxMessageId:Q.data.inboxMessageId}:{}}}:{}};if(T.set(Q.data.messageId,O),G.set(Q.data.messageId,[]),!H)$.push(O)}if(Q.type==="part_created"){if(Q.data.partType==="reasoning"){let H=T.get(Q.data.messageId);if(H){let O=Q.data.payload;H.reasoningContent=(H.reasoningContent??"")+(O.text??"")}}if(Q.data.partType==="text"){let H=T.get(Q.data.messageId);if(H){let O=Q.data.payload,L=G.get(Q.data.messageId);if(L)L.push({type:"text",text:O.text??""}),H.content=jq(L);else H.content=O.text??""}}if(Q.data.partType==="image"){let H=T.get(Q.data.messageId);if(H){let O=Q.data.payload,L=G.get(Q.data.messageId);if(L&&O.dataUrl)L.push({type:"image_url",image_url:{url:O.dataUrl}}),H.content=jq(L)}}if(Q.data.partType==="tool_call"){let H=T.get(Q.data.messageId);if(H?.role!=="assistant"){if(H=Z.get(Q.data.messageId),!H)H={role:"assistant",content:"",tool_calls:[]},Z.set(Q.data.messageId,H),$.push(H)}if(H.role==="assistant"){let O=Q.data.payload,L=O.toolCallId??Q.data.partId;J.set(Q.data.partId,L),B.set(L,H),H.tool_calls??=[],H.tool_calls.push({id:L,type:"function",function:{name:O.toolName??"unknown",arguments:JSON.stringify(O.input??{})}})}}if(Q.data.partType==="tool_result"){let H=Q.data.payload,O=typeof H.error==="string"?`Error: ${H.error}`:typeof H.output==="string"?H.output:JSON.stringify(H.output??""),L=H;$.push({role:"tool",content:O,tool_call_id:J.get(Q.data.messageId)??H.toolCallId,name:H.toolName,metadata:L})}if(Q.data.partType==="summary"){let H=Q.data.payload,O=Q.data.payload;$.push({role:"system",content:H.text??"",metadata:O})}if(Q.data.partType==="subtask_ref"){let H=T.get(Q.data.messageId)??B.get(Q.data.messageId);if(H){let O=Q.data.payload,L=H.metadata??{};H.metadata={...L,subtaskRef:O}}}}}return $}static projectionDeriver(){return(q,$,T)=>{try{let G=j(T,$);return this.projectMetadataFromEntries(q,$,T,G)}catch{return null}}}static projectionDeriverForSearch(){return this.projectionDeriver()}static async scanStoredSessionsFromProjection(q,$,T=0,G=!1){try{let Z=await C0();if(!Z)return null;await r0(Z,this.projectionDeriver(),T);let J=q?Z.prepare("SELECT metadata_json, is_subagent FROM sessions WHERE project_path=?").all(q):Z.prepare("SELECT metadata_json, is_subagent FROM sessions").all(),B=[];for(let Q of J){if(!$&&Q.is_subagent===1)continue;try{let H=JSON.parse(Q.metadata_json);if(q!==void 0&&H.projectPath!==q)continue;B.push(H)}catch{}}return h0(B,G)}catch{return null}}static async scanStoredSessions(q,$=!1,T=0,G=!1){let Z=q?X.resolve(q):void 0,J=await this.scanStoredSessionsFromProjection(Z,$,T,G);if(J)return J;let B=Z?[{storagePath:V0(Z),projectPath:Z}]:await this.listAllProjectStorageDirectories(),Q=[];for(let H of B){let O;try{O=await Aq(H.storagePath)}catch(L){if(L.code==="ENOENT")continue;throw L}for(let L of O){if(!L.endsWith(".jsonl"))continue;let V=L.slice(0,-6),Y=X.join(H.storagePath,L);try{let U=await this.readStoredSessionMetadata(Y,V,H.projectPath);if(Z!==void 0&&U.projectPath!==Z){u0.warn(`[SessionService] Skipping out-of-scope session transcript: ${V}`);continue}if(!$&&U.relationType==="subagent")continue;Q.push(U)}catch(U){let b=U.code;if(b==="ENOENT")continue;if(b)throw U;u0.warn(`[SessionService] Skipping invalid session transcript: ${V}`)}}}return h0(Q,G)}static async listAllProjectStorageDirectories(){let q=X.join(G0(),"projects"),$;try{$=await Aq(q,{withFileTypes:!0,encoding:"utf8"})}catch(T){if(T.code==="ENOENT")return[];throw T}return $.filter((T)=>T.isDirectory()).map((T)=>({storagePath:X.join(q,T.name),projectPath:Sq(T.name)}))}static async readStoredSessionMetadata(q,$,T){let G=await s(q,"utf-8"),Z=this.parseStoredSession(G,$);return this.reconcileInterruptedTask(this.projectMetadataFromEntries(Z,$,T,q))}static async reconcileInterruptedTask(q){let $=q.taskOwnerPid;if(q.taskStatus!=="running"||$===void 0||wq($))return q;let T;try{T=await n.acquire(q.sessionId,q.projectPath)}catch(J){if(!(J instanceof p))throw J;let B=await s(q.filePath,"utf-8");return this.projectMetadataFromEntries(this.parseStoredSession(B,q.sessionId),q.sessionId,q.projectPath,q.filePath)}let G=new m(q.filePath),Z;try{try{await G.appendValidated((J)=>{let B=this.projectMetadataFromEntries(J,q.sessionId,q.projectPath,q.filePath);if(B.taskStatus!=="running"||B.taskOwnerPid!==$||wq($))throw new a0;let Q=new Date().toISOString(),H={id:y(),sessionId:q.sessionId,timestamp:Q,type:"session_updated",cwd:q.projectPath,gitBranch:l(q.projectPath),version:c(),data:{sessionId:q.sessionId,taskStatus:"interrupted",taskStatusReason:"Task owner process exited before completion",taskCompletedAt:Q,taskOwnerPid:null,taskQueuePosition:null,taskQueueDepth:null,updatedAt:Q}};return Z=[...J,H],H})}catch(J){if(!(J instanceof a0))throw J}if(!Z){let J=await s(q.filePath,"utf-8");Z=this.parseStoredSession(J,q.sessionId)}return this.projectMetadataFromEntries(Z,q.sessionId,q.projectPath,q.filePath)}finally{await T.release()}}static projectMetadataFromEntries(q,$,T,G){if(q.length===0)throw Error(`Empty session transcript: ${$}`);let Z=this.getSessionCreatedEntry(q,$),J=q.reduce((g,t)=>t.type==="session_updated"?{...g,...t.data}:g,{...Z.data}),B=P(q),Q=Vq(Oq(B)),H=B.filter((g)=>g.type==="message_created"&&["user","assistant"].includes(g.data.role)).length,O=B.some((g)=>g.type==="part_created"&&g.data.partType==="tool_result"&&typeof g.data.payload.error==="string"),V=(Eq.has(J.taskStatus)?J.taskStatus:void 0)??(O?"failed":"completed"),Y=typeof J.taskOwnerPid==="number"&&Number.isInteger(J.taskOwnerPid)&&J.taskOwnerPid>0?J.taskOwnerPid:void 0,U=o0.has(J.taskIsolation)?J.taskIsolation:void 0,b=typeof J.taskSourceProjectPath==="string"&&X.isAbsolute(J.taskSourceProjectPath)?X.resolve(J.taskSourceProjectPath):void 0,z=Z.cwd;if(z!==void 0&&!X.isAbsolute(z))throw Error(`Session catalog cwd must be absolute: ${$}`);let w=z===void 0?T:X.resolve(z),C=bq(J.taskWorktree),I=C?.sessionId===$&&X.resolve(C.workspaceRoot)===w?C:void 0,o=fq(J.taskDiffStat),_=gq(J.taskDispatch),u=typeof J.taskModelId==="string"&&J.taskModelId.trim()?J.taskModelId:_?.modelId,R=typeof J.selectedModelId==="string"&&J.selectedModelId.trim()?J.selectedModelId:u,M=z0(J.permissionMode)?J.permissionMode:_?.permissionMode,E=B0(J.reasoningEffort)?J.reasoningEffort:_?.reasoningEffort,N=Q0(J.serviceTier)?J.serviceTier:_?.serviceTier,a=Z0(J.responseVerbosity)?J.responseVerbosity:_?.responseVerbosity,D0=H0(J.communicationStyle)?J.communicationStyle:_?.communicationStyle,t0=Object.hasOwn(J,"communicationStyleDigest")?typeof J.communicationStyleDigest==="string"&&/^[a-f0-9]{64}$/.test(J.communicationStyleDigest)?J.communicationStyleDigest:void 0:D0===_?.communicationStyle?_?.communicationStyleDigest:void 0,s0=Object.hasOwn(J,"projectInstructionsDigest")?typeof J.projectInstructionsDigest==="string"&&/^[a-f0-9]{64}$/.test(J.projectInstructionsDigest)?J.projectInstructionsDigest:void 0:_?.projectInstructionsDigest,e0=pq(J.archivedAt)?J.archivedAt:void 0,qq=yq(J.taskRetriedFrom),$q=kq(J.taskDelivery),Tq=typeof J.taskQueuePosition==="number"&&Number.isInteger(J.taskQueuePosition)&&J.taskQueuePosition>0?J.taskQueuePosition:void 0,R0=typeof J.taskQueueDepth==="number"&&Number.isInteger(J.taskQueueDepth)&&J.taskQueueDepth>=0?J.taskQueueDepth:void 0,M0=typeof J.taskConcurrencyLimit==="number"&&Number.isInteger(J.taskConcurrencyLimit)&&J.taskConcurrencyLimit>0?J.taskConcurrencyLimit:void 0,L0=b0(J.taskFailure)?J.taskFailure:V==="failed"&&typeof J.taskStatusReason==="string"?Xq(J.taskStatusReason):void 0;return{sessionId:$,projectPath:w,gitBranch:Z.gitBranch,rootId:J.rootId||$,parentId:J.parentId,relationType:J.relationType,resumedFrom:J.resumedFrom,rootAgentId:J.rootAgentId,resumeDepth:J.resumeDepth,title:J.title,agentType:J.agentType,model:J.model,selectedModelId:R,permissionMode:M,reasoningEffort:E,serviceTier:N,responseVerbosity:a,communicationStyle:D0,communicationStyleDigest:t0,projectInstructionsDigest:s0,pendingInteraction:Q,taskStatus:V,taskStatusReason:L0?.message??(typeof J.taskStatusReason==="string"?J.taskStatusReason:void 0),taskFailure:L0,taskStartedAt:typeof J.taskStartedAt==="string"?J.taskStartedAt:void 0,taskCompletedAt:typeof J.taskCompletedAt==="string"?J.taskCompletedAt:void 0,taskPromptSummary:typeof J.taskPromptSummary==="string"?J.taskPromptSummary:void 0,taskModelId:u,taskRetryAvailable:_!==void 0,taskRetriedFrom:qq,taskDelivery:$q,taskIsolation:U,taskSourceProjectPath:b,taskWorktreePath:I?.worktreeRoot,taskWorktreeBranch:I?.branch,taskBaseCommit:I?.baseCommit,taskDiffStat:o,taskQueuePosition:Tq,taskQueueDepth:R0,taskConcurrencyLimit:M0,archivedAt:e0,taskOwnerPid:Y,taskWorktree:I,taskDispatch:_,messageCount:H,firstMessageTime:q[0].timestamp,lastMessageTime:q.at(-1).timestamp,hasErrors:O||V==="failed",filePath:G}}static toPublicMetadata(q){let{filePath:$,taskOwnerPid:T,taskWorktree:G,taskDispatch:Z,...J}=q;return J}static getSessionFilePath(q,$){return j(q,$)}static getSessionCreatedEntry(q,$){let T=q.find((G)=>G.type==="session_created");if(!T)throw new cq($);return T}static resolveCatalogWorkspace(q){if(!X.isAbsolute(q))throw Error("Session catalog cwd must be absolute");return X.resolve(q)}static validateSessionWorkspace(q,$,T){let G=this.getSessionCreatedEntry(q,$);if(G.data.sessionId!==$)throw Error(`Session creation record sessionId mismatch: ${$}`);if(!X.isAbsolute(G.cwd)||X.resolve(G.cwd)!==T)throw Error(`Session creation record cwd mismatch: ${$}`)}static resolveForkWorkspace(q){if(!X.isAbsolute(q))throw Error("Fork workspace paths must be absolute");return X.resolve(q)}static parseStoredSession(q,$){return uq(q,`session ${$}`)}static isCorruptSessionJSONLError(q){return q instanceof Error&&q.message.startsWith("Invalid session JSONL ")}static sanitizeStoredSessionError(q,$){if(!this.isCorruptSessionJSONLError(q)||!(q instanceof Error))return q;let T=q.message.match(/ at line (\d+)$/)?.[1];return Error(`Invalid session JSONL in session ${$}${T?` at line ${T}`:""}`,{cause:q.cause})}static async readStableSessionSnapshot(q,$,T=3){for(let G=0;G<T;G+=1){let Z=await J0.stat(q),J=await J0.readFile(q),B=this.parseStoredSession(J,$),Q=await J0.stat(q);if(Z.size===Q.size&&Z.mtimeNs===Q.mtimeNs&&Z.dev===Q.dev&&Z.ino===Q.ino)return B}throw Error("Session changed while creating fork; retry the operation")}}function jq(q){if(q.length===1&&q[0]?.type==="text")return q[0].text;return[...q]}
99
- export{k0 as bb,p as cb,n as db,Oq as eb,$T as fb,Xq as gb,h as hb,U0 as ib,g0 as jb,y0 as kb,_T as lb,CT as mb,Cq as nb,x0 as ob,ET as pb,aT as qb,tT as rb,cq as sb,e as tb,v as ub,F as vb};
@@ -1,10 +0,0 @@
1
- import{a as Q,b as R,c as T,d as W}from"./chunk-wa7v7akz.js";import"./chunk-rw6gv740.js";import"./chunk-w154jyby.js";import"./chunk-76d7p64v.js";import"./chunk-1cvr3qtd.js";import"./chunk-g9n211y4.js";import"./chunk-jqyvnmfr.js";import"./chunk-sf9pe2n6.js";import"./chunk-47dsd91k.js";import"./chunk-k0p9ecgc.js";import"./chunk-g4q26d9a.js";import{pc as M}from"./chunk-r083b7vn.js";import"./chunk-yt39kfc6.js";import"./chunk-bnrce0hg.js";import"./chunk-w4zvftrw.js";import"./chunk-hjsm6ejs.js";import"./chunk-b4n34hrn.js";import"./chunk-v1p80wvh.js";import"./chunk-m4htdpr9.js";import"./chunk-4y28hykg.js";import"./chunk-kcwq1e7h.js";import"./chunk-thvwt4kc.js";import"./chunk-p4j4aawd.js";import"./chunk-6cv4gddv.js";import"./chunk-0rp2ck29.js";import"./chunk-xkp4ph6v.js";import"./chunk-1kg9r8xp.js";import"./chunk-c9tzf9r5.js";import"./chunk-n9khyme2.js";import"./chunk-7xm3vjkz.js";import{Je as J}from"./chunk-nfmsn652.js";import"./chunk-kcs3xa8f.js";import"./chunk-vvbd9fb5.js";import"./chunk-frcg8gea.js";import"./chunk-c2rhwxyn.js";import b from"chalk";import H from"open";var $=`
2
- ____ _ _
3
- | __ )| | __ _ __| | ___
4
- | _ \\| |/ _\` |/ _\` |/ _ \\
5
- | |_) | | (_| | (_| | __/
6
- |____/|_|\\__,_|\\__,_|\\___|
7
- `,E={command:"web",describe:"Start Blade server and open web interface",builder:Q,handler:async(X)=>{let F=R(X);if(await M(),!process.env.BLADE_SERVER_PASSWORD)console.log(b.yellow("[WARN] BLADE_SERVER_PASSWORD is not set; server is unsecured.")),console.log(b.gray(` Set this environment variable to enable Basic Auth.
8
- `));let C=await W.listenAsync(F);if(console.log(b.cyan($)),console.log(b.gray(` v${J()}
9
- `)),F.hostname==="0.0.0.0"){let q=`http://localhost:${C.port}`;console.log(b.blue.bold(" Local access: "),b.white(q));let Y=T();for(let Z of Y)console.log(b.blue.bold(" Network access: "),b.white(`http://${Z}:${C.port}`));H(q).catch(()=>{})}else{let q=C.url.toString();console.log(b.blue.bold(" Web interface: "),b.white(q)),H(q).catch(()=>{})}console.log(""),console.log(b.gray(` Press Ctrl+C to stop the server.
10
- `)),await new Promise(()=>{}),await C.stop()}};export{E as webCommand};