Files
portifolio-evandrodevbr/app/globals.css
T
Evandro Fonseca JuniorandClaude Sonnet 5 d76bbf5974 feat: revamp portfolio with case studies, curriculo page, and local SEO
Adds dynamic case study and curriculo routes, project health monitoring
for live demo status, and strengthens local SEO (structured data,
service-area targeting for Garuva/Joinville/Curitiba, a dedicated
"criação de sites" service page) so search results better match the
professional title (Engenheiro da Computação) and experience (5 anos).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-07-15 01:31:46 -03:00

739 lines
14 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
@theme {
--spacing-sp-1: var(--sp-1);
--spacing-sp-2: var(--sp-2);
--spacing-sp-3: var(--sp-3);
--spacing-sp-4: var(--sp-4);
--spacing-sp-5: var(--sp-5);
--spacing-sp-6: var(--sp-6);
--spacing-sp-8: var(--sp-8);
--spacing-sp-10: var(--sp-10);
--spacing-sp-12: var(--sp-12);
--spacing-sp-16: var(--sp-16);
--spacing-sp-20: var(--sp-20);
--spacing-sp-24: var(--sp-24);
}
:root {
--ink: #0a0a0a;
--ink-80: rgba(10, 10, 10, 0.8);
--ink-40: rgba(10, 10, 10, 0.4);
--ink-12: rgba(10, 10, 10, 0.12);
--ink-06: rgba(10, 10, 10, 0.06);
--paper: #f4f2ed;
--paper-dark: #eceae4;
--white: #ffffff;
--slash: #ccff00;
--slash-dim: rgba(204, 255, 0, 0.16);
--meta: #4a4a4a;
--border: rgba(10, 10, 10, 0.1);
--border-light: rgba(10, 10, 10, 0.06);
--sp-1: 4px;
--sp-2: 8px;
--sp-3: 12px;
--sp-4: 16px;
--sp-5: 20px;
--sp-6: 24px;
--sp-8: 32px;
--sp-10: 40px;
--sp-12: 48px;
--sp-16: 64px;
--sp-20: 80px;
--sp-24: 96px;
--r-sm: 4px;
--r-md: 8px;
--r-lg: 16px;
--r-full: 999px;
--font-display: var(--font-syne), sans-serif;
--font-hero: var(--font-monument-extended), sans-serif;
--font-mono: var(--font-geist-mono), monospace;
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
--ease-in: cubic-bezier(0.4, 0, 1, 1);
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html,
body {
width: 100%;
max-width: 100%;
overflow-x: hidden;
overscroll-behavior-x: none;
}
html {
scroll-behavior: smooth;
}
body {
position: relative;
background: var(--paper);
color: var(--ink);
font-family: var(--font-mono);
font-size: 14px;
line-height: 1.68;
}
img,
video,
canvas,
svg {
max-width: 100%;
}
@supports (overflow: clip) {
html,
body {
overflow-x: clip;
}
}
a {
color: inherit;
}
button,
input,
select,
textarea {
font: inherit;
}
::selection {
background: var(--slash);
color: var(--ink);
}
.bg-grid {
background-image:
linear-gradient(rgba(10, 10, 10, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(10, 10, 10, 0.03) 1px, transparent 1px);
background-size: 48px 48px;
}
.bg-grid-light {
background-image:
linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
background-size: 48px 48px;
}
.ds-main {
/* no top padding needed */
}
.ds-section {
padding: clamp(72px, 9vw, 112px) clamp(24px, 6vw, 64px);
border-bottom: 1px solid var(--border);
content-visibility: auto;
contain-intrinsic-size: auto 600px;
}
.ds-section:nth-of-type(even):not(.ds-section-dark) {
background: var(--paper-dark);
}
.ds-section-dark {
background: var(--ink);
border-bottom-color: rgba(255, 255, 255, 0.06);
color: var(--white);
}
.ds-section-shell,
.ds-loading,
.ds-error {
width: min(1240px, 100%);
margin: 0 auto;
}
.ds-section-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: var(--sp-6);
margin-bottom: var(--sp-10);
}
.ds-section-meta {
max-width: 760px;
}
.ds-eyebrow,
.ds-kicker {
font-size: 10px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--meta);
}
.ds-eyebrow {
margin-bottom: var(--sp-2);
}
.ds-section-title {
font-family: var(--font-display);
font-size: clamp(28px, 4vw, 44px);
line-height: 1.02;
font-weight: 800;
letter-spacing: -0.035em;
}
.ds-section-description {
max-width: 58ch;
color: rgba(10, 10, 10, 0.74);
font-size: 14px;
line-height: 1.82;
}
.ds-grid-2,
.ds-grid-4 {
display: grid;
gap: var(--sp-6);
}
.ds-grid-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.ds-grid-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.ds-card,
.ds-panel {
border: 1px solid var(--border);
min-width: 0;
height: 100%;
}
.ds-card {
background: rgba(255, 255, 255, 0.92);
padding: clamp(20px, 3vw, 28px);
display: flex;
flex-direction: column;
}
.ds-panel {
background: rgba(10, 10, 10, 0.03);
padding: var(--sp-5);
display: flex;
flex-direction: column;
}
.ds-card-title {
font-family: var(--font-display);
font-size: clamp(20px, 2.4vw, 30px);
line-height: 1.08;
letter-spacing: -0.025em;
margin-top: var(--sp-4);
}
.ds-copy {
margin-top: var(--sp-4);
color: var(--ink-80);
font-size: 14px;
line-height: 1.8;
flex-grow: 1;
}
.ds-tags {
display: flex;
flex-wrap: wrap;
gap: 10px;
list-style: none;
margin-top: auto;
padding-top: var(--sp-6);
}
.ds-tag {
padding: 8px 12px;
border: 1px solid rgba(10, 10, 10, 0.12);
background: rgba(10, 10, 10, 0.03);
font-size: 11px;
letter-spacing: 0.04em;
text-transform: none;
font-weight: 500;
white-space: normal;
word-break: normal;
overflow-wrap: break-word;
transition:
border-color 0.2s ease,
box-shadow 0.2s ease,
transform 0.2s ease;
}
.ds-tag:hover {
border-color: rgba(10, 10, 10, 0.3);
box-shadow: 0 2px 12px rgba(10, 10, 10, 0.1);
}
.ds-section-dark .ds-tag:hover {
border-color: rgba(204, 255, 0, 0.3);
box-shadow: 0 2px 16px rgba(204, 255, 0, 0.1);
}
.ds-metric {
display: inline-flex;
align-items: center;
gap: var(--sp-2);
color: rgba(10, 10, 10, 0.65);
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.ds-link {
display: inline-flex;
align-items: center;
gap: var(--sp-2);
text-decoration: none;
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
transition:
transform 0.2s ease,
background 0.2s ease,
border-color 0.2s ease;
}
.ds-link:hover {
transform: translateY(-1px);
}
.ds-link-accent {
color: var(--ink);
background: var(--slash);
padding: 12px 18px;
transition:
transform 0.25s ease,
box-shadow 0.25s ease,
background 0.25s ease;
}
.ds-link-accent:hover {
background: #ffffff;
box-shadow:
0 0 20px rgba(204, 255, 0, 0.45),
0 0 48px rgba(204, 255, 0, 0.18);
}
.ds-section-dark .ds-link-accent:hover {
box-shadow:
0 0 24px rgba(204, 255, 0, 0.55),
0 0 60px rgba(204, 255, 0, 0.22);
}
.ds-link-muted {
padding: 12px 18px;
border: 1px solid var(--border);
transition:
transform 0.25s ease,
box-shadow 0.25s ease,
border-color 0.25s ease;
}
.ds-link-muted:hover {
border-color: var(--ink-40);
box-shadow: 0 4px 20px rgba(10, 10, 10, 0.12);
}
.ds-section-dark .ds-link-muted:hover {
border-color: rgba(204, 255, 0, 0.35);
box-shadow: 0 4px 20px rgba(204, 255, 0, 0.08);
}
.ds-list {
margin-top: var(--sp-5);
padding-left: 18px;
font-size: 14px;
line-height: 1.85;
flex-grow: 1;
}
.ds-list li::marker {
color: var(--slash);
}
.ds-loading,
.ds-error {
padding: var(--sp-10) clamp(24px, 6vw, 64px);
font-size: 11px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.ds-section-dark .ds-eyebrow,
.ds-section-dark .ds-kicker,
.ds-section-dark .ds-metric {
color: rgba(255, 255, 255, 0.65);
}
.ds-section-dark .ds-section-description {
color: rgba(255, 255, 255, 0.75);
}
.ds-section-dark .ds-card,
.ds-section-dark .ds-panel {
background: rgba(255, 255, 255, 0.03);
border-color: rgba(255, 255, 255, 0.08);
}
.ds-section-dark .ds-copy,
.ds-section-dark .ds-list {
color: rgba(255, 255, 255, 0.74);
}
.ds-section-dark .ds-tag {
border-color: rgba(255, 255, 255, 0.1);
background: rgba(255, 255, 255, 0.04);
}
.ds-section-dark .ds-link-muted {
border-color: rgba(255, 255, 255, 0.12);
}
.ds-draw-line {
display: block;
width: 100%;
height: 1px;
margin-top: var(--sp-4);
background: linear-gradient(
90deg,
rgba(10, 10, 10, 0.38) 0%,
rgba(10, 10, 10, 0.06) 100%
);
}
.ds-section-dark .ds-draw-line {
background: linear-gradient(
90deg,
rgba(204, 255, 0, 0.5) 0%,
rgba(204, 255, 0, 0.08) 100%
);
}
@keyframes ds-shimmer {
0% {
background-position: 200% 0;
}
100% {
background-position: -200% 0;
}
}
@keyframes marquee {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-50%);
}
}
@keyframes marquee-reverse {
0% {
transform: translateX(-50%);
}
100% {
transform: translateX(0);
}
}
.animate-marquee {
animation: marquee 40s linear infinite;
}
.animate-marquee-reverse {
animation: marquee-reverse 45s linear infinite;
}
.ds-skeleton-card {
display: flex;
flex-direction: column;
gap: var(--sp-3);
}
.ds-skeleton {
position: relative;
overflow: hidden;
border-radius: 4px;
background: #111;
}
.ds-skeleton::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(90deg, #111 0%, #1f1f1f 50%, #111 100%);
background-size: 220% 100%;
animation: ds-shimmer 1.4s linear infinite;
}
.ds-skeleton-kicker {
height: 10px;
width: 30%;
}
.ds-skeleton-title {
height: 26px;
width: 72%;
}
.ds-skeleton-line {
height: 12px;
width: 100%;
}
.ds-skeleton-line-short {
width: 62%;
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
@media (max-width: 1024px) {
.ds-section-header {
flex-direction: column;
gap: var(--sp-4);
}
.ds-grid-2,
.ds-grid-4 {
grid-template-columns: 1fr;
}
}
@media (max-width: 768px) {
.ds-section {
padding: 72px 20px;
}
.ds-section-title {
font-size: clamp(26px, 8vw, 34px);
}
.ds-section-description,
.ds-copy,
.ds-list {
font-size: 13px;
line-height: 1.75;
}
.ds-tags {
gap: 8px;
padding-top: var(--sp-5);
}
.ds-tag {
font-size: 10px;
padding: 7px 10px;
}
}
/* ═══════════════════════════════════════════
CINEMATIC STYLES - Awwwards Level
═══════════════════════════════════════════ */
/* Cinematic text gradient - hero heading */
.cinematic-text-gradient {
color: #f4f2ed;
}
/* Solid surfaces avoid expensive backdrop blur during first paint. */
.cinematic-glass {
border: 1px solid rgba(255, 255, 255, 0.12);
background: rgba(10, 10, 10, 0.78);
transition:
border-color 0.25s ease,
background 0.25s ease;
}
.cinematic-glass:hover {
border-color: rgba(204, 255, 0, 0.35);
background: rgba(10, 10, 10, 0.9);
}
/* Primary CTA - cinematic glow button */
.cinematic-cta-primary {
position: relative;
background: var(--slash);
overflow: hidden;
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.cinematic-cta-primary::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
transparent 0%,
rgba(255, 255, 255, 0.4) 50%,
transparent 100%
);
transform: translateX(-100%);
transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}
.cinematic-cta-primary:hover {
background: #ffffff;
box-shadow:
0 0 30px rgba(204, 255, 0, 0.4),
0 0 60px rgba(204, 255, 0, 0.15);
}
.cinematic-cta-primary:hover::before {
transform: translateX(100%);
}
/* Secondary CTA */
.cinematic-cta-secondary {
position: relative;
border: 1px solid rgba(244, 242, 237, 0.2);
background: rgba(10, 10, 10, 0.4);
backdrop-filter: blur(10px);
overflow: hidden;
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.cinematic-cta-secondary::before {
content: "";
position: absolute;
inset: -1px;
background: linear-gradient(
135deg,
transparent 30%,
rgba(204, 255, 0, 0.3) 50%,
transparent 70%
);
background-size: 200% 200%;
opacity: 0;
transition: opacity 0.4s;
}
.cinematic-cta-secondary:hover {
border-color: var(--slash);
color: var(--slash);
box-shadow: 0 0 20px rgba(204, 255, 0, 0.1);
}
.cinematic-cta-secondary:hover::before {
opacity: 1;
animation: borderGlow 2s linear infinite;
}
@keyframes borderGlow {
0% {
background-position: 0% 0%;
}
100% {
background-position: 200% 200%;
}
}
/* Social links */
.cinematic-social-link {
border: 1px solid rgba(244, 242, 237, 0.12);
background: rgba(10, 10, 10, 0.3);
color: rgba(244, 242, 237, 0.86);
backdrop-filter: blur(8px);
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}
.cinematic-social-link:hover {
border-color: var(--slash);
background: rgba(204, 255, 0, 0.08);
color: var(--slash);
box-shadow: 0 0 20px rgba(204, 255, 0, 0.15);
}
/* Aside card */
.cinematic-aside-card {
border: 1px solid rgba(255, 255, 255, 0.08);
background: linear-gradient(
180deg,
rgba(10, 10, 10, 0.6) 0%,
rgba(10, 10, 10, 0.3) 100%
);
backdrop-filter: blur(24px);
-webkit-backdrop-filter: blur(24px);
transition: all 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}
.cinematic-aside-card:hover {
border-color: rgba(204, 255, 0, 0.12);
box-shadow:
0 20px 60px rgba(0, 0, 0, 0.4),
0 0 1px rgba(204, 255, 0, 0.2);
}
/* Section divider animations */
@keyframes shimmerDivider {
0% {
transform: translateX(-100%);
opacity: 0;
}
50% {
opacity: 0.8;
}
100% {
transform: translateX(100%);
opacity: 0;
}
}
@keyframes pulseDot {
0%,
100% {
transform: scale(1);
opacity: 0.3;
}
50% {
transform: scale(2);
opacity: 1;
}
}
/* Cinematic card hover effect */
.ds-card {
transition: all 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}
.ds-card:hover {
transform: translateY(-4px);
box-shadow: 0 20px 40px rgba(10, 10, 10, 0.12);
}
.ds-section-dark .ds-card:hover {
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.4),
0 0 1px rgba(204, 255, 0, 0.1);
}
/* Smooth scroll overrides for cinematic feel */
html {
scroll-behavior: auto;
}
/* Cinematic section reveal transforms */
.cinematic-reveal {
will-change: transform, opacity;
}