line-gestao-frontend/src/app/pages/home/home.scss

545 lines
12 KiB
SCSS

:host {
--brand: #E33DCF;
--brand-soft: rgba(227, 61, 207, 0.14);
--brand-soft-2: rgba(227, 61, 207, 0.08);
--text: #111214;
--muted: rgba(17, 18, 20, 0.70);
--radius-xl: 22px;
--radius-lg: 16px;
display: block;
}
/* ✅ FUNDO GLOBAL (vale para a Home TODA até o footer) */
.home-page {
position: relative;
min-height: 100vh;
overflow: hidden;
background:
radial-gradient(900px 420px at 20% 10%, var(--brand-soft), transparent 60%),
radial-gradient(820px 380px at 80% 30%, var(--brand-soft-2), transparent 60%),
linear-gradient(180deg, #ffffff 0%, #f5f5f7 70%);
/* névoa suave pra dar sensação de blur */
&::after {
content: '';
position: absolute;
inset: 0;
pointer-events: none;
background: rgba(255, 255, 255, 0.25);
}
}
/* ✅ BLOBS FIXOS (continuam no scroll) */
.page-blob {
position: fixed;
pointer-events: none;
border-radius: 999px;
filter: blur(34px);
opacity: 0.55;
z-index: 0;
background: radial-gradient(circle at 30% 30%, rgba(227,61,207,0.55), rgba(227,61,207,0.06));
animation: floaty 10s ease-in-out infinite;
&.blob-1 { width: 420px; height: 420px; top: -140px; left: -140px; }
&.blob-2 { width: 520px; height: 520px; top: -220px; right: -240px; animation-duration: 12s; }
&.blob-3 { width: 360px; height: 360px; bottom: -180px; left: 25%; animation-duration: 14s; }
&.blob-4 { width: 520px; height: 520px; bottom: -260px; right: -260px; animation-duration: 16s; opacity: .45; }
@media (max-width: 992px) {
opacity: 0.35;
}
}
/* ✅ garante que o conteúdo fique acima do fundo */
.hero,
.features-section,
.container {
position: relative;
z-index: 1;
}
/* =============================== */
/* HERO */
/* =============================== */
.hero {
padding: 56px 0 18px 0;
}
.hero-inner {
display: grid;
grid-template-columns: 1.1fr 0.9fr;
gap: 36px;
align-items: center;
@media (max-width: 992px) {
grid-template-columns: 1fr;
gap: 26px;
}
}
/* texto centralizado */
.hero-copy {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
/* badge */
.hero-badge {
display: inline-flex;
align-items: center;
gap: 10px;
width: fit-content;
padding: 10px 14px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.78);
border: 1px solid rgba(227, 61, 207, 0.22);
backdrop-filter: blur(10px);
color: var(--text);
font-family: 'Inter', sans-serif;
font-size: 14px;
font-weight: 700;
i { color: var(--brand); font-size: 16px; }
}
.hero-text-section {
width: 100%;
margin-top: 12px;
}
/* título */
.main-title {
font-family: 'Inter', sans-serif;
font-size: 52px;
line-height: 1.05;
margin: 18px 0 18px 0;
display: flex;
flex-direction: column;
align-items: center;
@media (max-width: 1400px) { font-size: 44px; }
@media (max-width: 1024px) { font-size: 38px; }
@media (max-width: 768px) { font-size: 32px; }
@media (max-width: 480px) { font-size: 28px; }
}
.main-title .first-line,
.main-title .second-line {
font-weight: 650;
display: block;
color: var(--text);
text-align: center;
}
.main-title strong {
color: var(--brand);
position: relative;
}
.main-title strong::after {
content: '';
position: absolute;
left: 0;
bottom: 6px;
width: 100%;
height: 10px;
border-radius: 999px;
background: rgba(227, 61, 207, 0.18);
z-index: -1;
}
/* parágrafo */
.main-paragraph {
width: min(980px, 100%);
margin: 0 auto 16px auto;
font-family: 'Poppins', sans-serif;
font-size: 20px;
color: var(--muted);
line-height: 1.45;
@media (max-width: 1400px) { font-size: 19px; }
@media (max-width: 1024px) { font-size: 18px; }
@media (max-width: 768px) { font-size: 16px; }
}
.main-paragraph .brand-name { color: var(--text); }
.main-paragraph .highlight { color: var(--text); font-weight: 800; }
.main-paragraph strong { font-weight: 800; }
/* botões */
.hero-actions {
display: flex;
gap: 14px;
align-items: center;
justify-content: center;
margin-top: 16px;
flex-wrap: wrap;
}
.cta-secondary {
height: 44px;
padding: 0 14px;
border-radius: 12px;
background: rgba(255, 255, 255, 0.72);
border: 1px solid rgba(17, 18, 20, 0.10);
color: var(--text);
font-weight: 800;
display: inline-flex;
align-items: center;
gap: 10px;
transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
i { color: var(--brand); }
&:hover {
transform: translateY(-2px);
border-color: rgba(227, 61, 207, 0.28);
box-shadow: 0 12px 24px rgba(17, 18, 20, 0.10);
}
}
/* =============================== */
/* MOCK (direita) */
/* =============================== */
.hero-mock {
display: flex;
justify-content: flex-end;
@media (max-width: 992px) {
justify-content: center;
}
}
.mock-card {
width: min(460px, 100%);
border-radius: var(--radius-xl);
background: rgba(255, 255, 255, 0.78);
border: 1px solid rgba(227, 61, 207, 0.14);
backdrop-filter: blur(12px);
box-shadow: 0 22px 46px rgba(17, 18, 20, 0.10);
overflow: hidden;
transform: perspective(900px) rotateY(-6deg) rotateX(2deg);
transition: transform 200ms ease;
&:hover {
transform: perspective(900px) rotateY(-2deg) rotateX(1deg) translateY(-2px);
}
}
.mock-top {
display: flex;
align-items: center;
gap: 8px;
padding: 14px 16px;
background: linear-gradient(180deg, rgba(227, 61, 207, 0.10), rgba(255, 255, 255, 0.20));
.dot {
width: 10px;
height: 10px;
border-radius: 999px;
background: rgba(17, 18, 20, 0.12);
}
.mock-title {
margin-left: 6px;
font-weight: 950;
font-family: 'Inter', sans-serif;
color: var(--text);
}
}
.mock-grid {
padding: 16px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
@media (max-width: 380px) { grid-template-columns: 1fr; }
}
.mock-kpi {
border-radius: var(--radius-lg);
background: #fff;
border: 1px solid rgba(17, 18, 20, 0.08);
padding: 12px;
.kpi-label {
display: block;
font-size: 12px;
color: rgba(17, 18, 20, 0.65);
font-family: 'Inter', sans-serif;
font-weight: 800;
}
.kpi-value {
display: block;
font-size: 26px;
font-family: 'Inter', sans-serif;
font-weight: 950;
color: var(--text);
margin-top: 2px;
}
.kpi-tag {
display: inline-flex;
align-items: center;
gap: 6px;
margin-top: 8px;
padding: 6px 10px;
border-radius: 999px;
border: 1px solid rgba(227, 61, 207, 0.20);
background: rgba(227, 61, 207, 0.07);
color: var(--text);
font-size: 12px;
font-weight: 900;
i { color: var(--brand); }
}
}
.mock-line {
grid-column: 1 / -1;
border-radius: var(--radius-lg);
background: #fff;
border: 1px solid rgba(17, 18, 20, 0.08);
padding: 12px;
display: grid;
grid-template-columns: auto 1fr auto;
gap: 12px;
align-items: center;
.line-icon {
width: 40px;
height: 40px;
border-radius: 12px;
background: rgba(227, 61, 207, 0.10);
display: grid;
place-items: center;
i { color: var(--brand); font-size: 18px; }
}
.line-title {
font-weight: 950;
font-family: 'Inter', sans-serif;
color: var(--text);
font-size: 14px;
}
.line-sub {
color: rgba(17, 18, 20, 0.65);
font-size: 12px;
margin-top: 2px;
font-family: 'Inter', sans-serif;
}
.line-pill {
padding: 8px 10px;
border-radius: 999px;
font-weight: 950;
font-size: 12px;
background: rgba(227, 61, 207, 0.10);
border: 1px solid rgba(227, 61, 207, 0.22);
color: var(--text);
}
}
/* =============================== */
/* MÉTRICAS CENTRALIZADAS (MEIO) */
/* =============================== */
.hero-metrics-wide {
margin-top: 18px;
display: flex;
justify-content: center;
}
.hero-metrics {
display: flex;
gap: 14px;
flex-wrap: wrap;
justify-content: center;
}
.metric {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 12px 14px;
border-radius: 14px;
background: rgba(255, 255, 255, 0.78);
border: 1px solid rgba(227, 61, 207, 0.16);
backdrop-filter: blur(10px);
i { color: var(--brand); font-size: 18px; }
.metric-title {
display: block;
font-weight: 900;
color: var(--text);
font-family: 'Inter', sans-serif;
font-size: 14px;
line-height: 1.1;
}
.metric-sub {
display: block;
font-family: 'Inter', sans-serif;
font-size: 12px;
color: rgba(17, 18, 20, 0.65);
}
}
/* =============================== */
/* FEATURES */
/* =============================== */
.features-section {
padding: 18px 0 60px 0;
background: transparent;
}
.section-head {
text-align: center;
margin-bottom: 24px;
}
.section-title {
font-family: 'Inter', sans-serif;
font-weight: 950;
color: var(--text);
font-size: 30px;
@media (max-width: 768px) { font-size: 24px; }
}
.section-title .brand { color: var(--brand); }
.section-subtitle {
margin-top: 10px;
color: var(--muted);
font-family: 'Poppins', sans-serif;
}
/* ✅ AQUI: 3 CARDS CENTRALIZADOS LADO A LADO NO NOTEBOOK */
.feature-cards-row {
display: flex;
justify-content: center;
align-items: stretch;
gap: 26px;
flex-wrap: nowrap; /* ✅ força ficar em 1 linha */
/* notebook / telas médias */
@media (max-width: 1199.98px) {
gap: 18px;
}
/* quando a tela ficar pequena de verdade, aí quebra */
@media (max-width: 992px) {
flex-wrap: wrap;
}
}
/* Garante que o col-auto do bootstrap não atrapalhe */
.feature-item {
display: flex;
justify-content: center;
align-items: stretch;
margin-bottom: 0 !important;
}
/* melhora o respiro no botão */
.button-section {
margin-top: 18px;
}
/* faixa de valores */
.value-strip {
margin-top: 26px;
padding: 14px 16px;
border-radius: var(--radius-xl);
background: rgba(255, 255, 255, 0.80);
border: 1px solid rgba(227, 61, 207, 0.14);
backdrop-filter: blur(10px);
display: flex;
justify-content: center;
gap: 18px;
flex-wrap: wrap;
.value {
display: inline-flex;
align-items: center;
gap: 10px;
i { color: var(--brand); font-size: 18px; }
span { color: var(--text); font-family: 'Inter', sans-serif; }
}
}
/* =============================== */
/* ✅ ANIMAÇÕES SSR-SAFE */
/* =============================== */
[data-animate] { opacity: 1; transform: none; }
.js-animate [data-animate] {
opacity: 0;
transform: translateY(14px);
transition: opacity 600ms ease, transform 600ms ease;
will-change: opacity, transform;
}
.js-animate [data-animate].is-visible {
opacity: 1;
transform: translateY(0);
}
/* brilho suave no botão */
:host ::ng-deep app-cta-button .btn,
:host ::ng-deep app-cta-button button {
position: relative;
overflow: hidden;
transform: translateZ(0);
}
:host ::ng-deep app-cta-button .btn::after,
:host ::ng-deep app-cta-button button::after {
content: '';
position: absolute;
inset: 0;
transform: translateX(-120%) rotate(12deg);
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.55), transparent);
animation: shine 3.4s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
.page-blob { animation: none; }
.js-animate [data-animate] { transition: none; transform: none; opacity: 1; }
:host ::ng-deep app-cta-button .btn::after,
:host ::ng-deep app-cta-button button::after { animation: none; }
}
@keyframes floaty {
0% { transform: translate(0, 0) scale(1); }
50% { transform: translate(18px, 10px) scale(1.03); }
100% { transform: translate(0, 0) scale(1); }
}
@keyframes shine {
0%, 65% { transform: translateX(-120%) rotate(12deg); opacity: 0.0; }
75% { opacity: 1; }
100% { transform: translateX(120%) rotate(12deg); opacity: 0.0; }
}