Followers
-
diff --git a/README.md b/README.md index 87953c5..1de67fb 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,10 @@ A developer portfolio site for Vlo, featuring: - Projects synced from GitHub (`VloStudios`) -- Matrix-style background -- Lo‑fi music player with selectable tracks -- Cherry Clicker game (Japanese cherry vibes) -- Chill, dark, hacker aesthetic -- **Scrollable content** (fixed matrix background with scrolling foreground) +- Sakura-themed CV presentation +- Iced-tea-inspired design accents +- Background ambient music toggle +- **Scrollable card layout** with GitHub-powered profile/repo data ## Setup @@ -28,18 +27,17 @@ A developer portfolio site for Vlo, featuring: ## Features -- **Projects Tab**: Fetches public repositories from the GitHub user `VloStudios` and displays them as cards. -- **Matrix Background**: Animated green code rain. -- **Lo‑fi Player**: Choose from a few free lo‑fi tracks and play/pause. -- **Cherry Clicker**: Japanese cherry‑themed clicker game with auto‑clickers and petal animations. -- **Ice‑tea Mention**: Tagline references Vlo’s love for ice tea. -- **Scrolling**: The content scrolls while the matrix background stays fixed. +- **CV Snapshot**: Pulls profile details from `https://api.github.com/users/VloStudios`. +- **Projects Section**: Fetches public repositories and displays the most recently updated. +- **Sakura UI**: Soft pink card-based visuals with blossom-inspired background elements. +- **Ambient Background Music**: Browser-based synth music with play/pause controls. +- **Iced Tea Theme**: Dedicated section and palette accents for a calm tea vibe. ## Customization -- Edit `static/js/lofi.js` to add or change lo‑fi track URLs. +- Edit `static/js/main.js` to change profile username or CV rendering behavior. - Adjust styling in `static/css/style.css`. -- Modify the Flask app in `app.py` if you need different GitHub user or additional data. +- Modify the Flask app in `app.py` if you want server-rendered data endpoints. ## Deployment diff --git a/static/css/style.css b/static/css/style.css index 4828fef..9b4d94f 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,271 +1,238 @@ -/* Reset and base */ -*, -*::before, -*::after { +:root { + --bg: #fff7fb; + --bg-soft: #ffeef4; + --ink: #4a2d3c; + --ink-soft: #7f5a6d; + --sakura: #f7b5c8; + --sakura-deep: #e98cab; + --tea: #d59f63; + --card: rgba(255, 255, 255, 0.82); + --border: rgba(233, 140, 171, 0.35); +} + +* { box-sizing: border-box; - margin: 0; - padding: 0; } -html, body { - height: 100%; - font-family: 'JetBrains Mono', monospace; - background: #000; - color: #0f0; - overflow: visible; +body { margin: 0; - padding: 0; + font-family: "Quicksand", sans-serif; + color: var(--ink); + background: + radial-gradient(circle at 10% 10%, #ffe7f0, transparent 45%), + radial-gradient(circle at 90% 80%, #ffe6d2, transparent 35%), + linear-gradient(150deg, var(--bg), var(--bg-soft)); + min-height: 100vh; } -/* Matrix canvas */ -#matrix { +.petal-layer { position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: -1; -} - -/* Content overlay */ -.content { - position: relative; - max-width: 1200px; - margin: 0 auto; - min-height: 100vh; - padding: 20px 20px 60px; - display: flex; - flex-direction: column; - overflow-y: auto; - box-sizing: border-box; + inset: 0; + pointer-events: none; + opacity: 0.5; + background-image: + radial-gradient(circle at 20% 30%, rgba(247, 181, 200, 0.7) 0 6px, transparent 7px), + radial-gradient(circle at 80% 10%, rgba(247, 181, 200, 0.5) 0 8px, transparent 9px), + radial-gradient(circle at 60% 70%, rgba(233, 140, 171, 0.45) 0 7px, transparent 8px); + animation: drift 14s linear infinite alternate; } -/* Header */ -header { - text-align: center; - margin-bottom: 30px; +@keyframes drift { + from { transform: translateY(0px); } + to { transform: translateY(18px); } } -header h1 { - font-size: 3.5rem; - letter-spacing: 2px; - text-shadow: 0 0 5px #0f0, 0 0 10px #0f0; +.cv-shell { + width: min(960px, 92vw); + margin: 2.5rem auto; + display: grid; + gap: 1rem; } -.tagline { - font-size: 1.2rem; - opacity: 0.8; - margin-top: 10px; +.card { + background: var(--card); + border: 1px solid var(--border); + border-radius: 18px; + padding: 1.25rem; + backdrop-filter: blur(4px); + box-shadow: 0 10px 30px rgba(109, 46, 76, 0.08); } -/* Projects section */ -.projects h2 { - margin-bottom: 20px; - font-size: 2rem; - text-shadow: 0 0 3px #0f0; +.hero { + display: flex; + gap: 1rem; + justify-content: space-between; + align-items: center; } -.projects-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - gap: 20px; +.eyebrow { + font-size: 0.85rem; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--ink-soft); + margin: 0; } -.project-card { - background: rgba(0, 20, 0, 0.6); - border: 1px solid #0f0; - border-radius: 8px; - padding: 15px; - transition: transform 0.2s, box-shadow 0.2s; +h1, h2 { + font-family: "Playfair Display", serif; + margin: 0.4rem 0; } -.project-card:hover { - transform: translateY(-5px); - box-shadow: 0 0 15px #0f0; +h1 { + font-size: clamp(2rem, 4vw, 2.8rem); } -.project-card h3 { - margin: 0 0 10px; +h2 { font-size: 1.4rem; } -.project-card p { - font-size: 0.95rem; - line-height: 1.4; - margin-bottom: 10px; +p { + margin: 0.35rem 0; + line-height: 1.5; } -.project-card .meta { - display: flex; - justify-content: space-between; - font-size: 0.85rem; - opacity: 0.7; +.avatar { + width: clamp(110px, 18vw, 150px); + height: clamp(110px, 18vw, 150px); + object-fit: cover; + border-radius: 50%; + border: 4px solid rgba(255, 255, 255, 0.9); + box-shadow: 0 0 0 5px rgba(233, 140, 171, 0.2); } -.project-card a { - color: #0f0; - text-decoration: none; +.chips { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin: 0.85rem 0; } -.project-card a:hover { - text-decoration: underline; +.chip { + background: rgba(247, 181, 200, 0.2); + border: 1px solid rgba(233, 140, 171, 0.35); + border-radius: 999px; + padding: 0.3rem 0.65rem; + font-size: 0.85rem; } -/* Extras section */ -.extras { - margin-top: auto; +.hero-links { display: flex; - flex-wrap: wrap; - gap: 20px; - align-items: flex-start; -} - -.lofi-controls, -.cookie-clicker-container { - flex: 1 1 250px; - background: rgba(0, 20, 0, 0.5); - border: 1px solid #0f0; - border-radius: 8px; - padding: 15px; -} - -.lofi-controls label, -.cookie-clicker-container h3 { - display: block; - margin-bottom: 8px; - font-size: 1.1rem; -} - -#lofi-select { - width: 100%; - padding: 6px; - margin-bottom: 10px; - background: #000; - color: #0f0; - border: 1px solid #0f0; - border-radius: 4px; -} - -#lofi-toggle { - width: 100%; - padding: 8px; - background: #000; - color: #0f0; - border: 1px solid #0f0; - border-radius: 4px; + gap: 0.6rem; +} + +.btn { + appearance: none; + border: none; + border-radius: 10px; + background: linear-gradient(135deg, var(--sakura), var(--sakura-deep)); + color: #fff; + padding: 0.55rem 0.9rem; + font-weight: 700; cursor: pointer; + text-decoration: none; + display: inline-block; } -#lofi-toggle:hover { - background: #003300; +.btn.ghost { + background: rgba(255, 255, 255, 0.85); + border: 1px solid rgba(233, 140, 171, 0.45); + color: var(--ink); } -#lofi-status { - display: block; - margin-top: 8px; - font-size: 0.9rem; +.stats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); + gap: 0.7rem; } +.stats article { + background: rgba(255, 255, 255, 0.66); + border-radius: 12px; + padding: 0.7rem; + border: 1px solid rgba(233, 140, 171, 0.2); +} -footer { - text-align: center; - margin-top: 30px; - font-size: 0.9rem; - opacity: 0.6; +.stats h3 { + margin: 0; + font-size: 0.8rem; + color: var(--ink-soft); + text-transform: uppercase; + letter-spacing: 0.05em; } -footer a { - color: #0f0; - text-decoration: none; +.stats p { + margin-top: 0.35rem; + font-size: 1.3rem; + font-weight: 700; } -footer a:hover { - text-decoration: underline; +.tea-card { + border-left: 5px solid var(--tea); } -/* Cookie Clicker Styles */ -.cookie-clicker-container { - text-align: center; - background: rgba(30,0,30,0.4); - border-color: #f09; + +.tea-note { + margin-top: 0.55rem; + background: rgba(213, 159, 99, 0.14); + border-radius: 10px; + padding: 0.65rem; } -#cookie-count { - font-size: 2.5rem; - font-weight: bold; - color: #ffb6c1; - display: block; - margin: 10px 0; +.repo-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 0.7rem; } -#cookie-button { - background: #ffb6c1; - color: #8b0000; - border: none; - border-radius: 50%; - width: 120px; - height: 120px; - font-size: 2rem; - cursor: pointer; - box-shadow: 0 4px 8px rgba(0,0,0,0.3); - transition: transform 0.1s, box-shadow 0.2s; - position: relative; - overflow: hidden; +.repo-card { + background: rgba(255, 255, 255, 0.68); + border: 1px solid rgba(233, 140, 171, 0.25); + border-radius: 12px; + padding: 0.75rem; +} + +.repo-card h3 { + margin: 0; + font-size: 1.05rem; } -#cookie-button:hover { - transform: scale(1.05); - box-shadow: 0 6px 12px rgba(0,0,0,0.4); +.repo-card a { + color: inherit; + text-decoration: none; } -#cookie-button:active { - transform: scale(0.95); +.repo-meta { + color: var(--ink-soft); + font-size: 0.85rem; } -/* Cherry blossom petals */ -.petal { - position: absolute; - top: -20px; - width: 20px; - height: 20px; - background: radial-gradient(circle, #ffb6c1, #ff69b4); - border-radius: 50%; - opacity: 0.8; - pointer-events: none; - animation: fall linear forwards; +.small { + font-size: 0.88rem; + color: var(--ink-soft); } -@keyframes fall { - to { - transform: translateY(100vh) rotate(360deg); - } +.music-controls { + display: flex; + align-items: center; + gap: 0.7rem; } -#cps { - font-weight: bold; - color: #98fb98; +.footer-card { + text-align: center; } -/* Responsive adjustments */ -@media (max-width: 480px) { - #cookie-button { - width: 90px; - height: 90px; - font-size: 1.5rem; - } - #cookie-count { - font-size: 2rem; - } +.footer-card a { + color: var(--sakura-deep); + font-weight: 700; } -/* Responsive tweaks */ -@media (max-width: 768px) { - header h1 { - font-size: 2.5rem; +@media (max-width: 720px) { + .hero { + flex-direction: column-reverse; + text-align: center; } - .projects-grid { - grid-template-columns: 1fr; - } - .extras { - flex-direction: column; + + .hero-links, + .chips { + justify-content: center; } -} \ No newline at end of file +} diff --git a/static/index.html b/static/index.html index 64e7ea8..241cf09 100644 --- a/static/index.html +++ b/static/index.html @@ -3,60 +3,77 @@
-Python enthusiast • Ice‑tea aficionado • Lo‑fi beats
+Sakura-themed portfolio
+Brewing code like iced tea, one calm commit at a time.
+-
-
-
Internet
Loading latest profile updates…
+ Favorite workflow: chill lo-fi, clean commits, and a glass of iced tea while building cool things. +
+Loading repositories…