shopport 0.1.7 → 0.1.9

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.
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: sppt-settlement-report
3
+ version: 1.0.0
4
+ description: |
5
+ 멀티채널 정산 현황 조회 + 수수료 계산 + 수익 요약 워크플로우.
6
+ Use when asked to "정산 확인", "이번 달 수익", "수수료 얼마야", "실수령액".
7
+ triggers:
8
+ - 정산
9
+ - 수익 확인
10
+ - 수수료
11
+ - 실수령액
12
+ - settlement
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Glob
17
+ - Grep
18
+ ---
19
+
20
+ # settlement-report
21
+
22
+ 멀티채널 정산 현황을 조회하고 수수료/실수령액을 계산하는 워크플로우.
23
+
24
+ ## When to use
25
+
26
+ - "이번 달 정산 확인해줘", "수수료 얼마나 나가?", "실수령액 계산해줘"
27
+ - 채널별 정산 비교가 필요할 때
28
+ - 수수료 규칙을 설정/변경할 때
29
+
30
+ ## Prerequisites
31
+
32
+ - 최소 1개 판매 채널 설정 완료
33
+ - 수수료 규칙 설정 권장: `sppt settlement fee list`
34
+
35
+ ## Steps
36
+
37
+ ### 1. 수수료 규칙 확인
38
+
39
+ ```bash
40
+ sppt settlement fee list
41
+ ```
42
+
43
+ 채널별 수수료 규칙이 설정되어 있는지 확인합니다.
44
+ 없으면 사용자에게 수수료율을 물어보고 설정합니다:
45
+
46
+ ```bash
47
+ sppt settlement fee set coupang --rate 10.8
48
+ sppt settlement fee set cafe24 --rate 3.3
49
+ sppt settlement fee set smartstore --rate 5.5
50
+ ```
51
+
52
+ ### 2. 정산 요약 조회
53
+
54
+ ```bash
55
+ sppt settlement summary --days 30
56
+ ```
57
+
58
+ 채널별 정산 합계를 조회합니다. 특정 채널만 보려면:
59
+
60
+ ```bash
61
+ sppt settlement summary coupang --days 30
62
+ ```
63
+
64
+ ### 3. 정산 목록 상세
65
+
66
+ ```bash
67
+ sppt settlement list --days 30
68
+ ```
69
+
70
+ 건별 정산 내역을 확인합니다.
71
+
72
+ ### 4. 개별 주문 정산 계산
73
+
74
+ 특정 주문의 수수료/실수령액을 계산합니다:
75
+
76
+ ```bash
77
+ sppt settlement calc coupang <orderId> --amount 29900
78
+ ```
79
+
80
+ 출력 예시:
81
+ ```
82
+ 정산 계산: coupang 주문 #12345
83
+ ──────────────────────────
84
+ 판매가: 29,900원
85
+ 수수료 (10.8%): -3,229원
86
+ 배송비: -3,000원
87
+ ──────────────────────────
88
+ 실수령액: 23,671원
89
+ 마진율: 20.8%
90
+ ```
91
+
92
+ ### 5. 결과 요약
93
+
94
+ 사용자에게 채널별 정산 비교표를 제공합니다:
95
+
96
+ ```
97
+ 📊 정산 요약 (최근 30일)
98
+ ────────────────────────────────────────
99
+ 채널 매출 수수료 실수령 마진율
100
+ cafe24 850,000 28,050 821,950 96.7%
101
+ coupang 2,150,000 232,200 1,917,800 89.2%
102
+ smartstore 620,000 34,100 585,900 94.5%
103
+ ────────────────────────────────────────
104
+ 합계 3,620,000 294,350 3,325,650 91.9%
105
+ ```
106
+
107
+ ## Error handling
108
+
109
+ - **수수료 규칙 미설정**: 채널 기본 수수료율로 안내 후 설정 유도
110
+ - **정산 데이터 없음**: 조회 기간 확대 또는 주문 데이터 임포트 안내
111
+
112
+ ## Notes
113
+
114
+ - 수수료율은 채널·카테고리·판매자 등급에 따라 다를 수 있음
115
+ - PostgreSQL 연결 시 정산 이력이 자동 누적됩니다
116
+ - 매월 정산 리포트로 채널별 수익성 비교 권장
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: shopport
3
+ version: 1.0.0
4
+ description: |
5
+ shopport CLI 도움말 + 사용 가능한 스킬 목록. /sppt와 동일한 역할.
6
+ Use when asked to "shopport", "shopport 도움말", "shopport 뭐야".
7
+ triggers:
8
+ - shopport
9
+ - shopport help
10
+ - shopport 도움말
11
+ allowed-tools:
12
+ - Bash
13
+ - Read
14
+ - Glob
15
+ ---
16
+
17
+ # shopport
18
+
19
+ > `/sppt` 스킬과 동일합니다. shopport CLI 도움말 + 스킬 목록을 보려면 아래를 실행하세요.
20
+
21
+ 먼저 CLI 도움말을 확인합니다:
22
+
23
+ ```bash
24
+ sppt --help
25
+ ```
26
+
27
+ ## 사용 가능한 스킬
28
+
29
+ | 스킬 | 설명 |
30
+ |---|---|
31
+ | `/sppt` | shopport 전체 도움말 + 스킬 목록 |
32
+ | `/sppt-order-collect` | 멀티채널 주문 한번에 모아보기 |
33
+ | `/sppt-order-fulfill` | 주문 확인 → 소싱 발주 → 송장 등록 |
34
+ | `/sppt-source-to-register` | 소싱 검색 → 마진 계산 → 판매 채널 등록 |
35
+ | `/sppt-waterfall-source` | 3개 소싱채널 워터폴 가격 비교 |
36
+ | `/sppt-product-sync` | 소싱→판매 배치 상품 동기화 |
37
+ | `/sppt-product-parse` | 상품명 → SKU/카테고리/제품라인 해체 |
38
+ | `/sppt-inventory-sync` | 멀티채널 재고 분배 + 동기화 |
39
+ | `/sppt-price-monitor` | 소싱가 변동 감지 → 마진 체크 → 판매가 조정 |
40
+ | `/sppt-settlement-report` | 정산 현황 조회 + 수익 요약 |
41
+ | `/sppt-cost-calc` | 원가/마진/수수료 계산 |
42
+ | `/sppt-trend-research` | 트렌드 키워드 리서치 |
43
+ | `/sppt-promo-research` | 경쟁 광고 분석 → 바이럴 체크 → 카피 생성 |
44
+ | `/sppt-dashboard` | 운영 대시보드 띄우기 |
45
+ | `/sppt-status-check` | 전채널 연결 + 건강 체크 |
46
+
47
+ ## Quick Start
48
+
49
+ ```bash
50
+ sppt init # 채널 온보딩
51
+ sppt status # 연결 상태 확인
52
+ sppt context # AI용 스토어 브리핑
53
+ sppt order list cafe24 # 주문 조회
54
+ ```
55
+
56
+ 판매 채널: cafe24, coupang, smartstore, shopify
57
+ 소싱 채널: domemae, domeggook, specialoffer, cjdropshipping
@@ -1,3 +1,23 @@
1
+ ---
2
+ name: sppt-source-to-register
3
+ version: 1.0.0
4
+ description: |
5
+ 소싱 채널에서 상품 검색 → 마진 계산 → 판매 채널 등록 워크플로우.
6
+ Use when asked to "소싱해서 등록해줘", "도매매에서 찾아서 올려줘", "상품 소싱".
7
+ triggers:
8
+ - 소싱해서 등록
9
+ - 상품 소싱
10
+ - source and register
11
+ - 도매매에서 찾아서
12
+ allowed-tools:
13
+ - Bash
14
+ - Read
15
+ - Write
16
+ - Edit
17
+ - Glob
18
+ - Grep
19
+ ---
20
+
1
21
  # source-to-register
2
22
 
3
23
  소싱 채널에서 상품을 검색하고 판매 채널에 등록하는 워크플로우.
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: sppt
3
+ version: 1.0.0
4
+ description: |
5
+ shopport CLI 도움말 + 사용 가능한 스킬 목록.
6
+ Use when asked to "sppt", "shopport 뭐 할 수 있어?", "스킬 목록", "커맨드 알려줘".
7
+ triggers:
8
+ - sppt
9
+ - shopport help
10
+ - 스킬 목록
11
+ - 커맨드 목록
12
+ - 뭐 할 수 있어
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Glob
17
+ ---
18
+
19
+ # shopport (sppt)
20
+
21
+ > AI를 위한 이커머스 운영도구 — 사장님이 뽑으려던 운영 담당자, shopport가 대신합니다.
22
+
23
+ ## Quick Start
24
+
25
+ ```bash
26
+ sppt --help # CLI 전체 도움말
27
+ sppt status # 채널 연결 상태 확인
28
+ sppt context # AI용 스토어 브리핑
29
+ ```
30
+
31
+ ## 사용 가능한 스킬
32
+
33
+ | 스킬 | 설명 |
34
+ |---|---|
35
+ | `/sppt-order-collect` | 멀티채널 주문 한번에 모아보기 |
36
+ | `/sppt-order-fulfill` | 주문 확인 → 소싱 발주 → 송장 등록 |
37
+ | `/sppt-source-to-register` | 소싱 검색 → 마진 계산 → 판매 채널 등록 |
38
+ | `/sppt-waterfall-source` | 3개 소싱채널 워터폴 가격 비교 |
39
+ | `/sppt-product-sync` | 소싱→판매 배치 상품 동기화 |
40
+ | `/sppt-product-parse` | 상품명 → SKU/카테고리/제품라인 해체 |
41
+ | `/sppt-inventory-sync` | 멀티채널 재고 분배 + 동기화 |
42
+ | `/sppt-price-monitor` | 소싱가 변동 감지 → 마진 체크 → 판매가 조정 |
43
+ | `/sppt-settlement-report` | 정산 현황 조회 + 수익 요약 |
44
+ | `/sppt-cost-calc` | 원가/마진/수수료 계산 |
45
+ | `/sppt-trend-research` | 트렌드 키워드 리서치 |
46
+ | `/sppt-promo-research` | 경쟁 광고 분석 → 바이럴 체크 → 카피 생성 |
47
+ | `/sppt-dashboard` | 운영 대시보드 띄우기 |
48
+ | `/sppt-status-check` | 전채널 연결 + 건강 체크 |
49
+
50
+ ## CLI 커맨드 요약
51
+
52
+ ### 설정
53
+ - `sppt init [channel]` — 채널 온보딩
54
+ - `sppt auth <channel>` — OAuth 인증
55
+ - `sppt config list|get|set|remove` — 설정 관리
56
+
57
+ ### 상품
58
+ - `sppt product list|get|register|update|delete <channel>` — 상품 CRUD
59
+ - `sppt product keyword|seo|image <channel>` — SEO/이미지 관리
60
+ - `sppt product sync-batch` — 배치 복사
61
+
62
+ ### 주문/송장
63
+ - `sppt order list|get|confirm|cancel|return <channel>` — 주문 관리
64
+ - `sppt invoice register <channel> <orderId> <carrier> <tracking>` — 송장
65
+
66
+ ### 소싱
67
+ - `sppt source search|detail|categories|route|score` — 소싱 채널
68
+
69
+ ### 정산
70
+ - `sppt settlement calc|list|summary` — 정산 조회
71
+ - `sppt settlement fee list|set|remove` — 수수료 규칙
72
+
73
+ ### 가격/쿠폰
74
+ - `sppt price set|variant` — 가격 변경
75
+ - `sppt coupon create|issue` — 쿠폰
76
+
77
+ ### 홍보
78
+ - `sppt promo ad-spy|viral-check|influencer|copy` — 홍보 도구
79
+
80
+ ### 분석
81
+ - `sppt trend keyword|compare|platform` — 트렌드
82
+ - `sppt report revenue|--by <dimension>` — 매출 리포트
83
+ - `sppt dashboard` — 웹 대시보드
84
+
85
+ ### 데이터
86
+ - `sppt context` — AI용 스토어 브리핑
87
+ - `sppt status` — 헬스체크
88
+ - `sppt log` — 작업 이력
89
+ - `sppt import <file>` — CSV/엑셀 임포트
90
+
91
+ ## 판매 채널
92
+ cafe24, coupang, smartstore, shopify
93
+
94
+ ## 소싱 채널
95
+ domemae (위탁), domeggook (사입), specialoffer, cjdropshipping
@@ -0,0 +1,90 @@
1
+ ---
2
+ name: sppt-status-check
3
+ version: 1.0.0
4
+ description: |
5
+ 전채널 연결 상태 + API 건강 체크 + 스토어 브리핑.
6
+ Use when asked to "상태 확인", "채널 연결 돼있어?", "헬스체크", "지금 상황 알려줘".
7
+ triggers:
8
+ - 상태 확인
9
+ - 채널 연결
10
+ - 헬스체크
11
+ - status check
12
+ - 지금 상황
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Glob
17
+ - Grep
18
+ ---
19
+
20
+ # status-check
21
+
22
+ 전체 채널 연결 상태를 점검하고 스토어 운영 현황을 브리핑하는 워크플로우.
23
+
24
+ ## When to use
25
+
26
+ - "지금 상태 어때?", "채널 다 연결돼있어?", "헬스체크 해줘"
27
+ - 작업 시작 전 환경 점검
28
+ - 오류 발생 후 연결 상태 진단
29
+
30
+ ## Steps
31
+
32
+ ### 1. 채널 연결 상태
33
+
34
+ ```bash
35
+ sppt status
36
+ ```
37
+
38
+ 각 판매/소싱 채널의 연결 상태, 토큰 만료 여부, API 레이턴시를 확인합니다.
39
+
40
+ ### 2. 스토어 브리핑
41
+
42
+ ```bash
43
+ sppt context
44
+ ```
45
+
46
+ AI용 스토어 정보를 확인합니다:
47
+ - 스토어 프로필 (브랜드, 포지셔닝)
48
+ - 상품 분류 규칙
49
+ - 판매 인사이트
50
+
51
+ ### 3. API 기능 현황
52
+
53
+ ```bash
54
+ sppt cap
55
+ ```
56
+
57
+ 채널별로 어떤 API 기능이 사용 가능한지 확인합니다.
58
+
59
+ ### 4. API 사용량
60
+
61
+ ```bash
62
+ sppt budget
63
+ ```
64
+
65
+ 채널별 API 호출량과 한도를 확인합니다.
66
+
67
+ ### 5. 진단 결과 요약
68
+
69
+ ```
70
+ 🏥 shopport 헬스체크
71
+ ────────────────────────────────────
72
+ 채널 상태 토큰 레이턴시
73
+ cafe24 ✅ 유효 120ms
74
+ coupang ✅ 유효 85ms
75
+ smartstore ⚠️ 만료임박 200ms
76
+ shopify ❌ 미설정 -
77
+ ────────────────────────────────────
78
+ 소싱 채널: domeggook ✅ | specialoffer ✅
79
+ ```
80
+
81
+ 문제가 있는 채널은 해결 방법을 안내합니다:
82
+ - 토큰 만료 → `sppt auth <channel>`
83
+ - 미설정 → `sppt init <channel>`
84
+ - 레이턴시 높음 → API 상태 모니터링 권장
85
+
86
+ ## Notes
87
+
88
+ - 작업 시작 전 `sppt status` 습관화 권장
89
+ - cafe24 토큰은 2시간마다 자동 갱신됩니다
90
+ - `--json` 플래그로 프로그래밍적 활용 가능
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: sppt-trend-research
3
+ version: 1.0.0
4
+ description: |
5
+ 트렌드 키워드 리서치 — 검색량 조회, 키워드 비교, 전문몰 랭킹.
6
+ Use when asked to "트렌드 확인", "키워드 검색량", "뭐가 잘 팔려", "시장 조사".
7
+ triggers:
8
+ - 트렌드
9
+ - 키워드 검색량
10
+ - 뭐가 잘 팔려
11
+ - 시장 조사
12
+ - trend research
13
+ allowed-tools:
14
+ - Bash
15
+ - Read
16
+ - Glob
17
+ - Grep
18
+ ---
19
+
20
+ # trend-research
21
+
22
+ 트렌드 키워드를 리서치하고 시장 수요를 파악하는 워크플로우.
23
+
24
+ ## When to use
25
+
26
+ - "이 키워드 검색량 어때?", "뭐가 잘 팔려?", "트렌드 분석해줘"
27
+ - 신규 상품 소싱 전 수요 확인
28
+ - 키워드 간 비교가 필요할 때
29
+ - 전문몰(무신사, 올리브영 등) 랭킹 확인
30
+
31
+ ## Prerequisites
32
+
33
+ - `sppt` CLI 설치 완료
34
+
35
+ ## Steps
36
+
37
+ ### 1. 키워드 검색량 조회
38
+
39
+ ```bash
40
+ sppt trend keyword <키워드>
41
+ ```
42
+
43
+ 네이버 데이터랩 기반 검색량 + 트렌드 방향을 확인합니다.
44
+
45
+ 판단 기준:
46
+ | 월 검색량 | 수요 |
47
+ |---|---|
48
+ | 10,000+ | 높음 — 경쟁도 높을 수 있음 |
49
+ | 1,000~10,000 | 적정 — 니치 시장 가능성 |
50
+ | 1,000 미만 | 낮음 — 틈새 or 비인기 |
51
+
52
+ ### 2. 키워드 비교
53
+
54
+ 후보 키워드가 여러 개일 때 상대 비교:
55
+
56
+ ```bash
57
+ sppt trend compare <키워드1> <키워드2> [키워드3]
58
+ ```
59
+
60
+ 검색량, 트렌드 방향, 경쟁강도를 비교합니다.
61
+
62
+ ### 3. 전문몰 랭킹 확인
63
+
64
+ 특정 카테고리의 전문몰 인기 상품을 확인합니다:
65
+
66
+ ```bash
67
+ sppt trend platform musinsa
68
+ sppt trend platform oliveyoung
69
+ sppt trend platform hwahae
70
+ ```
71
+
72
+ 지원 플랫폼: 무신사, 올리브영, 화해 등
73
+
74
+ ### 4. 결과 종합
75
+
76
+ 사용자에게 다음을 제안합니다:
77
+
78
+ 1. **검색량 충분 + 상승 트렌드**: 소싱 적기 → `/sppt-source-to-register`로 진행
79
+ 2. **검색량 충분 + 하락 트렌드**: 재고 리스크 있음, 소량 테스트 권장
80
+ 3. **검색량 부족**: 키워드 변경 또는 연관 키워드로 확장
81
+
82
+ ## Error handling
83
+
84
+ - **검색량 데이터 없음**: 키워드 오타 확인, 영문/한글 변환 시도
85
+ - **전문몰 데이터 실패**: 해당 플랫폼 API 상태 확인
86
+
87
+ ## Notes
88
+
89
+ - 네이버 데이터랩은 상대값 기반이므로 절대 검색량은 추정치입니다
90
+ - 시즌 상품은 전년 동기 대비 확인 권장
91
+ - 소싱 전 트렌드 확인은 재고 리스크를 줄이는 핵심 단계입니다
@@ -1,3 +1,21 @@
1
+ ---
2
+ name: sppt-waterfall-source
3
+ version: 1.0.0
4
+ description: |
5
+ 3개 소싱 채널(도매매→specialoffer→cjdropshipping) 워터폴 가격 비교.
6
+ Use when asked to "가장 싼 공급사 찾아줘", "소싱 비교", "최적 소싱처".
7
+ triggers:
8
+ - 소싱 비교
9
+ - 최적 소싱처
10
+ - 가장 싼 공급사
11
+ - waterfall source
12
+ allowed-tools:
13
+ - Bash
14
+ - Read
15
+ - Glob
16
+ - Grep
17
+ ---
18
+
1
19
  # waterfall-source
2
20
 
3
21
  3개 소싱 채널을 비용 낮은 순서대로 검색하는 워터폴 소싱 워크플로우.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shopport",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "커머스 운영 자동화 CLI — Cafe24, Coupang, SmartStore, Shopify 통합 관리",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,6 +13,7 @@
13
13
  "build": "bun run build:dashboard && tsup && node -e \"const fs=require('fs');const f='dist/cli.js';const c=fs.readFileSync(f,'utf8');fs.writeFileSync(f,'#!/usr/bin/env bun\\n'+c);fs.chmodSync(f,0o755)\"",
14
14
  "start": "node dist/cli.js",
15
15
  "build:publish": "SHOPPORT_PUBLISH=1 bun run build",
16
+ "postinstall": "node dist/cli.js setup-skills 2>/dev/null || true",
16
17
  "prepublishOnly": "bun run build:publish",
17
18
  "test": "vitest run"
18
19
  },
@@ -1 +0,0 @@
1
- *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 72 11% 95%;--foreground: 0 0% 7%;--card: 0 0% 100%;--card-foreground: 0 0% 7%;--popover: 0 0% 100%;--popover-foreground: 0 0% 7%;--border: 70 8% 86%;--muted: 70 8% 89%;--muted-foreground: 0 0% 7% / .55;--primary: 19 100% 49%;--primary-foreground: 0 0% 100%;--success: 142 71% 45%;--warning: 37 84% 55%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--radius: 8px}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-top-6{top:-1.5rem}.bottom-\[20px\]{bottom:20px}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.right-1\.5{right:.375rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-8{top:2rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.float-right{float:right}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[3px\]{margin-top:3px}.mt-px{margin-top:1px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-9{height:2.25rem}.h-\[24px\]{height:24px}.h-\[350px\]{height:350px}.h-\[40px\]{height:40px}.h-\[72px\]{height:72px}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[280px\]{max-height:280px}.max-h-\[400px\]{max-height:400px}.max-h-\[70vh\]{max-height:70vh}.min-h-\[120px\]{min-height:120px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[220px\]{width:220px}.w-\[32px\]{width:32px}.w-\[50px\]{width:50px}.w-\[60px\]{width:60px}.w-\[72px\]{width:72px}.w-\[88px\]{width:88px}.w-\[90px\]{width:90px}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.max-w-\[120px\]{max-width:120px}.max-w-\[1280px\]{max-width:1280px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[320px\]{max-width:320px}.max-w-\[340px\]{max-width:340px}.max-w-\[860px\]{max-width:860px}.max-w-\[90px\]{max-width:90px}.flex-1{flex:1 1 0%}.flex-\[1\]{flex:1}.flex-\[2\]{flex:2}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.scroll-mt-4{scroll-margin-top:1rem}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[190px_1fr\]{grid-template-columns:190px 1fr}.grid-cols-\[1fr_2fr_1fr\]{grid-template-columns:1fr 2fr 1fr}.grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[2px\]{gap:2px}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.self-center{align-self:center}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-200\/50{border-color:#fde68a80}.border-amber-200\/60{border-color:#fde68a99}.border-amber-500\/50{border-color:#f59e0b80}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/30{border-color:hsl(var(--border) / .3)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-foreground\/50{border-color:hsl(var(--foreground) / .5)}.border-muted-foreground\/40{border-color:hsl(var(--muted-foreground) / .4)}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-primary\/60{border-color:hsl(var(--primary) / .6)}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/50{background-color:#fffbeb80}.bg-background{background-color:hsl(var(--background))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/60{background-color:#3b82f699}.bg-card{background-color:hsl(var(--card))}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/50{background-color:#ecfdf580}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/50{background-color:#10b98180}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-gray-50\/60{background-color:#f9fafb99}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/15{background-color:#22c55e26}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted-foreground\/30{background-color:hsl(var(--muted-foreground) / .3)}.bg-muted-foreground\/40{background-color:hsl(var(--muted-foreground) / .4)}.bg-muted-foreground\/50{background-color:hsl(var(--muted-foreground) / .5)}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/5{background-color:hsl(var(--muted) / .05)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-500\/15{background-color:#f9731626}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/50{background-color:hsl(var(--primary) / .5)}.bg-primary\/60{background-color:hsl(var(--primary) / .6)}.bg-primary\/70{background-color:hsl(var(--primary) / .7)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/15{background-color:#eab30826}.bg-zinc-800{--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.p-0{padding:0}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-7{padding:1.75rem}.p-8{padding:2rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-0\.5{padding-left:.125rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-3{padding-right:.75rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-7{padding-top:1.75rem}.pt-px{padding-top:1px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-\[18px\]{font-size:18px}.text-\[7px\]{font-size:7px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-400\/70{color:#fbbf24b3}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-border{color:hsl(var(--border))}.text-destructive{color:hsl(var(--destructive))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/40{color:hsl(var(--foreground) / .4)}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-foreground\/60{color:hsl(var(--foreground) / .6)}.text-foreground\/70{color:hsl(var(--foreground) / .7)}.text-foreground\/80{color:hsl(var(--foreground) / .8)}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/30{color:hsl(var(--muted-foreground) / .3)}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-white\/90{color:#ffffffe6}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.decoration-muted-foreground\/40{text-decoration-color:hsl(var(--muted-foreground) / .4)}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-primary\/50{--tw-ring-color: hsl(var(--primary) / .5)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.placeholder\:text-muted-foreground\/60::-moz-placeholder{color:hsl(var(--muted-foreground) / .6)}.placeholder\:text-muted-foreground\/60::placeholder{color:hsl(var(--muted-foreground) / .6)}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-foreground\/30:hover{border-color:hsl(var(--foreground) / .3)}.hover\:border-foreground\/40:hover{border-color:hsl(var(--foreground) / .4)}.hover\:border-primary\/70:hover{border-color:hsl(var(--primary) / .7)}.hover\:bg-blue-50\/40:hover{background-color:#eff6ff66}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted) / .3)}.hover\:bg-muted\/40:hover{background-color:hsl(var(--muted) / .4)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-primary\/50:focus{--tw-ring-color: hsl(var(--primary) / .5)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:block{display:block}.group:hover .group-hover\:text-foreground\/80{color:hsl(var(--foreground) / .8)}@media(prefers-color-scheme:dark){.dark\:border-amber-800{--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-amber-800\/40{border-color:#92400e66}.dark\:border-amber-900\/50{border-color:#78350f80}.dark\:border-amber-900\/60{border-color:#78350f99}.dark\:border-emerald-900\/60{border-color:#064e3b99}.dark\:border-red-900\/50{border-color:#7f1d1d80}.dark\:bg-amber-950{--tw-bg-opacity: 1;background-color:rgb(69 26 3 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-950\/20{background-color:#451a0333}.dark\:bg-amber-950\/30{background-color:#451a034d}.dark\:bg-amber-950\/50{background-color:#451a0380}.dark\:bg-blue-950\/50{background-color:#17255480}.dark\:bg-card{background-color:hsl(var(--card))}.dark\:bg-emerald-950\/20{background-color:#022c2233}.dark\:bg-emerald-950\/30{background-color:#022c224d}.dark\:bg-emerald-950\/50{background-color:#022c2280}.dark\:bg-green-950\/50{background-color:#052e1680}.dark\:bg-muted\/5{background-color:hsl(var(--muted) / .05)}.dark\:bg-purple-950\/50{background-color:#3b076480}.dark\:bg-red-950\/20{background-color:#450a0a33}.dark\:bg-red-950\/50{background-color:#450a0a80}.dark\:bg-sky-950\/50{background-color:#082f4980}.dark\:bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.dark\:bg-zinc-200{--tw-bg-opacity: 1;background-color:rgb(228 228 231 / var(--tw-bg-opacity, 1))}.dark\:text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.dark\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}}