diff --git a/index.html b/index.html index e4b9262..460572e 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + Tactical Hacker Scribes diff --git a/src/App.css b/src/App.css index b9d355d..9d1216e 100644 --- a/src/App.css +++ b/src/App.css @@ -1,8 +1,11 @@ #root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; + width: 100%; /* Make the root element span the full width */ + height: 100%; /* Make the root element span the full height */ + margin: 0; /* Remove auto-centering */ + padding: 0; /* Remove extra padding */ + background-color: #ffffff; /* Set the background color to white */ + display: flex; /* Use flexbox to align content */ + flex-direction: column; /* Stack child elements vertically */ } .logo { diff --git a/src/App.tsx b/src/App.tsx index b82e3a0..a0386b3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,33 +1,25 @@ -import { useState } from 'react'; -import reactLogo from './assets/react.svg'; -import viteLogo from '/vite.svg'; -import './App.css'; +import React, { useState } from "react"; +import Navbar from "./components/Navbar"; +import LoginPopup from "./components/LoginPopup"; +import SignupPopup from "./components/SignupPopup"; +import LandingPage from "./components/LandingPage"; +import "./App.css"; -function App() { - const [count, setCount] = useState(0); +const App: React.FC = () => { + const [showLogin, setShowLogin] = useState(false); + const [showSignup, setShowSignup] = useState(false); return ( - <> -
- - Vite logo - - - React logo - -
-

TH - Scribes

-
- -

- Edit src/App.tsx and save to test HMR -

-
-

Click on the Vite and React logos to learn more

- +
+ setShowLogin(true)} + onSignupClick={() => setShowSignup(true)} + /> + + {showLogin && setShowLogin(false)} />} + {showSignup && setShowSignup(false)} />} +
); -} +}; export default App; diff --git a/src/assets/TH-Logo.png b/src/assets/TH-Logo.png new file mode 100644 index 0000000..5833e4d Binary files /dev/null and b/src/assets/TH-Logo.png differ diff --git a/src/components/LandingPage.css b/src/components/LandingPage.css new file mode 100644 index 0000000..901b62d --- /dev/null +++ b/src/components/LandingPage.css @@ -0,0 +1,38 @@ +.landing-page { + width: 100%; /* Use 100% to avoid horizontal overflow caused by 100vw */ + height: 100vh; /* Make it cover the full viewport height */ + display: flex; + flex-direction: column; /* Stack elements vertically */ + justify-content: center; /* Center content vertically */ + align-items: center; /* Center content horizontally */ + background-color: #f8f9fa; /* Light gray background */ + color: #333; /* Dark gray text */ + text-align: center; /* Center-align text */ + padding: 2rem; /* Add padding for spacing */ + box-sizing: border-box; /* Include padding in width/height calculations */ + overflow-x: hidden; /* Prevent horizontal scrolling */ +} + +.landing-image { + max-width: 300px; /* Set a maximum width for the image */ + height: auto; /* Maintain aspect ratio */ + margin-bottom: 2rem; /* Add spacing below the image */ + border-radius: 8px; /* Optional: Add rounded corners */ + background: linear-gradient(135deg, rgba(255, 255, 255, 0.8), rgba(204, 204, 204, 0.5)); /* Add a faded gradient */ + padding: 10px; /* Add padding inside the gradient */ + box-sizing: border-box; /* Ensure padding doesn't affect the size */ +} + +.landing-page h2 { + font-size: 2rem; + color: #0056b3; /* Dark blue for the heading */ + margin-bottom: 1rem; +} + +.landing-page p { + font-size: 1.2rem; + color: #555; /* Medium gray for the text */ + max-width: 600px; /* Constrain the text width */ + margin: 0 auto; /* Center the text */ + line-height: 1.6; /* Improve readability */ +} \ No newline at end of file diff --git a/src/components/LandingPage.tsx b/src/components/LandingPage.tsx new file mode 100644 index 0000000..8734f5f --- /dev/null +++ b/src/components/LandingPage.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import "./LandingPage.css"; +import THLogo from "../assets/TH-Logo.png"; // Import the logo + +const LandingPage: React.FC = () => { + return ( +
+ Landing Logo +

Welcome to Tactical Hacker Scribes

+

+ Empowering writers and creators with seamless onboarding, secure digital contracts, and a streamlined collaboration experience — all in one place. +

+
+ ); +}; + +export default LandingPage; \ No newline at end of file diff --git a/src/components/LoginPopup.css b/src/components/LoginPopup.css new file mode 100644 index 0000000..2243960 --- /dev/null +++ b/src/components/LoginPopup.css @@ -0,0 +1,94 @@ +.popup-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); /* Semi-transparent black background */ + backdrop-filter: blur(8px); /* Add blur effect */ + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; +} + +.popup { + background: white; + padding: 2rem; + border-radius: 8px; + text-align: center; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + width: 300px; /* Set a fixed width for symmetry */ + box-sizing: border-box; /* Include padding in width calculations */ +} + +.popup-title { + font-size: 1.5rem; + margin-bottom: 1rem; + color: #333; +} + +.popup-logo { + width: 80px; /* Set the logo width */ + height: 80px; /* Set the logo height */ + margin: 0 auto 1rem; /* Center the logo and add spacing below */ + display: block; +} + +.popup h2 { + margin-bottom: 1rem; + color: #0056b3; /* Dark blue for headings */ +} + +.popup-input { + display: block; + width: 100%; /* Make the input fields span the full width of the popup */ + padding: 0.5rem; + margin: 0.5rem 0; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 1rem; + background-color: #f8f9fa; /* Light gray background for inputs */ + color: #333; /* Dark gray text */ + box-sizing: border-box; /* Include padding in width calculations */ +} + +.popup-input:focus { + border-color: #007bff; /* Bright blue border on focus */ + outline: none; +} + +.popup-buttons { + display: flex; + justify-content: space-between; + margin-top: 1rem; +} + +.popup-button, +.popup-close { + padding: 0.5rem 1rem; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 1rem; + width: 48%; /* Ensure buttons take equal width and align symmetrically */ + box-sizing: border-box; /* Include padding in width calculations */ +} + +.popup-button { + background-color: #007bff; /* Bright blue for primary action */ + color: white; +} + +.popup-button:hover { + background-color: #0056b3; /* Dark blue on hover */ +} + +.popup-close { + background-color: #dc3545; /* Red for cancel action */ + color: white; +} + +.popup-close:hover { + background-color: #a71d2a; /* Darker red on hover */ +} \ No newline at end of file diff --git a/src/components/LoginPopup.tsx b/src/components/LoginPopup.tsx new file mode 100644 index 0000000..d58ed02 --- /dev/null +++ b/src/components/LoginPopup.tsx @@ -0,0 +1,28 @@ +import React from "react"; +import "./LoginPopup.css"; +import THLogo from "../assets/TH-Logo.png"; // Import the logo + +interface LoginPopupProps { + onClose: () => void; +} + +const LoginPopup: React.FC = ({ onClose }) => { + return ( +
+
+ Logo +

Login

+ + +
+ + +
+
+
+ ); +}; + +export default LoginPopup; \ No newline at end of file diff --git a/src/components/Navbar.css b/src/components/Navbar.css new file mode 100644 index 0000000..fece1d8 --- /dev/null +++ b/src/components/Navbar.css @@ -0,0 +1,62 @@ +.navbar { + position: fixed; /* Fix the navbar to the top */ + top: 0; + left: 0; + width: 100%; /* Make it fill the width */ + display: flex; + justify-content: center; /* Center the navbar content */ + align-items: center; + padding: 0.5rem 2rem; /* Add padding for neatness */ + background-color: #0056b3; /* Dark blue background */ + color: white; + z-index: 1000; /* Ensure it stays above other elements */ + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* Add a subtle shadow */ +} + +.navbar-content { + width: 100%; + max-width: 1200px; /* Constrain the navbar content to a maximum width */ + display: flex; + justify-content: space-between; /* Space out the brand and links */ + align-items: center; +} + +.navbar-title { + font-size: 1.5rem; + font-weight: bold; + color: white; /* Ensure the title is white */ +} + +.navbar-links { + display: flex; + gap: 1rem; /* Add spacing between buttons */ +} + +.navbar-links .navbar-button { + padding: 0.5rem 1rem; + background-color: #28a745; /* Green for buttons */ + color: white; + border: none; + cursor: pointer; + border-radius: 4px; /* Add slight rounding for a modern look */ + font-size: 1rem; +} + +.navbar-links .navbar-button:hover { + background-color: #218838; /* Darker green on hover */ +} + +.navbar-brand { + display: flex; + align-items: center; + gap: 0.5rem; /* Add spacing between the logo and title */ +} + +.navbar-logo { + width: 40px; /* Set the logo width */ + height: 40px; /* Set the logo height */ + border-radius: 50%; /* Make the logo circular */ + background: linear-gradient(135deg, rgba(255, 255, 255, 0.8), rgba(204, 204, 204, 0.5)); /* Add a faded gradient */ + padding: 5px; /* Add padding inside the gradient */ + box-sizing: border-box; /* Ensure padding doesn't affect the size */ +} \ No newline at end of file diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx new file mode 100644 index 0000000..81f7506 --- /dev/null +++ b/src/components/Navbar.tsx @@ -0,0 +1,31 @@ +import React from "react"; +import "./Navbar.css"; +import THLogo from "../assets/TH-Logo.png"; // Import the logo + +interface NavbarProps { + onLoginClick: () => void; + onSignupClick: () => void; +} + +const Navbar: React.FC = ({ onLoginClick, onSignupClick }) => { + return ( + + ); +}; + +export default Navbar; \ No newline at end of file diff --git a/src/components/SignupPopup.css b/src/components/SignupPopup.css new file mode 100644 index 0000000..eb57c18 --- /dev/null +++ b/src/components/SignupPopup.css @@ -0,0 +1,94 @@ +.popup-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); /* Semi-transparent black background */ + backdrop-filter: blur(8px); /* Add blur effect */ + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; +} + +.popup { + background: white; + padding: 2rem; + border-radius: 8px; + text-align: center; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + width: 300px; /* Set a fixed width for symmetry */ + box-sizing: border-box; /* Include padding in width calculations */ +} + +.popup-title { + font-size: 1.5rem; + margin-bottom: 1rem; + color: #333; +} + +.popup-logo { + width: 80px; /* Set the logo width */ + height: 80px; /* Set the logo height */ + margin: 0 auto 1rem; /* Center the logo and add spacing below */ + display: block; +} + +.popup h2 { + margin-bottom: 1rem; + color: #0056b3; /* Dark blue for headings */ +} + +.popup-input { + display: block; + width: 100%; /* Make the input fields span the full width of the popup */ + padding: 0.5rem; + margin: 0.5rem 0; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 1rem; + background-color: #f8f9fa; /* Light gray background for inputs */ + color: #333; /* Dark gray text */ + box-sizing: border-box; /* Include padding in width calculations */ +} + +.popup-input:focus { + border-color: #007bff; /* Bright blue border on focus */ + outline: none; +} + +.popup-buttons { + display: flex; + justify-content: space-between; + margin-top: 1rem; +} + +.popup-button, +.popup-close { + padding: 0.5rem 1rem; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 1rem; + width: 48%; /* Ensure buttons take equal width and align symmetrically */ + box-sizing: border-box; /* Include padding in width calculations */ +} + +.popup-button { + background-color: #28a745; /* Green for signup action */ + color: white; +} + +.popup-button:hover { + background-color: #218838; /* Darker green on hover */ +} + +.popup-close { + background-color: #dc3545; /* Red for cancel action */ + color: white; +} + +.popup-close:hover { + background-color: #a71d2a; /* Darker red on hover */ +} \ No newline at end of file diff --git a/src/components/SignupPopup.tsx b/src/components/SignupPopup.tsx new file mode 100644 index 0000000..cdf7683 --- /dev/null +++ b/src/components/SignupPopup.tsx @@ -0,0 +1,30 @@ +import React from "react"; +import "./SignupPopup.css"; +import THLogo from "../assets/TH-Logo.png"; // Import the logo + +interface SignupPopupProps { + onClose: () => void; +} + +const SignupPopup: React.FC = ({ onClose }) => { + return ( +
+
+ Logo +

Create an Account

+ + + + +
+ + +
+
+
+ ); +}; + +export default SignupPopup; \ No newline at end of file