From 50059bb3a5c7de03590b2a7e34e273d2638e26d0 Mon Sep 17 00:00:00 2001 From: Clezio Penha Date: Mon, 8 Jun 2026 14:57:25 -0300 Subject: [PATCH] feat(ui): implement modern responsive dark theme --- css/style.css | 634 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 621 insertions(+), 13 deletions(-) diff --git a/css/style.css b/css/style.css index 05542f0..c219351 100644 --- a/css/style.css +++ b/css/style.css @@ -1,21 +1,629 @@ +/* ========================= + RESET +========================= */ + +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + body { -font-family: Arial, sans-serif; -max-width: 900px; -margin: auto; -padding: 20px; -line-height: 1.6; + + font-family: "Inter", sans-serif; + + background: + radial-gradient( + circle at top, + rgba(59,130,246,.08), + transparent 45% + ), + var(--background); + + color: var(--text-primary); + + line-height: 1.7; + + overflow-x: hidden; + + transition: + background .3s ease, + color .3s ease; } -header { -text-align: center; -margin-bottom: 40px; +/* ========================= + VARIABLES +========================= */ + +:root { + --background: #09090b; + --surface: #111827; + --surface-hover: #1f2937; + --border: #27272a; + --text-primary: #fafafa; + --text-secondary: #a1a1aa; + --accent: #3b82f6; + --accent-hover: #2563eb; + --container: 1200px; } -h1 { -margin-bottom: 0; +[data-theme="light"] { + + --background: #f8fafc; + + --surface: #ffffff; + + --surface-hover: #f1f5f9; + + --border: #e2e8f0; + + --text-primary: #0f172a; + + --text-secondary: #475569; + + --accent: #2563eb; + + --accent-hover: #1d4ed8; + } -h2 { -border-bottom: 1px solid #ddd; -padding-bottom: 5px; +/* ========================= + GLOBAL +========================= */ + +main { + width: 100%; } + +.section { + max-width: var(--container); + margin: 0 auto; + padding: 120px 24px; +} + +.section h2 { + font-size: 2.4rem; + margin-bottom: 24px; + font-weight: 700; +} + +.section p { + color: var(--text-secondary); + max-width: 800px; +} + +/* ========================= + HEADER +========================= */ + +.header { + position: fixed; + top: 0; + width: 100%; + z-index: 1000; + backdrop-filter: blur(18px); + background: rgba(9, 9, 11, 0.75); + border-bottom: 1px solid rgba(255, 255, 255, 0.05); +} + +.navbar { + max-width: var(--container); + margin: auto; + display: flex; + align-items: center; + justify-content: space-between; + padding: 18px 24px; +} + +.logo { + font-weight: 700; + font-size: 1.1rem; +} + +.nav-links { + display: flex; + gap: 28px; + list-style: none; +} + +.nav-links a { + text-decoration: none; + color: var(--text-secondary); + transition: 0.3s ease; +} + +.nav-links a:hover { + color: var(--text-primary); +} + +.language-switcher { + display: flex; + gap: 10px; +} + +.language-switcher button { + background: transparent; + border: none; + cursor: pointer; + font-size: 1.1rem; +} + +/* ========================= + HERO +========================= */ + +.hero { + min-height: 85vh; + display: flex; + align-items: center; + justify-content: center; + padding: 120px 24px 60px; +} + +.hero-content { + max-width: 900px; + text-align: center; +} + +.hero-badge { + display: inline-block; + + margin-bottom: 24px; + + padding: 8px 16px; + + border: 1px solid var(--border); + border-radius: 999px; + + background: color-mix(in srgb, + var(--surface) 80%, + transparent); + + color: var(--text-secondary); + + font-size: 0.9rem; +} + +.hero h1 { + font-size: clamp(2.8rem, 6vw, 4.8rem); + + background: linear-gradient(180deg, + #ffffff 0%, + #dbeafe 100%); + + -webkit-background-clip: text; + + -webkit-text-fill-color: transparent; + + max-width: 1000px; + + line-height: 1.1; + + margin: 0 auto 28px; + + font-weight: 800; + + letter-spacing: -2px; +} + +.hero p { + color: var(--text-secondary); + + font-size: 1.2rem; + + max-width: 700px; + + margin: auto; +} + +.hero-actions { + margin-top: 40px; + + display: flex; + justify-content: center; + gap: 16px; + + flex-wrap: wrap; +} + +/* ========================= + BUTTONS +========================= */ + +.btn-primary, +.btn-secondary { + text-decoration: none; + + padding: 14px 26px; + + border-radius: 12px; + + transition: 0.3s ease; +} + +.btn-primary { + background: var(--accent); + color: white; +} + +.btn-primary:hover { + background: var(--accent-hover); + transform: translateY(-2px); +} + +.btn-secondary { + border: 1px solid var(--border); + color: var(--text-primary); +} + +.btn-secondary:hover { + background: rgba(255, 255, 255, 0.05); +} + +/* ========================= + METRICS +========================= */ + +.metrics { + max-width: var(--container); + + margin: auto; + + display: grid; + grid-template-columns: repeat(4, 1fr); + + gap: 24px; + + padding: 0 24px 120px; +} + +.metric-card { + background: var(--surface); + + border: 1px solid var(--border); + + padding: 32px; + + border-radius: 20px; + + text-align: center; +} + +.metric-card h3 { + font-size: 2rem; + margin-bottom: 12px; +} + +.metric-card p { + color: var(--text-secondary); +} + +/* ========================= + GRID CARDS +========================= */ + +.cards-grid { + display: grid; + + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); + + gap: 24px; + + margin-top: 40px; +} + +.card, +.project-card { + background: var(--surface); + + border: 1px solid var(--border); + + border-radius: 20px; + + padding: 28px; + + transition: all .3s ease; +} + +.card:hover, +.project-card:hover { + transform: translateY(-6px); + + border-color: rgba(59, 130, 246, .35); + + background: var(--surface-hover); +} + +.card h3, +.project-card h3 { + margin-bottom: 12px; +} + +.card p, +.project-card p { + color: var(--text-secondary); +} + +/* ========================= + TECH STACK +========================= */ + +.tech-stack { + display: flex; + flex-wrap: wrap; + + gap: 14px; + + margin-top: 40px; +} + +.tech-stack span { + padding: 10px 18px; + + background: var(--surface); + + border: 1px solid var(--border); + + border-radius: 999px; + + color: var(--text-secondary); +} + +/* ========================= + TIMELINE +========================= */ + +.timeline { + margin-top: 40px; + + border-left: 2px solid var(--border); + + padding-left: 32px; +} + +.timeline-item { + position: relative; + + margin-bottom: 50px; +} + +.timeline-item::before { + content: ""; + + position: absolute; + + left: -41px; + top: 8px; + + width: 14px; + height: 14px; + + border-radius: 50%; + + background: var(--accent); +} + +.timeline-item h3 { + margin-bottom: 10px; +} + +.timeline-item p { + color: var(--text-secondary); +} + +/* ========================= + CONTACT +========================= */ + +.contact-links { + display: flex; + gap: 20px; + + margin-top: 30px; + + flex-wrap: wrap; +} + +.contact-links a { + text-decoration: none; + + color: var(--accent); + + transition: 0.3s ease; +} + +.contact-links a:hover { + color: white; +} + +/* ========================= + FOOTER +========================= */ + +.footer { + border-top: 1px solid var(--border); + + text-align: center; + + padding: 50px 24px; + + color: var(--text-secondary); +} + +.footer p:first-child { + margin-bottom: 10px; +} + +/* ========================= BACK TO TOP ========================= */ +#backToTop { + position: fixed; + bottom: 30px; + right: 30px; + width: 50px; + height: 50px; + border: none; + border-radius: 50%; + background: #3b82f6; + color: white; + font-size: 20px; + cursor: pointer; + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; + z-index: 999; +} + +#backToTop:hover { + transform: translateY(-3px); +} + +#backToTop.show { + opacity: 1; + visibility: visible; +} + +/* ========================= SECTION ANIMATION ========================= */ +.section, +.metric-card, +.project-card, +.card { + opacity: 0; + transform: translateY(30px); + transition: all 0.7s ease; +} + +.show-element { + opacity: 1 !important; + transform: translateY(0) !important; +} + +/* ========================= ACTIVE NAV ========================= */ +.nav-links a.active { + color: #ffffff; +} + +.nav-links a.active::after { + content: ""; + display: block; + margin-top: 6px; + width: 100%; + height: 2px; + background: #3b82f6; +} + +/* ========================= + THEME BUTTON +========================= */ + +.controls { + + display: flex; + + align-items: center; + + gap: 16px; +} + +#theme-toggle { + + border: none; + + background: transparent; + + color: var(--text-primary); + + cursor: pointer; + + font-size: 1.2rem; + + transition: .3s ease; +} + +#theme-toggle:hover { + + transform: rotate(20deg); +} + +/* ========================= + RESPONSIVE +========================= */ + +@media (max-width: 960px) { + + .metrics { + grid-template-columns: repeat(2, 1fr); + } + + .nav-links { + display: none; + } + + .hero h1 { + font-size: 3rem; + } + + .section { + padding: 90px 24px; + } +} + +@media (max-width: 640px) { + + .metrics { + grid-template-columns: 1fr; + } + + .hero { + text-align: center; + } + + .hero h1 { + font-size: 2.4rem; + } + + .hero p { + font-size: 1rem; + } + + .section h2 { + font-size: 2rem; + } +} + +.language-switcher button.active { + transform: scale(1.15); +} + +.language-switcher button { + transition: all 0.3s ease; +} + +.menu-toggle { + display: none; + background: transparent; + border: none; + color: #fff; + font-size: 1.5rem; + cursor: pointer; +} + +.card:hover, +.project-card:hover { + transform: translateY(-6px) scale(1.02); +} + +@media (max-width:960px) { + .menu-toggle { + display: block; + } + + .nav-links.open { + display: flex !important; + } +} \ No newline at end of file