Compare commits
3 Commits
7119383139
...
a318a5e225
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a318a5e225 | ||
|
|
1b49348577 | ||
|
|
fb61f5f396 |
@@ -34,3 +34,8 @@ python3 .agents/skills/uiux-designer/scripts/search.py "<keyword>" --domain <dom
|
|||||||
|
|
||||||
### Step 4: Stack Guidelines
|
### Step 4: Stack Guidelines
|
||||||
python3 .agents/skills/uiux-designer/scripts/search.py "<keyword>" --stack html-tailwind
|
python3 .agents/skills/uiux-designer/scripts/search.py "<keyword>" --stack html-tailwind
|
||||||
|
|
||||||
|
## Anti-AI-Design Guidelines
|
||||||
|
|
||||||
|
- **NO Centered Badges/Pills**: Do NOT place centered badges or pills (e.g. "CASPOS Lizenz-Portal" or "Ablauf") above main headings. They look like generic, low-quality AI-generated templates.
|
||||||
|
- **NO Text Gradients**: Avoid text gradients (e.g. `bg-gradient-to-r ... bg-clip-text text-transparent`) on headings. Use flat colors (like `text-white` or solid brand colors).
|
||||||
@@ -33,35 +33,45 @@ export default function AdminSettings() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
async function checkAccess() {
|
async function checkAccess() {
|
||||||
const supabase = createClient();
|
try {
|
||||||
const { data: { user } } = await supabase.auth.getUser();
|
const supabase = createClient();
|
||||||
if (!user) {
|
const { data: { user } } = await supabase.auth.getUser();
|
||||||
router.push('/auth/login');
|
if (!user) {
|
||||||
return;
|
router.push('/auth/login');
|
||||||
}
|
return;
|
||||||
const { data: userData } = await supabase
|
}
|
||||||
.from('users')
|
const { data: userData, error: userError } = await supabase
|
||||||
.select('role')
|
.from('users')
|
||||||
.eq('id', user.id)
|
.select('role')
|
||||||
.single();
|
.eq('id', user.id)
|
||||||
if (!userData || userData.role === 'verwaltung') {
|
.single();
|
||||||
router.push('/admin');
|
|
||||||
} else {
|
if (userError || !userData || userData.role === 'verwaltung') {
|
||||||
|
router.push('/admin');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const state = localStorage.getItem('demo_banner_disabled') !== 'true';
|
const state = localStorage.getItem('demo_banner_disabled') !== 'true';
|
||||||
setDemoActive(state);
|
setDemoActive(state);
|
||||||
setLoading(false);
|
|
||||||
|
|
||||||
// Load current LicServer config from DB
|
// Load current LicServer config from DB
|
||||||
const supabaseClient = createClient();
|
try {
|
||||||
const { data: licRow } = await supabaseClient
|
const { data: licRow } = await supabase
|
||||||
.from('settings')
|
.from('settings')
|
||||||
.select('licserver_base_url, licserver_api_key')
|
.select('licserver_base_url, licserver_api_key')
|
||||||
.eq('id', 'licserver')
|
.eq('id', 'licserver')
|
||||||
.single();
|
.single();
|
||||||
if (licRow) {
|
if (licRow) {
|
||||||
setLicUrl(licRow.licserver_base_url || '');
|
setLicUrl(licRow.licserver_base_url || '');
|
||||||
setLicKey(licRow.licserver_api_key || '');
|
setLicKey(licRow.licserver_api_key || '');
|
||||||
|
}
|
||||||
|
} catch (dbErr) {
|
||||||
|
console.error("Fehler beim Laden der LicServer-Einstellungen:", dbErr);
|
||||||
}
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Fehler bei checkAccess in Einstellungen:", err);
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
checkAccess();
|
checkAccess();
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export default function Datenschutz() {
|
|||||||
<div className="inline-flex p-3 bg-blue-500/10 rounded-xl text-blue-400">
|
<div className="inline-flex p-3 bg-blue-500/10 rounded-xl text-blue-400">
|
||||||
<Lock className="w-6 h-6" />
|
<Lock className="w-6 h-6" />
|
||||||
</div>
|
</div>
|
||||||
<h1 className="text-4xl font-extrabold tracking-tight bg-clip-text text-transparent bg-gradient-to-r from-white via-slate-100 to-slate-400">
|
<h1 className="text-4xl font-extrabold tracking-tight text-white">
|
||||||
Datenschutzerklärung
|
Datenschutzerklärung
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-slate-400">Informationen über die Verarbeitung Ihrer personenbezogenen Daten.</p>
|
<p className="text-slate-400">Informationen über die Verarbeitung Ihrer personenbezogenen Daten.</p>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export default function Impressum() {
|
|||||||
<div className="inline-flex p-3 bg-blue-500/10 rounded-xl text-blue-400">
|
<div className="inline-flex p-3 bg-blue-500/10 rounded-xl text-blue-400">
|
||||||
<Shield className="w-6 h-6" />
|
<Shield className="w-6 h-6" />
|
||||||
</div>
|
</div>
|
||||||
<h1 className="text-4xl font-extrabold tracking-tight bg-clip-text text-transparent bg-gradient-to-r from-white via-slate-100 to-slate-400">
|
<h1 className="text-4xl font-extrabold tracking-tight text-white">
|
||||||
Impressum
|
Impressum
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-slate-400">Angaben gemäß § 5 TMG.</p>
|
<p className="text-slate-400">Angaben gemäß § 5 TMG.</p>
|
||||||
|
|||||||
@@ -70,37 +70,7 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-slate-950 text-slate-100 overflow-hidden relative selection:bg-blue-500/30 selection:text-blue-200">
|
<div className="min-h-screen bg-slate-950 text-slate-100 overflow-hidden relative selection:bg-blue-500/30 selection:text-blue-200">
|
||||||
|
|
||||||
{/* Background Decorative Animated Blobs */}
|
|
||||||
<div className="absolute top-0 left-1/2 -translate-x-1/2 w-full max-w-7xl h-[600px] pointer-events-none -z-10 overflow-hidden">
|
|
||||||
<motion.div
|
|
||||||
animate={{
|
|
||||||
scale: [1, 1.15, 0.95, 1],
|
|
||||||
rotate: [0, 90, 180, 270, 360],
|
|
||||||
x: [0, 40, -30, 0],
|
|
||||||
y: [0, -20, 50, 0]
|
|
||||||
}}
|
|
||||||
transition={{
|
|
||||||
duration: 20,
|
|
||||||
repeat: Infinity,
|
|
||||||
ease: "easeInOut"
|
|
||||||
}}
|
|
||||||
className="absolute -top-[10%] left-[10%] w-[350px] sm:w-[500px] h-[350px] sm:h-[500px] bg-blue-600/15 blur-[120px] sm:blur-[160px] rounded-full"
|
|
||||||
/>
|
|
||||||
<motion.div
|
|
||||||
animate={{
|
|
||||||
scale: [1, 0.9, 1.1, 1],
|
|
||||||
rotate: [0, -90, -180, -270, -360],
|
|
||||||
x: [0, -30, 40, 0],
|
|
||||||
y: [0, 50, -30, 0]
|
|
||||||
}}
|
|
||||||
transition={{
|
|
||||||
duration: 25,
|
|
||||||
repeat: Infinity,
|
|
||||||
ease: "easeInOut"
|
|
||||||
}}
|
|
||||||
className="absolute -top-[5%] right-[15%] w-[300px] sm:w-[450px] h-[300px] sm:h-[450px] bg-purple-600/10 blur-[100px] sm:blur-[140px] rounded-full"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Hero Section */}
|
{/* Hero Section */}
|
||||||
<section className="w-full pt-16 pb-12 md:pt-28 md:pb-20 px-4 relative flex flex-col items-center">
|
<section className="w-full pt-16 pb-12 md:pt-28 md:pb-20 px-4 relative flex flex-col items-center">
|
||||||
@@ -110,27 +80,14 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
variants={containerVariants}
|
variants={containerVariants}
|
||||||
className="container max-w-6xl mx-auto flex flex-col items-center text-center space-y-8"
|
className="container max-w-6xl mx-auto flex flex-col items-center text-center space-y-8"
|
||||||
>
|
>
|
||||||
{/* Badge */}
|
|
||||||
<motion.div
|
|
||||||
variants={itemVariants}
|
|
||||||
className="inline-flex items-center gap-2 rounded-full bg-blue-500/10 border border-blue-500/20 px-4 py-1.5 text-xs sm:text-sm text-blue-400 font-semibold tracking-wide backdrop-blur-md shadow-[0_0_15px_rgba(59,130,246,0.1)]"
|
|
||||||
>
|
|
||||||
<motion.div
|
|
||||||
animate={{ opacity: [0.5, 1, 0.5] }}
|
|
||||||
transition={{ repeat: Infinity, duration: 2, ease: "easeInOut" }}
|
|
||||||
>
|
|
||||||
<Zap className="w-3.5 h-3.5 text-blue-400 fill-blue-400/20" />
|
|
||||||
</motion.div>
|
|
||||||
CASPOS Lizenz-Portal
|
|
||||||
</motion.div>
|
|
||||||
|
|
||||||
{/* Headline */}
|
{/* Headline */}
|
||||||
<div className="space-y-4 max-w-4xl">
|
<div className="space-y-4 max-w-4xl">
|
||||||
<motion.h1
|
<motion.h1
|
||||||
variants={itemVariants}
|
variants={itemVariants}
|
||||||
className="text-4xl font-extrabold tracking-tight sm:text-5xl md:text-6xl lg:text-7xl/tight bg-clip-text text-transparent bg-gradient-to-b from-white via-slate-100 to-slate-400"
|
className="text-4xl font-extrabold tracking-tight sm:text-5xl md:text-6xl lg:text-7xl/tight text-white"
|
||||||
>
|
>
|
||||||
CASPOS Software <span className="bg-clip-text text-transparent bg-gradient-to-r from-blue-500 via-indigo-400 to-purple-500 font-black">Lizenzen & Module</span>
|
CASPOS Software <span className="text-blue-500 font-black">Lizenzen & Module</span>
|
||||||
</motion.h1>
|
</motion.h1>
|
||||||
<motion.p
|
<motion.p
|
||||||
variants={itemVariants}
|
variants={itemVariants}
|
||||||
@@ -146,7 +103,7 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
className="flex flex-col sm:flex-row items-center justify-center gap-4 w-full max-w-md pt-4"
|
className="flex flex-col sm:flex-row items-center justify-center gap-4 w-full max-w-md pt-4"
|
||||||
>
|
>
|
||||||
<Link href="/order" className="w-full sm:w-auto">
|
<Link href="/order" className="w-full sm:w-auto">
|
||||||
<Button size="lg" className="w-full sm:w-auto h-12 px-8 text-base font-bold transition-all duration-300 hover:scale-[1.02] bg-gradient-to-r from-blue-600 to-indigo-600 hover:from-blue-500 hover:to-indigo-500 text-white shadow-[0_0_25px_rgba(37,99,235,0.25)] hover:shadow-[0_0_35px_rgba(37,99,235,0.45)] border-none rounded-xl">
|
<Button size="lg" className="w-full sm:w-auto h-12 px-8 text-base font-semibold bg-blue-600 hover:bg-blue-500 text-white border border-blue-700/50 rounded-xl transition-all duration-200">
|
||||||
Lizenz anfragen <ArrowRight className="ml-2 h-4 w-4" />
|
Lizenz anfragen <ArrowRight className="ml-2 h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
@@ -163,19 +120,17 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
variants={itemVariants}
|
variants={itemVariants}
|
||||||
className="w-full max-w-3xl pt-12"
|
className="w-full max-w-3xl pt-12"
|
||||||
>
|
>
|
||||||
<div className="relative p-6 rounded-2xl border border-slate-900/80 bg-slate-950/40 backdrop-blur-xl shadow-2xl">
|
<div className="relative p-6 rounded-2xl border border-slate-800 bg-slate-900/40 backdrop-blur-md shadow-lg">
|
||||||
{/* Card border glow decoration */}
|
<p className="text-xs font-semibold uppercase tracking-widest text-slate-500 mb-5 text-left sm:text-center px-2">
|
||||||
<div className="absolute inset-0 rounded-2xl border border-blue-500/10 pointer-events-none" />
|
|
||||||
<p className="text-xs font-bold uppercase tracking-widest text-slate-500 mb-5 text-left sm:text-center px-2">
|
|
||||||
Mein Dashboard Schnellzugriff
|
Mein Dashboard Schnellzugriff
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||||
<Link href="/my-customers" className="group">
|
<Link href="/my-customers" className="group">
|
||||||
<motion.div
|
<motion.div
|
||||||
whileHover={{ y: -4, scale: 1.01 }}
|
whileHover={{ y: -2 }}
|
||||||
whileTap={{ scale: 0.99 }}
|
whileTap={{ scale: 0.98 }}
|
||||||
className="flex items-center justify-between p-4 rounded-xl border border-slate-900 bg-slate-950/60 hover:bg-slate-900/30 hover:border-blue-500/20 transition-all duration-300"
|
className="flex items-center justify-between p-4 rounded-xl border border-slate-800 bg-slate-950 hover:bg-slate-900 hover:border-slate-700 transition-all duration-200"
|
||||||
>
|
>
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className="p-2.5 rounded-lg bg-blue-500/10 text-blue-400 group-hover:bg-blue-500/20 group-hover:text-blue-300 transition-colors">
|
<div className="p-2.5 rounded-lg bg-blue-500/10 text-blue-400 group-hover:bg-blue-500/20 group-hover:text-blue-300 transition-colors">
|
||||||
@@ -192,9 +147,9 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
|
|
||||||
<Link href="/my-orders" className="group">
|
<Link href="/my-orders" className="group">
|
||||||
<motion.div
|
<motion.div
|
||||||
whileHover={{ y: -4, scale: 1.01 }}
|
whileHover={{ y: -2 }}
|
||||||
whileTap={{ scale: 0.99 }}
|
whileTap={{ scale: 0.98 }}
|
||||||
className="flex items-center justify-between p-4 rounded-xl border border-slate-900 bg-slate-950/60 hover:bg-slate-900/30 hover:border-blue-500/20 transition-all duration-300"
|
className="flex items-center justify-between p-4 rounded-xl border border-slate-800 bg-slate-950 hover:bg-slate-900 hover:border-slate-700 transition-all duration-200"
|
||||||
>
|
>
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<div className="p-2.5 rounded-lg bg-blue-500/10 text-blue-400 group-hover:bg-blue-500/20 group-hover:text-blue-300 transition-colors">
|
<div className="p-2.5 rounded-lg bg-blue-500/10 text-blue-400 group-hover:bg-blue-500/20 group-hover:text-blue-300 transition-colors">
|
||||||
@@ -223,10 +178,7 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
<div className="absolute top-1/4 right-0 w-[400px] h-[400px] bg-indigo-600/5 blur-[120px] rounded-full -z-10 pointer-events-none" />
|
<div className="absolute top-1/4 right-0 w-[400px] h-[400px] bg-indigo-600/5 blur-[120px] rounded-full -z-10 pointer-events-none" />
|
||||||
|
|
||||||
<div className="text-center space-y-3 mb-16">
|
<div className="text-center space-y-3 mb-16">
|
||||||
<div className="inline-flex items-center gap-1.5 text-xs font-bold text-indigo-400 uppercase tracking-widest bg-indigo-500/10 border border-indigo-500/20 px-3 py-1 rounded-full">
|
<h2 className="text-3xl sm:text-4xl font-bold tracking-tight text-white">
|
||||||
<Sparkles className="w-3 h-3" />CASPOS Sites
|
|
||||||
</div>
|
|
||||||
<h2 className="text-3xl sm:text-4xl font-bold tracking-tight bg-clip-text text-transparent bg-gradient-to-r from-white via-slate-100 to-slate-400">
|
|
||||||
Workspace-Zentrale
|
Workspace-Zentrale
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-slate-400 max-w-[600px] mx-auto text-sm sm:text-base">
|
<p className="text-slate-400 max-w-[600px] mx-auto text-sm sm:text-base">
|
||||||
@@ -237,11 +189,9 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
<div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
<div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
||||||
{/* Card 1 */}
|
{/* Card 1 */}
|
||||||
<a href="https://support.teamzone.softengine.de" target="_blank" rel="noopener noreferrer"><motion.div
|
<a href="https://support.teamzone.softengine.de" target="_blank" rel="noopener noreferrer"><motion.div
|
||||||
whileHover={{ y: -6 }}
|
whileHover={{ y: -4 }}
|
||||||
className="group relative flex flex-col p-6 rounded-2xl border border-slate-900 bg-slate-950/70 hover:bg-slate-900/40 hover:border-slate-800/80 transition-all duration-300 shadow-xl overflow-hidden"
|
className="group relative flex flex-col p-6 rounded-2xl border border-slate-800 bg-slate-900/40 hover:bg-slate-900/80 hover:border-slate-700 transition-all duration-200 shadow-md overflow-hidden"
|
||||||
>
|
>
|
||||||
{/* Highlight line hover effect */}
|
|
||||||
<div className="absolute top-0 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-blue-500 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
|
|
||||||
<div className="space-y-4 relative">
|
<div className="space-y-4 relative">
|
||||||
<div className="inline-flex p-3 bg-blue-500/10 rounded-xl text-blue-400 group-hover:bg-blue-500/20 group-hover:scale-110 transition-all duration-300">
|
<div className="inline-flex p-3 bg-blue-500/10 rounded-xl text-blue-400 group-hover:bg-blue-500/20 group-hover:scale-110 transition-all duration-300">
|
||||||
<MessageSquare className="h-6 w-6" />
|
<MessageSquare className="h-6 w-6" />
|
||||||
@@ -255,11 +205,9 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
|
|
||||||
{/* Card 2 */}
|
{/* Card 2 */}
|
||||||
<a href="https://wiki.caspos.de" target="_blank" rel="noopener noreferrer"><motion.div
|
<a href="https://wiki.caspos.de" target="_blank" rel="noopener noreferrer"><motion.div
|
||||||
whileHover={{ y: -6 }}
|
whileHover={{ y: -4 }}
|
||||||
className="group relative flex flex-col p-6 rounded-2xl border border-slate-900 bg-slate-950/70 hover:bg-slate-900/40 hover:border-slate-800/80 transition-all duration-300 shadow-xl overflow-hidden"
|
className="group relative flex flex-col p-6 rounded-2xl border border-slate-800 bg-slate-900/40 hover:bg-slate-900/80 hover:border-slate-700 transition-all duration-200 shadow-md overflow-hidden"
|
||||||
>
|
>
|
||||||
{/* Highlight line hover effect */}
|
|
||||||
<div className="absolute top-0 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-indigo-500 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
|
|
||||||
<div className="space-y-4 relative">
|
<div className="space-y-4 relative">
|
||||||
<div className="inline-flex p-3 bg-indigo-500/10 rounded-xl text-indigo-400 group-hover:bg-indigo-500/20 group-hover:scale-110 transition-all duration-300">
|
<div className="inline-flex p-3 bg-indigo-500/10 rounded-xl text-indigo-400 group-hover:bg-indigo-500/20 group-hover:scale-110 transition-all duration-300">
|
||||||
<BookOpen className="h-6 w-6" />
|
<BookOpen className="h-6 w-6" />
|
||||||
@@ -273,11 +221,9 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
|
|
||||||
{/* Card 3 */}
|
{/* Card 3 */}
|
||||||
<a href="https://support.caspos.de" target="_blank" rel="noopener noreferrer"><motion.div
|
<a href="https://support.caspos.de" target="_blank" rel="noopener noreferrer"><motion.div
|
||||||
whileHover={{ y: -6 }}
|
whileHover={{ y: -4 }}
|
||||||
className="group relative flex flex-col p-6 rounded-2xl border border-slate-900 bg-slate-950/70 hover:bg-slate-900/40 hover:border-slate-800/80 transition-all duration-300 shadow-xl overflow-hidden"
|
className="group relative flex flex-col p-6 rounded-2xl border border-slate-800 bg-slate-900/40 hover:bg-slate-900/80 hover:border-slate-700 transition-all duration-200 shadow-md overflow-hidden"
|
||||||
>
|
>
|
||||||
{/* Highlight line hover effect */}
|
|
||||||
<div className="absolute top-0 left-0 w-full h-[2px] bg-gradient-to-r from-transparent via-purple-500 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500" />
|
|
||||||
<div className="space-y-4 relative">
|
<div className="space-y-4 relative">
|
||||||
<div className="inline-flex p-3 bg-purple-500/10 rounded-xl text-purple-400 group-hover:bg-purple-500/20 group-hover:scale-110 transition-all duration-300">
|
<div className="inline-flex p-3 bg-purple-500/10 rounded-xl text-purple-400 group-hover:bg-purple-500/20 group-hover:scale-110 transition-all duration-300">
|
||||||
<LifeBuoy className="h-6 w-6" />
|
<LifeBuoy className="h-6 w-6" />
|
||||||
@@ -296,17 +242,14 @@ export function HomeClient({ initialUser }: HomeClientProps) {
|
|||||||
<section className="w-full py-16 md:py-24 border-t border-slate-900 bg-slate-950/30">
|
<section className="w-full py-16 md:py-24 border-t border-slate-900 bg-slate-950/30">
|
||||||
<div className="container max-w-5xl mx-auto px-4">
|
<div className="container max-w-5xl mx-auto px-4">
|
||||||
<div className="text-center space-y-3 mb-16">
|
<div className="text-center space-y-3 mb-16">
|
||||||
<div className="inline-flex items-center gap-1.5 text-xs font-bold text-blue-400 uppercase tracking-widest bg-blue-500/10 border border-blue-500/20 px-3 py-1 rounded-full">
|
<h2 className="text-2xl sm:text-3xl font-bold tracking-tight text-center text-white">
|
||||||
<Activity className="w-3 h-3" /> Ablauf
|
|
||||||
</div>
|
|
||||||
<h2 className="text-2xl sm:text-3xl font-bold tracking-tight text-center bg-clip-text text-transparent bg-gradient-to-r from-white via-slate-200 to-slate-400">
|
|
||||||
Wie funktioniert die Bereitstellung?
|
Wie funktioniert die Bereitstellung?
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
{/* Connection line for Desktop */}
|
{/* Connection line for Desktop */}
|
||||||
<div className="hidden md:block absolute top-[28px] left-[15%] right-[15%] h-[1px] bg-gradient-to-r from-blue-500/10 via-blue-500/30 to-blue-500/10 z-0" />
|
<div className="hidden md:block absolute top-[28px] left-[15%] right-[15%] h-[1px] border-t border-dashed border-slate-800 z-0" />
|
||||||
|
|
||||||
<div className="grid gap-8 md:grid-cols-3 relative z-10">
|
<div className="grid gap-8 md:grid-cols-3 relative z-10">
|
||||||
{/* Step 1 */}
|
{/* Step 1 */}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ export function NavbarClient({ user, role = "partner" }: NavbarClientProps) {
|
|||||||
<nav className="hidden md:flex gap-6 items-center">
|
<nav className="hidden md:flex gap-6 items-center">
|
||||||
<Link
|
<Link
|
||||||
className="text-sm font-medium text-slate-300 hover:text-primary transition-colors"
|
className="text-sm font-medium text-slate-300 hover:text-primary transition-colors"
|
||||||
href="https://wiki.caspos.de"
|
href="https://support.teamzone.softengine.de"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -111,8 +111,8 @@ export function SetupWizard() {
|
|||||||
{/* Step Indicator Header */}
|
{/* Step Indicator Header */}
|
||||||
<div className="flex items-center justify-between mb-8 px-2">
|
<div className="flex items-center justify-between mb-8 px-2">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<span className="text-xl font-bold tracking-tight text-gradient bg-gradient-to-r from-blue-400 to-indigo-400">CASPOS</span>
|
<span className="text-xl font-bold tracking-tight text-blue-400">CASPOS</span>
|
||||||
<span className="text-xs px-2 py-0.5 rounded-full bg-blue-500/10 text-blue-400 border border-blue-500/20 font-medium">Initialisierung</span>
|
<span className="text-xs px-2.5 py-0.5 rounded-full bg-slate-900 text-slate-400 border border-slate-800 font-medium">Initialisierung</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex gap-1.5">
|
<div className="flex gap-1.5">
|
||||||
{[1, 2, 3].map((s) => (
|
{[1, 2, 3].map((s) => (
|
||||||
|
|||||||
Reference in New Issue
Block a user