diff --git a/index.html b/index.html index 9322817..8952d40 100644 --- a/index.html +++ b/index.html @@ -15,14 +15,14 @@ - + - + - QQ — Developer Tools + QQ (施清荃) — 12 y/o Developer | Web, Hardware & AI Tools @@ -137,7 +137,7 @@ font-size: clamp(48px, 10vw, 72px); font-weight: 800; letter-spacing: -0.03em; - margin-bottom: 16px; + margin-bottom: 12px; background: linear-gradient(135deg, #fff 0%, var(--accent) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; @@ -145,6 +145,37 @@ animation: fadeInUp 0.8s ease-out 0.1s both; } + .age-badge { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 16px; + background: linear-gradient(135deg, rgba(88,166,255,0.15), rgba(139,92,246,0.15)); + border: 1px solid rgba(88, 166, 255, 0.3); + border-radius: 100px; + font-size: 14px; + font-weight: 600; + color: var(--accent); + margin-bottom: 12px; + animation: fadeInUp 0.8s ease-out 0.15s both; + backdrop-filter: blur(10px); + } + + .age-badge::before { + content: ''; + width: 8px; + height: 8px; + background: #3fb950; + border-radius: 50%; + box-shadow: 0 0 8px #3fb950; + animation: pulse 2s infinite; + } + + @keyframes pulse { + 0%, 100% { opacity: 1; transform: scale(1); } + 50% { opacity: 0.6; transform: scale(0.9); } + } + .tagline { font-size: 20px; color: var(--text-secondary); @@ -169,6 +200,7 @@ text-decoration: none; font-weight: 500; transition: opacity 0.2s; + cursor: help; } .subtitle a:hover { @@ -206,6 +238,7 @@ transition: all 0.2s; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); + cursor: default; } .badge:hover { @@ -322,12 +355,23 @@ /* Scroll Indicator */ .scroll-indicator { position: absolute; - bottom: 20px; + bottom: 24px; left: 50%; transform: translateX(-50%); animation: bounce 2s infinite; cursor: pointer; z-index: 10; + padding: 8px; + border-radius: 50%; + background: rgba(22, 27, 34, 0.4); + border: 1px solid rgba(88, 166, 255, 0.2); + transition: all 0.3s ease; + } + + .scroll-indicator:hover { + background: rgba(88, 166, 255, 0.15); + border-color: rgba(88, 166, 255, 0.5); + box-shadow: 0 0 16px var(--glow-color); } @keyframes bounce { @@ -337,9 +381,53 @@ } .scroll-indicator svg { - width: 32px; - height: 32px; - color: var(--text-secondary); + width: 24px; + height: 24px; + color: var(--accent); + filter: drop-shadow(0 0 4px var(--glow-color)); + } + + /* Back to Top Button */ + .back-to-top { + position: fixed; + bottom: 32px; + right: 32px; + width: 48px; + height: 48px; + display: flex; + align-items: center; + justify-content: center; + background: var(--glass-bg); + backdrop-filter: blur(20px); + border: 1px solid var(--glass-border); + border-radius: 12px; + color: var(--accent); + cursor: pointer; + opacity: 0; + visibility: hidden; + transform: translateY(10px); + transition: all 0.3s ease; + z-index: 100; + box-shadow: 0 4px 24px rgba(0,0,0,0.3); + } + + .back-to-top.visible { + opacity: 1; + visibility: visible; + transform: translateY(0); + } + + .back-to-top:hover { + background: var(--accent); + color: white; + border-color: var(--accent); + transform: translateY(-2px); + box-shadow: 0 8px 32px var(--accent-glow); + } + + .back-to-top svg { + width: 20px; + height: 20px; } /* Content Section */ @@ -350,11 +438,11 @@ } /* About Me Section */ - .about-me, .credits, .featured-projects, .learning { + .about-me, .credits, .featured-projects, .learning, .contact-section { margin-bottom: 80px; } - .featured-projects h2, .learning h2, .about-me h2, .credits h2 { + .featured-projects h2, .learning h2, .about-me h2, .credits h2, .contact-section h2 { font-size: 32px; font-weight: 600; margin-bottom: 32px; @@ -379,10 +467,11 @@ border: 1px solid var(--glass-border); border-radius: 16px; padding: 24px; - text-decoration: none; color: inherit; box-shadow: 0 0 0 0 rgba(88,166,255,0), 0 8px 32px rgba(0,0,0,0); transition: box-shadow 0.3s ease, border-color 0.3s ease, transform 0.3s ease; + display: flex; + flex-direction: column; } .project-card:hover { @@ -402,18 +491,30 @@ margin-bottom: 8px; color: var(--text); } + + .project-card h3 a { + color: inherit; + text-decoration: none; + transition: color 0.2s; + } + + .project-card h3 a:hover { + color: var(--accent); + } .project-card p { color: var(--text-secondary); font-size: 14px; line-height: 1.5; margin-bottom: 12px; + flex-grow: 1; } .project-tags { display: flex; gap: 8px; flex-wrap: wrap; + margin-bottom: 16px; } .project-tags span { @@ -423,6 +524,54 @@ font-size: 12px; color: var(--accent); } + + .project-actions { + display: flex; + gap: 10px; + flex-wrap: wrap; + } + + .project-btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 8px 16px; + border-radius: 8px; + font-size: 13px; + font-weight: 500; + text-decoration: none; + transition: all 0.2s ease; + flex: 1; + justify-content: center; + min-width: max-content; + } + + .project-btn.primary { + background: linear-gradient(135deg, var(--accent), #1f6feb); + color: white; + border: none; + } + + .project-btn.primary:hover { + transform: translateY(-1px); + box-shadow: 0 4px 16px var(--accent-glow); + } + + .project-btn.secondary { + background: transparent; + color: var(--accent); + border: 1px solid rgba(88, 166, 255, 0.3); + } + + .project-btn.secondary:hover { + background: rgba(88, 166, 255, 0.1); + border-color: var(--accent); + } + + .project-btn svg { + width: 14px; + height: 14px; + } .view-all { display: inline-block; @@ -495,6 +644,49 @@ text-decoration: none; font-weight: 500; } + + /* Contact Section */ + .contact-section p { + color: var(--text-secondary); + font-size: 18px; + line-height: 1.8; + margin-bottom: 16px; + } + + .contact-links { + display: flex; + gap: 12px; + flex-wrap: wrap; + margin-top: 8px; + } + + .contact-links a { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 20px; + background: var(--surface); + border: 1px solid var(--border); + border-radius: 10px; + color: var(--text); + text-decoration: none; + font-size: 14px; + font-weight: 500; + transition: all 0.2s ease; + } + + .contact-links a:hover { + background: var(--accent); + color: white; + border-color: var(--accent); + transform: translateY(-2px); + box-shadow: 0 4px 16px var(--accent-glow); + } + + .contact-links a svg { + width: 16px; + height: 16px; + } /* Credits Section */ .credits p { @@ -579,21 +771,26 @@ padding: 60px 24px; } - .about-me h2, .credits h2 { + .about-me h2, .credits h2, .contact-section h2 { font-size: 24px; } .about-me p { font-size: 16px; } + + .back-to-top { + bottom: 20px; + right: 20px; + } } /* Respect prefers-reduced-motion */ @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } - .bg-gradient, .particle, .reveal, .scroll-indicator { + .bg-gradient, .particle, .reveal, .scroll-indicator, .age-badge::before { animation: none !important; } - h1, .tagline, .subtitle { + h1, .tagline, .subtitle, .age-badge { animation: none !important; opacity: 1 !important; transform: none !important; @@ -620,7 +817,8 @@

QQ

-

Hi! I'm QQ (施清荃), a 12-year-old developer building tools with AI

+
12 y/o Developer
+

Hi! I'm QQ (施清荃), a developer building tools with AI

@@ -632,7 +830,7 @@

QQ

Web
-

Assisted by Nova ☄️

+

Assisted by Nova ☄️

@@ -653,9 +851,12 @@

QQ

+ + +
- + @@ -668,55 +869,84 @@

QQ