# Visual Refactor — Corporate Hacker Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Refactor danix.me's graphic layer toward "corporate hacker" — better typography, glass cards with glow, button fix — while keeping all colors and animations intact.
**Architecture:** Pure CSS + targeted HTML changes. No new dependencies, no JS changes. Three font roles (Oxanium headings, IBM Plex Sans body, JetBrains Mono mono). Glass card style replaces solid `--bg2` cards across all four sections.
**Tech Stack:** Hugo templates (`.html` partials), CSS custom properties, Google Fonts, YAML data files.
---
## Task 1: Typography Foundation
**Files:**
- Modify: `themes/danixme/layouts/partials/head.html` (line 71)
- Modify: `themes/danixme/assets/css/main.css` (`:root` block, prose selectors)
- [ ] **Step 1: Add IBM Plex Sans to Google Fonts import**
In `themes/danixme/layouts/partials/head.html`, replace line 71:
```html
```
With:
```html
```
- [ ] **Step 2: Add `--font-body` CSS variable**
In `themes/danixme/assets/css/main.css`, replace:
```css
--font-mono: 'JetBrains Mono', 'Courier New', monospace;
--font-head: 'Oxanium', sans-serif;
```
With:
```css
--font-mono: 'JetBrains Mono', 'Courier New', monospace;
--font-head: 'Oxanium', sans-serif;
--font-body: 'IBM Plex Sans', system-ui, sans-serif;
```
- [ ] **Step 3: Apply IBM Plex Sans to hero prose elements**
In `main.css`, replace:
```css
/* ── Tagline ── */
.hero-tagline {
font-size: 0.93rem;
color: var(--text-dim);
max-width: 500px;
margin-bottom: 2.5rem;
```
With:
```css
/* ── Tagline ── */
.hero-tagline {
font-family: var(--font-body);
font-size: 0.93rem;
color: var(--text-dim);
max-width: 500px;
margin-bottom: 2.5rem;
```
Also add `font-family: var(--font-body);` to `.scroll-indicator`. Find the block:
```css
.scroll-indicator {
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
```
And replace with:
```css
.scroll-indicator {
font-family: var(--font-body);
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
```
- [ ] **Step 4: Apply IBM Plex Sans to About, Education, and form elements**
In `main.css`, replace:
```css
.about-bio p {
color: var(--text-dim);
font-size: 0.95rem;
```
With:
```css
.about-bio p {
font-family: var(--font-body);
color: var(--text-dim);
font-size: 0.95rem;
```
Replace:
```css
.edu-desc {
font-size: 0.88rem;
color: var(--text-dim);
```
With:
```css
.edu-desc {
font-family: var(--font-body);
font-size: 0.88rem;
color: var(--text-dim);
```
Replace:
```css
.cf-field label {
font-size: 0.76rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--muted);
}
```
With:
```css
.cf-field label {
font-family: var(--font-body);
font-size: 0.76rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--muted);
}
```
Replace:
```css
.cf-field input,
.cf-field textarea {
background: var(--surface);
border: 1px solid var(--border);
color: var(--text);
font-family: var(--font-mono);
```
With:
```css
.cf-field input,
.cf-field textarea {
background: var(--surface);
border: 1px solid var(--border);
color: var(--text);
font-family: var(--font-body);
```
- [ ] **Step 5: Verify typography**
Start the dev server:
```bash
cd /home/danix/Programming/AI/claude/danixme && hugo server --disableFastRender
```
Open http://localhost:1313. Check:
- Hero tagline and scroll label render in a proportional sans-serif (not monospace)
- About bio paragraphs render in IBM Plex Sans
- Education descriptions render in IBM Plex Sans
- Contact form labels and input text use IBM Plex Sans
- All terminal windows, navigation, section eyebrows, card titles still use their original mono/Oxanium fonts
- [ ] **Step 6: Commit**
```bash
git add themes/danixme/layouts/partials/head.html themes/danixme/assets/css/main.css
git commit -m "feat: add IBM Plex Sans body font, apply to prose elements"
```
---
## Task 2: Button Hover Fix
**Files:**
- Modify: `themes/danixme/assets/css/main.css` (`.btn-primary:hover` block)
- [ ] **Step 1: Fix `.btn-primary:hover` background**
In `main.css`, replace:
```css
.btn-primary:hover {
background: #fff;
box-shadow: 0 0 24px rgba(168,85,247,0.45);
```
With:
```css
.btn-primary:hover {
background: #c084fc;
box-shadow: 0 0 24px rgba(168,85,247,0.45);
```
- [ ] **Step 2: Verify**
With `hugo server` running, hover over the "Contact" (primary) button in the hero. It should shift to a lighter purple — not white.
- [ ] **Step 3: Commit**
```bash
git add themes/danixme/assets/css/main.css
git commit -m "fix: btn-primary hover color purple instead of white"
```
---
## Task 3: Skills Data — Level Labels
**Files:**
- Modify: `data/skills.yaml`
- [ ] **Step 1: Replace decimal levels with string labels**
Replace the full contents of `data/skills.yaml` with:
```yaml
- icon: "fa-solid fa-crosshairs"
name_en: "Penetration Testing"
name_it: "Penetration Testing"
level: "Intermediate"
tags: [Metasploit, "Burp Suite", nmap, SQLMap]
- icon: "fa-solid fa-network-wired"
name_en: "Network Security"
name_it: "Sicurezza di Rete"
level: "Foundational"
tags: [Wireshark, "TCP/IP", Firewalls, VPN]
- icon: "fa-brands fa-linux"
name_en: "Linux / Kali"
name_it: "Linux / Kali"
level: "Advanced"
tags: ["Kali Linux", Bash, "Priv. Esc.", "File System"]
- icon: "fa-solid fa-user-secret"
name_en: "OSINT"
name_it: "OSINT"
level: "Foundational"
tags: [Maltego, Shodan, Recon-ng]
- icon: "fa-solid fa-terminal"
name_en: "Scripting"
name_it: "Scripting"
level: "Intermediate"
tags: [Python, Bash, PowerShell]
- icon: "fa-solid fa-shield-halved"
name_en: "Web Security"
name_it: "Sicurezza Web"
level: "Intermediate"
tags: ["OWASP Top 10", XSS, SQLi, IDOR]
```
- [ ] **Step 2: Commit**
```bash
git add data/skills.yaml
git commit -m "refactor: skills level from decimal to string label"
```
---
## Task 4: Card CSS — Glass Hybrid Style
**Files:**
- Modify: `themes/danixme/assets/css/main.css`
Replaces background/border/hover on all four card types. Adds `.skill-level` badge and `.card--green` modifier. Removes progress bar CSS. Restyling `.service-subtitle` and `.project-subtitle` as card-tags. Adds IBM Plex Sans to card descriptions.
- [ ] **Step 1: Replace `.service-card` CSS**
Replace:
```css
.service-card {
border: 1px solid var(--border);
background: var(--bg2);
padding: 1.75rem;
position: relative;
overflow: hidden;
transition: border-color 0.3s, background 0.2s;
}
.service-card::before {
content: '';
position: absolute;
top: 0; inset-inline: 0;
height: 2px;
background: linear-gradient(90deg, var(--accent), var(--accent2));
}
.service-card:hover {
border-color: rgba(168,85,247,0.28);
background: var(--surface);
}
```
With:
```css
.service-card {
background: rgba(16,30,45,0.55);
backdrop-filter: blur(6px);
border: 1px solid rgba(168,85,247,0.12);
border-left: 2px solid var(--muted);
padding: 1.75rem;
position: relative;
overflow: hidden;
transition: border-left-color 0.25s, box-shadow 0.25s, background 0.25s;
}
.service-card::before { display: none; }
.service-card:hover {
border-left-color: var(--accent);
box-shadow: 0 0 22px rgba(168,85,247,0.10);
background: rgba(16,30,45,0.75);
}
```
- [ ] **Step 2: Restyle `.service-subtitle` as card-tag and apply IBM Plex Sans to `.service-desc`**
Replace:
```css
.service-subtitle {
font-size: 0.76rem;
color: var(--accent);
letter-spacing: 0.06em;
margin-bottom: 0.9rem;
}
.service-desc {
font-size: 0.88rem;
color: var(--text-dim);
line-height: 1.85;
```
With:
```css
.service-subtitle {
display: block;
font-family: var(--font-mono);
font-size: 0.55rem;
color: var(--muted);
letter-spacing: 0.12em;
text-transform: uppercase;
margin-bottom: 0.6rem;
transition: color 0.25s;
}
.service-card:hover .service-subtitle { color: var(--text-dim); }
.service-desc {
font-family: var(--font-body);
font-size: 0.88rem;
color: var(--text-dim);
line-height: 1.85;
```
- [ ] **Step 3: Replace `.skill-card` CSS and remove progress bar CSS**
Replace:
```css
.skill-card {
background: var(--bg2);
padding: 1.5rem;
transition: background 0.2s;
}
.skill-card:hover { background: var(--surface); }
```
With:
```css
.skill-card {
background: rgba(16,30,45,0.55);
backdrop-filter: blur(6px);
border: 1px solid rgba(168,85,247,0.12);
border-left: 2px solid var(--muted);
padding: 1.5rem;
transition: border-left-color 0.25s, box-shadow 0.25s, background 0.25s;
}
.skill-card:hover {
border-left-color: var(--accent);
box-shadow: 0 0 22px rgba(168,85,247,0.10);
background: rgba(16,30,45,0.75);
}
.skill-card.card--green:hover {
border-left-color: var(--accent2);
box-shadow: 0 0 22px rgba(0,255,136,0.07);
}
```
Then remove the progress bar CSS entirely. Replace:
```css
.skill-track {
height: 2px;
background: var(--border);
margin-top: 0.75rem;
overflow: hidden;
}
.skill-fill {
height: 100%;
background: linear-gradient(90deg, var(--accent), var(--accent2));
transform-origin: left;
transform: scaleX(0);
transition: transform 1.1s cubic-bezier(0.16,1,0.3,1);
}
.skill-fill.go { transform: scaleX(var(--w, 1)); }
```
With:
```css
.skill-level {
display: inline-block;
font-family: var(--font-mono);
font-size: 0.55rem;
color: var(--text-dim);
letter-spacing: 0.1em;
text-transform: uppercase;
border: 1px solid var(--muted);
padding: 0.15rem 0.45rem;
margin-top: 0.6rem;
margin-bottom: 0.2rem;
}
.skill-card.card--green .skill-level {
color: var(--accent2);
border-color: var(--accent2);
}
```
- [ ] **Step 4: Replace `.cert-card` CSS**
Replace:
```css
.cert-card {
border: 1px solid var(--border);
background: var(--bg2);
padding: 1.5rem;
position: relative;
overflow: hidden;
transition: border-color 0.3s, box-shadow 0.3s;
}
```
With:
```css
.cert-card {
background: rgba(16,30,45,0.55);
backdrop-filter: blur(6px);
border: 1px solid rgba(168,85,247,0.12);
border-left: 2px solid var(--muted);
padding: 1.5rem;
position: relative;
overflow: hidden;
transition: border-left-color 0.25s, box-shadow 0.25s, background 0.25s;
}
```
Replace:
```css
.cert-card::before {
content: '';
position: absolute;
top: 0; inset-inline: 0;
height: 2px;
background: linear-gradient(90deg, var(--accent), var(--accent2));
}
.cert-card:hover {
border-color: rgba(168,85,247,0.28);
box-shadow: 0 0 40px rgba(168,85,247,0.04);
}
```
With:
```css
.cert-card::before { display: none; }
.cert-card:hover {
border-left-color: var(--accent);
box-shadow: 0 0 22px rgba(168,85,247,0.10);
background: rgba(16,30,45,0.75);
}
```
Also add IBM Plex Sans to cert description. Replace:
```css
.cert-desc {
font-size: 0.88rem;
color: var(--text-dim);
line-height: 1.85;
```
With:
```css
.cert-desc {
font-family: var(--font-body);
font-size: 0.88rem;
color: var(--text-dim);
line-height: 1.85;
```
- [ ] **Step 5: Replace `.project-card` CSS and restyle `.project-subtitle`**
Replace:
```css
.project-card {
background: var(--bg2);
border: 1px solid var(--border);
border-radius: 12px;
overflow: hidden;
display: flex;
flex-direction: column;
transition: border-color 0.25s, transform 0.25s;
}
.project-card:hover {
border-color: var(--accent);
transform: translateY(-3px);
}
```
With:
```css
.project-card {
background: rgba(16,30,45,0.55);
backdrop-filter: blur(6px);
border: 1px solid rgba(168,85,247,0.12);
border-left: 2px solid var(--muted);
border-radius: 12px;
overflow: hidden;
display: flex;
flex-direction: column;
transition: border-left-color 0.25s, box-shadow 0.25s, background 0.25s, transform 0.25s;
}
.project-card:hover {
border-left-color: var(--accent);
box-shadow: 0 0 22px rgba(168,85,247,0.10);
background: rgba(16,30,45,0.75);
transform: translateY(-3px);
}
```
Restyle `.project-subtitle` as card-tag. Replace:
```css
.project-subtitle {
font-size: 0.8rem;
color: var(--accent);
letter-spacing: 0.06em;
text-transform: uppercase;
margin: 0;
}
```
With:
```css
.project-subtitle {
font-family: var(--font-mono);
font-size: 0.55rem;
color: var(--muted);
letter-spacing: 0.12em;
text-transform: uppercase;
margin: 0;
transition: color 0.25s;
}
.project-card:hover .project-subtitle { color: var(--text-dim); }
```
Also add IBM Plex Sans to project description. Replace:
```css
.project-desc {
font-size: 0.88rem;
color: var(--text-dim);
line-height: 1.7;
margin: 0;
```
With:
```css
.project-desc {
font-family: var(--font-body);
font-size: 0.88rem;
color: var(--text-dim);
line-height: 1.7;
margin: 0;
```
- [ ] **Step 6: Verify cards**
With `hugo server` running, check each section:
- Services: cards have glass background, purple left border that lights up on hover, subtitle appears as small muted mono tag, description in IBM Plex Sans
- Skills: cards have glass style, no progress bar visible, `.skill-level` badge area is ready (will be populated in Task 5)
- Certs: glass style, no top gradient stripe, purple left border glow on hover
- Projects: glass style with lift (`translateY`) on hover, subtitle appears as small muted mono tag, description in IBM Plex Sans
- Collab card (dashed placeholder): still renders with dashed border, distinct from regular project cards
- [ ] **Step 7: Commit**
```bash
git add themes/danixme/assets/css/main.css
git commit -m "feat: glass hybrid card style across all sections"
```
---
## Task 5: Skills HTML — Remove Progress Bar, Add Level Badge
**Files:**
- Modify: `themes/danixme/layouts/partials/skills.html`
- [ ] **Step 1: Update skills.html**
Replace the full contents of `themes/danixme/layouts/partials/skills.html` with:
```html
{{ i18n "skills_title" }}