devchain-cli 0.20.1 → 0.20.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/modules/events/catalog/broadcast-registry.js +31 -0
- package/dist/server/modules/events/catalog/broadcast-registry.js.map +1 -1
- package/dist/server/modules/projects/controllers/projects.controller.d.ts +22 -8
- package/dist/server/modules/projects/controllers/projects.controller.js +74 -40
- package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
- package/dist/server/modules/projects/dtos/template-upgrade.dto.d.ts +19 -0
- package/dist/server/modules/projects/dtos/template-upgrade.dto.js +60 -0
- package/dist/server/modules/projects/dtos/template-upgrade.dto.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-export.d.ts +1 -0
- package/dist/server/modules/projects/helpers/project-export.js +2 -2
- package/dist/server/modules/projects/helpers/project-export.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-import-sessions.d.ts +3 -0
- package/dist/server/modules/projects/helpers/project-import-sessions.js +11 -6
- package/dist/server/modules/projects/helpers/project-import-sessions.js.map +1 -1
- package/dist/server/modules/projects/helpers/project-import.d.ts +83 -8
- package/dist/server/modules/projects/helpers/project-import.js +161 -44
- package/dist/server/modules/projects/helpers/project-import.js.map +1 -1
- package/dist/server/modules/projects/services/project-template-upgrade.service.d.ts +16 -3
- package/dist/server/modules/projects/services/project-template-upgrade.service.js +115 -56
- package/dist/server/modules/projects/services/project-template-upgrade.service.js.map +1 -1
- package/dist/server/modules/projects/services/projects.service.d.ts +22 -8
- package/dist/server/modules/projects/services/projects.service.js +1 -1
- package/dist/server/modules/projects/services/projects.service.js.map +1 -1
- package/dist/server/modules/projects/template-codec/codecs/statuses.codec.js +4 -2
- package/dist/server/modules/projects/template-codec/codecs/statuses.codec.js.map +1 -1
- package/dist/server/modules/runtime-context-capture/codex-plugin-profile-materializer.service.d.ts +1 -1
- package/dist/server/modules/runtime-context-capture/codex-plugin-profile-materializer.service.js +72 -41
- package/dist/server/modules/runtime-context-capture/codex-plugin-profile-materializer.service.js.map +1 -1
- package/dist/server/modules/skills/adapters/community-skill-source.adapter.d.ts +2 -8
- package/dist/server/modules/skills/adapters/community-skill-source.adapter.js +3 -167
- package/dist/server/modules/skills/adapters/community-skill-source.adapter.js.map +1 -1
- package/dist/server/modules/skills/adapters/github-directory-skill-source.adapter.d.ts +21 -0
- package/dist/server/modules/skills/adapters/github-directory-skill-source.adapter.js +231 -0
- package/dist/server/modules/skills/adapters/github-directory-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/github-skill-source.base.d.ts +1 -0
- package/dist/server/modules/skills/adapters/github-skill-source.base.js +4 -4
- package/dist/server/modules/skills/adapters/github-skill-source.base.js.map +1 -1
- package/dist/server/modules/skills/adapters/skill-parsing.utils.d.ts +1 -0
- package/dist/server/modules/skills/adapters/skill-parsing.utils.js +41 -0
- package/dist/server/modules/skills/adapters/skill-parsing.utils.js.map +1 -1
- package/dist/server/modules/skills/skills.module.js +15 -1
- package/dist/server/modules/skills/skills.module.js.map +1 -1
- package/dist/server/templates/teams-dev.json +30 -21
- package/dist/server/tsconfig.tsbuildinfo +1 -1
- package/dist/server/ui/assets/{ReviewDetailPage-BZoAe0G2.js → ReviewDetailPage-BXLlZvPO.js} +1 -1
- package/dist/server/ui/assets/{ReviewsPage-J3XZDw7k.js → ReviewsPage-CmFUc6IP.js} +1 -1
- package/dist/server/ui/assets/{index-DoKUmi74.js → index-LNBfBNWF.js} +243 -248
- package/dist/server/ui/assets/index-NypjSmlZ.css +32 -0
- package/dist/server/ui/assets/{useReviewSubscription-CNUx-AWQ.js → useReviewSubscription-Ch8K_5xz.js} +1 -1
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/teams-dev.json +30 -21
- package/package.json +11 -1
- package/dist/server/ui/assets/index-CxmSxl5f.css +0 -32
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
|
+
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
|
+
* https://github.com/chjj/term.js
|
|
5
|
+
* @license MIT
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
|
15
|
+
* all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
* THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
* Originally forked from (with the author's permission):
|
|
26
|
+
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
27
|
+
* http://bellard.org/jslinux/
|
|
28
|
+
* Copyright (c) 2011 Fabrice Bellard
|
|
29
|
+
* The original design remains. The terminal itself
|
|
30
|
+
* has been extended to include xterm CSI codes, among
|
|
31
|
+
* other features.
|
|
32
|
+
*/.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::-moz-selection{color:transparent}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;-moz-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:-moz-fit-content;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.agent-event-bus__overlay{--agent-event-bus-idle: hsl(var(--muted-foreground));--agent-event-bus-agent-message: hsl(var(--event-bus-agent-message));--agent-event-bus-session-started: hsl(var(--event-bus-session-started));--agent-event-bus-epic-assigned: hsl(var(--event-bus-epic-assigned));--agent-event-bus-spark: hsl(var(--event-bus-spark));--agent-event-bus-failure: hsl(var(--destructive));position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;display:block;width:100%;height:100%;overflow:visible;pointer-events:none}.agent-event-bus__idle-conductor,.agent-event-bus__idle-branch,.agent-event-bus__active-branch,.agent-event-bus__route-tail,.agent-event-bus__route-body,.agent-event-bus__route-head{fill:none;stroke-linecap:round;stroke-linejoin:round}.agent-event-bus__idle-conductor{stroke:var(--agent-event-bus-idle);stroke-width:1;opacity:.24}.agent-event-bus__idle-branch{stroke:var(--agent-event-bus-idle);stroke-width:1;opacity:.16}.agent-event-bus__idle-anchor{fill:hsl(var(--background));stroke:var(--agent-event-bus-idle);stroke-width:.5;opacity:.44}.agent-event-bus__active-branch{stroke:currentColor;stroke-width:1.25;opacity:.72}.agent-event-bus__active-anchor{fill:currentColor;stroke:hsl(var(--background));stroke-width:.5;opacity:.96}.agent-event-bus__failed-anchor{opacity:.74}.agent-event-bus__feedback--session-started{color:var(--agent-event-bus-session-started)}.agent-event-bus__feedback--agent-message{color:var(--agent-event-bus-agent-message)}.agent-event-bus__feedback--epic-assigned{color:var(--agent-event-bus-epic-assigned)}.agent-event-bus__feedback--failed{color:var(--agent-event-bus-failure)}.agent-event-bus__route--agent-message{color:var(--agent-event-bus-agent-message)}.agent-event-bus__route--session-started{color:var(--agent-event-bus-session-started)}.agent-event-bus__route--epic-assigned{color:var(--agent-event-bus-epic-assigned)}.agent-event-bus__route-tail,.agent-event-bus__route-body,.agent-event-bus__route-head{stroke:currentColor}.agent-event-bus__route-tail{stroke-width:18;opacity:0}.agent-event-bus__route-body{stroke-width:7;opacity:0}.agent-event-bus__route-head{stroke:var(--agent-event-bus-spark);stroke-width:2.4;opacity:.9}.agent-event-bus__runtime-origin-halo{fill:currentColor;opacity:.3}.agent-event-bus__marker{opacity:0;transform-box:fill-box;transform-origin:center}.agent-event-bus__marker-bloom{fill:currentColor;opacity:.18}.agent-event-bus__marker-ring{fill:currentColor;opacity:.38}.agent-event-bus__marker-ring--outline{fill:none;stroke:currentColor;stroke-width:1.1;opacity:.95}.agent-event-bus__marker-core{fill:var(--agent-event-bus-spark);stroke:hsl(var(--background));stroke-width:.35}.agent-event-bus__control-lane{position:absolute;inset-block:0;left:0;z-index:4;width:12px;cursor:context-menu;outline:none}.agent-event-bus__control-lane:focus-visible{border-radius:calc(var(--radius) / 2);box-shadow:inset 0 0 0 1px hsl(var(--ring))}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono),SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--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);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--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)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 221.2 83.2% 53.3%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96.1%;--secondary-foreground: 222.2 47.4% 11.2%;--muted: 210 40% 96.1%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96.1%;--accent-foreground: 222.2 47.4% 11.2%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 221.2 83.2% 53.3%;--event-bus-agent-message: 188 78% 38%;--event-bus-session-started: 38 92% 48%;--event-bus-epic-assigned: 276 55% 45%;--event-bus-spark: 222.2 47.4% 11.2%;--radius: .5rem;--terminal-background: 210 40% 98%;--terminal-foreground: 222.2 47.4% 11.2%;--terminal-cursor: 221.2 83.2% 53.3%;--terminal-selection: 221.2 83.2% 53.3%;--terminal-selection-opacity: .22;--font-mono: "Ubuntu Mono", "JetBrains Mono", "Fira Code", "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace}.dark{--background: 0 0% 10%;--foreground: 0 0% 90%;--card: 0 0% 13%;--card-foreground: 0 0% 90%;--popover: 0 0% 15%;--popover-foreground: 0 0% 90%;--primary: 210 90% 55%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 18%;--secondary-foreground: 0 0% 90%;--muted: 0 0% 16%;--muted-foreground: 0 0% 65%;--accent: 0 0% 20%;--accent-foreground: 0 0% 90%;--destructive: 0 70% 50%;--destructive-foreground: 0 0% 100%;--border: 0 0% 22%;--input: 0 0% 18%;--ring: 210 90% 55%;--event-bus-agent-message: 186 90% 58%;--event-bus-session-started: 42 94% 60%;--event-bus-epic-assigned: 276 76% 68%;--event-bus-spark: 0 0% 96%;--terminal-background: 0 0% 10%;--terminal-foreground: 0 0% 88%;--terminal-cursor: 210 90% 55%;--terminal-selection: 210 90% 55%;--terminal-selection-opacity: .38;--font-mono: "Ubuntu Mono", "JetBrains Mono", "Fira Code", "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace}html.dark{--diff-gutter-insert-background-color: rgba(46, 160, 67, .2);--diff-gutter-delete-background-color: rgba(248, 81, 73, .2);--diff-code-insert-background-color: rgba(46, 160, 67, .1);--diff-code-delete-background-color: rgba(248, 81, 73, .1);--diff-code-insert-edit-background-color: rgba(46, 160, 67, .35);--diff-code-delete-edit-background-color: rgba(248, 81, 73, .35);--diff-gutter-selected-background-color: rgba(180, 160, 40, .2);--diff-code-selected-background-color: rgba(180, 160, 40, .1);--diff-omit-gutter-line-color: rgba(248, 81, 73, .6)}.theme-ocean{--background: 210 25% 95%;--foreground: 215 25% 20%;--card: 210 30% 98%;--card-foreground: 215 25% 20%;--popover: 210 30% 99%;--popover-foreground: 215 25% 20%;--primary: 205 80% 45%;--primary-foreground: 210 40% 98%;--secondary: 210 20% 90%;--secondary-foreground: 215 25% 25%;--muted: 210 15% 92%;--muted-foreground: 215 15% 45%;--accent: 195 60% 85%;--accent-foreground: 215 30% 22%;--destructive: 0 65% 50%;--destructive-foreground: 210 40% 98%;--border: 210 20% 85%;--input: 210 25% 88%;--ring: 205 80% 45%;--event-bus-agent-message: 174 72% 34%;--event-bus-session-started: 30 88% 48%;--event-bus-epic-assigned: 276 55% 45%;--event-bus-spark: 215 35% 18%;--terminal-background: 210 20% 93%;--terminal-foreground: 215 25% 18%;--terminal-cursor: 205 80% 45%;--terminal-selection: 205 80% 50%;--terminal-selection-opacity: .25;--font-mono: "Ubuntu Mono", "JetBrains Mono", "Fira Code", "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"rlig" 1,"calt" 1}.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:2rem!important;padding-left:2rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.\!container{max-width:1400px!important}.container{max-width:1400px}}.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);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.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] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.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] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.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] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.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);font-weight:600;margin-top:1.25em}.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] *)){font-weight:500;font-style:italic;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}.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);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.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] *)){display:block;margin-top:2em;margin-bottom:2em}.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] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.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] *)){color:inherit}.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] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.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);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.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] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.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);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.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);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.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: rgb(17 24 39 / 10%);--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: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--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] *)){padding-inline-start:.375em}.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] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.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:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.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}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;border-radius:.3125rem;padding-top:.1428571em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.bottom-full{bottom:100%}.left-0{left:0}.left-16{left:4rem}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-2\.5{right:.625rem}.right-3{right:.75rem}.right-4{right:1rem}.right-full{right:100%}.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-4{top:1rem}.top-9{top:2.25rem}.top-\[50\%\]{top:50%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[120\]{z-index:120}.z-\[80\]{z-index:80}.-m-6{margin:-1.5rem}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-0\.5{margin-left:-.125rem}.-ml-4{margin-left:-1rem}.-mr-2{margin-right:-.5rem}.-mt-0\.5{margin-top:-.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-0\.5{margin-right:.125rem}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-24{margin-top:6rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.line-clamp-4{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4}.line-clamp-5{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5}.line-clamp-6{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:6}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.grid{display:grid}.contents{display:contents}.list-item{display:list-item}.\!hidden{display:none!important}.hidden{display:none}.h-0{height:0px}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[320px\]{height:320px}.h-\[72vh\]{height:72vh}.h-\[calc\(100\%-3rem\)\]{height:calc(100% - 3rem)}.h-\[calc\(100vh-24rem\)\]{height:calc(100vh - 24rem)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-96{max-height:24rem}.max-h-\[100px\]{max-height:100px}.max-h-\[200px\]{max-height:200px}.max-h-\[280px\]{max-height:280px}.max-h-\[400px\]{max-height:400px}.max-h-\[420px\]{max-height:420px}.max-h-\[500px\]{max-height:500px}.max-h-\[55vh\]{max-height:55vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[620px\]{max-height:620px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[94vh\]{max-height:94vh}.max-h-\[96\%\]{max-height:96%}.max-h-\[calc\(100vh-300px\)\]{max-height:calc(100vh - 300px)}.max-h-\[min\(400px\,60vh\)\]{max-height:min(400px,60vh)}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-16{min-height:4rem}.min-h-7{min-height:1.75rem}.min-h-\[150px\]{min-height:150px}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[300px\]{min-height:300px}.min-h-\[320px\]{min-height:320px}.min-h-\[40px\]{min-height:40px}.min-h-\[42px\]{min-height:42px}.min-h-\[60px\]{min-height:60px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80px\]{min-height:80px}.min-h-\[8rem\]{min-height:8rem}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-1\/5{width:20%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-2\/5{width:40%}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[--radix-popover-trigger-width\]{width:var(--radix-popover-trigger-width)}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[150px\]{width:150px}.w-\[160px\]{width:160px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-\[220px\]{width:220px}.w-\[22rem\]{width:22rem}.w-\[240px\]{width:240px}.w-\[260px\]{width:260px}.w-\[340px\]{width:340px}.w-\[40px\]{width:40px}.w-\[70px\]{width:70px}.w-\[80px\]{width:80px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-\[100px\]{min-width:100px}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[150px\]{min-width:150px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[24px\]{min-width:24px}.min-w-\[720px\]{min-width:720px}.min-w-\[80px\]{min-width:80px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-52{max-width:13rem}.max-w-5xl{max-width:64rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[140px\]{max-width:140px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-\[360px\]{max-width:360px}.max-w-\[45\%\]{max-width:45%}.max-w-\[800px\]{max-width:800px}.max-w-\[80px\]{max-width:80px}.max-w-\[85\%\]{max-width:85%}.max-w-\[90\%\]{max-width:90%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes busy-halo{0%,to{border-color:hsl(var(--primary) / .45);box-shadow:0 0 6px hsl(var(--primary) / .22)}50%{border-color:#22d3eea6;box-shadow:0 0 10px #22d3ee61}}.animate-busy-halo{animation:busy-halo 5s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness: mandatory}.snap-start{scroll-snap-align:start}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[1fr_320px\]{grid-template-columns:1fr 320px}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.\!justify-start{justify-content:flex-start!important}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * 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]){border-color:hsl(var(--border))}.self-center{align-self:center}.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{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-l-\[5px\]{border-top-left-radius:5px;border-bottom-left-radius:5px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-\[5px\]{border-top-right-radius:5px;border-bottom-right-radius:5px}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.border-accent-foreground\/30{border-color:hsl(var(--accent-foreground) / .3)}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-400\/40{border-color:#fbbf2466}.border-amber-400\/50{border-color:#fbbf2480}.border-amber-400\/60{border-color:#fbbf2499}.border-amber-500{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/40{border-color:#f59e0b66}.border-amber-500\/50{border-color:#f59e0b80}.border-amber-500\/60{border-color:#f59e0b99}.border-amber-500\/70{border-color:#f59e0bb3}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500\/40{border-color:#3b82f666}.border-blue-500\/50{border-color:#3b82f680}.border-blue-600\/50{border-color:#2563eb80}.border-border{border-color:hsl(var(--border))}.border-border\/20{border-color:hsl(var(--border) / .2)}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-border\/80{border-color:hsl(var(--border) / .8)}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-destructive\/60{border-color:hsl(var(--destructive) / .6)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-emerald-300{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.border-emerald-400\/40{border-color:#34d39966}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-emerald-500\/40{border-color:#10b98166}.border-emerald-500\/60{border-color:#10b98199}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-green-600\/50{border-color:#16a34a80}.border-input{border-color:hsl(var(--input))}.border-lime-200{--tw-border-opacity: 1;border-color:rgb(217 249 157 / var(--tw-border-opacity, 1))}.border-muted{border-color:hsl(var(--muted))}.border-muted-foreground\/30{border-color:hsl(var(--muted-foreground) / .3)}.border-muted-foreground\/40{border-color:hsl(var(--muted-foreground) / .4)}.border-orange-200{--tw-border-opacity: 1;border-color:rgb(254 215 170 / var(--tw-border-opacity, 1))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-primary\/60{border-color:hsl(var(--primary) / .6)}.border-purple-500\/40{border-color:#a855f766}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/40{border-color:#ef444466}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-sky-200{--tw-border-opacity: 1;border-color:rgb(186 230 253 / var(--tw-border-opacity, 1))}.border-sky-500\/30{border-color:#0ea5e94d}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-400\/40{border-color:#94a3b866}.border-transparent{border-color:transparent}.border-yellow-600{--tw-border-opacity: 1;border-color:rgb(202 138 4 / var(--tw-border-opacity, 1))}.border-yellow-600\/40{border-color:#ca8a0466}.border-l-amber-500{--tw-border-opacity: 1;border-left-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-l-border{border-left-color:hsl(var(--border))}.border-l-emerald-400\/40{border-left-color:#34d39966}.border-l-primary{border-left-color:hsl(var(--primary))}.border-l-transparent{border-left-color:transparent}.border-r-primary{border-right-color:hsl(var(--primary))}.border-r-transparent{border-right-color:transparent}.border-t-border{border-top-color:hsl(var(--border))}.border-t-transparent{border-top-color:transparent}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/50{background-color:hsl(var(--accent) / .5)}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/50{background-color:#fffbeb80}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/5{background-color:#f59e0b0d}.bg-background{background-color:hsl(var(--background))}.bg-background\/60{background-color:hsl(var(--background) / .6)}.bg-background\/90{background-color:hsl(var(--background) / .9)}.bg-background\/95{background-color:hsl(var(--background) / .95)}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-border\/40{background-color:hsl(var(--border) / .4)}.bg-card{background-color:hsl(var(--card))}.bg-card\/40{background-color:hsl(var(--card) / .4)}.bg-card\/50{background-color:hsl(var(--card) / .5)}.bg-card\/60{background-color:hsl(var(--card) / .6)}.bg-card\/70{background-color:hsl(var(--card) / .7)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-current{background-color:currentColor}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/70{background-color:#ecfdf5b3}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-50\/50{background-color:#f0fdf480}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-lime-50{--tw-bg-opacity: 1;background-color:rgb(247 254 231 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted-foreground\/50{background-color:hsl(var(--muted-foreground) / .5)}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-muted\/70{background-color:hsl(var(--muted) / .7)}.bg-muted\/80{background-color:hsl(var(--muted) / .8)}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-500\/40{background-color:#f9731666}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/20{background-color:hsl(var(--primary) / .2)}.bg-primary\/25{background-color:hsl(var(--primary) / .25)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/50{background-color:hsl(var(--primary) / .5)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-primary\/75{background-color:hsl(var(--primary) / .75)}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-50\/60{background-color:#fef2f299}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-50{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-500\/10{background-color:#64748b1a}.bg-terminal{background-color:hsl(var(--terminal-background))}.bg-terminal\/80{background-color:hsl(var(--terminal-background) / .8)}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.fill-amber-400{fill:#fbbf24}.fill-amber-500{fill:#f59e0b}.fill-current{fill:currentColor}.fill-foreground\/70{fill:hsl(var(--foreground) / .7)}.fill-primary{fill:hsl(var(--primary))}.stroke-foreground\/70{stroke:hsl(var(--foreground) / .7)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-1{padding-left:.25rem}.pl-1\.5{padding-left:.375rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pr-12{padding-right:3rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-mono{font-family:var(--font-mono),SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-9xl{font-size:8rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal: ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.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-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#8f4f39\]{--tw-text-opacity: 1;color:rgb(143 79 57 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-700\/90{color:#b45309e6}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-800\/70{color:#92400eb3}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-cyan-800{--tw-text-opacity: 1;color:rgb(21 94 117 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-foreground\/70{color:hsl(var(--foreground) / .7)}.text-foreground\/80{color:hsl(var(--foreground) / .8)}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-lime-800{--tw-text-opacity: 1;color:rgb(63 98 18 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/30{color:hsl(var(--muted-foreground) / .3)}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-orange-800{--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/80{color:hsl(var(--primary) / .8)}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-700\/90{color:#b91c1ce6}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-rose-800{--tw-text-opacity: 1;color:rgb(159 18 57 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-sky-800{--tw-text-opacity: 1;color:rgb(7 89 133 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-terminal-foreground{color:hsl(var(--terminal-foreground))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-700{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.decoration-dotted{text-decoration-style:dotted}.decoration-2{text-decoration-thickness:2px}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-foreground{accent-color:hsl(var(--foreground))}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_hsl\(var\(--primary\)\/0\.35\)\]{--tw-shadow: 0 0 8px hsl(var(--primary)/.35);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_20px_45px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow: 0 20px 45px rgba(0,0,0,.35);--tw-shadow-colored: 0 20px 45px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-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-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--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)}.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-destructive{--tw-ring-color: hsl(var(--destructive))}.ring-destructive\/50{--tw-ring-color: hsl(var(--destructive) / .5)}.ring-primary{--tw-ring-color: hsl(var(--primary))}.ring-ring{--tw-ring-color: hsl(var(--ring))}.ring-offset-2{--tw-ring-offset-width: 2px}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[border-color\,background-color\,box-shadow\]{transition-property:border-color,background-color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[filter\,opacity\]{transition-property:filter,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[height\]{transition-property:height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\!loading,.loading{display:flex;height:100vh;align-items:center;justify-content:center;font-size:1.25rem;line-height:1.75rem}.\[formatted\:mcp\.direct\]{formatted:mcp.direct}.\[writing-mode\:vertical-lr\]{writing-mode:vertical-lr}*::-webkit-scrollbar{width:10px;height:10px;background:#e8e8e8}*::-webkit-scrollbar-track{background:#e8e8e8}*::-webkit-scrollbar-thumb{background:#b0b0b0;border-radius:5px;border:2px solid #e8e8e8}*::-webkit-scrollbar-thumb:hover{background:#909090}*::-webkit-scrollbar-corner{background:#e8e8e8}*{scrollbar-width:thin;scrollbar-color:#b0b0b0 #e8e8e8}.dark *::-webkit-scrollbar{background:#252525}.dark *::-webkit-scrollbar-track{background:#252525}.dark *::-webkit-scrollbar-thumb{background:#5a5a5a;border:2px solid #252525}.dark *::-webkit-scrollbar-thumb:hover{background:#6a6a6a}.dark *::-webkit-scrollbar-corner{background:#252525}.dark *{scrollbar-color:#5a5a5a #252525}.dark .xterm-viewport::-webkit-scrollbar{background:#252525}.dark .xterm-viewport::-webkit-scrollbar-track{background:#252525}.dark .xterm-viewport::-webkit-scrollbar-thumb{background:#5a5a5a;border:2px solid #252525}.dark .xterm-viewport::-webkit-scrollbar-thumb:hover{background:#6a6a6a}.dark .xterm-viewport{scrollbar-color:#5a5a5a #252525}.diff-viewer{width:100%;min-width:-moz-max-content;min-width:max-content}.diff-viewer .diff{width:-moz-max-content;width:max-content;min-width:100%;border-collapse:collapse}.diff-viewer .diff-gutter,.diff-viewer .diff-gutter-col{width:32px!important;min-width:32px!important;max-width:32px!important;padding:0 4px!important;text-align:right;font-size:11px;color:hsl(var(--muted-foreground));-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;vertical-align:top}.diff-viewer .diff-code,.diff-viewer .diff-code-cell{white-space:pre;word-break:normal;overflow-wrap:normal;padding:0 8px!important;font-size:12px;font-family:var(--font-mono);line-height:1.5}.diff-viewer .diff-code-content{display:inline}.diff-viewer .diff-line{line-height:1.4}.diff-viewer.diff-split .diff-gutter-col{width:28px!important;min-width:28px!important;max-width:28px!important}.diff-viewer.diff-split .diff-code-col{width:auto}.diff-viewer .diff-widget-content{width:1px}.diff-viewer .inline-comment-wrapper{width:clamp(350px,calc(100vw - 600px),900px);overflow-wrap:anywhere;word-break:break-word}.diff-viewer .new-comment-form,.diff-viewer [data-testid=comment-thread]{width:100%;max-width:100%;overflow-wrap:anywhere;word-break:break-word}.diff-viewer .inline-comment-wrapper p,.diff-viewer .inline-comment-wrapper .text-sm,.diff-viewer [data-testid=comment-thread] p,.diff-viewer .pl-4 p{overflow-wrap:anywhere;word-break:break-word;white-space:pre-wrap}.dark\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:w-px:after{content:var(--tw-content);width:1px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:bg-border:after{content:var(--tw-content);background-color:hsl(var(--border))}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-accent-foreground\/20:hover{border-color:hsl(var(--accent-foreground) / .2)}.hover\:border-amber-500:hover{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.hover\:border-border:hover{border-color:hsl(var(--border))}.hover\:border-destructive\/40:hover{border-color:hsl(var(--destructive) / .4)}.hover\:border-emerald-500:hover{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:border-r-primary:hover{border-right-color:hsl(var(--primary))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent-foreground\/10:hover{background-color:hsl(var(--accent-foreground) / .1)}.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent) / .5)}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-200:hover{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-500\/20:hover{background-color:#f59e0b33}.hover\:bg-background:hover{background-color:hsl(var(--background))}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/20:hover{background-color:hsl(var(--destructive) / .2)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/15:hover{background-color:#10b98126}.hover\:bg-emerald-500\/20:hover{background-color:#10b98133}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}.hover\:bg-muted\/40:hover{background-color:hsl(var(--muted) / .4)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-muted\/70:hover{background-color:hsl(var(--muted) / .7)}.hover\:bg-muted\/80:hover{background-color:hsl(var(--muted) / .8)}.hover\:bg-primary\/10:hover{background-color:hsl(var(--primary) / .1)}.hover\:bg-primary\/5:hover{background-color:hsl(var(--primary) / .05)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-transparent:hover{background-color:transparent}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-800:hover{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.hover\:text-amber-900:hover{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.hover\:text-emerald-700:hover{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-green-700:hover{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-primary\/80:hover{color:hsl(var(--primary) / .8)}.hover\:underline:hover{text-decoration-line:underline}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:ring-2:hover{--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)}.hover\:ring-primary:hover{--tw-ring-color: hsl(var(--primary))}.hover\:ring-primary\/40:hover{--tw-ring-color: hsl(var(--primary) / .4)}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-destructive\/10:focus{background-color:hsl(var(--destructive) / .1)}.focus\:bg-muted:focus{background-color:hsl(var(--muted))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-destructive:focus{color:hsl(var(--destructive))}.focus\:underline:focus{text-decoration-line:underline}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(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\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-0:focus{--tw-ring-offset-width: 0px}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:rounded-sm:focus-visible{border-radius:calc(var(--radius) - 4px)}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset: inset}.focus-visible\:ring-destructive:focus-visible{--tw-ring-color: hsl(var(--destructive))}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width: 0px}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.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}.disabled\:opacity-60:disabled{opacity:.6}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:bg-muted\/50{background-color:hsl(var(--muted) / .5)}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-\[orientation\=horizontal\]\:h-2[aria-orientation=horizontal]{height:.5rem}.aria-\[orientation\=horizontal\]\:w-full[aria-orientation=horizontal]{width:100%}.aria-\[orientation\=horizontal\]\:after\:inset-y-auto[aria-orientation=horizontal]:after{content:var(--tw-content);top:auto;bottom:auto}.aria-\[orientation\=horizontal\]\:after\:left-0[aria-orientation=horizontal]:after{content:var(--tw-content);left:0}.aria-\[orientation\=horizontal\]\:after\:top-1\/2[aria-orientation=horizontal]:after{content:var(--tw-content);top:50%}.aria-\[orientation\=horizontal\]\:after\:h-px[aria-orientation=horizontal]:after{content:var(--tw-content);height:1px}.aria-\[orientation\=horizontal\]\:after\:w-full[aria-orientation=horizontal]:after{content:var(--tw-content);width:100%}.aria-\[orientation\=horizontal\]\:after\:-translate-y-1\/2[aria-orientation=horizontal]:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.aria-\[orientation\=horizontal\]\:after\:translate-x-0[aria-orientation=horizontal]:after{content:var(--tw-content);--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[orientation\=horizontal\]\:h-0[data-orientation=horizontal]{height:0px}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.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)) skew(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)) skew(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)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=active\]\:bg-muted[data-state=active]{background-color:hsl(var(--muted))}.data-\[state\=checked\]\:bg-primary[data-state=checked],.data-\[state\=indeterminate\]\:bg-primary[data-state=indeterminate]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:\!bg-primary[data-state=on]{background-color:hsl(var(--primary))!important}.data-\[state\=on\]\:bg-accent[data-state=on],.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-muted-foreground\/50[data-state=unchecked]{background-color:hsl(var(--muted-foreground) / .5)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked],.data-\[state\=indeterminate\]\:text-primary-foreground[data-state=indeterminate]{color:hsl(var(--primary-foreground))}.data-\[state\=on\]\:\!text-primary-foreground[data-state=on]{color:hsl(var(--primary-foreground))!important}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow-none[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.group\/indicator[data-state=indeterminate] .group-data-\[state\=indeterminate\]\/indicator\:block{display:block}.group\/indicator[data-state=indeterminate] .group-data-\[state\=indeterminate\]\/indicator\:hidden{display:none}.group[data-state=open] .group-data-\[state\=open\]\:rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sidebar-collapsed .sidebar-collapsed\:gap-3{gap:.75rem}.dark\:border-amber-600\/40:is(.dark *){border-color:#d9770666}.dark\:border-amber-600\/60:is(.dark *){border-color:#d9770699}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-amber-900:is(.dark *){--tw-border-opacity: 1;border-color:rgb(120 53 15 / var(--tw-border-opacity, 1))}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:border-destructive\/60:is(.dark *){border-color:hsl(var(--destructive) / .6)}.dark\:border-green-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.dark\:border-red-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:bg-amber-900\/30:is(.dark *){background-color:#78350f4d}.dark\:bg-amber-900\/50:is(.dark *){background-color:#78350f80}.dark\:bg-amber-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(69 26 3 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-950\/20:is(.dark *){background-color:#451a0333}.dark\:bg-amber-950\/30:is(.dark *){background-color:#451a034d}.dark\:bg-background:is(.dark *){background-color:hsl(var(--background))}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-blue-900\/40:is(.dark *){background-color:#1e3a8a66}.dark\:bg-blue-950\/20:is(.dark *){background-color:#17255433}.dark\:bg-blue-950\/30:is(.dark *){background-color:#1725544d}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/50:is(.dark *){background-color:#14532d80}.dark\:bg-green-950\/30:is(.dark *){background-color:#052e164d}.dark\:bg-orange-900\/50:is(.dark *){background-color:#7c2d1280}.dark\:bg-red-900\/50:is(.dark *){background-color:#7f1d1d80}.dark\:bg-red-950\/20:is(.dark *){background-color:#450a0a33}.dark\:bg-red-950\/30:is(.dark *){background-color:#450a0a4d}.dark\:text-\[\#d08a67\]:is(.dark *){--tw-text-opacity: 1;color:rgb(208 138 103 / var(--tw-text-opacity, 1))}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-amber-400\/70:is(.dark *){color:#fbbf24b3}.dark\:text-amber-500:is(.dark *){--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-orange-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-yellow-500:is(.dark *){--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-amber-900:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(120 53 15 / var(--tw-bg-opacity, 1))}.dark\:hover\:text-amber-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}@media (min-width: 640px){.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:hidden{display:none}.sm\:w-44{width:11rem}.sm\:w-48{width:12rem}.sm\:w-\[480px\]{width:480px}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[180px\,minmax\(0\,1fr\)\]{grid-template-columns:180px minmax(0,1fr)}.sm\:grid-cols-\[2fr\,1\.2fr\,1\.2fr\]{grid-template-columns:2fr 1.2fr 1.2fr}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-6{padding:1.5rem}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width: 768px){.md\:flex{display:flex}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1fr\)_280px\]{grid-template-columns:minmax(0,1fr) 280px}}@media (min-width: 1024px){.lg\:relative{position:relative}.lg\:left-0{left:0}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:max-h-\[520px\]{max-height:520px}.lg\:w-0{width:0px}.lg\:w-1\/2{width:50%}.lg\:w-72{width:18rem}.lg\:min-w-\[360px\]{min-width:360px}.lg\:min-w-\[420px\]{min-width:420px}.lg\:max-w-5xl{max-width:64rem}.lg\:max-w-\[45\%\]{max-width:45%}.lg\:basis-\[45\%\]{flex-basis:45%}.lg\:basis-\[55\%\]{flex-basis:55%}.lg\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-\[1fr_1\.5fr\]{grid-template-columns:1fr 1.5fr}.lg\:grid-cols-\[2fr_1fr\]{grid-template-columns:2fr 1fr}.lg\:grid-cols-\[minmax\(0\,2fr\)_minmax\(260px\,1fr\)\]{grid-template-columns:minmax(0,2fr) minmax(260px,1fr)}.lg\:flex-row{flex-direction:row}.lg\:flex-col{flex-direction:column}.lg\:items-start{align-items:flex-start}.lg\:overflow-auto{overflow:auto}.lg\:border-b-0{border-bottom-width:0px}.lg\:border-r{border-right-width:1px}.lg\:p-8{padding:2rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pl-6{padding-left:1.5rem}.lg\:pt-0{padding-top:0}.lg\:after\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.lg\:after\:absolute:after{content:var(--tw-content);position:absolute}.lg\:after\:bottom-2:after{content:var(--tw-content);bottom:.5rem}.lg\:after\:right-0:after{content:var(--tw-content);right:0}.lg\:after\:top-2:after{content:var(--tw-content);top:.5rem}.lg\:after\:w-0\.5:after{content:var(--tw-content);width:.125rem}.lg\:after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.lg\:after\:bg-primary:after{content:var(--tw-content);background-color:hsl(var(--primary))}}@media (min-width: 1280px){.xl\:max-w-6xl{max-width:72rem}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\:last-child\]\:hidden>svg:last-child{display:none}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:hidden>svg{display:none}.\[\&\>svg\]\:h-3\.5>svg{height:.875rem}.\[\&\>svg\]\:w-3\.5>svg{width:.875rem}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&\[aria-orientation\=horizontal\]\>div\]\:rotate-90[aria-orientation=horizontal]>div{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_a\:hover\]\:text-foreground a:hover{color:hsl(var(--foreground))}.\[\&_a\]\:text-muted-foreground a{color:hsl(var(--muted-foreground))}.\[\&_p\]\:my-1 p{margin-top:.25rem;margin-bottom:.25rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_pre\]\:text-\[11px\] pre{font-size:11px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var ma=e=>{throw TypeError(e)};var da=(e,n,t)=>n.has(e)||ma("Cannot "+t);var Tn=(e,n,t)=>(da(e,n,"read from private field"),t?t.call(e):n.get(e)),ha=(e,n,t)=>n.has(e)?ma("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,t),fa=(e,n,t,r)=>(da(e,n,"write to private field"),r?r.call(e,t):n.set(e,t),t);import{c as Ke,r as y,J as cr,L,P as Wt,N as qi,O as je,Q as Zi,U as Ns,V as Qi,W as Ji,X as eo,j as u,a as X,Y as no,Z as to,_ as pr,$ as mr,a0 as dr,d as dt,e as ht,a1 as ro,B as ye,M as Ae,l as hr,o as ee,a2 as ft,a3 as at,a4 as $e,a5 as _n,a6 as ao,a7 as so,a8 as io,a9 as oo,aa as lo,ab as uo,ac as co,ad as ga,ae as po,af as mo,ag as st,ah as it,ai as ot,aj as lt,ak as ut,al as Yt,am as fr,y as Nn,an as ws,T as Ot,v as Vt,w as Lt,x as Mt,ao as gr,ap as ho,z as Pe,aq as Ft,ar as Pt,S as fo,p as go,q as bo,s as vo,t as No,as as wo,at as xo,au as ba,av as yo,aw as Eo,g as wn,n as $n,ax as gn,ay as So,az as Do,aA as Co,aB as To,aC as ko,aD as Ao,aE as Io,aF as Ro,aG as _o,aH as jo,aI as Oo,aJ as Vo,K as Lo,aK as Mo}from"./index-
|
|
1
|
+
var ma=e=>{throw TypeError(e)};var da=(e,n,t)=>n.has(e)||ma("Cannot "+t);var Tn=(e,n,t)=>(da(e,n,"read from private field"),t?t.call(e):n.get(e)),ha=(e,n,t)=>n.has(e)?ma("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,t),fa=(e,n,t,r)=>(da(e,n,"write to private field"),r?r.call(e,t):n.set(e,t),t);import{c as Ke,r as y,J as cr,L,P as Wt,N as qi,O as je,Q as Zi,U as Ns,V as Qi,W as Ji,X as eo,j as u,a as X,Y as no,Z as to,_ as pr,$ as mr,a0 as dr,d as dt,e as ht,a1 as ro,B as ye,M as Ae,l as hr,o as ee,a2 as ft,a3 as at,a4 as $e,a5 as _n,a6 as ao,a7 as so,a8 as io,a9 as oo,aa as lo,ab as uo,ac as co,ad as ga,ae as po,af as mo,ag as st,ah as it,ai as ot,aj as lt,ak as ut,al as Yt,am as fr,y as Nn,an as ws,T as Ot,v as Vt,w as Lt,x as Mt,ao as gr,ap as ho,z as Pe,aq as Ft,ar as Pt,S as fo,p as go,q as bo,s as vo,t as No,as as wo,at as xo,au as ba,av as yo,aw as Eo,g as wn,n as $n,ax as gn,ay as So,az as Do,aA as Co,aB as To,aC as ko,aD as Ao,aE as Io,aF as Ro,aG as _o,aH as jo,aI as Oo,aJ as Vo,K as Lo,aK as Mo}from"./index-LNBfBNWF.js";/**
|
|
2
2
|
* @license lucide-react v0.545.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
7
7
|
<title>Devchain - Local App</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-LNBfBNWF.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-NypjSmlZ.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"slug": "teams-dev",
|
|
4
4
|
"name": "Teams Development Flow",
|
|
5
5
|
"description": "A multi-agent development workflow that automates software delivery through three phases:\n\n1. Planning — A Brainstormer agent collaborates with a technical validator to refine user requirements into an approved master plan, then breaks it down into epics and tasks.\n2. Execution — A Coder agent implements tasks while an Epic Manager reviews and controls the flow—approving, revising, or flagging issues until all work is complete.\n3. Code Review — A Code Reviewer audits the completed work against architectural standards, generating findings that feed back into new remediation tasks if needed.\n\nSupported agents: claude, codex, glm, agy",
|
|
6
|
-
"version": "1.1.
|
|
6
|
+
"version": "1.1.47",
|
|
7
7
|
"category": "development",
|
|
8
8
|
"tags": [
|
|
9
9
|
"development",
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"authorName": "Devchain",
|
|
16
16
|
"changelog": "",
|
|
17
17
|
"minDevchainVersion": "0.12.0",
|
|
18
|
-
"publishedAt": "2026-08-
|
|
18
|
+
"publishedAt": "2026-08-10T20:13:53.856Z"
|
|
19
19
|
},
|
|
20
20
|
"version": 1,
|
|
21
|
-
"exportedAt": "2026-08-
|
|
21
|
+
"exportedAt": "2026-08-10T20:13:53.856Z",
|
|
22
22
|
"prompts": [
|
|
23
23
|
{
|
|
24
24
|
"id": "eaaccc8a-e7df-4f0d-8bdc-086ec4aa8f5e",
|
|
@@ -29,6 +29,15 @@
|
|
|
29
29
|
"type:system"
|
|
30
30
|
]
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
"id": "c16d8c21-0d11-4a1e-8c18-642b981fb5a2",
|
|
34
|
+
"title": "Code Simplifier",
|
|
35
|
+
"content": "run devchain/code-simplifier (via devchain_get_skill)",
|
|
36
|
+
"version": 5,
|
|
37
|
+
"tags": [
|
|
38
|
+
"type:custom"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
32
41
|
{
|
|
33
42
|
"id": "0dccf848-687d-41df-bcc5-c23281198f12",
|
|
34
43
|
"title": "Code-Aware Technical Lead - SOP",
|
|
@@ -41,9 +50,9 @@
|
|
|
41
50
|
},
|
|
42
51
|
{
|
|
43
52
|
"id": "3b03664c-8b42-40a2-a74c-5d3260cb43c7",
|
|
44
|
-
"title": "
|
|
45
|
-
"content": "
|
|
46
|
-
"version":
|
|
53
|
+
"title": "Create commit",
|
|
54
|
+
"content": "run devchain/create-commit (via devchain_get_skill)",
|
|
55
|
+
"version": 5,
|
|
47
56
|
"tags": [
|
|
48
57
|
"type:custom"
|
|
49
58
|
]
|
|
@@ -78,6 +87,15 @@
|
|
|
78
87
|
"type:system"
|
|
79
88
|
]
|
|
80
89
|
},
|
|
90
|
+
{
|
|
91
|
+
"id": "7d2ae2fd-4075-442f-b888-6484819d33df",
|
|
92
|
+
"title": "Improve Codebase Architecture",
|
|
93
|
+
"content": "run devchain/improve-codebase-architecture (via devchain_get_skill)",
|
|
94
|
+
"version": 3,
|
|
95
|
+
"tags": [
|
|
96
|
+
"type:custom"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
81
99
|
{
|
|
82
100
|
"id": "343b9fab-065f-436a-9e7d-ef89dbce2289",
|
|
83
101
|
"title": "Initialize Agent",
|
|
@@ -100,8 +118,8 @@
|
|
|
100
118
|
{
|
|
101
119
|
"id": "2672896a-3420-4ffe-991d-10b3046149bf",
|
|
102
120
|
"title": "Reviewer/Architect — Plan Decomposition SOP",
|
|
103
|
-
"content": "# Architect — Plan/Research Decomposition SOP (v1.17)\n\n> **Type:** agent-instructions\n> **Priority:** mandatory\n> **Run the Documentation Validation Step (Section 11) first — nothing else before discussion.**\n> **Hard Stop:** Operate only from a master plan provided by the user, or one discussed and explicitly approved by the user.\n\n---\n\n## 0) Purpose & Role\n\n**Role:** **Project Architect**.\n**Mission:** When planning is done and you are asked to do so, break it into an executable project structure for a *Worker AI*: phases → epics → sub‑epics/tasks → backlog.\n**Non‑goals:** Avoid over‑engineering. Defer nice‑to‑haves to backlog.\n**Scope boundary:** Plans cover development work only — code, tests, docs. Production releases, deployments, cutovers, and legacy‑system migration/decommissioning are a separate responsibility and are out of scope unless the user explicitly requests them (§13).\n**Restriction:** Does NOT write code — only plans and creates task breakdowns.\n**Exception 1:** Documentation tasks from Section 11 (project docs, development standards) MUST be executed directly by this agent before creating any Phase Epics. These are planning artifacts, not code.\n**Exception 2:** Small, fully-scoped, low-risk changes may be implemented directly by this agent via the Fast Path (§1.7) — only after proposing it and receiving explicit user approval.\nAfter Planning Complete (normal flow): Call ExitPlanMode, DO NOT start implementing — another agent will execute. (Exceptions: §11 documentation tasks; §1.7 Fast Path after user approval.)\n\n---\n\n## 0.1) Writing & Decision Style\n\n**Writing**\n- State the recommendation first.\n- One main idea per sentence. Short declarative sentences. Subject-Verb-Object order.\n- Use plain words. Use exact names for languages, frameworks, APIs, files, and dependencies.\n- Remove filler, repeated summaries, vague warnings, and corporate language.\n- Exception: repetition the §5 sub-epic template mandates (verbatim Master Plan requirements) stays — Workers need self-contained epics.\n\n**Decisions**\n- Recommend one approach. Explain the main trade-off.\n- Mention an alternative only when it could change the decision.\n- Separate required work from optional work.\n- State assumptions when evidence is missing.\n- Link each recommendation to a specific bug, failure, cost, or user problem. Never cite a best practice without naming the failure it prevents.\n\n**Engineering bias (plan-level; project standards docs still win)**\n- Use existing platform features before adding code; standard libraries before new dependencies.\n- Keep existing code unless the task requires a refactor.\n- Prefer solutions one person can build and maintain.\n- Add approval steps, extra services, audit systems, or redundancy only when they prevent a specific, named failure.\n\n---\n\n## 1) Canonical States & Tools\n\n**Canonical states:** Phase Epic `Draft` · Backlog Epic `BACKLOG` · Sub‑Epic `New`.\n\n**Required tools:**\n\n* `devchain_create_epic`\n* `devchain_update_epic`\n* `devchain_get_epic_by_id`\n* `devchain_list_prompts` / `devchain_get_prompt`\n\n> *Note:* Sub‑epics are created with `devchain_create_epic` and a `parentId` that points to the parent epic.\n\n---\n\n## 1.4) Pre-Draft Verification\n\n**Before drafting any plan, do your own research, planning, and code exploration. Parallelize the investigation with multiple agents. Verify user input against the codebase:**\n\n1. **Read actual files** — Don't propose changes to files you haven't read\n2. **Verify counts** — Use Glob/Grep to get exact numbers, not estimates\n3. **Check versions/support** — Confirm features exist in current dependencies\n4. **Challenge assumptions** — Ask: \"Is the user's diagnosis correct? What did they miss?\"\n5. **Discover relevant skills** — Use `devchain_list_skills` to find skills matching the task domain (e.g., react, typescript, architecture). Read the most relevant ones (max 5). Incorporate their guidance into the Draft Plan where applicable (patterns, anti-patterns, constraints the Worker should follow).\n\n**Anti-patterns:**\n- ❌ Reformatting user input without verification\n- ❌ Using \"~60 files\" when you can count exactly\n- ❌ Assuming config options exist without checking\n\n**Output:** Draft Plan with verified facts and file:line references\n\n## 1.4.1) Independent Parallel Planning (optional, user-gated)\n\n**When to use:** For large, ambiguous, or architecturally novel tasks (new subsystems, cross-cutting refactors, renderer/protocol changes, unclear requirements). SKIP for small bug fixes, doc updates, scoped refactors, or remediation work.\n**Procedure:**\n\n1. After §1.4 Pre-Draft Verification, before drafting the Master Plan, ask the user: \"Would you like the Planning team to run parallel independent research on this?\" If no, skip this section.\n\n2. On approval, broadcast the USER'S RAW REQUEST (not your framing) plus verified facts from §1.4 to the team via `devchain_send_message(sessionId, message: ...)`. No `teamName` needed — your team is resolved from your session; as team lead this broadcasts to all OTHER members. Explicitly instruct them: \"Do your own independent research and planning — I'm working in parallel. Present your framing in your own terms. Goal is diverse framings, not validation.\"\n\n3. Do NOT poll for responses. Continue your own research + drafting in parallel. Team responses will be pasted to you when ready.\n\n4. Wait until all expected reviewers respond before presenting the plan to the user, reconcile against your own plan:\n - Blocker or constraint you missed → incorporate.\n - Alternative design approach → evaluate trade-offs; pick the stronger or synthesize a merged plan. Note the decision explicitly.\n - Minor differences → note and proceed with your version.\n\n5. Once your consolidated Master Plan is drafted, proceed to §1.5 Technical Validation Loop as normal. §1.4.1 informs the draft; §1.5 gates it.\n\n**Anti-patterns:**\n- ❌ Asking every time — only for tasks where diverse framings add real value.\n- ❌ Sharing your draft or framing — it will anchor the team to your view.\n- ❌ Skipping §1.5 after §1.4.1 — independent planning informs, validation gates.\n- ❌ Treating their plans as rubber-stamps of yours — that's §1.5's purpose.\n\n---\n\n## 1.5) Technical Validation Loop (Team Review)\n\n**Trigger:** After drafting the initial Master Plan, before asking for final user approval.\n\n**Procedure:**\n1. Send draft to your team via:\n `devchain_send_message(sessionId, message: \"Review this Draft Plan against the actual code.\\n\\n[INCLUDE YOUR DRAFT PLAN]\")`\n No `teamName` needed — your team is resolved from your session. As team lead, this broadcasts to all OTHER team members.\n2. **HARD STOP.** Inform the user: \"Draft plan sent to team for technical validation.\"\n Do NOT check for responses. Team responses will be pasted to you. Wait until all expected reviewers respond before presenting the plan to the user.\n3. **Reconcile all received feedback** (apply the §1.6 blocker definition first):\n - Verified blocker (fails the stated goal, or breaks under normal expected use, with file:line evidence) → incorporate before user approval.\n - Alternative design → evaluate trade-offs and choose or synthesize.\n - Edge case outside normal use, SUSPECTED/unverified claim, or future-proofing suggestion → verify cheaply if one read/grep settles it; otherwise triage through the §6 value gate: register only items that pass, drop the rest. Add a \"Deferred: <X> — backlog\" note to the plan only for registered items. Do NOT grow the plan to absorb these, and do NOT register them all.\n - Minor suggestion → incorporate if low-risk, otherwise note as optional.\n If verified blockers remain, refine and re-send. Up to 3 rounds.\n4. If feedback changes the plan materially, send one revised round to the team and repeat once.\n5. **⚠️ After final plan is ready, STOP team communication.** Present only the final validated plan to the USER.\n - Do not end with passive notes only. Always answer: \"What should happen next?\"\n\n**Exception:** For requests related to Technical Review of already completed tasks, you are authorized to:\n- Do planning and convert directly into a Master Plan without the Technical Validation Loop.\n- Only during technical review of an already completed task: you may apply a direct fix without opening an epic when the change is small and scoped to the reviewer's feedback (it passes the §1.7 qualification test; the reviewer's feedback stands in for user approval here). After the fix, reply to the reviewer summarizing what changed and re-request review. For anything larger, follow the rules below to create a new epic instead.\n- **ALWAYS create a NEW parent epic** — never add to existing remediation epics: `Code Review Remediation <number>: <Phase Name>`\n - Status: **Draft**\n - Do NOT add sub-epics to the original Phase Epic\n- Decompose findings into sub-epics (**New** status) under this new remediation epic.\n- Don't send notifications to anyone.\n- Once you create all sub-epics, update the remediation parent epic agentName to Epic Manager.\n\n---\n\n## 1.6) Scope Discipline (applies to drafting AND reconciliation)\n\n**Every item in the plan must trace to one of:**\n1. The user's explicit request,\n2. A failure that occurs under **normal expected use** (name the concrete triggering scenario),\n3. A documented project standard (e.g., docs/development-standards.md).\n\nAnything else — hypothetical scale, misuse-only inputs, future features, \"while we're here\" hardening — is out of the plan. **Deferring is the correct, default handling of edge cases — it is not negligence.** Route deferred items through the §6 value gate: the few that pass become backlog `CONCERN` entries; the rest are deliberately dropped (the review record preserves them).\n\n**Edge-case triage test:** \"Can this condition occur given the current callers, config, and deployment?\" If reaching it requires misuse, a feature that doesn't exist yet, or hypothetical scale — backlog, not plan.\n\n**Delivery boundary — plan the change, not the rollout.** \"Build X\" never implies \"deploy X\", \"migrate off Y\", or \"keep Y running alongside X\". Only the user's own words put rollout work in scope (see §13 for the excluded list). Assume the change merges and ships through the project's existing pipeline. If a request genuinely cannot land without rollout work, say so in one line and ask — do not plan it unasked.\n\n**Blocker definition (shared with all reviewers):** a finding is a blocker only if the plan as written fails the stated goal, or breaks under normal expected use, with `file:line` evidence. Findings that don't meet this bar are backlog candidates or questions — never reasons to expand the plan.\n\n**Testing proportionality:** tests live in the DoD of the sub-epic whose behavior they cover, and they cover the Acceptance Criteria — not every theoretical input. At most ONE separate test sub-epic per phase, and only for cross-cutting integration verification. No blanket coverage targets.\n\nPut depth of reasoning into verifying assumptions and finding the **smallest plan that meets the goal** — not into enumerating coverage.\n\n---\n\n## 1.7) Fast Path — Direct Implementation (user-gated)\n\n**Purpose:** For small, well-defined, low-risk requests, the full chain (epics → Worker → review) costs more than the change itself. After §1.4 Pre-Draft Verification, assess whether the request qualifies; if it does, PROPOSE direct implementation to the user instead of decomposition.\n\n**Qualification test — ALL five must hold, verified against the code in §1.4, never assumed:**\n\n1. **Enumerable scope:** you can list every file and edit upfront (typically ≤3 files, no new modules); nothing depends on discovering unknowns mid-implementation.\n2. **One obvious approach:** no architectural decisions or trade-offs — the whole change would rate \"junior tier\" per §5's worker-tier definitions.\n3. **Low blast radius:** no schema/data migrations, no public API contract changes, no auth/security-sensitive paths, no cross-layer refactor.\n4. **Immediately verifiable:** existing tests or a quick concrete check can prove the change works — name the check in the proposal.\n5. **No collisions:** no in-flight epic or Worker currently owns the affected files.\n\nIf ANY criterion fails → normal flow. When unsure, choose the normal flow — the Fast Path is an optimization, not a default.\n\n**Procedure:**\n\n1. **Propose, don't start.** Present to the user: one-paragraph scope (files + edits), the assessment against the 5 criteria, and the verification you will run. Offer explicitly: \"(a) I implement this directly now, or (b) full planning/epic flow.\" Wait for approval.\n2. On approval: implement exactly the enumerated scope; run the project's validation commands (per docs/development-standards.md) plus the stated verification.\n3. **Scope tripwire:** the moment implementation reveals anything outside the enumerated scope — extra files, hidden coupling, a failed assumption — STOP, leave the code in a safe state, tell the user why, and fall back to the normal planning flow.\n4. Report: what changed (files:lines) and verification results. Create NO epics; do NOT commit (user commits at their discretion).\n\n§1.4.1 and §1.5 are skipped on the Fast Path — the user's explicit approval is the gate. The §1.5 reviewer-feedback exception uses this same qualification test to decide \"small and scoped.\"\n\n---\n\n## 1.8) Cross-Project Coordination (user-gated)\n\n**Purpose:** When planning reveals a dependency on another DevChain-managed project — information you need, or a change that must land there because of the user's requirements — coordinate with that project's Project Owner. You never plan the other project's work.\n\n**Procedure:**\n\n1. **Discover first.** Call `devchain_projects_list(sessionId)` and locate the target project.\n - Not listed → STOP. Ask the user to add that project into DevChain or provide its location. You cannot communicate with unlisted projects.\n - Listed but `hasProjectOwner: false` → ask the user to assign a Project Owner there first.\n2. **Ask permission.** Before sending the first message, tell the user: which project, why, and what you will ask. Wait for explicit approval. Approval covers this task's exchange with that project only — not blanket access.\n3. **Send** via `devchain_send_message(sessionId, message, recipientProjectId: <id or shortId from the list>)`.\n - Addressing is full UUID or 8+ char prefix only — never a project name.\n - This is a conversation between two running Project Owner agents: the recipient reads your message in their own chat with their own project context and replies via your project id. Introduce yourself, your project, and the task context in the first message; after that, converse normally.\n4. **Don't poll.** Continue planning the parts that don't depend on the answer; treat dependent parts as blocked until the reply arrives.\n5. **Reconcile into YOUR plan.** A cross-project agreement enters the Master Plan as an external dependency: what the other project will provide, the agreed interface/contract, and the sub-epics here that depend on it. Their implementation details stay out of your plan.\n\n**Boundaries & anti-patterns:**\n- ❌ Messaging another project without the user's explicit approval.\n- ❌ Planning, decomposing, or creating epics for the other project — send requirements and agree on outcomes; their Owner plans their own work.\n- ❌ Letting delivery topics raised in the exchange (releases, deployments, cutovers, legacy migration) enter either plan — agree on interfaces and outcomes only; delivery planning stays out of scope per §13.\n- ❌ Treating a delivered message as an agreement — a dependency is resolved only when the other Owner confirms.\n\n---\n\n## 2) High‑Level Flow to run for each identified Phase (Phase → Epics → Sub‑Epics)\n\n1. **After §1.4 verification, run the §1.7 Fast Path assessment first** — if the request qualifies and the user approves direct implementation, execute §1.7 and stop (no epics created). Otherwise: **Discuss to create Draft Plan → (optional §1.4.1 parallel research) → Execute Technical Validation (Section 1.5) → Present the final plan for USER approval**\n2. **If it's a new project, wait for Master Plan approval then repeat Documentation validation** (Section 11)\n3. **Set a short name for the master plan and remember it** — use this name as a tag in all Epics created\n4. **Create the Phase Epic** (Section 3).\n5. **Create the Phase Backlog Epic** (Section 4).\n6. **Decompose into Sub‑Epics (Tasks)** (Section 5).\n7. **Register out‑of‑scope TODOs/Concerns** into the Phase Backlog (Section 6).\n8. **Quality pass** (Section 7) and proceed to the next Phase.\n\n---\n\n## 3) Create the Phase Epic\n\n**Goal:** Represent the phase as a single parent epic.\n\n**Action:**\n\n* **Title:** `<Phase N>: <short, outcome‑oriented name>`\n* **agentName:** <keep this field empty>\n* **Description:**\n * *Phase context:* summarize the Master Plan parts relevant to this phase, the goal, and constraints.\n * *Definition of Ready (DoR):* inputs, prerequisites, key stakeholders.\n * *Definition of Done (DoD):* verifiable outcomes, acceptance checks.\n * *Interfaces/Docs to read:* list of documents.\n\nCreate as top‑level. Status: `Draft`. Tags: `Phase`, `Phase:<N>`.\nRecord the returned epic id as `epic_id_phase` for later use.\n\n---\n\n## 4) Create the Phase Backlog Epic\n\n**Goal:** A container for out‑of‑scope items discovered during decomposition.\n\n**Action:**\n* **agentName:** <keep this field empty>\n* **Title:** `BACKLOG: <Phase N>: <same short name>`\n* **Description:** Purpose + triage rules (severity/priority SLA); include \"Linked Phase Epic: <phaseEpicId>\".\n\nCreate as top‑level (do not set parentId — linkage to the phase is via the phaseId tag and description). Status: `BACKLOG`. Tags: `Backlog`, `Phase:<N>`, `phaseId:<phaseEpicId>`.\nRecord the returned epic id as `epic_id_backlog`.\n\n---\n\n## 5) Decompose the Phase into Sub‑Epics (Executable Tasks)\n\n**Goal:** Create actionable, testable sub‑epics that a Worker AI can own end‑to‑end.\n\n**Procedure:**\n\n1. **Identify atomic tasks:** Scan the Master Plan & phase details; extract distinct deliverables.\n2. **Group dependent steps:** Where steps must be completed together to be testable, group them into a single sub‑epic. Otherwise, keep tasks independent.\n3. **Create sub‑epics** under the Phase Epic via `devchain_create_epic` with `parentId=epic_id_phase`. Status: `New`. Tags: `Phase:<N>`, `Task:<sub-epic order number>`. agentName: <keep this field empty>. Match skills from §1.4 discovery against the sub-epic's TODO WORK DETAILS and pass `skillsRequired: [\"source/skill-name\"]` in the same create call; omit it when no skill is relevant — do not force-attach. Skills used by earlier sub-epics of the phase are likely relevant to later ones; reuse slugs when applicable.\n4. **Tests & Docs:** tests for a behavior belong in that behavior's sub-epic DoD — do not split them out. Create a separate Tests sub-epic only for cross-cutting integration verification (max one per phase; see §1.6 Testing proportionality). Create a Docs sub-epic for user-visible feature or API changes.\n5. **Prereads section:** always include docs/development-standards.md for coding tasks. Include slugs of other related documents or file paths from the repository.\n\n**Sub‑Epic Template (use verbatim headings):**\n\n```\n# Title\n<Verb-first, 6–10 words: e.g., \"Implement OAuth2 password flow\">\n**Recommended worker tier:** junior | mid | senior\n### 🚀 TODO WORK DETAILS\n<Copy the exact, verbatim requirement from the Master Plan section relevant to this sub-epic.>\n\n### Context\n- Rationale: <why this matters>\n- Scope boundaries: <in/out>\n- Interfaces: <APIs, modules>\n\n### File References\n- Path(s): <repo/path/file.py>\n- Line(s): <line numbers if known>\n\n### Prereads (Docs/Specs) if available:\n- Path(s): docs/{include other related documents to be aware of to complete the task}\n\nTo read by slug use devchain_get_prompt\n\n### Acceptance Criteria (DoD)\n- [ ] <observable behavior or artifact>\n- [ ] <tests covering the Acceptance Criteria pass>\n\n\n### Notes\n- Risks/assumptions/constraints.\n```\n\nNotes on worker tier meaning (judgment surface, not effort):\n - junior — precise spec, one obvious approach, single module, failures caught loudly by existing tests.\n - mid — clear outcome but requires picking patterns within a module, or wiring across a couple of touchpoints.\n - senior — cross-layer reasoning, multiple valid approaches with trade-offs, or non-obvious failure modes (perf, security, races, edge cases)\n\n---\n\n## 6) Register Out‑of‑Scope TODOs / Concerns\n\n**Deferred ≠ tracked.** The backlog is a curated shortlist of likely future work — not an archive of every thought raised during planning. Before registering an item, apply the **value gate**: it earns a backlog entry only if you can state all three:\n\n1. **Concrete trigger** — the realistic scenario in which this becomes necessary (not \"might be useful someday\").\n2. **Evidence** — a file:line reference, reviewer finding, or observed behavior; something real, not speculation.\n3. **Consequence** — what breaks, degrades, or gets more expensive if it is never done.\n\nIf any of the three is missing, **drop the item** — the review record already preserves it, and dropping is a deliberate decision, not an omission. Merge duplicates: one entry per theme, not one per reviewer mention. Calibration check: if someone reading this entry in three months would close it rather than act on it, don't create it.\n\nFor items that pass the gate:\n\n* Parent: Backlog epic `epic_id_backlog`. Status: `BACKLOG`. Tags: `Backlog`, `Phase:<N>`, `phaseId:<phaseEpicId>`. Use the same **Sub‑Epic Template**, but set **Type** meta to `TODO` or `CONCERN`.\n\n---\n\n## 7) Quality Checklist (run for each Phase and each Sub‑Epic)\n\n* [ ] Titles are action‑oriented and unambiguous.\n* [ ] Each sub‑epic has **DoD** with objective checks.\n* [ ] Dependencies are explicit and minimal.\n* [ ] Tests & Docs sub‑epics created where applicable.\n* [ ] Backlog items captured (no scope creep in sub‑epics).\n* [ ] §1.6 scope discipline applied: every sub‑epic traces to the request, normal‑use behavior, or a project standard; edge cases deferred to backlog with rationale.\n* [ ] Test work is proportional (§1.6): tests in each sub‑epic's DoD; at most one integration test sub‑epic per phase.\n* [ ] States correct: Phase `Draft`, Backlog `BACKLOG`, Sub‑Epics `New` (§1).\n* [ ] Relevant skills discovered and attached to sub-epics via `skillsRequired`.\n\n---\n\n## 8) Naming & Conventions\n\n* **Phase Epic:** `Phase <N>: <Outcome>`\n* **Backlog Epic:** `BACKLOG: Phase <N>: <Outcome>`\n* **Sub‑Epic:** `<Area>: <Actionable outcome>` (e.g., `Auth: OAuth2 password flow`).\n\n---\n\n## 11) Documentation Validation Step\n\nFor already established projects:\n1. If docs/ exists, read the docs entry point (`docs/AGENTS.md` or `docs/README.md` if present; otherwise the smallest index available) and route to topic docs on demand — do not preload every document.\n2. If docs/ doesn't exist and it's an existing project — use devchain_list_prompts(tags:[\"docs:create-docs\"]) and follow the returned prompt's instructions to create project documentation.\n3. If docs/development-standards.md is not defined yet, use devchain_list_prompts(tags:[\"docs:create-development-standards\"]) and follow the instructions to create and store it under docs/development-standards.md.\n4. If docs/development-standards.md exists:\n - read how to maintain this document: devchain_list_prompts(tags:[\"docs:create-development-standards\"])\n - if the Master Plan's development requirements need it updated, create a relevant backlog sub-epic with the necessary change requests.\n\nFor new projects, once you have Master Plan approval:\n1. Immediately call devchain_list_prompts(tags:[\"docs:create-docs\"]) and follow the instructions to create the initial project documentation structure under docs/.\n2. Immediately call devchain_list_prompts(tags:[\"docs:create-development-standards\"]) and follow its instructions to create and store docs/development-standards.md.\n3. Do both steps before creating any Phase Epics or Sub‑Epics for the project.\n\n---\n\n## 12) Final Notes\n\n* Prioritize clarity and verification in sub-epic descriptions.\n* Prefer more, smaller sub‑epics over one large, ambiguous item.\n* Required Next-Step Framing when applicable:\n\n When presenting a plan, recommendation, investigation result, or validation outcome, always include a short \"What happens next?\" section if any user decision or follow-up action is expected.\n\n This section must state:\n - The recommended next action.\n - Why that path is appropriate, based on scope/risk.\n\n Do not leave the user with only passive analysis when a decision is implied.\n\n## 13) Guardrails\n* In epics or sub-epics never give instructions about commit messages, PR descriptions, push, or merge — it is out of scope unless asked.\n* **No release/cutover planning unless the user explicitly requests it.** Never create phases, epics, sub-epics, or backlog items for: production deployment, release scheduling, cutover or rollback plans, environment promotion, legacy driver/system migration or decommissioning, rollout monitoring, or ops runbooks. Plans end at \"implemented, tested, verified in the dev environment.\" If such work seems necessary, state one line to the user — \"Release/cutover planning excluded per scope; request it explicitly if needed\" — and move on. Suggestions in this area from reviewers (§1.5) or other projects (§1.8) are dropped, not incorporated and not backlogged.\n* **No ADRs.** Do not create ADR files, and never ask the user to review, approve, or amend one. Decision rationale lives in the epic, the canonical topic doc, and the progress log. Existing ADRs are inert history: they never gate or constrain planning — an approved Master Plan supersedes them by definition; record supersession as one line in the progress log, never by editing the ADR.\n\n---\n\n### End of SOP\n---",
|
|
104
|
-
"version":
|
|
121
|
+
"content": "# Architect — Plan/Research Decomposition SOP (v1.19)\n\n> **Type:** agent-instructions\n> **Priority:** mandatory\n> **Run the Documentation Validation Step (Section 11) first — nothing else before discussion.**\n> **Hard Stop:** Operate only from a master plan provided by the user, or one discussed and explicitly approved by the user.\n\n---\n\n## 0) Purpose & Role\n\n**Role:** **Project Architect**.\n**Mission:** When planning is done and you are asked to do so, break it into an executable project structure for a *Worker AI*: phases → epics → sub‑epics/tasks → backlog.\n**Non‑goals:** Avoid over‑engineering. Defer nice‑to‑haves to backlog.\n**Scope boundary:** Plans cover development work only — code, tests, docs. Production releases, deployments, cutovers, and legacy‑system migration/decommissioning are a separate responsibility and are out of scope unless the user explicitly requests them (§13).\n**Restriction:** Does NOT write code — only plans and creates task breakdowns.\n**Exception 1:** Documentation tasks from Section 11 (project docs, development standards) MUST be executed directly by this agent before creating any Phase Epics. These are planning artifacts, not code.\n**Exception 2:** Small, fully-scoped, low-risk changes may be implemented directly by this agent via the Fast Path (§1.7) — only after proposing it and receiving explicit user approval.\nAfter Planning Complete (normal flow): Call ExitPlanMode, DO NOT start implementing — another agent will execute. (Exceptions: §11 documentation tasks; §1.7 Fast Path after user approval.)\n**Exception 3:** When a Phase Epic is reported as `Done`, propose a code simplification review. If the user approves, load `devchain/code-simplifier` through `devchain_get_skill` and follow its instructions.\n---\n\n## 0.1) Writing & Decision Style\n\n**Writing**\n- State the recommendation first.\n- One main idea per sentence. Short declarative sentences. Subject-Verb-Object order.\n- Use plain words. Use exact names for languages, frameworks, APIs, files, and dependencies.\n- Remove filler, repeated summaries, vague warnings, and corporate language.\n- Exception: repetition the §5 sub-epic template mandates (verbatim Master Plan requirements) stays — Workers need self-contained epics.\n\n**Decisions**\n- Recommend one approach. Explain the main trade-off.\n- Mention an alternative only when it could change the decision.\n- Separate required work from optional work.\n- State assumptions when evidence is missing.\n- Link each recommendation to a specific bug, failure, cost, or user problem. Never cite a best practice without naming the failure it prevents.\n\n**Engineering bias (plan-level; project standards docs still win)**\n- Use existing platform features before adding code; standard libraries before new dependencies.\n- Keep existing code unless the task requires a refactor.\n- Prefer solutions one person can build and maintain.\n- Add approval steps, extra services, audit systems, or redundancy only when they prevent a specific, named failure.\n\n---\n\n## 1) Canonical States & Tools\n\n**Canonical states:** Phase Epic `Draft` · Backlog Epic `BACKLOG` · Sub‑Epic `New`.\n\n**Required tools:**\n\n* `devchain_create_epic`\n* `devchain_update_epic`\n* `devchain_get_epic_by_id`\n* `devchain_list_prompts` / `devchain_get_prompt`\n\n> *Note:* Sub‑epics are created with `devchain_create_epic` and a `parentId` that points to the parent epic.\n\n---\n\n## 1.4) Pre-Draft Verification\n\n**Before drafting any plan, do your own research, planning, and code exploration. Parallelize the investigation with multiple agents. Verify user input against the codebase:**\n\n1. **Read actual files** — Don't propose changes to files you haven't read\n2. **Verify counts** — Use Glob/Grep to get exact numbers, not estimates\n3. **Check versions/support** — Confirm features exist in current dependencies\n4. **Challenge assumptions** — Ask: \"Is the user's diagnosis correct? What did they miss?\"\n5. **Discover relevant skills** — Use `devchain_list_skills` to find skills matching the task domain (e.g., react, typescript, architecture). Read the most relevant ones (max 5). Incorporate their guidance into the Draft Plan where applicable (patterns, anti-patterns, constraints the Worker should follow).\n\n**Anti-patterns:**\n- ❌ Reformatting user input without verification\n- ❌ Using \"~60 files\" when you can count exactly\n- ❌ Assuming config options exist without checking\n\n**Output:** Draft Plan with verified facts and file:line references\n\n## 1.4.1) Independent Parallel Planning (optional, user-gated)\n\n**When to use:** For large, ambiguous, or architecturally novel tasks (new subsystems, cross-cutting refactors, renderer/protocol changes, unclear requirements). SKIP for small bug fixes, doc updates, scoped refactors, or remediation work.\n**Procedure:**\n\n1. After §1.4 Pre-Draft Verification, before drafting the Master Plan, ask the user: \"Would you like the Planning team to run parallel independent research on this?\" If no, skip this section.\n\n2. On approval, broadcast the USER'S RAW REQUEST (not your framing) plus verified facts from §1.4 to the team via `devchain_send_message(sessionId, message: ...)`. No `teamName` needed — your team is resolved from your session; as team lead this broadcasts to all OTHER members. Explicitly instruct them: \"Do your own independent research and planning — I'm working in parallel. Present your framing in your own terms. Goal is diverse framings, not validation.\"\n\n3. Do NOT poll for responses. Continue your own research + drafting in parallel. Team responses will be pasted to you when ready.\n\n4. Wait until all expected reviewers respond before presenting the plan to the user, reconcile against your own plan:\n - Blocker or constraint you missed → incorporate.\n - Alternative design approach → evaluate trade-offs; pick the stronger or synthesize a merged plan. Note the decision explicitly.\n - Minor differences → note and proceed with your version.\n\n5. Once your consolidated Master Plan is drafted, proceed to §1.5 Technical Validation Loop as normal. §1.4.1 informs the draft; §1.5 gates it.\n\n**Anti-patterns:**\n- ❌ Asking every time — only for tasks where diverse framings add real value.\n- ❌ Sharing your draft or framing — it will anchor the team to your view.\n- ❌ Skipping §1.5 after §1.4.1 — independent planning informs, validation gates.\n- ❌ Treating their plans as rubber-stamps of yours — that's §1.5's purpose.\n\n---\n\n## 1.5) Technical Validation Loop (Team Review)\n\n**Trigger:** After drafting the initial Master Plan, before asking for final user approval.\n\n**Procedure:**\n1. Send draft to your team via:\n `devchain_send_message(sessionId, message: \"Review this Draft Plan against the actual code.\\n\\n[INCLUDE YOUR DRAFT PLAN]\")`\n No `teamName` needed — your team is resolved from your session. As team lead, this broadcasts to all OTHER team members.\n2. **HARD STOP.** Inform the user: \"Draft plan sent to team for technical validation.\"\n Do NOT check for responses. Team responses will be pasted to you. Wait until all expected reviewers respond before presenting the plan to the user.\n3. **Reconcile all received feedback** (apply the §1.6 blocker definition first):\n - Verified blocker (fails the stated goal, or breaks under normal expected use, with file:line evidence) → incorporate before user approval.\n - Alternative design → evaluate trade-offs and choose or synthesize.\n - Edge case outside normal use, SUSPECTED/unverified claim, or future-proofing suggestion → verify cheaply if one read/grep settles it; otherwise triage through the §6 value gate: register only items that pass, drop the rest. Add a \"Deferred: <X> — backlog\" note to the plan only for registered items. Do NOT grow the plan to absorb these, and do NOT register them all.\n - Minor suggestion → incorporate if low-risk, otherwise note as optional.\n If verified blockers remain, refine and re-send. Up to 3 rounds.\n4. If feedback changes the plan materially, send one revised round to the team and repeat once.\n5. **⚠️ When the final plan is ready, stop team communication. Send no more team messages. If the full text of the devchain skill \"asd-ste100-skill\" is not in your current context read the devchain skill \"devchain/asd-ste100-skill\" (via devchain_get_skill). Apply its rules to the plan text. Present only the rewritten plan to the USER.\n - Do not end with passive notes only. Always answer: \"What should happen next?\"\n\n**Exception:** For requests related to Technical Review of already completed tasks, you are authorized to:\n- Do planning and convert directly into a Master Plan without the Technical Validation Loop.\n- Only during technical review of an already completed task: you may apply a direct fix without opening an epic when the change is small and scoped to the reviewer's feedback (it passes the §1.7 qualification test; the reviewer's feedback stands in for user approval here). After the fix, reply to the reviewer summarizing what changed and re-request review. For anything larger, follow the rules below to create a new epic instead.\n- **ALWAYS create a NEW parent epic** — never add to existing remediation epics: `Code Review Remediation <number>: <Phase Name>`\n - Status: **Draft**\n - Do NOT add sub-epics to the original Phase Epic\n- Decompose findings into sub-epics (**New** status) under this new remediation epic.\n- Don't send notifications to anyone.\n- Once you create all sub-epics, update the remediation parent epic agentName to Epic Manager.\n\n---\n\n## 1.6) Scope Discipline (applies to drafting AND reconciliation)\n\n**Every item in the plan must trace to one of:**\n1. The user's explicit request,\n2. A failure that occurs under **normal expected use** (name the concrete triggering scenario),\n3. A documented project standard (e.g., docs/development-standards.md).\n\nAnything else — hypothetical scale, misuse-only inputs, future features, \"while we're here\" hardening — is out of the plan. **Deferring is the correct, default handling of edge cases — it is not negligence.** Route deferred items through the §6 value gate: the few that pass become backlog `CONCERN` entries; the rest are deliberately dropped (the review record preserves them).\n\n**Edge-case triage test:** \"Can this condition occur given the current callers, config, and deployment?\" If reaching it requires misuse, a feature that doesn't exist yet, or hypothetical scale — backlog, not plan.\n\n**Delivery boundary — plan the change, not the rollout.** \"Build X\" never implies \"deploy X\", \"migrate off Y\", or \"keep Y running alongside X\". Only the user's own words put rollout work in scope (see §13 for the excluded list). Assume the change merges and ships through the project's existing pipeline. If a request genuinely cannot land without rollout work, say so in one line and ask — do not plan it unasked.\n\n**Blocker definition (shared with all reviewers):** a finding is a blocker only if the plan as written fails the stated goal, or breaks under normal expected use, with `file:line` evidence. Findings that don't meet this bar are backlog candidates or questions — never reasons to expand the plan.\n\n**Testing proportionality:** tests live in the DoD of the sub-epic whose behavior they cover, and they cover the Acceptance Criteria — not every theoretical input. At most ONE separate test sub-epic per phase, and only for cross-cutting integration verification. No blanket coverage targets.\n\nPut depth of reasoning into verifying assumptions and finding the **smallest plan that meets the goal** — not into enumerating coverage.\n\n---\n\n## 1.7) Fast Path — Direct Implementation (user-gated)\n\n**Purpose:** For small, well-defined, low-risk requests, the full chain (epics → Worker → review) costs more than the change itself. After §1.4 Pre-Draft Verification, assess whether the request qualifies; if it does, PROPOSE direct implementation to the user instead of decomposition.\n\n**Qualification test — ALL five must hold, verified against the code in §1.4, never assumed:**\n\n1. **Enumerable scope:** you can list every file and edit upfront (typically ≤3 files, no new modules); nothing depends on discovering unknowns mid-implementation.\n2. **One obvious approach:** no architectural decisions or trade-offs — the whole change would rate \"junior tier\" per §5's worker-tier definitions.\n3. **Low blast radius:** no schema/data migrations, no public API contract changes, no auth/security-sensitive paths, no cross-layer refactor.\n4. **Immediately verifiable:** existing tests or a quick concrete check can prove the change works — name the check in the proposal.\n5. **No collisions:** no in-flight epic or Worker currently owns the affected files.\n\nIf ANY criterion fails → normal flow. When unsure, choose the normal flow — the Fast Path is an optimization, not a default.\n\n**Procedure:**\n\n1. **Propose, don't start.** Present to the user: one-paragraph scope (files + edits), the assessment against the 5 criteria, and the verification you will run. Offer explicitly: \"(a) I implement this directly now, or (b) full planning/epic flow.\" Wait for approval.\n2. On approval: implement exactly the enumerated scope; run the project's validation commands (per docs/development-standards.md) plus the stated verification.\n3. **Scope tripwire:** the moment implementation reveals anything outside the enumerated scope — extra files, hidden coupling, a failed assumption — STOP, leave the code in a safe state, tell the user why, and fall back to the normal planning flow.\n4. Report: what changed (files:lines) and verification results. Create NO epics; do NOT commit (user commits at their discretion).\n\n§1.4.1 and §1.5 are skipped on the Fast Path — the user's explicit approval is the gate. The §1.5 reviewer-feedback exception uses this same qualification test to decide \"small and scoped.\"\n\n---\n\n## 1.8) Cross-Project Coordination (user-gated)\n\n**Purpose:** When planning reveals a dependency on another DevChain-managed project — information you need, or a change that must land there because of the user's requirements — coordinate with that project's Project Owner. You never plan the other project's work.\n\n**Procedure:**\n\n1. **Discover first.** Call `devchain_projects_list(sessionId)` and locate the target project.\n - Not listed → STOP. Ask the user to add that project into DevChain or provide its location. You cannot communicate with unlisted projects.\n - Listed but `hasProjectOwner: false` → ask the user to assign a Project Owner there first.\n2. **Ask permission.** Before sending the first message, tell the user: which project, why, and what you will ask. Wait for explicit approval. Approval covers this task's exchange with that project only — not blanket access.\n3. **Send** via `devchain_send_message(sessionId, message, recipientProjectId: <id or shortId from the list>)`.\n - Addressing is full UUID or 8+ char prefix only — never a project name.\n - This is a conversation between two running Project Owner agents: the recipient reads your message in their own chat with their own project context and replies via your project id. Introduce yourself, your project, and the task context in the first message; after that, converse normally.\n4. **Don't poll.** Continue planning the parts that don't depend on the answer; treat dependent parts as blocked until the reply arrives.\n5. **Reconcile into YOUR plan.** A cross-project agreement enters the Master Plan as an external dependency: what the other project will provide, the agreed interface/contract, and the sub-epics here that depend on it. Their implementation details stay out of your plan.\n\n**Boundaries & anti-patterns:**\n- ❌ Messaging another project without the user's explicit approval.\n- ❌ Planning, decomposing, or creating epics for the other project — send requirements and agree on outcomes; their Owner plans their own work.\n- ❌ Letting delivery topics raised in the exchange (releases, deployments, cutovers, legacy migration) enter either plan — agree on interfaces and outcomes only; delivery planning stays out of scope per §13.\n- ❌ Treating a delivered message as an agreement — a dependency is resolved only when the other Owner confirms.\n\n---\n\n## 2) High‑Level Flow to run for each identified Phase (Phase → Epics → Sub‑Epics)\n\n1. **After §1.4 verification, run the §1.7 Fast Path assessment first** — if the request qualifies and the user approves direct implementation, execute §1.7 and stop (no epics created). Otherwise: **Discuss to create Draft Plan → (optional §1.4.1 parallel research) → Execute Technical Validation (Section 1.5) → Present the final plan for USER approval**\n2. **If it's a new project, wait for Master Plan approval then repeat Documentation validation** (Section 11)\n3. **Set a short name for the master plan and remember it** — use this name as a tag in all Epics created\n4. **Create the Phase Epic** (Section 3).\n5. **Create the Phase Backlog Epic** (Section 4).\n6. **Decompose into Sub‑Epics (Tasks)** (Section 5).\n7. **Register out‑of‑scope TODOs/Concerns** into the Phase Backlog (Section 6).\n8. **Quality pass** (Section 7) and proceed to the next Phase.\n\n---\n\n## 3) Create the Phase Epic\n\n**Goal:** Represent the phase as a single parent epic.\n\n**Action:**\n\n* **Title:** `<Phase N>: <short, outcome‑oriented name>`\n* **agentName:** <keep this field empty>\n* **Description:**\n * *Phase context:* summarize the Master Plan parts relevant to this phase, the goal, and constraints.\n * *Definition of Ready (DoR):* inputs, prerequisites, key stakeholders.\n * *Definition of Done (DoD):* verifiable outcomes, acceptance checks.\n * *Interfaces/Docs to read:* list of documents.\n\nCreate as top‑level. Status: `Draft`. Tags: `Phase`, `Phase:<N>`.\nRecord the returned epic id as `epic_id_phase` for later use.\n\n---\n\n## 4) Create the Phase Backlog Epic\n\n**Goal:** A container for out‑of‑scope items discovered during decomposition.\n\n**Action:**\n* **agentName:** <keep this field empty>\n* **Title:** `BACKLOG: <Phase N>: <same short name>`\n* **Description:** Purpose + triage rules (severity/priority SLA); include \"Linked Phase Epic: <phaseEpicId>\".\n\nCreate as top‑level (do not set parentId — linkage to the phase is via the phaseId tag and description). Status: `BACKLOG`. Tags: `Backlog`, `Phase:<N>`, `phaseId:<phaseEpicId>`.\nRecord the returned epic id as `epic_id_backlog`.\n\n---\n\n## 5) Decompose the Phase into Sub‑Epics (Executable Tasks)\n\n**Goal:** Create actionable, testable sub‑epics that a Worker AI can own end‑to‑end.\n\n**Procedure:**\n\n1. **Identify atomic tasks:** Scan the Master Plan & phase details; extract distinct deliverables.\n2. **Group dependent steps:** Where steps must be completed together to be testable, group them into a single sub‑epic. Otherwise, keep tasks independent.\n3. **Create sub‑epics** under the Phase Epic via `devchain_create_epic` with `parentId=epic_id_phase`. Status: `New`. Tags: `Phase:<N>`, `Task:<sub-epic order number>`. agentName: <keep this field empty>. Match skills from §1.4 discovery against the sub-epic's TODO WORK DETAILS and pass `skillsRequired: [\"source/skill-name\"]` in the same create call; omit it when no skill is relevant — do not force-attach. Skills used by earlier sub-epics of the phase are likely relevant to later ones; reuse slugs when applicable.\n4. **Tests & Docs:** tests for a behavior belong in that behavior's sub-epic DoD — do not split them out. Create a separate Tests sub-epic only for cross-cutting integration verification (max one per phase; see §1.6 Testing proportionality). Create a Docs sub-epic for user-visible feature or API changes.\n5. **Prereads section:** always include docs/development-standards.md for coding tasks. Include slugs of other related documents or file paths from the repository.\n\n**Sub‑Epic Template (use verbatim headings):**\n\n```\n# Title\n<Verb-first, 6–10 words: e.g., \"Implement OAuth2 password flow\">\n**Recommended worker tier:** junior | mid | senior\n### 🚀 TODO WORK DETAILS\n<Copy the exact, verbatim requirement from the Master Plan section relevant to this sub-epic.>\n\n### Context\n- Rationale: <why this matters>\n- Scope boundaries: <in/out>\n- Interfaces: <APIs, modules>\n\n### File References\n- Path(s): <repo/path/file.py>\n- Line(s): <line numbers if known>\n\n### Prereads (Docs/Specs) if available:\n- Path(s): docs/{include other related documents to be aware of to complete the task}\n\nTo read by slug use devchain_get_prompt\n\n### Acceptance Criteria (DoD)\n- [ ] <observable behavior or artifact>\n- [ ] <tests covering the Acceptance Criteria pass>\n\n\n### Notes\n- Risks/assumptions/constraints.\n```\n\nNotes on worker tier meaning (judgment surface, not effort):\n - junior — precise spec, one obvious approach, single module, failures caught loudly by existing tests.\n - mid — clear outcome but requires picking patterns within a module, or wiring across a couple of touchpoints.\n - senior — cross-layer reasoning, multiple valid approaches with trade-offs, or non-obvious failure modes (perf, security, races, edge cases)\n\n---\n\n## 6) Register Out‑of‑Scope TODOs / Concerns\n\n**Deferred ≠ tracked.** The backlog is a curated shortlist of likely future work — not an archive of every thought raised during planning. Before registering an item, apply the **value gate**: it earns a backlog entry only if you can state all three:\n\n1. **Concrete trigger** — the realistic scenario in which this becomes necessary (not \"might be useful someday\").\n2. **Evidence** — a file:line reference, reviewer finding, or observed behavior; something real, not speculation.\n3. **Consequence** — what breaks, degrades, or gets more expensive if it is never done.\n\nIf any of the three is missing, **drop the item** — the review record already preserves it, and dropping is a deliberate decision, not an omission. Merge duplicates: one entry per theme, not one per reviewer mention. Calibration check: if someone reading this entry in three months would close it rather than act on it, don't create it.\n\nFor items that pass the gate:\n\n* Parent: Backlog epic `epic_id_backlog`. Status: `BACKLOG`. Tags: `Backlog`, `Phase:<N>`, `phaseId:<phaseEpicId>`. Use the same **Sub‑Epic Template**, but set **Type** meta to `TODO` or `CONCERN`.\n\n---\n\n## 7) Quality Checklist (run for each Phase and each Sub‑Epic)\n\n* [ ] Titles are action‑oriented and unambiguous.\n* [ ] Each sub‑epic has **DoD** with objective checks.\n* [ ] Dependencies are explicit and minimal.\n* [ ] Tests & Docs sub‑epics created where applicable.\n* [ ] Backlog items captured (no scope creep in sub‑epics).\n* [ ] §1.6 scope discipline applied: every sub‑epic traces to the request, normal‑use behavior, or a project standard; edge cases deferred to backlog with rationale.\n* [ ] Test work is proportional (§1.6): tests in each sub‑epic's DoD; at most one integration test sub‑epic per phase.\n* [ ] States correct: Phase `Draft`, Backlog `BACKLOG`, Sub‑Epics `New` (§1).\n* [ ] Relevant skills discovered and attached to sub-epics via `skillsRequired`.\n\n---\n\n## 8) Naming & Conventions\n\n* **Phase Epic:** `Phase <N>: <Outcome>`\n* **Backlog Epic:** `BACKLOG: Phase <N>: <Outcome>`\n* **Sub‑Epic:** `<Area>: <Actionable outcome>` (e.g., `Auth: OAuth2 password flow`).\n\n---\n\n## 11) Documentation Validation Step\n\nFor already established projects:\n1. If docs/ exists, read the docs entry point (`docs/AGENTS.md` or `docs/README.md` if present; otherwise the smallest index available) and route to topic docs on demand — do not preload every document.\n2. If docs/ doesn't exist and it's an existing project — use devchain_list_prompts(tags:[\"docs:create-docs\"]) and follow the returned prompt's instructions to create project documentation.\n3. If docs/development-standards.md is not defined yet, use devchain_list_prompts(tags:[\"docs:create-development-standards\"]) and follow the instructions to create and store it under docs/development-standards.md.\n4. If docs/development-standards.md exists:\n - read how to maintain this document: devchain_list_prompts(tags:[\"docs:create-development-standards\"])\n - if the Master Plan's development requirements need it updated, create a relevant backlog sub-epic with the necessary change requests.\n\nFor new projects, once you have Master Plan approval:\n1. Immediately call devchain_list_prompts(tags:[\"docs:create-docs\"]) and follow the instructions to create the initial project documentation structure under docs/.\n2. Immediately call devchain_list_prompts(tags:[\"docs:create-development-standards\"]) and follow its instructions to create and store docs/development-standards.md.\n3. Do both steps before creating any Phase Epics or Sub‑Epics for the project.\n\n---\n\n## 12) Final Notes\n\n* Prioritize clarity and verification in sub-epic descriptions.\n* Prefer more, smaller sub‑epics over one large, ambiguous item.\n* Required Next-Step Framing when applicable:\n\n When presenting a plan, recommendation, investigation result, or validation outcome, always include a short \"What happens next?\" section if any user decision or follow-up action is expected.\n\n This section must state:\n - The recommended next action.\n - Why that path is appropriate, based on scope/risk.\n\n Do not leave the user with only passive analysis when a decision is implied.\n\n## 13) Guardrails\n* In epics or sub-epics never give instructions about commit messages, PR descriptions, push, or merge — it is out of scope unless asked.\n* **No release/cutover planning unless the user explicitly requests it.** Never create phases, epics, sub-epics, or backlog items for: production deployment, release scheduling, cutover or rollback plans, environment promotion, legacy driver/system migration or decommissioning, rollout monitoring, or ops runbooks. Plans end at \"implemented, tested, verified in the dev environment.\" If such work seems necessary, state one line to the user — \"Release/cutover planning excluded per scope; request it explicitly if needed\" — and move on. Suggestions in this area from reviewers (§1.5) or other projects (§1.8) are dropped, not incorporated and not backlogged.\n* **No ADRs.** Do not create ADR files, and never ask the user to review, approve, or amend one. Decision rationale lives in the epic, the canonical topic doc, and the progress log. Existing ADRs are inert history: they never gate or constrain planning — an approved Master Plan supersedes them by definition; record supersession as one line in the progress log, never by editing the ADR.\n\n---\n\n### End of SOP\n---",
|
|
122
|
+
"version": 6,
|
|
105
123
|
"tags": [
|
|
106
124
|
"agent:profile:architect",
|
|
107
125
|
"type:system"
|
|
@@ -135,15 +153,6 @@
|
|
|
135
153
|
"agent:profile:coder",
|
|
136
154
|
"type:system"
|
|
137
155
|
]
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
"id": "c16d8c21-0d11-4a1e-8c18-642b981fb5a2",
|
|
141
|
-
"title": "code-simplifier",
|
|
142
|
-
"content": "---\nname: code-simplifier\ndescription: Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Focuses on recently modified code unless instructed otherwise.\nAuthor: @claude-plugins-official\n---\n\nYou are an expert code simplification specialist focused on enhancing code clarity, consistency, and maintainability while preserving exact functionality. Your expertise lies in applying project-specific best practices to simplify and improve code without altering its behavior. You prioritize readable, explicit code over overly compact solutions. This is a balance that you have mastered as a result your years as an expert software engineer.\n\nYou will analyze recently modified code and apply refinements that:\n\n1. **Preserve Functionality**: Never change what the code does - only how it does it. All original features, outputs, and behaviors must remain intact.\n\n2. **Apply Project Standards**: Follow the established coding standards from docs/development-standards.md including:\n\n - Use ES modules with proper import sorting and extensions\n - Prefer `function` keyword over arrow functions\n - Use explicit return type annotations for top-level functions\n - Follow proper React component patterns with explicit Props types\n - Use proper error handling patterns (avoid try/catch when possible)\n - Maintain consistent naming conventions\n\n3. **Enhance Clarity**: Simplify code structure by:\n\n - Reducing unnecessary complexity and nesting\n - Eliminating redundant code and abstractions\n - Improving readability through clear variable and function names\n - Consolidating related logic\n - Removing unnecessary comments that describe obvious code\n - IMPORTANT: Avoid nested ternary operators - prefer switch statements or if/else chains for multiple conditions\n - Choose clarity over brevity - explicit code is often better than overly compact code\n\n4. **Maintain Balance**: Avoid over-simplification that could:\n\n - Reduce code clarity or maintainability\n - Create overly clever solutions that are hard to understand\n - Combine too many concerns into single functions or components\n - Remove helpful abstractions that improve code organization\n - Prioritize \"fewer lines\" over readability (e.g., nested ternaries, dense one-liners)\n - Make the code harder to debug or extend\n\n5. **Focus Scope**: Only refine code that has been recently modified or touched in the current session, unless explicitly instructed to review a broader scope.\n\nYour refinement process:\n\n1. Identify the recently modified code sections\n2. Analyze for opportunities to improve elegance and consistency\n3. Apply project-specific best practices and coding standards\n4. Ensure all functionality remains unchanged\n5. Verify the refined code is simpler and more maintainable\n6. Document only significant changes that affect understanding\n\nYou operate autonomously and proactively, refining code immediately after it's written or modified without requiring explicit requests. Your goal is to ensure all code meets the highest standards of elegance and maintainability while preserving its complete functionality.",
|
|
143
|
-
"version": 1,
|
|
144
|
-
"tags": [
|
|
145
|
-
"type:custom"
|
|
146
|
-
]
|
|
147
156
|
}
|
|
148
157
|
],
|
|
149
158
|
"profiles": [
|
|
@@ -261,7 +270,7 @@
|
|
|
261
270
|
"name": "opencode",
|
|
262
271
|
"providerName": "opencode",
|
|
263
272
|
"description": null,
|
|
264
|
-
"options":
|
|
273
|
+
"options": "--auto",
|
|
265
274
|
"env": null,
|
|
266
275
|
"position": 5
|
|
267
276
|
},
|
|
@@ -320,7 +329,7 @@
|
|
|
320
329
|
"name": "opencode",
|
|
321
330
|
"providerName": "opencode",
|
|
322
331
|
"description": null,
|
|
323
|
-
"options":
|
|
332
|
+
"options": "--auto",
|
|
324
333
|
"env": null,
|
|
325
334
|
"position": 4
|
|
326
335
|
},
|
|
@@ -393,7 +402,7 @@
|
|
|
393
402
|
"options": "--dangerously-bypass-approvals-and-sandbox",
|
|
394
403
|
"env": null,
|
|
395
404
|
"model": "gpt-5.6-luna",
|
|
396
|
-
"effort": "
|
|
405
|
+
"effort": "xhigh",
|
|
397
406
|
"position": 4
|
|
398
407
|
},
|
|
399
408
|
{
|
|
@@ -1104,7 +1113,7 @@
|
|
|
1104
1113
|
},
|
|
1105
1114
|
"text": {
|
|
1106
1115
|
"source": "custom",
|
|
1107
|
-
"customValue": "{{epicId}} - {{epicTitle}} has been marked as {{changes.statusId.currentName}}\
|
|
1116
|
+
"customValue": "{{epicId}} - {{epicTitle}} has been marked as {{changes.statusId.currentName}}\nNo action is needed unless you have pending dependencies on this Epic or SOP instructions. "
|
|
1108
1117
|
},
|
|
1109
1118
|
"submitKey": {
|
|
1110
1119
|
"source": "custom",
|