251 lines
7.9 KiB
TypeScript
251 lines
7.9 KiB
TypeScript
import { Marquee } from '@/components/ui/marquee'
|
||
|
||
interface Partner {
|
||
short: string
|
||
name: string
|
||
sector: string
|
||
}
|
||
|
||
const partners: Partner[] = [
|
||
{ short: 'MSC', name: 'فولاد مبارکه اصفهان', sector: 'تولید · اصفهان' },
|
||
{ short: 'KSC', name: 'فولاد خوزستان', sector: 'تولید · اهواز' },
|
||
{ short: 'ESC', name: 'ذوب آهن اصفهان', sector: 'تولید · اصفهان' },
|
||
{ short: 'HSC', name: 'فولاد هرمزگان', sector: 'تولید · بندرعباس' },
|
||
{ short: 'KJK', name: 'فولاد کاوه جنوب کیش', sector: 'تولید · کیش' },
|
||
{ short: 'CMG', name: 'چادرملو', sector: 'معدن · یزد' },
|
||
{ short: 'GEG', name: 'گل گهر سیرجان', sector: 'معدن · سیرجان' },
|
||
{ short: 'IMD', name: 'ایمیدرو', sector: 'هلدینگ دولتی' },
|
||
{ short: 'MIM', name: 'وزارت صمت', sector: 'سیاستگذاری' },
|
||
{ short: 'ICC', name: 'اتاق بازرگانی ایران', sector: 'بخش خصوصی' },
|
||
{ short: 'BIM', name: 'بانک صنعت و معدن', sector: 'تأمین مالی' },
|
||
{ short: 'NDF', name: 'صندوق توسعه ملی', sector: 'سرمایهگذاری' },
|
||
]
|
||
|
||
const half = Math.ceil(partners.length / 2)
|
||
const rowA = partners.slice(0, half)
|
||
const rowB = partners.slice(half)
|
||
|
||
function PartnerCard({ p }: { p: Partner }) {
|
||
return (
|
||
<div
|
||
style={{
|
||
width: 260,
|
||
flexShrink: 0,
|
||
background: 'var(--paper)',
|
||
border: '1px solid var(--rule-thin)',
|
||
padding: '18px 20px',
|
||
display: 'flex',
|
||
alignItems: 'center',
|
||
gap: 14,
|
||
direction: 'rtl',
|
||
fontFamily: 'Vazir, sans-serif',
|
||
transition: 'border-color 160ms, background 160ms',
|
||
}}
|
||
onMouseEnter={(e) => {
|
||
e.currentTarget.style.borderColor = 'var(--ink)'
|
||
e.currentTarget.style.background = 'var(--paper-2)'
|
||
}}
|
||
onMouseLeave={(e) => {
|
||
e.currentTarget.style.borderColor = 'var(--rule-thin)'
|
||
e.currentTarget.style.background = 'var(--paper)'
|
||
}}
|
||
>
|
||
<div
|
||
style={{
|
||
width: 44,
|
||
height: 44,
|
||
background: 'var(--ink)',
|
||
color: 'var(--paper)',
|
||
display: 'flex',
|
||
alignItems: 'center',
|
||
justifyContent: 'center',
|
||
fontSize: 12,
|
||
fontWeight: 900,
|
||
letterSpacing: '0.5px',
|
||
direction: 'ltr',
|
||
fontFamily: 'ui-monospace, monospace',
|
||
flexShrink: 0,
|
||
borderTop: '2px solid var(--red)',
|
||
}}
|
||
>
|
||
{p.short}
|
||
</div>
|
||
|
||
<div style={{ minWidth: 0, flex: 1 }}>
|
||
<div
|
||
style={{
|
||
fontSize: 13,
|
||
fontWeight: 800,
|
||
color: 'var(--ink)',
|
||
letterSpacing: '-0.2px',
|
||
lineHeight: 1.3,
|
||
marginBottom: 3,
|
||
whiteSpace: 'nowrap',
|
||
overflow: 'hidden',
|
||
textOverflow: 'ellipsis',
|
||
}}
|
||
>
|
||
{p.name}
|
||
</div>
|
||
<div
|
||
style={{
|
||
fontSize: 10,
|
||
color: 'var(--ink-5)',
|
||
fontWeight: 500,
|
||
letterSpacing: '0.3px',
|
||
whiteSpace: 'nowrap',
|
||
overflow: 'hidden',
|
||
textOverflow: 'ellipsis',
|
||
}}
|
||
>
|
||
{p.sector}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
)
|
||
}
|
||
|
||
export default function PartnersSection() {
|
||
return (
|
||
<section
|
||
style={{
|
||
background: 'var(--paper-2)',
|
||
borderBottom: '2px solid var(--ink)',
|
||
position: 'relative',
|
||
overflow: 'hidden',
|
||
}}
|
||
>
|
||
<div className="max-w-7xl mx-auto px-12 pt-24 pb-20 max-md:px-5 max-md:pt-16 max-md:pb-14">
|
||
<div
|
||
style={{
|
||
display: 'grid',
|
||
gridTemplateColumns: '1fr auto',
|
||
alignItems: 'end',
|
||
gap: 32,
|
||
paddingBottom: 28,
|
||
borderBottom: '1px solid var(--rule-thin)',
|
||
marginBottom: 48,
|
||
}}
|
||
className="mq-stack max-md:grid-cols-1 max-md:gap-4"
|
||
>
|
||
<div>
|
||
<div
|
||
style={{
|
||
display: 'flex',
|
||
alignItems: 'center',
|
||
gap: 12,
|
||
marginBottom: 18,
|
||
}}
|
||
>
|
||
<div style={{ width: 32, height: 2, background: 'var(--red)' }} />
|
||
<span
|
||
style={{
|
||
fontSize: 11,
|
||
fontWeight: 700,
|
||
letterSpacing: '3px',
|
||
textTransform: 'uppercase',
|
||
color: 'var(--ink-4)',
|
||
}}
|
||
>
|
||
همراهان و مشتریان
|
||
</span>
|
||
</div>
|
||
<h2
|
||
style={{
|
||
fontSize: 'clamp(28px, 3.6vw, 48px)',
|
||
fontWeight: 900,
|
||
letterSpacing: '-1.2px',
|
||
color: 'var(--ink)',
|
||
lineHeight: 1.1,
|
||
marginBottom: 12,
|
||
}}
|
||
>
|
||
کسانی که با ما کار میکنند
|
||
</h2>
|
||
<p
|
||
style={{
|
||
fontSize: 14,
|
||
lineHeight: 1.7,
|
||
color: 'var(--ink-4)',
|
||
maxWidth: 560,
|
||
}}
|
||
>
|
||
تولیدکنندگان فولاد، شرکتهای معدنی، نهادهای سیاستگذار و
|
||
مؤسسات مالی که از گزارشهای راهبردی ما استفاده میکنند.
|
||
</p>
|
||
</div>
|
||
|
||
<span
|
||
style={{
|
||
fontSize: 11,
|
||
fontWeight: 700,
|
||
letterSpacing: '2px',
|
||
color: 'var(--ink-5)',
|
||
fontFamily: 'ui-monospace, monospace',
|
||
direction: 'ltr',
|
||
whiteSpace: 'nowrap',
|
||
paddingBottom: 4,
|
||
}}
|
||
className="max-md:hidden"
|
||
>
|
||
{partners.length.toLocaleString('fa-IR')} · NETWORK
|
||
</span>
|
||
</div>
|
||
|
||
<div
|
||
style={{
|
||
position: 'relative',
|
||
padding: '8px 0',
|
||
}}
|
||
>
|
||
<Marquee
|
||
pauseOnHover
|
||
className="py-2"
|
||
style={{ ['--duration' as never]: '38s' }}
|
||
>
|
||
{rowA.map((p) => (
|
||
<PartnerCard key={p.short} p={p} />
|
||
))}
|
||
</Marquee>
|
||
|
||
<Marquee
|
||
reverse
|
||
pauseOnHover
|
||
className="py-2 mt-3"
|
||
style={{ ['--duration' as never]: '46s' }}
|
||
>
|
||
{rowB.map((p) => (
|
||
<PartnerCard key={p.short} p={p} />
|
||
))}
|
||
</Marquee>
|
||
|
||
<div
|
||
aria-hidden="true"
|
||
style={{
|
||
position: 'absolute',
|
||
top: 0,
|
||
bottom: 0,
|
||
right: 0,
|
||
width: '18%',
|
||
background: 'linear-gradient(to left, var(--paper-2), transparent)',
|
||
pointerEvents: 'none',
|
||
}}
|
||
/>
|
||
<div
|
||
aria-hidden="true"
|
||
style={{
|
||
position: 'absolute',
|
||
top: 0,
|
||
bottom: 0,
|
||
left: 0,
|
||
width: '18%',
|
||
background: 'linear-gradient(to right, var(--paper-2), transparent)',
|
||
pointerEvents: 'none',
|
||
}}
|
||
/>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
)
|
||
}
|