Skip to content

Commit f880f0d

Browse files
smitug01claude
andcommitted
Convert Tech Education Sponsorship to a detail modal (drop SITCON link)
- Replace the external github.com/sitcon-tw link with a SponsorModal popup opened from the "View details" button - Modal shows program details, eligibility, support, cost and an apply-via-email CTA; reuses existing .modal-* / .eyebrow styles - Add sponsorModal i18n content (EN + ZH); no SITCON association Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent dd1ecda commit f880f0d

2 files changed

Lines changed: 74 additions & 1 deletion

File tree

i18n.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,21 @@ window.I18N = {
200200
sponsorTitle: "Tech Education Sponsorship Program",
201201
sponsorDesc: "Through equipment and cloud resource sponsorship, lending, and faculty support, we are committed to supporting technology education in schools across Taiwan, nurturing future information and technology professionals.",
202202
sponsorBtn: "View details",
203+
sponsorModal: {
204+
eyebrow: "Tech Education",
205+
title: "Sponsorship Program Details",
206+
desc: "Simple Information's Tech Education Sponsorship Program provides schools, student clubs, and non-profit tech communities with the infrastructure they need to learn, build, and grow — at no cost.",
207+
items: [
208+
["What we provide", "Dedicated servers, VPS instances, cloud storage, and network resources"],
209+
["Eligibility", "Schools, student clubs, and non-profit tech communities in Taiwan"],
210+
["Duration", "Annual, renewable based on program activity"],
211+
["Support", "Technical onboarding and a dedicated point of contact"],
212+
["Cost", "Free of charge"],
213+
],
214+
applyLabel: "How to apply",
215+
applyDesc: "Send us a brief introduction of your organization, how you plan to use the resources, and your expected needs. We'll get back to you within 5 business days.",
216+
applyBtn: "Apply via email",
217+
},
203218
casesTitle: "Where it lands",
204219
cases: [
205220
{ t: "NCKU Codpy Community", d: "Providing hardware equipment for events, supporting the open source robotics software community, and promoting open source innovation." },
@@ -422,6 +437,21 @@ window.I18N = {
422437
sponsorTitle: "科技教育贊助計畫",
423438
sponsorDesc: "透過設備與雲端資源贊助、借用與師資提供,我們致力支持台灣各級學校的科技教育,培養未來的資訊、科技中堅力量。",
424439
sponsorBtn: "查看詳情",
440+
sponsorModal: {
441+
eyebrow: "科技教育",
442+
title: "贊助計畫詳情",
443+
desc: "簡單資訊的科技教育贊助計畫,免費提供各級學校、學生社團與非營利科技社群所需的基礎設施資源,讓更多人能夠學習、創作與成長。",
444+
items: [
445+
["提供內容", "實體伺服器、VPS、雲端儲存與網路資源"],
446+
["申請資格", "台灣境內各級學校、學生社團及非營利科技社群"],
447+
["贊助期限", "一年為期,依計畫活躍度續約"],
448+
["技術支援", "提供技術導入協助與專屬聯絡窗口"],
449+
["費用", "完全免費"],
450+
],
451+
applyLabel: "如何申請",
452+
applyDesc: "請來信簡述貴單位背景、資源使用規劃及預估需求,我們將於五個工作天內回覆。",
453+
applyBtn: "寄信申請",
454+
},
425455
casesTitle: "落地之處",
426456
cases: [
427457
{ t: "成大開源機器人系統軟體社群", d: "提供活動硬體設備,支持開源機器人系統軟體社群,促進開源技術與創新。" },

pages.jsx

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,49 @@ function PartnershipPage({ t, motif, go }) {
119119
/* ============================================================
120120
RESPONSIBILITY PAGE
121121
============================================================ */
122+
function SponsorModal({ t, onClose }) {
123+
const r = t.responsibility;
124+
useEffect(() => {
125+
const onKey = (e) => { if (e.key === "Escape") onClose(); };
126+
document.addEventListener("keydown", onKey);
127+
document.body.style.overflow = "hidden";
128+
return () => { document.removeEventListener("keydown", onKey); document.body.style.overflow = ""; };
129+
}, []);
130+
const m = r.sponsorModal;
131+
return (
132+
<div className="modal-scrim" onClick={onClose}>
133+
<div className="modal" style={{ maxWidth: "600px" }} onClick={(e) => e.stopPropagation()} role="dialog" aria-modal="true">
134+
<button className="modal-close icon-btn" onClick={onClose} aria-label="Close"><Icon name="close" /></button>
135+
<div className="modal-body" style={{ paddingTop: "32px" }}>
136+
<span className="eyebrow"><span className="tick"></span>{m.eyebrow}</span>
137+
<h2 style={{ fontSize: "22px", fontWeight: 700, margin: "12px 0 8px", lineHeight: 1.3 }}>{m.title}</h2>
138+
<p style={{ fontSize: "15px", color: "var(--ink-2)", lineHeight: 1.7, marginBottom: "28px" }}>{m.desc}</p>
139+
140+
<dl className="modal-specs">
141+
{m.items.map(([dt, dd]) => (
142+
<div className="modal-spec" key={dt}>
143+
<dt>{dt}</dt>
144+
<dd>{dd}</dd>
145+
</div>
146+
))}
147+
</dl>
148+
149+
<div style={{ marginTop: "28px", padding: "20px", background: "var(--surface-2)", borderRadius: "12px", border: "1px solid var(--line)" }}>
150+
<p style={{ fontSize: "13px", color: "var(--ink-3)", marginBottom: "6px", fontWeight: 600, textTransform: "uppercase", letterSpacing: ".08em" }}>{m.applyLabel}</p>
151+
<p style={{ fontSize: "14.5px", color: "var(--ink-2)", lineHeight: 1.6, marginBottom: "16px" }}>{m.applyDesc}</p>
152+
<a href="mailto:sales@simple.taipei" className="btn" style={{ display: "inline-flex", alignItems: "center", gap: "8px" }}>
153+
{m.applyBtn}<Icon name="mail" />
154+
</a>
155+
</div>
156+
</div>
157+
</div>
158+
</div>
159+
);
160+
}
161+
122162
function ResponsibilityPage({ t, motif, go }) {
123163
const r = t.responsibility;
164+
const [sponsorOpen, setSponsorOpen] = useState(false);
124165
return (
125166
<main>
126167
<PageHero eyebrow={r.eyebrow} prefix={r.heroPrefix} rotating={r.rotating} title={r.title} subtitle={r.subtitle} cta={r.cta} ctaHref="#/responsibility" motif={motif} />
@@ -162,7 +203,7 @@ function ResponsibilityPage({ t, motif, go }) {
162203
<Eyebrow>{r.eyebrow}</Eyebrow>
163204
<h2 className="sec-title">{r.sponsorTitle}</h2>
164205
<p>{r.sponsorDesc}</p>
165-
<a href="https://github.com/sitcon-tw/2026-cfs" target="_blank" rel="noopener noreferrer" className="tlink">{r.sponsorBtn}<Icon name="arrowUpRight" /></a>
206+
<button onClick={() => setSponsorOpen(true)} className="tlink" style={{ background: "none", border: "none", cursor: "pointer", font: "inherit", color: "inherit", display: "inline-flex", alignItems: "center", gap: "6px", padding: 0 }}>{r.sponsorBtn}<Icon name="arrowUpRight" /></button>
166207
</div>
167208
<div className="rs-sponsor-deco">
168209
<Icon name="network" className="rs-sponsor-glyph" />
@@ -171,6 +212,8 @@ function ResponsibilityPage({ t, motif, go }) {
171212
</div>
172213
</section>
173214

215+
{sponsorOpen && <SponsorModal t={t} onClose={() => setSponsorOpen(false)} />}
216+
174217
{/* Case studies */}
175218
<section className="section rs-cases">
176219
<div className="wrap">

0 commit comments

Comments
 (0)