diff --git a/.prettierrc b/.prettierrc
index 7fa75213..d552174c 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,10 +1,10 @@
{
- "printWidth": 80,
- "tabWidth": 2,
- "useTabs": true,
- "semi": true,
- "singleQuote": true,
- "trailingComma": "all",
- "arrowParens": "avoid",
- "endOfLine": "lf"
+ "printWidth": 80,
+ "tabWidth": 2,
+ "useTabs": true,
+ "semi": true,
+ "singleQuote": true,
+ "trailingComma": "all",
+ "arrowParens": "avoid",
+ "endOfLine": "lf"
}
diff --git a/pages/governance.tsx b/pages/governance.tsx
index 716fb5f5..71d9b0f4 100644
--- a/pages/governance.tsx
+++ b/pages/governance.tsx
@@ -1,9 +1,10 @@
import Head from 'next/head';
import { PageLayout } from 'src/components';
-import FurtherLinking from 'src/sections/governance/furtherLinking';
-import GovernanceMain from 'src/sections/governance/main';
-import Table from 'src/sections/governance/table';
-import { Line } from 'src/styles/common';
+import GovernanceAction from 'src/sections/governance/action';
+import GovernanceCallout from 'src/sections/governance/callout';
+import GovernanceEcosystem from 'src/sections/governance/ecosystem';
+import GovernanceFeatures from 'src/sections/governance/features';
+import GovernanceHeader from 'src/sections/governance/header';
export default function Governance() {
return (
@@ -12,10 +13,11 @@ export default function Governance() {
Synthetix - Governance
-
-
-
-
+
+
+
+
+
>
);
diff --git a/pages/index.tsx b/pages/index.tsx
index 8f177906..67e87716 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -60,7 +60,7 @@ const Home = ({
Synthetix
-
+
{totalStakedValue && tradingVolume && swapsVolumeTotal && (
Synthetix - Decentralized Perps
-
+
diff --git a/public/spartan-governance.svg b/public/spartan-governance.svg
new file mode 100644
index 00000000..d6debd4d
--- /dev/null
+++ b/public/spartan-governance.svg
@@ -0,0 +1,1067 @@
+
\ No newline at end of file
diff --git a/src/components/Accordion/Accordion.tsx b/src/components/Accordion/Accordion.tsx
index ba8abb25..9cf93f4e 100644
--- a/src/components/Accordion/Accordion.tsx
+++ b/src/components/Accordion/Accordion.tsx
@@ -2,7 +2,10 @@ import { FlexDivCol } from '../../styles/common';
import styled from 'styled-components';
import AccordionItem, { AccordionItemProps } from './AccordionItem';
-export type AccordionItemsType = Omit;
+export type AccordionItemsType = Omit<
+ AccordionItemProps,
+ 'onHeaderClick' | 'open' | 'isLast'
+>;
export interface AccordionProps {
items: AccordionItemsType[];
@@ -10,7 +13,11 @@ export interface AccordionProps {
activeIndex: number;
}
-export default function Accordion({ items, onAccordionItemChange, activeIndex }: AccordionProps) {
+export default function Accordion({
+ items,
+ onAccordionItemChange,
+ activeIndex,
+}: AccordionProps) {
return (
{items.map((item, index) => {
diff --git a/src/components/Accordion/AccordionItem.tsx b/src/components/Accordion/AccordionItem.tsx
index 8fbe3544..d7b1bc4a 100644
--- a/src/components/Accordion/AccordionItem.tsx
+++ b/src/components/Accordion/AccordionItem.tsx
@@ -30,7 +30,9 @@ export default function AccordionItem({
{open && (
- {descriptions}
+
+ {descriptions}
+
{buttons}
)}
@@ -79,7 +81,8 @@ const Circle = styled.span`
left: -4px;
width: 10px;
height: 10px;
- border: 2px solid ${({ active, theme }) => (active ? theme.colors.cyan : theme.colors.gray50)};
+ border: 2px solid
+ ${({ active, theme }) => (active ? theme.colors.cyan : theme.colors.gray50)};
border-radius: 50%;
`;
@@ -91,7 +94,8 @@ const LastCircle = styled(Circle)`
const AccordionItemHeadline = styled.h3`
${({ theme }) => theme.fonts.smallHeadline};
- color: ${({ active, theme }) => (active ? theme.colors.cyan : theme.colors.gray50)};
+ color: ${({ active, theme }) =>
+ active ? theme.colors.cyan : theme.colors.gray50};
margin-left: 24px;
line-height: 19px;
text-align: start;
diff --git a/src/components/Accordion/__test__/index.spec.tsx b/src/components/Accordion/__test__/index.spec.tsx
index 74d15dc6..25e16b80 100644
--- a/src/components/Accordion/__test__/index.spec.tsx
+++ b/src/components/Accordion/__test__/index.spec.tsx
@@ -17,11 +17,17 @@ const queryTextsDictionary = {
const items: AccordionItemsType[] = [
{
- descriptions: [{queryTextsDictionary.descriptions.notVisible}],
+ descriptions: [
+
+ {queryTextsDictionary.descriptions.notVisible}
+ ,
+ ],
title: queryTextsDictionary.titles.first,
},
{
- descriptions: [{queryTextsDictionary.descriptions.visible}],
+ descriptions: [
+ {queryTextsDictionary.descriptions.visible},
+ ],
title: queryTextsDictionary.titles.second,
},
];
@@ -43,10 +49,12 @@ describe('Accordion', () => {
onAccordionItemChange={onAccordionItemChange}
items={items}
/>
-
+ ,
);
- expect(screen.queryByText(queryTextsDictionary.descriptions.notVisible)).toBeNull();
+ expect(
+ screen.queryByText(queryTextsDictionary.descriptions.notVisible),
+ ).toBeNull();
});
test('should render the accordion item description if it have the active index', () => {
@@ -58,10 +66,12 @@ describe('Accordion', () => {
onAccordionItemChange={onAccordionItemChange}
items={items}
/>
-
+ ,
);
- expect(screen.queryByText(queryTextsDictionary.descriptions.notVisible)).toBeInTheDocument();
+ expect(
+ screen.queryByText(queryTextsDictionary.descriptions.notVisible),
+ ).toBeInTheDocument();
});
test('should render the all the existing titles', () => {
@@ -72,11 +82,11 @@ describe('Accordion', () => {
onAccordionItemChange={onAccordionItemChange}
items={items}
/>
-
+ ,
);
- const allTitles = items.map((item) => screen.queryByText(item.title));
+ const allTitles = items.map(item => screen.queryByText(item.title));
expect(allTitles.length).toBe(2);
- allTitles.forEach((title) => expect(title).toBeInTheDocument());
+ allTitles.forEach(title => expect(title).toBeInTheDocument());
});
test('should call the onAccordionItemChange when the title of the accordion item is clicked', async () => {
@@ -88,7 +98,7 @@ describe('Accordion', () => {
onAccordionItemChange={mockHandleClick}
items={items}
/>
-
+ ,
);
userEvent.click(screen.queryByText(queryTextsDictionary.titles.first)!);
@@ -104,10 +114,10 @@ describe('Accordion', () => {
onAccordionItemChange={onAccordionItemChange}
items={items}
/>
-
+ ,
);
expect(
- screen.queryByText(queryTextsDictionary.descriptions.notVisible)
+ screen.queryByText(queryTextsDictionary.descriptions.notVisible),
).not.toBeInTheDocument();
userEvent.click(screen.queryByText(queryTextsDictionary.titles.first)!);
@@ -118,10 +128,12 @@ describe('Accordion', () => {
onAccordionItemChange={onAccordionItemChange}
items={items}
/>
-
+ ,
);
- expect(screen.queryByText(queryTextsDictionary.descriptions.notVisible)).toBeInTheDocument();
+ expect(
+ screen.queryByText(queryTextsDictionary.descriptions.notVisible),
+ ).toBeInTheDocument();
});
test('should not render any other description when the already active title is clicked', async () => {
@@ -132,9 +144,11 @@ describe('Accordion', () => {
onAccordionItemChange={onAccordionItemChange}
items={items}
/>
-
+ ,
);
- expect(screen.queryByText(queryTextsDictionary.descriptions.visible)).toBeInTheDocument();
+ expect(
+ screen.queryByText(queryTextsDictionary.descriptions.visible),
+ ).toBeInTheDocument();
userEvent.click(screen.queryByText(queryTextsDictionary.titles.second)!);
rerender(
@@ -144,12 +158,14 @@ describe('Accordion', () => {
onAccordionItemChange={onAccordionItemChange}
items={items}
/>
-
+ ,
);
expect(
- screen.queryByText(queryTextsDictionary.descriptions.notVisible)
+ screen.queryByText(queryTextsDictionary.descriptions.notVisible),
).not.toBeInTheDocument();
- expect(screen.queryByText(queryTextsDictionary.descriptions.visible)).toBeInTheDocument();
+ expect(
+ screen.queryByText(queryTextsDictionary.descriptions.visible),
+ ).toBeInTheDocument();
});
});
diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx
index e7ee7eed..ffaf98ba 100644
--- a/src/components/Footer/Footer.tsx
+++ b/src/components/Footer/Footer.tsx
@@ -1,6 +1,6 @@
import { Fragment } from 'react';
import { Logo, Socials } from '../';
-import { Box, Divider, Flex, Link, Show, Text } from '@chakra-ui/react';
+import { Box, Divider, Flex, Hide, Link, Show, Text } from '@chakra-ui/react';
import {
Accordion,
AccordionItem,
@@ -129,7 +129,7 @@ export function Footer() {
-
+
-
+
>
);
}
diff --git a/src/components/Menu/Menu.tsx b/src/components/Menu/Menu.tsx
index f173b59d..30c6ddec 100644
--- a/src/components/Menu/Menu.tsx
+++ b/src/components/Menu/Menu.tsx
@@ -19,7 +19,7 @@ const data: {
label: 'Governance',
},
{
- link: 'https://docs.synthetix.io/',
+ externalLink: 'https://docs.synthetix.io/',
label: 'Docs',
},
{
@@ -96,6 +96,7 @@ export const Menu = ({ isOpen, ...rest }: MenuProps) => {
color="#828295"
_hover={{ color: 'cyan.500' }}
key={item.link}
+ target="_blank"
>
-
-
- {children}
-
-
-
-
- );
- }
+interface PageLayoutProps extends PropsWithChildren, FlexProps {}
+export function PageLayout({ children, ...props }: PageLayoutProps) {
return (
-
-
- {children}
-
+
+
+
+ {children}
+
+
+
);
}
diff --git a/src/sections/governance/action.tsx b/src/sections/governance/action.tsx
new file mode 100644
index 00000000..557ec4dc
--- /dev/null
+++ b/src/sections/governance/action.tsx
@@ -0,0 +1,97 @@
+import { Button, Flex, Heading, Show, Text } from '@chakra-ui/react';
+import Link from 'next/link';
+import Shield from 'src/svg/Shield';
+
+export default function GovernanceAction() {
+ return (
+
+
+ SYNTHETIX GOVERNANCE
+
+
+ Participate in Governance
+
+
+ Play a pivotal role in Synthetix Governance. As a staker, your votes in
+ council elections and contributions to proposals are essential, steering
+ the protocol's direction and evolution.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Want to hear all about Governance updates?
+
+
+ Learn more about governance by reading the documentation on each
+ council and how they interact with each other
+
+
+
+
+
+
+ );
+}
diff --git a/src/sections/governance/callout.tsx b/src/sections/governance/callout.tsx
new file mode 100644
index 00000000..b75fc31f
--- /dev/null
+++ b/src/sections/governance/callout.tsx
@@ -0,0 +1,27 @@
+import { Flex, Heading, Text } from '@chakra-ui/react';
+import { GradientText } from 'src/components';
+
+export default function GovernanceCallout() {
+ return (
+
+
+ SYNTHETIX GOVERNANCE
+
+
+ The Synthetix protocol is governed by a{' '}
+ decentralized set of{' '}
+ representative councils that are{' '}
+ voted on by stakers.
+
+
+ );
+}
diff --git a/src/sections/governance/ecosystem.tsx b/src/sections/governance/ecosystem.tsx
new file mode 100644
index 00000000..3185434a
--- /dev/null
+++ b/src/sections/governance/ecosystem.tsx
@@ -0,0 +1,347 @@
+import { Box, Button, Flex, Heading, Text } from '@chakra-ui/react';
+import Link from 'next/link';
+import { InterestedLooper } from 'src/svg/InterestedLooper';
+
+const COUNCILS = [
+ {
+ title: 'Spartan Council',
+ icon: (
+
+ ),
+ description: [
+ 'The Spartan Council (SC), established via ',
+ { link: 'https://sips.synthetix.io/sips/sip-93/', text: 'SIP-93' },
+ ', is the central governing body of the Synthetix protocol. The SC votes on Synthetix Improvement Proposals (SIPs) and Synthetix Configuration Change Proposal (SCCPs). The SC is responsible for conducting SIP/SCCP interviews, debating the implications of proposed changes, coordinating protocol changes with core contributors, and hosting periodic community governance meetings.',
+ ],
+ link: 'https://governance.synthetix.io/#/councils/spartan',
+ },
+ {
+ title: 'Grants Council',
+ icon: (
+
+ ),
+ description: [
+ 'The Grants Council, established via ',
+ { link: 'https://sips.synthetix.io/sips/sip-39/', text: 'SIP-39' },
+ ', is responsible for public goods funding through grants, initiative bounties, or competition prizes. It is a value-based entity, whose ultimate goal in funding projects is to produce publicly accessible, beneficial, high-quality work where profit margins are not the priority. Projects are chosen not based on the value they can extract but instead on the value they can add to the community.',
+ ],
+ link: 'https://governance.synthetix.io/#/councils/grants',
+ },
+ {
+ title: 'Treasury Council',
+ icon: (
+
+ ),
+ description: [
+ 'The Treasury Council, established via ',
+ { link: 'https://sips.synthetix.io/sips/sip-155/', text: 'SIP-155' },
+ ", provides resources for the protocol's growth and expansion. This includes managing the treasury in a way that allows continuity of funding for protocol costs (on-chain/off-chain), council and Core Contributor Stipends, ecosystem incentives, including Grants Council funding, and other discretionary incentives. The members of the council manage the treasury through a gnosis-safe multi-sig.",
+ ],
+ link: 'https://governance.synthetix.io/#/councils/treasury',
+ },
+ {
+ title: 'Ambassador Council',
+ icon: (
+
+ ),
+ description: [
+ 'The Ambassador Council, established via ',
+ { link: 'https://sips.synthetix.io/sips/sip-157/', text: 'SIP-157' },
+ " is responsible for promoting Synthetix's interest in the DeFi ecosystem. This advocation comes through two primary means: governance and partnerships. Governance includes seeking governance power in protocols that may be beneficial for Synthetix, and voting for proposals in the interest of the community. Partnerships include working with Synthetix integrators to help them integrate within the Synthetix Ecosystem.",
+ ],
+ link: 'https://governance.synthetix.io/#/councils/ambassador',
+ },
+];
+
+export default function GovernanceEcosystem() {
+ return (
+
+
+
+ SYNTHETIX ECOSYSTEM
+
+
+ Governing Councils
+
+
+ The Synthetix Protocol is governed by four councils, each responsible
+ for a core aspect of a DAO.
+
+
+ {COUNCILS.map(council => {
+ return (
+
+ {council.icon}
+ {council.title}
+
+ {council.description.map(description => {
+ if (typeof description === 'object')
+ return (
+
+
+ {description.text}
+
+
+ );
+ return (
+
+ {description}
+
+ );
+ })}
+
+
+
+
+
+ );
+ })}
+
+
+
+
+
+ Learn more about Synthetix Governance
+
+
+
+ Explore Synthetix's governance system. Learn how decisions are
+ made through our community-elected councils and proposals (SIPs and
+ SCCPs) by visiting our documentation and joining the conversation on
+ Discord.
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/sections/governance/features.tsx b/src/sections/governance/features.tsx
new file mode 100644
index 00000000..97272044
--- /dev/null
+++ b/src/sections/governance/features.tsx
@@ -0,0 +1,137 @@
+import { Box, Flex, Heading, Text } from '@chakra-ui/react';
+
+const FEATURES = [
+ {
+ title: 'Voting Power',
+ description:
+ "By staking SNX tokens, users gain the authority to vote within the Synthetix protocol, directly influencing its future direction. This voting power is crucial in electing representative councils that align with their vision for Synthetix's evolution.",
+ },
+ {
+ title: 'Nomination Process',
+ description: [
+ 'The nomination is open to all; anyone interested can self-nominate for a position on one of the four councils. Candidates must use the',
+ ' governance app ',
+ 'during the specified election period, providing details about their qualifications and experience.',
+ ],
+ },
+ {
+ title: 'Election Cycle',
+ description:
+ 'Elections occur every epoch, a period spanning four months. During this phase, SNX stakers cast their votes, selecting the individuals they believe are best suited to guide each council.',
+ },
+ {
+ title: 'Decision-Making on Proposals',
+ description: [
+ 'Once elected, Spartan Councillors have the responsibility to deliberate on',
+ ' Synthetix Improvement Proposals ',
+ '(SIPs) and',
+ ' Synthetix Configuration Change Proposals ',
+ '(SCCPs). These decisions are made after considering presentations and feedback from the community, gathered through the',
+ ' Synthetix Discord',
+ '.',
+ ],
+ },
+ {
+ title: 'Initiatives by Non-Governing Bodies ',
+ description:
+ "Apart from the governing councils, non-governing DAOs like the Treasury Council, Ambassadors, and Grants Committee undertake various initiatives within each epoch. These initiatives include allocating new grants, fostering partnerships, and managing the treasury's assets.",
+ },
+ {
+ title: 'Ongoing Cycle',
+ description:
+ 'The Synthetix governance cycle is continuous, with each epoch marking the beginning of a new phase. This cycle includes the nomination of candidates, the electoral process, and the ongoing execution of roles, ensuring the constant evolution and management of the Synthetix Protocol.',
+ },
+];
+
+export default function GovernanceFeatures() {
+ return (
+
+
+
+ How does Governance work?
+
+
+
+ {FEATURES.map(feature => {
+ return (
+
+
+ {feature.title}
+
+ {Array.isArray(feature.description) ? (
+ feature.description.map((d, index) => {
+ if (index % 2 === 1)
+ return (
+
+ {d}
+
+ );
+ return (
+
+ {d}
+
+ );
+ })
+ ) : (
+
+ {feature.description}
+
+ )}
+
+ );
+ })}
+
+
+ );
+}
diff --git a/src/sections/governance/furtherLinking.tsx b/src/sections/governance/furtherLinking.tsx
deleted file mode 100644
index a03b0a7d..00000000
--- a/src/sections/governance/furtherLinking.tsx
+++ /dev/null
@@ -1,110 +0,0 @@
-import { ExternalLink, Section } from 'src/styles/common';
-import SvgArrow from 'src/svg/Arrow';
-import PoweredByGrid from 'src/svg/PoweredByGrid';
-import styled from 'styled-components';
-
-export default function FurtherLinking() {
- return (
-
-
-
-
-
- GO TO
- Staking
-
-
-
-
-
- GO TO
- Governance
-
-
-
-
-
- );
-}
-
-const StyledFurtherLinkingWrapper = styled(Section)`
- position: relative;
- width: 100%;
- height: 300px;
- background-color: ${({ theme }) => theme.colors.bgBlackHighlighted};
-`;
-
-const StyledGrid = styled(PoweredByGrid)`
- width: 100%;
- position: absolute;
- bottom: 0px;
- height: auto;
- z-index: -1;
-`;
-
-const StyledButtonWrapper = styled.div`
- display: flex;
- justify-content: center;
- width: 100%;
-`;
-
-export const StyledButtonWrapperLinearGradient = styled.div<{
- last?: boolean;
- height?: string;
- margin?: string;
- width?: string;
-}>`
- height: ${({ height }) => (height ? height : '84px')};
- width: ${({ width }) => (width ? width : '404px')};
- border-radius: 5px;
- background: linear-gradient(90deg, #ea20ff 0%, #00d1ff 100%);
- box-shadow: 0px 0px 5px ${({ theme }) => theme.colors.cyan};
- ${({ last }) => (last ? 'margin-left: 32px' : '')};
- display: flex;
- justify-content: center;
- align-items: center;
- ${({ margin }) => margin && `margin: ${margin}`}
-`;
-
-const StyledLinkButtons = styled(ExternalLink)<{ last?: boolean }>`
- position: relative;
- padding: 0px 40px;
- cursor: pointer;
- display: flex;
- flex-direction: column;
- ${({ last }) => (last ? 'align-items: flex-start' : 'align-items: flex-end')};
- justify-content: center;
- max-width: 400px;
- width: 100%;
- background-color: #0b0b22;
- height: 80px;
- border-radius: 5px;
-`;
-
-const StyledSmallButtonLabel = styled.span`
- display: block;
- color: white;
- font-family: Inter;
- font-size: 12px;
-`;
-
-const StyledLargeButtonLabel = styled.span`
- display: block;
- color: ${({ theme }) => theme.colors.cyan};
- font-family: Inter;
- font-size: 18px;
- font-weight: bold;
-`;
-
-const StyledLeftArrow = styled(SvgArrow)`
- position: absolute;
- left: 40px;
- transform: rotate(180deg);
- bottom: 34%;
-`;
-
-const StyledRightArrow = styled(SvgArrow)`
- position: absolute;
- right: 40px;
- top: 36%;
-`;
diff --git a/src/sections/governance/header.tsx b/src/sections/governance/header.tsx
new file mode 100644
index 00000000..851abcb2
--- /dev/null
+++ b/src/sections/governance/header.tsx
@@ -0,0 +1,55 @@
+import { Box, Button, Flex, Heading, Text } from '@chakra-ui/react';
+import Image from 'next/image';
+import Link from 'next/link';
+
+export default function GovernanceHeader() {
+ return (
+
+
+
+
+
+ A Decentralized Governance
+
+
+ Synthetix is a decentralized protocol run by governance, with
+ representative councils elected by the community, ensuring every
+ decision reflects the collective voice of its users.
+
+
+
+
+
+ );
+}
diff --git a/src/sections/governance/main.tsx b/src/sections/governance/main.tsx
deleted file mode 100644
index 0b2bd172..00000000
--- a/src/sections/governance/main.tsx
+++ /dev/null
@@ -1,1531 +0,0 @@
-import { useEffect, useState } from 'react';
-import {
- ExternalLink,
- FlexDiv,
- FlexDivCentered,
- FlexDivCol,
- PageTitle,
- Section,
- SectionTitle,
- Subline,
-} from 'src/styles/common';
-import Ellipse from 'src/svg/Ellipse';
-import LinkOffIcon from 'src/svg/LinkOffIcon';
-import SvgPlus from 'src/svg/Plus';
-import { CyanSpotlight, PinkSpotLight } from 'src/svg/Spotlights';
-import styled from 'styled-components';
-import { StyledButtonWrapperLinearGradient } from './furtherLinking';
-import { ArrowPath, ArrowWrapper } from 'src/components';
-
-export default function GovernanceMain() {
- const [activeArrowIds, setActiveArrowIds] = useState(['']);
-
- const setActiveArrows = (ids: string[]) => {
- setActiveArrowIds(['']);
- // trigger animation from the beginning
- setTimeout(() => {
- setActiveArrowIds(ids);
- }, 1);
- };
-
- useEffect(() => {
- if (window?.innerWidth < 940 && !!document) {
- if (document.getElementsByTagName('meta').item(0)?.content)
- document.getElementsByTagName('meta').item(0)!.content = 'width=940px';
- }
- }, []);
-
- return (
-
-
-
-
-
- Governance
-
- Synthetix protocol is governed, maintained and built by a combination
- of community members, core contributors, and several elected
- committees and councils that are voted on by SNX stakers. Learn more
- about how these governing bodies interact, what they're
- responsible for, and how they influence protocol improvements via
- SIPs, SCCPs and other work.
-
-
-
-
- COUNCIL MEMBERS
-
- View the history of past council elections
and vote in
- any currently open elections.
-
-
-
-
-
-
- SYNTHETIX SCCP/SIP
-
- View the current status of all SCCPs
- and SIPs.
-
-
-
-
-
-
-
-
- SYNTHETIX FORUM
-
- Join the community governance discussion
in realtime.
-
-
-
-
-
-
- SCCP / SIP VOTING RECORDS
-
- View the voting history of all
governance proposals.
-
-
-
-
-
-
- Governance Structure
-
- The Synthetix governance structure is composed of Councils, Committees,
- Core Contributors and a DAO. Each governance component is assigned a
- specific aspect of protocol governance. Councils are directly elected by
- SNX stakers, while other governance bodies are appointed according to
- the existing governance procedures. All of the components work together
- to ensure that the protocol is governed in a fair, transparent and
- legitimate way in accordance with the direction provided by token
- holders.
-
-
- {/* FIRST ROW */}
-
-
-
-
-
- setActiveArrows([
- 'sips-author',
- 'feasibility-risk',
- 'snx-community',
- 'spartan-council-plus-sign',
- ])
- }
- >
- Author SIPs / SCCPs
-
- Stake SNX
-
- setActiveArrows([
- 'propose-grants',
- 'review-grant-submissions',
- 'snx-community',
- 'grants-dao',
- ])
- }
- >
- Propose Grants
-
-
-
-
-
- {
- setActiveArrows([
- 'implement-sips',
- 'core-contributors',
- 'feasibility-risk',
- 'vouch-for-cc',
- 'execute-sccps',
- 'execute-sips',
- 'vote-sips',
- 'hire-cc',
- 'core-contributor-committee',
- 'protocol-dao',
- 'spartan-council-plus-sign',
- 'pay-cc',
- 'elect-committee',
- ]);
- }}
- >
-
-
-
- CORE
- Contributors
-
- setActiveArrows([
- 'implement-sips',
- 'core-contributors',
- 'feasibility-risk',
- 'vouch-for-cc',
- 'execute-sccps',
- 'execute-sips',
- 'vote-sips',
- 'hire-cc',
- 'core-contributor-committee',
- 'protocol-dao',
- 'spartan-council-plus-sign',
- 'pay-cc',
- 'elect-committee',
- ])
- }
- >
- Elect Committee
-
-
-
- Signal Priorities
-
- setActiveArrows([
- 'implement-sips',
- 'vote-sips',
- 'execute-sips',
- 'execute-sccps',
- 'core-contributors',
- 'spartan-council-plus-sign',
- ])
- }
- >
- Implements SIPs / SCCPs
-
- Protocol Work
-
- setActiveArrows([
- 'vouch-for-cc',
- 'hire-cc',
- 'core-contributors',
- 'core-contributor-committee',
- ])
- }
- >
- Vouch for Potential CC
-
-
-
-
-
- {/* SECOND ROW */}
-
-
-
-
-
- setActiveArrows([
- 'spartan-council-plus-sign',
- 'vote-sips',
- 'implement-sips',
- 'core-contributors',
- ])
- }
- >
- Vote on SIPs / SCCPs
-
-
- setActiveArrows([
- 'core-contributors',
- 'feasibility-risk',
- 'sips-author',
- 'snx-community',
- 'spartan-council-plus-sign',
- 'reviewing-sips',
- 'risk-committee-plus-sign',
- ])
- }
- >
- Feasibility & Risk Assessment
on SIPs / SCCPs
-
-
-
- setActiveArrows([
- 'spartan-council-plus-sign',
- 'snx-community',
- 'treasury-council-plus-sign',
- 'vote-sips',
- 'implement-sips',
- 'feasibility-risk',
- 'core-contributors',
- 'sips-author',
- 'reviewing-sips',
- 'risk-committee-plus-sign',
- 'budget-funding',
- 'snx-community-spartan-council-plus-sign-main-arrow',
- 'treasury-council-plus-sign-spartan-council-plus-sign-main-arrow',
- 'spartan-council-arrow-label',
- 'protocol-dao',
- ])
- }
- >
-
-
-
- Spartan
-
- COUNCIL
-
- {
- e.stopPropagation();
- setActiveArrows([
- 'spartan-council-plus-sign',
- 'snx-community',
- 'treasury-council-plus-sign',
- 'vote-sips',
- 'implement-sips',
- 'feasibility-risk',
- 'core-contributors',
- 'sips-author',
- 'reviewing-sips',
- 'risk-committee-plus-sign',
- 'budget-funding',
- 'snx-community-spartan-council-plus-sign-main-arrow',
- 'treasury-council-plus-sign-spartan-council-plus-sign-main-arrow',
- 'spartan-council-arrow-label',
- 'protocol-dao',
- ]);
- }}
- >
- Induct Members
-
-
-
-
-
- setActiveArrows([
- 'core-contributor-committee',
- 'core-contributors',
- 'pay-cc',
- 'hire-cc',
- 'vouch-for-cc',
- 'treasury-council-plus-sign',
- 'budget-funding',
- 'treasury-council-plus-sign-core-contributor-committee-plus-sign-main-arrow',
- 'elect-committee',
- ])
- }
- >
- {
- setActiveArrows([
- 'core-contributor-committee-plus-sign',
- 'core-contributors',
- 'pay-cc',
- 'elect-committee',
- ]);
- }}
- >
- Pay Contributors
-
-
-
-
-
- CORE
-
- Contributor
- Committee
-
-
- Manage CC Pay Packages
- Manage CC Roadmap & Vision
- Negotiate Partnerships
-
- setActiveArrows([
- 'hire-cc',
- 'vouch-for-cc',
- 'core-contributor-committee',
- ])
- }
- >
- Hire Core Contributors
-
-
-
-
-
- {/* THIRD ROW */}
-
-
-
-
- Manage Ecosystem Governance
-
- Ecosystem Governance Participation
-
- Advocate Ecosystem Partnership
-
-
- setActiveArrows([
- 'ambassadors-council-plus-sign',
- 'snx-community',
- 'treasury-council-plus-sign',
- 'budget-funding',
- 'snx-community-ambassadors-council-plus-sign-main-arrow',
- 'treasury-council-plus-sign-ambassadors-council-plus-sign-main-arrow',
- ])
- }
- >
-
-
-
- Ambassadors
-
- COUNCIL
-
-
-
-
-
- setActiveArrows([
- 'protocol-dao',
- 'execute-sips',
- 'execute-sccps',
- 'implement-sips',
- 'treasury-council-plus-sign',
- 'budget-funding',
- 'treasury-council-plus-sign-protocol-dao-plus-sign-main-arrow',
- 'spartan-council-arrow-label',
- 'spartan-council-plus-sign',
- ])
- }
- >
-
-
-
- protocol
-
- DAO
-
-
-
-
- setActiveArrows([
- 'execute-sips',
- 'protocol-dao',
- 'implement-sips',
- ])
- }
- >
- Execute SIPs
-
-
- setActiveArrows([
- 'execute-sccps',
- 'protocol-dao',
- 'implement-sips',
- ])
- }
- >
- Execute SCCPs
-
-
-
-
-
- {/* FOURTH ROW */}
-
-
-
-
- Sponsor Ecosystem Events
- Create Initiatives
-
- setActiveArrows([
- 'review-grant-submissions',
- 'work-on-grants',
- 'community-propose-grants',
- 'propose-grants',
- 'grants-dao',
- 'community-contributors',
- 'pay-contributors',
- ])
- }
- >
- Review Grant Submissions
-
-
-
- setActiveArrows([
- 'grants-dao',
- 'community-contributors',
- 'pay-contributors',
- 'review-grant-submissions',
- 'propose-grants',
- 'work-on-grants',
- 'community-propose-grants',
- 'snx-community',
- 'treasury-council-plus-sign',
- 'pay-contributors',
- 'budget-funding',
- 'snx-community-grants-dao-main-arrow',
- 'treasury-council-plus-sign-grants-dao-main-arrow',
- ])
- }
- >
-
-
-
- grants
-
- COUNCIL
-
- {
- e.stopPropagation();
- setActiveArrows([
- 'grants-dao',
- 'community-contributors',
- 'pay-contributors',
- 'review-grant-submissions',
- 'propose-grants',
- 'work-on-grants',
- 'community-propose-grants',
- 'snx-community',
- 'treasury-council-plus-sign',
- 'pay-contributors',
- 'budget-funding',
- 'snx-community-grants-dao-main-arrow',
- 'treasury-council-plus-sign-grants-dao-main-arrow',
- ]);
- }}
- >
- Pay Contributors
-
-
-
-
-
- setActiveArrows([
- 'risk-committee-plus-sign',
- 'reviewing-sips',
- 'feasibility-risk',
- 'treasury-council-plus-sign',
- 'budget-funding',
- 'treasury-council-plus-sign-risk-committee-plus-sign-main-arrow',
- ])
- }
- >
-
-
-
- Risk
-
- COMMITTEE
-
-
-
- Execute SIPs
-
- setActiveArrows([
- 'feasibility-risk',
- 'reviewing-sips',
- 'risk-committee-plus-sign',
- ])
- }
- >
- Reviewing SIPs Risk
-
-
-
-
-
- {/* FIFTH ROW */}
-
-
-
-
-
- setActiveArrows([
- 'work-on-grants',
- 'community-contributors',
- 'review-grant-submissions',
- ])
- }
- >
- Work on Grants
-
-
- Work on Initiatives
-
-
-
-
-
- setActiveArrows([
- 'budget-funding',
- 'spartan-council-plus-sign',
- 'core-contributor-committee',
- 'ambassadors-council-plus-sign',
- 'protocol-dao',
- 'grants-dao',
- 'risk-committee-plus-sign',
- 'treasury-council-plus-sign',
- 'snx-community-treasury-council-plus-sign-main-arrow',
- 'snx-community',
- 'treasury-council-plus-sign-grants-dao-main-arrow',
- 'treasury-council-plus-sign-ambassadors-council-plus-sign-main-arrow',
- 'treasury-council-plus-sign-spartan-council-plus-sign-main-arrow',
- 'treasury-council-plus-sign-risk-committee-plus-sign-main-arrow',
- 'treasury-council-plus-sign-protocol-dao-plus-sign-main-arrow',
- 'treasury-council-plus-sign-core-contributor-committee-plus-sign-main-arrow',
- ])
- }
- >
-
-
-
- Treasury
-
- COUNCIL
-
-
- setActiveArrows([
- 'budget-funding',
- 'spartan-council-plus-sign',
- 'core-contributor-committee',
- 'ambassadors-council-plus-sign',
- 'protocol-dao',
- 'grants-dao',
- 'risk-committee-plus-sign',
- 'treasury-council-plus-sign',
- 'snx-community-treasury-council-plus-sign-main-arrow',
- 'snx-community',
- 'treasury-council-plus-sign-grants-dao-main-arrow',
- 'treasury-council-plus-sign-ambassadors-council-plus-sign-main-arrow',
- 'treasury-council-plus-sign-spartan-council-plus-sign-main-arrow',
- 'treasury-council-plus-sign-risk-committee-plus-sign-main-arrow',
- 'treasury-council-plus-sign-protocol-dao-plus-sign-main-arrow',
- 'treasury-council-plus-sign-core-contributor-committee-plus-sign-main-arrow',
- ])
- }
- >
- Provides Budget & Funding
-
-
-
- Manage Treasury
- Fund Incentives
- Strategy & Deal Making
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Main Arrows */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-const GovernanceSection = styled(Section)`
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding-top: 24px;
- background-color: ${({ theme }) => theme.colors.bgBlackHighlighted};
-`;
-
-const GovernancePageTitle = styled(PageTitle)`
- text-align: center;
- width: 100%;
-`;
-
-const BackgroundImageWrapper = styled.div`
- position: relative;
- padding-top: 116px;
- width: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
-`;
-
-const StyledEllipse = styled(Ellipse)`
- position: absolute;
- top: -50px;
- z-index: -1;
-`;
-
-const StyledPinkSpotLight = styled(PinkSpotLight)`
- position: absolute;
- top: -50px;
- left: 0;
-`;
-
-const StyledCyanSpotlight = styled(CyanSpotlight)`
- position: absolute;
- top: -50px;
- right: 0;
-`;
-
-const StyledGovernanceSubline = styled(Subline)`
- text-align: center;
- max-width: 900px;
-`;
-
-const StyledLinkOffIcon = styled(LinkOffIcon)`
- position: absolute;
- top: 20px;
- right: 20px;
-`;
-
-const StyledLinkButtons = styled(ExternalLink)<{ last?: boolean }>`
- position: relative;
- padding: 24px;
- cursor: pointer;
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- justify-content: center;
- max-width: 400px;
- width: 100%;
- background-color: #0b0b22;
- height: 120px;
- border-radius: 5px;
-`;
-
-const StyledButtonLabel = styled.h4`
- font-family: GT America;
- font-style: normal;
- font-stretch: expanded;
- font-weight: bold;
- font-size: 14px;
- color: white;
-`;
-
-const StyledButtonText = styled.p`
- font-family: Inter;
- font-style: normal;
- font-weight: normal;
- font-size: 14px;
- line-height: 150%;
-`;
-
-const GraphContentWrapper = styled.div`
- width: 900px;
- position: relative;
- padding: 32px 24px;
-`;
-
-const Row = styled(FlexDiv)<{ rowNumber: number }>`
- margin-bottom: 24px;
- ${({ rowNumber }) => {
- switch (rowNumber) {
- case 1:
- return 'justify-content: flex-end;';
- case 2:
- case 3:
- case 4:
- return 'width: 100%;';
- case 5:
- return 'justify-content: start; width: 100%; margin-top: 50px;';
- default:
- return 'justify-content: start; width: 100%';
- }
- }}
-`;
-
-const DAOCircle = styled.div<{ focus?: boolean }>`
- position: relative;
- border: 5px solid ${({ theme }) => theme.colors.pink};
- width: 110px;
- height: 110px;
- border-radius: 50%;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- padding-top: 8px;
- background-color: #1d1d3d;
- cursor: pointer;
- transition: all 200ms linear;
- ${({ theme, focus }) =>
- focus ? `box-shadow: 0px 0px 30px ${theme.colors.pink}` : ''};
-`;
-
-const CommitteeCircle = styled.div<{
- edge: 'left' | 'right' | 'topLeft';
- first?: boolean;
- focus?: boolean;
-}>`
- position: relative;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- position: relative;
- background-color: #1d1d3d;
- min-width: 110px;
- min-height: 110px;
- border: 3px solid ${({ theme }) => theme.colors.cyan};
- cursor: pointer;
- transition: all 200ms linear;
- ${({ theme, focus }) =>
- focus ? `box-shadow: 0px 0px 30px ${theme.colors.cyan}` : ''};
- ${({ first }) => (first ? 'margin-right: auto;' : '')}
- ${({ edge }) => {
- if (edge === 'right') {
- return 'border-radius: 50% 50% 0;';
- } else if (edge === 'left') {
- return 'border-radius: 50% 50% 50% 0;';
- } else {
- return 'border-radius: 0 50% 50% 50%;';
- }
- }}
-`;
-
-const DAOActionCircle = styled.div<{ focus?: boolean }>`
- height: 20px;
- width: fit-content;
- border-radius: 10px;
- padding: 0px 8px;
- white-space: nowrap;
- font-size: 12px;
- text-align: center;
- cursor: pointer;
- border: 1px solid ${({ theme }) => theme.colors.green};
- background-color: ${({ theme }) => theme.colors.bgBlack};
- transition: all 200ms linear;
- ${({ theme, focus }) =>
- focus ? `box-shadow: 0px 0px 20px ${theme.colors.green}` : ''};
-`;
-
-const DAOPlusSignWrapper = styled.div<{
- position?: 'top' | 'bottomRight' | 'bottomLeft' | 'topLeft';
-}>`
- display: flex;
- justify-content: center;
- align-items: center;
- position: absolute;
- border-radius: 50%;
- z-index: 10;
- background-color: ${({ theme }) => theme.colors.cyan};
- ${({ position }) => {
- if (position === 'top') {
- return `
- top: -12px;
- right: 36px;
- width: 24px;
- height: 24px;
- `;
- } else if (position === 'bottomRight') {
- return `
- bottom: -11px;
- right: -13px;
- width: 24px;
- height: 24px;
- `;
- } else if (position === 'topLeft') {
- return `
- top: -12px;
- left: -14px;
- width: 24px;
- height: 24px;
- `;
- } else {
- return `
- bottom: -11px;
- left: -13px;
- width: 24px;
- height: 24px;
- `;
- }
- }}
-`;
-
-const DAODutiesCircle = styled.div<{
- addMarginBottom?: boolean;
- addMarginTop?: boolean;
- focus?: boolean;
-}>`
- border: 1px solid ${({ theme }) => theme.colors.lightViolet};
- width: fit-content;
- color: ${({ theme }) => theme.colors.lightViolet};
- border-radius: 10px;
- padding: 2px 8px;
- font-size: 11px;
- margin-bottom: ${({ addMarginBottom }) => (addMarginBottom ? '8px' : '0px')};
- margin-top: ${({ addMarginTop }) => (addMarginTop ? '8px' : '0px')};
- cursor: pointer;
- transition: all 200ms linear;
- ${({ theme, focus }) =>
- focus ? `box-shadow: 0px 0px 20px ${theme.colors.cyan}` : ''};
-`;
-
-const DAODescription = styled(FlexDivCol)<{ alignItems?: 'end' | 'start' }>`
- align-items: ${({ alignItems }) =>
- alignItems === 'end' ? 'flex-end' : 'flex-start'};
- min-width: 190px;
- font-size: 11px;
-`;
-
-const StyledText = styled.span<{ bold?: boolean; color?: 'pink' | 'white' }>`
- color: ${({ theme, color }) =>
- color === 'white' ? 'white' : theme.colors.pink};
- font-weight: ${({ bold }) => (bold ? 900 : 0)};
-`;
-
-const DAOWrapper = styled(FlexDiv)<{ first?: boolean; lastRow?: boolean }>`
- align-items: center;
- height: 110px;
- margin-bottom: 20px;
- border-radius: 5px;
- transition: all 300ms ease-in-out;
- width: auto;
- ${({ first }) => (first ? 'margin-right: auto;' : '')}
- ${({ lastRow }) => (lastRow ? 'margin-right: 110px;' : '')}
- > * {
- margin-right: 16px;
- }
-`;
-
-const ArrowLabel = styled.div<{
- color?: 'cyan' | 'pink' | 'green';
- top?: string;
- left?: string;
- focus?: boolean;
-}>`
- position: absolute;
- top: ${({ top }) => (top ? top : '0px')};
- left: ${({ left }) => (left ? left : '0px')};
- background-color: ${({ theme }) => theme.colors.bgBlack};
- border-radius: 10px;
- width: fit-content;
- padding: 0px 8px;
- border: 1px solid
- ${({ color, theme }) =>
- color ? theme.colors[color] : theme.colors.lightViolet};
- z-index: 10;
- white-space: nowrap;
- cursor: pointer;
- font-size: 11px;
- transition: all 200ms linear;
- ${({ theme, focus, color }) =>
- focus && color ? `box-shadow: 0px 0px 20px ${theme.colors[color]}` : ''};
-`;
diff --git a/src/sections/governance/table.tsx b/src/sections/governance/table.tsx
deleted file mode 100644
index 9dfde95c..00000000
--- a/src/sections/governance/table.tsx
+++ /dev/null
@@ -1,263 +0,0 @@
-import { Section } from 'src/styles/common';
-import GradientLine from 'src/svg/GradientLine';
-import styled from 'styled-components';
-
-export default function Table() {
- return (
-
-
-
- DAOs &
- Councils
-
-
-
-
-
- Community &
Core Contributors
-
-
-
- {/* First Row */}
-
-
- Core Contributors
Committee (CCC)
-
-
-
- Manage CC Pay Packages
- Manage CC Road Map & Vision
- Negotiate Partnerships
- Hire Core Contributors
- Pay Core Contributors
-
-
- Signal Priorities
-
- Implement SIPs / SCCPs
-
- Protocol Work - General & Technical
-
- Vouch for potential CC
-
-
- Elect CC Committee
-
-
-
-
- Core Contributors
(CCs)
-
-
- {/* Second Row */}
-
- Treasury Council
-
-
- Manage Treasury
- Fund Incentives
- Strategy & Deal Making
- Provide Budget & Funding to
- pDAO, GC, AC, SC, CCC, RC
-
-
-
- Work on Initiatives
-
-
- Work on Grants
-
-
-
-
- Community Contributors
-
-
- {/* Third Row */}
-
- Protocol DAO
-
-
- Execute SIPs
- Execute SCCPs
-
-
-
- Author SIPs / SCCPs
-
- Stake SNX
-
- Propose Grants
-
-
- Elect GC, AC, SC, & TC, members
-
-
-
- SNX Community
-
- {/* Fourth Row */}
-
- Spartan Council
-
-
-
- Vote on SIPs / SCCPs Feasibility &
-
-
- Risk Assessment on SIPs / SCCPs
-
- Induct pDAO members
-
-
- {/* Fifth Row */}
-
- Grants Council
-
-
- Sponsor Ecosystem Events
- Create Initiatives
- Review Grant Submissions
- Pay Community Contributors
-
-
- {/* Sixth Row */}
-
- Ambassador Council
-
-
- Participate & Manage Ecosystem Governance
- Advocate Ecosystem Partnerships
-
-
- {/* Seventh Row */}
-
- Risk Committee
-
-
- Creating Risk Evaluation Processes
- Reviewing SIPs Risk
-
-
-
-
- );
-}
-
-const StyledTableSection = styled(Section)`
- background-color: ${({ theme }) => theme.colors.bgBlackHighlighted};
- display: flex;
- flex-direction: column;
- align-items: center;
-`;
-
-const DAOToCommunityGradientWrapper = styled.div`
- width: 100%;
- max-width: 1000px;
- display: flex;
- justify-content: space-evenly;
- align-items: center;
-`;
-
-const StyledLabel = styled.h3<{ color?: 'cyan' | 'pink' }>`
- font-family: Inter;
- font-style: normal;
- font-weight: bold;
- font-size: 18px;
- line-height: 23px;
- color: ${({ color, theme }) => theme.colors[color ? color : 'cyan']};
- text-align: ${({ color }) => (color === 'cyan' ? 'end' : 'start')};
- margin: 0 18px;
- min-width: 190px;
-`;
-
-const StyledCircle = styled.div<{ color?: 'cyan' | 'pink' }>`
- border-radius: 50%;
- min-width: 21px;
- min-height: 21px;
- background-color: ${({ color, theme }) =>
- theme.colors[color ? color : 'cyan']};
-`;
-
-const DAOAndCommunityDutiesWrapper = styled.div`
- width: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
- max-width: 900px;
-`;
-
-const DutiesRow = styled.div`
- display: flex;
- align-items: center;
- width: 100%;
- margin-bottom: 48px;
-`;
-
-const StyledDutyEntity = styled.h4<{ color?: 'cyan' | 'pink' }>`
- color: ${({ color, theme }) => theme.colors[color ? color : 'cyan']};
- text-align: ${({ color }) => (color === 'cyan' ? 'end' : 'start')};
- font-family: Inter;
- font-style: normal;
- font-weight: 600;
- font-size: 14px;
- line-height: 20px;
- width: 130px;
- margin-right: ${({ color }) => color === 'cyan' && '55px'};
-`;
-
-const StyledVerticalLineCyan = styled.span`
- height: 100px;
- width: 1px;
- margin-right: 25px;
- background-image: linear-gradient(
- 0deg,
- hsl(253deg 81% 10%) 0%,
- hsl(221deg 61% 22%) 10%,
- hsl(209deg 69% 31%) 20%,
- hsl(201deg 84% 38%) 30%,
- hsl(195deg 100% 43%) 40%,
- hsl(191deg 100% 50%) 50%,
- hsl(195deg 100% 43%) 60%,
- hsl(201deg 84% 38%) 70%,
- hsl(209deg 69% 31%) 80%,
- hsl(221deg 61% 22%) 90%,
- hsl(253deg 81% 10%) 100%
- );
-`;
-
-const StyledVerticalLinePink = styled.span`
- height: 100px;
- width: 1px;
- margin-left: 25px;
- margin-right: 55px;
- background-image: linear-gradient(
- 0deg,
- hsl(253deg 81% 10%) 0%,
- hsl(255deg 58% 22%) 10%,
- hsl(266deg 58% 33%) 20%,
- hsl(277deg 61% 43%) 30%,
- hsl(286deg 70% 51%) 40%,
- hsl(295deg 100% 56%) 50%,
- hsl(286deg 70% 51%) 60%,
- hsl(277deg 61% 43%) 70%,
- hsl(266deg 58% 33%) 80%,
- hsl(255deg 58% 22%) 90%,
- hsl(253deg 81% 10%) 100%
- );
-`;
-
-const StyledDutiesWrapper = styled.div`
- display: flex;
- flex-direction: column;
-`;
-
-const StyledDuty = styled.span<{ color?: string; isLast?: boolean }>`
- color: ${({ color, theme }) => (color ? theme.colors[color] : 'white')};
- font-family: Inter;
- font-style: normal;
- font-weight: 300;
- font-size: 12px;
- line-height: 20px;
- text-align: ${({ isLast }) => isLast && 'end'};
-`;
diff --git a/src/sections/home/interested.tsx b/src/sections/home/interested.tsx
index 29d7df62..1d213a71 100644
--- a/src/sections/home/interested.tsx
+++ b/src/sections/home/interested.tsx
@@ -1,4 +1,4 @@
-import { Button, Flex, Link, Show, Text, Image } from '@chakra-ui/react';
+import { Button, Flex, Link, Show, Text, Image, Box } from '@chakra-ui/react';
import { InterestedLooper } from 'src/svg/InterestedLooper';
import { links } from 'src/utils/constants';
@@ -13,6 +13,7 @@ export const Interested = () => {
position="relative"
w="100%"
flexDirection={{ base: 'column', lg: 'row' }}
+ overflow="hidden"
>
@@ -76,12 +77,13 @@ export const Interested = () => {
diff --git a/src/svg/Arrow.tsx b/src/svg/Arrow.tsx
index ba0ad3b9..c24ed0f5 100644
--- a/src/svg/Arrow.tsx
+++ b/src/svg/Arrow.tsx
@@ -3,7 +3,7 @@ import { theme } from 'src/styles/theme';
interface ArrowProps extends Props {
disabled?: boolean;
- fill?: keyof typeof theme['colors'];
+ fill?: keyof (typeof theme)['colors'];
}
const SvgArrow = ({ disabled, fill, ...props }: ArrowProps): JSX.Element => {
diff --git a/src/svg/GradientLine.tsx b/src/svg/GradientLine.tsx
index 2a4a4d5b..9e197905 100644
--- a/src/svg/GradientLine.tsx
+++ b/src/svg/GradientLine.tsx
@@ -8,7 +8,13 @@ export default function GradientLine({ ...rest }) {
xmlns="http://www.w3.org/2000/svg"
{...rest}
>
-
+
diff --git a/src/svg/PHashed.tsx b/src/svg/PHashed.tsx
index db887955..0dfb77d9 100644
--- a/src/svg/PHashed.tsx
+++ b/src/svg/PHashed.tsx
@@ -18,7 +18,10 @@ const SvgPHashed = (props: Props): JSX.Element => {
width={1}
height={1}
>
-
+
{
d="M14.492 57.907c5.844-12.832 11.715-25.652 17.492-38.511.638-1.42 1.368-1.942 2.993-1.924 7.342.086 14.686.064 22.029.015 1.376-.01 2.265.186 2.887 1.593C70.06 42.113 80.293 65.12 90.5 88.137c.114.257.081.574.15 1.124-4.345 0-8.608-.089-12.864.04-1.99.06-2.113-1.37-2.6-2.47-8.034-18.142-16.095-36.274-23.96-54.483-1.03-2.383-2.244-3.226-4.814-3.007-2.605.223-5.045-.495-6.414 3.06-3.32 8.624-7.291 17.018-11 25.505l-14.507.001zM18.172 70.376l-9.52.001L0 89.263c4.766 0 8.988-.066 13.206.038 1.4.034 2.08-.425 2.583-1.583 2.514-5.793 5.082-11.565 7.632-17.344l-5.249.002zM165.453 38.226c2.819-6.33 5.65-12.653 8.437-18.996.307-.7.659-.957 1.443-.948 3.541.042 7.083.031 10.624.007.664-.005 1.093.091 1.393.785 4.904 11.362 9.839 22.71 14.762 34.063.055.126.04.282.073.554-2.096 0-4.152-.044-6.205.02-.959.03-1.019-.676-1.254-1.218-3.875-8.95-7.762-17.893-11.556-26.874-.496-1.175-1.082-1.591-2.322-1.483-1.256.11-2.433-.245-3.093 1.51-1.601 4.253-3.516 8.393-5.305 12.58h-6.997zM275.148 38.226c2.819-6.33 5.651-12.653 8.437-18.996.308-.7.659-.957 1.444-.948 3.541.042 7.082.031 10.624.007.664-.005 1.092.091 1.392.785 4.904 11.362 9.84 22.71 14.763 34.063.055.126.039.282.072.554-2.096 0-4.152-.044-6.204.02-.96.03-1.019-.676-1.254-1.218-3.875-8.95-7.763-17.893-11.557-26.874-.496-1.175-1.082-1.591-2.321-1.483-1.257.11-2.433-.245-3.093 1.51-1.602 4.253-3.517 8.393-5.306 12.58h-6.997zM134.412 37.319c1.92 0 3.249-.17 3.987-.513.737-.341 1.107-.968 1.107-1.879v-9.852c0-.911-.37-1.537-1.107-1.879-.738-.342-2.067-.512-3.987-.512h-10.776v14.635h10.776zm-10.776 16.23h-7.382V17.957h18.085c3.296 0 5.868.38 7.713 1.14 1.846.759 3.175 2.002 3.987 3.729.812 1.728 1.218 4.11 1.218 7.147 0 4.252-.912 7.289-2.732 9.111-1.82 1.823-4.847 2.734-9.079 2.734h-11.81v11.73zM224.888 36.465h11.128c1.916 0 3.243-.171 3.98-.513.736-.342 1.105-.968 1.105-1.88v-8.997c0-.911-.369-1.537-1.105-1.879-.737-.342-2.064-.512-3.98-.512h-11.128v13.78zm18.129 17.084l-7.664-12.586h-10.465V53.55h-7.368V17.957h18.423c3.29 0 5.858.38 7.701 1.14 1.842.759 3.168 2.002 3.979 3.729.81 1.728 1.216 4.11 1.216 7.147 0 2.924-.479 5.21-1.437 6.862-.958 1.651-2.518 2.8-4.679 3.445l8.327 13.269h-8.033zM337.458 53.549h-7.384V17.957h25.106l-.813 4.727h-16.909v11.56h14.768v4.498h-14.768V53.55z"
fill="#fff"
/>
-
+
-
+
diff --git a/src/svg/PThreeArrows.tsx b/src/svg/PThreeArrows.tsx
index 2820f8fe..6ea0bd7f 100644
--- a/src/svg/PThreeArrows.tsx
+++ b/src/svg/PThreeArrows.tsx
@@ -22,7 +22,10 @@ const SvgPThreeArrows = (props: Props): JSX.Element => {
-
+
{
-
+
{
width={1}
height={1}
>
-
+
{
return (
-