Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
import { Image } from "@unpic/react"
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react"
import { Image } from "@unpic/react";
import { Bell, Instagram, Linkedin, Search, TrendingUp } from "lucide-react";

export default function LeftSide() {
return (
<aside className="relative hidden w-full lg:w-1/2 flex-col justify-between p-8 xl:p-12 lg:flex overflow-hidden min-h-screen select-none transition-colors duration-300 font-sans">

<div className="absolute right-0 top-0 bottom-0 w-[85%] bg-neutral-100 dark:bg-neutral-900 rounded-l-[120px] overflow-hidden -z-10 transition-colors">
<Image
src="/leftSide.png"
Expand All@@ -17,64 +16,60 @@ export default function LeftSide() {
</div>

<div className="max-w-xl z-10 space-y-4 mt-6">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-tight text-gray-950 dark:text-white leading-tight">
<h1 className="text-4xl xl:text-5xl font-extrabold tracking-normal text-gray-950 dark:text-white leading-tight">
Conectando talentos <br />
<span className="bg-gradient-to-r from-blue-600 via-purple-500 to-amber-500 bg-clip-text text-transparent dark:from-blue-400 dark:via-purple-400 dark:to-amber-400">
às melhores oportunidades
</span>
às melhores oportunidades
</h1>
<p className="text-sm xl:text-base font-semibold text-gray-600 dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a encontrarem sua próxima vaga global.
<p className="text-lg xl:text-xl font-semibold text-[#004726] dark:text-neutral-400 max-w-lg">
Centralizamos oportunidades para ajudar profissionais de tecnologia a
encontrarem sua próxima vaga.
</p>
</div>

<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-full max-w-[220px] xl:max-w-[240px]">

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-blue-500/50 dark:hover:border-blue-400/50 hover:shadow-lg hover:shadow-blue-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-blue-600 to-blue-700 dark:from-blue-500 dark:to-blue-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-blue-500/20">
<div className="absolute left-8 xl:left-12 top-[35%] space-y-4 z-10 w-[170px]">
{" "}
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Search className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Encontre vagas e mentorias
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-purple-500/50 dark:hover:border-purple-400/50 hover:shadow-lg hover:shadow-purple-500/5 translate-x-6 xl:translate-x-10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-purple-600 to-purple-700 dark:from-purple-500 dark:to-purple-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-purple-500/20">
<div className=" w-[170px] h-[113px] translate-x-40 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#004726]/50 dark:border-[#004726]/50 hover:border-teal-500/50 dark:hover:border-[#004726] hover:shadow-lg hover:shadow-[#004726]/10 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<Bell className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Novas oportunidades
</p>
</div>

<div className="flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-white/60 dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-teal-600 to-teal-700 dark:from-teal-500 dark:to-teal-600 p-2.5 rounded-xl text-white w-fit shadow-sm shadow-teal-500/20">
<div className=" w-[170px] h-[113px] -translate-x-4 flex flex-col gap-3 bg-white/40 dark:bg-neutral-900/40 backdrop-blur-md p-4 rounded-2xl border border-[#C0C9BF] dark:border-neutral-800/50 hover:border-teal-500/50 dark:hover:border-teal-400/50 hover:shadow-lg hover:shadow-teal-500/5 transition-all duration-300 group">
<div className="bg-gradient-to-br from-[#004726] to-[#00663A] dark:from-[#004726] dark:to-[#00663A] p-2.5 rounded-xl text-white w-fit shadow-sm shadow-green-900/20">
<TrendingUp className="h-4 w-4" />
</div>
<p className="text-xs font-bold text-gray-900 dark:text-neutral-200 leading-tight">
Desenvolvimento profissional
</p>
</div>

</div>

<div className="flex gap-3 z-10 mt-auto pl-2">
<a
href="https://instagram.com/"
target="_blank"
rel="noopener noreferrer"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Instagram className="h-4 w-4" />
</a>
<a
href="#"
className="bg-white dark:bg-neutral-800 border border-gray-200 dark:border-neutral-700 p-2.5 rounded-xl text-gray-700 dark:text-neutral-300 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-500/30 dark:hover:border-blue-400/30 transition-all shadow-sm"
className="bg-[#004726] hover:bg-[#00663A] dark:bg-[#004726] dark:hover:bg-[#00804A] border border-[#004726] p-2.5 rounded-xl text-white hover:border-[#00663A] transition-all shadow-sm"
>
<Linkedin className="h-4 w-4" />
</a>
</div>
</aside>
)
);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,8 @@ import { motion } from "framer-motion";
import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import { useNavigate } from "react-router-dom";
import { useTheme } from "@/shared/hooks/useTheme";
import { ThemeToggle } from "@/shared/ui/theme-toggle";

const STATIC_STARS = Array.from({ length: 40 }).map((_, i) => {
const random = (min: number, max: number) =>
Expand DownExpand Up@@ -56,6 +58,7 @@ function StarsBackground() {
export default function RightSide() {
const navigate = useNavigate();
const { login } = useAuth();
const { resolvedTheme, toggleTheme } = useTheme();
const [showPassword, setShowPassword] = useState(false);
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
Expand DownExpand Up@@ -152,14 +155,16 @@ export default function RightSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full flex items-center justify-between">
<a
href="/"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-[#00804A] dark:hover:text-[#00A65A] transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para a página principal
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -168,15 +173,7 @@ export default function RightSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -268,7 +265,7 @@ export default function RightSide() {
</label>
<a
href="#"
className="font-semibold text-blue-600 dark:text-blue-400 hover:underline underline-offset-2 transition-all"
className="font-semibold text-[#0EBB69] hover:underline underline-offset-2 transition-all"
>
Esqueceu a senha?
</a>
Expand All@@ -278,10 +275,19 @@ export default function RightSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Entrando..." : "Entrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Novo por aqui?{" "}
<a
href="/register"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Cadastre-se
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,9 @@ import { ArrowLeft, Eye, EyeOff } from "lucide-react";
import { FormEvent, useState } from "react";
import PhoneInput from "react-phone-number-input";
import "react-phone-number-input/style.css";
import { ThemeToggle } from "@/shared/ui/theme-toggle";
import { useTheme } from "@/shared/hooks/useTheme";

import {
getGithubAuthUrl,
getGoogleAuthUrl,
Expand DownExpand Up@@ -88,7 +91,9 @@ export default function RegisterSide() {
const [levelError, setLevelError] = useState("");

const [isLoading, setIsLoading] = useState(false);
const [apiError, setApiError] = useState("");
const [apiError, setApiError] = useState("");
const { resolvedTheme, toggleTheme } = useTheme();


const handleGoogleLogin = async () => {
setIsLoading(true);
Expand DownExpand Up@@ -220,14 +225,16 @@ export default function RegisterSide() {
<StarsBackground />
</div>
<div className="relative z-10 w-full max-w-2xl mx-auto flex flex-col items-center gap-8">
<div className="w-full self-start">
<div className="w-full self-start flex justify-between items-center">
<a
href="/login"
className="inline-flex items-center gap-2 text-sm font-medium text-gray-500 dark:text-neutral-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors group"
>
<ArrowLeft className="h-4 w-4 transform group-hover:-translate-x-1 transition-transform" />
Voltar para o login
</a>

<ThemeToggle theme={resolvedTheme} onToggle={toggleTheme} />
</div>
<div className="text-center w-full">
<h2 className="text-5xl sm:text-6xl font-extrabold tracking-tight text-gray-900 dark:text-white flex items-center justify-center gap-1 select-none">
Expand All@@ -236,15 +243,7 @@ export default function RegisterSide() {
<span className="text-purple-500">!</span>
<span className="text-blue-500 font-light">&gt;</span>
</h2>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold bg-gradient-to-r from-blue-600 to-purple-500 bg-clip-text text-transparent dark:from-blue-400 dark:to-purple-400 underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>

</div>
</div>
<form
Expand DownExpand Up@@ -430,10 +429,19 @@ export default function RegisterSide() {
disabled={isLoading}
whileHover={{ scale: isLoading ? 1 : 1.01 }}
whileTap={{ scale: isLoading ? 1 : 0.99 }}
className="w-full bg-gradient-to-r from-blue-600 via-purple-600 to-teal-600 hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="w-full bg-gradient-to-r from-[#004726] to-[#00663A] hover:opacity-95 text-white py-3.5 px-4 rounded-xl font-bold text-base focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all shadow-md shadow-blue-500/10 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{isLoading ? "Cadastrando..." : "Cadastrar"}
</motion.button>
<p className="mt-4 text-sm text-gray-500 dark:text-neutral-400 font-medium text-center">
Já tem conta?{" "}
<a
href="/login"
className="font-semibold text-[#0EBB69] underline underline-offset-2 hover:opacity-80 transition-opacity"
>
Entrar
</a>
</p>
</form>
<div className="relative z-10 w-full max-w-2xl mx-auto">
<div className="relative mb-6">
Expand Down
Loading