diff --git a/docs/docs/for-operators/05-dvt.mdx b/docs/docs/for-operators/05-dvt.mdx index 99ad420..9a6c932 100644 --- a/docs/docs/for-operators/05-dvt.mdx +++ b/docs/docs/for-operators/05-dvt.mdx @@ -60,7 +60,7 @@ There are 2 ways to create validator keys: - create keys alone - create keys with a group using Distributed Key Generation (DKG) ceremony -Creating keys alone may be an option if you don't collaborate with anybody. In this case DVT may be used for additional robustness. When using SSV you can fully delegate validator duties to other entities (SSV operators) and do not mind running validators on your own. See [Obol page](obol-setup.md) and [SSV page](ssv-setup.md) for further instructions if you are creating keys alone. +Creating keys alone may be an option if you don't collaborate with anybody. In this case DVT may be used for additional robustness. When using SSV you can fully delegate validator duties to other entities (SSV operators) and do not mind running validators on your own. See [Obol page](../intro.mdx) and [SSV page](../intro.mdx) for further instructions if you are creating keys alone. DKG is more secure and decentralized way because nobody has full control over validator keys. The document below is dedicated to DKG way. diff --git a/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx b/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx index 9f34797..f6430f3 100644 --- a/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx +++ b/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx @@ -22,6 +22,7 @@ After recovery add fake `deposit_data.json` file to your operator's vault direct :::warning **If you run keys from the Verihash operator before continuing, you must import them.** + ::: This can be done with the following command: diff --git a/docs/docs/protocol-overview-in-depth/02-vaults.mdx b/docs/docs/protocol-overview-in-depth/02-vaults.mdx index 88eb6dd..0869c01 100644 --- a/docs/docs/protocol-overview-in-depth/02-vaults.mdx +++ b/docs/docs/protocol-overview-in-depth/02-vaults.mdx @@ -34,7 +34,7 @@ All deposits, rewards distribution, and withdrawals are handled by smart contrac Whenever users stake ETH into a particular Vault, that Vault contract accumulates all deposits and launches a new validator for every 32 ETH collected. - [Read our guide about staking in Vaults ->](../guides/staking.md#staking-with-vaults) + [Read our guide about staking in Vaults ->](../guides/01-staking.mdx#staking-with-vaults) Registering new validators in the Beacon Chain can take several weeks during times when many new staking deposits are being made. ETH staked in a Vault and used to create a validator will not start producing staking rewards until the validator passes the deposit queue and becomes active. This may cause a dilution in Vault's APY. @@ -57,15 +57,13 @@ All deposits, rewards distribution, and withdrawals are handled by smart contrac If there isn't enough unbonded ETH in the Vault, a sufficient number of Vault validators will be automatically exited to provide enough ETH for unstaking. Since exiting validators from the Beacon Chain takes time, users who requested to unstake their ETH are placed in the exit queue. Once the exit queue is over, users can claim their unstaked ETH whenever they want. Users who requested to unstake ETH from a Vault and were placed into the exit queue will continue earning staking rewards until their ETH has been exited from staking. - - [Read our guide about unstaking ETH from Vaults ->](vaults.md#staking-and-unstaking) **Staking and deposit queue** Whenever users stake GNO into a particular Vault, that Vault contract accumulates all deposits and launches a new validator for every 1 GNO collected. - [Read our guide about staking in Vaults ->](../guides/staking.md#staking-with-vaults) + [Read our guide about staking in Vaults ->](../guides/01-staking.mdx#staking-with-vaults) Registering new validators in the Gnosis Beacon Chain can take several weeks during times when many new staking deposits are being made. GNO staked in a Vault and used to create a validator will not start producing staking rewards until the validator passes the deposit queue and becomes active. This may cause a dilution in Vault's APY. @@ -88,8 +86,6 @@ All deposits, rewards distribution, and withdrawals are handled by smart contrac If there isn't enough unbonded GNO in the Vault, a sufficient number of Vault validators will be automatically exited to provide enough GNO for unstaking. Since exiting validators from the Gnosis Beacon Chain takes time, users who requested to unstake their GNO are placed in the exit queue. Once the exit queue is over, users can claim their unstaked GNO whenever they want. Note that users who requested to unstake GNO from a Vault and were placed into the exit queue stop earning staking rewards as soon as they are placed in the queue. - - [Read our guide about unstaking GNO from Vaults ->](vaults.md#staking-and-unstaking) ``` @@ -245,15 +241,11 @@ and a snapshot is taken every \~12 hours. Solo Vaults are Public or Private Vaults where the Vault Admin is both the node operator and the depositor of ETH in the Vault. Solo Vaults can be configured to a solo staker's liking, including setting the fee to the desired level, choosing between the Smoothing Pool and Own Escrow for handling of MEV, opting for a tokenless Vault to avoid potentially taxable token swaps on deposits / withdrawals, etc. - - [Read more about configuring a Vault ->](vaults.md#for-operators-of-vaults) Solo Vaults are Public or Private Vaults where the Vault Admin is both the node operator and the depositor of GNO in the Vault. Solo Vaults can be configured to a solo staker's liking, including setting the fee to the desired level, choosing between the Smoothing Pool and Own Escrow for handling of MEV, opting for a tokenless Vault to avoid potentially taxable token swaps on deposits / withdrawals, etc. - - [Read more about configuring a Vault ->](vaults.md#for-operators-of-vaults) ``` diff --git a/docs/docs/protocol-overview-in-depth/03-os-token.mdx b/docs/docs/protocol-overview-in-depth/03-os-token.mdx index 8468359..5e78488 100644 --- a/docs/docs/protocol-overview-in-depth/03-os-token.mdx +++ b/docs/docs/protocol-overview-in-depth/03-os-token.mdx @@ -101,8 +101,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru **Buying osETH on DEXs** Stakers who buy osETH on DEXs don't have exposure to any particular Vault and hence are fully insulated against any slashing losses and poor performance that may occur. - - [Read more about the excess backing of osETH ->](ostoken.md#overcollateralization) osGNO can be minted against any Gnosis node, including those that perform poorly. @@ -142,8 +140,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru Redemption of osETH for ETH always happens at the underlying exchange rate between the two tokens. The exchange rate is determined by StakeWise Oracles based on the performance of Vaults. Redemption of osETH for ETH is instant if there is enough unbonded ETH in the protocol. If the amount of unbonded ETH is not enough to meet the volume of redemption requests, the protocol will exit validators to withdraw a sufficient amount of ETH for full redemption. - - [Read more about the osETH redemption mechanism ->](ostoken.md#redemption-mechanism) osGNO is backed by staked GNO in Vaults, and is redeemable for GNO in their validators. @@ -151,8 +147,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru Redemption of osGNO for GNO always happens at the underlying exchange rate between the two tokens. The exchange rate is determined by StakeWise Oracles based on the performance of Vaults. Redemption of osGNO for GNO is instant if there is enough unbonded GNO in the protocol. If the amount of unbonded GNO is not enough to meet the volume of redemption requests, the protocol will exit validators to withdraw a sufficient amount of GNO for full redemption. - - [Read more about the osGNO redemption mechanism ->](ostoken.md#redemption-mechanism) ``` @@ -493,8 +487,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru The amount of osETH to be burned will equal the sum of the original amount minted plus the StakeWise DAO commission, which is set to 5% of the rewards osETH accumulated. - [Read more about the StakeWise DAO fee ->](ostoken.md#staking-fee) - Note that burning the full outstanding amount of osETH is necessary to fully unstake from the Vault. If less osETH is burned, user's ETH stake will be withdrawable only partially in order to maintain appropriate position health. The amount of ETH that can be unstaked immediately will be based on position health, where the osETH position must remain healthy (i.e. up to 90% of staked ETH in 90% LTV Vaults and up to 99.99% in 99.99% LTV Vaults) after some ETH has been unstaked. This is calculated by the following formula: @@ -535,8 +527,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru The amount of osGNO to be burned will equal the sum of the original amount minted plus the StakeWise DAO commission, which is set to 5% of the rewards osGNO accumulated. - [Read more about the StakeWise DAO fee ->](ostoken.md#staking-fee) - Note that burning the full outstanding amount of osGNO is necessary to fully unstake from the Vault. If less osGNO is burned, user's GNO stake will be withdrawable only partially in order to maintain appropriate position health. The amount of GNO that can be unstaked immediately will be based on position health, where the osGNO position must remain healthy (i.e. up to 90% of staked GNO in 90% LTV Vaults and up to 99.95% in 99.95% LTV Vaults) after some GNO has been unstaked. This is calculated by the following formula: diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 9771b79..70e964a 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,151 +1,130 @@ -import { themes as prismThemes } from "prism-react-renderer"; -import type { Config } from "@docusaurus/types"; -import type * as Preset from "@docusaurus/preset-classic"; +import { themes as prismThemes } from 'prism-react-renderer' +import type * as Preset from '@docusaurus/preset-classic' +import type { Config } from '@docusaurus/types' -// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) const config: Config = { - title: "StakeWise Docs", - tagline: "Dinosaurs are cool", - favicon: "img/favicon.ico", + title: 'Welcome to StakeWise Docs', + tagline: 'Documentation and Guides', + url: 'https://docs.stakewise.io', + favicon: 'img/favicon.ico', + baseUrl: '/', + projectName: 'docs', // Usually your repo name. + organizationName: 'stakewise', // Usually your GitHub org/user name. - // Set the production url of your site here - url: "https://docs.stakewise.io", - // Set the // pathname under which your site is served - // For GitHub pages deployment, it is often '//' - baseUrl: "/", + onBrokenLinks: 'warn', + onBrokenAnchors: 'throw', + onDuplicateRoutes: 'throw', + onBrokenMarkdownLinks: 'throw', - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: "stakewise", // Usually your GitHub org/user name. - projectName: "docs", // Usually your repo name. - - onBrokenLinks: "warn", - onBrokenMarkdownLinks: "warn", - - // Even if you don't use internationalization, you can use this field to set - // useful metadata like html lang. For example, if your site is Chinese, you - // may want to replace "en" with "zh-Hans". i18n: { - defaultLocale: "en", - locales: ["en"], + defaultLocale: 'en', + locales: ['en'], }, presets: [ [ - "classic", + '@docusaurus/preset-classic', { docs: { - sidebarPath: "./sidebars.ts", - routeBasePath: "/", - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/", + sidebarPath: './sidebars.ts', + showLastUpdateTime: true, + routeBasePath: '/', + breadcrumbs: true, }, - // blog: { - // showReadingTime: true, - // feedOptions: { - // type: ["rss", "atom"], - // xslt: true, - // }, - // // Please change this to your repo. - // // Remove this to remove the "edit this page" links. - // editUrl: - // "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/", - // // Useful options to enforce blogging best practices - // onInlineTags: "warn", - // onInlineAuthors: "warn", - // onUntruncatedBlogPosts: "warn", - // }, theme: { - customCss: "./src/css/custom.css", + customCss: require.resolve('./src/css/custom.css'), }, - } satisfies Preset.Options, + } ], ], + plugins: [ + './src/plugins/tailwind-config.js', + ], + themeConfig: { - // Replace with your project's social card - image: "img/docusaurus-social-card.jpg", - tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 5 }, + respectPrefersColorScheme: true, + image: 'img/og-image.png', + + docs: { + sidebar: { + autoCollapseCategories: true, + }, + }, + navbar: { - title: "StakeWise Docs", + title: 'StakeWise Docs', logo: { - alt: "My Site Logo", - src: "img/logo.svg", + alt: 'StakeWise Logo', + src: 'img/logo512.png', + height: 32, + width: 32, + style: { + marginRight: '12px', + }, }, items: [ { + label: 'Docs', + to: 'docs/intro', type: "docSidebar", - sidebarId: "docsSidebar", - position: "left", - label: "Docs", + activeBaseRegex: `/docs/`, + sidebarId: 'docsSidebar', }, { - label: "SDK", - position: "left", - sidebarId: "sdkSidebar", + label: 'SDK', + to: '/sdk/intro', activeBaseRegex: `/sdk/`, - to: "/sdk/intro", + sidebarId: 'sdkSidebar', }, { - label: "Contracs", - position: "left", - sidebarId: "contractsSidebar", + label: 'Contracs', + to: '/contracts/intro', activeBaseRegex: `/contracts/`, - to: "/contracts/intro", + sidebarId: 'contractsSidebar', }, { - href: "https://github.com/stakewise/docs", - label: "GitHub", - position: "right", + label: 'X', + href: 'https://x.com/stakewise_io', + position: 'right', }, - ], - }, - footer: { - style: "dark", - links: [ { - title: "Docs", - items: [ - { - label: "Docs", - to: "/docs/intro", - }, - ], + label: 'Discord', + href: 'https://discord.com/invite/2BSdr2g', + position: 'right', }, { - title: "Community", - items: [ - { - label: "Stack Overflow", - href: "https://stackoverflow.com/questions/tagged/docusaurus", - }, - { - label: "Discord", - href: "https://discordapp.com/invite/docusaurus", - }, - { - label: "X", - href: "https://x.com/docusaurus", - }, - ], + label: 'Telegram', + href: 'https://t.me/stakewise_io', + position: 'right', }, { - title: "More", - items: [ - { - label: "GitHub", - href: "https://github.com/facebook/docusaurus", - }, - ], - }, + type: 'html', + position: 'right', + value: ` + + `, + } ], - copyright: `Copyright © ${new Date().getFullYear()} StakeWise`, }, + + tableOfContents: { + minHeadingLevel: 2, + maxHeadingLevel: 5, + }, + footer: { + copyright: `Copyright © ${new Date().getFullYear()} StakeWise Labs`, + }, + prism: { theme: prismThemes.github, + defaultLanguage: 'typescript', darkTheme: prismThemes.dracula, }, } satisfies Preset.ThemeConfig, diff --git a/package-lock.json b/package-lock.json index 931c49f..934e866 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,20 +10,25 @@ "dependencies": { "@docusaurus/core": "3.7.0", "@docusaurus/preset-classic": "3.7.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.3.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" + "@headlessui/react": "^2.2.2", + "@mdx-js/react": "3.0.0", + "classnames": "^2.5.1", + "clsx": "2.0.0", + "prism-react-renderer": "2.3.0", + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.7.0", "@docusaurus/tsconfig": "3.7.0", "@docusaurus/types": "3.7.0", - "typescript": "~5.6.2" + "@tailwindcss/postcss": "^4.1.4", + "postcss": "^8.5.3", + "tailwindcss": "^4.1.4", + "typescript": "5.6.2" }, "engines": { - "node": ">=18.0" + "node": ">=22.0" } }, "node_modules/@algolia/autocomplete-core": { @@ -257,6 +262,19 @@ "node": ">= 14.0.0" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -3795,6 +3813,59 @@ "node": ">=18.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -3810,6 +3881,26 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@headlessui/react": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.2.tgz", + "integrity": "sha512-zbniWOYBQ8GHSUIOPY7BbdIn6PzUOq0z41RFrF30HbjsxG6Rrfk+6QulR8Kgf2Vwj2a/rE6i62q5vo+2gI5dJA==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.17.1", + "@react-aria/interactions": "^3.21.3", + "@tanstack/react-virtual": "^3.13.6", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -3940,9 +4031,9 @@ } }, "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.0.tgz", + "integrity": "sha512-nDctevR9KyYFyV+m+/+S4cpzCWHqj+iHDHq3QrsWezcC+B17uZdIWgCguESUkwFhM3n/56KxWVE3V6EokrmONQ==", "license": "MIT", "dependencies": { "@types/mdx": "^2.0.0" @@ -4038,6 +4129,103 @@ "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", "license": "MIT" }, + "node_modules/@react-aria/focus": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.20.2.tgz", + "integrity": "sha512-Q3rouk/rzoF/3TuH6FzoAIKrl+kzZi9LHmr8S5EqLAOyP9TXIKG34x2j42dZsAhrw7TbF9gA8tBKwnCNH4ZV+Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.0", + "@react-aria/utils": "^3.28.2", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.0.tgz", + "integrity": "sha512-GgIsDLlO8rDU/nFn6DfsbP9rfnzhm8QFjZkB9K9+r+MTSCn7bMntiWQgMM+5O6BiA8d7C7x4zuN4bZtc0RBdXQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.8", + "@react-aria/utils": "^3.28.2", + "@react-stately/flags": "^3.1.1", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.8.tgz", + "integrity": "sha512-lQDE/c9uTfBSDOjaZUJS8xP2jCKVk4zjQeIlCH90xaLhHDgbpCdns3xvFpJJujfj3nI4Ll9K7A+ONUBDCASOuw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.28.2", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.28.2.tgz", + "integrity": "sha512-J8CcLbvnQgiBn54eeEvQQbIOfBF3A1QizxMw9P4cl9MkeR03ug7RnjTIdJY/n2p7t59kLeAB3tqiczhcj+Oi5w==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.8", + "@react-stately/flags": "^3.1.1", + "@react-stately/utils": "^3.10.6", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.1.tgz", + "integrity": "sha512-XPR5gi5LfrPdhxZzdIlJDz/B5cBf63l4q6/AzNqVWFKgd0QqY5LvWJftXkklaIUpKSJkIKQb8dphuZXDtkWNqg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.6.tgz", + "integrity": "sha512-O76ip4InfTTzAJrg8OaZxKU4vvjMDOpfA/PGNOytiXwBbkct2ZeZwaimJ8Bt9W1bj5VsZ81/o/tW4BacbdDOMA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.29.0.tgz", + "integrity": "sha512-IDQYu/AHgZimObzCFdNl1LpZvQW/xcfLt3v20sorl5qRucDVj4S9os98sVTZ4IRIBjmS+MkjqpR5E70xan7ooA==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -4345,6 +4533,15 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", @@ -4357,6 +4554,311 @@ "node": ">=14.16" } }, + "node_modules/@tailwindcss/node": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz", + "integrity": "sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.29.2", + "tailwindcss": "4.1.4" + } + }, + "node_modules/@tailwindcss/node/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.4.tgz", + "integrity": "sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.4", + "@tailwindcss/oxide-darwin-arm64": "4.1.4", + "@tailwindcss/oxide-darwin-x64": "4.1.4", + "@tailwindcss/oxide-freebsd-x64": "4.1.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.4", + "@tailwindcss/oxide-linux-x64-musl": "4.1.4", + "@tailwindcss/oxide-wasm32-wasi": "4.1.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.4" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz", + "integrity": "sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz", + "integrity": "sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz", + "integrity": "sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz", + "integrity": "sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz", + "integrity": "sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz", + "integrity": "sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz", + "integrity": "sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz", + "integrity": "sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz", + "integrity": "sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz", + "integrity": "sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.0", + "@emnapi/runtime": "^1.4.0", + "@emnapi/wasi-threads": "^1.0.1", + "@napi-rs/wasm-runtime": "^0.2.8", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz", + "integrity": "sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz", + "integrity": "sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.4.tgz", + "integrity": "sha512-bjV6sqycCEa+AQSt2Kr7wpGF1bOZJ5wsqnLEkqSbM/JEHxx/yhMH8wHmdkPyApF9xhHeMSwnnkDUUMMM/hYnXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.4", + "@tailwindcss/oxide": "4.1.4", + "postcss": "^8.4.41", + "tailwindcss": "4.1.4" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.6.tgz", + "integrity": "sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.6.tgz", + "integrity": "sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -5865,6 +6367,12 @@ "node": ">=8" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -5957,9 +6465,9 @@ } }, "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "license": "MIT", "engines": { "node": ">=6" @@ -6994,6 +7502,16 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -9831,6 +10349,245 @@ "node": ">=6" } }, + "node_modules/lightningcss": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -14560,9 +15317,9 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.0.tgz", + "integrity": "sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg==", "license": "MIT", "dependencies": { "@types/prismjs": "^1.26.0", @@ -16614,6 +17371,19 @@ "node": ">= 10" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz", + "integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==", + "dev": true, + "license": "MIT" + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -16846,9 +17616,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -17256,6 +18026,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 32ddd41..91b62f5 100644 --- a/package.json +++ b/package.json @@ -17,17 +17,22 @@ "dependencies": { "@docusaurus/core": "3.7.0", "@docusaurus/preset-classic": "3.7.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.3.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" + "@headlessui/react": "2.2.2", + "@mdx-js/react": "3.0.0", + "classnames": "2.5.1", + "clsx": "2.0.0", + "prism-react-renderer": "2.3.0", + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.7.0", "@docusaurus/tsconfig": "3.7.0", "@docusaurus/types": "3.7.0", - "typescript": "~5.6.2" + "@tailwindcss/postcss": "4.1.4", + "postcss": "8.5.3", + "tailwindcss": "4.1.4", + "typescript": "5.6.2" }, "browserslist": { "production": [ @@ -42,6 +47,6 @@ ] }, "engines": { - "node": ">=18.0" + "node": ">=22.0" } } diff --git a/sidebars.ts b/sidebars.ts index 7d8fb39..b3880a9 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -1,21 +1,26 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; +import type { SidebarsConfig } from '@docusaurus/plugin-content-docs' -// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ const sidebars: SidebarsConfig = { - docsSidebar: [{ type: "autogenerated", dirName: "docs" }], - sdkSidebar: [{ type: "autogenerated", dirName: "sdk" }], - contractsSidebar: [{ type: "autogenerated", dirName: "contracts" }], -}; + docsSidebar: [ + { + type: 'autogenerated', + dirName: 'docs' + }, + ], + sdkSidebar: [ + { + type: 'autogenerated', + dirName: 'sdk' + }, + ], + contractsSidebar: [ + { + type: 'autogenerated', + dirName: 'contracts' + }, + ], +} + export default sidebars; diff --git a/src/components/BrandAssets/BrandAssets.tsx b/src/components/BrandAssets/BrandAssets.tsx new file mode 100644 index 0000000..dd26e0a --- /dev/null +++ b/src/components/BrandAssets/BrandAssets.tsx @@ -0,0 +1,18 @@ +import React from 'react' + + +const BrandAssets: React.FC = () => ( +
+ +
+ Download StakeWise brand assets +
+
+
+) + + +export default React.memo(BrandAssets) diff --git a/src/components/DocsSections/Blocks/Block/Block.module.css b/src/components/DocsSections/Blocks/Block/Block.module.css new file mode 100644 index 0000000..8177ea3 --- /dev/null +++ b/src/components/DocsSections/Blocks/Block/Block.module.css @@ -0,0 +1,16 @@ +.container { + max-width: 300px; + transition: .2s; + cursor: pointer; +} + +.container:hover { + transform: scale(1.05); + text-decoration: none; + background-color: rgba(var(--moon-rgb), .1) !important; +} + +.icon { + width: 24px; + height: 24px; +} diff --git a/src/components/DocsSections/Blocks/Block/Block.tsx b/src/components/DocsSections/Blocks/Block/Block.tsx new file mode 100644 index 0000000..6af83a3 --- /dev/null +++ b/src/components/DocsSections/Blocks/Block/Block.tsx @@ -0,0 +1,40 @@ +import React from 'react' +import cx from 'classnames' +import Link from '@docusaurus/Link' + +import s from './Block.module.css' + + +export type BlockProps = { + title: string + text: string + href: string + Svg: React.ComponentType> +} + +const LinkIcon = require("@site/static/icon/link.svg").default + +const Block: React.FC = (props) => { + const { title, text, href, Svg } = props + + return ( + +
+ +
+ {title} +
+
+
+ {text} +
+ + + ) +} + + +export default React.memo(Block) diff --git a/src/components/DocsSections/Blocks/Blocks.tsx b/src/components/DocsSections/Blocks/Blocks.tsx new file mode 100644 index 0000000..d71a12f --- /dev/null +++ b/src/components/DocsSections/Blocks/Blocks.tsx @@ -0,0 +1,38 @@ +import React from 'react' + +import Block, { BlockProps } from './Block/Block' + + +const blocks: BlockProps[] = [ + { + title: 'Docs', + text: 'Everything you want to know about StakeWise at your fingertips', + Svg: require("@site/static/icon/file.svg").default, + href: '/docs/intro', + }, + { + title: 'SDK', + text: 'Our JS library for working with api and contracts', + Svg: require("@site/static/icon/code.svg").default, + href: '/sdk/intro', + }, + { + title: 'Contracts', + text: 'Details of all contracts that use the StakeWise protocol', + Svg: require("@site/static/icon/gears.svg").default, + href: '/contracts/intro', + } +] + +const Blocks: React.FC = () => ( +
+ { + blocks.map((item) => ( + + )) + } +
+) + + +export default React.memo(Blocks) diff --git a/src/components/DocsSections/DocsSections.tsx b/src/components/DocsSections/DocsSections.tsx new file mode 100644 index 0000000..313bf25 --- /dev/null +++ b/src/components/DocsSections/DocsSections.tsx @@ -0,0 +1,32 @@ +import React, { useEffect } from 'react' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' + +import Blocks from './Blocks/Blocks' + + +const DocsSections: React.FC = () => { + const { siteConfig } = useDocusaurusContext() + + useEffect(() => { + // Something prevents adding a class, apparently a little later + // calls for another modification of the element + setTimeout(() => { + document.body.classList.add('bg-gradient') + }) + + return () => { + document.body.classList.remove('bg-gradient') + } + }, []) + + return ( +
+

{siteConfig.title}

+

{siteConfig.tagline}

+ +
+ ) +} + + +export default React.memo(DocsSections) diff --git a/src/components/FAQ/FAQ.module.css b/src/components/FAQ/FAQ.module.css new file mode 100644 index 0000000..096e7d6 --- /dev/null +++ b/src/components/FAQ/FAQ.module.css @@ -0,0 +1,4 @@ +.container { + width: 100%; + max-width: 966px; +} diff --git a/src/components/FAQ/FAQ.tsx b/src/components/FAQ/FAQ.tsx new file mode 100644 index 0000000..ba42319 --- /dev/null +++ b/src/components/FAQ/FAQ.tsx @@ -0,0 +1,40 @@ +import React, { useState } from 'react' +import cx from 'classnames' + +import data from './questions' +import Question from './Question/Question' + +import s from './FAQ.module.css' + + +type FAQProps = { + className?: string +} + +const FAQ: React.FC = (props) => { + const { className } = props + + const [ openIndex, setOpenIndex ] = useState(null) + + return ( +
+

FAQ

+
+ { + data.map((question, index) => ( + setOpenIndex(openIndex === index ? null : index)} + /> + )) + } +
+
+ ) +} + + +export default React.memo(FAQ) diff --git a/src/components/FAQ/Question/Question.tsx b/src/components/FAQ/Question/Question.tsx new file mode 100644 index 0000000..3763296 --- /dev/null +++ b/src/components/FAQ/Question/Question.tsx @@ -0,0 +1,80 @@ +import React, { + useRef, + useState, + useEffect, + useCallback, +} from 'react' +import { + Disclosure, + DisclosurePanel, + DisclosureButton, +} from '@headlessui/react' + + +type QuestionProps = { + text: string + title: string + isOpen: boolean + onToggle: () => void +} + +const Question: React.FC = (props) => { + const { title, text, isOpen, onToggle } = props + + const panelRef = useRef(null) + + const [ height, setHeight ] = useState(0) + + const updateHeight = useCallback(() => { + if (panelRef.current) { + setHeight(panelRef.current.scrollHeight + 16) + } + }, []) + + useEffect(() => { + updateHeight() + }, [ updateHeight, text, isOpen ]) + + useEffect(() => { + window.addEventListener('resize', updateHeight) + + return () => { + window.removeEventListener('resize', updateHeight) + } + }, [ updateHeight ]) + + return ( + + +
+ {title} +
+
+
+ +
+ {text} +
+
+
+
+ ) +} + + +export default React.memo(Question) diff --git a/src/components/FAQ/questions.ts b/src/components/FAQ/questions.ts new file mode 100644 index 0000000..8d64284 --- /dev/null +++ b/src/components/FAQ/questions.ts @@ -0,0 +1,30 @@ +export default [ + { + question: 'How to stake with StakeWise?', + answer: `Simply head to the Stake page in the StakeWise dApp, enter the amount of ETH or GNO you want to stake, and press the Stake button. You will receive osETH or osGNO tokens in return to keep your stake liquid.`, + }, + { + question: 'What are the advantages of staking on StakeWise?', + answer: `StakeWise makes it very easy to earn rewards on your ETH or GNO and keep your assets safe. We serve a diverse group of customers, from ordinary stakers to whales, DAOs, solo stakers, wallets, professional node operators, and institutions. StakeWise has been offering its services from 2021, and has invested ~$1M into security since inception.`, + }, + { + question: 'What is StakeWise, and what does it offer to users?', + answer: `StakeWise is a liquid staking network that enables users to easily stake any amount of ETH or GNO. Users receive osTokens to represent their stake, which they can use to access liquidity or increase their yield. `, + }, + { + question: 'How does StakeWise Boost work?', + answer: `StakeWise Boost uses osETH (on Ethereum) or osGNO (on Gnosis Chain) tokens to borrow more ETH or GNO on Aave, stake it, mint osETH or osGNO, and repeat the process enough times to maximize your yield. The extra yield comes from the difference between the cost to borrow extra ETH or GNO, and the staking rewards earned from staking the borrowed amount. `, + }, + { + question: 'Is StakeWise Boost safe to use?', + answer: `StakeWise Boost is safe to use, and has been designed with safety in mind. The collateral supplied by Boost on Aave is near perfectly correlated with assets borrowed, allowing to maintain a stable Loan to Value in all circumstances. Boosted positions are not affected by osETH (on Ethereum) or osGNO (on Gnosis Chain) depegs, allowing to use leverage safely. Boost uses a sufficiently large buffer to the Liquidation Threshold to allow the strategy to remain deeply unprofitable (-10% to -25%) for over 1 year without triggering a liquidation. However, StakeWise doesn’t recommend using Boost when its APY is consistently negative, and will trigger forced exits for deeply unprofitable positions before they are liquidated.`, + }, + { + question: 'How does the redemption mechanism for osETH work?', + answer: `osETH can be redeemed for ETH at its fair exchange rate. If there is enough unbonded ETH in the protocol, redemption is instant; otherwise, validators will be exited to provide the ETH required for full redemption.`, + }, + { + question: 'What is the purpose of osTokens in the StakeWise ecosystem?', + answer: ` osTokens are liquid representations of assets staked in StakeWise - osETH on Ethereum, and osGNO on Gnosis Chain. osTokens allow users to keep their stake liquid and accrue staking rewards. osTokens can be converted back to ETH or GNO to access your initial deposit and the accumulated rewards.`, + }, +] as const diff --git a/src/components/GitHub/GitHub.tsx b/src/components/GitHub/GitHub.tsx new file mode 100644 index 0000000..f1847c8 --- /dev/null +++ b/src/components/GitHub/GitHub.tsx @@ -0,0 +1,43 @@ +import React from 'react' + +import Item from './Item/Item' + + +const items = [ + { + title: 'Vault interface', + href: 'https://github.com/stakewise/vault-interface', + }, + { + title: 'Subgraph', + href: 'https://github.com/stakewise/v3-subgraph', + }, + { + title: 'Operator', + href: 'https://github.com/stakewise/v3-operator', + }, + { + title: 'Core', + href: 'https://github.com/stakewise/v3-core', + }, + { + title: 'SDK', + href: 'https://github.com/stakewise/v3-sdk', + }, +] as const + +const GitHub: React.FC = () => ( +
+
Developer Links
+
+ { + items.map((item) => ( + + )) + } +
+
+) + + +export default React.memo(GitHub) diff --git a/src/components/GitHub/Item/Item.module.css b/src/components/GitHub/Item/Item.module.css new file mode 100644 index 0000000..66a8b36 --- /dev/null +++ b/src/components/GitHub/Item/Item.module.css @@ -0,0 +1,11 @@ +.container { + flex: 1 1 auto; + transition: .2s; + cursor: pointer; +} + +.container:hover { + transform: scale(1.05); + text-decoration: none; + background-color: rgba(var(--moon-rgb), .1) !important; +} diff --git a/src/components/GitHub/Item/Item.tsx b/src/components/GitHub/Item/Item.tsx new file mode 100644 index 0000000..784de2f --- /dev/null +++ b/src/components/GitHub/Item/Item.tsx @@ -0,0 +1,32 @@ +import React from 'react' +import cx from 'classnames' + +import s from './Item.module.css' + + +type ItemProps = { + title: string + href: string +} + +const LinkIcon = require("@site/static/icon/link.svg").default + +const Item: React.FC = (props) => { + const { title, href } = props + + return ( + +
+ {title} +
+ +
+ ) +} + + +export default React.memo(Item) diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx deleted file mode 100644 index 442a9d4..0000000 --- a/src/components/HomepageFeatures/index.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import type { ReactNode } from "react"; -import clsx from "clsx"; -import Heading from "@theme/Heading"; -import styles from "./styles.module.css"; - -type FeatureItem = { - title: string; - Svg: React.ComponentType>; - description: ReactNode; -}; - -const FeatureList: FeatureItem[] = [ - { - title: "Easy to Use", - Svg: require("@site/static/img/undraw_docusaurus_mountain.svg").default, - description: ( - <> - Docusaurus was designed from the ground up to be easily installed and - used to get your website up and running quickly. - - ), - }, - { - title: "Focus on What Matters", - Svg: require("@site/static/img/undraw_docusaurus_tree.svg").default, - description: ( - <> - Docusaurus lets you focus on your docs, and we'll do the chores. Go - ahead and move your docs into the docs directory. - - ), - }, - { - title: "Powered by React", - Svg: require("@site/static/img/undraw_docusaurus_react.svg").default, - description: ( - <> - Extend or customize your website layout by reusing React. Docusaurus can - be extended while reusing the same header and footer. - - ), - }, -]; - -function Feature({ title, Svg, description }: FeatureItem) { - return ( -
-
- -
-
- {title} -

{description}

-
-
- ); -} - -export default function HomepageFeatures(): ReactNode { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css deleted file mode 100644 index b248eb2..0000000 --- a/src/components/HomepageFeatures/styles.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/src/components/Links/Block/Block.module.css b/src/components/Links/Block/Block.module.css new file mode 100644 index 0000000..77b6546 --- /dev/null +++ b/src/components/Links/Block/Block.module.css @@ -0,0 +1,17 @@ +.container { + min-width: 167px; + transition: .2s; + cursor: pointer; +} + +.container:hover { + transform: scale(1.05); + text-decoration: none; + background-color: rgba(var(--moon-rgb), .1) !important; +} + +.icon { + width: 24px; + height: 24px; + color: var(--moon); +} diff --git a/src/components/Links/Block/Block.tsx b/src/components/Links/Block/Block.tsx new file mode 100644 index 0000000..93d313b --- /dev/null +++ b/src/components/Links/Block/Block.tsx @@ -0,0 +1,36 @@ +import React from 'react' +import cx from 'classnames' + +import s from './Block.module.css' + + +export type BlockProps = { + title: string + href: string + Svg: React.ComponentType> +} + +const LinkIcon = require("@site/static/icon/link.svg").default + +const Block: React.FC = (props) => { + const { title, href, Svg } = props + + return ( + +
+ +
+ {title} +
+
+ +
+ ) +} + + +export default React.memo(Block) diff --git a/src/components/Links/Links.tsx b/src/components/Links/Links.tsx new file mode 100644 index 0000000..55254f7 --- /dev/null +++ b/src/components/Links/Links.tsx @@ -0,0 +1,45 @@ +import React from 'react' + +import Block, { BlockProps } from './Block/Block' + + +const links: BlockProps[] = [ + { + title: 'Discord', + Svg: require("@site/static/icon/discord.svg").default, + href: 'https://discord.com/invite/2BSdr2g', + }, + { + title: 'Telegram', + Svg: require("@site/static/icon/telegram.svg").default, + href: 'https://t.me/stakewise_io', + }, + { + title: 'Twitter', + Svg: require("@site/static/icon/twitter.svg").default, + href: 'https://x.com/stakewise_io', + }, + { + title: 'Forum', + Svg: require("@site/static/icon/forum.svg").default, + href: 'https://forum.stakewise.io/', + }, + { + title: 'Vote', + Svg: require("@site/static/icon/vote.svg").default, + href: 'https://vote.stakewise.io/', + } +] + +const Links: React.FC = () => ( +
+ { + links.map((item) => ( + + )) + } +
+) + + +export default React.memo(Links) diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..4a5c55e --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,5 @@ +export { default as DocsSections } from './DocsSections/DocsSections' +export { default as BrandAssets } from './BrandAssets/BrandAssets' +export { default as GitHub } from './GitHub/GitHub' +export { default as Links } from './Links/Links' +export { default as FAQ } from './FAQ/FAQ' diff --git a/src/css/custom.css b/src/css/custom.css index ca86776..deb5303 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,36 +1,164 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - - -/* You can override the default Infima variables here. */ -:root { - --ifm-color-primary: #4d2b70; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600,700&display=swap'); + +.bg-gradient { + background-image: radial-gradient(50% 50% at 50% 40%, rgb(139 0 255 / 13%) 0%, rgb(255 255 255 / 0%) 100%); +} + +.footer__link-item svg, +.navbar__link svg { + display: none; +} + +::-moz-selection { + color: #47347e; + background: #c8bfe3; +} + +::selection { + color: #47347e; + background: #c8bfe3; +} + +html { + scroll-behavior: smooth; + font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, + BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol'; + font-size: 16px; + font-variant: none; + font-weight: 400; +} + +html[data-theme='dark'] { + --ifm-toc-border-color: #ffffff0d; + --ifm-footer-background-color: #ffffff0d; + --ifm-navbar-background-color: #ffffff0d; + --ifm-global-shadow-md: 0 5px 4px rgba(255, 255, 255, 0.448); + + background-color: #181618; +} + +html[data-theme='dark'] .alert--success { + --ifm-tabs-color-active-border: #7fbc7f; + --ifm-alert-background-color: #65cd6533; +} + +html[data-theme='dark'] .alert--danger { + --ifm-alert-background-color: #94595b6b; +} + +html[data-theme='dark'] .alert--warning { + --ifm-alert-background-color: #9490596b; +} + +html[data-theme='light'] { + --ifm-toc-border-color: #00060f0d; + --ifm-footer-background-color: #00060f0d; + --ifm-navbar-background-color: #00060f0d; + + background-color: #f1f2fd; +} + +.markdown a { + color: #3578e5; +} + +p { + line-height: 1.5rem; + font-weight: 400; +} + +hr { + border-bottom-width: 0px; + border-top-width: 1px; + border-color: var(--ifm-color-emphasis-200); +} + +h1, +h2, +h3, +h4, +h5 { font-weight: 500; - font-size: 1em; - font-feature-settings: 'liga' 1, 'calt' 1; - -webkit-font-smoothing: antialiased !important; -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #787887; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); +} + +h1 { + font-size: 40px !important; +} + +h2 { + font-size: 32px !important; +} + +h3 { + font-size: 24px !important; +} + +a { + color: var(--moon); +} + +a:hover { + color: var(--moon); +} + +.breadcrumbs, +.breadcrumbs__item { + display: flex; + align-items: center; + justify-content: start; +} + +.width-container { + width: 100%; + margin-right: auto; + margin-left: auto; +} + +@media (max-width: 960px) { + .navbar__toggle { + margin-left: 16px; + } + + .navbar__brand { + margin-left: 16px; + } + + html[data-theme='light'] .navbar-sidebar{ + background-color: #f1f2fd; + } + + html[data-theme='dark'] .navbar-sidebar { + background-color: #00060f; + } + + .navbar-sidebar__items ul.menu__list { + padding-left: 24px; + } + + .navbar-sidebar { + box-shadow: none; + overflow: hidden; + max-height: 100vh; + } + + .width-container { + padding-right: 12px; + padding-bottom: 24px; + padding-left: 12px; + } +} + +@media (min-width: 961px) { + .navbar { + padding: 0 24px; + backdrop-filter: blur(6px); + } + + .width-container { + max-width: 1320px; + padding-right: 60px; + padding-bottom: 40px; + padding-left: 60px; + } } diff --git a/src/css/tailwind/config.css b/src/css/tailwind/config.css new file mode 100644 index 0000000..2688567 --- /dev/null +++ b/src/css/tailwind/config.css @@ -0,0 +1,6 @@ +@import 'tailwindcss'; + +@import './theme.css'; +@import './layers/base.css'; +@import './layers/utilities.css'; +@import './layers/components.css'; diff --git a/src/css/tailwind/layers/base.css b/src/css/tailwind/layers/base.css new file mode 100644 index 0000000..521cc34 --- /dev/null +++ b/src/css/tailwind/layers/base.css @@ -0,0 +1,153 @@ +@layer base { + + /* Reset base styles */ + @import './destyle.css'; + + /* Theme colors */ + :root { + color-scheme: light dark; + } + + :root[data-theme='light'] { + --moon: #00060f; + --moon-rgb: 0, 6, 15; + --lilac: #846ab2; + --lilac-rgb: 132, 106, 178; + } + + :root[data-theme='dark'] { + --moon: #ffffff; + --moon-rgb: 255, 255, 255; + --lilac: #b68dff; + --lilac-rgb: 182, 141, 255; + } + + ::-moz-selection { + color: #47347e; + background: #c8bfe3; + } + + ::selection { + color: #47347e; + background: #c8bfe3; + } + + /* Tags */ + html, + body { + width: 100%; + min-height: 100vh; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + } + + body { + position: relative; + background-color: var(--mirror); + -webkit-overflow-scrolling: touch; + } + + .body-light-theme input::placeholder, + .body-light-theme textarea::placeholder { + color: #9ca3af; + } + + .body-dark-theme input::placeholder, + .body-dark-theme textarea::placeholder { + color: #4b4f57; + } + + *:focus { + outline: none; + } + + input, + textarea, + button, + select { + background: none; + border: none; + border-radius: 0; + } + + legend, + fieldset { + display: block; + margin: 0; + padding: 0; + border: 0; + } + + button, + input[type='button'] { + text-align: center; + user-select: none; + } + + textarea { + resize: none; + } + + input::-webkit-contacts-auto-fill-button, + select::-webkit-contacts-auto-fill-button, + textarea::-webkit-contacts-auto-fill-button { + visibility: hidden; + } + + input:-webkit-autofill, + select:-webkit-autofill, + textarea:-webkit-autofill, + input:-webkit-autofill:focus, + select:-webkit-autofill:focus, + textarea:-webkit-autofill:focus { + background-color: #fff; + -webkit-box-shadow: inset 0 0 0 100rem #fff; + } + + select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #000; + -webkit-appearance: none; + -moz-appearance: radio-container; + appearance: normal; + } + + select::-ms-expand { + display: none; + } + + hr { + height: 1px; + border: none; + } + + b, + strong { + font-weight: 600; + } + + svg:not([fill]) { + fill: currentColor; + } + + svg:not(:root) { + overflow: hidden; + } + + :where([aria-busy='true' i]) { + cursor: progress; + } + + :where([aria-disabled='true' i], [disabled]) { + cursor: not-allowed; + } + + :where([aria-hidden='false' i][hidden]) { + display: initial; + } + + :where([aria-hidden='false' i][hidden]:not(:focus)) { + position: absolute; + clip: rect(0, 0, 0, 0); + } +} diff --git a/src/css/tailwind/layers/components.css b/src/css/tailwind/layers/components.css new file mode 100644 index 0000000..3262e70 --- /dev/null +++ b/src/css/tailwind/layers/components.css @@ -0,0 +1,129 @@ +@layer components { + + /* Typography */ + .text-h100 { + font-weight: 700; + font-size: 100px; + line-height: 110px; + } + + .text-h90 { + font-weight: 700; + font-size: 90px; + line-height: 100px; + } + + .text-h60 { + font-weight: 700; + font-size: 60px; + line-height: 72px; + } + + .text-h48 { + font-weight: 700; + font-size: 48px; + line-height: 56px; + } + + .text-h40 { + font-weight: 700; + font-size: 40px; + line-height: 48px; + } + + .text-h32 { + font-weight: 700; + font-size: 32px; + line-height: 44px; + } + + .text-h24 { + font-weight: 700; + font-size: 24px; + line-height: 32px; + } + + .text-h22 { + font-weight: 700; + font-size: 22px; + line-height: 26px; + } + + .text-h20 { + font-weight: 700; + font-size: 20px; + line-height: 24px; + } + + .text-t40m { + font-weight: 500; + font-size: 40px; + line-height: 48px; + } + + .text-t20b { + font-weight: 700; + font-size: 20px; + line-height: 32px; + } + + .text-t18m { + font-weight: 500; + font-size: 18px; + line-height: 24px; + } + + .text-t18b { + font-weight: 700; + font-size: 18px; + line-height: 24px; + } + + .text-t16m { + font-weight: 500; + font-size: 16px; + line-height: 22px; + } + + .text-t16b { + font-weight: 700; + font-size: 16px; + line-height: 22px; + } + + .text-t14m { + font-weight: 500; + font-size: 14px; + line-height: 20px; + } + + .text-t14b { + font-weight: 700; + font-size: 14px; + line-height: 20px; + } + + .text-t14 { + font-weight: 400; + font-size: 14px; + line-height: 20px; + } + + .text-t12m { + font-weight: 500; + font-size: 12px; + line-height: 18px; + } + + .text-t12b { + font-weight: 700; + font-size: 12px; + line-height: 18px; + } + + .text-t12 { + font-weight: 400; + font-size: 12px; + line-height: 18px; + } +} diff --git a/src/css/tailwind/layers/destyle.css b/src/css/tailwind/layers/destyle.css new file mode 100644 index 0000000..3712dec --- /dev/null +++ b/src/css/tailwind/layers/destyle.css @@ -0,0 +1,415 @@ +/*! destyle.css v4.0.1 | MIT License | https://github.com/nicolas-cusan/destyle.css */ + +/* Reset box-model and set borders */ +/* ============================================ */ + +*, +::before, +::after { + box-sizing: border-box; + border-style: solid; + border-width: 0; + min-width: 0; +} + +/* Document */ +/* ============================================ */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + * 3. Remove gray overlay on links for iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -webkit-tap-highlight-color: transparent; /* 3*/ +} + +/* Sections */ +/* ============================================ */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/* Vertical rhythm */ +/* ============================================ */ + +p, +table, +blockquote, +address, +pre, +iframe, +form, +figure, +dl { + margin: 0; +} + +/* Headings */ +/* ============================================ */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; + margin: 0; +} + +/* Lists (enumeration) */ +/* ============================================ */ + +ul, +ol { + margin: 0; + padding: 0; + list-style: none; +} + +/* Lists (definition) */ +/* ============================================ */ + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +/* Grouping content */ +/* ============================================ */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ + border-top-width: 1px; + margin: 0; + clear: both; + color: inherit; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: inherit; /* 2 */ +} + +address { + font-style: inherit; +} + +/* Text-level semantics */ +/* ============================================ */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; + text-decoration: none; + color: inherit; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: inherit; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Replaced content */ +/* ============================================ */ + +/** + * Prevent vertical alignment issues. + */ + +svg, +img, +embed, +object, +iframe { + vertical-align: bottom; +} + +/* Forms */ +/* ============================================ */ + +/** + * Reset form fields to make them styleable. + * 1. Make form elements stylable across systems iOS especially. + * 2. Inherit text-transform from parent. + */ + +button, +input, +optgroup, +select, +textarea { + margin: 0; + padding: 0; + color: inherit; + font: inherit; + text-align: inherit; + vertical-align: middle; + background: transparent; + -webkit-appearance: none; /* 1 */ + appearance: none; + text-transform: inherit; /* 2 */ + border-radius: 0; +} + +/** + * Correct cursors for clickable elements. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + cursor: pointer; +} + +button:disabled, +[type="button"]:disabled, +[type="reset"]:disabled, +[type="submit"]:disabled { + cursor: default; +} + +/** + * Improve outlines for Firefox and unify style with input elements & buttons. + */ + +:-moz-focusring { + outline: auto; +} + +select:disabled { + opacity: inherit; +} + +/** + * Remove padding + */ + +option { + padding: 0; +} + +/** + * Reset to invisible + */ + +fieldset { + margin: 0; + padding: 0; + min-width: 0; +} + +legend { + padding: 0; +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * Correct the outline style in Safari. + */ + +[type="search"] { + outline-offset: -2px; /* 1 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Fix font inheritance. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/** + * Fix appearance for Firefox + */ +[type="number"] { + -moz-appearance: textfield; +} + +/** + * Clickable labels + */ + +label[for] { + cursor: pointer; +} + +/* Interactive */ +/* ============================================ */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* + * Remove outline for editable content. + */ + +[contenteditable]:focus { + outline: auto; +} + +/* Tables */ +/* ============================================ */ + +/** +1. Correct table border color inheritance in all Chrome and Safari. +*/ + +table { + border-color: inherit; /* 1 */ + border-collapse: collapse; +} + +caption { + text-align: left; +} + +td, +th { + vertical-align: top; + padding: 0; +} + +th { + text-align: left; + font-weight: bold; +} diff --git a/src/css/tailwind/layers/utilities.css b/src/css/tailwind/layers/utilities.css new file mode 100644 index 0000000..d4ff973 --- /dev/null +++ b/src/css/tailwind/layers/utilities.css @@ -0,0 +1,49 @@ +@layer utilities { + + /* Borders */ + .border { + border-style: solid; + border-width: 1px; + } + + .border-top { + border-top-width: 1px; + border-top-style: solid; + } + + .border-bottom { + border-bottom-width: 1px; + border-bottom-style: solid; + } + + .border-left { + border-left-width: 1px; + border-left-style: solid; + } + + .border-right { + border-right-width: 1px; + border-right-style: solid; + } + + /* Radius */ + .rounded-full { + border-radius: 100%; + } + + .rounded-4 { + border-radius: var(--radius-4); + } + + .rounded-6 { + border-radius: var(--radius-6); + } + + .rounded-8 { + border-radius: var(--radius-8); + } + + .rounded-12 { + border-radius: var(--radius-12); + } +} diff --git a/src/css/tailwind/theme.css b/src/css/tailwind/theme.css new file mode 100644 index 0000000..03cfb38 --- /dev/null +++ b/src/css/tailwind/theme.css @@ -0,0 +1,29 @@ +@theme inline { + --*: initial; + + /* Colors */ + /* --color-sun: var(--sun); + --color-coal: var(--coal); + --color-snow: var(--snow); */ + --color-moon: var(--moon); + --color-lilac: var(--lilac); + /* --color-stone: var(--stone); + --color-smoke: var(--smoke); + --color-ocean: var(--ocean); + --color-autumn: var(--autumn); + --color-forest: var(--forest); + --color-jungle: var(--jungle); + --color-sunset: var(--sunset); + --color-mirror: var(--mirror); + --color-volcano: var(--volcano); + --color-titanium: var(--titanium); */ + + /* Border radius */ + --radius-4: 4px; + --radius-6: 6px; + --radius-8: 8px; + --radius-12: 12px; + + /* Other */ + --spacing: 1px; +} diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 9f71a5d..0000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,23 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 1b3061d..d80e021 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,46 +1,27 @@ -import type { ReactNode } from "react"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import Layout from "@theme/Layout"; -import HomepageFeatures from "@site/src/components/HomepageFeatures"; -import Heading from "@theme/Heading"; +import React from 'react' +import Layout from '@theme/Layout' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' -import styles from "./index.module.css"; +import { DocsSections, FAQ, GitHub, Links, BrandAssets } from '@site/src/components' + +import '@site/src/css/tailwind/config.css' -function HomepageHeader() { - const { siteConfig } = useDocusaurusContext(); - return ( -
-
- - {siteConfig.title} - -

{siteConfig.tagline}

-
- - Docusaurus Tutorial - 5min ⏱️ - -
-
-
- ); -} -export default function Home(): ReactNode { - const { siteConfig } = useDocusaurusContext(); +const Home: React.FC = () => { + const { siteConfig } = useDocusaurusContext() + return ( - - -
- -
+ +
+ + + + + +
- ); + ) } + + +export default Home diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md deleted file mode 100644 index 9756c5b..0000000 --- a/src/pages/markdown-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -You don't need React to write simple standalone pages. diff --git a/src/plugins/tailwind-config.js b/src/plugins/tailwind-config.js new file mode 100644 index 0000000..8da6d7f --- /dev/null +++ b/src/plugins/tailwind-config.js @@ -0,0 +1,10 @@ +module.exports = function tailwindPlugin() { + return { + name: 'tailwind-plugin', + configurePostCss(postcssOptions) { + postcssOptions.plugins = [require('@tailwindcss/postcss')] + + return postcssOptions; + }, + }; +}; diff --git a/static/icon/code.svg b/static/icon/code.svg new file mode 100644 index 0000000..7c4b685 --- /dev/null +++ b/static/icon/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/discord.svg b/static/icon/discord.svg new file mode 100644 index 0000000..12ed677 --- /dev/null +++ b/static/icon/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/file.svg b/static/icon/file.svg new file mode 100644 index 0000000..5893bc4 --- /dev/null +++ b/static/icon/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/forum.svg b/static/icon/forum.svg new file mode 100644 index 0000000..711d8cf --- /dev/null +++ b/static/icon/forum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/gears.svg b/static/icon/gears.svg new file mode 100644 index 0000000..fd5c548 --- /dev/null +++ b/static/icon/gears.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/link.svg b/static/icon/link.svg new file mode 100644 index 0000000..5f144c9 --- /dev/null +++ b/static/icon/link.svg @@ -0,0 +1 @@ + diff --git a/static/icon/telegram.svg b/static/icon/telegram.svg new file mode 100644 index 0000000..c2f0b0b --- /dev/null +++ b/static/icon/telegram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/twitter.svg b/static/icon/twitter.svg new file mode 100644 index 0000000..7c049bb --- /dev/null +++ b/static/icon/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/vote.svg b/static/icon/vote.svg new file mode 100644 index 0000000..1782ecd --- /dev/null +++ b/static/icon/vote.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docusaurus-social-card.jpg b/static/img/docusaurus-social-card.jpg deleted file mode 100644 index ffcb448..0000000 Binary files a/static/img/docusaurus-social-card.jpg and /dev/null differ diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png deleted file mode 100644 index f458149..0000000 Binary files a/static/img/docusaurus.png and /dev/null differ diff --git a/static/img/favicon.ico b/static/img/favicon.ico index c01d54b..6e3075d 100644 Binary files a/static/img/favicon.ico and b/static/img/favicon.ico differ diff --git a/static/img/logo.svg b/static/img/logo.svg index 9db6d0d..4801512 100644 --- a/static/img/logo.svg +++ b/static/img/logo.svg @@ -1 +1,172 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logo180.png b/static/img/logo180.png new file mode 100644 index 0000000..2427412 Binary files /dev/null and b/static/img/logo180.png differ diff --git a/static/img/logo192.png b/static/img/logo192.png new file mode 100644 index 0000000..c76e77b Binary files /dev/null and b/static/img/logo192.png differ diff --git a/static/img/logo512.png b/static/img/logo512.png new file mode 100644 index 0000000..896e2af Binary files /dev/null and b/static/img/logo512.png differ diff --git a/static/img/og-image.png b/static/img/og-image.png new file mode 100644 index 0000000..2077968 Binary files /dev/null and b/static/img/og-image.png differ diff --git a/static/img/undraw_docusaurus_mountain.svg b/static/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index af961c4..0000000 --- a/static/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,171 +0,0 @@ - - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index 94b5cf0..0000000 --- a/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,170 +0,0 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index d9161d3..0000000 --- a/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1,40 +0,0 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/stakewise-brand-assets.zip b/static/stakewise-brand-assets.zip new file mode 100644 index 0000000..31271dc Binary files /dev/null and b/static/stakewise-brand-assets.zip differ