// soft keys LP v2 — SP対応版 // 「1人に頼らない仕組みを、LINEで。」 (function () { const R = React; const C = { bg: 'oklch(0.99 0.006 150)', sf: '#ffffff', ink: 'oklch(0.24 0.012 152)', sub: 'oklch(0.50 0.012 152)', faint: 'oklch(0.70 0.010 152)', ln: 'oklch(0.91 0.010 152)', gr: 'oklch(0.56 0.11 158)', grd: 'oklch(0.44 0.10 158)', grs: 'oklch(0.96 0.025 158)', f: '"Zen Kaku Gothic New", sans-serif', m: '"Space Mono", monospace', sh: '0 10px 32px oklch(0.55 0.08 150 / 0.09)', }; /* ── viewport hook ── */ const useViewport = () => { const [w, setW] = R.useState(typeof window !== 'undefined' ? window.innerWidth : 1200); R.useEffect(() => { const h = () => setW(window.innerWidth); window.addEventListener('resize', h); return () => window.removeEventListener('resize', h); }, []); return { isMobile: w < 768, isTablet: w < 1024, w }; }; /* ── primitives ── */ function Glyph({ size = 24, color }) { return ( ); } function SLabel({ children }) { return
{children}
; } function SHead({ children, sub, center, isMobile }) { return (

{children}

{sub &&

{sub}

}
); } function Card({ children, style }) { return
{children}
; } function Slot({ label, h, r = 16 }) { return (
{label}
); } function Field({ label, placeholder, type = 'text', area, opt, name }) { const b = { width: '100%', boxSizing: 'border-box', font: `15px ${C.f}`, color: C.ink, padding: '13px 15px', borderRadius: 11, border: `1px solid ${C.ln}`, background: C.bg, outline: 'none' }; return (