diff --git a/.github/workflows/deploy-esg.yml b/.github/workflows/deploy-esg.yml
new file mode 100644
index 0000000..4237279
--- /dev/null
+++ b/.github/workflows/deploy-esg.yml
@@ -0,0 +1,42 @@
+name: 🌿 Deploy CongYou ESG Website
+
+on:
+ push:
+ branches:
+ - claude/build-esg-website-a30rS
+ paths:
+ - 'esg-website/**'
+ - '.github/workflows/deploy-esg.yml'
+ workflow_dispatch:
+
+permissions:
+ contents: write
+
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+
+ - name: Install dependencies
+ working-directory: esg-website
+ run: npm install
+
+ - name: Build
+ working-directory: esg-website
+ run: npm run build
+
+ - name: Deploy to GitHub Pages
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ personal_token: ${{ secrets.DEPLOY_TOKEN }}
+ external_repository: choujame/choujame.github.io
+ publish_branch: main
+ publish_dir: ./esg-website/dist
+ commit_message: 'deploy: CongYou ESG website'
diff --git a/esg-website/.gitignore b/esg-website/.gitignore
new file mode 100644
index 0000000..9145c03
--- /dev/null
+++ b/esg-website/.gitignore
@@ -0,0 +1,4 @@
+node_modules/
+dist/
+.env
+.DS_Store
diff --git a/esg-website/index.html b/esg-website/index.html
new file mode 100644
index 0000000..fa9deb3
--- /dev/null
+++ b/esg-website/index.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+ 琮祐企業 — CongYou ESG | 石頭紙系列
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/esg-website/package.json b/esg-website/package.json
new file mode 100644
index 0000000..298b9ff
--- /dev/null
+++ b/esg-website/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "congyou-esg",
+ "version": "1.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "framer-motion": "^11.3.0",
+ "lucide-react": "^0.400.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-react": "^4.3.1",
+ "autoprefixer": "^10.4.19",
+ "postcss": "^8.4.39",
+ "tailwindcss": "^3.4.4",
+ "vite": "^5.3.1"
+ }
+}
diff --git a/esg-website/postcss.config.js b/esg-website/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/esg-website/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/esg-website/public/images/products/bio-bag.jpg b/esg-website/public/images/products/bio-bag.jpg
new file mode 100644
index 0000000..8a82a63
Binary files /dev/null and b/esg-website/public/images/products/bio-bag.jpg differ
diff --git a/esg-website/public/images/products/box.jpg b/esg-website/public/images/products/box.jpg
new file mode 100644
index 0000000..310a8e8
Binary files /dev/null and b/esg-website/public/images/products/box.jpg differ
diff --git a/esg-website/public/images/products/buffer.jpg b/esg-website/public/images/products/buffer.jpg
new file mode 100644
index 0000000..3e629b0
Binary files /dev/null and b/esg-website/public/images/products/buffer.jpg differ
diff --git a/esg-website/public/images/products/security-bag.jpg b/esg-website/public/images/products/security-bag.jpg
new file mode 100644
index 0000000..ed5cc41
Binary files /dev/null and b/esg-website/public/images/products/security-bag.jpg differ
diff --git a/esg-website/public/images/products/tableware.jpg b/esg-website/public/images/products/tableware.jpg
new file mode 100644
index 0000000..0413912
Binary files /dev/null and b/esg-website/public/images/products/tableware.jpg differ
diff --git a/esg-website/public/images/products/vest-bag.jpg b/esg-website/public/images/products/vest-bag.jpg
new file mode 100644
index 0000000..37f5efd
Binary files /dev/null and b/esg-website/public/images/products/vest-bag.jpg differ
diff --git a/esg-website/src/App.jsx b/esg-website/src/App.jsx
new file mode 100644
index 0000000..63d15d0
--- /dev/null
+++ b/esg-website/src/App.jsx
@@ -0,0 +1,40 @@
+import { LanguageProvider } from './context/LanguageContext'
+import ScrollProgress from './components/ScrollProgress'
+import BackToTop from './components/BackToTop'
+import Navbar from './components/Navbar'
+import Hero from './components/Hero'
+import DataDashboard from './components/DataDashboard'
+import IndustrySolutions from './components/IndustrySolutions'
+import Features from './components/Features'
+import ProductTabs from './components/ProductTabs'
+import ComparisonTable from './components/ComparisonTable'
+import ESGVision from './components/ESGVision'
+import FAQ from './components/FAQ'
+import Certification from './components/Certification'
+import ContactForm from './components/ContactForm'
+import Footer from './components/Footer'
+
+export default function App() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/esg-website/src/components/BackToTop.jsx b/esg-website/src/components/BackToTop.jsx
new file mode 100644
index 0000000..03ece65
--- /dev/null
+++ b/esg-website/src/components/BackToTop.jsx
@@ -0,0 +1,33 @@
+import { useState, useEffect } from 'react'
+import { motion, AnimatePresence } from 'framer-motion'
+import { ArrowUp } from 'lucide-react'
+
+export default function BackToTop() {
+ const [show, setShow] = useState(false)
+
+ useEffect(() => {
+ const fn = () => setShow(window.scrollY > 600)
+ window.addEventListener('scroll', fn, { passive: true })
+ return () => window.removeEventListener('scroll', fn)
+ }, [])
+
+ return (
+
+ {show && (
+ window.scrollTo({ top: 0, behavior: 'smooth' })}
+ className="fixed bottom-8 right-8 z-40 w-11 h-11 bg-forest text-white rounded-full flex items-center justify-center shadow-xl shadow-forest/25 hover:bg-forest-dark transition-colors duration-200"
+ aria-label="Back to top"
+ >
+
+
+ )}
+
+ )
+}
diff --git a/esg-website/src/components/Certification.jsx b/esg-website/src/components/Certification.jsx
new file mode 100644
index 0000000..89ba7df
--- /dev/null
+++ b/esg-website/src/components/Certification.jsx
@@ -0,0 +1,129 @@
+import { motion } from 'framer-motion'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+const certs = [
+ { abbr: 'SGS', name: 'SGS', desc: { zh: '國際品質驗證', en: 'International Quality' } },
+ { abbr: 'FDA', name: 'FDA', desc: { zh: '美國食品安全', en: 'US Food Safety' } },
+ { abbr: 'ISO\n14001', name: 'ISO 14001', desc: { zh: '環境管理系統', en: 'Environmental Mgmt' } },
+ { abbr: 'RoHS', name: 'RoHS', desc: { zh: '歐盟有害物質限制', en: 'EU Hazardous Restriction' } },
+ { abbr: 'CE', name: 'CE', desc: { zh: '歐盟合規標誌', en: 'EU Conformity Mark' } },
+ { abbr: '環保\n標章', name: { zh: '台灣環保標章', en: 'Taiwan Eco Label' }, desc: { zh: '通過環保署認證', en: 'EPA Certified' } },
+ { abbr: 'Carbon\nFP', name: { zh: '碳足跡標籤', en: 'Carbon Footprint' }, desc: { zh: 'Carbon Footprint Label', en: 'Carbon Footprint Label' } },
+ { abbr: 'BSCI', name: 'BSCI', desc: { zh: '商業社會責任', en: 'Business Social Compliance' } },
+]
+
+const partners = [
+ { name: '鴻海集團', en: 'Foxconn' },
+ { name: '統一企業', en: 'Uni-President' },
+ { name: '全聯福利中心', en: 'PX Mart' },
+ { name: '家樂福', en: 'Carrefour' },
+ { name: '順豐速運', en: 'SF Express' },
+ { name: 'MUJI', en: '無印良品' },
+ { name: '博客來', en: 'Books.com.tw' },
+ { name: 'Shopee', en: '蝦皮購物' },
+ { name: 'DHL', en: '敦豪快遞' },
+ { name: 'IKEA', en: '宜家家居' },
+]
+
+const COPY = {
+ zh: {
+ eyebrow: 'Certifications',
+ title: '國際認證標章',
+ subtitle: '通過全球最嚴格第三方機構驗證,品質與環保雙重保障。',
+ partnersLabel: 'Trusted Partners',
+ partnersTitle: '全球品牌信賴夥伴',
+ },
+ en: {
+ eyebrow: 'Certifications',
+ title: 'Certifications',
+ subtitle: 'Verified by the world\'s most rigorous third-party institutions — quality and sustainability guaranteed.',
+ partnersLabel: 'Trusted Partners',
+ partnersTitle: 'Trusted by Global Brands',
+ },
+}
+
+const STATS = {
+ zh: [{ v: '8+', l: '國際認證' }, { v: '15+', l: '年產業經驗' }, { v: '30+', l: '服務國家' }, { v: '500+', l: '合作企業' }],
+ en: [{ v: '8+', l: 'Certifications' }, { v: '15+', l: 'Years Experience' }, { v: '30+', l: 'Countries Served' }, { v: '500+', l: 'Partners' }],
+}
+
+function CertCard({ cert, lang }) {
+ const name = typeof cert.name === 'object' ? cert.name[lang] : cert.name
+ const desc = cert.desc[lang]
+ return (
+
+ )
+}
+
+export default function Certification() {
+ const { lang } = useLanguage()
+ const c = COPY[lang]
+ const stats = STATS[lang]
+ const duplicated = [...certs, ...certs]
+
+ return (
+
+
+
+ {c.eyebrow}
+ {c.title}
+ {c.subtitle}
+
+
+
+ {/* Infinite cert scroll */}
+
+
+
+
+ {duplicated.map((cert, i) => (
+
+ ))}
+
+
+
+ {/* Partner logos */}
+
+
+ {c.partnersLabel}
+ {c.partnersTitle}
+
+
+
+ {partners.map((p) => (
+
+
{lang === 'zh' ? p.name : p.en}
+
{lang === 'zh' ? p.en : p.name}
+
+ ))}
+
+
+
+
+
+ {stats.map((s) => (
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/esg-website/src/components/ComparisonTable.jsx b/esg-website/src/components/ComparisonTable.jsx
new file mode 100644
index 0000000..351c9be
--- /dev/null
+++ b/esg-website/src/components/ComparisonTable.jsx
@@ -0,0 +1,322 @@
+import { useState } from 'react'
+import { Check, X } from 'lucide-react'
+import { motion, AnimatePresence } from 'framer-motion'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+function Good({ text }) {
+ return (
+
+ )
+}
+function Bad({ text }) {
+ return (
+
+ )
+}
+
+const PRODUCTS = {
+ zh: [
+ { key: 'stonebox', label: '石頭紙箱' },
+ { key: 'secbag', label: '二次循環破壞袋' },
+ { key: 'vestbag', label: '背心袋' },
+ { key: 'buffer', label: '緩衝材' },
+ { key: 'tableware', label: 'PGT餐具' },
+ { key: 'biobag', label: '環保生物袋' },
+ ],
+ en: [
+ { key: 'stonebox', label: 'Stone Paper Box' },
+ { key: 'secbag', label: 'Recycled Security Bag' },
+ { key: 'vestbag', label: 'Vest Bag' },
+ { key: 'buffer', label: 'Buffer Material' },
+ { key: 'tableware', label: 'PGT Tableware' },
+ { key: 'biobag', label: 'Eco Bio Bag' },
+ ],
+}
+
+const DATA = {
+ zh: {
+ stonebox: {
+ col1: '傳統木漿紙箱', col2: '琮祐石頭紙箱',
+ rows: [
+ { category: '耐水性', bad: '遇水即軟損', good: '浸水 72h 不損' },
+ { category: '抗凍性', bad: '低溫脆裂', good: '抗凍達 -20°C' },
+ { category: '抗撕裂強度', bad: '一般(易撕裂)', good: '高強,耐衝擊' },
+ { category: '碳排放量', bad: '高(砍伐+製漿)', good: '減少約 67%' },
+ { category: '製程用水', bad: '大量用水,排放廢液', good: '無需用水,零廢液' },
+ { category: '木材使用', bad: '每噸耗費 1.2 棵樹', good: '完全不使用木漿' },
+ { category: '使用壽命', bad: '潮濕後即損耗', good: '耐用,可多次利用' },
+ { category: '回收再利用', bad: '潮濕後無法回收', good: '100% 可回收' },
+ { category: '毒素含量', bad: '可能含螢光增白劑', good: '無毒,零有害物質' },
+ { category: '食品安全', bad: '不建議直接接觸食品', good: 'FDA 食品接觸認證' },
+ { category: '環保認證', bad: '通常無', good: 'SGS · FDA · ISO 14001' },
+ ],
+ },
+ secbag: {
+ col1: '一般塑膠快遞袋', col2: '二次循環破壞袋',
+ rows: [
+ { category: '可重複使用', bad: '單次使用即棄', good: '設計支援兩次封口使用' },
+ { category: '防竄改設計', bad: '無破壞痕跡,安全性低', good: '開封留痕,防偽防竄改' },
+ { category: '退換貨適用', bad: '需另備退貨包材', good: '同一袋完成出貨與退貨' },
+ { category: '生物分解性', bad: '數百年不分解', good: '180 天自然分解' },
+ { category: '微塑料殘留', bad: '分解後殘留微塑料', good: '無微塑料,零殘留' },
+ { category: '防水性', bad: '標準防水', good: '高強度防水防撕裂' },
+ { category: '碳足跡', bad: '石化原料,高碳排', good: '可分解配方,低碳排' },
+ { category: '環保認證', bad: '通常無', good: 'SGS 生物分解認證' },
+ ],
+ },
+ vestbag: {
+ col1: '傳統 PE 塑膠袋', col2: '琮祐背心袋',
+ rows: [
+ { category: '生物分解性', bad: '數百年不分解', good: '堆肥環境 180 天分解' },
+ { category: '微塑料殘留', bad: '分解後殘留微塑料', good: '無微塑料,零殘留' },
+ { category: '承重能力', bad: '一般(易撕裂)', good: '標準款 5–8 kg' },
+ { category: '碳足跡', bad: '石化原料,高碳排', good: '生物基材料,低碳排' },
+ { category: '法規合規', bad: '限塑政策限制使用', good: '符合台灣環保署認證' },
+ { category: '外觀質感', bad: '普通塑膠質感', good: '外觀同等,質感提升' },
+ { category: '可印刷性', bad: '一般印刷適性', good: '環保水性油墨印刷' },
+ { category: '環保認證', bad: '通常無', good: '台灣環保署可分解認證' },
+ ],
+ },
+ buffer: {
+ col1: '保麗龍(EPS)', col2: '琮祐緩衝材',
+ rows: [
+ { category: '防震吸收', bad: '尚可,易碎成小粒', good: '達 ISTA 測試標準' },
+ { category: '可壓縮性', bad: '體積固定,佔倉儲空間', good: '可壓縮,節省 60% 倉儲' },
+ { category: '生物分解性', bad: '500 年以上不分解', good: '90–180 天堆肥分解' },
+ { category: '白色污染', bad: '碎裂後造成嚴重污染', good: '無碎屑,零白色污染' },
+ { category: '重量', bad: '輕但體積大', good: '更輕,降低運輸成本' },
+ { category: '回收再利用', bad: '回收率極低', good: '可進入回收體系' },
+ { category: '碳足跡', bad: '石化製程,高碳排', good: '低碳排製程' },
+ { category: '環保認證', bad: '通常無', good: 'SGS · ISTA 認證' },
+ ],
+ },
+ tableware: {
+ col1: '美耐皿(Melamine)餐具', col2: 'PGT 環保餐具',
+ rows: [
+ { category: '三聚氰胺釋放', bad: '受損或高溫時釋放三聚氰胺', good: '不含三聚氰胺,零釋放風險' },
+ { category: '耐熱溫度', bad: '超過 70°C 加速溶出毒素', good: '耐熱達 120°C,安全微波' },
+ { category: '食品安全', bad: '受損後食安疑慮高', good: 'FDA 食品接觸認證' },
+ { category: '重量', bad: '較重(含填充料)', good: '比不鏽鋼輕,降低搬運成本' },
+ { category: '生物分解性', bad: '數百年不分解', good: '堆肥環境 180 天分解' },
+ { category: '毒素含量', bad: '可能含螢光劑、塑化劑', good: '無毒,零有害物質' },
+ { category: '外觀質感', bad: '一般塑料質感', good: '植物纖維質感,品牌感強' },
+ { category: '環保認證', bad: '通常無', good: 'SGS · FDA 認證' },
+ ],
+ },
+ biobag: {
+ col1: '一般塑膠袋', col2: '琮祐環保生物袋',
+ rows: [
+ { category: '耐熱溫度', bad: '約 60–80°C(易變形)', good: '耐熱達 120°C,可蒸煮使用' },
+ { category: '生物分解性', bad: '數百年不分解', good: '工業堆肥 90–180 天分解' },
+ { category: '微塑料殘留', bad: '分解後殘留微塑料', good: '還原為水、CO₂、有機質' },
+ { category: '外觀與功能', bad: '普通塑膠', good: '外觀功能相同,更環保' },
+ { category: '承重能力', bad: '一般', good: '相同承重,不妥協性能' },
+ { category: '法規合規', bad: '受限塑政策限制', good: '符合 EN 13432 歐盟標準' },
+ { category: '可印刷性', bad: '一般印刷適性', good: '環保水性油墨,不影響分解' },
+ { category: '碳足跡', bad: '石化原料,高碳排', good: '生物基原料,低碳排' },
+ { category: '環保認證', bad: '通常無', good: 'EN 13432 · SGS 認證' },
+ ],
+ },
+ },
+ en: {
+ stonebox: {
+ col1: 'Traditional Cardboard', col2: 'CongYou Stone Paper Box',
+ rows: [
+ { category: 'Water Resistance', bad: 'Collapses when wet', good: '72h submersion — no damage' },
+ { category: 'Frost Resistance', bad: 'Brittle in low temp.', good: 'Frost-proof to -20°C' },
+ { category: 'Tear Strength', bad: 'Average (tears easily)', good: 'High strength, impact resistant' },
+ { category: 'Carbon Emissions', bad: 'High (logging + pulping)', good: '~67% reduction' },
+ { category: 'Process Water', bad: 'High water use, effluent', good: 'Zero water, zero effluent' },
+ { category: 'Wood Use', bad: '1.2 trees per tonne', good: 'Zero wood pulp' },
+ { category: 'Durability', bad: 'Degrades when damp', good: 'Durable, multi-use' },
+ { category: 'Recyclability', bad: 'Not recyclable when wet', good: '100% recyclable' },
+ { category: 'Toxins', bad: 'May contain fluorescent agents', good: 'Non-toxic, zero hazardous' },
+ { category: 'Food Safety', bad: 'Not for direct food contact', good: 'FDA food-contact certified' },
+ { category: 'Eco Certifications', bad: 'Typically none', good: 'SGS · FDA · ISO 14001' },
+ ],
+ },
+ secbag: {
+ col1: 'Standard Plastic Mailer', col2: 'Recycled Security Bag',
+ rows: [
+ { category: 'Reusability', bad: 'Single-use only', good: 'Two-seal design — use twice' },
+ { category: 'Tamper Evidence', bad: 'No tamper trace, low security', good: 'Visible opening marks, anti-tamper' },
+ { category: 'Return Logistics', bad: 'Separate return packaging needed', good: 'One bag for outbound + return' },
+ { category: 'Biodegradability', bad: 'Hundreds of years to degrade', good: 'Fully degrades in 180 days' },
+ { category: 'Microplastics', bad: 'Leaves microplastic residue', good: 'Zero microplastics' },
+ { category: 'Water Resistance', bad: 'Standard waterproofing', good: 'High-strength waterproof & tear-resistant' },
+ { category: 'Carbon Footprint', bad: 'Petrochemical-based, high carbon', good: 'Biodegradable formula, low carbon' },
+ { category: 'Eco Certifications', bad: 'Typically none', good: 'SGS biodegradability certified' },
+ ],
+ },
+ vestbag: {
+ col1: 'Traditional PE Plastic Bag', col2: 'CongYou Vest Bag',
+ rows: [
+ { category: 'Biodegradability', bad: 'Hundreds of years to degrade', good: 'Compost-degrades in 180 days' },
+ { category: 'Microplastics', bad: 'Leaves microplastic residue', good: 'Zero microplastics' },
+ { category: 'Load Capacity', bad: 'Average (tears easily)', good: 'Standard: 5–8 kg' },
+ { category: 'Carbon Footprint', bad: 'Petrochemical-based, high carbon', good: 'Bio-based materials, low carbon' },
+ { category: 'Regulatory', bad: 'Restricted under plastic bans', good: 'Taiwan EPA certified compliant' },
+ { category: 'Appearance', bad: 'Ordinary plastic feel', good: 'Equivalent look, elevated feel' },
+ { category: 'Printability', bad: 'Standard ink compatibility', good: 'Eco water-based ink printing' },
+ { category: 'Eco Certifications', bad: 'Typically none', good: 'Taiwan EPA biodegradable cert.' },
+ ],
+ },
+ buffer: {
+ col1: 'EPS (Styrofoam)', col2: 'CongYou Buffer Material',
+ rows: [
+ { category: 'Shock Absorption', bad: 'Adequate but crumbles', good: 'ISTA test standard compliant' },
+ { category: 'Compressibility', bad: 'Fixed volume, high storage cost', good: 'Compressible — 60% less storage' },
+ { category: 'Biodegradability', bad: '500+ years to degrade', good: 'Compost-degrades in 90–180 days' },
+ { category: 'White Pollution', bad: 'Crumbles into persistent pellets', good: 'No fragments, zero white pollution' },
+ { category: 'Weight', bad: 'Light but very bulky', good: 'Lighter, lower shipping cost' },
+ { category: 'Recyclability', bad: 'Extremely low recycle rate', good: 'Compatible with recycling streams' },
+ { category: 'Carbon Footprint', bad: 'Petrochemical process, high CO₂', good: 'Low-carbon manufacturing' },
+ { category: 'Eco Certifications', bad: 'Typically none', good: 'SGS · ISTA certified' },
+ ],
+ },
+ tableware: {
+ col1: 'Melamine Tableware', col2: 'PGT Eco Tableware',
+ rows: [
+ { category: 'Melamine Release', bad: 'Releases melamine when damaged or heated', good: 'No melamine — zero release risk' },
+ { category: 'Heat Resistance', bad: 'Accelerates toxin leaching above 70°C', good: 'Safe up to 120°C, microwave-safe' },
+ { category: 'Food Safety', bad: 'High food-safety risk when damaged', good: 'FDA food-contact certified' },
+ { category: 'Weight', bad: 'Heavy (filler-loaded)', good: 'Lighter than stainless steel' },
+ { category: 'Biodegradability', bad: 'Hundreds of years to degrade', good: 'Compost-degrades in 180 days' },
+ { category: 'Toxins', bad: 'May contain fluorescent agents', good: 'Non-toxic, zero hazardous' },
+ { category: 'Appearance', bad: 'Standard plastic aesthetic', good: 'Plant-fiber feel, premium look' },
+ { category: 'Eco Certifications', bad: 'Typically none', good: 'SGS · FDA certified' },
+ ],
+ },
+ biobag: {
+ col1: 'Standard Plastic Bag', col2: 'CongYou Eco Bio Bag',
+ rows: [
+ { category: 'Heat Resistance', bad: '60–80°C (deforms easily)', good: 'Heat-resistant to 120°C — steam-safe' },
+ { category: 'Biodegradability', bad: 'Hundreds of years to degrade', good: 'Industrial compost: 90–180 days' },
+ { category: 'Microplastics', bad: 'Leaves microplastic residue', good: 'Returns to water, CO₂ & organics' },
+ { category: 'Appearance & Use', bad: 'Standard plastic', good: 'Same look & function, eco-friendly' },
+ { category: 'Load Capacity', bad: 'Standard', good: 'Same capacity, no trade-off' },
+ { category: 'Regulatory', bad: 'Restricted under plastic bans', good: 'EN 13432 EU standard compliant' },
+ { category: 'Printability', bad: 'Standard ink compatibility', good: 'Eco ink — biodegradability intact' },
+ { category: 'Carbon Footprint', bad: 'Petrochemical-based, high carbon', good: 'Bio-based, low carbon' },
+ { category: 'Eco Certifications', bad: 'Typically none', good: 'EN 13432 · SGS certified' },
+ ],
+ },
+ },
+}
+
+const COPY = {
+ zh: {
+ eyebrow: 'B2B Performance Comparison',
+ title: '規格對比',
+ subtitle: '選擇產品,比較傳統包材與琮祐環保方案的實際差異。',
+ col0: '比較項目',
+ note: '* 數據來源:SGS 第三方獨立檢測報告 · 琮祐企業內部研究數據(2024)',
+ },
+ en: {
+ eyebrow: 'B2B Performance Comparison',
+ title: 'Performance Comparison',
+ subtitle: 'Select a product to compare traditional packaging against CongYou eco solutions.',
+ col0: 'Criteria',
+ note: '* Source: SGS third-party test reports · CongYou internal research (2024)',
+ },
+}
+
+export default function ComparisonTable() {
+ const { lang } = useLanguage()
+ const c = COPY[lang]
+ const products = PRODUCTS[lang]
+ const [activeKey, setActiveKey] = useState('stonebox')
+
+ const current = DATA[lang][activeKey]
+
+ return (
+
+
+
+ {c.eyebrow}
+ {c.title}
+ {c.subtitle}
+
+
+ {/* 產品 Tab */}
+
+
+ {products.map((p) => (
+ setActiveKey(p.key)}
+ className={`shrink-0 px-4 py-2 rounded-full text-xs font-light transition-all duration-200 border ${
+ activeKey === p.key
+ ? 'bg-forest text-white border-forest'
+ : 'bg-white text-graphite border-gray-200 hover:border-forest/40 hover:text-forest'
+ }`}
+ >
+ {p.label}
+
+ ))}
+
+
+
+ {/* 對比表 */}
+
+
+
+ {/* 表頭 */}
+
+
+ {/* 資料列 */}
+ {current.rows.map((row, i) => (
+
+
+ {row.category}
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+
+ {c.note}
+
+
+
+ )
+}
diff --git a/esg-website/src/components/ContactForm.jsx b/esg-website/src/components/ContactForm.jsx
new file mode 100644
index 0000000..8c9ed2b
--- /dev/null
+++ b/esg-website/src/components/ContactForm.jsx
@@ -0,0 +1,226 @@
+import { useState } from 'react'
+import { motion, AnimatePresence } from 'framer-motion'
+import { MapPin, Mail, Phone, CheckCircle, ArrowRight, Loader2 } from 'lucide-react'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+const COPY = {
+ zh: {
+ eyebrow: 'Sample Request',
+ title: '索取樣品',
+ titleSub: '預約專業諮詢',
+ subtitle: '無論您是品牌端、代理商或通路商,歡迎申請免費樣品,或與我們的 ESG 顧問共同規劃最適合您的永續包裝解決方案。',
+ usps: ['免費提供樣品,快遞到府', '1–2 個工作天回覆報價', '支援 ODM / OEM 訂製服務', '提供完整 SGS / FDA 檢測報告'],
+ infoLabels: ['公司地址', '電子郵件', '聯絡電話'],
+ infoValues: ['台灣 · 台北市內湖區', 'info@congyou-esg.com', '+886 2 XXXX-XXXX'],
+ fields: { name: '聯絡人姓名', company: '公司 / 品牌名稱', email: '電子信箱', phone: '聯絡電話', items: '申請品項', addItem: '+ 新增品項', removeItem: '移除', quantityLabel: '數量(件)', message: '補充說明 / 規格需求', submit: '提交樣品申請' },
+ ph: { name: '您的姓名', company: '公司或品牌名稱', email: 'your@company.com', phone: '+886 xxx-xxx-xxx', product: '請選擇產品類別', quantity: '例:5', message: '請描述需求,例如:使用場景、尺寸、年用量、是否需要訂製印刷等...' },
+ subjects: ['石頭紙箱', '二次循環破壞袋', '背心袋', '緩衝材', 'PGT餐具', '環保生物袋', 'ODM / OEM 客製服務', '代理合作洽談', '企業 ESG 解決方案', '其他'],
+ success: { title: '樣品申請已送出!', body: '感謝您!我們的業務顧問將於 1–2 個工作天內聯繫確認寄送細節。', again: '再次申請' },
+ privacy: '送出即表示您同意我們的隱私政策。您的資訊僅用於業務聯繫。',
+ },
+ en: {
+ eyebrow: 'Sample Request',
+ title: 'Request a Sample',
+ titleSub: 'Book a Consultation',
+ subtitle: 'Whether you\'re a brand owner, distributor, or retailer — request your free sample or consult with our ESG team to design your sustainable packaging strategy.',
+ usps: ['Free sample, shipped to your door', 'Quote within 1–2 business days', 'ODM / OEM customization available', 'Full SGS / FDA test reports provided'],
+ infoLabels: ['Address', 'Email', 'Phone'],
+ infoValues: ['Taipei, Taiwan', 'info@congyou-esg.com', '+886 2 XXXX-XXXX'],
+ fields: { name: 'Contact Name', company: 'Company / Brand', email: 'Email Address', phone: 'Phone Number', items: 'Sample Items', addItem: '+ Add Item', removeItem: 'Remove', quantityLabel: 'Qty (pcs)', message: 'Additional Notes', submit: 'Submit Sample Request' },
+ ph: { name: 'Your name', company: 'Company or brand name', email: 'your@company.com', phone: '+1 xxx-xxx-xxxx', product: 'Select a product', quantity: 'e.g. 5', message: 'Describe your requirements — use case, dimensions, annual volume, custom print needs, etc.' },
+ subjects: ['Stone Paper Box', 'Recycled Security Bag', 'Vest Bag', 'Buffer Material', 'PGT Tableware', 'Eco Bio Bag', 'ODM / OEM Custom Service', 'Distribution Partnership', 'Enterprise ESG Solution', 'Other'],
+ success: { title: 'Request Submitted!', body: 'Thank you! Our sales consultant will contact you within 1–2 business days to confirm shipping details.', again: 'Submit Another' },
+ privacy: 'By submitting, you agree to our privacy policy. Your info is used for business contact only.',
+ },
+}
+
+const SHEET_URL = 'https://script.google.com/macros/s/AKfycbw4sbJEWaGXYdKHlh0Znb-j95FO4uR2RRuy5QpQ4fG2WrQ9XnX8cxNIG0V92ixRllW67w/exec'
+
+const infoIcons = [MapPin, Mail, Phone]
+const inputClass = 'w-full px-4 py-3 rounded-xl border border-gray-200 bg-white text-sm text-gray-800 font-light placeholder:text-gray-300 focus:outline-none focus:border-forest/40 focus:ring-2 focus:ring-forest/10 transition-all duration-200'
+
+function Field({ label, required, children }) {
+ return (
+
+
+ {label}{required && * }
+
+ {children}
+
+ )
+}
+
+export default function ContactForm() {
+ const { lang } = useLanguage()
+ const c = COPY[lang]
+ const [submitted, setSubmitted] = useState(false)
+ const [submitting, setSubmitting] = useState(false)
+ const [form, setForm] = useState({ name: '', company: '', email: '', phone: '', items: [{ product: '', qty: '' }], message: '' })
+
+ const update = (k) => (e) => setForm((f) => ({ ...f, [k]: e.target.value }))
+ const addItem = () => setForm(f => ({ ...f, items: [...f.items, { product: '', qty: '' }] }))
+ const removeItem = (i) => setForm(f => ({ ...f, items: f.items.filter((_, idx) => idx !== i) }))
+ const updateItem = (i, key) => (e) => setForm(f => ({ ...f, items: f.items.map((item, idx) => idx === i ? { ...item, [key]: e.target.value } : item) }))
+
+ const handleSubmit = async (e) => {
+ e.preventDefault()
+ setSubmitting(true)
+ const filledItems = form.items.filter(it => it.product)
+ try {
+ await fetch(SHEET_URL, {
+ method: 'POST',
+ headers: { 'Content-Type': 'text/plain' },
+ body: JSON.stringify({
+ timestamp: new Date().toLocaleString('zh-TW', { timeZone: 'Asia/Taipei' }),
+ name: form.name,
+ company: form.company,
+ email: form.email,
+ phone: form.phone,
+ items: filledItems.map(it => ({ product: it.product, qty: it.qty || '' })),
+ message: form.message,
+ }),
+ })
+ } catch (_) {}
+ if (typeof window.gtag === 'function') {
+ window.gtag('event', 'form_submission', {
+ event_category: 'lead',
+ event_label: filledItems.map(it => it.product).join(', '),
+ value: filledItems.length,
+ })
+ }
+ setSubmitting(false)
+ setSubmitted(true)
+ }
+
+ return (
+
+ )
+}
diff --git a/esg-website/src/components/DataDashboard.jsx b/esg-website/src/components/DataDashboard.jsx
new file mode 100644
index 0000000..14be715
--- /dev/null
+++ b/esg-website/src/components/DataDashboard.jsx
@@ -0,0 +1,179 @@
+import { useRef, useEffect, useState } from 'react'
+import { useInView } from 'framer-motion'
+import { Trees, Wind, Award, Users } from 'lucide-react'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+function Counter({ to, suffix = '', duration = 2.5 }) {
+ const ref = useRef(null)
+ const inView = useInView(ref, { once: true, margin: '-40px' })
+ const [val, setVal] = useState(0)
+
+ useEffect(() => {
+ if (!inView) return
+ let rafId
+ const startTime = performance.now()
+ const tick = (now) => {
+ const t = Math.min((now - startTime) / (duration * 1000), 1)
+ setVal(Math.round(to * (1 - Math.pow(1 - t, 4))))
+ if (t < 1) rafId = requestAnimationFrame(tick)
+ }
+ rafId = requestAnimationFrame(tick)
+ return () => cancelAnimationFrame(rafId)
+ }, [inView, to, duration])
+
+ return {val.toLocaleString()}{suffix}
+}
+
+const STATS = {
+ zh: [
+ { Icon: Trees, value: 20000, suffix: '+', unit: '棵 / 年', label: '保護樹木', desc: '等效保護成年樹木數量' },
+ { Icon: Wind, value: 8500, suffix: '噸', unit: '/ 年', label: 'CO₂ 減量', desc: '相較傳統紙箱年均減碳' },
+ { Icon: Award, value: 12, suffix: '+', unit: '項認證', label: '國際認證', desc: 'SGS · FDA · ISO · CE' },
+ { Icon: Users, value: 500, suffix: '+', unit: '全球夥伴', label: '合作企業', desc: '橫跨 30+ 個國家與地區' },
+ ],
+ en: [
+ { Icon: Trees, value: 20000, suffix: '+', unit: 'trees / yr', label: 'Trees Saved', desc: 'Equivalent mature trees annually' },
+ { Icon: Wind, value: 8500, suffix: 't', unit: '/ yr', label: 'CO₂ Reduced', desc: 'vs. traditional packaging' },
+ { Icon: Award, value: 12, suffix: '+', unit: 'certifications', label: 'Certified', desc: 'SGS · FDA · ISO · CE' },
+ { Icon: Users, value: 500, suffix: '+', unit: 'global partners', label: 'Partners', desc: 'Across 30+ countries' },
+ ],
+}
+
+const FOOTER = {
+ zh: ['榮獲 2023 台灣 ESG 創新獎', '碳足跡標籤認證企業', 'ISO 14001 環境管理', 'B Corp 認證申請中'],
+ en: ['2023 Taiwan ESG Innovation Award', 'Carbon Footprint Labeled', 'ISO 14001 Certified', 'B Corp Pending'],
+}
+
+const COPY = {
+ zh: { eyebrow: 'Impact Data', title: '環保貢獻數據', subtitle: '每一份訂單,都是對地球的一份承諾。' },
+ en: { eyebrow: 'Impact Data', title: 'Environmental Impact', subtitle: 'Every order is a commitment to the planet.' },
+}
+
+export default function DataDashboard() {
+ const { lang } = useLanguage()
+ const stats = STATS[lang]
+ const c = COPY[lang]
+
+ return (
+
+ {/* Noise texture */}
+
+
+
+
+
+
+
+
+ {/* Strong radial gradient glow */}
+
+
+ {/* Ghost "緑" kanji — right side */}
+
+
+ 緑
+
+
+
+ {/* Bamboo silhouette — left side */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Wave cut at bottom */}
+
+
+
+
+
+
+ {c.eyebrow}
+ {c.title}
+ {c.subtitle}
+
+
+
+ {stats.map((stat, i) => (
+
+
+
+
+
+
+
+
+
{stat.unit}
+
{stat.label}
+
{stat.desc}
+
+
+ ))}
+
+
+
+
+ {FOOTER[lang].map((item) => (
+
+
+ {item}
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/esg-website/src/components/ESGVision.jsx b/esg-website/src/components/ESGVision.jsx
new file mode 100644
index 0000000..c52830d
--- /dev/null
+++ b/esg-website/src/components/ESGVision.jsx
@@ -0,0 +1,257 @@
+import { motion } from 'framer-motion'
+import { Leaf, Users, BarChart3, CheckCircle2 } from 'lucide-react'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+const CONTENT = {
+ zh: {
+ eyebrow: 'ESG Vision',
+ headline: '永續,不只是承諾',
+ subheadline: '而是我們每一個決策的基石',
+ mission: '我們相信,真正的企業責任不在於報告中的數字,而在於每一條生產線、每一個材料選擇背後所蘊含的價值觀。琮祐的石頭紙,是我們對這個星球最誠懇的回答。',
+ pillars: [
+ {
+ letter: 'E',
+ color: '#2D5A27',
+ bg: 'bg-emerald-50',
+ title: '環境 Environmental',
+ items: [
+ { metric: '60%', label: '碳排放降低', desc: '全生命週期較傳統紙箱' },
+ { metric: '零', label: '製程廢液', desc: '無強酸強鹼排放' },
+ { metric: '20棵', label: '每噸保護樹木', desc: '完全不使用木漿' },
+ { metric: '100%', label: '可回收材質', desc: '閉環循環經濟' },
+ ],
+ goal: { year: '2030 目標', text: '全製程 100% 可再生能源,實現碳中和生產' },
+ },
+ {
+ letter: 'S',
+ color: '#4A6B8A',
+ bg: 'bg-blue-50',
+ title: '社會 Social',
+ items: [
+ { metric: 'FDA', label: '食品安全認證', desc: '保護終端消費者健康' },
+ { metric: '0', label: '有害化學添加', desc: '無螢光劑、無塑化劑' },
+ { metric: '30+', label: '服務國家', desc: '推動全球綠色轉型' },
+ { metric: '500+', label: '合作夥伴', desc: '帶動供應鏈永續升級' },
+ ],
+ goal: { year: '2030 目標', text: '帶動 1,000+ 家上下游企業完成包材綠色轉型' },
+ },
+ {
+ letter: 'G',
+ color: '#B45309',
+ bg: 'bg-amber-50',
+ title: '治理 Governance',
+ items: [
+ { metric: 'SGS', label: '國際第三方驗證', desc: '透明、獨立、可信賴' },
+ { metric: '年報', label: 'ESG 透明報告', desc: '每年公開永續績效' },
+ { metric: '內控', label: 'ESG 治理委員會', desc: '董事會層級監督' },
+ { metric: 'ISO', label: '管理系統認證', desc: 'ISO 14001 環境管理' },
+ ],
+ goal: { year: '2030 目標', text: '取得 B Corp 認證,成為全球公認的永續企業典範' },
+ },
+ ],
+ timeline: {
+ title: '永續路徑圖',
+ items: [
+ { year: '2023', event: '榮獲台灣 ESG 創新獎,完成 ISO 14001 認證' },
+ { year: '2025', event: '導入 100% 可再生能源生產線,推出碳足跡標籤' },
+ { year: '2027', event: '實現全供應鏈碳中和,完成 B Corp 認證申請' },
+ { year: '2030', event: '成為亞太最大石頭紙永續包裝平台' },
+ ],
+ },
+ },
+ en: {
+ eyebrow: 'ESG Vision',
+ headline: 'Sustainability is not a promise',
+ subheadline: "It's the foundation of every decision we make",
+ mission: "We believe true corporate responsibility isn't measured by numbers in a report, but by the values embedded in every production line and material choice. CongYou's stone paper is our most sincere answer to the planet.",
+ pillars: [
+ {
+ letter: 'E',
+ color: '#2D5A27',
+ bg: 'bg-emerald-50',
+ title: 'Environmental',
+ items: [
+ { metric: '60%', label: 'Carbon Reduction', desc: 'Full lifecycle vs. cardboard' },
+ { metric: 'Zero', label: 'Process Effluent', desc: 'No acid/alkali discharge' },
+ { metric: '20', label: 'Trees Saved/Tonne', desc: 'Zero wood pulp used' },
+ { metric: '100%', label: 'Recyclable Material', desc: 'Closed-loop circular economy' },
+ ],
+ goal: { year: '2030 Goal', text: '100% renewable energy across all production, achieving carbon-neutral manufacturing' },
+ },
+ {
+ letter: 'S',
+ color: '#4A6B8A',
+ bg: 'bg-blue-50',
+ title: 'Social',
+ items: [
+ { metric: 'FDA', label: 'Food Safety Certified', desc: 'Protecting end-consumer health' },
+ { metric: '0', label: 'Harmful Additives', desc: 'No fluorescent or plasticizer agents' },
+ { metric: '30+', label: 'Countries Served', desc: 'Driving global green transition' },
+ { metric: '500+', label: 'Partners', desc: 'Elevating supply chain sustainability' },
+ ],
+ goal: { year: '2030 Goal', text: 'Enable 1,000+ upstream and downstream companies to complete green packaging transitions' },
+ },
+ {
+ letter: 'G',
+ color: '#B45309',
+ bg: 'bg-amber-50',
+ title: 'Governance',
+ items: [
+ { metric: 'SGS', label: 'Independent Verification', desc: 'Transparent, credible, auditable' },
+ { metric: 'Annual', label: 'ESG Transparency Report', desc: 'Public sustainability performance' },
+ { metric: 'Board', label: 'ESG Governance Committee', desc: 'Board-level ESG oversight' },
+ { metric: 'ISO', label: 'Management Certification', desc: 'ISO 14001 Environmental Mgmt' },
+ ],
+ goal: { year: '2030 Goal', text: 'Achieve B Corp certification and become a globally recognized sustainable enterprise model' },
+ },
+ ],
+ timeline: {
+ title: 'Sustainability Roadmap',
+ items: [
+ { year: '2023', event: 'Taiwan ESG Innovation Award · ISO 14001 certified' },
+ { year: '2025', event: '100% renewable energy production line · Carbon footprint label launch' },
+ { year: '2027', event: 'Full supply chain carbon neutral · B Corp certification application' },
+ { year: '2030', event: "Asia-Pacific's largest stone paper sustainable packaging platform" },
+ ],
+ },
+ },
+}
+
+export default function ESGVision() {
+ const { lang } = useLanguage()
+ const c = CONTENT[lang]
+
+ return (
+
+
+ {/* Header */}
+
+ {c.eyebrow}
+
+ {c.headline}
+
+ {c.subheadline}
+ {c.mission}
+
+
+ {/* E / S / G Pillars */}
+
+ {c.pillars.map((pillar, i) => (
+
+
+ {/* Pillar header */}
+
+
+ {pillar.letter}
+
+
{pillar.title}
+
+
+ {/* Metrics */}
+
+ {pillar.items.map((item) => (
+
+
+ {item.metric}
+
+
{item.label}
+
{item.desc}
+
+ ))}
+
+
+ {/* Goal */}
+
+
+
+
+ {pillar.goal.year}
+
+
{pillar.goal.text}
+
+
+
+
+ ))}
+
+
+ {/* Timeline */}
+
+
+
+
+
{c.timeline.title}
+
+
+ {/* Desktop timeline */}
+
+ {/* Track */}
+
+ {/* Animated fill */}
+
+
+ {c.timeline.items.map((item, i) => (
+
+
+ {item.year.slice(2)}
+
+
+
{item.year}
+
{item.event}
+
+
+ ))}
+
+
+
+ {/* Mobile timeline (vertical) */}
+
+ {c.timeline.items.map((item, i) => (
+
+
+
+
+ {item.year.slice(2)}
+
+ {i < c.timeline.items.length - 1 && (
+
+ )}
+
+
+
{item.year}
+
{item.event}
+
+
+
+ ))}
+
+
+
+
+
+ )
+}
diff --git a/esg-website/src/components/FAQ.jsx b/esg-website/src/components/FAQ.jsx
new file mode 100644
index 0000000..d57c501
--- /dev/null
+++ b/esg-website/src/components/FAQ.jsx
@@ -0,0 +1,464 @@
+import { useState } from 'react'
+import { motion, AnimatePresence } from 'framer-motion'
+import { Plus, Minus } from 'lucide-react'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+const CATEGORIES = {
+ zh: [
+ { key: 'general', label: '通用' },
+ { key: 'stonebox', label: '石頭紙箱' },
+ { key: 'secbag', label: '二次循環破壞袋' },
+ { key: 'vestbag', label: '背心袋' },
+ { key: 'buffer', label: '緩衝材' },
+ { key: 'tableware', label: 'PGT餐具' },
+ { key: 'biobag', label: '環保生物袋' },
+ ],
+ en: [
+ { key: 'general', label: 'General' },
+ { key: 'stonebox', label: 'Stone Paper Box' },
+ { key: 'secbag', label: 'Recycled Security Bag' },
+ { key: 'vestbag', label: 'Vest Bag' },
+ { key: 'buffer', label: 'Buffer Material' },
+ { key: 'tableware', label: 'PGT Tableware' },
+ { key: 'biobag', label: 'Eco Bio Bag' },
+ ],
+}
+
+const FAQS = {
+ zh: {
+ general: [
+ {
+ q: '最小訂購量(MOQ)是多少?',
+ a: '標準規格產品起訂量約 1,000 件,客製規格(訂製尺寸、印刷)起訂量約 3,000 件。如需少量測試,可透過網站申請免費樣品(5 件以內)。',
+ },
+ {
+ q: '是否支援訂製印刷與 ODM 服務?',
+ a: '支援全彩 CMYK 印刷、燙金、局部 UV 等多種表面處理。ODM 服務可從材料配方、結構設計到印刷一次整合,交期視規格複雜度約 4–8 週。',
+ },
+ {
+ q: '貨期通常需要多長時間?',
+ a: '現有庫存規格出貨時間為 3–5 個工作天(台灣本島)。客製規格視數量與複雜度,通常需要 4–8 週。跨境出貨可配合 DDP 或 EXW 條款安排。',
+ },
+ {
+ q: '與傳統包材相比,價格差異大嗎?',
+ a: '單價略高於一般紙箱,但考量其耐用性、損耗率低、減少退貨等隱性成本,整體 TCO 通常與傳統包材相當甚至更低,品牌端還可獲得 ESG 行銷加分。',
+ },
+ {
+ q: '是否提供 SGS 或 FDA 檢測報告?',
+ a: '是的。所有產品均備有 SGS 第三方檢測報告,部分產品通過 FDA 食品接觸材料認證。洽詢時可免費索取完整報告。',
+ },
+ ],
+ stonebox: [
+ {
+ q: '石頭紙箱和一般紙箱有什麼不同?',
+ a: '石頭紙箱以碳酸鈣礦石粉為主要原料,不含木漿,製造過程無需砍樹、無需用水。物理性能上具備防水、防潮、抗凍、抗撕裂等特性,比傳統紙箱更耐用、更環保。',
+ },
+ {
+ q: '適合哪些物流場景?',
+ a: '特別適合冷鏈物流(冷藏 / 冷凍)、潮濕氣候地區運輸、易碎品包裝,以及長途跨境運輸。常溫電商、食品、電子產品、醫療耗材均可使用。',
+ },
+ {
+ q: '耐溫範圍是多少?',
+ a: '標準石頭紙箱適用溫度為 -20°C 至 80°C,完全滿足一般冷鏈(冷藏 / 冷凍)需求。如有特殊溫度需求,可與技術團隊討論客製配方。',
+ },
+ {
+ q: '可以訂製尺寸和印刷嗎?',
+ a: '可以。支援客製尺寸、結構設計與全彩印刷。訂製起訂量約 3,000 件,交期 4–8 週。建議提供產品尺寸與年用量,由業務顧問規劃最適方案。',
+ },
+ {
+ q: '石頭紙箱如何回收?',
+ a: '主要成分為碳酸鈣與少量 HDPE,可進入現有塑料回收體系,也可直接焚燒(燃燒後還原為礦石粉,無有害氣體)。相較於傳統紙箱,碳足跡降低約 67%。',
+ },
+ ],
+ secbag: [
+ {
+ q: '什麼是「二次循環」破壞袋?',
+ a: '指袋體設計具備兩條撕拉線,第一次開封後仍可重新密封再使用一次,減少包材浪費。適合退換貨流程頻繁的電商業者,一個袋子可完成出貨與退貨兩個環節。',
+ },
+ {
+ q: '破壞袋的「破壞性」是什麼意思?',
+ a: '開封後袋身留下明顯痕跡,無法在不留痕的情況下重新封口,具備防偽與防竄改功能。適合電商、精品、藥品等對包裝安全性有要求的場景。',
+ },
+ {
+ q: '材質是否環保?如何分解?',
+ a: '採用可分解配方,在自然環境中 180 天內完全分解,不殘留微塑料,對土壤和水源無害,通過 SGS 生物分解認證。',
+ },
+ {
+ q: '有哪些尺寸規格?',
+ a: '提供多種標準尺寸(A4、A3、B4 等),也支援客製尺寸。可搭配品牌印刷,適合電商品牌建立一致的開箱體驗。',
+ },
+ ],
+ vestbag: [
+ {
+ q: '背心袋的材質是什麼?',
+ a: '採用環保可分解配方製作,主成分為玉米澱粉或 PBAT 混合材料,符合國際生物分解標準。外觀與一般塑膠袋相近,但對環境影響大幅降低。',
+ },
+ {
+ q: '承重能力如何?',
+ a: '標準規格背心袋承重約 5–8 公斤,加厚款可達 10 公斤以上。適合超市、零售業、外帶餐飲等日常使用場景。',
+ },
+ {
+ q: '有哪些尺寸可選?',
+ a: '提供小(25×40cm)、中(30×50cm)、大(38×60cm)等標準尺寸,亦可依需求訂製。支援品牌 LOGO 印刷。',
+ },
+ {
+ q: '是否符合台灣限塑政策規定?',
+ a: '是的。本產品符合台灣環保署可分解塑膠袋認證標準,適用於限塑政策規範下的替代方案,可合規用於餐飲業、零售業等場域。',
+ },
+ ],
+ buffer: [
+ {
+ q: '緩衝材如何取代保麗龍(EPS)?',
+ a: '本緩衝材採用可回收或可分解材料製成,具備與保麗龍相當的防震吸收效果,但重量更輕、體積可壓縮,大幅降低倉儲與運輸成本,且不會造成白色污染。',
+ },
+ {
+ q: '緩衝效果是否通過測試?',
+ a: '是的。產品通過 ISTA 國際安全運輸協會的包裝測試標準,可有效保護易碎品(如電子產品、玻璃器皿、精密儀器)在運輸過程中不受損壞。',
+ },
+ {
+ q: '材質如何回收或分解?',
+ a: '依規格不同,部分款式可進入現有紙類或塑料回收體系;可分解款在堆肥環境下 90–180 天完全分解。建議洽詢業務顧問確認最適合使用場景的規格。',
+ },
+ {
+ q: '適合哪些產業使用?',
+ a: '廣泛應用於電商、電子產品、食品禮盒、醫療器材、精品等需要內裝固定與防震保護的包裝場景。支援裁切成型客製化服務。',
+ },
+ ],
+ tableware: [
+ {
+ q: 'PGT 餐具是什麼材質?',
+ a: 'PGT(Plant-based Green Tableware)以植物纖維為基底,結合專利配方製成,不含塑料成分。外觀質感佳,可替代傳統一次性塑膠、美耐皿或不鏽鋼餐具。',
+ },
+ {
+ q: '耐熱溫度是多少?可以微波嗎?',
+ a: 'PGT 餐具耐熱可達 120°C,可安全微波使用,也耐低溫至 -20°C,適合冷熱食皆可盛裝。不建議直接接觸明火或放入烤箱。',
+ },
+ {
+ q: '和美耐皿(Melamine)餐具有什麼不同?',
+ a: '美耐皿餐具在受損、刮傷或高溫使用時,可能釋放三聚氰胺(Melamine)有毒物質,對人體造成危害。PGT 餐具即使受損也不含三聚氰胺,不會釋放有害物質,食用安全性更高。',
+ },
+ {
+ q: '重量與不鏽鋼餐具相比如何?',
+ a: 'PGT 餐具重量比不鏽鋼輕,大幅降低外燴活動、團膳配送的搬運與運輸成本,同時兼顧耐用性與食安要求,是取代不鏽鋼的輕量環保選項。',
+ },
+ {
+ q: '是否通過食品安全認證?',
+ a: '通過美國 FDA 食品接觸材料認證及 SGS 食安檢測,不含螢光增白劑、塑化劑及重金屬,可安全用於直接接觸食物的包裝與餐具。',
+ },
+ {
+ q: '適合哪些餐飲場景?',
+ a: '適用於外帶餐盒、便當盒、飲料杯、餐盤等需求,特別適合強調品牌永續形象的餐飲業者、企業餐廳及活動外燴使用。',
+ },
+ ],
+ biobag: [
+ {
+ q: '環保生物袋和一般塑膠袋有什麼不同?',
+ a: '環保生物袋採用 PLA(聚乳酸)或 PBAT 等生物基材料製成,外觀與一般塑膠袋相同,但在特定環境條件下可完全分解,不留殘留物,大幅減少對環境的長期影響。',
+ },
+ {
+ q: '耐熱溫度是多少?可以用於蒸煮包裝嗎?',
+ a: '環保生物袋耐熱可達 120°C,適合農產品蒸煮、熱食包裝及需要高溫處理的包裝場景,兼顧食品安全與環保需求。',
+ },
+ {
+ q: '在什麼條件下才會分解?',
+ a: '在工業堆肥環境(溫度 ≥ 55°C、適當濕度與微生物)下,約 90–180 天可完全分解。自然環境下分解速度較慢,建議配合各地有機廢棄物回收體系處理。',
+ },
+ {
+ q: '分解後會產生微塑料嗎?',
+ a: '不會。環保生物袋分解後還原為水、二氧化碳與有機質,不殘留微塑料,通過 EN 13432 歐盟生物分解標準及 SGS 認證。',
+ },
+ {
+ q: '適合哪些使用場景?',
+ a: '廣泛適用於超市購物袋、有機農產品包裝、蒸煮食品袋、廚餘垃圾袋、外帶提袋等。特別適合需要符合限塑規範或主打環保形象的品牌與通路。',
+ },
+ {
+ q: '可以印刷品牌 LOGO 嗎?',
+ a: '可以。支援單色至四色品牌印刷,客製起訂量約 3,000 件。印刷油墨亦採用環保水性配方,不影響整體生物分解性能。',
+ },
+ ],
+ },
+ en: {
+ general: [
+ {
+ q: 'What is the minimum order quantity (MOQ)?',
+ a: 'Standard products start at 1,000 units; custom specifications (sizes, printing) start at 3,000 units. Free samples (up to 5 pcs) can be requested through the website for initial testing.',
+ },
+ {
+ q: 'Do you support custom printing and ODM services?',
+ a: 'Yes — full-color CMYK printing, hot stamping, spot UV, and more. ODM services cover material formulation, structural design, and printing in one integrated flow. Lead time is approximately 4–8 weeks depending on complexity.',
+ },
+ {
+ q: 'What are the typical lead times?',
+ a: 'In-stock standard items ship in 3–5 business days (Taiwan domestic). Custom orders typically require 4–8 weeks. Cross-border shipments can be arranged under DDP or EXW terms.',
+ },
+ {
+ q: 'How does the price compare to traditional packaging?',
+ a: 'Unit price is slightly higher than standard packaging. However, factoring in durability, lower damage rates, and reduced return costs, total TCO is typically comparable or lower. Brands also gain measurable ESG marketing value.',
+ },
+ {
+ q: 'Are SGS or FDA test reports available?',
+ a: 'Yes. All products have SGS third-party test reports, and select products carry FDA food-contact material certification. Full reports are available upon request at no charge.',
+ },
+ ],
+ stonebox: [
+ {
+ q: 'How is stone paper different from regular cardboard?',
+ a: 'Stone paper boxes are made primarily from calcium carbonate mineral powder with no wood pulp — no trees cut, no water used in production. They offer superior waterproofing, frost resistance, and tear strength compared to traditional cardboard.',
+ },
+ {
+ q: 'What logistics scenarios are best suited for stone paper boxes?',
+ a: 'Ideal for cold-chain logistics (refrigeration/freezing), humid-climate shipping, fragile item packaging, and long-distance cross-border transport. Also suitable for ambient e-commerce, food, electronics, and medical consumables.',
+ },
+ {
+ q: 'What is the operating temperature range?',
+ a: 'Standard stone paper boxes operate from -20°C to 80°C, fully covering standard cold-chain requirements. Custom formulations for special temperature needs are available through our technical team.',
+ },
+ {
+ q: 'Can I order custom sizes and printing?',
+ a: 'Yes. Custom sizing, structural design, and full-color printing are available. Minimum order for custom specs is 3,000 units with a 4–8 week lead time. Provide your product dimensions and annual volume for a tailored proposal.',
+ },
+ {
+ q: 'How is stone paper recycled?',
+ a: 'The main components — calcium carbonate and a small amount of HDPE — are compatible with existing plastic recycling streams. They can also be incinerated cleanly (reverts to mineral powder, no harmful emissions). Carbon footprint is approximately 67% lower than traditional cardboard.',
+ },
+ ],
+ secbag: [
+ {
+ q: 'What does "recycled" mean for the security bag?',
+ a: 'The bag features two tear strips, allowing it to be resealed and reused once after the initial opening. This supports reverse logistics — a single bag can handle both outbound shipping and a return shipment, reducing packaging waste.',
+ },
+ {
+ q: 'What makes it a "security" bag?',
+ a: 'Once opened, the bag shows clear tamper-evident marks and cannot be resealed without visible evidence. This makes it ideal for e-commerce, luxury goods, and pharmaceuticals where packaging integrity is critical.',
+ },
+ {
+ q: 'Is the material eco-friendly? How does it degrade?',
+ a: 'Made with a biodegradable formulation, the bag fully decomposes within 180 days in natural environments with no microplastic residue — harmless to soil and water. SGS biodegradability certified.',
+ },
+ {
+ q: 'What sizes are available?',
+ a: 'Multiple standard sizes are available (A4, A3, B4, etc.) along with custom sizing options. Brand printing is supported to create a consistent unboxing experience.',
+ },
+ ],
+ vestbag: [
+ {
+ q: 'What material is the vest bag made from?',
+ a: 'Made from an eco-friendly biodegradable formulation — primarily corn starch or PBAT blend — meeting international biodegradability standards. It looks and feels like a standard plastic bag but with significantly reduced environmental impact.',
+ },
+ {
+ q: 'What is the load-bearing capacity?',
+ a: 'Standard vest bags support 5–8 kg; heavy-duty versions can handle 10+ kg. Suitable for supermarkets, retail, and food takeaway applications.',
+ },
+ {
+ q: 'What sizes are available?',
+ a: 'Standard sizes include Small (25×40cm), Medium (30×50cm), and Large (38×60cm), with custom sizing available. Brand logo printing is supported.',
+ },
+ {
+ q: 'Does it comply with plastic reduction regulations?',
+ a: 'Yes. This product meets Taiwan EPA biodegradable plastic bag certification standards, making it a compliant alternative under plastic reduction policies for food service and retail industries.',
+ },
+ ],
+ buffer: [
+ {
+ q: 'How does this replace EPS (styrofoam)?',
+ a: 'Made from recyclable or biodegradable materials with shock absorption comparable to EPS, but lighter and compressible — significantly reducing storage and shipping costs while eliminating white pollution.',
+ },
+ {
+ q: 'Has the cushioning performance been tested?',
+ a: 'Yes. Products meet ISTA (International Safe Transit Association) packaging test standards, effectively protecting fragile goods such as electronics, glassware, and precision instruments during transport.',
+ },
+ {
+ q: 'How is it recycled or composted?',
+ a: 'Depending on the specification, some variants enter standard paper or plastic recycling streams; biodegradable variants fully decompose in composting conditions within 90–180 days. Consult our team for the right spec for your application.',
+ },
+ {
+ q: 'Which industries use this product?',
+ a: 'Widely used in e-commerce, electronics, food gift boxes, medical devices, and luxury goods — any application requiring interior fixation and impact protection. Custom die-cutting services are available.',
+ },
+ ],
+ tableware: [
+ {
+ q: 'What is PGT tableware made from?',
+ a: 'PGT (Plant-based Green Tableware) uses plant fiber as its base with a proprietary formulation — plastic-free. It has a premium look and feel, replacing conventional single-use plastic, melamine, or stainless steel tableware.',
+ },
+ {
+ q: 'What is the heat resistance? Is it microwave-safe?',
+ a: 'PGT tableware is heat-resistant to 120°C and microwave-safe. It also withstands temperatures down to -20°C, making it suitable for both hot and cold food. Not recommended for direct flame or oven use.',
+ },
+ {
+ q: 'How is it different from melamine tableware?',
+ a: 'Melamine tableware can release melamine toxins when scratched, damaged, or used at high temperatures — posing health risks. PGT tableware contains no melamine and releases no harmful substances even when damaged, making it a significantly safer choice.',
+ },
+ {
+ q: 'How does the weight compare to stainless steel?',
+ a: 'PGT tableware is lighter than stainless steel, significantly reducing handling and transport costs for catering events and institutional food service — without compromising durability or food safety.',
+ },
+ {
+ q: 'Does it have food safety certification?',
+ a: 'Yes. Certified under US FDA food-contact material standards and SGS food safety testing. Free of fluorescent brighteners, plasticizers, and heavy metals — safe for direct food contact.',
+ },
+ {
+ q: 'What food service scenarios is it designed for?',
+ a: 'Ideal for takeaway boxes, bento containers, cups, and plates. Especially suited for F&B brands emphasizing sustainability, corporate cafeterias, and catered events.',
+ },
+ ],
+ biobag: [
+ {
+ q: 'How is an eco bio bag different from a regular plastic bag?',
+ a: 'Eco bio bags are made from bio-based materials such as PLA (polylactic acid) or PBAT. They look and function like conventional plastic bags but fully decompose under the right conditions, leaving no residue — significantly reducing long-term environmental impact.',
+ },
+ {
+ q: 'What is the heat resistance? Can it be used for steaming?',
+ a: 'Eco bio bags are heat-resistant up to 120°C, making them suitable for steaming, hot food packaging, and applications requiring high-temperature processing — combining food safety with environmental responsibility.',
+ },
+ {
+ q: 'What conditions are required for decomposition?',
+ a: 'In an industrial composting environment (temperature ≥ 55°C with adequate moisture and microorganisms), full decomposition takes approximately 90–180 days. Natural environment decomposition is slower; pairing with local organic waste collection is recommended.',
+ },
+ {
+ q: 'Does it leave microplastics?',
+ a: 'No. Decomposition yields only water, CO₂, and organic matter — no microplastic residue. Certified to EN 13432 (EU biodegradability standard) and SGS.',
+ },
+ {
+ q: 'What are the main use cases?',
+ a: 'Widely used for supermarket shopping bags, organic produce packaging, steaming pouches, kitchen waste bin liners, and takeaway carry bags. Especially suited for brands targeting plastic-reduction compliance or sustainability positioning.',
+ },
+ {
+ q: 'Can I print my brand logo on it?',
+ a: 'Yes. Single to four-color brand printing is available, with a minimum order of 3,000 units. Eco water-based inks are used to preserve overall biodegradability.',
+ },
+ ],
+ },
+}
+
+const COPY = {
+ zh: { eyebrow: 'FAQ', title: '常見問題', subtitle: '選擇產品分類,快速找到您需要的答案。' },
+ en: { eyebrow: 'FAQ', title: 'Frequently Asked Questions', subtitle: 'Select a product category to find the answers you need.' },
+}
+
+function AccordionItem({ q, a, isOpen, onClick, index }) {
+ return (
+
+
+
+
+ {String(index + 1).padStart(2, '0')}
+
+
+ {q}
+
+
+
+
+
+
+ {isOpen && (
+
+
+ {a}
+
+
+ )}
+
+
+ )
+}
+
+export default function FAQ() {
+ const { lang } = useLanguage()
+ const c = COPY[lang]
+ const categories = CATEGORIES[lang]
+ const [activeKey, setActiveKey] = useState('general')
+ const [openIndex, setOpenIndex] = useState(0)
+
+ const faqs = FAQS[lang][activeKey] || []
+
+ const handleTabChange = (key) => {
+ setActiveKey(key)
+ setOpenIndex(0)
+ }
+
+ return (
+
+
+
+ {c.eyebrow}
+ {c.title}
+ {c.subtitle}
+
+
+ {/* 產品分類 Tab */}
+
+
+ {categories.map((cat) => (
+ handleTabChange(cat.key)}
+ className={`shrink-0 px-4 py-2 rounded-full text-xs font-light transition-all duration-200 border ${
+ activeKey === cat.key
+ ? 'bg-forest text-white border-forest'
+ : 'bg-white text-graphite border-gray-200 hover:border-forest/40 hover:text-forest'
+ }`}
+ >
+ {cat.label}
+
+ ))}
+
+
+
+ {/* FAQ 列表 */}
+
+
+
+ {faqs.map((item, i) => (
+ setOpenIndex(openIndex === i ? -1 : i)}
+ />
+ ))}
+
+
+
+
+
+
+ {lang === 'zh' ? '找不到答案?歡迎直接聯繫我們的業務顧問。' : "Can't find your answer? Our sales team is ready to help."}
+
+
+ {lang === 'zh' ? '聯絡業務顧問' : 'Contact Sales'}
+
+
+
+
+ )
+}
diff --git a/esg-website/src/components/FadeIn.jsx b/esg-website/src/components/FadeIn.jsx
new file mode 100644
index 0000000..c249072
--- /dev/null
+++ b/esg-website/src/components/FadeIn.jsx
@@ -0,0 +1,33 @@
+import { motion, useInView } from 'framer-motion'
+import { useRef } from 'react'
+
+export default function FadeIn({ children, className = '', delay = 0, direction = 'up' }) {
+ const ref = useRef(null)
+ const isInView = useInView(ref, { once: true, margin: '-80px' })
+
+ const variants = {
+ hidden: {
+ opacity: 0,
+ y: direction === 'up' ? 36 : direction === 'down' ? -36 : 0,
+ x: direction === 'left' ? 36 : direction === 'right' ? -36 : 0,
+ },
+ visible: {
+ opacity: 1,
+ y: 0,
+ x: 0,
+ transition: { duration: 0.75, delay, ease: [0.25, 0.46, 0.45, 0.94] },
+ },
+ }
+
+ return (
+
+ {children}
+
+ )
+}
diff --git a/esg-website/src/components/Features.jsx b/esg-website/src/components/Features.jsx
new file mode 100644
index 0000000..979a209
--- /dev/null
+++ b/esg-website/src/components/Features.jsx
@@ -0,0 +1,189 @@
+import { Droplets, TreePine, Recycle, ShieldCheck, Leaf, Layers } from 'lucide-react'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+const FEATURES = {
+ zh: [
+ {
+ Icon: Droplets,
+ title: '防水抗凍',
+ en: 'Waterproof & Frost-Resistant',
+ desc: '石頭紙在浸水 72 小時後結構完整,抗凍達 -20°C。完美適用冷凍海鮮、肉品與精密電子物流場景。',
+ tags: ['IPX6 防水', '抗凍 -20°C', '濕度免疫'],
+ },
+ {
+ Icon: TreePine,
+ title: '無木造紙',
+ en: 'Tree-Free Paper',
+ desc: '完全不使用木漿,每噸石頭紙可保護 20 棵成年樹木,守護珍貴的森林資源與生物多樣性。',
+ tags: ['零木漿', '保護森林', '20棵/噸'],
+ },
+ {
+ Icon: Recycle,
+ title: '零污染製程',
+ en: 'Zero Pollution Process',
+ desc: '製程不排放強酸、強鹼廢水,無漂白劑,無有害化學物質,且具備完整的循環回收體系。',
+ tags: ['零廢水', '無漂白', '循環回收'],
+ },
+ {
+ Icon: ShieldCheck,
+ title: 'FDA 食品安全',
+ en: 'FDA Food Grade',
+ desc: '通過美國 FDA 食品接觸材料認證,無塑化劑、無螢光劑,可直接用於食品包裝,安全無毒。',
+ tags: ['FDA 認證', '無塑化劑', '食品接觸安全'],
+ },
+ {
+ Icon: Leaf,
+ title: '減碳環保',
+ en: 'Low Carbon Footprint',
+ desc: '全生命週期碳排放較傳統紙箱降低 60%,助力企業達成 ESG 碳中和目標,符合歐盟綠色新政。',
+ tags: ['碳排 -60%', 'ESG 合規', '碳中和'],
+ },
+ {
+ Icon: Layers,
+ title: '高強抗撕',
+ en: 'High Tear Resistance',
+ desc: '礦石複合結構提供卓越的抗撕裂與抗壓強度,在極端溫差、跌落衝擊下仍能保持結構完整性。',
+ tags: ['抗撕裂', '高抗壓', '耐衝擊'],
+ },
+ ],
+ en: [
+ {
+ Icon: Droplets,
+ title: 'Waterproof & Frost-Resistant',
+ en: 'Waterproof & Frost-Resistant',
+ desc: 'Stone paper maintains structural integrity after 72 hours submerged, with frost resistance to -20°C. Perfect for cold-chain and electronics logistics.',
+ tags: ['IPX6 Waterproof', 'Frost to -20°C', 'Moisture Immune'],
+ },
+ {
+ Icon: TreePine,
+ title: 'Tree-Free Paper',
+ en: 'Tree-Free Paper',
+ desc: 'Zero wood pulp used. Every tonne of stone paper saves 20 mature trees, protecting forest biodiversity and carbon sinks.',
+ tags: ['Zero Wood Pulp', 'Forest Protection', '20 Trees / Tonne'],
+ },
+ {
+ Icon: Recycle,
+ title: 'Zero Pollution Process',
+ en: 'Zero Pollution Process',
+ desc: 'No acid/alkali effluent, no bleaching agents, no hazardous chemicals in production. Full circular recycling infrastructure included.',
+ tags: ['Zero Effluent', 'No Bleach', 'Circular Recycling'],
+ },
+ {
+ Icon: ShieldCheck,
+ title: 'FDA Food Grade',
+ en: 'FDA Food Grade',
+ desc: 'US FDA food-contact material certified. Free of plasticizers and fluorescent agents — safe for direct food packaging use.',
+ tags: ['FDA Certified', 'Plasticizer-Free', 'Food Contact Safe'],
+ },
+ {
+ Icon: Leaf,
+ title: 'Low Carbon Footprint',
+ en: 'Low Carbon Footprint',
+ desc: 'Lifecycle carbon emissions 60% lower than traditional cardboard, supporting corporate ESG carbon-neutral targets and EU Green Deal compliance.',
+ tags: ['Carbon -60%', 'ESG Compliant', 'Carbon Neutral Path'],
+ },
+ {
+ Icon: Layers,
+ title: 'High Tear Resistance',
+ en: 'High Tear Resistance',
+ desc: 'Mineral composite structure delivers superior tear resistance and compression strength, maintaining integrity under extreme temperature and impact.',
+ tags: ['Tear Resistant', 'High Compression', 'Impact Tolerant'],
+ },
+ ],
+}
+
+const COPY = {
+ zh: { eyebrow: 'Core Technology', title: '核心技術優勢', subtitle: '重新定義環保包裝材料的標準——不妥協性能,不犧牲地球。' },
+ en: { eyebrow: 'Core Technology', title: 'Core Technology', subtitle: 'Redefining eco-packaging standards — no performance compromise, no planet sacrifice.' },
+}
+
+export default function Features() {
+ const { lang } = useLanguage()
+ const features = FEATURES[lang]
+ const c = COPY[lang]
+
+ return (
+
+
+ {/* Seigaiha (Japanese overlapping circles) pattern background */}
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Ghost "技" kanji */}
+
+
+ 技
+
+
+
+
+
+ {/* Ink brush accent */}
+
+ {c.eyebrow}
+ {c.title}
+ {c.subtitle}
+
+
+
+ {features.map((feat, i) => (
+
+
+
+ {/* Ghost card number */}
+
+ {String(i + 1).padStart(2, '0')}
+
+
+
+
+
+
{feat.en}
+
{feat.title}
+
{feat.desc}
+
+ {feat.tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+
+
+ ))}
+
+
+
+ )
+}
diff --git a/esg-website/src/components/Footer.jsx b/esg-website/src/components/Footer.jsx
new file mode 100644
index 0000000..f0e19e1
--- /dev/null
+++ b/esg-website/src/components/Footer.jsx
@@ -0,0 +1,89 @@
+import { Leaf, Mail, Phone, MapPin } from 'lucide-react'
+import { useLanguage } from '../context/LanguageContext'
+
+const COPY = {
+ zh: {
+ tagline: '以天然礦石為原料,打造防水、低碳、堅固的石頭紙系列。致力於推動無塑永續包裝,助力企業達成碳中和目標。',
+ cols: [
+ { title: '產品系列', items: ['石頭紙箱', '可分解破壞袋', '環保緩衝材', 'PGT 環保餐具', 'ODM 客製服務'] },
+ { title: '關於琮祐', items: ['公司簡介', 'ESG 永續理念', '新聞中心', '認證標章'] },
+ { title: '服務支援', items: ['索取樣品', '技術規格下載', '常見問題', '聯絡業務'] },
+ ],
+ address: '台灣 · 台北市內湖區',
+ copyright: '© 2024 琮祐企業股份有限公司 · CongYou Enterprise Co., Ltd.',
+ legal: ['隱私政策', '服務條款', 'Cookie 政策'],
+ },
+ en: {
+ tagline: 'Transforming natural minerals into waterproof, low-carbon, durable stone paper products. Championing plastic-free sustainable packaging worldwide.',
+ cols: [
+ { title: 'Products', items: ['Stone Paper Box', 'Degradable Security Bag', 'Eco Buffer Material', 'PGT Eco Tableware', 'ODM Custom Service'] },
+ { title: 'Company', items: ['About Us', 'ESG Vision', 'Newsroom', 'Certifications'] },
+ { title: 'Support', items: ['Request Sample', 'Spec Downloads', 'FAQ', 'Contact Sales'] },
+ ],
+ address: 'Taipei, Taiwan',
+ copyright: '© 2024 CongYou Enterprise Co., Ltd. All rights reserved.',
+ legal: ['Privacy Policy', 'Terms of Service', 'Cookie Policy'],
+ },
+}
+
+export default function Footer() {
+ const { lang } = useLanguage()
+ const c = COPY[lang]
+
+ return (
+
+
+
+ {/* Brand */}
+
+
+
{c.tagline}
+
+ {[
+ { Icon: MapPin, text: c.address },
+ { Icon: Mail, text: 'info@congyou-esg.com' },
+ { Icon: Phone, text: '+886 2 XXXX-XXXX' },
+ ].map(({ Icon, text }) => (
+
+
+ {text}
+
+ ))}
+
+
+
+ {/* Link cols */}
+ {c.cols.map((col) => (
+
+
{col.title}
+
+ {col.items.map((item) => (
+
+ {item}
+
+ ))}
+
+
+ ))}
+
+
+
+
{c.copyright}
+
+ {c.legal.map((item) => (
+
{item}
+ ))}
+
+
+
+
+ )
+}
diff --git a/esg-website/src/components/Hero.jsx b/esg-website/src/components/Hero.jsx
new file mode 100644
index 0000000..52d495d
--- /dev/null
+++ b/esg-website/src/components/Hero.jsx
@@ -0,0 +1,298 @@
+import { motion } from 'framer-motion'
+import { useLanguage } from '../context/LanguageContext'
+
+const CONTENT = {
+ zh: {
+ badge: '石頭紙系列 · Stone Paper Series · ESG 2024',
+ h1a: '無塑永續',
+ h1b: '由石開始',
+ tagline: '琮祐企業——引領綠色包裝革命',
+ p1: '我們將石頭轉化為纖維,將廢棄物轉化為資源。',
+ p2: '100% 無塑 · 無木漿 · 石頭粉技術 · 可完全分解',
+ cta1: '探索產品系列',
+ cta2: '索取樣品',
+ },
+ en: {
+ badge: 'Stone Paper Series · Eco Innovation · ESG 2024',
+ h1a: 'Plastic-Free',
+ h1b: 'Born from Stone',
+ tagline: 'CongYou — Leading the Green Packaging Revolution',
+ p1: 'We transform minerals into fiber, waste into resources.',
+ p2: '100% Plastic-Free · No Wood Pulp · Stone Technology · Fully Degradable',
+ cta1: 'Explore Products',
+ cta2: 'Request Sample',
+ },
+}
+
+function Blob({ style, animate, duration }) {
+ return (
+
+ )
+}
+
+const LEAF_DATA = [
+ { left: '7%', top: '24%', size: 22, cls: 'animate-leaf-1', delay: '0s' },
+ { left: '12%', top: '68%', size: 16, cls: 'animate-leaf-2', delay: '-3.5s' },
+ { left: '87%', top: '19%', size: 20, cls: 'animate-leaf-3', delay: '-1.5s' },
+ { left: '91%', top: '60%', size: 17, cls: 'animate-leaf-1', delay: '-5s' },
+ { left: '76%', top: '80%', size: 15, cls: 'animate-leaf-2', delay: '-7s' },
+ { left: '3%', top: '82%', size: 23, cls: 'animate-leaf-3', delay: '-2.5s' },
+]
+
+function FloatingLeaf({ left, top, size, cls, delay }) {
+ return (
+
+ )
+}
+
+export default function Hero() {
+ const { lang } = useLanguage()
+ const c = CONTENT[lang]
+
+ return (
+
+ {/* Base marble background */}
+
+
+ {/* SVG noise texture */}
+
+
+
+
+
+
+
+
+ {/* ── Ensō circle (slowly rotating brush-stroke circle) ── */}
+
+
+
+
+
+
+ {/* ── Ghost "石" kanji ── */}
+
+
+ 石
+
+
+
+ {/* ── Animated gradient blobs ── */}
+
+
+
+
+ {/* Center light bloom */}
+
+
+ {/* Marble veins */}
+
+
+
+
+
+
+
+ {/* ── Floating leaves ── */}
+ {LEAF_DATA.map((leaf, i) => )}
+
+ {/* Floating rings */}
+
+
+
+ {/* ── Bamboo silhouette at bottom corners ── */}
+
+
+ {/* Left cluster */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Right cluster */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Content */}
+
+
+
+ {c.badge}
+
+
+
+ {c.h1a}
+
+ {c.h1b}
+
+
+
+ {c.tagline}
+
+
+
+ {c.p1}
+
+
+ {c.p2}
+
+
+
+
+ {c.cta1}
+
+
+ {c.cta2}
+
+
+
+
+ {/* Scroll cue */}
+
+ Scroll
+
+
+
+ )
+}
diff --git a/esg-website/src/components/IndustrySolutions.jsx b/esg-website/src/components/IndustrySolutions.jsx
new file mode 100644
index 0000000..f38f026
--- /dev/null
+++ b/esg-website/src/components/IndustrySolutions.jsx
@@ -0,0 +1,234 @@
+import { Truck, ShoppingCart, Factory, Store, UtensilsCrossed, Leaf, ArrowRight } from 'lucide-react'
+import { motion } from 'framer-motion'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+const SOLUTIONS = {
+ zh: {
+ eyebrow: 'Industry Solutions',
+ title: '產業應用',
+ subtitle:
+ '從冷鏈物流到綠色電商,石頭紙技術為各行各業提供無妥協的永續包裝解決方案。',
+ items: [
+ {
+ Icon: Truck,
+ color: '#2563EB',
+ gradient: 'from-blue-50 via-sky-50 to-cyan-50',
+ title: '冷鏈物流',
+ en: 'Cold Chain Logistics',
+ desc: '石頭紙箱能有效抵禦冷凝水,即使在 -20°C 低溫冷藏環境下仍保持結構強度,徹底解決傳統紙箱遇水即軟的痛點。是冷凍海鮮、生鮮肉品、精密電子物流的最佳選擇。',
+ tags: ['冷凍倉儲', '生鮮電商', '跨境冷鏈', '肉品包裝'],
+ product: '石頭紙箱',
+ productHref: '#products',
+ },
+ {
+ Icon: ShoppingCart,
+ color: '#7C3AED',
+ gradient: 'from-violet-50 via-purple-50 to-indigo-50',
+ title: '綠色電商',
+ en: 'Green E-Commerce',
+ desc: '100% 生物可分解破壞袋讓消費者在開箱瞬間感受到品牌的永續誠意。一次性防偽設計確保物流安全,180 天內完全分解,不留任何塑膠殘留,助品牌贏得 Z 世代信任。',
+ tags: ['電商包裝', '品牌升級', '防偽安全', '永續行銷'],
+ product: '可分解破壞袋',
+ productHref: '#products',
+ },
+ {
+ Icon: Factory,
+ color: '#B45309',
+ gradient: 'from-amber-50 via-orange-50 to-yellow-50',
+ title: '工業緩衝',
+ en: 'Industrial Buffering',
+ desc: '取代保麗龍的最佳環保方案。石頭紙蜂巢緩衝材提供卓越的避震與緩衝屬性,重量輕 40%,100% 可回收,協助製造業走向真正的循環經濟包裝模式。',
+ tags: ['精密儀器', '電子產品', '藝術品運輸', '取代保麗龍'],
+ product: '緩衝材',
+ productHref: '#products',
+ },
+ {
+ Icon: Store,
+ color: '#0369A1',
+ gradient: 'from-sky-50 via-blue-50 to-indigo-50',
+ title: '零售超市',
+ en: 'Retail & Supermarket',
+ desc: '環保背心袋符合台灣限塑法規,讓連鎖超市與零售通路輕鬆達成合規同時提升品牌形象。可生物分解配方取代傳統 PE 袋,消費者買單後包裝自然回歸土地,不留白色污染。',
+ tags: ['超市收銀袋', '連鎖通路', '限塑合規', '品牌環保形象'],
+ product: '背心袋',
+ productHref: '#products',
+ },
+ {
+ Icon: UtensilsCrossed,
+ color: '#DC2626',
+ gradient: 'from-red-50 via-rose-50 to-orange-50',
+ title: '餐飲外帶',
+ en: 'Food & Beverage',
+ desc: 'PGT 環保餐具耐熱 120°C 可微波,即使受損也不釋放三聚氰胺,重量比不鏽鋼輕,是企業餐廳、外燴活動與外帶品牌兼顧食安與永續的最佳選擇。通過 FDA 食品接觸認證。',
+ tags: ['外帶餐盒', '企業餐廳', '活動外燴', '食品安全'],
+ product: 'PGT餐具',
+ productHref: '#products',
+ },
+ {
+ Icon: Leaf,
+ color: '#16A34A',
+ gradient: 'from-green-50 via-emerald-50 to-teal-50',
+ title: '有機農業',
+ en: 'Organic & Fresh Produce',
+ desc: '環保生物袋耐熱達 120°C,適合農產品蒸煮包裝場景。180 天內完全分解,無微塑料殘留,是有機農產、生鮮市集與廚餘收納的理想方案,助農業品牌落實從產地到餐桌的全程永續。',
+ tags: ['有機農產', '生鮮包裝', '廚餘袋', '市集採購'],
+ product: '環保生物袋',
+ productHref: '#products',
+ },
+ ],
+ viewProduct: '了解',
+ },
+ en: {
+ eyebrow: 'Industry Solutions',
+ title: 'Industry Solutions',
+ subtitle:
+ 'From cold chain to e-commerce, our stone paper technology delivers uncompromising sustainable packaging for every industry.',
+ items: [
+ {
+ Icon: Truck,
+ color: '#2563EB',
+ gradient: 'from-blue-50 via-sky-50 to-cyan-50',
+ title: 'Cold Chain Logistics',
+ en: 'Cold Chain Logistics',
+ desc: 'Stone paper boxes effectively resist condensation, maintaining structural integrity at -20°C. The definitive solution for frozen seafood, fresh meat, and precision electronics logistics.',
+ tags: ['Cold Storage', 'Fresh E-Commerce', 'Cross-border Cold Chain', 'Meat Packaging'],
+ product: 'Stone Paper Box',
+ productHref: '#products',
+ },
+ {
+ Icon: ShoppingCart,
+ color: '#7C3AED',
+ gradient: 'from-violet-50 via-purple-50 to-indigo-50',
+ title: 'Green E-Commerce',
+ en: 'Green E-Commerce',
+ desc: '100% biodegradable security bags let customers experience your brand\'s sustainability commitment at unboxing. Tamper-evident, fully degrading in 180 days with zero plastic residue.',
+ tags: ['E-com Packaging', 'Brand Upgrade', 'Tamper Evidence', 'Sustainable Marketing'],
+ product: 'Degradable Security Bag',
+ productHref: '#products',
+ },
+ {
+ Icon: Factory,
+ color: '#B45309',
+ gradient: 'from-amber-50 via-orange-50 to-yellow-50',
+ title: 'Industrial Buffering',
+ en: 'Industrial Buffering',
+ desc: 'The premier eco-alternative to polystyrene foam. Stone paper honeycomb buffers provide superior shock absorption at 40% lighter weight, 100% recyclable — enabling true circular packaging.',
+ tags: ['Precision Instruments', 'Electronics', 'Art Transport', 'EPS Replacement'],
+ product: 'Buffer Material',
+ productHref: '#products',
+ },
+ {
+ Icon: Store,
+ color: '#0369A1',
+ gradient: 'from-sky-50 via-blue-50 to-indigo-50',
+ title: 'Retail & Supermarket',
+ en: 'Retail & Supermarket',
+ desc: 'Eco vest bags comply with plastic-reduction regulations, helping retail chains and supermarkets stay compliant while elevating brand image. Biodegradable formulation replaces PE bags — packaging that returns to the earth, leaving no white pollution.',
+ tags: ['Checkout Bags', 'Retail Chains', 'Plastic-ban Compliant', 'Brand ESG'],
+ product: 'Vest Bag',
+ productHref: '#products',
+ },
+ {
+ Icon: UtensilsCrossed,
+ color: '#DC2626',
+ gradient: 'from-red-50 via-rose-50 to-orange-50',
+ title: 'Food & Beverage',
+ en: 'Food & Beverage',
+ desc: 'PGT tableware withstands 120°C and is microwave-safe. Unlike melamine, it releases zero melamine toxin even when damaged. Lighter than stainless steel — the ideal choice for corporate cafeterias, catering events, and takeaway brands. FDA food-contact certified.',
+ tags: ['Takeaway Boxes', 'Corporate Cafeteria', 'Catering', 'Food Safety'],
+ product: 'PGT Tableware',
+ productHref: '#products',
+ },
+ {
+ Icon: Leaf,
+ color: '#16A34A',
+ gradient: 'from-green-50 via-emerald-50 to-teal-50',
+ title: 'Organic & Fresh Produce',
+ en: 'Organic & Fresh Produce',
+ desc: 'Eco bio bags withstand up to 120°C, supporting steaming and cooking applications. Fully biodegrades in 180 days with zero microplastic residue — ideal for organic produce, fresh markets, and kitchen waste, enabling farm-to-table sustainability.',
+ tags: ['Organic Produce', 'Fresh Packaging', 'Kitchen Waste', 'Farm Markets'],
+ product: 'Eco Bio Bag',
+ productHref: '#products',
+ },
+ ],
+ viewProduct: 'View',
+ },
+}
+
+export default function IndustrySolutions() {
+ const { lang } = useLanguage()
+ const s = SOLUTIONS[lang]
+
+ return (
+
+
+
+ {s.eyebrow}
+ {s.title}
+ {s.subtitle}
+
+
+
+ {s.items.map((item, i) => (
+
+
+ {/* Colored header */}
+
+ {/* Decorative rings */}
+
+
+
+
+
+
+
+ {item.en}
+
+
{item.title}
+
+
+
+ {/* Content */}
+
+
{item.desc}
+
+ {item.tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+
+ {s.viewProduct} {item.product}
+
+
+
+
+
+ ))}
+
+
+
+ )
+}
diff --git a/esg-website/src/components/Navbar.jsx b/esg-website/src/components/Navbar.jsx
new file mode 100644
index 0000000..b820191
--- /dev/null
+++ b/esg-website/src/components/Navbar.jsx
@@ -0,0 +1,168 @@
+import { useState, useEffect } from 'react'
+import { motion, AnimatePresence } from 'framer-motion'
+import { Leaf, Globe } from 'lucide-react'
+import { useLanguage } from '../context/LanguageContext'
+
+const NAV = {
+ zh: [
+ { label: '核心技術', href: '#features' },
+ { label: '產業應用', href: '#solutions' },
+ { label: '產品系列', href: '#products' },
+ { label: 'ESG 願景', href: '#esg' },
+ { label: '聯絡我們', href: '#contact' },
+ ],
+ en: [
+ { label: 'Technology', href: '#features' },
+ { label: 'Solutions', href: '#solutions' },
+ { label: 'Products', href: '#products' },
+ { label: 'ESG Vision', href: '#esg' },
+ { label: 'Contact', href: '#contact' },
+ ],
+}
+
+export default function Navbar() {
+ const [scrolled, setScrolled] = useState(false)
+ const [menuOpen, setMenuOpen] = useState(false)
+ const [activeSection, setActiveSection] = useState('')
+ const { lang, toggle } = useLanguage()
+
+ useEffect(() => {
+ const fn = () => setScrolled(window.scrollY > 60)
+ window.addEventListener('scroll', fn, { passive: true })
+ return () => window.removeEventListener('scroll', fn)
+ }, [])
+
+ useEffect(() => {
+ const sections = document.querySelectorAll('section[id]')
+ const obs = new IntersectionObserver(
+ (entries) =>
+ entries.forEach((e) => {
+ if (e.isIntersecting) setActiveSection('#' + e.target.id)
+ }),
+ { threshold: 0.35 }
+ )
+ sections.forEach((s) => obs.observe(s))
+ return () => obs.disconnect()
+ }, [])
+
+ const items = NAV[lang]
+ const cta = { zh: '索取樣品', en: 'Get Sample' }[lang]
+ const langLabel = lang === 'zh' ? 'EN' : '中'
+
+ return (
+
+
+ {/* Logo */}
+
+
+
+
+
+
+
+ {/* Desktop nav */}
+
+
+ {/* Mobile controls */}
+
+
+
+ {langLabel}
+
+
setMenuOpen(!menuOpen)} aria-label="選單">
+
+
+
+
+
+
+
+
+
+ {/* Mobile menu */}
+
+ {menuOpen && (
+
+
+
+ )}
+
+
+ )
+}
diff --git a/esg-website/src/components/ProductTabs.jsx b/esg-website/src/components/ProductTabs.jsx
new file mode 100644
index 0000000..7e07fe0
--- /dev/null
+++ b/esg-website/src/components/ProductTabs.jsx
@@ -0,0 +1,304 @@
+import { useState } from 'react'
+import { motion, AnimatePresence } from 'framer-motion'
+import { Package, ShoppingBag, Boxes, Utensils, ArrowRight, Shirt, Leaf } from 'lucide-react'
+import FadeIn from './FadeIn'
+import { useLanguage } from '../context/LanguageContext'
+
+const BASE = import.meta.env.BASE_URL
+
+const PRODUCTS = {
+ zh: [
+ {
+ id: 'box', Icon: Package, badge: '冷鏈物流',
+ label: '石頭紙箱', en: 'Stone Paper Box', tagline: '冷鏈物流的最佳拍檔',
+ image: `${BASE}images/products/box.jpg`,
+ desc: '以礦石粉複合材料製成的全新一代環保紙箱。石頭紙在濕冷環境下仍能保持結構強度,完全解決傳統紙箱遇水即軟的痛點,是冷凍海鮮、肉品與精密電子物流的最佳選擇。',
+ gradient: 'from-stone-100 via-amber-50 to-stone-200', iconColor: '#8B7355', iconOpacity: 0.25,
+ specs: [
+ { key: '材質', value: '礦石粉 80% + HDPE 20%' },
+ { key: '防水等級', value: 'IPX6(72h 浸水不損)' },
+ { key: '適用溫度', value: '-20°C ~ 80°C' },
+ { key: '抗壓強度', value: '較同規格紙箱高 30%' },
+ { key: '規格', value: '多種尺寸,支援訂製印刷' },
+ { key: '認證', value: 'SGS · FDA 食品安全' },
+ ],
+ },
+ {
+ id: 'security-bag', Icon: ShoppingBag, badge: '電商物流',
+ label: '二次循環破壞袋', en: 'Recyclable Security Bag', tagline: '電商永續包裝新選擇',
+ image: `${BASE}images/products/security-bag.jpg`,
+ desc: '採用二次循環石頭紙製成的防偽破壞袋,開封後留下不可逆撕裂痕跡,確保內容物安全。讓消費者在收到商品的同時,感受到品牌的永續誠意。',
+ gradient: 'from-slate-100 via-blue-50 to-slate-200', iconColor: '#4A6B8A', iconOpacity: 0.25,
+ specs: [
+ { key: '材質', value: '二次循環石頭紙複合膜' },
+ { key: '安全特性', value: '開封後無法復原(防偽)' },
+ { key: '降解時間', value: '180 天完全生物分解' },
+ { key: '用途', value: '快遞包裝 · 機密文件傳遞' },
+ { key: '認證', value: 'FDA 無毒 · RoHS 合規' },
+ { key: '碳排放', value: '較傳統塑料袋降低 75%' },
+ ],
+ },
+ {
+ id: 'vest-bag', Icon: Shirt, badge: '零售包裝',
+ label: '背心袋', en: 'Stone Paper Vest Bag', tagline: '零售業的綠色升級首選',
+ image: `${BASE}images/products/vest-bag.jpg`,
+ desc: '以石頭紙複合膜製成的背心袋,手感與傳統塑膠袋相近,卻完全無塑、可自然分解。適用於零售門市、超市與精品品牌,讓每一次購物都是一次環保選擇。',
+ gradient: 'from-teal-50 via-cyan-50 to-teal-100', iconColor: '#0F766E', iconOpacity: 0.22,
+ specs: [
+ { key: '材質', value: '石頭紙複合膜' },
+ { key: '承重', value: '最大負荷 8 kg' },
+ { key: '防水', value: '防油污 · 防潮防濕' },
+ { key: '降解時間', value: '180 天自然環境分解' },
+ { key: '用途', value: '零售 · 超市 · 精品購物袋' },
+ { key: '訂製', value: '支援品牌印刷 · 尺寸訂製' },
+ ],
+ },
+ {
+ id: 'buffer', Icon: Boxes, badge: '工業包裝',
+ label: '緩衝材', en: 'Eco Buffer Material', tagline: '取代保麗龍的完美方案',
+ image: `${BASE}images/products/buffer.jpg`,
+ desc: '採用石頭紙蜂巢立體結構,緩衝係數超越傳統 EPE 泡棉,重量輕 40%,100% 可回收,完美保護精密電子與脆性物品,同時讓工業包裝走向真正的循環經濟。',
+ gradient: 'from-emerald-50 via-green-50 to-emerald-100', iconColor: '#2D5A27', iconOpacity: 0.2,
+ specs: [
+ { key: '材質', value: '石頭紙蜂巢複合結構' },
+ { key: '緩衝係數', value: '> 95%(超越 EPE 泡棉)' },
+ { key: '重量優勢', value: '較傳統泡棉輕 40%' },
+ { key: '用途', value: '精密儀器 · 電子產品 · 藝術品' },
+ { key: '認證', value: 'SGS 無毒 · 環保標章' },
+ { key: '回收性', value: '100% 可回收,可堆肥降解' },
+ ],
+ },
+ {
+ id: 'tableware', Icon: Utensils, badge: '餐飲應用',
+ label: '餐具', en: 'PGT Eco Tableware', tagline: '餐飲業的綠色革命',
+ image: `${BASE}images/products/tableware.jpg`,
+ desc: 'PGT(Plant + Geo + Technology)環保餐具,以植物纖維與礦石複合技術製成。提供與傳統塑膠同等的耐熱性與機械強度,同時在自然環境中 60 天完全降解,徹底解決一次性餐具的環境問題。',
+ gradient: 'from-orange-50 via-amber-50 to-orange-100', iconColor: '#B45309', iconOpacity: 0.22,
+ specs: [
+ { key: '材質', value: 'PGT 植物礦石複合材' },
+ { key: '耐熱溫度', value: '120°C(可微波加熱)' },
+ { key: '降解時間', value: '60 天完全降解' },
+ { key: '用途', value: '外帶杯 · 餐盤 · 刀叉組' },
+ { key: '認證', value: 'FDA 食品安全 · BSCI' },
+ { key: '訂製服務', value: '支援品牌印刷與 ODM' },
+ ],
+ },
+ {
+ id: 'bio-bag', Icon: Leaf, badge: '生物分解',
+ label: '環保生物袋', en: 'Eco Bio Bag', tagline: '真正零負擔的環保承諾',
+ image: `${BASE}images/products/bio-bag.jpg`,
+ desc: '以 PLA 植物基材料與石頭紙複合技術製成,在土壤或堆肥環境中 90 天內完全生物分解,不殘留任何微塑料。適用於家庭垃圾袋、市場購物袋、餐廳外帶袋等各類日常應用。',
+ gradient: 'from-lime-50 via-green-50 to-lime-100', iconColor: '#4D7C0F', iconOpacity: 0.22,
+ specs: [
+ { key: '材質', value: 'PLA + 石頭紙複合膜' },
+ { key: '降解時間', value: '90 天完全生物分解' },
+ { key: '用途', value: '購物袋 · 垃圾袋 · 堆肥袋' },
+ { key: '無毒', value: '不含塑化劑 · 無重金屬' },
+ { key: '認證', value: 'EN13432 · ASTM D6400' },
+ { key: '應用', value: '家庭 · 餐廳 · 超市 · 市集' },
+ ],
+ },
+ ],
+ en: [
+ {
+ id: 'box', Icon: Package, badge: 'Cold Chain',
+ label: 'Stone Paper Box', en: 'Stone Paper Box', tagline: 'The definitive cold chain solution',
+ image: `${BASE}images/products/box.jpg`,
+ desc: 'Next-generation eco-packaging made from mineral composite. Stone paper maintains structural integrity in wet and frozen environments, eliminating the weakness of traditional cardboard in cold-chain logistics.',
+ gradient: 'from-stone-100 via-amber-50 to-stone-200', iconColor: '#8B7355', iconOpacity: 0.25,
+ specs: [
+ { key: 'Material', value: '80% Mineral Powder + 20% HDPE' },
+ { key: 'Waterproof', value: 'IPX6 (72h submersion)' },
+ { key: 'Temp. Range', value: '-20°C to 80°C' },
+ { key: 'Compression', value: '30% stronger than same-size cardboard' },
+ { key: 'Dimensions', value: 'Multiple sizes, custom print available' },
+ { key: 'Certifications', value: 'SGS · FDA Food Grade' },
+ ],
+ },
+ {
+ id: 'security-bag', Icon: ShoppingBag, badge: 'E-Commerce',
+ label: 'Recyclable Security Bag', en: 'Recyclable Security Bag', tagline: 'Sustainable e-commerce packaging',
+ image: `${BASE}images/products/security-bag.jpg`,
+ desc: "Made from secondary-cycle stone paper, this tamper-evident security bag leaves an irreversible tear mark once opened. Lets customers experience your brand's sustainability commitment at unboxing.",
+ gradient: 'from-slate-100 via-blue-50 to-slate-200', iconColor: '#4A6B8A', iconOpacity: 0.25,
+ specs: [
+ { key: 'Material', value: 'Recycled Stone Paper Composite Film' },
+ { key: 'Security', value: 'Tamper-evident, irreversible opening' },
+ { key: 'Degradation', value: 'Full biodegradation in 180 days' },
+ { key: 'Use Case', value: 'Express packaging · Confidential docs' },
+ { key: 'Certifications', value: 'FDA Non-toxic · RoHS Compliant' },
+ { key: 'Carbon', value: '75% lower emissions vs. plastic bags' },
+ ],
+ },
+ {
+ id: 'vest-bag', Icon: Shirt, badge: 'Retail',
+ label: 'Stone Paper Vest Bag', en: 'Stone Paper Vest Bag', tagline: 'The green upgrade for retail',
+ image: `${BASE}images/products/vest-bag.jpg`,
+ desc: 'Made from stone paper composite film, our vest bag feels like traditional plastic yet is completely plastic-free and biodegradable. Ideal for retail stores, supermarkets, and premium brands.',
+ gradient: 'from-teal-50 via-cyan-50 to-teal-100', iconColor: '#0F766E', iconOpacity: 0.22,
+ specs: [
+ { key: 'Material', value: 'Stone Paper Composite Film' },
+ { key: 'Load Capacity', value: 'Up to 8 kg' },
+ { key: 'Protection', value: 'Oil & moisture resistant' },
+ { key: 'Degradation', value: 'Natural degradation in 180 days' },
+ { key: 'Use Case', value: 'Retail · Supermarket · Boutique' },
+ { key: 'Custom', value: 'Brand printing & custom sizing' },
+ ],
+ },
+ {
+ id: 'buffer', Icon: Boxes, badge: 'Industrial',
+ label: 'Eco Buffer Material', en: 'Eco Buffer Material', tagline: 'The premier EPS foam alternative',
+ image: `${BASE}images/products/buffer.jpg`,
+ desc: 'Stone paper honeycomb structure surpasses traditional EPE foam in cushioning coefficient, 40% lighter, 100% recyclable. Protects precision electronics and fragile items while advancing true circular packaging.',
+ gradient: 'from-emerald-50 via-green-50 to-emerald-100', iconColor: '#2D5A27', iconOpacity: 0.2,
+ specs: [
+ { key: 'Material', value: 'Stone Paper Honeycomb Composite' },
+ { key: 'Cushioning', value: '> 95% (exceeds EPE foam)' },
+ { key: 'Weight', value: '40% lighter than traditional foam' },
+ { key: 'Use Case', value: 'Precision instruments · Electronics · Art' },
+ { key: 'Certifications', value: 'SGS Non-toxic · Eco Label' },
+ { key: 'Recycling', value: '100% recyclable, compostable' },
+ ],
+ },
+ {
+ id: 'tableware', Icon: Utensils, badge: 'Food Service',
+ label: 'PGT Eco Tableware', en: 'PGT Eco Tableware', tagline: 'The green revolution for food service',
+ image: `${BASE}images/products/tableware.jpg`,
+ desc: 'PGT (Plant + Geo + Technology) tableware made from plant fiber and mineral composite. Delivers equivalent heat resistance and mechanical strength as plastics, yet fully degrades in 60 days.',
+ gradient: 'from-orange-50 via-amber-50 to-orange-100', iconColor: '#B45309', iconOpacity: 0.22,
+ specs: [
+ { key: 'Material', value: 'PGT Plant-Mineral Composite' },
+ { key: 'Heat Resistance', value: '120°C (microwave safe)' },
+ { key: 'Degradation', value: 'Fully degraded in 60 days' },
+ { key: 'Use Case', value: 'Cups · Plates · Cutlery sets' },
+ { key: 'Certifications', value: 'FDA Food Grade · BSCI' },
+ { key: 'Custom', value: 'Brand printing & ODM available' },
+ ],
+ },
+ {
+ id: 'bio-bag', Icon: Leaf, badge: 'Biodegradable',
+ label: 'Eco Bio Bag', en: 'Eco Bio Bag', tagline: 'A truly zero-burden eco commitment',
+ image: `${BASE}images/products/bio-bag.jpg`,
+ desc: 'Made from PLA plant-based materials and stone paper composite technology, fully biodegrades in 90 days in soil or compost with zero microplastic residue. Suitable for household, restaurant, and market use.',
+ gradient: 'from-lime-50 via-green-50 to-lime-100', iconColor: '#4D7C0F', iconOpacity: 0.22,
+ specs: [
+ { key: 'Material', value: 'PLA + Stone Paper Composite Film' },
+ { key: 'Degradation', value: 'Full biodegradation in 90 days' },
+ { key: 'Use Case', value: 'Shopping · Trash · Compost bags' },
+ { key: 'Non-toxic', value: 'Plasticizer-free · No heavy metals' },
+ { key: 'Certifications', value: 'EN13432 · ASTM D6400' },
+ { key: 'Applications', value: 'Home · Restaurant · Supermarket · Market' },
+ ],
+ },
+ ],
+}
+
+const COPY = {
+ zh: { eyebrow: 'Product Series', title: '產品系列', subtitle: '從包裝到餐具,全系列石頭紙產品,為您的供應鏈注入永續動能。', cta: '索取樣品 / 規格書' },
+ en: { eyebrow: 'Product Series', title: 'Product Series', subtitle: 'From packaging to tableware — our full stone paper line powers your sustainable supply chain.', cta: 'Request Sample / Spec Sheet' },
+}
+
+function ProductVisual({ product }) {
+ if (product.image) {
+ return (
+
+
+
+ )
+ }
+ return (
+
+ )
+}
+
+export default function ProductTabs() {
+ const [active, setActive] = useState(0)
+ const { lang } = useLanguage()
+ const products = PRODUCTS[lang]
+ const c = COPY[lang]
+ const product = products[active]
+
+ return (
+
+
+
+ {c.eyebrow}
+ {c.title}
+ {c.subtitle}
+
+
+ {/* Tab bar */}
+
+
+ {products.map((p, i) => (
+
setActive(i)}
+ className="flex-1 min-w-[80px] relative py-2.5 px-2 rounded-xl text-[11px] font-light tracking-wide transition-colors duration-200 whitespace-nowrap"
+ style={{ color: active === i ? '#2D5A27' : '#6C757D' }}
+ >
+ {active === i && (
+
+ )}
+
+
+ {p.label}
+
+
+ ))}
+
+
+
+ {/* Content */}
+
+
+
+
+
+ {product.badge}
+ {product.en}
+
+
{product.label}
+
{product.tagline}
+
{product.desc}
+
+ {product.specs.map((spec) => (
+
+ {spec.key}
+ {spec.value}
+
+ ))}
+
+
+ {c.cta}
+
+
+
+
+
+
+
+ )
+}
diff --git a/esg-website/src/components/ScrollProgress.jsx b/esg-website/src/components/ScrollProgress.jsx
new file mode 100644
index 0000000..eafff53
--- /dev/null
+++ b/esg-website/src/components/ScrollProgress.jsx
@@ -0,0 +1,11 @@
+import { useScroll, motion } from 'framer-motion'
+
+export default function ScrollProgress() {
+ const { scrollYProgress } = useScroll()
+ return (
+
+ )
+}
diff --git a/esg-website/src/context/LanguageContext.jsx b/esg-website/src/context/LanguageContext.jsx
new file mode 100644
index 0000000..1714e42
--- /dev/null
+++ b/esg-website/src/context/LanguageContext.jsx
@@ -0,0 +1,14 @@
+import { createContext, useContext, useState } from 'react'
+
+const Ctx = createContext({ lang: 'zh', toggle: () => {} })
+
+export function LanguageProvider({ children }) {
+ const [lang, setLang] = useState('zh')
+ return (
+ setLang((l) => (l === 'zh' ? 'en' : 'zh')) }}>
+ {children}
+
+ )
+}
+
+export const useLanguage = () => useContext(Ctx)
diff --git a/esg-website/src/index.css b/esg-website/src/index.css
new file mode 100644
index 0000000..c46d47c
--- /dev/null
+++ b/esg-website/src/index.css
@@ -0,0 +1,46 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+html {
+ scroll-behavior: smooth;
+}
+
+body {
+ font-family: 'Inter', 'Noto Sans TC', sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ background-color: #F8F9FA;
+}
+
+@layer utilities {
+ .scrollbar-hide {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+ }
+ .scrollbar-hide::-webkit-scrollbar {
+ display: none;
+ }
+}
+
+/* === Japanese Zen Leaf Float Animations === */
+@keyframes leaf-sway-1 {
+ 0%, 100% { transform: translateY(0px) rotate(0deg) translateX(0px) scale(1); opacity: 0.18; }
+ 25% { transform: translateY(-24px) rotate(16deg) translateX(10px) scale(1.06); opacity: 0.3; }
+ 50% { transform: translateY(-12px) rotate(-8deg) translateX(-6px) scale(0.95); opacity: 0.22; }
+ 75% { transform: translateY(-30px) rotate(22deg) translateX(14px) scale(1.08); opacity: 0.35; }
+}
+@keyframes leaf-sway-2 {
+ 0%, 100% { transform: translateY(0px) rotate(5deg) translateX(0px) scale(1); opacity: 0.15; }
+ 33% { transform: translateY(-20px) rotate(-14deg) translateX(-14px) scale(1.05); opacity: 0.28; }
+ 66% { transform: translateY(-34px) rotate(10deg) translateX(8px) scale(0.96); opacity: 0.24; }
+}
+@keyframes leaf-sway-3 {
+ 0%, 100% { transform: translateY(0px) rotate(-5deg) translateX(0px) scale(1); opacity: 0.2; }
+ 40% { transform: translateY(-28px) rotate(20deg) translateX(16px) scale(1.07); opacity: 0.34; }
+ 70% { transform: translateY(-10px) rotate(-16deg) translateX(-9px) scale(0.97); opacity: 0.18; }
+}
+
+.animate-leaf-1 { animation: leaf-sway-1 8s ease-in-out infinite; }
+.animate-leaf-2 { animation: leaf-sway-2 11s ease-in-out infinite; }
+.animate-leaf-3 { animation: leaf-sway-3 9.5s ease-in-out infinite; }
diff --git a/esg-website/src/main.jsx b/esg-website/src/main.jsx
new file mode 100644
index 0000000..e14d575
--- /dev/null
+++ b/esg-website/src/main.jsx
@@ -0,0 +1,10 @@
+import { StrictMode } from 'react'
+import { createRoot } from 'react-dom/client'
+import './index.css'
+import App from './App.jsx'
+
+createRoot(document.getElementById('root')).render(
+
+
+
+)
diff --git a/esg-website/tailwind.config.js b/esg-website/tailwind.config.js
new file mode 100644
index 0000000..bd8c5e6
--- /dev/null
+++ b/esg-website/tailwind.config.js
@@ -0,0 +1,19 @@
+export default {
+ content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
+ theme: {
+ extend: {
+ colors: {
+ forest: '#2D5A27',
+ 'forest-dark': '#1e3d1a',
+ 'forest-light': '#3d7a35',
+ 'minimal-white': '#F8F9FA',
+ graphite: '#6C757D',
+ marble: '#F0EDE8',
+ },
+ fontFamily: {
+ sans: ['Inter', 'Noto Sans TC', 'sans-serif'],
+ },
+ },
+ },
+ plugins: [],
+}
diff --git a/esg-website/vite.config.js b/esg-website/vite.config.js
new file mode 100644
index 0000000..08d9db3
--- /dev/null
+++ b/esg-website/vite.config.js
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+
+export default defineConfig({
+ plugins: [react()],
+ base: '/',
+})