diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx index 91bcb014c..88f065ff0 100644 --- a/src/components/Footer/Footer.tsx +++ b/src/components/Footer/Footer.tsx @@ -1,54 +1,61 @@ import { social } from '@static/links' import useStyles from './style' -import { Grid } from '@mui/material' +import { Box, Grid, Typography } from '@mui/material' import { TooltipHover } from '@common/TooltipHover/TooltipHover' -import { discordIcon, docsIcon, githubIcon, mediumIcon, telegramIcon, xIcon } from '@static/icons' +import { discordIcon, docsIcon, githubIcon, telegramIcon, xIcon } from '@static/icons' +import { ROUTES } from '@utils/utils' export const Footer = () => { const { classes } = useStyles() + + const handleOpenTerms = () => { + window.open(ROUTES.TERMS, '_blank', 'noopener,noreferrer') + } return ( - - - - {'github - - - - - - - {'telegram - - - - - - - {'x - - - - - - - {'discord - - - - - - - {'medium - - - - - - - {'medium + + + + + + {'github + + + + + + + {'telegram + + + + + + + {'x + + + + + + + {'discord + + + + + + + {'medium + + + + + + + Terms of Use - + ) diff --git a/src/components/Footer/style.ts b/src/components/Footer/style.ts index 478d47ed2..11ab3d2d3 100644 --- a/src/components/Footer/style.ts +++ b/src/components/Footer/style.ts @@ -1,7 +1,7 @@ -import { colors, typography } from '@static/theme' +import { colors, theme, typography } from '@static/theme' import { makeStyles } from 'tss-react/mui' -const useStyles = makeStyles()(theme => { +const useStyles = makeStyles()(() => { return { footer: { width: '100%', @@ -10,7 +10,11 @@ const useStyles = makeStyles()(theme => { justifyContent: 'center', padding: '35px 0', position: 'relative', - zIndex: 50 + zIndex: 50, + flexDirection: 'column', + [theme.breakpoints.down(1200)]: { + marginBottom: 48 + } }, footerItem: { margin: '0 10px', @@ -25,7 +29,7 @@ const useStyles = makeStyles()(theme => { opacity: 1, transform: 'scale(1.1) rotate(10deg)', '@media (hover: none)': { - opacity: 0.25, + opacity: '.25', transform: 'none' } } @@ -50,6 +54,16 @@ const useStyles = makeStyles()(theme => { icon: { height: 40, width: 40 + }, + link: { + color: colors.invariant.lightGrey, + cursor: 'pointer', + marginTop: 1, + textDecoration: 'underline', + ...typography.caption2, + p: { + ...typography.caption2 + } } } }) diff --git a/src/components/TermsOfUse/TermsOfUse.tsx b/src/components/TermsOfUse/TermsOfUse.tsx new file mode 100644 index 000000000..226f824f1 --- /dev/null +++ b/src/components/TermsOfUse/TermsOfUse.tsx @@ -0,0 +1,79 @@ +import React, { useState } from 'react' +import { Box, Typography, Checkbox, Link, FormControlLabel } from '@mui/material' +import useStyles from './style' +import { logoTitleIcon } from '@static/icons' +import { Button } from '@common/Button/Button' +import { colors } from '@static/theme' +import { TooltipHover } from '@common/TooltipHover/TooltipHover' + +interface TermsModalProps { + openTerms: () => void + handleContinue: () => void +} + +const TermsModal: React.FC = ({ openTerms, handleContinue }) => { + const { classes } = useStyles() + const [accepted, setAccepted] = useState(false) + + if (!open) return null + + return ( +
+
+ + + + + Terms of Use + + + Please make sure to read and understand the{' '} + + Terms of Use + {' '} + before entering the application. + + + + setAccepted(e.target.checked)} + className={classes.checkbox} + /> + } + label={ + <> + Agree to the + Terms of Use. + + } + /> + + + + +
+
+ ) +} + +export default TermsModal diff --git a/src/components/TermsOfUse/style.ts b/src/components/TermsOfUse/style.ts new file mode 100644 index 000000000..8c9a9329d --- /dev/null +++ b/src/components/TermsOfUse/style.ts @@ -0,0 +1,114 @@ +import { makeStyles } from 'tss-react/mui' +import { colors, theme, typography } from '@static/theme' + +const useStyles = makeStyles()(() => { + return { + overlay: { + position: 'fixed', + inset: 0, + zIndex: 500, + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + background: 'rgba(2,6,23,0.55)', + backdropFilter: 'blur(6px) brightness(0.7)', + WebkitBackdropFilter: 'blur(6px) brightness(0.7)', + padding: '24px', + [theme.breakpoints.down('md')]: { + padding: 16 + } + }, + container: { + zIndex: 501, + width: '100%', + maxWidth: 380, + borderRadius: 24, + padding: 32, + display: 'flex', + flexDirection: 'column', + gap: 32, + background: colors.invariant.pinkGreenLinearGradientOpacityVertical, + boxShadow: '0px 4px 18px 0px #00000059', + color: '#E6EEF8', + overflow: 'hidden', + [theme.breakpoints.down('md')]: { + gap: 24, + padding: 16 + } + }, + header: { + display: 'flex', + alignItems: 'center' + }, + checkbox: { + width: 25, + height: 25, + marginLeft: 3, + marginRight: 3, + color: colors.invariant.newDark, + '&.Mui-checked': { + color: colors.invariant.green + }, + '& .MuiSvgIcon-root': { + fontSize: 25 + }, + padding: 0, + '& .MuiIconButton-label': { + width: 20, + height: 20, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + margin: 0 + } + }, + form: { + '& span': { + marginLeft: 3, + [theme.breakpoints.down('md')]: { + ...typography.caption2 + } + } + }, + logo: { + width: 'auto', + height: 48, + objectFit: 'contain', + transform: 'translate(-10px)' + }, + title: { + fontWeight: 700, + fontSize: '1.05rem' + }, + pink: { + color: colors.invariant.pink + }, + heading: { + ...typography.heading1, + [theme.breakpoints.down('md')]: { + ...typography.heading3 + } + }, + description: { + fontSize: 20, + lineHeight: '28px', + color: colors.invariant.textGrey, + letterSpacing: '-0.03rem', + fontWeight: 400, + [theme.breakpoints.down('md')]: { + ...typography.body2 + } + }, + link: { + color: colors.invariant.green, + textDecoration: 'underline', + textDecorationThickness: 1, + + '&:hover': { + textDecorationThickness: 2 + } + } + } +}) + +export default useStyles diff --git a/src/pages/RootPage.tsx b/src/pages/RootPage.tsx index bf556d3b3..80a714720 100644 --- a/src/pages/RootPage.tsx +++ b/src/pages/RootPage.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useCallback, useRef } from 'react' +import React, { useEffect, useCallback, useRef, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import { useNavigate, useLocation, Outlet } from 'react-router-dom' import EventsHandlers from '@containers/EventsHandlers' @@ -22,6 +22,9 @@ import { setPhantomAccChangeTrigger } from '@utils/web3/wallet' import { ROUTES } from '@utils/utils' +import TermsOfUse from '@components/TermsOfUse/TermsOfUse' + +const TERMS_OF_USE_KEY = 'invariant-terms-of-use-v1' // const BANNER_STORAGE_KEY = 'invariant-banner-state-2' // const BANNER_HIDE_DURATION = 1000 * 60 * 60 * 24 // 24 hours @@ -62,6 +65,22 @@ const RootPage: React.FC = React.memo(() => { [ROUTES.POOL_DETAILS, 'Invariant | Pool Details'] ]) + const [showTermsOfUse, setShowTermsOfUse] = useState(() => { + const storedData = localStorage.getItem(TERMS_OF_USE_KEY) + if (storedData) { + return false + } + return true + }) + + const handleCloseModal = () => { + setShowTermsOfUse(false) + localStorage.setItem(TERMS_OF_USE_KEY, 'true') + } + const handleOpenTerms = () => { + window.open(ROUTES.TERMS, '_blank', 'noopener,noreferrer') + } + useEffect(() => { const title = metaData.get([...metaData.keys()].find(key => location.pathname.startsWith(key))!) || @@ -181,6 +200,9 @@ const RootPage: React.FC = React.memo(() => {
+ {showTermsOfUse && location.pathname !== ROUTES.TERMS && ( + + )} {/* {showHeader && currentNetwork === NetworkType.Mainnet && ( <> diff --git a/src/pages/RouterPages.tsx b/src/pages/RouterPages.tsx index 646361568..7056b62ec 100644 --- a/src/pages/RouterPages.tsx +++ b/src/pages/RouterPages.tsx @@ -8,6 +8,7 @@ import SwapPage from '@pages/SwapPage/SwapPage' import PortfolioPage from './PortfolioPage/PortfolioPage' import { ROUTES } from '@utils/utils' import PoolDetailsPage from './PoolDetailsPage/PoolDetailsPage' +import TermsPage from './TermsOfUse/TermsPage' export const router = createBrowserRouter( createRoutesFromElements( @@ -21,6 +22,7 @@ export const router = createBrowserRouter( } /> } /> + } /> ) ) diff --git a/src/pages/TermsOfUse/TermsPage.tsx b/src/pages/TermsOfUse/TermsPage.tsx new file mode 100644 index 000000000..9dbc7ac2b --- /dev/null +++ b/src/pages/TermsOfUse/TermsPage.tsx @@ -0,0 +1,556 @@ +import { Box, Grid, Typography } from '@mui/material' +import useStyles from './styles' + +export const TermsPage: React.FC = () => { + const { classes } = useStyles() + + return ( + + + + INVARIANT TERMS OF USE + + + Last updated: November 15, 2025 + + + + 1. Scope and Legal Nature of the Agreement + + + + TL;DR: This interface is only a tool to access decentralized systems and is not a + financial service, so you are solely responsible for how you use it. + + + + The interface serves exclusively as a technological means of interacting with + decentralized systems deployed on distributed ledger technology (“DLT”). It does not + constitute a custodial service, financial exchange, brokerage platform, investment + service, payment institution, or any form of regulated financial or fiduciary + infrastructure. These Terms supersede all prior statements, communications, or + understandings regarding your use of the interface. + + + You are entering into a binding Agreement. + + + + + 2. Services + + + TL;DR: The interface provides access to decentralized smart-contract systems + deployed by Invariant on distributed ledger technology. These smart contracts + operate autonomously and independently of Invariant, and you may interact with them + either directly or through the interface. The role of the interface is limited + strictly to enabling transaction submission; it does not alter, influence, or + intermediate any on-chain activity. + + + + + {' '} + The Protocol allows users to interact with digital assets in a decentralized and + peer-to-peer environment. Users may contribute liquidity by allocating their digital + assets into decentralized liquidity pools (“ + {' '} + Liquidity Pools + + {' '} + ”), thereby enabling other participants to execute swaps or other interactions + directly against that liquidity. Digital assets applicable to these pools may + consist of any fungible tokens supported by the underlying DLT network. + + + + Liquidity Pools are created and controlled solely by their respective liquidity + providers, who determine asset pairings, allocation, and associated parameters. All + interactions between liquidity providers and traders occur directly through autonomous + smart contracts and, where applicable, additional smart contracts deployed by + unrelated third parties. These interactions form a direct peer-to-peer relationship + between users of the Protocol. Invariant does not participate in, supervise, validate, + or oversee these relationships, nor does it assume any obligations, duties, or + liabilities arising from them. + + + Invariant is not a counterparty to any transaction conducted through the Protocol, + does not act as a broker, intermediary, custodian, or agent, and does not take + possession of or exercise control over any digital assets used within Liquidity Pools. + Liquidity providers and traders assume all risks associated with their own actions, + including technical risks, market risks, and contractual risks embedded in + smart-contract interactions. + + + Neither the interface nor Invariant provides digital-asset exchange services, + portfolio management services, investment advice, or any regulated financial service. + Any decision you make to interact with Liquidity Pools, provide liquidity, or engage + in trades is undertaken at your sole discretion and risk. Invariant and its + affiliates, directors, contributors, developers, and employees shall not be liable for + any direct or indirect loss arising from your use of Liquidity Pools, reliance on + information displayed through the interface, or outcomes stemming from smart-contract + execution, including but not limited to errors, omissions, unexpected behavior, or + alterations of on-chain data. + + + THE SITE SOLELY FUNCTIONS AS A VISUAL USER INTERFACE. IN NO CIRCUMSTANCES SHALL THE + COMPANY, THE SMART CONTRACTS, OR THE SITE BE CONSTRUED AS A DIGITAL ASSET EXCHANGE, + BROKER, DEALER, FUND MANAGER, FINANCIAL INSTITUTION, EXCHANGE, CUSTODIAN, + ROBO-ADVISOR, INTERMEDIARY, OR CREDITOR. THE SITE DOES FACILITATE OR ARRANGE + TRANSACTIONS BETWEEN BUYERS AND SELLERS, INCLUDING WITH RESPECT TO ANY TRANSACTIONS + THAT OCCUR IN CONNECTION WITH A LIQUIDITY POOL, WHICH TRANSACTIONS OCCUR ON THE + RELEVANT BLOCKCHAIN NETWORK. THE COMPANY IS NOT A COUNTERPARTY TO ANY TRANSACTION + FACILITATED BY THE SMART CONTRACTS OR THE SITE OR FOR ANY USER OF THE SITE. NEITHER + THE SMART CONTRACTS OR THE SITE PROVIDES FINANCIAL ADVISORY, LEGAL, REGULATORY, OR TAX + SERVICES DIRECTLY, INDIRECTLY, IMPLICITLY, OR IN ANY OTHER MANNER, AND YOU SHOULD NOT + CONSIDER ANY CONTENT CONTAINED IN THESE TERMS OR OTHERWISE POSTED ON THE SITE TO BE A + SUBSTITUTE FOR PROFESSIONAL FINANCIAL, LEGAL, REGULATORY, TAX OR OTHER ADVICE. THE + COMPANY DOES NOT SUPPORT OR ENDORSE ANY LIQUIDITY POOL CREATED BY ANY USER OF + INVARIANT, AND EACH SUCH CREATOR IS AN INDEPENDENT AGENT WITH NO EMPLOYMENT OR OTHER + CONTRACTUAL RELATIONSHIP WITH THE COMPANY. + + + + + + 3. Nature of Distributed Ledger Technology and Operational Autonomy + + + + TL;DR: Decentralized networks operate independently and no one, including us, can + change or undo transactions once confirmed. + + + + The interface grants access to decentralized and autonomous smart-contract systems + that operate solely through DLT networks. These networks are maintained collectively + by independent participants who validate and record transactions through consensus + mechanisms that do not depend on our authority or oversight. You understand and + acknowledge that no centralized authority, including Invariant, has the ability to + intervene in, alter, or reverse the execution of smart contracts or transactions once + they have been confirmed on a DLT network. The decentralized nature of the Protocol + ensures that its operation is independent and permissionless and that it is not + subject to modification, halting, suspension, or any form of administrative influence + by us or by any affiliated party. + + + + + + 4. Distinction Between Interface and Protocol + + + + TL;DR: The interface is separate from the Protocol, and the Protocol runs on its own + whether or not the interface exists. + + + + + The interface is a separate, optional user-access layer that enables the submission + of transaction instructions to autonomous smart contracts (“ + + the Protocol + + ”). The interface and the Protocol are independent of one another. We do not + control, own, operate, or modify the Protocol; we do not maintain administrative + privileges over its smart contracts; and we cannot influence, override, or reverse + outcomes executed by the Protocol. + + + + The Protocol may be accessed directly without the interface, and its continued + operation does not depend on the availability, functionality, or existence of the + interface. All interactions with the Protocol occur entirely according to its + immutable code deployed on DLT. + + + + + + 5. Eligibility, Age of Majority, and Legal Capacity + + + + TL;DR:You must be an adult with legal capacity and allowed by your local laws to use + Invariant protocol. + + + + By using the interface, you represent that you are a natural person acting on your own + behalf, that you have reached the age of majority applicable in your jurisdiction, and + that you possess full legal capacity to enter into binding agreements. You further + confirm that your use of decentralized technologies is not prohibited by any + applicable laws related to digital assets, sanctions, financial regulations, consumer + protection, taxation, or data governance. + + + + + 6. Restricted Jurisdictions + + + TL;DR: You must confirm that you are not subject to sanctions, not acting for any + sanctioned party, and not using illicit funds. Access is prohibited if you are + located in or associated with a high-risk or sanctioned + + jurisdiction. + + + You represent and warrant that you are not, and have never been, the subject of any + economic, financial, or trade sanctions imposed, administered, or enforced by the + United Nations, the European Union, the United States (including the Office of Foreign + Assets Control), the United Kingdom, or any other competent authority. You further + confirm that you are not acting for, or on behalf of, any person or entity subject to + such sanctions, and that no funds or digital assets used by you originate from + activities that violate applicable sanctions laws, anti-money-laundering regulations, + or counter-terrorism financing rules. + + + + Restricted regions include, without limitation: + +
    +
  • United States of America and its territories
  • +
  • Canada
  • +
  • European Union (27 member states)
  • +
  • United Kingdom
  • +
  • People’s Republic of China
  • +
  • Hong Kong SAR
  • +
  • Singapore
  • +
  • Iran
  • +
  • Syria
  • +
  • North Korea
  • +
  • Cuba
  • +
  • Myanmar
  • +
  • Sudan and South Sudan
  • +
  • Belarus
  • +
  • Venezuela (restricted regions)
  • +
  • Crimea
  • +
  • Donetsk
  • +
  • Luhansk
  • +
+
+
+ + + 7. Third-Party Wallet Requirement + + + TL;DR: You use your own non-custodial wallet and you alone control your keys and + access. Any wallet loss, failure, or compromise is entirely your responsibility. + + + + Interaction with the Protocol requires the use of a third-party, non-custodial digital + wallet capable of signing transactions on DLT-based systems. Such wallets are not + owned, operated, monitored, or controlled by us. We do not retain access to your + private keys, seed phrases, backup materials, authentication credentials, or wallet + recovery mechanisms. Any loss of access, compromise of credentials, technical + malfunction, or unauthorized use of your wallet is solely your responsibility. + + + + + 8. Risks of Smart Contracts + + + TL;DR: You acknowledge and agree that all interactions performed through the + interface involve self-executing smart contracts deployed on decentralized + distributed ledger technology. Smart contracts operate autonomously according to + their code and are not subject to manual intervention, override, suspension, + correction, or discretionary control by us or any third party. Once a transaction is + broadcast and confirmed by the relevant DLT network, it becomes final, irreversible, + and beyond alteration. + + + + Smart contracts may contain vulnerabilities, unintended logic paths, design + limitations, or dependencies on external data sources. Their operation may be + influenced by network conditions, validator behavior, data-flow inconsistencies, or + adversarial activity. As such, smart-contract interactions may result in failed + transactions, partial execution, unexpected outcomes, or permanent loss of digital + assets. + + + We make no representations, warranties, or guarantees regarding the reliability, + accuracy, functionality, or security of any smart contract that you interact with. + Your engagement with smart contracts is undertaken entirely at your own risk, and you + are solely responsible for verifying their suitability and technical soundness before + executing any transaction. You understand that neither we nor any affiliated party + bears liability for any damage, loss, malfunction, or adverse consequence arising from + smart-contract execution. + + + + + + 9. Absence of Custody, Control, or Intermediary Role + + + + TL;DR: We never hold your assets, handle your transactions, or in any way control + the funds you provide as liquidity. At no point can we, or the Protocol, be + considered an intermediary or broker + + + + We do not custody, store, hold, manage, or control digital assets on your behalf. We + do not mediate, broker, or execute transactions and do not provide settlement, + clearing, or escrow functions. All transactions initiated through the interface occur + directly through your interaction with the Protocol and the DLT, without our + involvement or ability to alter their outcome. You bear sole responsibility for + verifying the accuracy and appropriateness of transaction details before authorizing + them. + + + + + + 10. No Financial, Legal, or Tax Advice + + + Nothing here is advice; you must evaluate risks yourself or consult professionals. + + + The interface and any information provided through it are intended solely for + informational and technological purposes. Nothing within the interface constitutes + financial, legal, tax, or investment advice. You are solely responsible for evaluating + the legal and economic consequences of your actions and for seeking independent + professional advice. + + + + + 11. Limitation of Liability + + + TL;DR: Your use of the interface is entirely at your own risk, and our liability is + strictly limited. + + + + UNDER NO CIRCUMSTANCES SHALL WE, ANY INVARIANT PARTIES, OR ANY THIRD-PARTY SERVICES BE + LIABLE TO YOU FOR ANY INDIRECT, PUNITIVE, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR + EXEMPLARY DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS, + GOODWILL, USE, DATA, OR OTHER INTANGIBLE PROPERTY, ARISING OUT OF OR RELATING TO ANY + ACCESS OR USE OF OR INABILITY TO ACCESS OR USE ANY OF THE PRODUCTS OR ANY THIRD-PARTY + SERVICES. WE WILL NOT BE RESPONSIBLE FOR ANY DAMAGE, LOSS, OR INJURY RESULTING FROM + HACKING, TAMPERING, OR OTHER UNAUTHORIZED ACCESS OR USE OF ANY OF THE PRODUCTS, + THIRD-PARTY SERVICES, OR THE INFORMATION CONTAINED WITHIN THEM, WHETHER SUCH DAMAGES + ARE BASED IN CONTRACT, TORT, NEGLIGENCE, STRICT LIABILITY, OR OTHERWISE, ARISING OUT + OF OR IN CONNECTION WITH AUTHORIZED OR UNAUTHORIZED USE OF ANY OF THE PRODUCTS OR ANY + THIRD-PARTY SERVICES, EVEN IF AN AUTHORIZED REPRESENTATIVE OF INVARIANT HAS BEEN + ADVISED OF, KNEW, OR SHOULD HAVE KNOWN OF THE POSSIBILITY OF SUCH DAMAGES. + + + + WE ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY: (A) ERRORS, MISTAKES, OR + INACCURACIES OF CONTENT; (B) PERSONAL INJURY OR PROPERTY DAMAGE OF ANY NATURE + WHATSOEVER RESULTING FROM ANY ACCESS OR USE OF THE INTERFACE; (C) UNAUTHORIZED ACCESS + OR USE OF ANY SECURE SERVER OR DATABASE IN OUR CONTROL OR THE USE OF ANY INFORMATION + OR DATA STORED THEREIN; (D) INTERRUPTION OR CESSATION OF FUNCTION RELATED TO ANY OF + THE PRODUCTS OR THIRD-PARTY SERVICES; (E) BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE + THAT MAY BE TRANSMITTED TO OR THROUGH THE INTERFACE; (F) ERRORS OR OMISSIONS IN, OR + LOSS OR DAMAGE INCURRED AS A RESULT OF THE USE OF, ANY CONTENT MADE AVAILABLE THROUGH + ANY OF THE PRODUCTS OR THIRD-PARTY SERVICES; AND (G) THE DEFAMATORY, OFFENSIVE, OR + ILLEGAL CONDUCT OF ANY THIRD PARTY. + + + + WE HAVE NO LIABILITY TO YOU OR TO ANY THIRD PARTY FOR ANY CLAIMS OR DAMAGES THAT MAY + ARISE AS A RESULT OF ANY PAYMENTS OR TRANSACTIONS THAT YOU ENGAGE IN VIA ANY OF OUR + PRODUCTS OR ANY THIRD-PARTY SERVICES, OR ANY OTHER PAYMENTS OR TRANSACTIONS THAT YOU + CONDUCT VIA ANY OF OUR PRODUCTS. EXCEPT AS EXPRESSLY PROVIDED FOR HEREIN, WE DO NOT + PROVIDE REFUNDS FOR ANY PURCHASES MADE ON OR THROUGH ANY OF OUR PRODUCTS. + + + + NEITHER WE NOR ANY PROVIDERS OF THIRD-PARTY SERVICES MAKE ANY WARRANTIES OR + REPRESENTATIONS, EXPRESS OR IMPLIED, ABOUT LINKED THIRD-PARTY SERVICES, THE THIRD + PARTIES THAT OWN OR OPERATE THEM, THE INFORMATION CONTAINED ON THEM, ASSETS AVAILABLE + THROUGH THEM, OR THE SUITABILITY, PRIVACY, OR SECURITY OF THEIR PRODUCTS OR SERVICES. + YOU ACKNOWLEDGE SOLE RESPONSIBILITY FOR AND ASSUME ALL RISK ARISING FROM YOUR USE OF + THIRD-PARTY SERVICES, THIRD-PARTY WEBSITES, APPLICATIONS, OR RESOURCES. WE SHALL NOT + BE LIABLE UNDER ANY CIRCUMSTANCES FOR DAMAGES ARISING OUT OF OR IN ANY WAY RELATED TO + SOFTWARE, PRODUCTS, SERVICES, AND/OR INFORMATION OFFERED OR PROVIDED BY THIRD PARTIES + AND ACCESSED THROUGH ANY OF OUR PRODUCTS. + + + + SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY FOR PERSONAL INJURY OR FOR + INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY TO YOU. IN NO + EVENT SHALL OUR TOTAL LIABILITY TO YOU FOR ALL DAMAGES (OTHER THAN AS REQUIRED BY + APPLICABLE LAW IN CASES INVOLVING PERSONAL INJURY) EXCEED ONE HUNDRED U.S. DOLLARS + ($100.00 USD) OR ITS EQUIVALENT IN THE LOCAL CURRENCY OF THE APPLICABLE JURISDICTION. + + + + THE FOREGOING DISCLAIMER WILL NOT APPLY TO THE EXTENT PROHIBITED BY LAW. + + + + + 12. Prohibited Activities + + + TL;DR: Do not use the interface for illegal activity, attacks, manipulation, or + misuse of any kind. + + + + You agree not to use the interface for any unlawful, fraudulent, malicious, or harmful + purpose. Prohibited conduct includes attempting to bypass sanctions, laundering funds, + exploiting vulnerabilities, manipulating transactions, attacking network + infrastructure, disrupting interface functionality, accessing systems without + authorization, or impersonating another person. + + + + + 13. Intellectual Property Rights + + + TL;DR: You cannot copy or use materials without permission. + + + + All proprietary rights, title, and interest in and to the interface, including its + design, layout, visual elements, text, graphics, code, logos, trademarks, trade names, + documentation, and any other materials or content made available through or in + connection with it (collectively, “Interface Materials”), are owned by us or by third + parties who have granted us the rights to use such materials. The Interface Materials + are protected by copyright, trademark, and other applicable intellectual property and + proprietary rights laws. All such rights are expressly reserved. + + + You acknowledge that while the underlying decentralized protocol may be open-source or + governed by separate licensing terms, the interface itself constitutes a distinct + proprietary product. Your access to the interface grants you no rights, licenses, or + ownership interests of any kind in the Interface Materials, except for the limited, + revocable, non-exclusive, non-transferable permission to use the interface solely for + its intended purpose and strictly in accordance with these Terms. + + + You may not copy, reproduce, distribute, modify, publish, reverse-engineer, decompile, + disassemble, frame, scrape, data-mine, or otherwise exploit any portion of the + Interface Materials without our prior express written consent. Unauthorized use, + reproduction, or distribution of the Interface Materials may constitute a violation of + intellectual property laws and may result in legal action. + + + Nothing in these Terms shall be interpreted as granting you any license or right to + use our trademarks, trade names, branding, domain names, URLs, or other identifying + marks in any manner without our prior written approval. Misuse of any such identifying + elements may result in legal liabilit + + + + + 14. No Guarantee of Availability + + + TL;DR: The interface may be changed, limited, interrupted, or discontinued at any + time, and we do not guarantee its continuous or error-free operation. + + + + You acknowledge and agree that the interface is provided on an “as available” basis + and that we do not make any representation, warranty, or commitment regarding its + continuous availability, uptime, performance, or compatibility. The interface may be + subject to interruptions, delays, errors, maintenance periods, updates, or + modifications at any time and for any reason, including technical issues, security + considerations, or operational requirements. + + + We reserve the right, at our sole discretion and without obligation to provide notice, + to suspend, restrict, disable, modify, or discontinue any portion of the interface. + Such actions may affect your ability to submit transactions, access information, or + interact with the Protocol, and may occur with or without prior warning. + + + You further acknowledge that availability of the interface may depend on networks, + technologies, and services provided by third parties—including internet service + providers, hosting providers, DLT network participants, library maintainers, or wallet + providers—and that we have no control over and disclaim responsibility for any + disruptions, failures, or delays caused by such external systems. + + + Your ability to interact with the underlying Protocol does not depend on the continued + availability of the interface. You are solely responsible for ensuring that you + maintain alternative means of accessing the Protocol should the interface become + unavailable for any reason. + + + + + 15. Indemnification + + + TL;DR: If your actions cause harm, violate laws, or breach these Terms, you must + cover the resulting damages and costs. + + + + You agree to indemnify, defend, and hold harmless us and our officers, directors, + employees, contractors, developers, agents, affiliates, and subsidiaries from and + against any and all claims, demands, liabilities, damages, losses, costs, expenses, + and legal fees arising out of or relating to (a) your use of the interface, the smart + contracts, or any DLT-based system; (b) your breach or alleged breach of these Terms; + (c) your violation of any applicable law or regulation; (d) your infringement of any + rights of a third party; or (e) any activity conducted through your wallet, whether + authorized or unauthorized. + + + You agree that this indemnification obligation applies regardless of whether claims + arise directly or indirectly from your actions, omissions, negligence, + misrepresentations, or unauthorized access to your digital wallet. You further agree + that we shall have the right, but not the obligation, to assume exclusive defense and + control of any matter otherwise subject to indemnification, and that you will + cooperate fully with any such defense. + + + + + 16. Final Provisions + + + TL;DR: These Terms govern your use of the interface and remain binding even if + individual statements are adjusted or updated. + + + + These Terms constitute the entire agreement governing your use of the interface. If + any provision is deemed invalid or unenforceable, it shall be modified only to the + extent necessary to preserve its intent. All remaining provisions remain in full + effect. Continued use of the interface constitutes your acceptance of all current and + future versions of the Terms. + + + + + 17. Contact Us + + You may contact us with questions about your use of the Services at{' '} + + + inbox@invariant.app + + + . + + + These Terms constitute the entire agreement governing your use of the interface. If + any provision is deemed invalid or unenforceable, it shall be modified only to the + extent necessary to preserve its intent. All remaining provisions remain in full + effect. Continued use of the interface constitutes your acceptance of all current and + future versions of the Terms. + + +
+
+
+ ) +} + +export default TermsPage diff --git a/src/pages/TermsOfUse/styles.ts b/src/pages/TermsOfUse/styles.ts new file mode 100644 index 000000000..1a051948f --- /dev/null +++ b/src/pages/TermsOfUse/styles.ts @@ -0,0 +1,72 @@ +import { typography, colors, theme } from '@static/theme' +import { makeStyles } from 'tss-react/mui' + +export const useStyles = makeStyles()(() => ({ + outerWrapper: { + paddingInline: 24, + marginTop: 24, + [theme.breakpoints.down('sm')]: { + paddingInline: 8 + } + }, + wrapper: { + maxWidth: 1210, + margin: 'auto', + minHeight: '100%', + flexDirection: 'column', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: colors.invariant.text, + border: `1px solid ${colors.invariant.light}`, + padding: '48px 24px ', + borderRadius: 24, + boxShadow: `0px 13px 39px 14px rgba(58, 70, 107, 0.4)`, + marginBottom: 48 + }, + title: { + ...typography.heading1, + marginBottom: 16, + color: colors.invariant.green, + textAlign: 'center', + [theme.breakpoints.down('md')]: { + ...typography.heading2 + } + }, + lastUpdate: { + ...typography.body2, + textAlign: 'center', + marginBottom: 32, + [theme.breakpoints.down('md')]: { + ...typography.caption2 + } + }, + section: { + display: 'flex', + flexDirection: 'column', + gap: 16 + }, + tldr: { + fontStyle: 'italic' + }, + subTitle: { + ...typography.heading3, + [theme.breakpoints.down('md')]: { + ...typography.heading4 + } + }, + paragraph: { + ...typography.body3, + [theme.breakpoints.down('md')]: { + ...typography.body2 + } + }, + accent: {}, + list: {}, + mail: { + color: colors.invariant.text, + cursor: 'pointer' + } +})) + +export default useStyles diff --git a/src/static/theme/index.ts b/src/static/theme/index.ts index 17487e2fd..ce5e553d8 100644 --- a/src/static/theme/index.ts +++ b/src/static/theme/index.ts @@ -95,7 +95,9 @@ export const colors = { plotGreen: '#9DD46D', plotRed: '#FB555F', pinkGreenLinearGradient: 'linear-gradient(90deg, #EF84F5 0%, #2EE09A 100%)', - darkGradient: 'linear-gradient(180deg,rgba(17, 25, 49, 0) 0%, rgba(17, 25, 49, 1) 100%)' + darkGradient: 'linear-gradient(180deg,rgba(17, 25, 49, 0) 0%, rgba(17, 25, 49, 1) 100%)', + pinkGreenLinearGradientOpacityVertical: + 'linear-gradient(0deg, rgba(46, 224, 154, 0.15) 0%, rgba(46, 224, 154, 0) 50%), linear-gradient(0deg, rgba(239, 132, 245, 0) 50%, rgba(239, 132, 245, 0.15) 100%), #202946;' } } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 2417ec759..f597c58bc 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1898,6 +1898,7 @@ export const ROUTES = { PORTFOLIO: '/portfolio', POOL_DETAILS: '/poolDetails', POOL_DETAILS_WITH_PARAMS: '/poolDetails/:item1?/:item2?/:item3?', + TERMS: '/terms', getExchangeRoute: (item1?: string, item2?: string): string => { const parts = [item1, item2].filter(Boolean)