// Service grid — supports 3 card styles via tweak
const SFServices = ({ lang, accent, cardStyle='spec' }) => {
const t = (en, zh) => sfT(lang, en, zh);
return (
{t('Services / 20+ across 6 categories', '服務 · 六大類別共 20+ 項')}
{t('Everything for your IT and low-voltage layer.', '弱電與 IT 系統,一站式包辦。')}
{t('From copper and fiber up to the AI workflow on top — all from one team.',
'由銅纜光纖到 AI 流程 — 全部由我們團隊完成。')}
{SF_CATEGORIES.map((cat, ci) => (
{String(ci+1).padStart(2,'0')} /
{t(cat.en, cat.zh)}
{cat.services.map(s => )}
))}
);
};
const SFServiceCard = ({ svc, lang, accent, cardStyle }) => {
const t = (en, zh) => sfT(lang, en, zh);
const icon = SF_ICONS[svc.id];
const [hover, setHover] = React.useState(false);
// ---- spec card (default) — terminal-style with mono spec line ----
if (cardStyle === 'spec') {
return (
setHover(true)} onMouseLeave={()=>setHover(false)} style={{
position:'relative', padding:'20px 20px 16px', background:'var(--bg-card)',
border:'1px solid var(--border-subtle)',
borderTop: hover ? `2px solid ${accent}` : '1px solid var(--border-subtle)',
transition:'border-color 180ms', cursor:'pointer',
}}>
{icon}
{svc.id.toUpperCase()}
{t(svc.en, svc.zh)}
{t(svc.descEn, svc.descZh)}
{svc.spec}
);
}
// ---- bordered grid — flat, dense, separator-only ----
if (cardStyle === 'bordered') {
return (
setHover(true)} onMouseLeave={()=>setHover(false)} style={{
padding:'24px', background: hover ? 'var(--bg-fill-1)' : 'var(--bg-card)',
borderRight:'1px solid var(--border-subtle)', borderBottom:'1px solid var(--border-subtle)',
transition:'background 180ms', cursor:'pointer',
}}>
{icon}
{t(svc.en, svc.zh)}
{t(svc.descEn, svc.descZh)}
);
}
// ---- minimal list — left-icon, no borders ----
return (
setHover(true)} onMouseLeave={()=>setHover(false)} style={{
display:'flex', gap:14, padding:'16px 8px', cursor:'pointer',
borderBottom:'1px solid var(--border-subtle)',
}}>
{icon}
{t(svc.en, svc.zh)}
{svc.spec}
{t(svc.descEn, svc.descZh)}
);
};
window.SFServices = SFServices;