/* LoginCard.jsx — PW-001 Login Screen states */ const TOKENS = { primary: '#0D7A6E', primaryHover: '#E6F4F2', primaryPressed: '#085C53', gold: '#C9A84C', n900: '#111827', n700: '#374151', n500: '#6B7280', n300: '#D1D5DB', n100: '#F3F4F6', n000: '#FFFFFF', error: '#DC2626', errorBg: '#FEF2F2', warning: '#D97706', warningBg: '#FFFBEB', }; const loginStyles = { frame: { width: 1280, height: 800, background: TOKENS.n100, position: 'relative', fontFamily: "'Inter', 'Pretendard', 'Noto Sans KR', system-ui, -apple-system, sans-serif", color: TOKENS.n900, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', overflow: 'hidden', }, card: { width: 480, background: TOKENS.n000, borderRadius: 12, boxShadow: '0 4px 12px rgba(0,0,0,0.12)', padding: '48px 48px 40px', boxSizing: 'border-box', }, logoRow: { display: 'flex', flexDirection: 'column', alignItems: 'center', marginBottom: 36, }, logoWrap: { display: 'flex', alignItems: 'center', gap: 10, }, logoMark: { width: 32, height: 32, borderRadius: 8, background: TOKENS.primary, display: 'flex', alignItems: 'center', justifyContent: 'center', color: TOKENS.n000, fontWeight: 700, fontSize: 15, letterSpacing: 0.2, }, logoText: { fontSize: 24, fontWeight: 700, color: TOKENS.n900, letterSpacing: -0.3, }, subtitle: { marginTop: 10, fontSize: 13, fontWeight: 500, color: TOKENS.n500, letterSpacing: 0.4, textTransform: 'uppercase', }, fieldGroup: { display: 'flex', flexDirection: 'column', gap: 16, }, field: { display: 'flex', flexDirection: 'column', gap: 6, }, label: { fontSize: 12, fontWeight: 600, color: TOKENS.n700, }, inputWrap: (opts = {}) => ({ position: 'relative', height: 44, borderRadius: 8, border: `1px solid ${opts.error ? TOKENS.error : opts.focus ? TOKENS.primary : TOKENS.n300}`, background: TOKENS.n000, boxShadow: opts.focus ? `0 0 0 3px ${opts.error ? 'rgba(220,38,38,0.15)' : 'rgba(13,122,110,0.15)'}` : 'none', display: 'flex', alignItems: 'center', transition: 'all 120ms ease', }), input: { flex: 1, border: 'none', outline: 'none', background: 'transparent', fontSize: 14, color: TOKENS.n900, padding: '0 14px', height: '100%', fontFamily: 'inherit', }, placeholder: { color: TOKENS.n500, }, eyeBtn: { width: 44, height: 44, display: 'flex', alignItems: 'center', justifyContent: 'center', color: TOKENS.n500, cursor: 'pointer', }, button: (enabled) => ({ marginTop: 24, width: '100%', height: 48, borderRadius: 8, border: 'none', background: enabled ? TOKENS.primary : TOKENS.n300, color: enabled ? TOKENS.n000 : TOKENS.n500, fontSize: 15, fontWeight: 600, fontFamily: 'inherit', cursor: enabled ? 'pointer' : 'not-allowed', letterSpacing: 0.2, }), forgot: { marginTop: 16, fontSize: 13, fontWeight: 500, color: TOKENS.primary, cursor: 'pointer', display: 'inline-block', }, banner: (kind) => ({ display: 'flex', gap: 10, padding: '12px 14px', borderRadius: 8, background: kind === 'error' ? TOKENS.errorBg : TOKENS.warningBg, border: `1px solid ${kind === 'error' ? 'rgba(220,38,38,0.2)' : 'rgba(217,119,6,0.2)'}`, fontSize: 13, fontWeight: 500, color: kind === 'error' ? TOKENS.error : TOKENS.warning, lineHeight: 1.5, marginTop: 16, alignItems: 'flex-start', }), bannerIcon: { flexShrink: 0, marginTop: 1, }, bannerCode: { fontSize: 11, fontWeight: 500, opacity: 0.75, marginLeft: 4, fontFamily: "'JetBrains Mono', 'SF Mono', Menlo, monospace", }, footer: { position: 'absolute', bottom: 24, left: 0, right: 0, textAlign: 'center', fontSize: 12, fontWeight: 400, color: TOKENS.n500, letterSpacing: 0.2, }, stateTag: { position: 'absolute', top: 20, left: 20, display: 'flex', alignItems: 'center', gap: 8, padding: '6px 10px', background: TOKENS.n000, border: `1px solid ${TOKENS.n300}`, borderRadius: 999, fontSize: 11, fontWeight: 600, color: TOKENS.n700, letterSpacing: 0.3, textTransform: 'uppercase', }, stateDot: { width: 6, height: 6, borderRadius: 999, }, }; /* -------- Icons -------- */ const IconEye = ({ off = false }) => ( ); const IconAlert = ({ color }) => ( ); const IconLock = ({ color }) => ( ); /* -------- Building blocks -------- */ function Logo() { return (