Merge remote-tracking branch 'space/main'
This commit is contained in:
commit
38956bf77a
|
|
@ -4,13 +4,13 @@
|
|||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="اندیشکده فولاد ایران — مرکز مستقل تحلیل راهبردی و سیاستگذاری صنعت فولاد" />
|
||||
<meta name="description" content="اندیشکده فولاد آینده — مرکز مستقل تحلیل راهبردی و سیاستگذاری صنعت فولاد" />
|
||||
|
||||
<!-- Vazir font preloads (critical weights) -->
|
||||
<link rel="preload" href="/fonts/Vazir-Regular.woff2" as="font" type="font/woff2" crossorigin />
|
||||
<link rel="preload" href="/fonts/Vazir-Bold.woff2" as="font" type="font/woff2" crossorigin />
|
||||
|
||||
<title>اندیشکده فولاد ایران — تحلیل راهبردی صنعت فولاد</title>
|
||||
<title>اندیشکده فولاد آینده — تحلیل راهبردی صنعت فولاد</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ export function Footer() {
|
|||
lineHeight: 1.2, marginBottom: 4,
|
||||
}}
|
||||
>
|
||||
اندیشکده فولاد ایران
|
||||
اندیشکده فولاد آینده
|
||||
</div>
|
||||
<div
|
||||
style={{
|
||||
|
|
@ -115,7 +115,7 @@ export function Footer() {
|
|||
marginBottom: 20, direction: 'ltr', textAlign: 'right',
|
||||
}}
|
||||
>
|
||||
IRAN STEEL POLICY INSTITUTE
|
||||
FUTURE STEEL POLICY INSTITUTE
|
||||
</div>
|
||||
<p style={{ fontSize: 13, lineHeight: 1.75, color: 'rgba(255,255,255,0.5)', marginBottom: 20, maxWidth: 300 }}>
|
||||
مرکز مستقل تحلیل راهبردی و سیاستگذاری صنعت فولاد و فلزات کشور
|
||||
|
|
@ -183,7 +183,7 @@ export function Footer() {
|
|||
}}
|
||||
className="max-w-7xl mx-auto w-full px-12 max-md:px-5"
|
||||
>
|
||||
<span>© ۱۴۰۳ اندیشکده فولاد ایران — تمام حقوق محفوظ است</span>
|
||||
<span>© ۱۴۰۳ اندیشکده فولاد آینده — تمام حقوق محفوظ است</span>
|
||||
<div style={{ display: 'flex', gap: 18 }}>
|
||||
{['حریم خصوصی', 'شرایط استفاده', 'درگاه پرداخت', 'نقشه سایت'].map(l => (
|
||||
<a
|
||||
|
|
|
|||
|
|
@ -260,7 +260,7 @@ export default function Header() {
|
|||
}}
|
||||
className="max-md:text-[16px]"
|
||||
>
|
||||
اندیشکده فولاد ایران
|
||||
اندیشکده فولاد آینده
|
||||
</span>
|
||||
<span
|
||||
style={{
|
||||
|
|
@ -273,7 +273,7 @@ export default function Header() {
|
|||
}}
|
||||
className="max-md:hidden"
|
||||
>
|
||||
IRAN STEEL POLICY INSTITUTE
|
||||
FUTURE STEEL POLICY INSTITUTE
|
||||
</span>
|
||||
</NavLink>
|
||||
|
||||
|
|
@ -442,7 +442,7 @@ export default function Header() {
|
|||
}}
|
||||
>
|
||||
<span style={{ fontSize: 14, fontWeight: 800 }}>
|
||||
اندیشکده فولاد ایران
|
||||
اندیشکده فولاد آینده
|
||||
</span>
|
||||
<button
|
||||
aria-label="بستن منو"
|
||||
|
|
|
|||
|
|
@ -43,20 +43,20 @@
|
|||
DESIGN TOKENS
|
||||
═══════════════════════════════════════════════ */
|
||||
:root {
|
||||
--paper: #f4efe7;
|
||||
--paper-2: #ede8de;
|
||||
--paper-3: #e4ddd0;
|
||||
--ink: #1a1712;
|
||||
--ink-2: #2e2a25;
|
||||
--ink-3: #4a4540;
|
||||
--ink-4: #6b6560;
|
||||
--ink-5: #766e68;
|
||||
--ink-6: #c8c2bc;
|
||||
--rule-thin: rgba(26,23,18,0.12);
|
||||
--red: #9b1c1c;
|
||||
--red-2: #b52020;
|
||||
--amber: #92400e;
|
||||
--green-ink: #166534;
|
||||
--paper: #fafbfd;
|
||||
--paper-2: #f1f4f9;
|
||||
--paper-3: #e4eaf2;
|
||||
--ink: #0f172a;
|
||||
--ink-2: #1e293b;
|
||||
--ink-3: #334155;
|
||||
--ink-4: #64748b;
|
||||
--ink-5: #94a3b8;
|
||||
--ink-6: #cbd5e1;
|
||||
--rule-thin: rgba(15,23,42,0.10);
|
||||
--red: #dc2626;
|
||||
--red-2: #ef4444;
|
||||
--amber: #d97706;
|
||||
--green-ink: #059669;
|
||||
}
|
||||
|
||||
/* ═══════════════════════════════════════════════
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ export default function LatestNewsBentoSection() {
|
|||
<div style={{ width: 28, height: 28, background: 'var(--red)', display: 'flex', alignItems: 'center', justifyContent: 'center', color: 'white', fontSize: 11, fontWeight: 900, flexShrink: 0 }}>م</div>
|
||||
<div>
|
||||
<div style={{ fontSize: 12, fontWeight: 700, color: 'var(--ink)' }}>دکتر علی محمدی</div>
|
||||
<div style={{ fontSize: 10, color: 'var(--ink-5)' }}>مدیر ارشد پژوهش · اندیشکده فولاد</div>
|
||||
<div style={{ fontSize: 10, color: 'var(--ink-5)' }}>مدیر ارشد پژوهش · اندیشکده فولاد آینده</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import { useEffect, useRef, useState } from 'react'
|
||||
import { Link } from 'react-router-dom'
|
||||
|
||||
/* ─── Risk data ──────────────────────────────────────────── */
|
||||
|
|
@ -75,19 +74,9 @@ const LEVEL = {
|
|||
|
||||
/* ─── Section ────────────────────────────────────────────── */
|
||||
export default function RiskSection() {
|
||||
const containerRef = useRef<HTMLDivElement>(null)
|
||||
const listRef = useRef<HTMLUListElement>(null)
|
||||
const [ready, setReady] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
if (!containerRef.current || !listRef.current) return
|
||||
/* Clone all items for seamless loop */
|
||||
const original = Array.from(listRef.current.children)
|
||||
original.forEach(item => {
|
||||
listRef.current!.appendChild(item.cloneNode(true))
|
||||
})
|
||||
setReady(true)
|
||||
}, [])
|
||||
/* Duplicate items for seamless infinite loop (handled in JSX, not effect, to
|
||||
stay immune to StrictMode double-invocation that would otherwise clone twice). */
|
||||
const loopItems = [...riskItems, ...riskItems]
|
||||
|
||||
return (
|
||||
<section style={{ background: 'var(--paper)' }}>
|
||||
|
|
@ -144,7 +133,6 @@ export default function RiskSection() {
|
|||
|
||||
{/* ── Auto-scroll ticker ── */}
|
||||
<div
|
||||
ref={containerRef}
|
||||
style={{
|
||||
position: 'relative',
|
||||
overflow: 'hidden',
|
||||
|
|
@ -157,8 +145,7 @@ export default function RiskSection() {
|
|||
}}
|
||||
>
|
||||
<ul
|
||||
ref={listRef}
|
||||
className={ready ? 'animate-scroll-risk' : ''}
|
||||
className="animate-scroll-risk"
|
||||
style={{
|
||||
display: 'flex',
|
||||
gap: 20,
|
||||
|
|
@ -172,7 +159,7 @@ export default function RiskSection() {
|
|||
onMouseEnter={e => (e.currentTarget.style.animationPlayState = 'paused')}
|
||||
onMouseLeave={e => (e.currentTarget.style.animationPlayState = 'running')}
|
||||
>
|
||||
{riskItems.map((item, idx) => {
|
||||
{loopItems.map((item, idx) => {
|
||||
const cfg = LEVEL[item.level]
|
||||
return (
|
||||
<li
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ export default function Risks() {
|
|||
marginBottom: '12px',
|
||||
}}
|
||||
>
|
||||
اندیشکده فولاد ایران — پایش ریسک
|
||||
اندیشکده فولاد آینده — پایش ریسک
|
||||
</div>
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end', flexWrap: 'wrap', gap: '16px' }}>
|
||||
<h1
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ export default function Scanner() {
|
|||
marginBottom: '12px',
|
||||
}}
|
||||
>
|
||||
اندیشکده فولاد ایران — دادههای بازار
|
||||
اندیشکده فولاد آینده — دادههای بازار
|
||||
</div>
|
||||
<div
|
||||
style={{
|
||||
|
|
|
|||
|
|
@ -261,7 +261,7 @@ export default function Special() {
|
|||
fontWeight: 600,
|
||||
}}
|
||||
>
|
||||
اندیشکده فولاد ایران — پژوهشهای تخصصی
|
||||
اندیشکده فولاد آینده — پژوهشهای تخصصی
|
||||
</div>
|
||||
<h1
|
||||
style={{
|
||||
|
|
|
|||
|
|
@ -587,7 +587,7 @@ export default function Subscribe() {
|
|||
marginBottom: 16,
|
||||
}}
|
||||
>
|
||||
اندیشکده فولاد ایران
|
||||
اندیشکده فولاد آینده
|
||||
</p>
|
||||
<h2
|
||||
style={{
|
||||
|
|
|
|||
Loading…
Reference in New Issue