strade-stx 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/.activity_counter +1 -0
  2. package/.gitattributes +3 -0
  3. package/.vscode/settings.json +4 -0
  4. package/.vscode/tasks.json +19 -0
  5. package/CHANGELOG.md +1 -0
  6. package/Clarinet.toml +56 -0
  7. package/Clarinet.toml.backup +174 -0
  8. package/Clarinet.toml.old +146 -0
  9. package/DEPLOYMENT_RESULTS.md +160 -0
  10. package/README.md +344 -0
  11. package/TODO.md +34 -0
  12. package/contracts/CoreMarketPlace.clar +227 -0
  13. package/contracts/DisputeResolution_clar.clar +265 -0
  14. package/contracts/EscrowService.clar +171 -0
  15. package/contracts/UserProfile.clar +280 -0
  16. package/contracts/ft-trait.clar +24 -0
  17. package/contracts/token.clar +178 -0
  18. package/costs-reports.json +76026 -0
  19. package/deployments/default.mainnet-plan.yaml +67 -0
  20. package/deployments/default.simnet-plan.yaml +105 -0
  21. package/deployments/default.testnet-plan.yaml +67 -0
  22. package/deployments/new-contracts.testnet-plan.yaml +32 -0
  23. package/frontend/README.md +10 -0
  24. package/frontend/components.json +22 -0
  25. package/frontend/dist/assets/index-BacuuL66.css +1 -0
  26. package/frontend/dist/assets/index-jryypd5B.js +194 -0
  27. package/frontend/dist/favicon.png +0 -0
  28. package/frontend/dist/index.html +15 -0
  29. package/frontend/dist/manifest.json +15 -0
  30. package/frontend/dist/vite.svg +1 -0
  31. package/frontend/empty-mock.js +1 -0
  32. package/frontend/eslint.config.js +23 -0
  33. package/frontend/eslint.config.mjs +25 -0
  34. package/frontend/index.html +14 -0
  35. package/frontend/next.config.ts +17 -0
  36. package/frontend/package-lock.json +14740 -0
  37. package/frontend/package.json +56 -0
  38. package/frontend/postcss.config.js +5 -0
  39. package/frontend/postcss.config.mjs +5 -0
  40. package/frontend/public/favicon.png +0 -0
  41. package/frontend/public/file.svg +1 -0
  42. package/frontend/public/globe.svg +1 -0
  43. package/frontend/public/manifest.json +15 -0
  44. package/frontend/public/next.svg +1 -0
  45. package/frontend/public/vercel.svg +1 -0
  46. package/frontend/public/vite.svg +1 -0
  47. package/frontend/public/window.svg +1 -0
  48. package/frontend/src/App.css +42 -0
  49. package/frontend/src/App.tsx +177 -0
  50. package/frontend/src/app/about/page.tsx +208 -0
  51. package/frontend/src/app/favicon.ico +0 -0
  52. package/frontend/src/app/globals.css +129 -0
  53. package/frontend/src/app/help/page.tsx +167 -0
  54. package/frontend/src/app/how-it-works/page.tsx +274 -0
  55. package/frontend/src/app/layout.tsx +55 -0
  56. package/frontend/src/app/marketplace/page.tsx +324 -0
  57. package/frontend/src/app/my-listings/page.tsx +318 -0
  58. package/frontend/src/app/page.tsx +15 -0
  59. package/frontend/src/assets/react.svg +1 -0
  60. package/frontend/src/components/ConfirmDialog.tsx +54 -0
  61. package/frontend/src/components/CreateListingForm.tsx +231 -0
  62. package/frontend/src/components/ErrorBoundary.tsx +73 -0
  63. package/frontend/src/components/FilterPanel.tsx +10 -0
  64. package/frontend/src/components/Footer.tsx +100 -0
  65. package/frontend/src/components/Header.tsx +268 -0
  66. package/frontend/src/components/ImageUpload.tsx +147 -0
  67. package/frontend/src/components/LandingPage.tsx +322 -0
  68. package/frontend/src/components/ListingCard.tsx +154 -0
  69. package/frontend/src/components/LoadingSkeleton.tsx +44 -0
  70. package/frontend/src/components/MobileNav.tsx +89 -0
  71. package/frontend/src/components/NotificationBell.tsx +8 -0
  72. package/frontend/src/components/NotificationPanel.tsx +14 -0
  73. package/frontend/src/components/README.md +14 -0
  74. package/frontend/src/components/SearchBar.tsx +10 -0
  75. package/frontend/src/components/TestnetBanner.tsx +29 -0
  76. package/frontend/src/components/ThemeToggle.tsx +32 -0
  77. package/frontend/src/components/__tests__/Header.test.tsx +70 -0
  78. package/frontend/src/components/__tests__/ListingCard.test.tsx +86 -0
  79. package/frontend/src/components/providers/ThemeProvider.tsx +9 -0
  80. package/frontend/src/components/ui/alert-dialog.tsx +141 -0
  81. package/frontend/src/components/ui/avatar.tsx +53 -0
  82. package/frontend/src/components/ui/badge.tsx +46 -0
  83. package/frontend/src/components/ui/button.tsx +60 -0
  84. package/frontend/src/components/ui/card.tsx +92 -0
  85. package/frontend/src/components/ui/dialog.tsx +143 -0
  86. package/frontend/src/components/ui/dropdown-menu.tsx +257 -0
  87. package/frontend/src/components/ui/input.tsx +21 -0
  88. package/frontend/src/components/ui/label.tsx +24 -0
  89. package/frontend/src/components/ui/select.tsx +187 -0
  90. package/frontend/src/components/ui/sonner.tsx +40 -0
  91. package/frontend/src/components/ui/textarea.tsx +18 -0
  92. package/frontend/src/context/README.md +27 -0
  93. package/frontend/src/index.css +166 -0
  94. package/frontend/src/lib/notificationEvents.ts +10 -0
  95. package/frontend/src/lib/notificationStore.ts +13 -0
  96. package/frontend/src/lib/notifications.ts +13 -0
  97. package/frontend/src/lib/search.ts +28 -0
  98. package/frontend/src/lib/stacks.ts +189 -0
  99. package/frontend/src/lib/utils.ts +6 -0
  100. package/frontend/src/main.tsx +10 -0
  101. package/frontend/src/test/setup.ts +23 -0
  102. package/frontend/src/types.d.ts +9 -0
  103. package/frontend/tsconfig.app.json +28 -0
  104. package/frontend/tsconfig.json +41 -0
  105. package/frontend/tsconfig.node.json +26 -0
  106. package/frontend/vercel.json +4 -0
  107. package/frontend/vite.config.ts +6 -0
  108. package/frontend/vitest.config.ts +17 -0
  109. package/lcov.info +31338 -0
  110. package/mainnetcontracts.md +16 -0
  111. package/package.json +53 -0
  112. package/scripts/auto-activity.sh +9 -0
  113. package/scripts/cancel-pending.ts +67 -0
  114. package/scripts/check-balances.ts +23 -0
  115. package/scripts/distribute-evenly.ts +56 -0
  116. package/scripts/drain-accounts.ts +70 -0
  117. package/scripts/fund-accounts.ts +88 -0
  118. package/scripts/fund-active.ts +59 -0
  119. package/scripts/fund-unfunded.ts +88 -0
  120. package/scripts/generate-activity.ts +181 -0
  121. package/scripts/git-activity-generator.ts +154 -0
  122. package/scripts/mobile-server.ts +123 -0
  123. package/settings/Devnet.toml +155 -0
  124. package/settings/Mainnet.toml +7 -0
  125. package/settings/Testnet.toml +9 -0
  126. package/tests/CoreMarketPlace.fuzz.test.ts +435 -0
  127. package/tests/CoreMarketPlace.test.ts +564 -0
  128. package/tsconfig.json +26 -0
  129. package/vitest.config.js +49 -0
@@ -0,0 +1,67 @@
1
+ ---
2
+ id: 0
3
+ name: Mainnet deployment - PRODUCTION
4
+ network: mainnet
5
+ stacks-node: "https://api.hiro.so"
6
+ bitcoin-node: "http://blockstack:blockstacksystem@bitcoin.mainnet.stacks.co:8332"
7
+ plan:
8
+ batches:
9
+ - id: 0
10
+ transactions:
11
+ - contract-publish:
12
+ contract-name: CoreMarketPlace
13
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
14
+ cost: 87570
15
+ path: contracts/CoreMarketPlace.clar
16
+ anchor-block-only: true
17
+ clarity-version: 3
18
+ - contract-publish:
19
+ contract-name: DisputeResolution_clar
20
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
21
+ cost: 109500
22
+ path: contracts/DisputeResolution_clar.clar
23
+ anchor-block-only: true
24
+ clarity-version: 3
25
+ - contract-publish:
26
+ contract-name: EscrowService
27
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
28
+ cost: 63160
29
+ path: contracts/EscrowService.clar
30
+ anchor-block-only: true
31
+ clarity-version: 3
32
+ - contract-publish:
33
+ contract-name: UserProfile
34
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
35
+ cost: 98010
36
+ path: contracts/UserProfile.clar
37
+ anchor-block-only: true
38
+ clarity-version: 3
39
+ - contract-publish:
40
+ contract-name: token
41
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
42
+ cost: 69130
43
+ path: contracts/token.clar
44
+ anchor-block-only: true
45
+ clarity-version: 3
46
+ - contract-publish:
47
+ contract-name: ft-trait
48
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
49
+ cost: 10000
50
+ path: contracts/ft-trait.clar
51
+ anchor-block-only: true
52
+ clarity-version: 3
53
+ - contract-publish:
54
+ contract-name: nft-trait
55
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
56
+ cost: 10000
57
+ path: contracts/nft-trait.clar
58
+ anchor-block-only: true
59
+ clarity-version: 3
60
+ - contract-publish:
61
+ contract-name: non-fungible-token
62
+ expected-sender: SPGEE2D7NV4RJC1MHK59AN83PEN0CBBEXQSYJQGE
63
+ cost: 150000
64
+ path: contracts/non-fungible-token.clar
65
+ anchor-block-only: true
66
+ clarity-version: 3
67
+ epoch: "3.0"
@@ -0,0 +1,105 @@
1
+ ---
2
+ id: 0
3
+ name: "Simulated deployment, used as a default for `clarinet console`, `clarinet test` and `clarinet check`"
4
+ network: simnet
5
+ genesis:
6
+ wallets:
7
+ - name: deployer
8
+ address: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
9
+ balance: "100000000000000"
10
+ sbtc-balance: "1000000000"
11
+ - name: faucet
12
+ address: STNHKEPYEPJ8ET55ZZ0M5A34J0R3N5FM2CMMMAZ6
13
+ balance: "100000000000000"
14
+ sbtc-balance: "1000000000"
15
+ - name: wallet_1
16
+ address: ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5
17
+ balance: "100000000000000"
18
+ sbtc-balance: "1000000000"
19
+ - name: wallet_2
20
+ address: ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG
21
+ balance: "100000000000000"
22
+ sbtc-balance: "1000000000"
23
+ - name: wallet_3
24
+ address: ST2JHG361ZXG51QTKY2NQCVBPPRRE2KZB1HR05NNC
25
+ balance: "100000000000000"
26
+ sbtc-balance: "1000000000"
27
+ - name: wallet_4
28
+ address: ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND
29
+ balance: "100000000000000"
30
+ sbtc-balance: "1000000000"
31
+ - name: wallet_5
32
+ address: ST2REHHS5J3CERCRBEPMGH7921Q6PYKAADT7JP2VB
33
+ balance: "100000000000000"
34
+ sbtc-balance: "1000000000"
35
+ - name: wallet_6
36
+ address: ST3AM1A56AK2C1XAFJ4115ZSV26EB49BVQ10MGCS0
37
+ balance: "100000000000000"
38
+ sbtc-balance: "1000000000"
39
+ - name: wallet_7
40
+ address: ST3PF13W7Z0RRM42A8VZRVFQ75SV1K26RXEP8YGKJ
41
+ balance: "100000000000000"
42
+ sbtc-balance: "1000000000"
43
+ - name: wallet_8
44
+ address: ST3NBRSFKX28FQ2ZJ1MAKX58HKHSDGNV5N7R21XCP
45
+ balance: "100000000000000"
46
+ sbtc-balance: "1000000000"
47
+ contracts:
48
+ - genesis
49
+ - lockup
50
+ - bns
51
+ - cost-voting
52
+ - costs
53
+ - pox
54
+ - costs-2
55
+ - pox-2
56
+ - costs-3
57
+ - pox-3
58
+ - pox-4
59
+ - signers
60
+ - signers-voting
61
+ plan:
62
+ batches:
63
+ - id: 0
64
+ transactions:
65
+ - emulated-contract-publish:
66
+ contract-name: CoreMarketPlace
67
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
68
+ path: contracts/CoreMarketPlace.clar
69
+ clarity-version: 3
70
+ - emulated-contract-publish:
71
+ contract-name: DisputeResolution_clar
72
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
73
+ path: contracts/DisputeResolution_clar.clar
74
+ clarity-version: 3
75
+ - emulated-contract-publish:
76
+ contract-name: EscrowService
77
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
78
+ path: contracts/EscrowService.clar
79
+ clarity-version: 3
80
+ - emulated-contract-publish:
81
+ contract-name: UserProfile
82
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
83
+ path: contracts/UserProfile.clar
84
+ clarity-version: 3
85
+ - emulated-contract-publish:
86
+ contract-name: ft-trait
87
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
88
+ path: contracts/ft-trait.clar
89
+ clarity-version: 3
90
+ - emulated-contract-publish:
91
+ contract-name: nft-trait
92
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
93
+ path: contracts/nft-trait.clar
94
+ clarity-version: 3
95
+ - emulated-contract-publish:
96
+ contract-name: non-fungible-token
97
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
98
+ path: contracts/non-fungible-token.clar
99
+ clarity-version: 3
100
+ - emulated-contract-publish:
101
+ contract-name: token
102
+ emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
103
+ path: contracts/token.clar
104
+ clarity-version: 3
105
+ epoch: "3.0"
@@ -0,0 +1,67 @@
1
+ ---
2
+ id: 0
3
+ name: Testnet deployment
4
+ network: testnet
5
+ stacks-node: "https://api.testnet.hiro.so"
6
+ bitcoin-node: "http://blockstack:blockstacksystem@bitcoind.testnet.stacks.co:18332"
7
+ plan:
8
+ batches:
9
+ - id: 0
10
+ transactions:
11
+ - contract-publish:
12
+ contract-name: CoreMarketPlace
13
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
14
+ cost: 87570
15
+ path: contracts/CoreMarketPlace.clar
16
+ anchor-block-only: true
17
+ clarity-version: 3
18
+ - contract-publish:
19
+ contract-name: DisputeResolution_clar
20
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
21
+ cost: 109500
22
+ path: contracts/DisputeResolution_clar.clar
23
+ anchor-block-only: true
24
+ clarity-version: 3
25
+ - contract-publish:
26
+ contract-name: EscrowService
27
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
28
+ cost: 63160
29
+ path: contracts/EscrowService.clar
30
+ anchor-block-only: true
31
+ clarity-version: 3
32
+ - contract-publish:
33
+ contract-name: UserProfile
34
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
35
+ cost: 98010
36
+ path: contracts/UserProfile.clar
37
+ anchor-block-only: true
38
+ clarity-version: 3
39
+ - contract-publish:
40
+ contract-name: ft-trait
41
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
42
+ cost: 10000
43
+ path: contracts/ft-trait.clar
44
+ anchor-block-only: true
45
+ clarity-version: 3
46
+ - contract-publish:
47
+ contract-name: nft-trait
48
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
49
+ cost: 10000
50
+ path: contracts/nft-trait.clar
51
+ anchor-block-only: true
52
+ clarity-version: 3
53
+ - contract-publish:
54
+ contract-name: non-fungible-token
55
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
56
+ cost: 150000
57
+ path: contracts/non-fungible-token.clar
58
+ anchor-block-only: true
59
+ clarity-version: 3
60
+ - contract-publish:
61
+ contract-name: token
62
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
63
+ cost: 69130
64
+ path: contracts/token.clar
65
+ anchor-block-only: true
66
+ clarity-version: 3
67
+ epoch: "3.0"
@@ -0,0 +1,32 @@
1
+ ---
2
+ id: 1
3
+ name: New Contracts Testnet deployment
4
+ network: testnet
5
+ stacks-node: "https://api.testnet.hiro.so"
6
+ bitcoin-node: "http://blockstack:blockstacksystem@bitcoind.testnet.stacks.co:18332"
7
+ plan:
8
+ batches:
9
+ - id: 0
10
+ transactions:
11
+ - contract-publish:
12
+ contract-name: ft-trait
13
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
14
+ cost: 10000
15
+ path: contracts/ft-trait.clar
16
+ anchor-block-only: true
17
+ clarity-version: 3
18
+ - contract-publish:
19
+ contract-name: nft-trait
20
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
21
+ cost: 10000
22
+ path: contracts/nft-trait.clar
23
+ anchor-block-only: true
24
+ clarity-version: 3
25
+ - contract-publish:
26
+ contract-name: non-fungible-token
27
+ expected-sender: STGEE2D7NV4RJC1MHK59AN83PEN0CBBEXNG4QQVF
28
+ cost: 150000
29
+ path: contracts/non-fungible-token.clar
30
+ anchor-block-only: true
31
+ clarity-version: 3
32
+ epoch: "3.0"
@@ -0,0 +1,10 @@
1
+ post 1 = https://x.com/DavidMarvyy/status/1978875809151492437
2
+ post 2 = https://x.com/DavidMarvyy/status/1978878793742778729
3
+ post 3 = https://x.com/DavidMarvyy/status/1978880338169328012
4
+ https://drive.google.com/file/d/11pDyazpgvBbHt96UWq6--Lk-myduWJ_5/view?usp=drivesdk
5
+ SP2DGFM08B5RANZC4E9Q36NT9E2FBKCQYPMSV44PV
6
+ SP34EBMKMRR6SXX65GRKJ1FHEXV7AGHJ2D8ASQ5M3
7
+ SP3785G95XDXW7VS4T6M3Z5R6DD770EWFCZ1JC97Y
8
+ SP1W2EERN213N3SPHSD25V4VE937P3B776ZZVPE6V
9
+ SP3125QHD69Q9H142EVKZMYDN60NNJQ7MXF1XJ5W8
10
+ https://www.loom.com/share/13f890069bc746feac671ee9f27924b2
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "src/app/globals.css",
9
+ "baseColor": "slate",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "iconLibrary": "lucide",
14
+ "aliases": {
15
+ "components": "@/components",
16
+ "utils": "@/lib/utils",
17
+ "ui": "@/components/ui",
18
+ "lib": "@/lib",
19
+ "hooks": "@/hooks"
20
+ },
21
+ "registries": {}
22
+ }
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Outfit:wght@100;200;300;400;500;600;700;800;900&family=Syne:wght@400;500;600;700;800&display=swap";@layer properties,theme,base,components,utilities;@layer theme{:root,:host{--font-sans:"Outfit",sans-serif;--font-serif:"Cormorant Garamond",serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-2xl:42rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tighter:-.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-app-bg:#fcfcfd;--color-app-border:#e5e7eb;--color-app-hover:#f9fafb;--color-accent-indigo:#4f46e5;--color-accent-indigo-hover:#4338ca;--color-text-main:#111827;--color-text-dim:#4b5563;--color-text-pale:#9ca3af;--font-display:"Syne",sans-serif}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.fixed{position:fixed}.relative{position:relative}.top-6{top:calc(var(--spacing)*6)}.left-1\/2{left:50%}.z-50{z-index:50}.mx-auto{margin-inline:auto}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-20{margin-bottom:calc(var(--spacing)*20)}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.min-h-screen{min-height:100vh}.w-\[95\%\]{width:95%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-xs{max-width:var(--container-xs)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-10{gap:calc(var(--spacing)*10)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-app-border{border-color:var(--color-app-border)}.bg-accent-indigo{background-color:var(--color-accent-indigo)}.bg-app-bg{background-color:var(--color-app-bg)}.bg-white{background-color:var(--color-white)}.p-8{padding:calc(var(--spacing)*8)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-16{padding-block:calc(var(--spacing)*16)}.pt-32{padding-top:calc(var(--spacing)*32)}.pt-44{padding-top:calc(var(--spacing)*44)}.pb-24{padding-bottom:calc(var(--spacing)*24)}.text-center{text-align:center}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-accent-indigo{color:var(--color-accent-indigo)}.text-text-dim{color:var(--color-text-dim)}.text-text-main{color:var(--color-text-main)}.text-text-pale{color:var(--color-text-pale)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.shadow-floating{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000000d),0 10px 10px -5px var(--tw-shadow-color,#00000005);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-premium{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000000d),0 2px 4px -1px var(--tw-shadow-color,#00000008);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}@media(hover:hover){.group-hover\:text-accent-indigo:is(:where(.group):hover *){color:var(--color-accent-indigo)}}.selection\:bg-accent-indigo\/10 ::selection{background-color:#4f46e51a}@supports (color:color-mix(in lab,red,red)){.selection\:bg-accent-indigo\/10 ::selection{background-color:color-mix(in oklab,var(--color-accent-indigo)10%,transparent)}}.selection\:bg-accent-indigo\/10::selection{background-color:#4f46e51a}@supports (color:color-mix(in lab,red,red)){.selection\:bg-accent-indigo\/10::selection{background-color:color-mix(in oklab,var(--color-accent-indigo)10%,transparent)}}.selection\:text-accent-indigo ::selection{color:var(--color-accent-indigo)}.selection\:text-accent-indigo::selection{color:var(--color-accent-indigo)}@media(hover:hover){.hover\:bg-app-hover:hover{background-color:var(--color-app-hover)}.hover\:text-accent-indigo:hover{color:var(--color-accent-indigo)}.hover\:shadow-premium:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000000d),0 2px 4px -1px var(--tw-shadow-color,#00000008);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:48rem){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:items-start{align-items:flex-start}.md\:text-left{text-align:left}.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}}}@keyframes reveal{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes softPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(.98)}}html{scroll-behavior:smooth}body{background-color:var(--color-app-bg);color:var(--color-text-main);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;overflow-x:hidden}h1,h2,h3,.font-serif{font-family:var(--font-serif)}.font-display{font-family:var(--font-display)}.glass{-webkit-backdrop-filter:blur(16px);background:#ffffffd9;border:1px solid #ffffff80}.grid-subtle{background-image:radial-gradient(#e5e7eb 1px,#0000 1px);background-size:40px 40px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--color-app-bg)}::-webkit-scrollbar-thumb{background:var(--color-app-border);border-radius:10px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-pale)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.btn-primary{background-color:var(--color-accent-indigo);padding-inline:calc(var(--spacing)*8);padding-block:calc(var(--spacing)*3.5);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-white);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;border-radius:3.40282e38px;transition-duration:.3s}@media(hover:hover){.btn-primary:hover{background-color:var(--color-accent-indigo-hover);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000000d),0 10px 10px -5px var(--tw-shadow-color,#00000005);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.btn-primary:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.btn-primary:disabled{pointer-events:none;opacity:.5}.btn-secondary{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-app-border);background-color:var(--color-white);padding-inline:calc(var(--spacing)*8);padding-block:calc(var(--spacing)*3.5);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-accent-indigo);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;border-radius:3.40282e38px;transition-duration:.3s}@media(hover:hover){.btn-secondary:hover{background-color:var(--color-app-hover);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000000d),0 2px 4px -1px var(--tw-shadow-color,#00000008);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.btn-secondary:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.btn-secondary:disabled{opacity:.5}.btn-ghost{border-radius:var(--radius-xl);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2.5);color:var(--color-text-dim);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media(hover:hover){.btn-ghost:hover{background-color:var(--color-app-hover);color:var(--color-accent-indigo)}}.card-premium{border-radius:var(--radius-3xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-app-border);background-color:var(--color-white);padding:calc(var(--spacing)*8);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.5s;transition-duration:.5s}@media(hover:hover){.card-premium:hover{border-color:#4f46e533}@supports (color:color-mix(in lab,red,red)){.card-premium:hover{border-color:color-mix(in oklab,var(--color-accent-indigo)20%,transparent)}}.card-premium:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000000d),0 10px 10px -5px var(--tw-shadow-color,#00000005);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.input-premium{border-radius:var(--radius-xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-app-border);background-color:var(--color-white);width:100%;padding-inline:calc(var(--spacing)*5);padding-block:calc(var(--spacing)*4);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-text-main);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}.input-premium::placeholder{color:var(--color-text-pale)}.input-premium:focus{border-color:var(--color-accent-indigo);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#4f46e51a}@supports (color:color-mix(in lab,red,red)){.input-premium:focus{--tw-ring-color:color-mix(in oklab,var(--color-accent-indigo)10%,transparent)}}.input-premium:focus{--tw-outline-style:none;outline-style:none}.stagger-reveal>*{opacity:0;animation:.8s cubic-bezier(.16,1,.3,1) forwards reveal}.stagger-1{animation-delay:.1s}.stagger-2{animation-delay:.2s}.stagger-3{animation-delay:.3s}.stagger-4{animation-delay:.4s}.stagger-5{animation-delay:.5s}:focus-visible{outline:2px solid var(--color-accent-indigo);outline-offset:2px}::selection{color:var(--color-accent-indigo);background-color:#4f46e51a}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}