@ptengine/design-components 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/COMPONENTS-DESIGN-SYSTEM.md +14 -2
  3. package/README.md +32 -13
  4. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  5. package/dist/components/ui/dialog.d.ts.map +1 -1
  6. package/dist/components/ui/drawer.d.ts.map +1 -1
  7. package/dist/components/ui/input-otp.d.ts.map +1 -1
  8. package/dist/components/ui/prompt-picker.d.ts +2 -2
  9. package/dist/components/ui/search-input.d.ts +3 -3
  10. package/dist/components/ui/select.d.ts +2 -2
  11. package/dist/components/ui/select.d.ts.map +1 -1
  12. package/dist/components/ui/sheet.d.ts.map +1 -1
  13. package/dist/components/ui/skeleton.d.ts.map +1 -1
  14. package/dist/index.cjs +2 -2
  15. package/dist/index.js +472 -467
  16. package/dist/style.css +398 -0
  17. package/package.json +8 -4
  18. package/src/components/ui/accordion.tsx +6 -6
  19. package/src/components/ui/alert-dialog.tsx +9 -7
  20. package/src/components/ui/alert.tsx +5 -5
  21. package/src/components/ui/attachment.tsx +15 -15
  22. package/src/components/ui/avatar.tsx +6 -6
  23. package/src/components/ui/badge.tsx +8 -8
  24. package/src/components/ui/breadcrumb.tsx +8 -8
  25. package/src/components/ui/bubble.tsx +15 -15
  26. package/src/components/ui/button-group.tsx +5 -5
  27. package/src/components/ui/button.tsx +16 -16
  28. package/src/components/ui/calendar.tsx +23 -23
  29. package/src/components/ui/card.tsx +6 -6
  30. package/src/components/ui/carousel.tsx +16 -16
  31. package/src/components/ui/chart.tsx +21 -21
  32. package/src/components/ui/checkbox.tsx +3 -3
  33. package/src/components/ui/command.tsx +12 -12
  34. package/src/components/ui/context-menu.tsx +16 -16
  35. package/src/components/ui/dialog.tsx +12 -10
  36. package/src/components/ui/drawer.tsx +9 -7
  37. package/src/components/ui/dropdown-menu.tsx +17 -17
  38. package/src/components/ui/empty.tsx +7 -7
  39. package/src/components/ui/field.tsx +18 -18
  40. package/src/components/ui/hover-card.tsx +1 -1
  41. package/src/components/ui/input-group.tsx +11 -11
  42. package/src/components/ui/input-otp.tsx +9 -9
  43. package/src/components/ui/input.tsx +1 -1
  44. package/src/components/ui/item.tsx +18 -18
  45. package/src/components/ui/kbd.tsx +2 -2
  46. package/src/components/ui/label.tsx +1 -1
  47. package/src/components/ui/marker.tsx +5 -5
  48. package/src/components/ui/menubar.tsx +18 -18
  49. package/src/components/ui/message-scroller.tsx +6 -6
  50. package/src/components/ui/message.tsx +6 -6
  51. package/src/components/ui/native-select.tsx +3 -3
  52. package/src/components/ui/navigation-menu.tsx +9 -9
  53. package/src/components/ui/pagination.tsx +9 -9
  54. package/src/components/ui/popover.tsx +1 -1
  55. package/src/components/ui/progress.tsx +2 -2
  56. package/src/components/ui/prompt-picker.tsx +25 -25
  57. package/src/components/ui/radio-group.tsx +4 -4
  58. package/src/components/ui/resizable.tsx +4 -4
  59. package/src/components/ui/scroll-area.tsx +6 -6
  60. package/src/components/ui/search-input.tsx +12 -12
  61. package/src/components/ui/select.tsx +17 -17
  62. package/src/components/ui/separator.tsx +2 -2
  63. package/src/components/ui/sheet.tsx +15 -13
  64. package/src/components/ui/sidebar.tsx +70 -70
  65. package/src/components/ui/skeleton.tsx +12 -1
  66. package/src/components/ui/slider.tsx +4 -4
  67. package/src/components/ui/sonner.tsx +4 -4
  68. package/src/components/ui/spinner.tsx +1 -1
  69. package/src/components/ui/switch.tsx +2 -2
  70. package/src/components/ui/table.tsx +9 -9
  71. package/src/components/ui/tabs.tsx +16 -16
  72. package/src/components/ui/textarea.tsx +1 -1
  73. package/src/components/ui/toggle-group.tsx +1 -1
  74. package/src/components/ui/toggle.tsx +6 -6
  75. package/src/components/ui/tooltip.tsx +1 -1
package/dist/style.css ADDED
@@ -0,0 +1,398 @@
1
+ /* @ptengine/design-components —— 库自带样式
2
+ *
3
+ * 这份 CSS 里的类名带 `ptx-` 前缀、变量走私有 `--ptx-*` 命名空间,
4
+ * **不受宿主 tailwind 配置与 CSS 变量的影响**。
5
+ * 宿主只需 import 本文件;自己的代码继续用不带前缀的类名 + 本包的 preset。
6
+ *
7
+ * 唯一可由宿主覆盖的是品牌色:定义 `--pt-brand` 即可,派生色会跟着变。
8
+ */
9
+ /* 本文件由 build/gen-private-tokens.mjs 从 src/styles/tokens.css 生成,请勿手改。
10
+ *
11
+ * 私有命名空间 --ptx-*:库自带样式只读这些,宿主无法覆盖。
12
+ * 唯一活口是品牌色(读 var(--pt-brand, …))。
13
+ */
14
+ /**
15
+ * PT-AI-Components (@ptengine/pt-ai-components) — Design Token 唯一数据源
16
+ *
17
+ * 三层嵌套架构,色值物理上只存在于最底的原语层(单一真值源):
18
+ *
19
+ * ③ shadcn 兼容别名(--ptx-background / --ptx-primary / --ptx-border …)
20
+ * 供库内组件(Button / Input …)沿用 shadcn 类名。**只引用语义层**,
21
+ * 自身不存值、不带透明度、无明暗差异(明暗差异全部在语义层)。
22
+ * 声明在 `.pt-ui` 作用域块:库不写任何 :root/html 级样式,
23
+ * 使 var() 替换在各作用域内用当地语义值发生(见该块前的注释)。
24
+ *
25
+ * ② PTEngine 语义层(--ptx-text/bg/border/interaction/chart/link/role-*)
26
+ * 设计系统语义色。**统一「未包裹」形态**(不写 rgb() 外壳):
27
+ * · 实色 → 纯通道引用: --ptx-brand: var(--ptx-green-500);
28
+ * · 需要透明度 → 通道 + alpha:--ptx-text-strong: var(--ptx-black) / 0.9;
29
+ * 透明度只在这一层定义。light / dark 差异通过 .dark 覆盖语义 Token 实现。
30
+ *
31
+ * ① PTEngine 原语层 Primitives(唯一存最终色值的一层,与主题无关)
32
+ * **只存纯通道三元组**(如 --ptx-green-500: 37 172 0),不含任何透明度
33
+ * (原 white/N、black/N 透明档位已删除,透明度改由语义层 `/ a` 表达)。
34
+ * 改色只需改这一层,三层自动跟随 = single source of truth。
35
+ * 注:原语在 `.pt-ui` 声明;`.pt-ui.dark` 只覆盖语义层,原语靠继承取用。
36
+ * HEX 仅在 /tokens 展示页由运行时计算标注,**不参与代码**。
37
+ *
38
+ * 消费规则(rgb() 外壳只在最外层包一次,永不嵌套):
39
+ * · preset 里实色别名 → rgb(var(--x) / <alpha-value>),支持 bg-primary/90;
40
+ * · 自带透明度的别名(border / input / sidebar-border)→ rgb(var(--x)),
41
+ * 不再叠 <alpha-value>(否则双 alpha 非法);
42
+ * · 在 Tailwind 之外直接使用任何 Token(内联 style / JS / SVG)→
43
+ * 自己包一层:color: rgb(var(--ptx-text-strong))。
44
+ *
45
+ * 消费方在入口处 `import '@ptengine/pt-ai-components/styles/tokens.css'`。
46
+ * 纯 .pt-ui/.pt-ui.dark(不套 @layer)以避免 cascade layer 副作用。
47
+ * 接入:给 <html>(推荐,浮层 portal 可达)或子树容器挂 `.pt-ui` 类;深浅切换加/去 `.dark` 类。全部变量 --ptx- 前缀,与宿主零撞名。
48
+ */
49
+
50
+ /* ── 字体 Typography · --ptx-font-sans 按语言切换(由 html lang 驱动)──
51
+ * 品牌字体(源自 Figma Type/Mode 的 family 变量):EN 'Inter' /
52
+ * JA 'Noto Sans JP' / ZH 'Noto Sans SC'。'Inter' 在 CJK 栈中置前:
53
+ * 拉丁字符与数字三语统一用 Inter,CJK 字符落到 JP/SC;各栈保留
54
+ * 同语言系统字体回退(webfont 未加载完时观感不劣化)。
55
+ * 字体文件由消费方应用加载(next/font / fontsource / <link>),库只
56
+ * 声明栈;中国大陆环境需自托管 Noto Sans SC,详见 README。 */
57
+ .pt-ui {
58
+ --ptx-font-sans: 'Inter', system-ui, -apple-system, sans-serif;
59
+ }
60
+ :lang(ja) {
61
+ --ptx-font-sans: 'Inter', 'Noto Sans JP', 'Hiragino Kaku Gothic ProN', 'Yu Gothic', Meiryo,
62
+ sans-serif;
63
+ }
64
+ :lang(zh) {
65
+ --ptx-font-sans: 'Inter', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
66
+ }
67
+ /* ── 行高 Line height · 同字号按语言可不同(preset fontSize 引用)──
68
+ * .pt-ui = English 基准(Figma Text Styles)。
69
+ * 现行策略:ja / zh 暂与 English 一致——未覆盖的档位自动沿用
70
+ * .pt-ui 值,因此无需显式声明。后续按语言精修时,在下方
71
+ * :lang(ja) / :lang(zh) 块中只填与英文不同的档位即可全站生效。 */
72
+ .pt-ui {
73
+ --ptx-lh-2xs: 16px;
74
+ --ptx-lh-xs: 20px;
75
+ --ptx-lh-sm: 20px;
76
+ --ptx-lh-base: 24px;
77
+ --ptx-lh-lg: 28px;
78
+ --ptx-lh-xl: 32px;
79
+ --ptx-lh-2xl: 36px;
80
+ --ptx-lh-3xl: 40px;
81
+ --ptx-lh-4xl: 48px;
82
+ --ptx-lh-5xl: 56px;
83
+ --ptx-lh-6xl: 72px;
84
+ --ptx-lh-7xl: 72px;
85
+ --ptx-lh-8xl: 96px;
86
+ --ptx-lh-9xl: 128px;
87
+ }
88
+ /* 精修预留位(示例::lang(ja) { --ptx-lh-sm: 24px; }):
89
+ * :lang(ja) { }
90
+ * :lang(zh) { } */
91
+ /* 嵌套语言孤岛(如英文页里一段 lang="ja" 的区域):显式带 lang 的
92
+ * 元素重新解析 var,字体随该区域语言切换。 */
93
+ [lang] {
94
+ font-family: var(--ptx-font-sans), system-ui, sans-serif;
95
+ }
96
+
97
+ /* ── ③ shadcn 兼容别名 · 全部引用语义层,自身无明暗差异 ────────
98
+ * 选择器含 .dark 的原因:CSS var() 替换发生在「声明所在元素」上,
99
+ * 后代继承的是已替换的结果。若只在作用域根声明,嵌套 .dark 容器会
100
+ * 继承到按亮色语义烘焙的值。让同一份声明同时作用于 .light/.dark
101
+ * 作用域,替换就会在该作用域内用当地语义值重新发生(零重复代码)。 */
102
+ .pt-ui {
103
+ --ptx-background: var(--ptx-bg-default);
104
+ --ptx-foreground: var(--ptx-fg-default);
105
+ --ptx-card: var(--ptx-bg-box);
106
+ --ptx-card-foreground: var(--ptx-fg-default);
107
+ --ptx-popover: var(--ptx-bg-box);
108
+ --ptx-popover-foreground: var(--ptx-fg-default);
109
+ --ptx-primary: var(--ptx-bg-strong); /* 高强调黑(暗色自动反白) */
110
+ --ptx-primary-foreground: var(--ptx-text-inverse);
111
+ --ptx-brand: var(--ptx-brand); /* 品牌绿,供 Brand 场景(bg-brand) */
112
+ --ptx-brand-foreground: var(--ptx-text-stable);
113
+ --ptx-secondary: var(--ptx-bg-secondary);
114
+ --ptx-secondary-foreground: var(--ptx-fg-default);
115
+ --ptx-muted: var(--ptx-bg-secondary);
116
+ --ptx-muted-foreground: var(--ptx-fg-muted);
117
+ --ptx-accent: var(--ptx-interaction-hover); /* 交互高亮=中性叠加(黑/白 + alpha,百分比见语义层) */
118
+ --ptx-accent-foreground: var(--ptx-fg-default);
119
+ --ptx-destructive: var(--ptx-bg-danger-standard);
120
+ --ptx-destructive-foreground: var(--ptx-text-stable);
121
+ --ptx-border: var(--ptx-border-default);
122
+ --ptx-input: var(--ptx-border-input);
123
+ --ptx-ring: var(--ptx-interaction-focus); /* 焦点环=中性(黑90%/白90%),自带 alpha */
124
+ --ptx-chart-1: var(--ptx-chart-1);
125
+ --ptx-chart-2: var(--ptx-chart-2);
126
+ --ptx-chart-3: var(--ptx-chart-3);
127
+ --ptx-chart-4: var(--ptx-chart-4);
128
+ --ptx-chart-5: var(--ptx-chart-5);
129
+ --ptx-sidebar: var(--ptx-bg-box);
130
+ --ptx-sidebar-foreground: var(--ptx-fg-default);
131
+ --ptx-sidebar-primary: var(--ptx-bg-strong);
132
+ --ptx-sidebar-primary-foreground: var(--ptx-text-inverse);
133
+ --ptx-sidebar-accent: var(--ptx-interaction-hover);
134
+ --ptx-sidebar-accent-foreground: var(--ptx-fg-default);
135
+ --ptx-sidebar-border: var(--ptx-border-default);
136
+ --ptx-sidebar-ring: var(--ptx-interaction-focus);
137
+ }
138
+
139
+ .pt-ui {
140
+ /* 圆角六档 6 / 8 / 10 / 12 / 16 / 20(lin 定,2026-08-25 由三档扩到六档)。
141
+ * px 硬值:rem 会被宿主根字号缩放。
142
+ *
143
+ * 命名分两套,**都要留着**:
144
+ * · 语义名(--ptx-radius / -md / -sm):既有 89 处在用,是控件档位的既定接口,不动。
145
+ * · px 名(--ptx-radius-12 / -16 / -20):新增的大档位。**没有沿用 t 恤码**,因为
146
+ * Tailwind 默认 rounded-xl=12px、2xl=16px,而我们要的是 xl=16、2xl=20 —— 同名不同值,
147
+ * 从 shadcn 抄代码过来会静默偏移几 px,极难自查。px 名不撞任何既有语义,大小关系
148
+ * 也一眼可见。
149
+ *
150
+ * 选档:控件用 sm/md(6/8);卡片、弹层等大容器用 10(--ptx-radius);
151
+ * 需要更柔和的面板/外壳用 12/16/20。
152
+ *
153
+ * ⚠️ 两种产生方式**有意混用**,不是漏改:
154
+ * · sm / md 是 calc 派生(来自 shadcn:一个 --radius 旋钮整体缩放,档间恒差 2px)
155
+ * · 12 / 16 / 20 是**固定值,不跟随基准**
156
+ * 原因:后加这三档要的是「更细的尺子」,不是「可整体缩放的比例」——基准从建库至今
157
+ * 没调过一次,那个旋钮实际没人用。代价要知道:**若哪天真去调基准,前三档会动、
158
+ * 后三档不动**。真要统一,该做的是把前三档也写死,而不是把后三档改成 calc
159
+ * (那会让 rounded-16 在基准变化后不再是 16px,类名开始撒谎)。 */
160
+ --ptx-radius: 10px;
161
+ --ptx-radius-md: calc(var(--ptx-radius) - 2px); /* 8px:default/lg 档控件 */
162
+ --ptx-radius-sm: calc(var(--ptx-radius) - 4px); /* 6px:sm 档控件 */
163
+ --ptx-radius-12: 12px;
164
+ --ptx-radius-16: 16px;
165
+ --ptx-radius-20: 20px;
166
+
167
+ /* ── ② PTEngine 语义层(Light)· 未包裹形态,全部引用原语 ──── */
168
+ /* role(角色:补齐 shadcn 别名所需的语义映射,纯通道或通道+alpha) */
169
+ --ptx-brand: var(--pt-brand, var(--ptx-green-500));
170
+ --ptx-fg-default: var(--ptx-black);
171
+ --ptx-fg-muted: var(--ptx-neutral-600);
172
+ --ptx-bg-secondary: var(--ptx-neutral-50);
173
+ --ptx-border-default: var(--ptx-neutral-100);
174
+ --ptx-border-input: var(--ptx-neutral-100);
175
+ /* text */
176
+ --ptx-text-strong: var(--ptx-black) / 0.9;
177
+ --ptx-text-standard: var(--ptx-black) / 0.7;
178
+ --ptx-text-tage: var(--ptx-black) / 0.6;
179
+ --ptx-text-weak: var(--ptx-black) / 0.4;
180
+ --ptx-text-disabled: var(--ptx-black) / 0.3;
181
+ --ptx-text-stable: var(--ptx-white);
182
+ --ptx-text-inverse: var(--ptx-white);
183
+ --ptx-text-brand: var(--ptx-lime-800);
184
+ --ptx-text-brand-standar: var(--ptx-lime-500);
185
+ --ptx-text-neutral: var(--ptx-neutral-700);
186
+ --ptx-text-success: var(--ptx-green-700);
187
+ --ptx-text-success-standar: var(--ptx-green-500);
188
+ --ptx-text-danger: var(--ptx-red-700);
189
+ --ptx-text-danger-standar: var(--ptx-red-600);
190
+ --ptx-text-warning: var(--ptx-orange-700);
191
+ --ptx-text-warning-standar: var(--ptx-orange-500);
192
+ --ptx-text-information: var(--ptx-blue-700);
193
+ --ptx-text-information-standar: var(--ptx-blue-500);
194
+ --ptx-text-ai: var(--ptx-fuchsia-700);
195
+ --ptx-text-ai-standar: var(--ptx-fuchsia-500);
196
+ /* background */
197
+ --ptx-bg-default: var(--ptx-white);
198
+ --ptx-bg-box: var(--ptx-white);
199
+ --ptx-bg-strong: var(--ptx-neutral-950);
200
+ --ptx-bg-neutral: var(--ptx-black) / 0.08;
201
+ --ptx-bg-weak: var(--ptx-black) / 0.03;
202
+ --ptx-bg-disable: var(--ptx-black) / 0.1;
203
+ --ptx-bg-selected: var(--ptx-black) / 0.08; /* 选中/激活底层=中性 8%(与 hover 同色,靠状态层叠加区分:激活+hover≈16%) */
204
+ --ptx-bg-brand-subtler: var(--ptx-lime-100);
205
+ --ptx-bg-brand-subtle: var(--ptx-lime-300);
206
+ --ptx-bg-brand-standard: var(--ptx-lime-500);
207
+ --ptx-bg-neutral-subtler: var(--ptx-neutral-500) / 0.2;
208
+ --ptx-bg-positive-subtler: var(--ptx-green-500) / 0.2;
209
+ --ptx-bg-positive-subtle: var(--ptx-green-300);
210
+ --ptx-bg-positive-standard: var(--ptx-green-500);
211
+ --ptx-bg-danger-subtler: var(--ptx-red-500) / 0.2;
212
+ --ptx-bg-danger-subtle: var(--ptx-red-300);
213
+ --ptx-bg-danger-standard: var(--ptx-red-600);
214
+ --ptx-bg-warning-subtler: var(--ptx-orange-500) / 0.2;
215
+ --ptx-bg-warning-subtle: var(--ptx-orange-300);
216
+ --ptx-bg-warning-standard: var(--ptx-orange-500);
217
+ --ptx-bg-information-subtler: var(--ptx-blue-500) / 0.2;
218
+ --ptx-bg-information-subtle: var(--ptx-blue-300);
219
+ --ptx-bg-information-standard: var(--ptx-blue-500);
220
+ --ptx-bg-ai-subtler: var(--ptx-fuchsia-500) / 0.2;
221
+ --ptx-bg-ai-subtle: var(--ptx-fuchsia-300);
222
+ --ptx-bg-ai-standard: var(--ptx-fuchsia-500);
223
+ /* border */
224
+ --ptx-border-strong: var(--ptx-black) / 0.9;
225
+ --ptx-border-neutral: var(--ptx-black) / 0.2;
226
+ --ptx-border-weak: var(--ptx-black) / 0.08;
227
+ --ptx-border-inverse: var(--ptx-white);
228
+ --ptx-border-brand: var(--ptx-lime-200);
229
+ --ptx-border-success: var(--ptx-green-100);
230
+ --ptx-border-danger: var(--ptx-red-100);
231
+ --ptx-border-warning: var(--ptx-orange-100);
232
+ --ptx-border-information: var(--ptx-blue-100);
233
+ --ptx-border-ai: var(--ptx-fuchsia-100);
234
+ /* interaction */
235
+ --ptx-interaction-hover: var(--ptx-black) / 0.08;
236
+ --ptx-interaction-press: var(--ptx-black) / 0.1;
237
+ --ptx-interaction-focus: var(--ptx-black) / 0.9;
238
+ --ptx-interaction-reversal-hover: var(--ptx-white) / 0.08;
239
+ --ptx-interaction-reversal-press: var(--ptx-white) / 0.1;
240
+ --ptx-interaction-reversal-focus: var(--ptx-white) / 0.9;
241
+ /* chart */
242
+ --ptx-chart-0: var(--ptx-black);
243
+ --ptx-chart-1: var(--ptx-green-500);
244
+ --ptx-chart-2: var(--ptx-lime-500);
245
+ --ptx-chart-3: var(--ptx-orange-500);
246
+ --ptx-chart-4: var(--ptx-blue-500);
247
+ --ptx-chart-5: var(--ptx-fuchsia-500);
248
+ /* link */
249
+ --ptx-link-blue: var(--ptx-blue-500);
250
+ --ptx-link-green: var(--ptx-green-500);
251
+
252
+ /* ── ① PTEngine 原语层 Primitives(纯通道三元组,唯一真值源)──
253
+ * 底层调色板(取自 Figma「Primitives」集合,单一模式,与主题无关,
254
+ * 只在 .pt-ui 声明、不随 .dark 变化)。上面两层从这里取值。
255
+ * 不含透明度——透明度由语义层以 `var(--ptx-x) / a` 表达。 */
256
+ /* base */
257
+ --ptx-white: 255 255 255;
258
+ --ptx-black: 16 28 31;
259
+ /* neutral */
260
+ --ptx-neutral-50: 243 244 244;
261
+ --ptx-neutral-100: 231 232 233;
262
+ --ptx-neutral-200: 207 210 210;
263
+ --ptx-neutral-300: 183 187 188;
264
+ --ptx-neutral-400: 159 164 165;
265
+ --ptx-neutral-500: 135 141 143;
266
+ --ptx-neutral-600: 112 119 121;
267
+ --ptx-neutral-700: 88 96 98;
268
+ --ptx-neutral-800: 64 73 76;
269
+ --ptx-neutral-900: 40 51 53;
270
+ --ptx-neutral-950: 28 39 42;
271
+ /* red */
272
+ --ptx-red: 255 71 71;
273
+ --ptx-red-50: 255 237 237;
274
+ --ptx-red-100: 255 218 218;
275
+ --ptx-red-200: 255 181 181;
276
+ --ptx-red-300: 255 145 145;
277
+ --ptx-red-400: 255 108 108;
278
+ --ptx-red-500: 255 71 71;
279
+ --ptx-red-600: 207 62 63;
280
+ --ptx-red-700: 159 54 55;
281
+ --ptx-red-800: 112 45 47;
282
+ --ptx-red-900: 64 37 39;
283
+ --ptx-red-950: 28 30 33;
284
+ /* orange */
285
+ --ptx-orange: 255 144 59;
286
+ --ptx-orange-50: 255 244 235;
287
+ --ptx-orange-100: 255 233 216;
288
+ --ptx-orange-200: 255 211 177;
289
+ --ptx-orange-300: 255 188 137;
290
+ --ptx-orange-400: 255 166 98;
291
+ --ptx-orange-500: 255 144 59;
292
+ --ptx-orange-600: 207 121 53;
293
+ --ptx-orange-700: 159 98 48;
294
+ --ptx-orange-800: 112 74 42;
295
+ --ptx-orange-900: 64 51 37;
296
+ --ptx-orange-950: 28 34 32;
297
+ /* lime */
298
+ --ptx-lime: 200 240 80;
299
+ --ptx-lime-50: 249 253 237;
300
+ --ptx-lime-100: 244 252 220;
301
+ --ptx-lime-200: 233 249 185;
302
+ --ptx-lime-300: 222 246 150;
303
+ --ptx-lime-400: 211 243 115;
304
+ --ptx-lime-500: 200 240 80;
305
+ --ptx-lime-600: 163 198 70;
306
+ --ptx-lime-700: 126 155 60;
307
+ --ptx-lime-800: 90 113 51;
308
+ --ptx-lime-900: 53 70 41;
309
+ --ptx-lime-950: 25 39 33;
310
+ /* green */
311
+ --ptx-green: 37 172 0;
312
+ --ptx-green-50: 233 247 229;
313
+ --ptx-green-100: 211 238 204;
314
+ --ptx-green-200: 168 222 153;
315
+ --ptx-green-300: 124 205 102;
316
+ --ptx-green-400: 81 189 51;
317
+ --ptx-green-500: 37 172 0;
318
+ --ptx-green-600: 33 143 6;
319
+ --ptx-green-700: 29 114 12;
320
+ --ptx-green-800: 24 86 19;
321
+ --ptx-green-900: 20 57 25;
322
+ --ptx-green-950: 17 35 29;
323
+ /* blue */
324
+ --ptx-blue: 34 145 248;
325
+ --ptx-blue-50: 233 244 254;
326
+ --ptx-blue-100: 211 233 254;
327
+ --ptx-blue-200: 167 211 252;
328
+ --ptx-blue-300: 122 189 251;
329
+ --ptx-blue-400: 78 167 249;
330
+ --ptx-blue-500: 34 145 248;
331
+ --ptx-blue-600: 30 122 205;
332
+ --ptx-blue-700: 27 98 161;
333
+ --ptx-blue-800: 23 75 118;
334
+ --ptx-blue-900: 20 51 74;
335
+ --ptx-blue-950: 17 34 42;
336
+ /* fuchsia */
337
+ --ptx-fuchsia: 191 99 243;
338
+ --ptx-fuchsia-50: 249 239 254;
339
+ --ptx-fuchsia-100: 242 224 253;
340
+ --ptx-fuchsia-200: 229 193 250;
341
+ --ptx-fuchsia-300: 217 161 248;
342
+ --ptx-fuchsia-400: 204 130 245;
343
+ --ptx-fuchsia-500: 191 99 243;
344
+ --ptx-fuchsia-600: 156 85 201;
345
+ --ptx-fuchsia-700: 121 71 158;
346
+ --ptx-fuchsia-800: 86 56 116;
347
+ --ptx-fuchsia-900: 51 42 73;
348
+ --ptx-fuchsia-950: 25 32 42;
349
+ }
350
+
351
+ /* ── .dark:只覆盖语义层(别名与原语零重复声明)─────────────── */
352
+ .pt-ui.dark,
353
+ .dark .pt-ui {
354
+ /* role */
355
+ --ptx-fg-default: var(--ptx-white);
356
+ --ptx-fg-muted: var(--ptx-neutral-400);
357
+ --ptx-bg-secondary: var(--ptx-neutral-800);
358
+ --ptx-border-default: var(--ptx-white) / 0.1;
359
+ --ptx-border-input: var(--ptx-white) / 0.15;
360
+ /* text */
361
+ --ptx-text-strong: var(--ptx-white) / 0.9;
362
+ --ptx-text-standard: var(--ptx-white) / 0.7;
363
+ --ptx-text-tage: var(--ptx-white) / 0.6;
364
+ --ptx-text-weak: var(--ptx-white) / 0.4;
365
+ --ptx-text-disabled: var(--ptx-white) / 0.3;
366
+ --ptx-text-inverse: var(--ptx-black);
367
+ /* background */
368
+ --ptx-bg-default: var(--ptx-neutral-950);
369
+ --ptx-bg-box: var(--ptx-black);
370
+ --ptx-bg-strong: var(--ptx-white);
371
+ --ptx-bg-neutral: var(--ptx-white) / 0.08;
372
+ --ptx-bg-weak: var(--ptx-white) / 0.03;
373
+ --ptx-bg-disable: var(--ptx-white) / 0.1;
374
+ --ptx-bg-selected: var(--ptx-white) / 0.08; /* 暗色:中性白 8% */
375
+ /* border */
376
+ --ptx-border-strong: var(--ptx-white) / 0.9;
377
+ --ptx-border-neutral: var(--ptx-white) / 0.2;
378
+ --ptx-border-weak: var(--ptx-white) / 0.08;
379
+ --ptx-border-inverse: var(--ptx-black);
380
+ /* interaction */
381
+ --ptx-interaction-hover: var(--ptx-white) / 0.08;
382
+ --ptx-interaction-press: var(--ptx-white) / 0.1;
383
+ --ptx-interaction-focus: var(--ptx-white) / 0.9;
384
+ --ptx-interaction-reversal-hover: var(--ptx-black) / 0.08;
385
+ --ptx-interaction-reversal-press: var(--ptx-black) / 0.1;
386
+ --ptx-interaction-reversal-focus: var(--ptx-black) / 0.9;
387
+ /* 状态色(暗色):文字 700→500 提亮;20% 透明底继承亮色定义,双模式自适应。 */
388
+ --ptx-text-neutral: var(--ptx-neutral-500);
389
+ --ptx-text-success: var(--ptx-green-500);
390
+ --ptx-text-danger: var(--ptx-red-500);
391
+ --ptx-text-warning: var(--ptx-orange-500);
392
+ --ptx-text-information: var(--ptx-blue-500);
393
+ --ptx-text-ai: var(--ptx-fuchsia-500);
394
+ /* chart */
395
+ --ptx-chart-0: var(--ptx-white);
396
+ }
397
+
398
+ .ptx-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}.ptx-pointer-events-none{pointer-events:none}.ptx-invisible{visibility:hidden}.ptx-fixed{position:fixed}.\!ptx-absolute{position:absolute!important}.ptx-absolute{position:absolute}.ptx-relative{position:relative}.ptx-inset-0{inset:0}.ptx-inset-x-0{left:0;right:0}.ptx-inset-y-0{top:0;bottom:0}.-ptx-bottom-\[48px\]{bottom:-48px}.-ptx-left-\[48px\]{left:-48px}.-ptx-right-\[48px\]{right:-48px}.-ptx-top-\[48px\]{top:-48px}.ptx-bottom-0{bottom:0}.ptx-left-0{left:0}.ptx-left-1\/2{left:50%}.ptx-left-\[12px\]{left:12px}.ptx-left-\[50\%\]{left:50%}.ptx-left-\[8px\]{left:8px}.ptx-right-0{right:0}.ptx-right-\[10px\]{right:10px}.ptx-right-\[12px\]{right:12px}.ptx-right-\[16px\]{right:16px}.ptx-right-\[4px\]{right:4px}.ptx-right-\[8px\]{right:8px}.ptx-top-0{top:0}.ptx-top-1\/2{top:50%}.ptx-top-\[14px\]{top:14px}.ptx-top-\[16px\]{top:16px}.ptx-top-\[1px\]{top:1px}.ptx-top-\[50\%\]{top:50%}.ptx-top-\[60\%\]{top:60%}.ptx-top-\[6px\]{top:6px}.ptx-top-full{top:100%}.ptx-isolate{isolation:isolate}.ptx-z-10{z-index:10}.ptx-z-20{z-index:20}.ptx-z-\[1\]{z-index:1}.ptx-z-\[var\(--pt-z-overlay\,50\)\]{z-index:var(--pt-z-overlay,50)}.ptx-z-\[var\(--pt-z-popup\,50\)\]{z-index:var(--pt-z-popup,50)}.ptx-z-\[var\(--pt-z-tooltip\,50\)\]{z-index:var(--pt-z-tooltip,50)}.ptx-order-first{order:-9999}.ptx-order-last{order:9999}.\!ptx-m-0{margin:0!important}.-ptx-mx-\[4px\]{margin-left:-4px;margin-right:-4px}.-ptx-my-\[8px\]{margin-top:-8px;margin-bottom:-8px}.ptx-mx-\[14px\]{margin-left:14px;margin-right:14px}.ptx-mx-\[8px\]{margin-left:8px;margin-right:8px}.ptx-mx-auto{margin-left:auto;margin-right:auto}.ptx-my-0{margin-top:0;margin-bottom:0}.ptx-my-\[2px\]{margin-top:2px;margin-bottom:2px}.ptx-my-\[4px\]{margin-top:4px;margin-bottom:4px}.-ptx-mb-px{margin-bottom:-1px}.-ptx-ml-\[16px\]{margin-left:-16px}.-ptx-mt-\[16px\]{margin-top:-16px}.ptx-mb-\[12px\]{margin-bottom:12px}.ptx-mb-\[4px\]{margin-bottom:4px}.ptx-ml-\[16px\]{margin-left:16px}.ptx-ml-\[4px\]{margin-left:4px}.ptx-ml-\[8px\]{margin-left:8px}.ptx-ml-auto{margin-left:auto}.ptx-mr-\[8px\]{margin-right:8px}.ptx-mt-\[16px\]{margin-top:16px}.ptx-mt-\[2px\]{margin-top:2px}.ptx-mt-\[6px\]{margin-top:6px}.ptx-mt-\[8px\]{margin-top:8px}.ptx-mt-\[96px\]{margin-top:96px}.ptx-mt-auto{margin-top:auto}.ptx-line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.ptx-block{display:block}.ptx-flex{display:flex}.ptx-inline-flex{display:inline-flex}.ptx-grid{display:grid}.ptx-hidden{display:none}.ptx-aspect-square{aspect-ratio:1/1}.ptx-aspect-video{aspect-ratio:16/9}.ptx-size-\[12px\]{width:12px;height:12px}.ptx-size-\[16px\]{width:16px;height:16px}.ptx-size-\[20px\]{width:20px;height:20px}.ptx-size-\[24px\]{width:24px;height:24px}.ptx-size-\[32px\]{width:32px;height:32px}.ptx-size-\[40px\]{width:40px;height:40px}.ptx-size-full{width:100%;height:100%}.ptx-h-\[10px\]{height:10px}.ptx-h-\[12px\]{height:12px}.ptx-h-\[14px\]{height:14px}.ptx-h-\[16px\]{height:16px}.ptx-h-\[20px\]{height:20px}.ptx-h-\[24px\]{height:24px}.ptx-h-\[28px\]{height:28px}.ptx-h-\[32px\]{height:32px}.ptx-h-\[40px\]{height:40px}.ptx-h-\[48px\]{height:48px}.ptx-h-\[6px\]{height:6px}.ptx-h-\[8px\]{height:8px}.ptx-h-\[var\(--radix-navigation-menu-viewport-height\)\]{height:var(--radix-navigation-menu-viewport-height)}.ptx-h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.ptx-h-auto{height:auto}.ptx-h-full{height:100%}.ptx-h-max{height:-moz-max-content;height:max-content}.ptx-h-px{height:1px}.ptx-h-svh{height:100svh}.ptx-max-h-\[300px\]{max-height:300px}.ptx-max-h-\[384px\]{max-height:384px}.ptx-min-h-0{min-height:0}.ptx-min-h-\[16px\]{min-height:16px}.ptx-min-h-\[60px\]{min-height:60px}.ptx-min-h-full{min-height:100%}.ptx-min-h-svh{min-height:100svh}.ptx-w-0{width:0}.ptx-w-3\/4{width:75%}.ptx-w-\[--pt-sidebar-width\]{width:var(--pt-sidebar-width)}.ptx-w-\[100px\]{width:100px}.ptx-w-\[10px\]{width:10px}.ptx-w-\[12px\]{width:12px}.ptx-w-\[14px\]{width:14px}.ptx-w-\[16px\]{width:16px}.ptx-w-\[20px\]{width:20px}.ptx-w-\[24px\]{width:24px}.ptx-w-\[256px\]{width:256px}.ptx-w-\[288px\]{width:288px}.ptx-w-\[28px\]{width:28px}.ptx-w-\[32px\]{width:32px}.ptx-w-\[36px\]{width:36px}.ptx-w-\[40px\]{width:40px}.ptx-w-\[4px\]{width:4px}.ptx-w-\[8px\]{width:8px}.ptx-w-\[96px\]{width:96px}.ptx-w-auto{width:auto}.ptx-w-fit{width:-moz-fit-content;width:fit-content}.ptx-w-full{width:100%}.ptx-w-max{width:-moz-max-content;width:max-content}.ptx-w-px{width:1px}.ptx-min-w-0{min-width:0}.ptx-min-w-\[12rem\]{min-width:12rem}.ptx-min-w-\[160px\]{min-width:160px}.ptx-min-w-\[20px\]{min-width:20px}.ptx-min-w-\[32px\]{min-width:32px}.ptx-min-w-\[36px\]{min-width:36px}.ptx-min-w-\[40px\]{min-width:40px}.ptx-min-w-\[8rem\]{min-width:8rem}.ptx-min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.ptx-max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.ptx-max-w-\[480px\]{max-width:480px}.ptx-max-w-\[640px\]{max-width:640px}.ptx-max-w-\[80\%\]{max-width:80%}.ptx-max-w-\[960px\]{max-width:960px}.ptx-max-w-full{max-width:100%}.ptx-max-w-lg{max-width:32rem}.ptx-max-w-max{max-width:-moz-max-content;max-width:max-content}.ptx-max-w-sm{max-width:24rem}.ptx-flex-1{flex:1 1 0%}.ptx-shrink-0{flex-shrink:0}.ptx-grow{flex-grow:1}.ptx-grow-0{flex-grow:0}.ptx-basis-full{flex-basis:100%}.ptx-caption-bottom{caption-side:bottom}.ptx-border-collapse{border-collapse:collapse}.-ptx-translate-x-1\/2{--tw-translate-x:-50%}.-ptx-translate-x-1\/2,.-ptx-translate-x-px{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-ptx-translate-x-px{--tw-translate-x:-1px}.-ptx-translate-y-1\/2{--tw-translate-y:-50%}.-ptx-translate-y-1\/2,.-ptx-translate-y-3\/4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-ptx-translate-y-3\/4{--tw-translate-y:-75%}.ptx-translate-x-\[-50\%\]{--tw-translate-x:-50%}.ptx-translate-x-\[-50\%\],.ptx-translate-x-px{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ptx-translate-x-px{--tw-translate-x:1px}.ptx-translate-y-3\/4{--tw-translate-y:75%}.ptx-translate-y-3\/4,.ptx-translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ptx-translate-y-\[-50\%\]{--tw-translate-y:-50%}.ptx-rotate-45{--tw-rotate:45deg}.ptx-rotate-45,.ptx-rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ptx-rotate-90{--tw-rotate:90deg}@keyframes ptx-caret-blink{0%,70%,to{opacity:1}20%,50%{opacity:0}}.ptx-animate-caret-blink{animation:ptx-caret-blink 1.25s ease-out infinite}.ptx-animate-pulse{animation:ptx-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes ptx-spin{to{transform:rotate(1turn)}}.ptx-animate-spin{animation:ptx-spin 1s linear infinite}.ptx-cursor-default{cursor:default}.ptx-cursor-pointer{cursor:pointer}.ptx-touch-none{touch-action:none}.ptx-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ptx-snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.ptx-snap-mandatory{--tw-scroll-snap-strictness:mandatory}.ptx-scroll-px-\[4px\]{scroll-padding-left:4px;scroll-padding-right:4px}.ptx-list-disc{list-style-type:disc}.ptx-list-none{list-style-type:none}.ptx-appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.ptx-flex-row{flex-direction:row}.ptx-flex-col{flex-direction:column}.ptx-flex-col-reverse{flex-direction:column-reverse}.ptx-flex-wrap{flex-wrap:wrap}.ptx-items-start{align-items:flex-start}.ptx-items-end{align-items:flex-end}.ptx-items-center{align-items:center}.ptx-items-stretch{align-items:stretch}.ptx-justify-start{justify-content:flex-start}.ptx-justify-center{justify-content:center}.ptx-justify-between{justify-content:space-between}.ptx-gap-\[10px\]{gap:10px}.ptx-gap-\[12px\]{gap:12px}.ptx-gap-\[16px\]{gap:16px}.ptx-gap-\[20px\]{gap:20px}.ptx-gap-\[24px\]{gap:24px}.ptx-gap-\[28px\]{gap:28px}.ptx-gap-\[32px\]{gap:32px}.ptx-gap-\[4px\]{gap:4px}.ptx-gap-\[6px\]{gap:6px}.ptx-gap-\[8px\]{gap:8px}.ptx-space-y-\[6px\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(6px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(6px*var(--tw-space-y-reverse))}.ptx-space-y-\[8px\]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(8px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(8px*var(--tw-space-y-reverse))}.ptx-self-end{align-self:flex-end}.ptx-self-stretch{align-self:stretch}.ptx-overflow-auto{overflow:auto}.ptx-overflow-hidden{overflow:hidden}.ptx-overflow-x-auto{overflow-x:auto}.ptx-overflow-y-auto{overflow-y:auto}.ptx-overflow-x-hidden{overflow-x:hidden}.ptx-overscroll-contain{overscroll-behavior:contain}.ptx-overscroll-x-contain{overscroll-behavior-x:contain}.ptx-truncate{overflow:hidden;text-overflow:ellipsis}.ptx-truncate,.ptx-whitespace-nowrap{white-space:nowrap}.ptx-text-balance{text-wrap:balance}.ptx-break-words{overflow-wrap:break-word}.ptx-rounded-12{border-radius:var(--ptx-radius-12)}.ptx-rounded-\[2px\]{border-radius:2px}.ptx-rounded-\[inherit\]{border-radius:inherit}.ptx-rounded-\[var\(--ptx-radius\)\]{border-radius:var(--ptx-radius)}.ptx-rounded-\[var\(--ptx-radius-md\)\]{border-radius:var(--ptx-radius-md)}.ptx-rounded-\[var\(--ptx-radius-sm\)\]{border-radius:var(--ptx-radius-sm)}.ptx-rounded-full{border-radius:9999px}.ptx-rounded-sm{border-radius:calc(var(--ptx-radius) - 4px)}.ptx-rounded-l-\[var\(--ptx-radius-md\)\]{border-top-left-radius:var(--ptx-radius-md);border-bottom-left-radius:var(--ptx-radius-md)}.ptx-rounded-r-\[var\(--ptx-radius-md\)\]{border-top-right-radius:var(--ptx-radius-md);border-bottom-right-radius:var(--ptx-radius-md)}.ptx-rounded-t-\[10px\]{border-top-left-radius:10px;border-top-right-radius:10px}.ptx-rounded-tl-\[var\(--ptx-radius-sm\)\]{border-top-left-radius:var(--ptx-radius-sm)}.ptx-border{border-width:1px}.ptx-border-2{border-width:2px}.ptx-border-\[1\.5px\]{border-width:1.5px}.ptx-border-y{border-top-width:1px}.ptx-border-b,.ptx-border-y{border-bottom-width:1px}.ptx-border-b-2{border-bottom-width:2px}.ptx-border-l{border-left-width:1px}.ptx-border-r{border-right-width:1px}.ptx-border-t{border-top-width:1px}.ptx-border-dashed{border-style:dashed}.ptx-border-none{border-style:none}.ptx-border-\[--color-border\]{border-color:var(--color-border)}.ptx-border-border{border-color:rgb(var(--ptx-border))}.ptx-border-destructive\/50{border-color:rgb(var(--ptx-destructive)/.5)}.ptx-border-input{border-color:rgb(var(--ptx-input))}.ptx-border-neutral{border-color:rgb(var(--ptx-border-neutral))}.ptx-border-sidebar-border{border-color:rgb(var(--ptx-sidebar-border))}.ptx-border-transparent{border-color:transparent}.ptx-border-l-transparent{border-left-color:transparent}.ptx-border-t-transparent{border-top-color:transparent}.ptx-bg-\[--color-bg\]{background-color:var(--color-bg)}.ptx-bg-\[rgb\(var\(--ptx-black\)\/0\.45\)\]{background-color:rgb(var(--ptx-black)/.45)}.ptx-bg-\[rgb\(var\(--ptx-black\)\/0\.8\)\]{background-color:rgb(var(--ptx-black)/.8)}.ptx-bg-ai-subtler{background-color:rgb(var(--ptx-bg-ai-subtler))}.ptx-bg-background{--tw-bg-opacity:1;background-color:rgb(var(--ptx-background)/var(--tw-bg-opacity,1))}.ptx-bg-border{background-color:rgb(var(--ptx-border))}.ptx-bg-brand{--tw-bg-opacity:1;background-color:rgb(var(--ptx-brand)/var(--tw-bg-opacity,1))}.ptx-bg-card{--tw-bg-opacity:1;background-color:rgb(var(--ptx-card)/var(--tw-bg-opacity,1))}.ptx-bg-danger-subtler{background-color:rgb(var(--ptx-bg-danger-subtler))}.ptx-bg-destructive{--tw-bg-opacity:1;background-color:rgb(var(--ptx-destructive)/var(--tw-bg-opacity,1))}.ptx-bg-foreground{--tw-bg-opacity:1;background-color:rgb(var(--ptx-foreground)/var(--tw-bg-opacity,1))}.ptx-bg-information-subtler{background-color:rgb(var(--ptx-bg-information-subtler))}.ptx-bg-input{background-color:rgb(var(--ptx-input))}.ptx-bg-muted{--tw-bg-opacity:1;background-color:rgb(var(--ptx-muted)/var(--tw-bg-opacity,1))}.ptx-bg-neutral-subtler{background-color:rgb(var(--ptx-bg-neutral-subtler))}.ptx-bg-popover{--tw-bg-opacity:1;background-color:rgb(var(--ptx-popover)/var(--tw-bg-opacity,1))}.ptx-bg-positive-subtler{background-color:rgb(var(--ptx-bg-positive-subtler))}.ptx-bg-primary{--tw-bg-opacity:1;background-color:rgb(var(--ptx-primary)/var(--tw-bg-opacity,1))}.ptx-bg-secondary{--tw-bg-opacity:1;background-color:rgb(var(--ptx-secondary)/var(--tw-bg-opacity,1))}.ptx-bg-selected{background-color:rgb(var(--ptx-bg-selected))}.ptx-bg-sidebar{--tw-bg-opacity:1;background-color:rgb(var(--ptx-sidebar)/var(--tw-bg-opacity,1))}.ptx-bg-sidebar-border{background-color:rgb(var(--ptx-sidebar-border))}.ptx-bg-transparent{background-color:transparent}.ptx-bg-warning-subtler{background-color:rgb(var(--ptx-bg-warning-subtler))}.ptx-fill-current{fill:currentColor}.ptx-p-0{padding:0}.ptx-p-\[12px\]{padding:12px}.ptx-p-\[16px\]{padding:16px}.ptx-p-\[1px\]{padding:1px}.ptx-p-\[24px\]{padding:24px}.ptx-p-\[2px\]{padding:2px}.ptx-p-\[4px\]{padding:4px}.ptx-p-\[8px\]{padding:8px}.ptx-px-\[10px\]{padding-left:10px;padding-right:10px}.ptx-px-\[12px\]{padding-left:12px;padding-right:12px}.ptx-px-\[16px\]{padding-left:16px;padding-right:16px}.ptx-px-\[2px\]{padding-left:2px;padding-right:2px}.ptx-px-\[4px\]{padding-left:4px;padding-right:4px}.ptx-px-\[6px\]{padding-left:6px;padding-right:6px}.ptx-px-\[8px\]{padding-left:8px;padding-right:8px}.ptx-py-\[12px\]{padding-top:12px;padding-bottom:12px}.ptx-py-\[16px\]{padding-top:16px;padding-bottom:16px}.ptx-py-\[24px\]{padding-top:24px;padding-bottom:24px}.ptx-py-\[2px\]{padding-top:2px;padding-bottom:2px}.ptx-py-\[4px\]{padding-top:4px;padding-bottom:4px}.ptx-py-\[6px\]{padding-top:6px;padding-bottom:6px}.ptx-py-\[8px\]{padding-top:8px;padding-bottom:8px}.ptx-pb-\[12px\]{padding-bottom:12px}.ptx-pb-\[16px\]{padding-bottom:16px}.ptx-pb-\[8px\]{padding-bottom:8px}.ptx-pl-\[10px\]{padding-left:10px}.ptx-pl-\[12px\]{padding-left:12px}.ptx-pl-\[16px\]{padding-left:16px}.ptx-pl-\[32px\]{padding-left:32px}.ptx-pl-\[8px\]{padding-left:8px}.ptx-pr-\[10px\]{padding-right:10px}.ptx-pr-\[32px\]{padding-right:32px}.ptx-pr-\[8px\]{padding-right:8px}.ptx-pt-0{padding-top:0}.ptx-pt-\[12px\]{padding-top:12px}.ptx-pt-\[16px\]{padding-top:16px}.ptx-text-left{text-align:left}.ptx-text-center{text-align:center}.ptx-align-middle{vertical-align:middle}.ptx-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.ptx-font-sans{font-family:var(--ptx-font-sans),system-ui,sans-serif}.ptx-text-2xs{font-size:12px;line-height:var(--ptx-lh-2xs)}.ptx-text-\[11px\]{font-size:11px}.ptx-text-base{font-size:16px;line-height:var(--ptx-lh-base)}.ptx-text-lg{font-size:18px;line-height:var(--ptx-lh-lg)}.ptx-text-sm{font-size:14px;line-height:var(--ptx-lh-sm)}.ptx-text-xs{font-size:13px;line-height:var(--ptx-lh-xs)}.ptx-font-medium{font-weight:500}.ptx-font-normal{font-weight:400}.ptx-font-semibold{font-weight:600}.ptx-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)}.ptx-leading-\[16px\]{line-height:16px}.ptx-leading-none{line-height:1}.ptx-leading-normal{line-height:1.5}.ptx-leading-relaxed{line-height:1.625}.ptx-leading-snug{line-height:1.375}.ptx-leading-tight{line-height:1.25}.ptx-tracking-tight{letter-spacing:-.025em}.ptx-tracking-widest{letter-spacing:.1em}.ptx-text-\[rgb\(var\(--ptx-text-standard\)\)\]{color:rgb(var(--ptx-text-standard))}.ptx-text-\[rgb\(var\(--ptx-text-strong\)\)\]{color:rgb(var(--ptx-text-strong))}.ptx-text-\[rgb\(var\(--ptx-text-tage\)\)\]{color:rgb(var(--ptx-text-tage))}.ptx-text-ai{--tw-text-opacity:1;color:rgb(var(--ptx-text-ai)/var(--tw-text-opacity,1))}.ptx-text-brand-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-brand-foreground)/var(--tw-text-opacity,1))}.ptx-text-card-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-card-foreground)/var(--tw-text-opacity,1))}.ptx-text-current{color:currentColor}.ptx-text-danger{--tw-text-opacity:1;color:rgb(var(--ptx-text-danger)/var(--tw-text-opacity,1))}.ptx-text-destructive{--tw-text-opacity:1;color:rgb(var(--ptx-destructive)/var(--tw-text-opacity,1))}.ptx-text-destructive-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-destructive-foreground)/var(--tw-text-opacity,1))}.ptx-text-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-foreground)/var(--tw-text-opacity,1))}.ptx-text-information{--tw-text-opacity:1;color:rgb(var(--ptx-text-information)/var(--tw-text-opacity,1))}.ptx-text-muted-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.ptx-text-neutral{--tw-text-opacity:1;color:rgb(var(--ptx-text-neutral)/var(--tw-text-opacity,1))}.ptx-text-popover-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-popover-foreground)/var(--tw-text-opacity,1))}.ptx-text-primary{--tw-text-opacity:1;color:rgb(var(--ptx-primary)/var(--tw-text-opacity,1))}.ptx-text-primary-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-primary-foreground)/var(--tw-text-opacity,1))}.ptx-text-secondary-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-secondary-foreground)/var(--tw-text-opacity,1))}.ptx-text-sidebar-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-foreground)/var(--tw-text-opacity,1))}.ptx-text-sidebar-foreground\/70{color:rgb(var(--ptx-sidebar-foreground)/.7)}.ptx-text-success{--tw-text-opacity:1;color:rgb(var(--ptx-text-success)/var(--tw-text-opacity,1))}.ptx-text-warning{--tw-text-opacity:1;color:rgb(var(--ptx-text-warning)/var(--tw-text-opacity,1))}.ptx-underline-offset-4{text-underline-offset:4px}.ptx-opacity-50{opacity:.5}.ptx-opacity-60{opacity:.6}.ptx-opacity-70{opacity:.7}.ptx-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.ptx-shadow-lg,.ptx-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ptx-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.ptx-shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(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)}.ptx-outline-none{outline:2px solid transparent;outline-offset:2px}.ptx-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)}.ptx-ring,.ptx-ring-0{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ptx-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(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ptx-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)}.ptx-ring-card{--tw-ring-opacity:1;--tw-ring-color:rgb(var(--ptx-card)/var(--tw-ring-opacity,1))}.ptx-ring-ring{--tw-ring-color:rgb(var(--ptx-ring))}.ptx-ring-sidebar-ring{--tw-ring-color:rgb(var(--ptx-sidebar-ring))}.ptx-ring-offset-background{--tw-ring-offset-color:rgb(var(--ptx-background)/1)}.ptx-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}.ptx-transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-transition-\[opacity\,transform\]{transition-property:opacity,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-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}.ptx-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ptx-duration-1000{transition-duration:1s}.ptx-duration-200{transition-duration:.2s}.ptx-duration-300{transition-duration:.3s}.ptx-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ptx-ease-linear{transition-timing-function:linear}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.ptx-animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.ptx-fade-in-0{--tw-enter-opacity:0}.ptx-zoom-in-95{--tw-enter-scale:.95}.ptx-duration-1000{animation-duration:1s}.ptx-duration-200{animation-duration:.2s}.ptx-duration-300{animation-duration:.3s}.ptx-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ptx-ease-linear{animation-timing-function:linear}.ptx-state-layer{position:relative;isolation:isolate}.ptx-state-layer:after{content:"";position:absolute;inset:calc(var(--ptx-state-layer-border, 0px)*-1);border-radius:inherit;background-color:rgb(var(--ptx-interaction-hover));opacity:0;transition:opacity .15s;pointer-events:none}.ptx-state-layer:hover:after{opacity:1}.ptx-state-layer:active:after{background-color:rgb(var(--ptx-interaction-press));opacity:1}.ptx-state-layer:disabled:after{content:none}.ptx-state-layer-inverse{position:relative;isolation:isolate}.ptx-state-layer-inverse:after{content:"";position:absolute;inset:calc(var(--ptx-state-layer-border, 0px)*-1);border-radius:inherit;background-color:rgb(var(--ptx-interaction-reversal-hover));opacity:0;transition:opacity .15s;pointer-events:none}.ptx-state-layer-inverse:hover:after{opacity:1}.ptx-state-layer-inverse:active:after{background-color:rgb(var(--ptx-interaction-reversal-press));opacity:1}.ptx-state-layer-inverse:disabled:after{content:none}.\[--ptx-state-layer-border\:1px\]{--ptx-state-layer-border:1px}.\[--ptx-state-layer-border\:2px\]{--ptx-state-layer-border:2px}.\[contain-intrinsic-size\:auto_10rem\]{contain-intrinsic-size:auto 10rem}.\[contain\:content\]{contain:content}.\[content-visibility\:auto\]{content-visibility:auto}.\[scrollbar-width\:none\]{scrollbar-width:none}.file\:ptx-border-0::file-selector-button{border-width:0}.file\:ptx-bg-transparent::file-selector-button{background-color:transparent}.file\:ptx-text-sm::file-selector-button{font-size:14px;line-height:var(--ptx-lh-sm)}.file\:ptx-font-medium::file-selector-button{font-weight:500}.placeholder\:ptx-text-muted-foreground::-moz-placeholder{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.placeholder\:ptx-text-muted-foreground::placeholder{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.before\:ptx-mr-\[4px\]:before{content:var(--tw-content);margin-right:4px}.before\:ptx-h-px:before{content:var(--tw-content);height:1px}.before\:ptx-min-w-0:before{content:var(--tw-content);min-width:0}.before\:ptx-flex-1:before{content:var(--tw-content);flex:1 1 0%}.before\:ptx-bg-border:before{content:var(--tw-content);background-color:rgb(var(--ptx-border))}.after\:ptx-pointer-events-none:after{content:var(--tw-content);pointer-events:none}.after\:ptx-absolute:after{content:var(--tw-content);position:absolute}.after\:-ptx-inset-\[8px\]:after{content:var(--tw-content);inset:-8px}.after\:ptx-inset-0:after{content:var(--tw-content);inset:0}.after\:ptx-inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:ptx-left-1\/2:after{content:var(--tw-content);left:50%}.after\:ptx-ml-\[4px\]:after{content:var(--tw-content);margin-left:4px}.after\:ptx-h-px:after{content:var(--tw-content);height:1px}.after\:ptx-w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:ptx-w-\[4px\]:after{content:var(--tw-content);width:4px}.after\:ptx-min-w-0:after{content:var(--tw-content);min-width:0}.after\:ptx-flex-1:after{content:var(--tw-content);flex:1 1 0%}.after\:-ptx-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)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:ptx-rounded-\[inherit\]:after{content:var(--tw-content);border-radius:inherit}.after\:ptx-bg-\[rgb\(var\(--ptx-interaction-hover\)\)\]:after{content:var(--tw-content);background-color:rgb(var(--ptx-interaction-hover))}.after\:ptx-bg-border:after{content:var(--tw-content);background-color:rgb(var(--ptx-border))}.after\:ptx-opacity-0:after{content:var(--tw-content);opacity:0}.after\:ptx-transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.first\:ptx-rounded-l-\[var\(--ptx-radius-md\)\]:first-child{border-top-left-radius:var(--ptx-radius-md);border-bottom-left-radius:var(--ptx-radius-md)}.first\:ptx-border-l:first-child{border-left-width:1px}.last\:ptx-rounded-r-\[var\(--ptx-radius-md\)\]:last-child{border-top-right-radius:var(--ptx-radius-md);border-bottom-right-radius:var(--ptx-radius-md)}.focus-within\:ptx-relative:focus-within{position:relative}.focus-within\:ptx-z-20:focus-within{z-index:20}.focus-within\:ptx-ring-1:focus-within{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-within\:ptx-ring-ring:focus-within{--tw-ring-color:rgb(var(--ptx-ring))}.hover\:ptx-border-neutral:hover{border-color:rgb(var(--ptx-border-neutral))}.hover\:ptx-bg-sidebar-accent:hover{background-color:rgb(var(--ptx-sidebar-accent))}.hover\:ptx-text-\[rgb\(var\(--ptx-red\)\)\]:hover{color:rgb(var(--ptx-red))}.hover\:ptx-text-foreground:hover{--tw-text-opacity:1;color:rgb(var(--ptx-foreground)/var(--tw-text-opacity,1))}.hover\:ptx-text-sidebar-accent-foreground:hover{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-accent-foreground)/var(--tw-text-opacity,1))}.hover\:ptx-underline:hover{text-decoration-line:underline}.hover\:ptx-opacity-100:hover{opacity:1}.hover\:after\:ptx-bg-sidebar-border:hover:after{content:var(--tw-content);background-color:rgb(var(--ptx-sidebar-border))}.focus\:ptx-bg-accent:focus{background-color:rgb(var(--ptx-accent))}.focus\:ptx-text-accent-foreground:focus{--tw-text-opacity:1;color:rgb(var(--ptx-accent-foreground)/var(--tw-text-opacity,1))}.focus\:ptx-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ptx-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ptx-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\:ptx-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\:ptx-ring-ring:focus-visible{--tw-ring-color:rgb(var(--ptx-ring))}.focus-visible\:ptx-ring-offset-1:focus-visible{--tw-ring-offset-width:1px}.focus-visible\:ptx-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.focus-visible\:ptx-ring-offset-background:focus-visible{--tw-ring-offset-color:rgb(var(--ptx-background)/1)}.active\:ptx-bg-sidebar-accent:active{background-color:rgb(var(--ptx-sidebar-accent))}.active\:ptx-text-\[rgb\(var\(--ptx-red\)\)\]:active{color:rgb(var(--ptx-red))}.active\:ptx-text-sidebar-accent-foreground:active{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-accent-foreground)/var(--tw-text-opacity,1))}.enabled\:hover\:ptx-border-neutral:hover:enabled{border-color:rgb(var(--ptx-border-neutral))}.enabled\:hover\:ptx-border-strong:hover:enabled{border-color:rgb(var(--ptx-border-strong))}.disabled\:ptx-pointer-events-none:disabled{pointer-events:none}.disabled\:ptx-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:ptx-border-weak:disabled{border-color:rgb(var(--ptx-border-weak))}.disabled\:ptx-bg-disable:disabled{background-color:rgb(var(--ptx-bg-disable))}.disabled\:ptx-text-disabled:disabled{color:rgb(var(--ptx-text-disabled))}.disabled\:ptx-opacity-50:disabled{opacity:.5}.ptx-group\/menu-item:focus-within .group-focus-within\/menu-item\:ptx-opacity-100{opacity:1}.ptx-group\/input-otp:hover .group-hover\/input-otp\:ptx-border-neutral{border-color:rgb(var(--ptx-border-neutral))}.ptx-group\/menu-item:hover .group-hover\/menu-item\:ptx-opacity-100{opacity:1}.ptx-group.toaster .group-\[\.toaster\]\:ptx-border-border{border-color:rgb(var(--ptx-border))}.ptx-group.toast .group-\[\.toast\]\:ptx-bg-primary{--tw-bg-opacity:1;background-color:rgb(var(--ptx-primary)/var(--tw-bg-opacity,1))}.ptx-group.toast .group-\[\.toast\]\:ptx-bg-secondary{--tw-bg-opacity:1;background-color:rgb(var(--ptx-secondary)/var(--tw-bg-opacity,1))}.ptx-group.toaster .group-\[\.toaster\]\:ptx-bg-popover{--tw-bg-opacity:1;background-color:rgb(var(--ptx-popover)/var(--tw-bg-opacity,1))}.ptx-group.toast .group-\[\.toast\]\:ptx-text-muted-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.ptx-group.toast .group-\[\.toast\]\:ptx-text-primary-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-primary-foreground)/var(--tw-text-opacity,1))}.ptx-group.toast .group-\[\.toast\]\:ptx-text-secondary-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-secondary-foreground)/var(--tw-text-opacity,1))}.ptx-group.toaster .group-\[\.toaster\]\:ptx-text-popover-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-popover-foreground)/var(--tw-text-opacity,1))}.ptx-group.toaster .group-\[\.toaster\]\:ptx-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(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)}.ptx-peer\/menu-button:hover~.peer-hover\/menu-button\:ptx-text-sidebar-accent-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-accent-foreground)/var(--tw-text-opacity,1))}.ptx-peer:disabled~.peer-disabled\:ptx-cursor-not-allowed{cursor:not-allowed}.ptx-peer:disabled~.peer-disabled\:ptx-opacity-50{opacity:.5}.has-\[\[data-slot\=attachment-content\]\]\:ptx-w-\[7\.5rem\]:has([data-slot=attachment-content]){width:7.5rem}.has-\[input\:disabled\]\:ptx-cursor-not-allowed:has(input:disabled){cursor:not-allowed}.has-\[\>\[data-slot\=button-group\]\]\:ptx-gap-\[8px\]:has(>[data-slot=button-group]){gap:8px}.has-\[input\[aria-invalid\=true\]\]\:ptx-border-destructive:has(input[aria-invalid=true]){--tw-border-opacity:1;border-color:rgb(var(--ptx-destructive)/var(--tw-border-opacity,1))}.has-\[\[data-variant\=inset\]\]\:ptx-bg-sidebar:has([data-variant=inset]){--tw-bg-opacity:1;background-color:rgb(var(--ptx-sidebar)/var(--tw-bg-opacity,1))}.has-\[\[data-slot\=attachment-media\]\]\:ptx-p-\[4px\]:has([data-slot=attachment-media]){padding:4px}.has-\[\[data-slot\=attachment-media\]\]\:ptx-p-\[6px\]:has([data-slot=attachment-media]){padding:6px}.has-\[\[data-slot\=attachment-media\]\]\:ptx-p-\[8px\]:has([data-slot=attachment-media]){padding:8px}.has-\[button\]\:ptx-p-0:has(button){padding:0}.has-\[\[data-slot\=attachment-content\]\]\:ptx-px-\[10px\]:has([data-slot=attachment-content]){padding-left:10px;padding-right:10px}.has-\[\[data-slot\=attachment-content\]\]\:ptx-px-\[6px\]:has([data-slot=attachment-content]){padding-left:6px;padding-right:6px}.has-\[\[data-slot\=attachment-content\]\]\:ptx-px-\[8px\]:has([data-slot=attachment-content]){padding-left:8px;padding-right:8px}.has-\[\[data-slot\=attachment-content\]\]\:ptx-py-\[4px\]:has([data-slot=attachment-content]){padding-top:4px;padding-bottom:4px}.has-\[\[data-slot\=attachment-content\]\]\:ptx-py-\[6px\]:has([data-slot=attachment-content]){padding-top:6px;padding-bottom:6px}.has-\[\[data-slot\=attachment-content\]\]\:ptx-py-\[8px\]:has([data-slot=attachment-content]){padding-top:8px;padding-bottom:8px}.has-\[\:disabled\]\:ptx-opacity-50:has(:disabled){opacity:.5}.has-\[input\:disabled\]\:ptx-opacity-50:has(input:disabled){opacity:.5}.has-\[input\:focus-visible\]\:ptx-ring-1:has(input: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)}.has-\[input\:focus-visible\]\:ptx-ring-ring:has(input:focus-visible){--tw-ring-color:rgb(var(--ptx-ring))}.has-\[input\:disabled\]\:hover\:ptx-border-input:hover:has(input:disabled){border-color:rgb(var(--ptx-input))}.has-\[input\[aria-invalid\=true\]\]\:hover\:ptx-border-destructive:hover:has(input[aria-invalid=true]){--tw-border-opacity:1;border-color:rgb(var(--ptx-destructive)/var(--tw-border-opacity,1))}.has-\[\>a\2c \>button\]\:hover\:after\:ptx-opacity-100:hover:has(>a,>button):after{content:var(--tw-content);opacity:1}.has-\[\>a\2c \>button\]\:active\:after\:ptx-bg-\[rgb\(var\(--ptx-interaction-press\)\)\]:active:has(>a,>button):after{content:var(--tw-content);background-color:rgb(var(--ptx-interaction-press))}.has-\[\>a\2c \>button\]\:active\:after\:ptx-opacity-100:active:has(>a,>button):after{content:var(--tw-content);opacity:1}.ptx-group\/message:has([data-slot=message-footer]) .group-has-\[\[data-slot\=message-footer\]\]\/message\:-ptx-translate-y-\[32px\]{--tw-translate-y:-32px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ptx-group\/message:has([data-variant=ghost]) .group-has-\[\[data-variant\=ghost\]\]\/message\:ptx-px-0{padding-left:0;padding-right:0}.ptx-group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:ptx-pr-\[32px\]{padding-right:32px}.aria-disabled\:ptx-pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:ptx-opacity-50[aria-disabled=true]{opacity:.5}.aria-selected\:ptx-text-muted-foreground[aria-selected=true]{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.aria-selected\:ptx-opacity-100[aria-selected=true]{opacity:1}.aria-\[invalid\=true\]\:ptx-border-destructive[aria-invalid=true]{--tw-border-opacity:1;border-color:rgb(var(--ptx-destructive)/var(--tw-border-opacity,1))}.aria-\[invalid\=true\]\:ptx-text-destructive[aria-invalid=true]{--tw-text-opacity:1;color:rgb(var(--ptx-destructive)/var(--tw-text-opacity,1))}.aria-\[invalid\=true\]\:focus-visible\:ptx-ring-destructive\/30:focus-visible[aria-invalid=true]{--tw-ring-color:rgb(var(--ptx-destructive)/0.3)}.aria-\[invalid\=true\]\:enabled\:hover\:ptx-border-destructive:hover:enabled[aria-invalid=true]{--tw-border-opacity:1;border-color:rgb(var(--ptx-destructive)/var(--tw-border-opacity,1))}.data-\[active\=false\]\:ptx-pointer-events-none[data-active=false],.data-\[disabled\=true\]\:ptx-pointer-events-none[data-disabled=true],.data-\[disabled\]\:ptx-pointer-events-none[data-disabled]{pointer-events:none}.data-\[direction\=end\]\:ptx-bottom-\[16px\][data-direction=end]{bottom:16px}.data-\[direction\=start\]\:ptx-top-\[16px\][data-direction=start]{top:16px}.data-\[orientation\=vertical\]\:ptx-h-auto[data-orientation=vertical]{height:auto}.data-\[panel-group-direction\=vertical\]\:ptx-h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:ptx-w-full[data-panel-group-direction=vertical]{width:100%}.data-\[variant\=ghost\]\:ptx-max-w-full[data-variant=ghost]{max-width:100%}.data-\[side\=bottom\]\:ptx-translate-y-\[4px\][data-side=bottom]{--tw-translate-y:4px}.data-\[side\=bottom\]\:ptx-translate-y-\[4px\][data-side=bottom],.data-\[side\=left\]\:-ptx-translate-x-\[4px\][data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-ptx-translate-x-\[4px\][data-side=left]{--tw-translate-x:-4px}.data-\[side\=right\]\:ptx-translate-x-\[4px\][data-side=right]{--tw-translate-x:4px}.data-\[side\=right\]\:ptx-translate-x-\[4px\][data-side=right],.data-\[side\=top\]\:-ptx-translate-y-\[4px\][data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-ptx-translate-y-\[4px\][data-side=top]{--tw-translate-y:-4px}.data-\[state\=checked\]\:ptx-translate-x-\[16px\][data-state=checked]{--tw-translate-x:16px}.data-\[state\=checked\]\:ptx-translate-x-\[16px\][data-state=checked],.data-\[state\=unchecked\]\:ptx-translate-x-0[data-state=unchecked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:ptx-translate-x-0[data-state=unchecked]{--tw-translate-x:0px}@keyframes ptx-accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.data-\[state\=closed\]\:ptx-animate-accordion-up[data-state=closed]{animation:ptx-accordion-up .2s ease-out}@keyframes ptx-accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.data-\[state\=open\]\:ptx-animate-accordion-down[data-state=open]{animation:ptx-accordion-down .2s ease-out}.data-\[disabled\]\:ptx-cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[align\=end\]\:ptx-flex-row-reverse[data-align=end]{flex-direction:row-reverse}.data-\[panel-group-direction\=vertical\]\:ptx-flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[align\=end\]\:ptx-self-end[data-align=end]{align-self:flex-end}.data-\[state\=idle\]\:ptx-border-dashed[data-state=idle]{border-style:dashed}.data-\[state\=active\]\:ptx-border-foreground[data-state=active]{--tw-border-opacity:1;border-color:rgb(var(--ptx-foreground)/var(--tw-border-opacity,1))}.data-\[state\=error\]\:ptx-border-destructive\/30[data-state=error]{border-color:rgb(var(--ptx-destructive)/.3)}.data-\[active\=true\]\:ptx-bg-selected[data-active=true]{background-color:rgb(var(--ptx-bg-selected))}.data-\[selected\=true\]\:ptx-bg-accent[data-selected=true]{background-color:rgb(var(--ptx-accent))}.data-\[state\=active\]\:ptx-bg-background[data-state=active]{--tw-bg-opacity:1;background-color:rgb(var(--ptx-background)/var(--tw-bg-opacity,1))}.data-\[state\=checked\]\:ptx-bg-primary[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(var(--ptx-primary)/var(--tw-bg-opacity,1))}.data-\[state\=on\]\:ptx-bg-selected[data-state=on]{background-color:rgb(var(--ptx-bg-selected))}.data-\[state\=open\]\:ptx-bg-accent[data-state=open]{background-color:rgb(var(--ptx-accent))}.data-\[state\=selected\]\:ptx-bg-selected[data-state=selected]{background-color:rgb(var(--ptx-bg-selected))}.data-\[state\=unchecked\]\:ptx-bg-input[data-state=unchecked]{background-color:rgb(var(--ptx-input))}.data-\[active\=true\]\:ptx-font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:ptx-text-sidebar-accent-foreground[data-active=true]{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-accent-foreground)/var(--tw-text-opacity,1))}.data-\[invalid\=true\]\:ptx-text-destructive[data-invalid=true]{--tw-text-opacity:1;color:rgb(var(--ptx-destructive)/var(--tw-text-opacity,1))}.data-\[selected\=true\]\:ptx-text-accent-foreground[data-selected=true]{--tw-text-opacity:1;color:rgb(var(--ptx-accent-foreground)/var(--tw-text-opacity,1))}.data-\[state\=active\]\:ptx-text-foreground[data-state=active]{--tw-text-opacity:1;color:rgb(var(--ptx-foreground)/var(--tw-text-opacity,1))}.data-\[state\=on\]\:ptx-text-accent-foreground[data-state=on],.data-\[state\=open\]\:ptx-text-accent-foreground[data-state=open]{--tw-text-opacity:1;color:rgb(var(--ptx-accent-foreground)/var(--tw-text-opacity,1))}.data-\[active\=false\]\:ptx-opacity-0[data-active=false]{opacity:0}.data-\[active\=true\]\:ptx-opacity-100[data-active=true]{opacity:1}.data-\[disabled\=true\]\:ptx-opacity-50[data-disabled=true],.data-\[disabled\]\:ptx-opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:ptx-opacity-100[data-state=open]{opacity:1}.data-\[state\=closed\]\:ptx-duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:ptx-duration-500[data-state=open]{transition-duration:.5s}.data-\[motion\^\=from-\]\:ptx-animate-in[data-motion^=from-],.data-\[state\=open\]\:ptx-animate-in[data-state=open],.data-\[state\=visible\]\:ptx-animate-in[data-state=visible]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[motion\^\=to-\]\:ptx-animate-out[data-motion^=to-],.data-\[state\=closed\]\:ptx-animate-out[data-state=closed],.data-\[state\=hidden\]\:ptx-animate-out[data-state=hidden]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[motion\^\=from-\]\:ptx-fade-in[data-motion^=from-]{--tw-enter-opacity:0}.data-\[motion\^\=to-\]\:ptx-fade-out[data-motion^=to-],.data-\[state\=closed\]\:ptx-fade-out-0[data-state=closed],.data-\[state\=hidden\]\:ptx-fade-out[data-state=hidden]{--tw-exit-opacity:0}.data-\[state\=open\]\:ptx-fade-in-0[data-state=open],.data-\[state\=visible\]\:ptx-fade-in[data-state=visible]{--tw-enter-opacity:0}.data-\[state\=closed\]\:ptx-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:ptx-zoom-in-90[data-state=open]{--tw-enter-scale:.9}.data-\[state\=open\]\:ptx-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[motion\=from-end\]\:ptx-slide-in-from-right-52[data-motion=from-end]{--tw-enter-translate-x:13rem}.data-\[motion\=from-start\]\:ptx-slide-in-from-left-52[data-motion=from-start]{--tw-enter-translate-x:-13rem}.data-\[motion\=to-end\]\:ptx-slide-out-to-right-52[data-motion=to-end]{--tw-exit-translate-x:13rem}.data-\[motion\=to-start\]\:ptx-slide-out-to-left-52[data-motion=to-start]{--tw-exit-translate-x:-13rem}.data-\[side\=bottom\]\:ptx-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:ptx-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:ptx-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:ptx-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:ptx-slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:ptx-slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:ptx-slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:ptx-slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:ptx-slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=closed\]\:ptx-slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=open\]\:ptx-slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:ptx-slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:ptx-slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:ptx-slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:ptx-slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.data-\[state\=open\]\:ptx-slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.data-\[state\=closed\]\:ptx-duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:ptx-duration-500[data-state=open]{animation-duration:.5s}.data-\[panel-group-direction\=vertical\]\:after\:ptx-left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:0}.data-\[panel-group-direction\=vertical\]\:after\:ptx-h-\[4px\][data-panel-group-direction=vertical]:after{content:var(--tw-content);height:4px}.data-\[panel-group-direction\=vertical\]\:after\:ptx-w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:-ptx-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[panel-group-direction\=vertical\]\:after\:ptx-translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=open\]\:hover\:ptx-bg-sidebar-accent:hover[data-state=open]{background-color:rgb(var(--ptx-sidebar-accent))}.data-\[state\=open\]\:hover\:ptx-text-sidebar-accent-foreground:hover[data-state=open]{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-accent-foreground)/var(--tw-text-opacity,1))}.enabled\:data-\[state\=checked\]\:ptx-border-primary[data-state=checked]:enabled{--tw-border-opacity:1;border-color:rgb(var(--ptx-primary)/var(--tw-border-opacity,1))}.enabled\:data-\[state\=checked\]\:ptx-bg-primary[data-state=checked]:enabled{--tw-bg-opacity:1;background-color:rgb(var(--ptx-primary)/var(--tw-bg-opacity,1))}.enabled\:data-\[state\=checked\]\:ptx-text-primary-foreground[data-state=checked]:enabled{--tw-text-opacity:1;color:rgb(var(--ptx-primary-foreground)/var(--tw-text-opacity,1))}.data-\[state\=unchecked\]\:enabled\:active\:ptx-bg-press:active:enabled[data-state=unchecked]{background-color:rgb(var(--ptx-interaction-press))}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:ptx-absolute{position:absolute}.ptx-group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:ptx-left-\[calc\(var\(--pt-sidebar-width\)\*-1\)\]{left:calc(var(--pt-sidebar-width)*-1)}.ptx-group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:ptx-right-\[calc\(var\(--pt-sidebar-width\)\*-1\)\]{right:calc(var(--pt-sidebar-width)*-1)}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:ptx-right-\[12px\]{right:12px}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:ptx-top-\[12px\]{top:12px}.ptx-group[data-side=left] .group-data-\[side\=left\]\:-ptx-right-\[16px\]{right:-16px}.ptx-group[data-side=right] .group-data-\[side\=right\]\:ptx-left-0{left:0}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-ptx-mt-\[32px\]{margin-top:-32px}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:ptx-hidden{display:none}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!ptx-size-\[32px\]{width:32px!important;height:32px!important}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:ptx-w-\[--pt-sidebar-width-icon\]{width:var(--pt-sidebar-width-icon)}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:ptx-w-\[calc\(var\(--pt-sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--pt-sidebar-width-icon) + 1rem)}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:ptx-w-\[calc\(var\(--pt-sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--pt-sidebar-width-icon) + 1rem + 2px)}.ptx-group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:ptx-w-0{width:0}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:ptx-w-full{width:100%}.ptx-group\/attachment[data-size=sm] .group-data-\[size\=sm\]\/attachment\:ptx-w-\[32px\]{width:32px}.ptx-group\/attachment[data-size=xs] .group-data-\[size\=xs\]\/attachment\:ptx-w-\[28px\]{width:28px}.ptx-group\/marker[data-variant=separator] .group-data-\[variant\=separator\]\/marker\:ptx-flex-none{flex:none}.ptx-group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:ptx-translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ptx-group[data-side=right] .group-data-\[side\=right\]\:ptx-rotate-180,.ptx-group[data-state=open] .group-data-\[state\=open\]\:ptx-rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.ptx-group\/attachment[data-state=processing] .group-data-\[state\=processing\]\/attachment\:ptx-animate-pulse{animation:ptx-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes ptx-pulse{50%{opacity:.5}}.ptx-group\/attachment[data-state=uploading] .group-data-\[state\=uploading\]\/attachment\:ptx-animate-pulse{animation:ptx-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.ptx-group\/message[data-align=end] .group-data-\[align\=end\]\/message\:ptx-justify-end{justify-content:flex-end}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:ptx-gap-\[4px\]{gap:4px}.ptx-group\/bubble[data-align=end] .group-data-\[align\=end\]\/bubble\:ptx-self-end,.ptx-group\/message[data-align=end] .group-data-\[align\=end\]\/message\:ptx-self-end{align-self:flex-end}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:ptx-overflow-hidden{overflow:hidden}.ptx-group\/attachment[data-size=xs] .group-data-\[size\=xs\]\/attachment\:ptx-rounded-\[var\(--ptx-radius-sm\)\]{border-radius:var(--ptx-radius-sm)}.ptx-group[data-variant=floating] .group-data-\[variant\=floating\]\:ptx-rounded-\[var\(--ptx-radius\)\]{border-radius:var(--ptx-radius)}.ptx-group[data-variant=floating] .group-data-\[variant\=floating\]\:ptx-border{border-width:1px}.ptx-group[data-side=left] .group-data-\[side\=left\]\:ptx-border-r{border-right-width:1px}.ptx-group[data-side=right] .group-data-\[side\=right\]\:ptx-border-l{border-left-width:1px}.ptx-group[data-variant=floating] .group-data-\[variant\=floating\]\:ptx-border-sidebar-border{border-color:rgb(var(--ptx-sidebar-border))}.ptx-group\/attachment[data-state=error] .group-data-\[state\=error\]\/attachment\:ptx-bg-destructive\/10{background-color:rgb(var(--ptx-destructive)/.1)}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!ptx-p-0{padding:0!important}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!ptx-p-\[8px\]{padding:8px!important}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:ptx-px-\[4px\]{padding-left:4px;padding-right:4px}.ptx-group\/marker[data-variant=separator] .group-data-\[variant\=separator\]\/marker\:ptx-text-center{text-align:center}.ptx-group\/attachment[data-state=error] .group-data-\[state\=error\]\/attachment\:ptx-text-destructive{--tw-text-opacity:1;color:rgb(var(--ptx-destructive)/var(--tw-text-opacity,1))}.ptx-group\/attachment[data-state=error] .group-data-\[state\=error\]\/attachment\:ptx-text-destructive\/80{color:rgb(var(--ptx-destructive)/.8)}.ptx-group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:ptx-opacity-0{opacity:0}.ptx-group\/attachment[data-state=done] .group-data-\[state\=done\]\/attachment\:ptx-opacity-100,.ptx-group\/attachment[data-state=idle] .group-data-\[state\=idle\]\/attachment\:ptx-opacity-100{opacity:1}.ptx-group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:ptx-left-full:after{content:var(--tw-content);left:100%}.ptx-group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:ptx-bg-sidebar:hover{--tw-bg-opacity:1;background-color:rgb(var(--ptx-sidebar)/var(--tw-bg-opacity,1))}.ptx-peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:ptx-top-\[6px\]{top:6px}.ptx-peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:ptx-top-\[10px\]{top:10px}.ptx-peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:ptx-top-\[4px\]{top:4px}.ptx-peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:ptx-text-sidebar-accent-foreground{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-accent-foreground)/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:ptx-mt-0{margin-top:0}.sm\:ptx-flex{display:flex}.sm\:ptx-max-w-sm{max-width:24rem}.sm\:ptx-flex-row{flex-direction:row}.sm\:ptx-justify-end{justify-content:flex-end}.sm\:ptx-gap-\[10px\]{gap:10px}.sm\:ptx-space-x-\[8px\]>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(8px*var(--tw-space-x-reverse));margin-left:calc(8px*(1 - var(--tw-space-x-reverse)))}.sm\:ptx-rounded-\[var\(--ptx-radius\)\]{border-radius:var(--ptx-radius)}.sm\:ptx-text-left{text-align:left}}@media (min-width:768px){.md\:ptx-absolute{position:absolute}.md\:ptx-block{display:block}.md\:ptx-flex{display:flex}.md\:ptx-w-\[var\(--radix-navigation-menu-viewport-width\)\]{width:var(--radix-navigation-menu-viewport-width)}.md\:ptx-w-auto{width:auto}.md\:ptx-flex-row{flex-direction:row}.md\:ptx-items-center{align-items:center}.md\:ptx-p-\[48px\]{padding:48px}.md\:ptx-opacity-0{opacity:0}.after\:md\:ptx-hidden:after{content:var(--tw-content);display:none}.ptx-peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ptx-m-\[8px\]{margin:8px}.ptx-peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ptx-ml-\[8px\]{margin-left:8px}.ptx-peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ptx-ml-0{margin-left:0}.ptx-peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ptx-rounded-12{border-radius:var(--ptx-radius-12)}}.\[\&\:\:-webkit-scrollbar\]\:ptx-hidden::-webkit-scrollbar{display:none}.\[\&\:has\(\[role\=checkbox\]\)\]\:ptx-pr-0:has([role=checkbox]){padding-right:0}.\[\&\:is\(a\)\:hover\]\:ptx-text-foreground:is(a):hover{--tw-text-opacity:1;color:rgb(var(--ptx-foreground)/var(--tw-text-opacity,1))}.\[\&\:is\(a\)\]\:ptx-underline:is(a){text-decoration-line:underline}.\[\&\:is\(a\)\]\:ptx-underline-offset-4:is(a){text-underline-offset:4px}.\[\&\:is\(a\2c button\)\]\:ptx-cursor-pointer:is(a,button){cursor:pointer}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer:is(a,button){position:relative;isolation:isolate}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer:is(a,button):after{content:"";position:absolute;inset:calc(var(--ptx-state-layer-border, 0px)*-1);border-radius:inherit;background-color:rgb(var(--ptx-interaction-hover));opacity:0;transition:opacity .15s;pointer-events:none}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer:is(a,button):hover:after{opacity:1}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer:is(a,button):active:after{background-color:rgb(var(--ptx-interaction-press));opacity:1}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer:is(a,button):disabled:after{content:none}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer-inverse:is(a,button){position:relative;isolation:isolate}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer-inverse:is(a,button):after{content:"";position:absolute;inset:calc(var(--ptx-state-layer-border, 0px)*-1);border-radius:inherit;background-color:rgb(var(--ptx-interaction-reversal-hover));opacity:0;transition:opacity .15s;pointer-events:none}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer-inverse:is(a,button):hover:after{opacity:1}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer-inverse:is(a,button):active:after{background-color:rgb(var(--ptx-interaction-reversal-press));opacity:1}.\[\&\:is\(a\2c button\)\]\:ptx-state-layer-inverse:is(a,button):disabled:after{content:none}.\[\&\:is\(button\)\]\:ptx-text-left:is(button){text-align:left}.\[\&\:is\(button\2c a\)\]\:ptx-cursor-pointer:is(button,a){cursor:pointer}.\[\&\:is\(button\2c a\)\]\:ptx-state-layer:is(button,a){position:relative;isolation:isolate}.\[\&\:is\(button\2c a\)\]\:ptx-state-layer:is(button,a):after{content:"";position:absolute;inset:calc(var(--ptx-state-layer-border, 0px)*-1);border-radius:inherit;background-color:rgb(var(--ptx-interaction-hover));opacity:0;transition:opacity .15s;pointer-events:none}.\[\&\:is\(button\2c a\)\]\:ptx-state-layer:is(button,a):hover:after{opacity:1}.\[\&\:is\(button\2c a\)\]\:ptx-state-layer:is(button,a):active:after{background-color:rgb(var(--ptx-interaction-press));opacity:1}.\[\&\:is\(button\2c a\)\]\:ptx-state-layer:is(button,a):disabled:after{content:none}.\[\&\:is\(button\2c a\)\]\:focus-visible\:ptx-outline-none:focus-visible:is(button,a){outline:2px solid transparent;outline-offset:2px}.\[\&\:is\(button\2c a\)\]\:focus-visible\:ptx-ring-1:focus-visible:is(button,a){--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)}.\[\&\:is\(button\2c a\)\]\:focus-visible\:ptx-ring-ring:focus-visible:is(button,a){--tw-ring-color:rgb(var(--ptx-ring))}.\[\&\>\*\:not\(\:first-child\)\]\:ptx-rounded-l-none>:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:ptx-rounded-t-none>:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.\[\&\>\*\:not\(\:first-child\)\]\:ptx-border-l-0>:not(:first-child){border-left-width:0}.\[\&\>\*\:not\(\:first-child\)\]\:ptx-border-t-0>:not(:first-child){border-top-width:0}.\[\&\>\*\:not\(\:first-child\)\]\:after\:ptx-left-0>:not(:first-child):after{content:var(--tw-content);left:0}.\[\&\>\*\:not\(\:first-child\)\]\:after\:ptx-top-0>:not(:first-child):after{content:var(--tw-content);top:0}.\[\&\>\*\:not\(\:last-child\)\]\:ptx-rounded-b-none>:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:last-child\)\]\:ptx-rounded-r-none>:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\]\:focus-visible\:ptx-relative:focus-visible>*{position:relative}.\[\&\>\*\]\:focus-visible\:ptx-z-10:focus-visible>*{z-index:10}.\[\&\>\[data-slot\=attachment\]\]\:ptx-flex-none>[data-slot=attachment]{flex:none}.\[\&\>\[data-slot\=attachment\]\]\:ptx-snap-start>[data-slot=attachment]{scroll-snap-align:start}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-rounded-none>[data-slot=bubble-content]{border-radius:0}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-border-input>[data-slot=bubble-content]{border-color:rgb(var(--ptx-input))}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-bg-background>[data-slot=bubble-content]{--tw-bg-opacity:1;background-color:rgb(var(--ptx-background)/var(--tw-bg-opacity,1))}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-bg-destructive\/10>[data-slot=bubble-content]{background-color:rgb(var(--ptx-destructive)/.1)}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-bg-muted>[data-slot=bubble-content]{--tw-bg-opacity:1;background-color:rgb(var(--ptx-muted)/var(--tw-bg-opacity,1))}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-bg-primary>[data-slot=bubble-content]{--tw-bg-opacity:1;background-color:rgb(var(--ptx-primary)/var(--tw-bg-opacity,1))}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-bg-secondary>[data-slot=bubble-content]{--tw-bg-opacity:1;background-color:rgb(var(--ptx-secondary)/var(--tw-bg-opacity,1))}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-bg-transparent>[data-slot=bubble-content]{background-color:transparent}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-p-0>[data-slot=bubble-content]{padding:0}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-text-destructive>[data-slot=bubble-content]{--tw-text-opacity:1;color:rgb(var(--ptx-destructive)/var(--tw-text-opacity,1))}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-text-primary-foreground>[data-slot=bubble-content]{--tw-text-opacity:1;color:rgb(var(--ptx-primary-foreground)/var(--tw-text-opacity,1))}.\[\&\>\[data-slot\=bubble-content\]\]\:ptx-text-secondary-foreground>[data-slot=bubble-content]{--tw-text-opacity:1;color:rgb(var(--ptx-secondary-foreground)/var(--tw-text-opacity,1))}.\[\&\>\[data-slot\=bubble-content\]\]\:\[--ptx-interaction-hover\:var\(--ptx-interaction-reversal-hover\)\]>[data-slot=bubble-content]{--ptx-interaction-hover:var(--ptx-interaction-reversal-hover)}.\[\&\>\[data-slot\=bubble-content\]\]\:\[--ptx-interaction-press\:var\(--ptx-interaction-reversal-press\)\]>[data-slot=bubble-content]{--ptx-interaction-press:var(--ptx-interaction-reversal-press)}.\[\&\>\[data-slot\=bubble-content\]\]\:\[--ptx-state-layer-border\:1px\]>[data-slot=bubble-content]{--ptx-state-layer-border:1px}.dark\:\[\&\>\[data-slot\=bubble-content\]\]\:ptx-bg-destructive\/20>[data-slot=bubble-content]:is(.ptx-dark *){background-color:rgb(var(--ptx-destructive)/.2)}.\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:ptx-w-fit>[data-slot=select-trigger]:not([class*=w-]){width:-moz-fit-content;width:fit-content}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:\[\&\>\[data-slot\=spinner\]\]\:\!ptx-size-\[24px\]>[data-slot=spinner]{width:24px!important;height:24px!important}.ptx-group\/message[data-align=end] .group-data-\[align\=end\]\/message\:\[\&\>\[data-slot\]\]\:ptx-self-end>[data-slot]{align-self:flex-end}.\[\&\>a\]\:ptx-text-primary>a{--tw-text-opacity:1;color:rgb(var(--ptx-primary)/var(--tw-text-opacity,1))}.\[\&\>a\]\:ptx-underline>a{text-decoration-line:underline}.\[\&\>a\]\:ptx-underline-offset-4>a{text-underline-offset:4px}.\[\&\>button\]\:ptx-hidden>button{display:none}.\[\&\>button\]\:ptx-bg-primary>button{--tw-bg-opacity:1;background-color:rgb(var(--ptx-primary)/var(--tw-bg-opacity,1))}.\[\&\>button\]\:ptx-bg-selected>button{background-color:rgb(var(--ptx-bg-selected))}.\[\&\>button\]\:ptx-bg-transparent>button{background-color:transparent}.\[\&\>button\]\:ptx-font-medium>button{font-weight:500}.\[\&\>button\]\:ptx-font-normal>button{font-weight:400}.\[\&\>button\]\:ptx-text-primary-foreground>button{--tw-text-opacity:1;color:rgb(var(--ptx-primary-foreground)/var(--tw-text-opacity,1))}.\[\&\>img\]\:ptx-aspect-square>img{aspect-ratio:1/1}.\[\&\>img\]\:ptx-w-full>img{width:100%}.\[\&\>img\]\:ptx-object-cover>img{-o-object-fit:cover;object-fit:cover}.\[\&\>input\]\:ptx-flex-1>input{flex:1 1 0%}.\[\&\>span\:last-child\]\:ptx-truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:ptx-line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:ptx-translate-y-\[-3px\]>svg+div{--tw-translate-y:-3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:ptx-absolute>svg{position:absolute}.\[\&\>svg\]\:ptx-left-\[16px\]>svg{left:16px}.\[\&\>svg\]\:ptx-top-\[16px\]>svg{top:16px}.\[\&\>svg\]\:ptx-size-\[14px\]>svg{width:14px;height:14px}.\[\&\>svg\]\:ptx-size-\[16px\]>svg{width:16px;height:16px}.\[\&\>svg\]\:ptx-h-\[10px\]>svg{height:10px}.\[\&\>svg\]\:ptx-h-\[12px\]>svg{height:12px}.\[\&\>svg\]\:ptx-w-\[10px\]>svg{width:10px}.\[\&\>svg\]\:ptx-w-\[12px\]>svg{width:12px}.\[\&\>svg\]\:ptx-shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:ptx-text-destructive>svg{--tw-text-opacity:1;color:rgb(var(--ptx-destructive)/var(--tw-text-opacity,1))}.\[\&\>svg\]\:ptx-text-foreground>svg{--tw-text-opacity:1;color:rgb(var(--ptx-foreground)/var(--tw-text-opacity,1))}.\[\&\>svg\]\:ptx-text-muted-foreground>svg{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.\[\&\>svg\]\:ptx-text-sidebar-accent-foreground>svg{--tw-text-opacity:1;color:rgb(var(--ptx-sidebar-accent-foreground)/var(--tw-text-opacity,1))}.\[\&\>svg\~\*\]\:ptx-pl-\[28px\]>svg~*{padding-left:28px}.\[\&\>tr\]\:last\:ptx-border-b-0:last-child>tr{border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:ptx-rotate-90[data-panel-group-direction=vertical]>div{--tw-rotate:90deg}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:ptx-rotate-90[data-panel-group-direction=vertical]>div,.\[\&\[data-state\=open\]\>svg\]\:ptx-rotate-180[data-state=open]>svg{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\[data-state\=open\]\>svg\]\:ptx-rotate-180[data-state=open]>svg{--tw-rotate:180deg}.\[\&_\.recharts-cartesian-axis-tick_text\]\:ptx-fill-muted-foreground .recharts-cartesian-axis-tick text{fill:rgb(var(--ptx-muted-foreground)/1)}.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:ptx-stroke-border .recharts-cartesian-grid line[stroke="#ccc"],.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:ptx-stroke-border .recharts-curve.recharts-tooltip-cursor{stroke:rgb(var(--ptx-border))}.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:ptx-stroke-transparent .recharts-dot[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-layer\]\:ptx-outline-none .recharts-layer{outline:2px solid transparent;outline-offset:2px}.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:ptx-stroke-border .recharts-polar-grid [stroke="#ccc"]{stroke:rgb(var(--ptx-border))}.\[\&_\.recharts-radial-bar-background-sector\]\:ptx-fill-muted .recharts-radial-bar-background-sector,.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:ptx-fill-muted .recharts-rectangle.recharts-tooltip-cursor{fill:rgb(var(--ptx-muted)/1)}.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:ptx-stroke-border .recharts-reference-line [stroke="#ccc"]{stroke:rgb(var(--ptx-border))}.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:ptx-stroke-transparent .recharts-sector[stroke="#fff"]{stroke:transparent}.\[\&_\.recharts-sector\]\:ptx-outline-none .recharts-sector,.\[\&_\.recharts-surface\]\:ptx-outline-none .recharts-surface{outline:2px solid transparent;outline-offset:2px}.\[\&_\[cmdk-group-heading\]\]\:ptx-px-\[8px\] [cmdk-group-heading]{padding-left:8px;padding-right:8px}.\[\&_\[cmdk-group-heading\]\]\:ptx-py-\[6px\] [cmdk-group-heading]{padding-top:6px;padding-bottom:6px}.\[\&_\[cmdk-group-heading\]\]\:ptx-text-xs [cmdk-group-heading]{font-size:13px;line-height:var(--ptx-lh-xs)}.\[\&_\[cmdk-group-heading\]\]\:ptx-font-medium [cmdk-group-heading]{font-weight:500}.\[\&_\[cmdk-group-heading\]\]\:ptx-text-muted-foreground [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:ptx-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\[\&_\[cmdk-group\]\]\:ptx-px-\[8px\] [cmdk-group]{padding-left:8px;padding-right:8px}.\[\&_\[cmdk-input-wrapper\]_svg\]\:ptx-h-\[20px\] [cmdk-input-wrapper] svg{height:20px}.\[\&_\[cmdk-input-wrapper\]_svg\]\:ptx-w-\[20px\] [cmdk-input-wrapper] svg{width:20px}.\[\&_\[cmdk-input\]\]\:ptx-h-\[48px\] [cmdk-input]{height:48px}.\[\&_\[cmdk-item\]\]\:ptx-px-\[8px\] [cmdk-item]{padding-left:8px;padding-right:8px}.\[\&_\[cmdk-item\]\]\:ptx-py-\[12px\] [cmdk-item]{padding-top:12px;padding-bottom:12px}.\[\&_\[cmdk-item\]_svg\]\:ptx-h-\[20px\] [cmdk-item] svg{height:20px}.\[\&_\[cmdk-item\]_svg\]\:ptx-w-\[20px\] [cmdk-item] svg{width:20px}.\[\&_a\:hover\]\:ptx-text-foreground a:hover{--tw-text-opacity:1;color:rgb(var(--ptx-foreground)/var(--tw-text-opacity,1))}.\[\&_a\]\:ptx-underline a{text-decoration-line:underline}.\[\&_a\]\:ptx-underline-offset-4 a{text-underline-offset:4px}.\[\&_img\]\:ptx-size-full img{width:100%;height:100%}.\[\&_img\]\:ptx-object-cover img{-o-object-fit:cover;object-fit:cover}.\[\&_input\]\:ptx-text-2xs input{font-size:12px;line-height:var(--ptx-lh-2xs)}.\[\&_input\]\:ptx-text-sm input{font-size:14px;line-height:var(--ptx-lh-sm)}.\[\&_p\]\:ptx-leading-relaxed p{line-height:1.625}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:ptx-size-\[16px\] svg:not([class*=size-]){width:16px;height:16px}.ptx-group\/attachment[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/attachment\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:ptx-size-\[24px\] svg:not([class*=size-]){width:24px;height:24px}.ptx-group\/attachment[data-size=xs] .group-data-\[size\=xs\]\/attachment\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:ptx-size-\[14px\] svg:not([class*=size-]){width:14px;height:14px}.\[\&_svg\]\:ptx-pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:ptx-size-\[12px\] svg{width:12px;height:12px}.\[\&_svg\]\:ptx-size-\[14px\] svg{width:14px;height:14px}.\[\&_svg\]\:ptx-size-\[16px\] svg{width:16px;height:16px}.\[\&_svg\]\:ptx-size-\[20px\] svg{width:20px;height:20px}.\[\&_svg\]\:ptx-size-\[24px\] svg{width:24px;height:24px}.\[\&_svg\]\:ptx-shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:ptx-text-foreground svg{--tw-text-opacity:1;color:rgb(var(--ptx-foreground)/var(--tw-text-opacity,1))}.\[\&_svg\]\:ptx-text-muted-foreground svg{--tw-text-opacity:1;color:rgb(var(--ptx-muted-foreground)/var(--tw-text-opacity,1))}.data-\[direction\=start\]\:\[\&_svg\]\:ptx-rotate-180 svg[data-direction=start]{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&_tr\:last-child\]\:ptx-border-0 tr:last-child{border-width:0}.\[\&_tr\]\:ptx-border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-ptx-right-\[8px\]{right:-8px}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:ptx-cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:ptx-cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-ptx-left-\[8px\]{left:-8px}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:ptx-cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:ptx-cursor-e-resize{cursor:e-resize}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ptengine/design-components",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "PT-AI-Components — PTEngine 基于 shadcn/ui 的 React 组件库",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -34,7 +34,8 @@
34
34
  "require": "./dist/index.cjs"
35
35
  },
36
36
  "./styles/tokens.css": "./src/styles/tokens.css",
37
- "./tailwind-preset": "./tailwind.preset.js"
37
+ "./tailwind-preset": "./tailwind.preset.js",
38
+ "./style.css": "./dist/style.css"
38
39
  },
39
40
  "files": [
40
41
  "dist",
@@ -43,14 +44,17 @@
43
44
  "components.json",
44
45
  "llms.txt",
45
46
  "README.md",
47
+ "CHANGELOG.md",
46
48
  "COMPONENTS-DESIGN-SYSTEM.md"
47
49
  ],
48
50
  "scripts": {
49
51
  "dev": "vite --port 5199 --strictPort",
50
- "build": "tsc && vite build",
52
+ "build": "tsc && vite build && pnpm build:css",
51
53
  "type-check": "tsc --noEmit",
52
54
  "preview": "vite preview",
53
- "prepublishOnly": "pnpm build"
55
+ "prepublishOnly": "pnpm build",
56
+ "build:css": "node build/gen-private-tokens.mjs && tailwindcss -c build/tailwind.lib.js -i build/css-entry.css -o dist/style.raw.css --minify && node build/postprocess.mjs dist/style.raw.css dist/style.css && rm -f dist/style.raw.css dist/style.utilities.css",
57
+ "check:css": "node build/check-css.mjs"
54
58
  },
55
59
  "dependencies": {
56
60
  "@radix-ui/react-accordion": "^1.2.15",
@@ -10,7 +10,7 @@ const AccordionItem = React.forwardRef<
10
10
  React.ElementRef<typeof AccordionPrimitive.Item>,
11
11
  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
12
12
  >(({ className, ...props }, ref) => (
13
- <AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />
13
+ <AccordionPrimitive.Item ref={ref} className={cn('ptx-border-b', className)} {...props} />
14
14
  ));
15
15
  AccordionItem.displayName = 'AccordionItem';
16
16
 
@@ -18,17 +18,17 @@ const AccordionTrigger = React.forwardRef<
18
18
  React.ElementRef<typeof AccordionPrimitive.Trigger>,
19
19
  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
20
20
  >(({ className, children, ...props }, ref) => (
21
- <AccordionPrimitive.Header className="flex">
21
+ <AccordionPrimitive.Header className="ptx-flex">
22
22
  <AccordionPrimitive.Trigger
23
23
  ref={ref}
24
24
  className={cn(
25
- 'flex flex-1 items-center justify-between py-[16px] text-sm font-medium text-foreground transition-all hover:underline [&[data-state=open]>svg]:rotate-180',
25
+ 'ptx-flex ptx-flex-1 ptx-items-center ptx-justify-between ptx-py-[16px] ptx-text-sm ptx-font-medium ptx-text-foreground ptx-transition-all hover:ptx-underline [&[data-state=open]>svg]:ptx-rotate-180',
26
26
  className
27
27
  )}
28
28
  {...props}
29
29
  >
30
30
  {children}
31
- <ChevronDown className="h-[16px] w-[16px] shrink-0 text-muted-foreground transition-transform duration-200" />
31
+ <ChevronDown className="ptx-h-[16px] ptx-w-[16px] ptx-shrink-0 ptx-text-muted-foreground ptx-transition-transform ptx-duration-200" />
32
32
  </AccordionPrimitive.Trigger>
33
33
  </AccordionPrimitive.Header>
34
34
  ));
@@ -40,10 +40,10 @@ const AccordionContent = React.forwardRef<
40
40
  >(({ className, children, ...props }, ref) => (
41
41
  <AccordionPrimitive.Content
42
42
  ref={ref}
43
- className="overflow-hidden text-sm text-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
43
+ className="ptx-overflow-hidden ptx-text-sm ptx-text-foreground data-[state=closed]:ptx-animate-accordion-up data-[state=open]:ptx-animate-accordion-down"
44
44
  {...props}
45
45
  >
46
- <div className={cn('pb-[16px] pt-0', className)}>{children}</div>
46
+ <div className={cn('ptx-pb-[16px] ptx-pt-0', className)}>{children}</div>
47
47
  </AccordionPrimitive.Content>
48
48
  ));
49
49
  AccordionContent.displayName = AccordionPrimitive.Content.displayName;