Skip to content

Commit 60ce096

Browse files
committed
feat: Add subtle micro-animations for enhanced UX
- Page load fade-in animation with staggered elements - Smooth hover effects on links with slide-in backgrounds - Navigation underline animations and lift effects - Project card hover with shadow and transform - Emoji and icon hover animations with scale and rotate - Staggered list item animations for visual hierarchy - Enhanced button interactions with ripple effects - Maintains minimal aesthetic while adding polish - Mobile-optimized with reduced animation intensity
1 parent 8ce2b4e commit 60ce096

File tree

1 file changed

+191
-16
lines changed

1 file changed

+191
-16
lines changed

portfolio/themes/basic/static/css/minimal.css

Lines changed: 191 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Minimal Black & White Design */
1+
/* Minimal Black & White Design with Micro-Animations */
22
* {
33
margin: 0;
44
padding: 0;
@@ -13,87 +13,164 @@ body {
1313
max-width: 800px;
1414
margin: 0 auto;
1515
padding: 2rem;
16+
animation: fadeIn 0.8s ease-out;
1617
}
1718

18-
/* Typography */
19+
/* Fade in animation for page load */
20+
@keyframes fadeIn {
21+
from { opacity: 0; transform: translateY(20px); }
22+
to { opacity: 1; transform: translateY(0); }
23+
}
24+
25+
/* Typography with subtle animations */
1926
h1, h2, h3, h4, h5, h6 {
2027
font-weight: normal;
2128
margin: 2rem 0 1rem 0;
2229
border-bottom: 1px solid #000;
2330
padding-bottom: 0.5rem;
31+
transition: border-color 0.3s ease;
2432
}
2533

2634
h1 {
2735
font-size: 2rem;
2836
text-transform: uppercase;
2937
letter-spacing: 2px;
38+
animation: slideInFromLeft 0.6s ease-out;
3039
}
3140

3241
h2 {
3342
font-size: 1.5rem;
3443
margin-top: 3rem;
44+
animation: slideInFromLeft 0.8s ease-out;
3545
}
3646

3747
h3 {
3848
font-size: 1.2rem;
3949
border-bottom: 1px dotted #000;
4050
}
4151

52+
/* Slide in animations */
53+
@keyframes slideInFromLeft {
54+
from { opacity: 0; transform: translateX(-30px); }
55+
to { opacity: 1; transform: translateX(0); }
56+
}
57+
58+
@keyframes slideInFromRight {
59+
from { opacity: 0; transform: translateX(30px); }
60+
to { opacity: 1; transform: translateX(0); }
61+
}
62+
4263
p {
4364
margin: 1rem 0;
65+
animation: fadeInUp 1s ease-out;
66+
}
67+
68+
@keyframes fadeInUp {
69+
from { opacity: 0; transform: translateY(15px); }
70+
to { opacity: 1; transform: translateY(0); }
4471
}
4572

46-
/* Links */
73+
/* Enhanced link animations */
4774
a {
4875
color: #000;
4976
text-decoration: none;
5077
border-bottom: 1px solid #000;
51-
transition: all 0.2s ease;
78+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
79+
position: relative;
80+
overflow: hidden;
5281
}
5382

54-
a:hover {
83+
a::before {
84+
content: '';
85+
position: absolute;
86+
top: 0;
87+
left: -100%;
88+
width: 100%;
89+
height: 100%;
5590
background: #000;
91+
transition: left 0.3s ease;
92+
z-index: -1;
93+
}
94+
95+
a:hover::before {
96+
left: 0;
97+
}
98+
99+
a:hover {
56100
color: #fff;
57101
padding: 2px 4px;
102+
transform: translateY(-1px);
58103
}
59104

60-
/* Lists */
105+
/* Lists with staggered animation */
61106
ul, ol {
62107
margin: 1rem 0;
63108
padding-left: 2rem;
64109
}
65110

66111
li {
67112
margin: 0.5rem 0;
113+
animation: fadeInLeft 0.6s ease-out;
114+
animation-fill-mode: both;
68115
}
69116

70-
/* Line Art Elements */
117+
li:nth-child(1) { animation-delay: 0.1s; }
118+
li:nth-child(2) { animation-delay: 0.2s; }
119+
li:nth-child(3) { animation-delay: 0.3s; }
120+
li:nth-child(4) { animation-delay: 0.4s; }
121+
li:nth-child(5) { animation-delay: 0.5s; }
122+
123+
@keyframes fadeInLeft {
124+
from { opacity: 0; transform: translateX(-20px); }
125+
to { opacity: 1; transform: translateX(0); }
126+
}
127+
128+
/* Animated line art elements */
71129
hr {
72130
border: none;
73131
border-top: 1px solid #000;
74132
margin: 2rem 0;
133+
animation: expandWidth 1s ease-out;
75134
}
76135

77-
/* Code */
136+
@keyframes expandWidth {
137+
from { width: 0; }
138+
to { width: 100%; }
139+
}
140+
141+
/* Code with typewriter effect */
78142
code {
79143
background: none;
80144
border: 1px solid #000;
81145
padding: 2px 4px;
82146
font-family: inherit;
147+
animation: typewriter 0.5s steps(10);
148+
}
149+
150+
@keyframes typewriter {
151+
from { width: 0; }
152+
to { width: auto; }
83153
}
84154

85155
pre {
86156
border: 1px solid #000;
87157
padding: 1rem;
88158
margin: 1rem 0;
89159
overflow-x: auto;
160+
animation: slideInFromRight 0.8s ease-out;
90161
}
91162

92-
/* Navigation */
163+
/* Enhanced navigation with hover effects */
93164
nav {
94165
border-bottom: 2px solid #000;
95166
margin-bottom: 2rem;
96167
padding-bottom: 1rem;
168+
animation: slideInFromTop 0.6s ease-out;
169+
}
170+
171+
@keyframes slideInFromTop {
172+
from { opacity: 0; transform: translateY(-20px); }
173+
to { opacity: 1; transform: translateY(0); }
97174
}
98175

99176
nav ul {
@@ -107,37 +184,80 @@ nav a {
107184
border: none;
108185
text-transform: uppercase;
109186
letter-spacing: 1px;
187+
position: relative;
188+
transition: all 0.3s ease;
110189
}
111190

112-
/* Project Cards */
191+
nav a::after {
192+
content: '';
193+
position: absolute;
194+
bottom: -5px;
195+
left: 0;
196+
width: 0;
197+
height: 2px;
198+
background: #000;
199+
transition: width 0.3s ease;
200+
}
201+
202+
nav a:hover::after {
203+
width: 100%;
204+
}
205+
206+
nav a:hover {
207+
transform: translateY(-2px);
208+
}
209+
210+
/* Project cards with hover animations */
113211
.project-card {
114212
border: 1px solid #000;
115213
margin: 2rem 0;
116214
padding: 1.5rem;
215+
transition: all 0.3s ease;
216+
animation: fadeInUp 0.8s ease-out;
217+
}
218+
219+
.project-card:hover {
220+
transform: translateY(-5px);
221+
box-shadow: 5px 5px 0px #000;
117222
}
118223

119224
.project-title {
120225
border-bottom: 1px dotted #000;
121226
margin-bottom: 1rem;
227+
transition: border-color 0.3s ease;
122228
}
123229

124230
.tech-stack {
125231
margin-top: 1rem;
126232
font-size: 0.9rem;
233+
animation: slideInFromRight 1s ease-out;
127234
}
128235

129236
.tech-stack::before {
130237
content: "→ ";
238+
animation: pulse 2s infinite;
239+
}
240+
241+
@keyframes pulse {
242+
0%, 100% { opacity: 1; }
243+
50% { opacity: 0.5; }
131244
}
132245

133-
/* Minimal Form Elements */
246+
/* Enhanced form elements */
134247
input, textarea {
135248
border: 1px solid #000;
136249
background: #fff;
137250
padding: 0.5rem;
138251
font-family: inherit;
139252
width: 100%;
140253
margin: 0.5rem 0;
254+
transition: all 0.3s ease;
255+
}
256+
257+
input:focus, textarea:focus {
258+
outline: none;
259+
border-width: 2px;
260+
transform: scale(1.02);
141261
}
142262

143263
button {
@@ -149,35 +269,79 @@ button {
149269
font-family: inherit;
150270
text-transform: uppercase;
151271
letter-spacing: 1px;
272+
transition: all 0.3s ease;
273+
position: relative;
274+
overflow: hidden;
152275
}
153276

154-
button:hover {
277+
button::before {
278+
content: '';
279+
position: absolute;
280+
top: 50%;
281+
left: 50%;
282+
width: 0;
283+
height: 0;
155284
background: #fff;
285+
transition: all 0.3s ease;
286+
transform: translate(-50%, -50%);
287+
border-radius: 50%;
288+
}
289+
290+
button:hover::before {
291+
width: 300px;
292+
height: 300px;
293+
}
294+
295+
button:hover {
156296
color: #000;
157-
border: 1px solid #000;
297+
transform: translateY(-2px);
158298
}
159299

160-
/* ASCII Art Style Elements */
300+
/* ASCII Art Style Elements with animation */
161301
.ascii-divider::before {
162302
content: "────────────────────────────────────────";
163303
display: block;
164304
text-align: center;
165305
margin: 2rem 0;
306+
animation: drawLine 1.5s ease-out;
307+
}
308+
309+
@keyframes drawLine {
310+
from { width: 0; overflow: hidden; }
311+
to { width: 100%; }
166312
}
167313

168-
/* Black & White Emoji Styling */
314+
/* Black & White Emoji Styling with subtle animation */
169315
.emoji {
170316
filter: grayscale(100%) contrast(200%);
171317
font-style: normal;
318+
transition: transform 0.3s ease;
319+
display: inline-block;
320+
}
321+
322+
.emoji:hover {
323+
transform: scale(1.2) rotate(5deg);
172324
}
173325

174326
.section-icon {
175327
font-size: 1.2em;
176328
margin-right: 0.5rem;
177329
filter: grayscale(100%) contrast(200%);
330+
transition: all 0.3s ease;
331+
display: inline-block;
332+
}
333+
334+
.section-icon:hover {
335+
transform: scale(1.3) rotate(-5deg);
336+
filter: grayscale(100%) contrast(300%);
337+
}
338+
339+
/* Footer animation */
340+
footer {
341+
animation: fadeInUp 1.2s ease-out;
178342
}
179343

180-
/* Responsive */
344+
/* Responsive with maintained animations */
181345
@media (max-width: 600px) {
182346
body {
183347
padding: 1rem;
@@ -191,6 +355,11 @@ button:hover {
191355
h1 {
192356
font-size: 1.5rem;
193357
}
358+
359+
/* Reduce animation intensity on mobile */
360+
* {
361+
animation-duration: 0.3s !important;
362+
}
194363
}
195364

196365
/* Print Styles */
@@ -199,6 +368,12 @@ button:hover {
199368
max-width: none;
200369
margin: 0;
201370
padding: 1rem;
371+
animation: none;
372+
}
373+
374+
*, *::before, *::after {
375+
animation: none !important;
376+
transition: none !important;
202377
}
203378

204379
a {

0 commit comments

Comments
 (0)