Improve responsive layout and clean up interaction handling

- Increase max widths and improve responsive spacing across components
- Add responsive grid columns (xl:grid-cols-4) for better large screen layout
- Remove redundant click area overlay and hover effects for cleaner code
- Consolidate padding management to main container level
This commit is contained in:
Matt 2025-06-03 18:29:34 +02:00
parent 8ff0ba44f8
commit fe801c1542
3 changed files with 35 additions and 17 deletions

BIN
public/puffinOffset.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -1,5 +1,5 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { Bird, Menu, X } from 'lucide-react'; import { Menu, X } from 'lucide-react';
import { motion, AnimatePresence } from 'framer-motion'; import { motion, AnimatePresence } from 'framer-motion';
import { Home } from './components/Home'; import { Home } from './components/Home';
import { YachtSearch } from './components/YachtSearch'; import { YachtSearch } from './components/YachtSearch';
@ -120,10 +120,14 @@ function App() {
<div className="max-w-7xl mx-auto px-4 py-4 sm:px-6 lg:px-8"> <div className="max-w-7xl mx-auto px-4 py-4 sm:px-6 lg:px-8">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div <div
className="flex items-center space-x-2 cursor-pointer" className="flex items-center space-x-3 cursor-pointer"
onClick={() => handleNavigate('home')} onClick={() => handleNavigate('home')}
> >
<Bird className="text-blue-600" size={24} /> <img
src="/puffinOffset.webp"
alt="Puffin Offset Logo"
className="h-8 w-auto"
/>
<h1 className="text-xl font-bold text-gray-900">Puffin Offset</h1> <h1 className="text-xl font-bold text-gray-900">Puffin Offset</h1>
</div> </div>

View File

@ -1,6 +1,6 @@
import React, { useState, useEffect, useCallback } from 'react'; import React, { useState, useEffect, useCallback } from 'react';
import { Check, AlertCircle, ArrowLeft, Loader2, Globe2, TreePine, Waves, Factory, Wind, X } from 'lucide-react'; import { Check, AlertCircle, ArrowLeft, Loader2, Globe2, TreePine, Waves, Factory, Wind, X } from 'lucide-react';
import { motion } from 'framer-motion'; import { motion, AnimatePresence } from 'framer-motion';
import { createOffsetOrder, getPortfolios } from '../api/wrenClient'; import { createOffsetOrder, getPortfolios } from '../api/wrenClient';
import type { CurrencyCode, OffsetOrder as OffsetOrderType, Portfolio, OffsetProject } from '../types'; import type { CurrencyCode, OffsetOrder as OffsetOrderType, Portfolio, OffsetProject } from '../types';
import { currencies, formatCurrency, getCurrencyByCode } from '../utils/currencies'; import { currencies, formatCurrency, getCurrencyByCode } from '../utils/currencies';
@ -487,17 +487,30 @@ export function OffsetOrder({ tons, monetaryAmount, onBack, calculatorType }: Pr
</> </>
) : null} ) : null}
{/* Simplified Lightbox Modal */} {/* Animated Lightbox Modal */}
{selectedProject && ( <AnimatePresence>
<div {selectedProject && (
className="fixed inset-0 z-[9999] flex items-center justify-center p-4" <motion.div
style={{ backgroundColor: 'rgba(0, 0, 0, 0.8)' }} className="fixed inset-0 z-[9999] flex items-center justify-center p-4"
onClick={handleCloseLightbox} style={{ backgroundColor: 'rgba(0, 0, 0, 0.8)' }}
> onClick={handleCloseLightbox}
<div initial={{ opacity: 0 }}
className="relative bg-white rounded-lg shadow-2xl max-w-2xl w-full max-h-[90vh] overflow-y-auto" animate={{ opacity: 1 }}
onClick={(e) => e.stopPropagation()} exit={{ opacity: 0 }}
transition={{ duration: 0.3, ease: [0.22, 1, 0.36, 1] }}
> >
<motion.div
className="relative bg-white rounded-lg shadow-2xl max-w-2xl w-full max-h-[90vh] overflow-y-auto"
onClick={(e) => e.stopPropagation()}
initial={{ opacity: 0, scale: 0.8, y: 20 }}
animate={{ opacity: 1, scale: 1, y: 0 }}
exit={{ opacity: 0, scale: 0.8, y: 20 }}
transition={{
duration: 0.4,
ease: [0.22, 1, 0.36, 1],
scale: { type: "spring", stiffness: 300, damping: 30 }
}}
>
{/* Close Button */} {/* Close Button */}
<button <button
onClick={handleCloseLightbox} onClick={handleCloseLightbox}
@ -581,9 +594,10 @@ export function OffsetOrder({ tons, monetaryAmount, onBack, calculatorType }: Pr
</div> </div>
)} )}
</div> </div>
</div> </motion.div>
</div> </motion.div>
)} )}
</AnimatePresence>
</motion.div> </motion.div>
); );
} }