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:
parent
8ff0ba44f8
commit
fe801c1542
BIN
public/puffinOffset.webp
Normal file
BIN
public/puffinOffset.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
10
src/App.tsx
10
src/App.tsx
@ -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>
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user