opencandle 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +34 -21
  2. package/dist/cli-main.d.ts +1 -0
  3. package/dist/cli-main.js +200 -0
  4. package/dist/cli-main.js.map +1 -0
  5. package/dist/cli.d.ts +1 -1
  6. package/dist/cli.js +13 -229
  7. package/dist/cli.js.map +1 -1
  8. package/dist/doctor/cli-command.d.ts +1 -0
  9. package/dist/doctor/cli-command.js +69 -0
  10. package/dist/doctor/cli-command.js.map +1 -0
  11. package/dist/doctor/render.d.ts +2 -0
  12. package/dist/doctor/render.js +32 -0
  13. package/dist/doctor/render.js.map +1 -0
  14. package/dist/doctor/report.d.ts +63 -0
  15. package/dist/doctor/report.js +500 -0
  16. package/dist/doctor/report.js.map +1 -0
  17. package/dist/infra/native-dependencies.d.ts +8 -0
  18. package/dist/infra/native-dependencies.js +49 -0
  19. package/dist/infra/native-dependencies.js.map +1 -1
  20. package/dist/infra/node-version.js +2 -5
  21. package/dist/infra/node-version.js.map +1 -1
  22. package/dist/monitor.d.ts +1 -1
  23. package/dist/monitor.js +2 -1
  24. package/dist/monitor.js.map +1 -1
  25. package/dist/onboarding/provider-status.d.ts +3 -5
  26. package/dist/onboarding/provider-status.js +5 -34
  27. package/dist/onboarding/provider-status.js.map +1 -1
  28. package/dist/pi/session.d.ts +0 -1
  29. package/dist/pi/session.js +2 -1
  30. package/dist/pi/session.js.map +1 -1
  31. package/dist/prompts/policy-cards.js +8 -4
  32. package/dist/prompts/policy-cards.js.map +1 -1
  33. package/dist/prompts/workflow-prompts.js +10 -6
  34. package/dist/prompts/workflow-prompts.js.map +1 -1
  35. package/dist/providers/external-tool-command.d.ts +17 -0
  36. package/dist/providers/external-tool-command.js +114 -0
  37. package/dist/providers/external-tool-command.js.map +1 -0
  38. package/dist/providers/reddit-cli.d.ts +2 -6
  39. package/dist/providers/reddit-cli.js +4 -33
  40. package/dist/providers/reddit-cli.js.map +1 -1
  41. package/dist/providers/twitter-cli.d.ts +2 -6
  42. package/dist/providers/twitter-cli.js +4 -33
  43. package/dist/providers/twitter-cli.js.map +1 -1
  44. package/dist/routing/classify-intent.js +7 -3
  45. package/dist/routing/classify-intent.js.map +1 -1
  46. package/dist/routing/planning.js +9 -6
  47. package/dist/routing/planning.js.map +1 -1
  48. package/dist/routing/router.js +7 -3
  49. package/dist/routing/router.js.map +1 -1
  50. package/gui/server/http-routes.ts +419 -0
  51. package/gui/server/server.ts +29 -292
  52. package/gui/web/dist/assets/CatalogOverlay-CCVKwBUB.js +1 -0
  53. package/gui/web/dist/assets/index-Dm4Aom2_.js +69 -0
  54. package/gui/web/dist/assets/{index-hwbx24a5.css → index-UzZUg3dx.css} +1 -1
  55. package/gui/web/dist/index.html +2 -2
  56. package/package.json +13 -9
  57. package/src/cli-main.ts +233 -0
  58. package/src/cli.ts +14 -267
  59. package/src/doctor/cli-command.ts +83 -0
  60. package/src/doctor/render.ts +37 -0
  61. package/src/doctor/report.ts +638 -0
  62. package/src/infra/native-dependencies.ts +67 -0
  63. package/src/infra/node-version.ts +2 -5
  64. package/src/monitor.ts +3 -1
  65. package/src/onboarding/provider-status.ts +10 -38
  66. package/src/pi/session.ts +2 -1
  67. package/src/prompts/policy-cards.ts +12 -4
  68. package/src/prompts/workflow-prompts.ts +13 -6
  69. package/src/providers/external-tool-command.ts +164 -0
  70. package/src/providers/reddit-cli.ts +10 -41
  71. package/src/providers/twitter-cli.ts +10 -41
  72. package/src/routing/classify-intent.ts +11 -6
  73. package/src/routing/planning.ts +15 -10
  74. package/src/routing/router.ts +11 -6
  75. package/gui/web/dist/assets/CatalogOverlay-CgeY5Pkp.js +0 -1
  76. package/gui/web/dist/assets/index-C6W_2eAn.js +0 -69
@@ -1 +1 @@
1
- *,:before,:after,::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:#3b82f680;--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:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter,system-ui,-apple-system,ui-sans-serif,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family: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:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-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{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}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{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{box-sizing:border-box}html,body{height:100dvh;overflow:hidden}body{background:hsl(var(--tw-background));min-width:320px;color:hsl(var(--tw-foreground));-webkit-tap-highlight-color:hsl(var(--tw-foreground) / .08);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}#root{height:100dvh}button,input,select,textarea{font:inherit}button{cursor:pointer;touch-action:manipulation}button:disabled{cursor:not-allowed}:focus-visible{outline:2px solid hsl(var(--tw-foreground));outline-offset:2px}code{border:1px solid hsl(var(--tw-border));background:hsl(var(--tw-secondary));color:hsl(var(--tw-foreground));border-radius:4px;padding:1px 5px;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%;margin-left:auto;margin-right:auto;padding-left:2rem;padding-right:2rem}@media (width>=1400px){.container{max-width:1400px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:#1118271a;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.rich-text>*+*{margin-top:.5rem}.rich-text p,.rich-text ul{margin:0}.rich-text ul{padding-left:1.125rem}.rich-text li+li{margin-top:.25rem}.rich-text h3,.rich-text h4,.rich-text h5{color:hsl(var(--tw-foreground));margin:.25rem 0 0;font-size:.95rem;font-weight:600}.rich-text hr{border:0;border-top:1px solid hsl(var(--tw-border))}.rich-text .rich-table{width:100%;max-width:100%;display:block;overflow-x:auto}.rich-text table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13px}.rich-text th,.rich-text td{border:1px solid hsl(var(--tw-border));text-align:left;vertical-align:top;padding:6px 8px}.rich-text th{background:hsl(var(--tw-secondary));color:hsl(var(--tw-foreground));font-weight:600}.chat-markdown{color:hsl(var(--tw-foreground) / .86);font-size:.8125rem;line-height:1.375rem}.chat-markdown>*+*{margin-top:1.25rem}.chat-markdown p,.chat-markdown ul{margin:0}.chat-markdown ul{color:hsl(var(--tw-foreground) / .82);padding-left:1.75rem;list-style:outside}.chat-markdown p+ul{margin-top:1.5rem}.chat-markdown ul+p{margin-top:2rem}.chat-markdown .rich-table+p{margin-top:2.25rem}.chat-markdown hr{margin:2rem 0 1.75rem}.chat-markdown li{padding-left:.375rem;line-height:1.375rem}.chat-markdown li+li{margin-top:.75rem}.chat-markdown li::marker{color:hsl(var(--tw-muted-foreground))}.chat-markdown strong{color:hsl(var(--tw-foreground));font-weight:500}.chat-markdown h3,.chat-markdown h4,.chat-markdown h5{color:hsl(var(--tw-foreground));margin:1.5rem 0 .5rem;font-weight:500;line-height:1.35}.chat-markdown h3{font-size:1rem}.chat-markdown h4,.chat-markdown h5{font-size:.875rem}.chat-markdown code{border-color:hsl(var(--tw-border));background:hsl(var(--tw-secondary));color:hsl(var(--tw-foreground));border-radius:.5rem;padding:.125rem .375rem;font-size:.875rem;font-weight:400}.chat-markdown .rich-table{border:1px solid hsl(var(--tw-border));background:hsl(var(--tw-background));width:100%;max-width:100%;display:block;overflow-x:auto}.chat-markdown table{border-collapse:collapse;width:100%;font-size:.8125rem;line-height:1.375rem}.chat-markdown th,.chat-markdown td{border:1px solid hsl(var(--tw-border));text-align:left;vertical-align:top;padding:.625rem .75rem}.chat-markdown th{background:hsl(var(--tw-tertiary));color:hsl(var(--tw-muted-foreground));font-size:.75rem;font-weight:500}.tool-shimmer-base{color:hsl(var(--tw-muted-foreground))}.tool-shimmer{background:linear-gradient(90deg, hsl(var(--tw-muted-foreground)) 0%, hsl(var(--tw-muted-foreground)) 40%, hsl(var(--tw-foreground)) 50%, hsl(var(--tw-muted-foreground)) 60%, hsl(var(--tw-muted-foreground)) 100%);color:#0000;-webkit-text-fill-color:transparent;background-size:220% 100%;-webkit-background-clip:text;background-clip:text;animation:1.6s linear infinite tool-shimmer-sweep}@keyframes tool-shimmer-sweep{0%{background-position:120% 0}to{background-position:-120% 0}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-x-2{left:.5rem;right:.5rem}.inset-y-0{top:0;bottom:0}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2\.5{left:.625rem}.left-3{left:.75rem}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-2\.5{right:.625rem}.right-3{right:.75rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-2\.5{top:.625rem}.top-3{top:.75rem}.top-\[-3px\]{top:-3px}.top-\[46\%\]{top:46%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[60\]{z-index:60}.z-\[90\]{z-index:90}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.-mr-1{margin-right:-.25rem}.-mr-1\.5{margin-right:-.375rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-\[var\(--popover-offset\)\]{margin-bottom:var(--popover-offset)}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-\[var\(--popover-offset\)\]{margin-top:var(--popover-offset)}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-1\.5{width:.375rem;height:.375rem}.size-2{width:.5rem;height:.5rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-9{width:2.25rem;height:2.25rem}.size-\[7px\]{width:7px;height:7px}.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-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.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-\[11px\]{height:11px}.h-\[22px\]{height:22px}.h-\[5px\]{height:5px}.h-\[70px\]{height:70px}.h-\[min\(88dvh\,calc\(100dvh-64px\)\)\]{height:min(88dvh,100dvh - 64px)}.h-\[min\(90dvh\,calc\(100dvh-40px\)\)\]{height:min(90dvh,100dvh - 40px)}.h-auto{height:auto}.h-full{height:100%}.max-h-32{max-height:8rem}.max-h-60{max-height:15rem}.max-h-72{max-height:18rem}.max-h-\[280px\]{max-height:280px}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[min\(84dvh\,720px\)\]{max-height:min(84dvh,720px)}.max-h-\[min\(88dvh\,calc\(100dvh-64px\)\)\]{max-height:min(88dvh,100dvh - 64px)}.max-h-screen{max-height:100vh}.min-h-0{min-height:0}.min-h-9{min-height:2.25rem}.min-h-\[120px\]{min-height:120px}.min-h-\[60px\]{min-height:60px}.min-h-\[68px\]{min-height:68px}.min-h-\[80px\]{min-height:80px}.w-0\.5{width:.125rem}.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-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[260px\]{width:260px}.w-\[280px\]{width:280px}.w-\[2px\]{width:2px}.w-\[90px\]{width:90px}.w-\[calc\(100vw-32px\)\]{width:calc(100vw - 32px)}.w-\[min\(520px\,42vw\)\]{width:min(520px,42vw)}.w-fit{width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.min-w-9{min-width:2.25rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[160px\]{min-width:160px}.min-w-\[80px\]{min-width:80px}.max-w-3xl{max-width:48rem}.max-w-\[1040px\]{max-width:1040px}.max-w-\[120px\]{max-width:120px}.max-w-\[1240px\]{max-width:1240px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[320px\]{max-width:320px}.max-w-\[420px\]{max-width:420px}.max-w-\[520px\]{max-width:520px}.max-w-\[560px\]{max-width:560px}.max-w-\[720px\]{max-width:720px}.max-w-\[760px\]{max-width:760px}.max-w-\[780px\]{max-width:780px}.max-w-\[920px\]{max-width:920px}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-\[min\(640px\,86\%\)\]{max-width:min(640px,86%)}.max-w-\[min\(920px\,100\%\)\]{max-width:min(920px,100%)}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(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)) skewX(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)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in-once{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in-once{animation:.28s ease-out forwards fade-in-once}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}.animate-ping{animation:1s cubic-bezier(0,0,.2,1) infinite ping}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[1fr_auto_auto_auto\]{grid-template-columns:1fr auto auto auto}.grid-cols-\[20px_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:20px auto minmax(0,1fr) auto}.grid-cols-\[20px_minmax\(0\,1fr\)\]{grid-template-columns:20px minmax(0,1fr)}.grid-cols-\[20px_minmax\(0\,1fr\)_auto\]{grid-template-columns:20px minmax(0,1fr) auto}.grid-cols-\[28px_minmax\(0\,1fr\)\]{grid-template-columns:28px minmax(0,1fr)}.grid-cols-\[90px_minmax\(0\,1fr\)\]{grid-template-columns:90px minmax(0,1fr)}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-0{gap:0}.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-3\.5{gap:.875rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-3{row-gap:.75rem}.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-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))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:hsl(var(--tw-border) / var(--tw-divide-opacity,1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:calc(var(--radius) + 8px)}.rounded-\[4px\]{border-radius:4px}.rounded-\[5px\]{border-radius:5px}.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:calc(var(--radius) + 4px)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-t-2xl{border-top-left-radius:calc(var(--radius) + 8px);border-top-right-radius:calc(var(--radius) + 8px)}.rounded-t-xl{border-top-left-radius:calc(var(--radius) + 4px);border-top-right-radius:calc(var(--radius) + 4px)}.border{border-width:1px}.border-0{border-width:0}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-700\/40{border-color:#b4530966}.border-border{--tw-border-opacity:1;border-color:hsl(var(--tw-border) / var(--tw-border-opacity,1))}.border-border\/70{border-color:hsl(var(--tw-border) / .7)}.border-destructive{--tw-border-opacity:1;border-color:hsl(var(--tw-destructive) / var(--tw-border-opacity,1))}.border-destructive\/30{border-color:hsl(var(--tw-destructive) / .3)}.border-destructive\/40{border-color:hsl(var(--tw-destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--tw-destructive) / .5)}.border-foreground{--tw-border-opacity:1;border-color:hsl(var(--tw-foreground) / var(--tw-border-opacity,1))}.border-success\/30{border-color:hsl(var(--tw-success) / .3)}.border-transparent{border-color:#0000}.border-warning\/30{border-color:hsl(var(--tw-warning) / .3)}.bg-amber-100\/70{background-color:#fef3c7b3}.bg-background{--tw-bg-opacity:1;background-color:hsl(var(--tw-background) / var(--tw-bg-opacity,1))}.bg-border{--tw-bg-opacity:1;background-color:hsl(var(--tw-border) / var(--tw-bg-opacity,1))}.bg-brand{--tw-bg-opacity:1;background-color:hsl(var(--tw-brand) / var(--tw-bg-opacity,1))}.bg-card{--tw-bg-opacity:1;background-color:hsl(var(--tw-card) / var(--tw-bg-opacity,1))}.bg-destructive{--tw-bg-opacity:1;background-color:hsl(var(--tw-destructive) / var(--tw-bg-opacity,1))}.bg-destructive\/10{background-color:hsl(var(--tw-destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--tw-destructive) / .05)}.bg-foreground{--tw-bg-opacity:1;background-color:hsl(var(--tw-foreground) / var(--tw-bg-opacity,1))}.bg-foreground\/25{background-color:hsl(var(--tw-foreground) / .25)}.bg-foreground\/30{background-color:hsl(var(--tw-foreground) / .3)}.bg-foreground\/40{background-color:hsl(var(--tw-foreground) / .4)}.bg-hard{--tw-bg-opacity:1;background-color:hsl(var(--tw-hard) / var(--tw-bg-opacity,1))}.bg-info{--tw-bg-opacity:1;background-color:hsl(var(--tw-info) / var(--tw-bg-opacity,1))}.bg-muted-foreground\/40{background-color:hsl(var(--tw-muted-foreground) / .4)}.bg-muted\/15{background-color:hsl(var(--tw-muted) / .15)}.bg-secondary{--tw-bg-opacity:1;background-color:hsl(var(--tw-secondary) / var(--tw-bg-opacity,1))}.bg-secondary\/35{background-color:hsl(var(--tw-secondary) / .35)}.bg-secondary\/50{background-color:hsl(var(--tw-secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--tw-secondary) / .6)}.bg-success{--tw-bg-opacity:1;background-color:hsl(var(--tw-success) / var(--tw-bg-opacity,1))}.bg-success\/10{background-color:hsl(var(--tw-success) / .1)}.bg-tertiary{--tw-bg-opacity:1;background-color:hsl(var(--tw-tertiary) / var(--tw-bg-opacity,1))}.bg-transparent{background-color:#0000}.bg-warning{--tw-bg-opacity:1;background-color:hsl(var(--tw-warning) / var(--tw-bg-opacity,1))}.bg-warning\/10{background-color:hsl(var(--tw-warning) / .1)}.bg-warning\/15{background-color:hsl(var(--tw-warning) / .15)}.fill-muted-foreground{fill:hsl(var(--tw-muted-foreground) / 1)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.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}.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-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pl-4{padding-left:1rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-7{padding-right:1.75rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-1{padding-top:.25rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Inter,system-ui,-apple-system,ui-sans-serif,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{letter-spacing:-.015em;font-size:1.375rem;line-height:1.75rem}.text-3xl{letter-spacing:-.02em;font-size:1.875rem;line-height:2.25rem}.text-\[0\.7rem\]{font-size:.7rem}.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-\[17px\]{font-size:17px}.text-\[22px\]{font-size:22px}.text-\[28px\]{font-size:28px}.text-\[2rem\]{font-size:2rem}.text-\[32px\]{font-size:32px}.text-\[3rem\]{font-size:3rem}.text-base{letter-spacing:0;font-size:.875rem;line-height:1.5rem}.text-lg{letter-spacing:-.005em;font-size:1rem;line-height:1.5rem}.text-sm{letter-spacing:0;font-size:.8125rem;line-height:1.25rem}.text-xl{letter-spacing:-.01em;font-size:1.125rem;line-height:1.5rem}.text-xs{letter-spacing:0;font-size:.75rem;line-height:1rem}.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}.normal-case{text-transform:none}.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\.65rem\]{line-height:1.65rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-normal{letter-spacing:0}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-background{--tw-text-opacity:1;color:hsl(var(--tw-background) / var(--tw-text-opacity,1))}.text-brand-foreground{--tw-text-opacity:1;color:hsl(var(--tw-brand-foreground) / var(--tw-text-opacity,1))}.text-card-foreground{--tw-text-opacity:1;color:hsl(var(--tw-card-foreground) / var(--tw-text-opacity,1))}.text-destructive{--tw-text-opacity:1;color:hsl(var(--tw-destructive) / var(--tw-text-opacity,1))}.text-destructive-foreground{--tw-text-opacity:1;color:hsl(var(--tw-destructive-foreground) / var(--tw-text-opacity,1))}.text-foreground{--tw-text-opacity:1;color:hsl(var(--tw-foreground) / var(--tw-text-opacity,1))}.text-foreground\/40{color:hsl(var(--tw-foreground) / .4)}.text-foreground\/70{color:hsl(var(--tw-foreground) / .7)}.text-foreground\/80{color:hsl(var(--tw-foreground) / .8)}.text-info{--tw-text-opacity:1;color:hsl(var(--tw-info) / var(--tw-text-opacity,1))}.text-muted-foreground{--tw-text-opacity:1;color:hsl(var(--tw-muted-foreground) / var(--tw-text-opacity,1))}.text-muted-foreground\/70{color:hsl(var(--tw-muted-foreground) / .7)}.text-muted-foreground\/80{color:hsl(var(--tw-muted-foreground) / .8)}.text-success{--tw-text-opacity:1;color:hsl(var(--tw-success) / var(--tw-text-opacity,1))}.text-warning{--tw-text-opacity:1;color:hsl(var(--tw-warning) / var(--tw-text-opacity,1))}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-subtle-md{--tw-shadow:var(--shadow-subtle-md);--tw-shadow-colored:var(--shadow-subtle-md);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-subtle-sm{--tw-shadow:var(--shadow-subtle-sm);--tw-shadow-colored:var(--shadow-subtle-sm);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-subtle-xs{--tw-shadow:var(--shadow-subtle-xs);--tw-shadow-colored:var(--shadow-subtle-xs);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.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-2{--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)}.ring-inset{--tw-ring-inset:inset}.ring-card{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-card) / var(--tw-ring-opacity,1))}.ring-foreground\/10{--tw-ring-color:hsl(var(--tw-foreground) / .1)}.ring-secondary{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-secondary) / var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}@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{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.fade-in-0{--tw-enter-opacity:0}.zoom-in-95{--tw-enter-scale:.95}.slide-in-from-right{--tw-enter-translate-x:100%}.duration-200{animation-duration:.2s}.running{animation-play-state:running}.paused{animation-play-state:paused}.\[--button-icon-size\:14px\]{--button-icon-size:14px}.\[--button-icon-size\:15px\]{--button-icon-size:15px}.\[--button-icon-size\:16px\]{--button-icon-size:16px}.\[--button-icon-size\:17px\]{--button-icon-size:17px}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--tw-background:0 0% 100%;--tw-foreground:240 6% 10%;--tw-secondary:240 5% 96%;--tw-secondary-foreground:240 6% 10%;--tw-tertiary:240 5% 92%;--tw-tertiary-foreground:240 6% 10%;--tw-card:0 0% 100%;--tw-card-foreground:240 6% 10%;--tw-popover:0 0% 100%;--tw-popover-foreground:240 6% 10%;--tw-muted:240 5% 96%;--tw-muted-foreground:240 4% 46%;--tw-accent:142 71% 35%;--tw-accent-foreground:0 0% 100%;--tw-brand:240 6% 10%;--tw-brand-foreground:0 0% 100%;--tw-destructive:0 84% 60%;--tw-destructive-foreground:0 0% 100%;--tw-success:142 71% 35%;--tw-warning:35 92% 45%;--tw-info:217 91% 60%;--tw-border:240 6% 90%;--tw-soft:240 5% 96%;--tw-hard:240 5% 84%;--tw-input:240 6% 90%;--tw-ring:240 6% 10%;--shadow-subtle-xs:0 1px 2px #0f0f0f0a;--shadow-subtle-sm:0 4px 12px #0f0f0f0f;--shadow-subtle-md:0 16px 32px #0f0f0f14;--radius:8px;font-family:Inter,system-ui,-apple-system,Segoe UI,Helvetica Neue,sans-serif}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.placeholder\:text-muted-foreground::placeholder{--tw-text-opacity:1;color:hsl(var(--tw-muted-foreground) / var(--tw-text-opacity,1))}.first\:pt-1:first-child{padding-top:.25rem}.last\:mr-0:last-child{margin-right:0}.last\:border-0:last-child{border-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:border-foreground\/40:focus-within{border-color:hsl(var(--tw-foreground) / .4)}.focus-within\:bg-tertiary:focus-within{--tw-bg-opacity:1;background-color:hsl(var(--tw-tertiary) / var(--tw-bg-opacity,1))}.focus-within\:ring-2: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(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-within\:ring-ring:focus-within{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-ring) / var(--tw-ring-opacity,1))}.focus-within\:ring-offset-2:focus-within{--tw-ring-offset-width:2px}.focus-within\:ring-offset-background:focus-within{--tw-ring-offset-color:hsl(var(--tw-background) / 1)}.hover\:border-border:hover{--tw-border-opacity:1;border-color:hsl(var(--tw-border) / var(--tw-border-opacity,1))}.hover\:bg-card:hover{--tw-bg-opacity:1;background-color:hsl(var(--tw-card) / var(--tw-bg-opacity,1))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--tw-destructive) / .1)}.hover\:bg-secondary:hover{--tw-bg-opacity:1;background-color:hsl(var(--tw-secondary) / var(--tw-bg-opacity,1))}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--tw-secondary) / .6)}.hover\:bg-tertiary:hover{--tw-bg-opacity:1;background-color:hsl(var(--tw-tertiary) / var(--tw-bg-opacity,1))}.hover\:text-foreground:hover{--tw-text-opacity:1;color:hsl(var(--tw-foreground) / var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.focus\:opacity-100:focus{opacity:1}.focus-visible\:outline-none:focus-visible{outline-offset:2px;outline:2px solid #0000}.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-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-ring:focus-visible{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-ring) / 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-background:focus-visible{--tw-ring-offset-color:hsl(var(--tw-background) / 1)}.focus-visible\:ring-offset-card:focus-visible{--tw-ring-offset-color:hsl(var(--tw-card) / 1)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group[open] .group-open\:rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x:.125rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:text-destructive-foreground\/80{color:hsl(var(--tw-destructive-foreground) / .8)}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{--tw-text-opacity:1;color:hsl(var(--tw-destructive-foreground) / var(--tw-text-opacity,1))}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open],.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity:.8}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open],.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-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=open\]\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y:100%}.dark\:border-amber-300\/30:is(.dark *){border-color:#fcd34d4d}.dark\:bg-amber-950\/40:is(.dark *){background-color:#451a0366}.dark\:text-amber-300:is(.dark *){--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}@media (width>=520px){.sm\:bottom-4{bottom:1rem}.sm\:right-4{right:1rem}.sm\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:w-\[110px\]{width:110px}.sm\:w-\[380px\]{width:380px}.sm\:min-w-\[560px\]{min-width:560px}.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\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[110px_minmax\(0\,1fr\)\]{grid-template-columns:110px minmax(0,1fr)}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:items-center{align-items:center}.sm\:p-5{padding:1.25rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-24{padding-top:6rem}}@media (width>=820px){.md\:inset-x-auto{left:auto;right:auto}.md\:bottom-4{bottom:1rem}.md\:left-1\/2{left:50%}.md\:right-auto{right:auto}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:hidden{display:none}.md\:h-7{height:1.75rem}.md\:h-8{height:2rem}.md\:h-9{height:2.25rem}.md\:h-auto{height:auto}.md\:max-h-\[84vh\]{max-height:84vh}.md\:w-7{width:1.75rem}.md\:w-8{width:2rem}.md\:w-9{width:2.25rem}.md\:w-\[420px\]{width:420px}.md\:w-\[560px\]{width:560px}.md\:w-\[780px\]{width:780px}.md\:w-\[920px\]{width:920px}.md\:min-w-\[640px\]{min-width:640px}.md\:min-w-\[700px\]{min-width:700px}.md\:-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.md\:px-12{padding-left:3rem;padding-right:3rem}}@media (width>=1280px){.xl\:sticky{position:sticky}.xl\:inset-x-auto{left:auto;right:auto}.xl\:bottom-auto{bottom:auto}.xl\:top-0{top:0}.xl\:top-4{top:1rem}.xl\:z-auto{z-index:auto}.xl\:hidden{display:none}.xl\:max-h-\[calc\(100vh-120px\)\]{max-height:calc(100vh - 120px)}.xl\:grid-cols-\[minmax\(0\,1fr\)_300px\]{grid-template-columns:minmax(0,1fr) 300px}.xl\:grid-cols-\[minmax\(0\,1fr\)_350px\]{grid-template-columns:minmax(0,1fr) 350px}.xl\:grid-cols-\[minmax\(0\,1fr\)_380px\]{grid-template-columns:minmax(0,1fr) 380px}.xl\:rounded-md{border-radius:calc(var(--radius) - 2px)}.xl\:shadow-subtle-xs{--tw-shadow:var(--shadow-subtle-xs);--tw-shadow-colored:var(--shadow-subtle-xs);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>svg\]\:h-\[var\(--button-icon-size\)\]>svg{height:var(--button-icon-size)}.\[\&\>svg\]\:w-\[var\(--button-icon-size\)\]>svg{width:var(--button-icon-size)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&_\.button-icon\]\:h-\[var\(--button-icon-size\)\] .button-icon{height:var(--button-icon-size)}.\[\&_\.button-icon\]\:w-\[var\(--button-icon-size\)\] .button-icon{width:var(--button-icon-size)}.\[\&_\.button-icon\]\:shrink-0 .button-icon{flex-shrink:0}.\[\&_svg\]\:size-3 svg{width:.75rem;height:.75rem}.\[\&_svg\]\:size-3\.5 svg{width:.875rem;height:.875rem}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}
1
+ *,:before,:after,::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:#3b82f680;--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:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter,system-ui,-apple-system,ui-sans-serif,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family: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:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-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{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}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{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{box-sizing:border-box}html,body{height:100dvh;overflow:hidden}body{background:hsl(var(--tw-background));min-width:320px;color:hsl(var(--tw-foreground));-webkit-tap-highlight-color:hsl(var(--tw-foreground) / .08);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}#root{height:100dvh}button,input,select,textarea{font:inherit}button{cursor:pointer;touch-action:manipulation}button:disabled{cursor:not-allowed}:focus-visible{outline:2px solid hsl(var(--tw-foreground));outline-offset:2px}code{border:1px solid hsl(var(--tw-border));background:hsl(var(--tw-secondary));color:hsl(var(--tw-foreground));border-radius:4px;padding:1px 5px;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%;margin-left:auto;margin-right:auto;padding-left:2rem;padding-right:2rem}@media (width>=1400px){.container{max-width:1400px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:#1118271a;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.rich-text>*+*{margin-top:.5rem}.rich-text p,.rich-text ul{margin:0}.rich-text ul{padding-left:1.125rem}.rich-text li+li{margin-top:.25rem}.rich-text h3,.rich-text h4,.rich-text h5{color:hsl(var(--tw-foreground));margin:.25rem 0 0;font-size:.95rem;font-weight:600}.rich-text hr{border:0;border-top:1px solid hsl(var(--tw-border))}.rich-text .rich-table{width:100%;max-width:100%;display:block;overflow-x:auto}.rich-text table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:13px}.rich-text th,.rich-text td{border:1px solid hsl(var(--tw-border));text-align:left;vertical-align:top;padding:6px 8px}.rich-text th{background:hsl(var(--tw-secondary));color:hsl(var(--tw-foreground));font-weight:600}.chat-markdown{color:hsl(var(--tw-foreground) / .86);font-size:.8125rem;line-height:1.375rem}.chat-markdown>*+*{margin-top:1.25rem}.chat-markdown p,.chat-markdown ul{margin:0}.chat-markdown ul{color:hsl(var(--tw-foreground) / .82);padding-left:1.75rem;list-style:outside}.chat-markdown p+ul{margin-top:1.5rem}.chat-markdown ul+p{margin-top:2rem}.chat-markdown .rich-table+p{margin-top:2.25rem}.chat-markdown hr{margin:2rem 0 1.75rem}.chat-markdown li{padding-left:.375rem;line-height:1.375rem}.chat-markdown li+li{margin-top:.75rem}.chat-markdown li::marker{color:hsl(var(--tw-muted-foreground))}.chat-markdown strong{color:hsl(var(--tw-foreground));font-weight:500}.chat-markdown h3,.chat-markdown h4,.chat-markdown h5{color:hsl(var(--tw-foreground));margin:1.5rem 0 .5rem;font-weight:500;line-height:1.35}.chat-markdown h3{font-size:1rem}.chat-markdown h4,.chat-markdown h5{font-size:.875rem}.chat-markdown code{border-color:hsl(var(--tw-border));background:hsl(var(--tw-secondary));color:hsl(var(--tw-foreground));border-radius:.5rem;padding:.125rem .375rem;font-size:.875rem;font-weight:400}.chat-markdown .rich-table{border:1px solid hsl(var(--tw-border));background:hsl(var(--tw-background));width:100%;max-width:100%;display:block;overflow-x:auto}.chat-markdown table{border-collapse:collapse;width:100%;font-size:.8125rem;line-height:1.375rem}.chat-markdown th,.chat-markdown td{border:1px solid hsl(var(--tw-border));text-align:left;vertical-align:top;padding:.625rem .75rem}.chat-markdown th{background:hsl(var(--tw-tertiary));color:hsl(var(--tw-muted-foreground));font-size:.75rem;font-weight:500}.tool-shimmer-base{color:hsl(var(--tw-muted-foreground))}.tool-shimmer{background:linear-gradient(90deg, hsl(var(--tw-muted-foreground)) 0%, hsl(var(--tw-muted-foreground)) 40%, hsl(var(--tw-foreground)) 50%, hsl(var(--tw-muted-foreground)) 60%, hsl(var(--tw-muted-foreground)) 100%);color:#0000;-webkit-text-fill-color:transparent;background-size:220% 100%;-webkit-background-clip:text;background-clip:text;animation:1.6s linear infinite tool-shimmer-sweep}@keyframes tool-shimmer-sweep{0%{background-position:120% 0}to{background-position:-120% 0}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-x-2{left:.5rem;right:.5rem}.inset-y-0{top:0;bottom:0}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2\.5{left:.625rem}.left-3{left:.75rem}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-2\.5{right:.625rem}.right-3{right:.75rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-2\.5{top:.625rem}.top-3{top:.75rem}.top-\[-3px\]{top:-3px}.top-\[46\%\]{top:46%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[60\]{z-index:60}.z-\[90\]{z-index:90}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.-mr-1{margin-right:-.25rem}.-mr-1\.5{margin-right:-.375rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-\[var\(--popover-offset\)\]{margin-bottom:var(--popover-offset)}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-\[var\(--popover-offset\)\]{margin-top:var(--popover-offset)}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-1\.5{width:.375rem;height:.375rem}.size-2{width:.5rem;height:.5rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-9{width:2.25rem;height:2.25rem}.size-\[7px\]{width:7px;height:7px}.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-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.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-\[11px\]{height:11px}.h-\[22px\]{height:22px}.h-\[5px\]{height:5px}.h-\[70px\]{height:70px}.h-\[min\(88dvh\,calc\(100dvh-64px\)\)\]{height:min(88dvh,100dvh - 64px)}.h-\[min\(90dvh\,calc\(100dvh-40px\)\)\]{height:min(90dvh,100dvh - 40px)}.h-auto{height:auto}.h-full{height:100%}.max-h-32{max-height:8rem}.max-h-60{max-height:15rem}.max-h-72{max-height:18rem}.max-h-\[280px\]{max-height:280px}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[min\(84dvh\,720px\)\]{max-height:min(84dvh,720px)}.max-h-\[min\(88dvh\,calc\(100dvh-64px\)\)\]{max-height:min(88dvh,100dvh - 64px)}.max-h-screen{max-height:100vh}.min-h-0{min-height:0}.min-h-9{min-height:2.25rem}.min-h-\[120px\]{min-height:120px}.min-h-\[60px\]{min-height:60px}.min-h-\[68px\]{min-height:68px}.min-h-\[80px\]{min-height:80px}.w-0\.5{width:.125rem}.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-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[260px\]{width:260px}.w-\[280px\]{width:280px}.w-\[2px\]{width:2px}.w-\[90px\]{width:90px}.w-\[calc\(100vw-32px\)\]{width:calc(100vw - 32px)}.w-\[min\(520px\,42vw\)\]{width:min(520px,42vw)}.w-fit{width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.min-w-9{min-width:2.25rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[160px\]{min-width:160px}.min-w-\[80px\]{min-width:80px}.max-w-3xl{max-width:48rem}.max-w-\[1040px\]{max-width:1040px}.max-w-\[120px\]{max-width:120px}.max-w-\[1240px\]{max-width:1240px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[320px\]{max-width:320px}.max-w-\[420px\]{max-width:420px}.max-w-\[520px\]{max-width:520px}.max-w-\[560px\]{max-width:560px}.max-w-\[720px\]{max-width:720px}.max-w-\[760px\]{max-width:760px}.max-w-\[780px\]{max-width:780px}.max-w-\[920px\]{max-width:920px}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-\[min\(640px\,86\%\)\]{max-width:min(640px,86%)}.max-w-\[min\(920px\,100\%\)\]{max-width:min(920px,100%)}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(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)) skewX(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)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in-once{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in-once{animation:.28s ease-out forwards fade-in-once}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}.animate-ping{animation:1s cubic-bezier(0,0,.2,1) infinite ping}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[1fr_auto_auto_auto\]{grid-template-columns:1fr auto auto auto}.grid-cols-\[20px_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:20px auto minmax(0,1fr) auto}.grid-cols-\[20px_minmax\(0\,1fr\)\]{grid-template-columns:20px minmax(0,1fr)}.grid-cols-\[20px_minmax\(0\,1fr\)_auto\]{grid-template-columns:20px minmax(0,1fr) auto}.grid-cols-\[28px_minmax\(0\,1fr\)\]{grid-template-columns:28px minmax(0,1fr)}.grid-cols-\[90px_minmax\(0\,1fr\)\]{grid-template-columns:90px minmax(0,1fr)}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-0{gap:0}.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-3\.5{gap:.875rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-3{row-gap:.75rem}.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-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))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:hsl(var(--tw-border) / var(--tw-divide-opacity,1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:calc(var(--radius) + 8px)}.rounded-\[4px\]{border-radius:4px}.rounded-\[5px\]{border-radius:5px}.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:calc(var(--radius) + 4px)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-t-2xl{border-top-left-radius:calc(var(--radius) + 8px);border-top-right-radius:calc(var(--radius) + 8px)}.rounded-t-xl{border-top-left-radius:calc(var(--radius) + 4px);border-top-right-radius:calc(var(--radius) + 4px)}.border{border-width:1px}.border-0{border-width:0}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-700\/40{border-color:#b4530966}.border-border{--tw-border-opacity:1;border-color:hsl(var(--tw-border) / var(--tw-border-opacity,1))}.border-border\/70{border-color:hsl(var(--tw-border) / .7)}.border-destructive{--tw-border-opacity:1;border-color:hsl(var(--tw-destructive) / var(--tw-border-opacity,1))}.border-destructive\/30{border-color:hsl(var(--tw-destructive) / .3)}.border-destructive\/40{border-color:hsl(var(--tw-destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--tw-destructive) / .5)}.border-foreground{--tw-border-opacity:1;border-color:hsl(var(--tw-foreground) / var(--tw-border-opacity,1))}.border-success\/30{border-color:hsl(var(--tw-success) / .3)}.border-transparent{border-color:#0000}.border-warning\/30{border-color:hsl(var(--tw-warning) / .3)}.bg-amber-100\/70{background-color:#fef3c7b3}.bg-background{--tw-bg-opacity:1;background-color:hsl(var(--tw-background) / var(--tw-bg-opacity,1))}.bg-border{--tw-bg-opacity:1;background-color:hsl(var(--tw-border) / var(--tw-bg-opacity,1))}.bg-brand{--tw-bg-opacity:1;background-color:hsl(var(--tw-brand) / var(--tw-bg-opacity,1))}.bg-card{--tw-bg-opacity:1;background-color:hsl(var(--tw-card) / var(--tw-bg-opacity,1))}.bg-destructive{--tw-bg-opacity:1;background-color:hsl(var(--tw-destructive) / var(--tw-bg-opacity,1))}.bg-destructive\/10{background-color:hsl(var(--tw-destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--tw-destructive) / .05)}.bg-foreground{--tw-bg-opacity:1;background-color:hsl(var(--tw-foreground) / var(--tw-bg-opacity,1))}.bg-foreground\/25{background-color:hsl(var(--tw-foreground) / .25)}.bg-foreground\/30{background-color:hsl(var(--tw-foreground) / .3)}.bg-foreground\/40{background-color:hsl(var(--tw-foreground) / .4)}.bg-hard{--tw-bg-opacity:1;background-color:hsl(var(--tw-hard) / var(--tw-bg-opacity,1))}.bg-info{--tw-bg-opacity:1;background-color:hsl(var(--tw-info) / var(--tw-bg-opacity,1))}.bg-muted-foreground\/40{background-color:hsl(var(--tw-muted-foreground) / .4)}.bg-muted\/15{background-color:hsl(var(--tw-muted) / .15)}.bg-secondary{--tw-bg-opacity:1;background-color:hsl(var(--tw-secondary) / var(--tw-bg-opacity,1))}.bg-secondary\/35{background-color:hsl(var(--tw-secondary) / .35)}.bg-secondary\/50{background-color:hsl(var(--tw-secondary) / .5)}.bg-secondary\/60{background-color:hsl(var(--tw-secondary) / .6)}.bg-success{--tw-bg-opacity:1;background-color:hsl(var(--tw-success) / var(--tw-bg-opacity,1))}.bg-success\/10{background-color:hsl(var(--tw-success) / .1)}.bg-tertiary{--tw-bg-opacity:1;background-color:hsl(var(--tw-tertiary) / var(--tw-bg-opacity,1))}.bg-transparent{background-color:#0000}.bg-warning{--tw-bg-opacity:1;background-color:hsl(var(--tw-warning) / var(--tw-bg-opacity,1))}.bg-warning\/10{background-color:hsl(var(--tw-warning) / .1)}.bg-warning\/15{background-color:hsl(var(--tw-warning) / .15)}.fill-muted-foreground{fill:hsl(var(--tw-muted-foreground) / 1)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.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}.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-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pl-4{padding-left:1rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-7{padding-right:1.75rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-1{padding-top:.25rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Inter,system-ui,-apple-system,ui-sans-serif,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{letter-spacing:-.015em;font-size:1.375rem;line-height:1.75rem}.text-3xl{letter-spacing:-.02em;font-size:1.875rem;line-height:2.25rem}.text-\[0\.7rem\]{font-size:.7rem}.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-\[17px\]{font-size:17px}.text-\[22px\]{font-size:22px}.text-\[28px\]{font-size:28px}.text-\[2rem\]{font-size:2rem}.text-\[32px\]{font-size:32px}.text-\[3rem\]{font-size:3rem}.text-base{letter-spacing:0;font-size:.875rem;line-height:1.5rem}.text-lg{letter-spacing:-.005em;font-size:1rem;line-height:1.5rem}.text-sm{letter-spacing:0;font-size:.8125rem;line-height:1.25rem}.text-xl{letter-spacing:-.01em;font-size:1.125rem;line-height:1.5rem}.text-xs{letter-spacing:0;font-size:.75rem;line-height:1rem}.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}.normal-case{text-transform:none}.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\.65rem\]{line-height:1.65rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-normal{letter-spacing:0}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-background{--tw-text-opacity:1;color:hsl(var(--tw-background) / var(--tw-text-opacity,1))}.text-brand-foreground{--tw-text-opacity:1;color:hsl(var(--tw-brand-foreground) / var(--tw-text-opacity,1))}.text-card-foreground{--tw-text-opacity:1;color:hsl(var(--tw-card-foreground) / var(--tw-text-opacity,1))}.text-destructive{--tw-text-opacity:1;color:hsl(var(--tw-destructive) / var(--tw-text-opacity,1))}.text-destructive-foreground{--tw-text-opacity:1;color:hsl(var(--tw-destructive-foreground) / var(--tw-text-opacity,1))}.text-foreground{--tw-text-opacity:1;color:hsl(var(--tw-foreground) / var(--tw-text-opacity,1))}.text-foreground\/40{color:hsl(var(--tw-foreground) / .4)}.text-foreground\/70{color:hsl(var(--tw-foreground) / .7)}.text-foreground\/80{color:hsl(var(--tw-foreground) / .8)}.text-info{--tw-text-opacity:1;color:hsl(var(--tw-info) / var(--tw-text-opacity,1))}.text-muted-foreground{--tw-text-opacity:1;color:hsl(var(--tw-muted-foreground) / var(--tw-text-opacity,1))}.text-muted-foreground\/70{color:hsl(var(--tw-muted-foreground) / .7)}.text-muted-foreground\/80{color:hsl(var(--tw-muted-foreground) / .8)}.text-success{--tw-text-opacity:1;color:hsl(var(--tw-success) / var(--tw-text-opacity,1))}.text-warning{--tw-text-opacity:1;color:hsl(var(--tw-warning) / var(--tw-text-opacity,1))}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-subtle-md{--tw-shadow:var(--shadow-subtle-md);--tw-shadow-colored:var(--shadow-subtle-md);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-subtle-sm{--tw-shadow:var(--shadow-subtle-sm);--tw-shadow-colored:var(--shadow-subtle-sm);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-subtle-xs{--tw-shadow:var(--shadow-subtle-xs);--tw-shadow-colored:var(--shadow-subtle-xs);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.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-2{--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)}.ring-inset{--tw-ring-inset:inset}.ring-card{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-card) / var(--tw-ring-opacity,1))}.ring-foreground\/10{--tw-ring-color:hsl(var(--tw-foreground) / .1)}.ring-secondary{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-secondary) / var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}@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{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.fade-in-0{--tw-enter-opacity:0}.zoom-in-95{--tw-enter-scale:.95}.slide-in-from-right{--tw-enter-translate-x:100%}.duration-200{animation-duration:.2s}.running{animation-play-state:running}.paused{animation-play-state:paused}.\[--button-icon-size\:14px\]{--button-icon-size:14px}.\[--button-icon-size\:15px\]{--button-icon-size:15px}.\[--button-icon-size\:16px\]{--button-icon-size:16px}.\[--button-icon-size\:17px\]{--button-icon-size:17px}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--tw-background:0 0% 100%;--tw-foreground:240 6% 10%;--tw-secondary:240 5% 96%;--tw-secondary-foreground:240 6% 10%;--tw-tertiary:240 5% 92%;--tw-tertiary-foreground:240 6% 10%;--tw-card:0 0% 100%;--tw-card-foreground:240 6% 10%;--tw-popover:0 0% 100%;--tw-popover-foreground:240 6% 10%;--tw-muted:240 5% 96%;--tw-muted-foreground:240 4% 46%;--tw-accent:142 71% 35%;--tw-accent-foreground:0 0% 100%;--tw-brand:240 6% 10%;--tw-brand-foreground:0 0% 100%;--tw-destructive:0 84% 60%;--tw-destructive-foreground:0 0% 100%;--tw-success:142 71% 35%;--tw-warning:35 92% 45%;--tw-info:217 91% 60%;--tw-border:240 6% 90%;--tw-soft:240 5% 96%;--tw-hard:240 5% 84%;--tw-input:240 6% 90%;--tw-ring:240 6% 10%;--shadow-subtle-xs:0 1px 2px #0f0f0f0a;--shadow-subtle-sm:0 4px 12px #0f0f0f0f;--shadow-subtle-md:0 16px 32px #0f0f0f14;--radius:8px;font-family:Inter,system-ui,-apple-system,Segoe UI,Helvetica Neue,sans-serif}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.placeholder\:text-muted-foreground::placeholder{--tw-text-opacity:1;color:hsl(var(--tw-muted-foreground) / var(--tw-text-opacity,1))}.first\:pt-1:first-child{padding-top:.25rem}.last\:mr-0:last-child{margin-right:0}.last\:border-0:last-child{border-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:border-foreground\/40:focus-within{border-color:hsl(var(--tw-foreground) / .4)}.focus-within\:bg-tertiary:focus-within{--tw-bg-opacity:1;background-color:hsl(var(--tw-tertiary) / var(--tw-bg-opacity,1))}.focus-within\:ring-2: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(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-within\:ring-ring:focus-within{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-ring) / var(--tw-ring-opacity,1))}.focus-within\:ring-offset-2:focus-within{--tw-ring-offset-width:2px}.focus-within\:ring-offset-background:focus-within{--tw-ring-offset-color:hsl(var(--tw-background) / 1)}.hover\:border-border:hover{--tw-border-opacity:1;border-color:hsl(var(--tw-border) / var(--tw-border-opacity,1))}.hover\:bg-card:hover{--tw-bg-opacity:1;background-color:hsl(var(--tw-card) / var(--tw-bg-opacity,1))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--tw-destructive) / .1)}.hover\:bg-secondary:hover{--tw-bg-opacity:1;background-color:hsl(var(--tw-secondary) / var(--tw-bg-opacity,1))}.hover\:bg-secondary\/60:hover{background-color:hsl(var(--tw-secondary) / .6)}.hover\:bg-tertiary:hover{--tw-bg-opacity:1;background-color:hsl(var(--tw-tertiary) / var(--tw-bg-opacity,1))}.hover\:text-foreground:hover{--tw-text-opacity:1;color:hsl(var(--tw-foreground) / var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.focus\:opacity-100:focus{opacity:1}.focus-visible\:outline-none:focus-visible{outline-offset:2px;outline:2px solid #0000}.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-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-ring:focus-visible{--tw-ring-opacity:1;--tw-ring-color:hsl(var(--tw-ring) / 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-background:focus-visible{--tw-ring-offset-color:hsl(var(--tw-background) / 1)}.focus-visible\:ring-offset-card:focus-visible{--tw-ring-offset-color:hsl(var(--tw-card) / 1)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group[open] .group-open\:rotate-90{--tw-rotate:90deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:translate-x-0\.5{--tw-translate-x:.125rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:text-destructive-foreground\/80{color:hsl(var(--tw-destructive-foreground) / .8)}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{--tw-text-opacity:1;color:hsl(var(--tw-destructive-foreground) / var(--tw-text-opacity,1))}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open],.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity:.8}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open],.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-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=open\]\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y:100%}.dark\:border-amber-300\/30:is(.dark *){border-color:#fcd34d4d}.dark\:bg-amber-950\/40:is(.dark *){background-color:#451a0366}.dark\:text-amber-300:is(.dark *){--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}@media (width>=520px){.sm\:bottom-4{bottom:1rem}.sm\:right-4{right:1rem}.sm\:-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:table-cell{display:table-cell}.sm\:w-\[110px\]{width:110px}.sm\:w-\[380px\]{width:380px}.sm\:min-w-\[560px\]{min-width:560px}.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\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[110px_minmax\(0\,1fr\)\]{grid-template-columns:110px minmax(0,1fr)}.sm\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:p-5{padding:1.25rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-24{padding-top:6rem}}@media (width>=820px){.md\:inset-x-auto{left:auto;right:auto}.md\:bottom-4{bottom:1rem}.md\:left-1\/2{left:50%}.md\:right-auto{right:auto}.md\:block{display:block}.md\:flex{display:flex}.md\:table-cell{display:table-cell}.md\:hidden{display:none}.md\:h-7{height:1.75rem}.md\:h-8{height:2rem}.md\:h-9{height:2.25rem}.md\:h-auto{height:auto}.md\:max-h-\[84vh\]{max-height:84vh}.md\:w-7{width:1.75rem}.md\:w-8{width:2rem}.md\:w-9{width:2.25rem}.md\:w-\[420px\]{width:420px}.md\:w-\[560px\]{width:560px}.md\:w-\[780px\]{width:780px}.md\:w-\[920px\]{width:920px}.md\:min-w-\[640px\]{min-width:640px}.md\:min-w-\[700px\]{min-width:700px}.md\:-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.md\:px-12{padding-left:3rem;padding-right:3rem}}@media (width>=1280px){.xl\:sticky{position:sticky}.xl\:inset-x-auto{left:auto;right:auto}.xl\:bottom-auto{bottom:auto}.xl\:top-0{top:0}.xl\:top-4{top:1rem}.xl\:z-auto{z-index:auto}.xl\:hidden{display:none}.xl\:max-h-\[calc\(100vh-120px\)\]{max-height:calc(100vh - 120px)}.xl\:grid-cols-\[minmax\(0\,1fr\)_300px\]{grid-template-columns:minmax(0,1fr) 300px}.xl\:grid-cols-\[minmax\(0\,1fr\)_350px\]{grid-template-columns:minmax(0,1fr) 350px}.xl\:grid-cols-\[minmax\(0\,1fr\)_380px\]{grid-template-columns:minmax(0,1fr) 380px}.xl\:rounded-md{border-radius:calc(var(--radius) - 2px)}.xl\:shadow-subtle-xs{--tw-shadow:var(--shadow-subtle-xs);--tw-shadow-colored:var(--shadow-subtle-xs);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>svg\]\:h-\[var\(--button-icon-size\)\]>svg{height:var(--button-icon-size)}.\[\&\>svg\]\:w-\[var\(--button-icon-size\)\]>svg{width:var(--button-icon-size)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&_\.button-icon\]\:h-\[var\(--button-icon-size\)\] .button-icon{height:var(--button-icon-size)}.\[\&_\.button-icon\]\:w-\[var\(--button-icon-size\)\] .button-icon{width:var(--button-icon-size)}.\[\&_\.button-icon\]\:shrink-0 .button-icon{flex-shrink:0}.\[\&_svg\]\:size-3 svg{width:.75rem;height:.75rem}.\[\&_svg\]\:size-3\.5 svg{width:.875rem;height:.875rem}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}
@@ -8,8 +8,8 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
11
- <script type="module" crossorigin src="/assets/index-C6W_2eAn.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-hwbx24a5.css">
11
+ <script type="module" crossorigin src="/assets/index-Dm4Aom2_.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-UzZUg3dx.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "opencandle",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Financial trading & investing agent",
5
5
  "license": "MIT",
6
- "homepage": "https://github.com/Kahtaf/OpenCandle#readme",
6
+ "homepage": "https://opencandle.app",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/Kahtaf/OpenCandle.git"
@@ -88,6 +88,7 @@
88
88
  "gui:web:build": "npm --workspace @opencandle/gui-web run build",
89
89
  "docs:site:build": "node website/build.mjs",
90
90
  "docs:site:serve": "node website/serve.mjs",
91
+ "docs:links:check": "node scripts/check-public-doc-links.mjs",
91
92
  "gui": "tsx gui/server/server.ts",
92
93
  "gui:dev": "tsx gui/server/server.ts",
93
94
  "lint": "biome check .",
@@ -108,25 +109,28 @@
108
109
  "test:evals:usually": "EVAL_TIER=usually vitest run --config vitest.config.evals.ts",
109
110
  "test:evals:product": "tsx tests/scripts/run-product-evals.ts",
110
111
  "test:evals:competitive": "tsx tests/scripts/run-competitive-finance-eval.ts",
112
+ "test:packed-install": "node scripts/packed-install-smoke.mjs",
111
113
  "eval:competitive:analyze": "tsx tests/scripts/analyze-competitive-finance-report.ts",
112
114
  "review:pr": ".agents/skills/autoreview/scripts/autoreview --mode branch --prompt-file .agents/skills/autoreview/references/opencandle-review.md --parallel-tests \"npx tsc --noEmit && npx vitest run\"",
115
+ "package:contents:check": "node scripts/check-package-contents.mjs",
113
116
  "version:patch": "npm version patch --no-git-tag-version",
114
117
  "version:minor": "npm version minor --no-git-tag-version",
115
118
  "version:major": "npm version major --no-git-tag-version",
116
119
  "version:set": "npm version",
117
- "prepublishOnly": "npm test",
118
- "publish:dry": "npm publish --access public --dry-run",
120
+ "prepublishOnly": "npm run release:check",
121
+ "publish:dry": "npm run release:check && npm publish --access public --dry-run",
122
+ "release:check": "npx tsc --noEmit && npx biome ci . && npm test && npm run docs:site:build && npm run package:contents:check && npm run test:packed-install && npm run docs:links:check",
119
123
  "release:patch": "node scripts/release.mjs patch",
120
124
  "release:minor": "node scripts/release.mjs minor",
121
125
  "release:major": "node scripts/release.mjs major"
122
126
  },
123
127
  "engines": {
124
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0 <27"
128
+ "node": ">=22.19.0 <27"
125
129
  },
126
130
  "dependencies": {
127
- "@earendil-works/pi-agent-core": "^0.75.5",
128
- "@earendil-works/pi-ai": "^0.75.5",
129
- "@earendil-works/pi-coding-agent": "^0.75.5",
131
+ "@earendil-works/pi-agent-core": "^0.79.8",
132
+ "@earendil-works/pi-ai": "^0.79.8",
133
+ "@earendil-works/pi-coding-agent": "^0.79.8",
130
134
  "better-sqlite3": "^12.10.0",
131
135
  "duck-duck-scrape": "^2.2.7",
132
136
  "tsx": "^4.22.3",
@@ -145,7 +149,7 @@
145
149
  "acpx": "^0.10.0",
146
150
  "playwright-core": "^1.61.0",
147
151
  "typescript": "^6.0.3",
148
- "vite": "^8.0.14",
152
+ "vite": "^8.0.16",
149
153
  "vitest": "^4.1.7",
150
154
  "vitest-evals": "^0.11.0"
151
155
  }
@@ -0,0 +1,233 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import {
6
+ AuthStorage,
7
+ createAgentSessionRuntime,
8
+ createAgentSessionServices,
9
+ DefaultPackageManager,
10
+ getAgentDir,
11
+ InteractiveMode,
12
+ initTheme,
13
+ ModelRegistry,
14
+ SettingsManager,
15
+ } from "@earendil-works/pi-coding-agent";
16
+ import { loadEnv } from "./config.js";
17
+ import { handleDoctorCommand } from "./doctor/cli-command.js";
18
+ import { createOpenCandleSession } from "./pi/session.js";
19
+ import { continueOpenCandleSession } from "./pi/session-storage.js";
20
+
21
+ const require = createRequire(import.meta.url);
22
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
23
+
24
+ async function handlePackageCommand(
25
+ args: string[],
26
+ cwd: string,
27
+ agentDir: string,
28
+ ): Promise<boolean> {
29
+ const [command, ...rest] = args;
30
+ if (!command || !["install", "remove", "uninstall", "list", "update"].includes(command)) {
31
+ return false;
32
+ }
33
+
34
+ const settingsManager = SettingsManager.create(cwd, agentDir);
35
+ const packageManager = new DefaultPackageManager({
36
+ cwd,
37
+ agentDir,
38
+ settingsManager,
39
+ });
40
+ packageManager.setProgressCallback((event) => {
41
+ if (event.type === "start" || event.type === "progress") {
42
+ process.stdout.write(`${event.message}\n`);
43
+ }
44
+ });
45
+
46
+ const source = rest.find((a) => !a.startsWith("-"));
47
+ const local = rest.includes("-l") || rest.includes("--local");
48
+
49
+ switch (command === "uninstall" ? "remove" : command) {
50
+ case "install": {
51
+ if (!source) {
52
+ console.error("Usage: opencandle install <source> [-l]");
53
+ process.exitCode = 1;
54
+ return true;
55
+ }
56
+ await packageManager.install(source, { local });
57
+ packageManager.addSourceToSettings(source, { local });
58
+ console.log(`Installed ${source}`);
59
+ return true;
60
+ }
61
+ case "remove": {
62
+ if (!source) {
63
+ console.error("Usage: opencandle remove <source> [-l]");
64
+ process.exitCode = 1;
65
+ return true;
66
+ }
67
+ await packageManager.remove(source, { local });
68
+ const removed = packageManager.removeSourceFromSettings(source, {
69
+ local,
70
+ });
71
+ if (!removed) {
72
+ console.error(`No matching package found for ${source}`);
73
+ process.exitCode = 1;
74
+ } else {
75
+ console.log(`Removed ${source}`);
76
+ }
77
+ return true;
78
+ }
79
+ case "list": {
80
+ const globalPkgs = settingsManager.getGlobalSettings().packages ?? [];
81
+ const projectPkgs = settingsManager.getProjectSettings().packages ?? [];
82
+ if (globalPkgs.length === 0 && projectPkgs.length === 0) {
83
+ console.log("No packages installed.");
84
+ return true;
85
+ }
86
+ if (globalPkgs.length > 0) {
87
+ console.log("User packages:");
88
+ for (const pkg of globalPkgs) {
89
+ const s = typeof pkg === "string" ? pkg : pkg.source;
90
+ const path = packageManager.getInstalledPath(s, "user");
91
+ console.log(` ${s}${path ? `\n ${path}` : ""}`);
92
+ }
93
+ }
94
+ if (projectPkgs.length > 0) {
95
+ console.log("Project packages:");
96
+ for (const pkg of projectPkgs) {
97
+ const s = typeof pkg === "string" ? pkg : pkg.source;
98
+ const path = packageManager.getInstalledPath(s, "project");
99
+ console.log(` ${s}${path ? `\n ${path}` : ""}`);
100
+ }
101
+ }
102
+ return true;
103
+ }
104
+ case "update": {
105
+ await packageManager.update(source);
106
+ console.log(source ? `Updated ${source}` : "All packages updated.");
107
+ return true;
108
+ }
109
+ }
110
+ return false;
111
+ }
112
+
113
+ async function handleGuiCommand(args: string[], cwd: string): Promise<boolean> {
114
+ if (args[0] !== "gui") return false;
115
+
116
+ const tsxCli = require.resolve("tsx/cli");
117
+ const serverPath = resolve(packageRoot, "gui/server/server.ts");
118
+ const child = spawn(process.execPath, [tsxCli, serverPath, ...args.slice(1)], {
119
+ cwd,
120
+ env: process.env,
121
+ stdio: "inherit",
122
+ });
123
+
124
+ const exitCode = await new Promise<number>((resolveExit) => {
125
+ child.on("close", (code, signal) => {
126
+ if (signal) {
127
+ resolveExit(1);
128
+ } else {
129
+ resolveExit(code ?? 0);
130
+ }
131
+ });
132
+ });
133
+ process.exitCode = exitCode;
134
+ return true;
135
+ }
136
+
137
+ async function handleMonitorCommand(args: string[], cwd: string): Promise<boolean> {
138
+ if (args[0] !== "monitor") return false;
139
+
140
+ const tsxCli = require.resolve("tsx/cli");
141
+ const monitorPath = resolve(packageRoot, "src/monitor.ts");
142
+ const child = spawn(process.execPath, [tsxCli, monitorPath, ...args.slice(1)], {
143
+ cwd,
144
+ env: process.env,
145
+ stdio: "inherit",
146
+ });
147
+
148
+ const exitCode = await new Promise<number>((resolveExit) => {
149
+ child.on("close", (code, signal) => {
150
+ if (signal) {
151
+ resolveExit(1);
152
+ } else {
153
+ resolveExit(code ?? 0);
154
+ }
155
+ });
156
+ });
157
+ process.exitCode = exitCode;
158
+ return true;
159
+ }
160
+
161
+ async function main(): Promise<void> {
162
+ const rawArgs = process.argv.slice(2);
163
+ const cwd = process.cwd();
164
+ const agentDir = getAgentDir();
165
+
166
+ loadEnv();
167
+
168
+ if (await handleGuiCommand(rawArgs, cwd)) {
169
+ return;
170
+ }
171
+
172
+ if (await handleMonitorCommand(rawArgs, cwd)) {
173
+ return;
174
+ }
175
+
176
+ if (await handleDoctorCommand(rawArgs, cwd, agentDir)) {
177
+ return;
178
+ }
179
+
180
+ if (await handlePackageCommand(rawArgs, cwd, agentDir)) {
181
+ return;
182
+ }
183
+
184
+ // Default: start the OpenCandle interactive agent
185
+ const settingsManager = SettingsManager.create(cwd, agentDir);
186
+ const authStorage = AuthStorage.create();
187
+ const modelRegistry = ModelRegistry.create(authStorage);
188
+ const shouldSuppressFallbackMessage = modelRegistry.getAvailable().length === 0;
189
+
190
+ initTheme(settingsManager.getTheme(), true);
191
+
192
+ const sessionManager = continueOpenCandleSession(cwd);
193
+
194
+ const runtime = await createAgentSessionRuntime(
195
+ async (opts) => {
196
+ const services = await createAgentSessionServices({
197
+ cwd: opts.cwd,
198
+ agentDir: opts.agentDir,
199
+ authStorage,
200
+ settingsManager,
201
+ modelRegistry,
202
+ });
203
+ const result = await createOpenCandleSession({
204
+ cwd: opts.cwd,
205
+ agentDir: opts.agentDir,
206
+ settingsManager,
207
+ authStorage,
208
+ modelRegistry,
209
+ sessionManager: opts.sessionManager,
210
+ bindExtensions: false,
211
+ });
212
+ return {
213
+ ...result,
214
+ services,
215
+ diagnostics: services.diagnostics,
216
+ };
217
+ },
218
+ { cwd, agentDir, sessionManager },
219
+ );
220
+
221
+ try {
222
+ const interactiveMode = new InteractiveMode(runtime, {
223
+ modelFallbackMessage: shouldSuppressFallbackMessage
224
+ ? undefined
225
+ : runtime.modelFallbackMessage,
226
+ });
227
+ await interactiveMode.run();
228
+ } finally {
229
+ await runtime.dispose();
230
+ }
231
+ }
232
+
233
+ await main();