@ptengine/design-components 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +119 -0
- package/COMPONENTS-DESIGN-SYSTEM.md +14 -2
- package/README.md +32 -13
- package/dist/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/drawer.d.ts.map +1 -1
- package/dist/components/ui/input-otp.d.ts.map +1 -1
- package/dist/components/ui/prompt-picker.d.ts +2 -2
- package/dist/components/ui/search-input.d.ts +3 -3
- package/dist/components/ui/select.d.ts +2 -2
- package/dist/components/ui/select.d.ts.map +1 -1
- package/dist/components/ui/sheet.d.ts.map +1 -1
- package/dist/components/ui/skeleton.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +472 -467
- package/dist/style.css +398 -0
- package/package.json +8 -4
- package/src/components/ui/accordion.tsx +6 -6
- package/src/components/ui/alert-dialog.tsx +9 -7
- package/src/components/ui/alert.tsx +5 -5
- package/src/components/ui/attachment.tsx +15 -15
- package/src/components/ui/avatar.tsx +6 -6
- package/src/components/ui/badge.tsx +8 -8
- package/src/components/ui/breadcrumb.tsx +8 -8
- package/src/components/ui/bubble.tsx +15 -15
- package/src/components/ui/button-group.tsx +5 -5
- package/src/components/ui/button.tsx +16 -16
- package/src/components/ui/calendar.tsx +23 -23
- package/src/components/ui/card.tsx +6 -6
- package/src/components/ui/carousel.tsx +16 -16
- package/src/components/ui/chart.tsx +21 -21
- package/src/components/ui/checkbox.tsx +3 -3
- package/src/components/ui/command.tsx +12 -12
- package/src/components/ui/context-menu.tsx +16 -16
- package/src/components/ui/dialog.tsx +12 -10
- package/src/components/ui/drawer.tsx +9 -7
- package/src/components/ui/dropdown-menu.tsx +17 -17
- package/src/components/ui/empty.tsx +7 -7
- package/src/components/ui/field.tsx +18 -18
- package/src/components/ui/hover-card.tsx +1 -1
- package/src/components/ui/input-group.tsx +11 -11
- package/src/components/ui/input-otp.tsx +9 -9
- package/src/components/ui/input.tsx +1 -1
- package/src/components/ui/item.tsx +18 -18
- package/src/components/ui/kbd.tsx +2 -2
- package/src/components/ui/label.tsx +1 -1
- package/src/components/ui/marker.tsx +5 -5
- package/src/components/ui/menubar.tsx +18 -18
- package/src/components/ui/message-scroller.tsx +6 -6
- package/src/components/ui/message.tsx +6 -6
- package/src/components/ui/native-select.tsx +3 -3
- package/src/components/ui/navigation-menu.tsx +9 -9
- package/src/components/ui/pagination.tsx +9 -9
- package/src/components/ui/popover.tsx +1 -1
- package/src/components/ui/progress.tsx +2 -2
- package/src/components/ui/prompt-picker.tsx +25 -25
- package/src/components/ui/radio-group.tsx +4 -4
- package/src/components/ui/resizable.tsx +4 -4
- package/src/components/ui/scroll-area.tsx +6 -6
- package/src/components/ui/search-input.tsx +12 -12
- package/src/components/ui/select.tsx +17 -17
- package/src/components/ui/separator.tsx +2 -2
- package/src/components/ui/sheet.tsx +15 -13
- package/src/components/ui/sidebar.tsx +70 -70
- package/src/components/ui/skeleton.tsx +12 -1
- package/src/components/ui/slider.tsx +4 -4
- package/src/components/ui/sonner.tsx +4 -4
- package/src/components/ui/spinner.tsx +1 -1
- package/src/components/ui/switch.tsx +2 -2
- package/src/components/ui/table.tsx +9 -9
- package/src/components/ui/tabs.tsx +16 -16
- package/src/components/ui/textarea.tsx +1 -1
- package/src/components/ui/toggle-group.tsx +1 -1
- package/src/components/ui/toggle.tsx +6 -6
- 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.
|
|
3
|
+
"version": "0.7.1",
|
|
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;
|