Skip to content

Commit f0fcaa8

Browse files
devsart95claude
andcommitted
feat(skills): dots neon en todos los tools + glow via CSS variable
- Todos los tools tienen ahora un color asignado (antes varios no tenían) - Dot usa --dot CSS variable: background + box-shadow del mismo color - Efecto neon: 0 0 5px 1px + 0 0 2px (doble capa de glow) - Hover intensifica el glow: 8px 2px + 3px - Tools sin color brand propio usan colores temáticos del dominio Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent cbb6faf commit f0fcaa8

File tree

2 files changed

+30
-27
lines changed

2 files changed

+30
-27
lines changed

src/components/sections/Skills.tsx

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ const DOMAINS: Domain[] = [
3737
{ label: 'Gemini API', color: '#4285f4' },
3838
{ label: 'Vertex AI', color: '#34a853' },
3939
{ label: 'Google AI Studio', color: '#ea4335' },
40-
{ label: 'LLM Pipelines' },
41-
{ label: 'Multi-agent Systems' },
40+
{ label: 'LLM Pipelines', color: '#9333ea' },
41+
{ label: 'Multi-agent Systems', color: '#7c3aed' },
4242
{ label: 'n8n AI Workflows', color: '#ef6c00' },
4343
],
4444
},
@@ -53,12 +53,12 @@ const DOMAINS: Domain[] = [
5353
</svg>
5454
),
5555
tools: [
56-
{ label: 'SaaS Architecture' },
57-
{ label: 'ERP Systems' },
58-
{ label: 'Multi-tenant Apps' },
59-
{ label: 'CRM / POS' },
60-
{ label: 'Fiscal Integrations' },
61-
{ label: 'Vertical SaaS' },
56+
{ label: 'SaaS Architecture', color: '#22d3ee' },
57+
{ label: 'ERP Systems', color: '#0891b2' },
58+
{ label: 'Multi-tenant Apps', color: '#0e7490' },
59+
{ label: 'CRM / POS', color: '#0369a1' },
60+
{ label: 'Fiscal Integrations', color: '#3b82f6' },
61+
{ label: 'Vertical SaaS', color: '#60a5fa' },
6262
{ label: 'Turborepo Monorepo', color: '#ef4444' },
6363
{ label: 'tRPC', color: '#398ccb' },
6464
{ label: 'Drizzle ORM', color: '#c4e34a' },
@@ -80,7 +80,7 @@ const DOMAINS: Domain[] = [
8080
{ label: 'Node.js', color: '#539e43' },
8181
{ label: 'Astro', color: '#ff5d01' },
8282
{ label: 'Flutter', color: '#54c5f8' },
83-
{ label: 'REST API Design' },
83+
{ label: 'REST API Design', color: '#94a3b8' },
8484
{ label: 'NestJS', color: '#e0234e' },
8585
{ label: 'Git / CI/CD', color: '#f05032' },
8686
],
@@ -101,9 +101,9 @@ const DOMAINS: Domain[] = [
101101
{ label: 'Django', color: '#0c4b33' },
102102
{ label: 'Pydantic', color: '#e92063' },
103103
{ label: 'PostgreSQL', color: '#336791' },
104-
{ label: 'Pandas / NumPy' },
105-
{ label: 'PDF Processing' },
106-
{ label: 'Script Automation' },
104+
{ label: 'Pandas / NumPy', color: '#4dabcf' },
105+
{ label: 'PDF Processing', color: '#ef4444' },
106+
{ label: 'Script Automation', color: '#22c55e' },
107107
],
108108
},
109109
{
@@ -120,11 +120,11 @@ const DOMAINS: Domain[] = [
120120
tools: [
121121
{ label: 'WhatsApp API', color: '#25d366' },
122122
{ label: 'Telegram API', color: '#2ca5e0' },
123-
{ label: 'AI Chatbots' },
124-
{ label: 'n8n Workflows', color: '#ef6c00' },
125-
{ label: 'LLM Integration' },
126-
{ label: 'Automation Pipelines' },
127-
{ label: 'Bot Builders' },
123+
{ label: 'AI Chatbots', color: '#a855f7' },
124+
{ label: 'n8n Workflows', color: '#ef6c00' },
125+
{ label: 'LLM Integration', color: '#8b5cf6' },
126+
{ label: 'Automation Pipelines', color: '#f59e0b' },
127+
{ label: 'Bot Builders', color: '#f472b6' },
128128
],
129129
},
130130
{
@@ -141,8 +141,8 @@ const DOMAINS: Domain[] = [
141141
{ label: 'Docker / Compose', color: '#2496ed' },
142142
{ label: 'GitHub Actions', color: '#e2e8f0' },
143143
{ label: 'VPS Linux', color: '#fcc624' },
144-
{ label: 'Caddy / Traefik' },
145-
{ label: 'Bash Scripting' },
144+
{ label: 'Caddy / Traefik', color: '#00acd7' },
145+
{ label: 'Bash Scripting', color: '#4ade80' },
146146
],
147147
},
148148
]
@@ -188,12 +188,10 @@ export function Skills() {
188188
<div className="sd-tools">
189189
{d.tools.map(tool => (
190190
<span key={tool.label} className="sd-tool">
191-
{tool.color && (
192-
<span
193-
className="sd-tool-dot"
194-
style={{ background: tool.color }}
195-
/>
196-
)}
191+
<span
192+
className="sd-tool-dot"
193+
style={{ '--dot': tool.color ?? 'rgba(148,163,184,.4)' } as React.CSSProperties}
194+
/>
197195
{tool.label}
198196
</span>
199197
))}

src/index.css

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,13 +619,18 @@ h2 {
619619
width: 6px; height: 6px;
620620
border-radius: 50%;
621621
flex-shrink: 0;
622-
opacity: .75;
622+
background: var(--dot);
623+
box-shadow: 0 0 5px 1px var(--dot), 0 0 2px var(--dot);
624+
opacity: .8;
623625
}
624626
.skill-domain:hover .sd-tool:hover {
625627
color: var(--sd-color, var(--accent));
626628
border-color: color-mix(in srgb, var(--sd-color, var(--accent)) 50%, transparent);
627629
}
628-
.skill-domain:hover .sd-tool:hover .sd-tool-dot { opacity: 1; }
630+
.skill-domain:hover .sd-tool:hover .sd-tool-dot {
631+
opacity: 1;
632+
box-shadow: 0 0 8px 2px var(--dot), 0 0 3px var(--dot);
633+
}
629634
/* light theme */
630635
[data-theme="light"] .skill-domain { background: rgba(255,255,255,.88); }
631636
[data-theme="light"] .sd-tool {

0 commit comments

Comments
 (0)