+
{PRESET_COLORS.map(c => {
const isActive = config.color.toLowerCase() === c.toLowerCase();
return (
@@ -209,13 +361,13 @@ export function SettingsPanel({ config, onChange, onSaveAsPreset, t }: SettingsP
onClick={() => onChange({ color: c })}
title={c}
style={{
- width: 22, height: 22, borderRadius: '50%',
+ width: 26, height: 26, borderRadius: '50%',
background: c,
border: `2px solid ${isActive ? 'white' : 'rgba(255,255,255,0.1)'}`,
cursor: 'pointer',
- transform: isActive ? 'scale(1.2)' : 'scale(1)',
- transition: 'transform 150ms cubic-bezier(0.34, 1.56, 0.64, 1), border-color 120ms',
- boxShadow: isActive ? `0 0 0 2px var(--accent-glow)` : 'none',
+ transform: isActive ? 'scale(1.25)' : 'scale(1)',
+ transition: 'transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1), border-color 150ms',
+ boxShadow: isActive ? `0 0 0 3px var(--accent), 0 2px 8px rgba(0,0,0,0.3)` : '0 2px 4px rgba(0,0,0,0.2)',
}}
onMouseEnter={e => { if (!isActive) e.currentTarget.style.transform = 'scale(1.15)'; }}
onMouseLeave={e => { if (!isActive) e.currentTarget.style.transform = 'scale(1)'; }}
@@ -223,23 +375,29 @@ export function SettingsPanel({ config, onChange, onSaveAsPreset, t }: SettingsP
);
})}
- {/* Hex input */}
-
-
onChange({ color: e.target.value })}
- style={{ width: 32, height: 28, borderRadius: 'var(--radius-sm)', cursor: 'pointer', flexShrink: 0 }}
- />
+
+
+ onChange({ color: e.target.value })}
+ style={{ width: '100%', height: '100%', border: 'none', padding: 0, cursor: 'pointer' }}
+ />
+
-
#
+
#
- {/* Live color preview */}
@@ -271,7 +429,7 @@ export function SettingsPanel({ config, onChange, onSaveAsPreset, t }: SettingsP
{/* ── Dimensions ──────────────────────────────────── */}
}
+ icon={}
>
onChange({ size: v })} />
@@ -286,7 +444,7 @@ export function SettingsPanel({ config, onChange, onSaveAsPreset, t }: SettingsP
{/* ── Visual ──────────────────────────────────────── */}
}
+ icon={}
>
onChange({ opacity: v })} />
@@ -296,24 +454,49 @@ export function SettingsPanel({ config, onChange, onSaveAsPreset, t }: SettingsP
{/* Outline toggle */}
-
-
{t.panel.outline}
-
{t.panel.outlineDesc}
+
+ {t.panel.outline}
+ {t.panel.outlineDesc}
-
@@ -321,21 +504,41 @@ export function SettingsPanel({ config, onChange, onSaveAsPreset, t }: SettingsP
{/* ── Animation ───────────────────────────────────── */}
}
+ icon={}
>
-
-
{t.panel.pulseEffect}
-
{t.panel.pulseDesc}
+
+ {t.panel.pulseEffect}
+ {t.panel.pulseDesc}
-
onChange({ animated: e.target.checked })} />
+
{config.animated && (
- setPresetName(e.target.value)}
- placeholder={t.panel.customName}
- maxLength={32}
- style={{
- width: '100%',
+
+
{ e.currentTarget.style.borderColor = 'var(--accent)'; }}
- onBlur={e => { e.currentTarget.style.borderColor = 'var(--border-default)'; }}
- />
+ }}>
+
+
setPresetName(e.target.value)}
+ placeholder={t.panel.customName}
+ maxLength={32}
+ style={{
+ flex: 1,
+ background: 'transparent',
+ border: 'none',
+ outline: 'none',
+ color: 'var(--text-primary)',
+ fontSize: 13,
+ padding: '12px 0',
+ }}
+ />
+ {presetName && (
+
+ {presetName.length}/32
+
+ )}
+
+