39348-vm/assets/css/custom.css
Flatlogic Bot c135e4db89 123
2026-03-27 16:57:36 +00:00

810 lines
16 KiB
CSS

:root {
color-scheme: light;
--bg: #f5fbff;
--surface: #ffffff;
--surface-muted: #f7fbfd;
--surface-accent: linear-gradient(135deg, rgba(19, 115, 230, 0.08), rgba(22, 163, 74, 0.08));
--border: #d8e5ef;
--border-strong: #bdd3e2;
--text: #102a43;
--text-soft: #5b7083;
--accent: #1373e6;
--accent-strong: #0b57d0;
--accent-soft: #eaf4ff;
--accent-soft-strong: #d6e9ff;
--mint: #16a34a;
--mint-soft: #eaf9ef;
--success: #15803d;
--warning: #b7791f;
--danger: #c2413b;
--shadow: 0 20px 50px rgba(15, 42, 79, 0.08);
--shadow-soft: 0 12px 26px rgba(19, 115, 230, 0.08);
--shadow-hover: 0 24px 60px rgba(19, 115, 230, 0.12);
--radius-sm: 10px;
--radius-md: 18px;
--radius-lg: 24px;
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-5: 1.5rem;
--space-6: 2rem;
--sidebar-width: 290px;
--ease: 220ms cubic-bezier(0.22, 1, 0.36, 1);
}
html,
body {
min-height: 100%;
scroll-behavior: smooth;
}
body {
margin: 0;
color: var(--text);
font-family: "Tajawal", "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
background:
radial-gradient(circle at top left, rgba(19, 115, 230, 0.10), transparent 30%),
radial-gradient(circle at top right, rgba(22, 163, 74, 0.09), transparent 28%),
linear-gradient(180deg, #fbfeff 0%, var(--bg) 58%, #f8fcff 100%);
}
body::before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.18), transparent 35%, rgba(19, 115, 230, 0.03) 100%);
z-index: -1;
}
a {
color: inherit;
transition: color var(--ease), opacity var(--ease);
}
a:hover {
color: var(--accent-strong);
}
code {
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 0.875em;
background: var(--accent-soft);
color: var(--accent-strong);
padding: 0.12rem 0.35rem;
border-radius: 6px;
}
.app-shell {
display: flex;
min-height: 100vh;
}
.sidebar {
width: var(--sidebar-width);
flex-shrink: 0;
background: rgba(255, 255, 255, 0.78);
border-right: 1px solid rgba(189, 211, 226, 0.85);
padding: var(--space-5);
display: flex;
flex-direction: column;
justify-content: space-between;
position: sticky;
top: 0;
height: 100vh;
backdrop-filter: blur(18px);
}
.brand-mark {
display: flex;
align-items: center;
gap: 0.95rem;
}
.brand-mark:hover .brand-icon {
transform: translateY(-2px) scale(1.02);
}
.brand-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.75rem;
height: 2.75rem;
border-radius: 14px;
background: linear-gradient(135deg, var(--accent) 0%, var(--mint) 100%);
color: #fff;
font-weight: 800;
font-size: 1rem;
box-shadow: 0 18px 35px rgba(19, 115, 230, 0.22);
transition: transform var(--ease), box-shadow var(--ease);
}
.sidebar-label,
.eyebrow,
.section-kicker {
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 0.72rem;
font-weight: 700;
color: var(--text-soft);
margin-bottom: 0.45rem;
}
.nav-link {
padding: 0.82rem 0.95rem;
color: var(--text-soft);
border-radius: 14px;
font-weight: 600;
transition: transform var(--ease), background-color var(--ease), color var(--ease), box-shadow var(--ease);
}
.nav-link:hover,
.nav-link.active {
background: linear-gradient(135deg, rgba(19, 115, 230, 0.12), rgba(22, 163, 74, 0.10));
color: var(--accent-strong);
box-shadow: inset 0 0 0 1px rgba(19, 115, 230, 0.08);
}
.nav-link:hover {
transform: translateX(4px);
}
.sidebar-section,
.sidebar-footer {
border-top: 1px solid rgba(189, 211, 226, 0.7);
padding-top: var(--space-4);
}
.status-dot {
width: 8px;
height: 8px;
border-radius: 999px;
display: inline-block;
background: linear-gradient(135deg, var(--accent) 0%, var(--mint) 100%);
box-shadow: 0 0 0 5px rgba(22, 163, 74, 0.08);
margin-right: 0.5rem;
}
.roadmap-item {
color: var(--text-soft);
font-size: 0.95rem;
margin-bottom: 0.72rem;
}
.tenant-chip {
display: inline-flex;
align-items: center;
gap: 0.35rem;
border: 1px solid rgba(19, 115, 230, 0.12);
background: var(--accent-soft);
color: var(--accent-strong);
border-radius: 999px;
padding: 0.42rem 0.82rem;
font-size: 0.8rem;
font-weight: 700;
margin-bottom: 0.8rem;
}
.content-area {
flex: 1;
min-width: 0;
}
.topbar {
padding: var(--space-5) var(--space-5) 0;
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: var(--space-4);
position: sticky;
top: 0;
z-index: 5;
backdrop-filter: blur(14px);
background: linear-gradient(180deg, rgba(245, 251, 255, 0.92) 0%, rgba(245, 251, 255, 0.76) 72%, rgba(245, 251, 255, 0) 100%);
}
.topbar-actions {
display: flex;
gap: 0.75rem;
align-items: flex-end;
}
.tenant-switcher {
min-width: 180px;
}
.page-title,
.section-title,
.panel-title {
margin: 0;
letter-spacing: -0.03em;
}
.page-title {
font-size: clamp(1.75rem, 1.2rem + 1vw, 2.2rem);
font-weight: 800;
}
.section-title {
font-size: clamp(1.45rem, 1.12rem + 1vw, 2.1rem);
max-width: 56rem;
font-weight: 800;
line-height: 1.25;
}
.panel-title {
font-size: 1.18rem;
font-weight: 700;
}
.page-content {
padding: var(--space-5);
}
.hero-panel,
.metric-card,
.panel-card {
background: var(--surface);
border: 1px solid rgba(189, 211, 226, 0.8);
border-radius: var(--radius-md);
box-shadow: var(--shadow);
transition: transform var(--ease), box-shadow var(--ease), border-color var(--ease), background-color var(--ease);
}
.hero-panel:hover,
.metric-card:hover,
.panel-card:hover {
transform: translateY(-3px);
box-shadow: var(--shadow-hover);
border-color: rgba(19, 115, 230, 0.18);
}
.hero-panel {
position: relative;
overflow: hidden;
padding: var(--space-5);
margin-bottom: var(--space-4);
display: flex;
justify-content: space-between;
gap: var(--space-5);
align-items: flex-end;
background:
radial-gradient(circle at top right, rgba(22, 163, 74, 0.14), transparent 30%),
linear-gradient(135deg, rgba(19, 115, 230, 0.05), rgba(22, 163, 74, 0.05)),
#ffffff;
}
.hero-panel::after {
content: "";
position: absolute;
width: 220px;
height: 220px;
border-radius: 50%;
top: -110px;
right: -90px;
background: linear-gradient(135deg, rgba(19, 115, 230, 0.14), rgba(22, 163, 74, 0.10));
filter: blur(8px);
}
.hero-panel > * {
position: relative;
z-index: 1;
}
.section-copy {
max-width: 52rem;
color: var(--text-soft);
margin: 0;
line-height: 1.9;
font-size: 1rem;
}
.hero-actions {
display: flex;
gap: 0.75rem;
flex-wrap: wrap;
}
.metric-card {
position: relative;
overflow: hidden;
padding: var(--space-4);
height: 100%;
}
.metric-card::before {
content: "";
position: absolute;
inset: 0 0 auto 0;
height: 4px;
background: linear-gradient(90deg, var(--accent) 0%, var(--mint) 100%);
}
.metric-label,
.metric-footnote,
.form-hint,
.text-secondary {
color: var(--text-soft) !important;
}
.metric-label {
font-size: 0.82rem;
text-transform: uppercase;
letter-spacing: 0.08em;
font-weight: 700;
}
.metric-value {
font-size: 2rem;
font-weight: 800;
margin: 0.45rem 0 0.3rem;
color: var(--accent-strong);
}
.metric-footnote {
margin: 0;
font-size: 0.9rem;
}
.panel-card {
padding: var(--space-5);
}
.panel-head {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--space-4);
margin-bottom: var(--space-4);
}
.empty-state {
border: 1px dashed var(--border-strong);
border-radius: var(--radius-md);
padding: var(--space-5);
text-align: center;
background: linear-gradient(135deg, rgba(19, 115, 230, 0.04), rgba(22, 163, 74, 0.04));
}
.empty-state.compact {
padding: var(--space-4);
}
.empty-state.left {
text-align: left;
}
.empty-state h4 {
font-size: 1rem;
margin-bottom: 0.4rem;
font-weight: 700;
}
.empty-state p {
color: var(--text-soft);
margin-bottom: 0;
}
.hr-table {
--bs-table-bg: transparent;
--bs-table-striped-bg: rgba(19, 115, 230, 0.02);
}
.hr-table th {
color: var(--text-soft);
font-size: 0.78rem;
text-transform: uppercase;
letter-spacing: 0.07em;
border-bottom-color: rgba(189, 211, 226, 0.9);
font-weight: 700;
}
.hr-table td {
padding-top: 1rem;
padding-bottom: 1rem;
border-bottom-color: rgba(189, 211, 226, 0.7);
transition: background-color var(--ease);
}
.hr-table tbody tr:hover td {
background: rgba(19, 115, 230, 0.03);
}
.queue-list,
.trend-list,
.feature-list,
.roadmap-grid {
display: grid;
gap: 0.9rem;
}
.queue-item {
border: 1px solid rgba(189, 211, 226, 0.8);
border-radius: 14px;
padding: 0.95rem 1rem;
display: flex;
justify-content: space-between;
gap: 0.75rem;
text-decoration: none;
background: linear-gradient(135deg, rgba(19, 115, 230, 0.03), rgba(22, 163, 74, 0.03));
transition: transform var(--ease), border-color var(--ease), box-shadow var(--ease), background-color var(--ease);
}
.queue-item:hover {
border-color: rgba(19, 115, 230, 0.25);
background: #fff;
box-shadow: var(--shadow-soft);
transform: translateX(4px);
}
.queue-date {
color: var(--text-soft);
white-space: nowrap;
font-size: 0.85rem;
font-weight: 600;
}
.trend-row {
display: grid;
grid-template-columns: 80px 1fr 24px;
align-items: center;
gap: 0.85rem;
font-size: 0.92rem;
}
.trend-bar-wrap {
width: 100%;
height: 10px;
background: rgba(19, 115, 230, 0.1);
border-radius: 999px;
overflow: hidden;
}
.trend-bar {
height: 100%;
border-radius: 999px;
background: linear-gradient(90deg, var(--accent) 0%, var(--mint) 100%);
box-shadow: 0 8px 18px rgba(19, 115, 230, 0.22);
animation: barGrow 900ms cubic-bezier(0.22, 1, 0.36, 1);
transform-origin: left center;
}
.feature-list {
margin: 0;
padding-left: 1.15rem;
color: var(--text-soft);
}
.feature-list li::marker {
color: var(--mint);
}
.roadmap-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.roadmap-card {
border: 1px solid rgba(189, 211, 226, 0.8);
border-radius: 14px;
padding: 1rem;
background: linear-gradient(135deg, rgba(19, 115, 230, 0.035), rgba(22, 163, 74, 0.035));
transition: transform var(--ease), box-shadow var(--ease), border-color var(--ease);
}
.roadmap-card:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-soft);
border-color: rgba(19, 115, 230, 0.18);
}
.roadmap-card strong,
.roadmap-card span {
display: block;
}
.roadmap-card strong {
font-weight: 700;
}
.roadmap-card span {
color: var(--text-soft);
margin-top: 0.3rem;
font-size: 0.92rem;
}
.detail-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.95rem;
}
.detail-card,
.info-block {
border: 1px solid rgba(189, 211, 226, 0.8);
border-radius: 14px;
background: linear-gradient(135deg, rgba(19, 115, 230, 0.03), rgba(22, 163, 74, 0.03));
}
.detail-card {
padding: 1rem;
}
.detail-card span,
.detail-card small {
display: block;
color: var(--text-soft);
}
.detail-card strong {
display: block;
font-size: 1rem;
margin: 0.3rem 0;
font-weight: 700;
}
.info-block {
padding: 1rem 1.1rem;
}
.info-block.danger {
border-color: rgba(194, 65, 59, 0.24);
background: linear-gradient(135deg, rgba(255, 244, 244, 0.95), rgba(255, 250, 250, 1));
}
.btn,
.form-control,
.form-select,
.alert,
.badge {
border-radius: 12px;
}
.btn {
font-weight: 700;
padding: 0.78rem 1.15rem;
transition: transform var(--ease), box-shadow var(--ease), border-color var(--ease), background-color var(--ease), color var(--ease);
}
.btn:hover {
transform: translateY(-2px);
}
.btn-dark {
background: linear-gradient(135deg, var(--accent) 0%, var(--mint) 100%);
border: none;
box-shadow: 0 16px 32px rgba(19, 115, 230, 0.18);
}
.btn-dark:hover,
.btn-dark:focus {
background: linear-gradient(135deg, var(--accent-strong) 0%, #15803d 100%);
box-shadow: 0 20px 36px rgba(19, 115, 230, 0.24);
}
.btn-outline-secondary,
.btn-outline-dark {
border-color: rgba(19, 115, 230, 0.22);
color: var(--accent-strong);
background: rgba(255, 255, 255, 0.88);
}
.btn-outline-secondary:hover,
.btn-outline-secondary:focus,
.btn-outline-dark:hover,
.btn-outline-dark:focus {
border-color: rgba(19, 115, 230, 0.34);
color: var(--accent-strong);
background: var(--accent-soft);
box-shadow: var(--shadow-soft);
}
.btn-outline-danger {
border-color: rgba(194, 65, 59, 0.28);
color: var(--danger);
}
.btn-outline-danger:hover,
.btn-outline-danger:focus {
background: #fff4f3;
color: #9f2d28;
}
.form-label {
font-weight: 700;
color: var(--text);
margin-bottom: 0.45rem;
}
.form-control,
.form-select {
border-color: rgba(189, 211, 226, 0.95);
padding: 0.82rem 0.95rem;
box-shadow: none;
background-color: rgba(255, 255, 255, 0.92);
transition: border-color var(--ease), box-shadow var(--ease), background-color var(--ease), transform var(--ease);
}
.form-control:hover,
.form-select:hover {
border-color: rgba(19, 115, 230, 0.26);
}
.form-control:focus,
.form-select:focus,
.btn:focus,
.nav-link:focus {
box-shadow: 0 0 0 0.24rem rgba(19, 115, 230, 0.14);
border-color: rgba(19, 115, 230, 0.5);
}
.form-control.is-invalid,
.form-select.is-invalid {
border-color: rgba(194, 65, 59, 0.46);
background-image: none;
}
.form-hint {
font-size: 0.84rem;
}
.request-preview {
min-width: 180px;
}
.toast-stack {
padding: 0 var(--space-5);
margin-top: var(--space-4);
}
.alert {
border-width: 1px;
box-shadow: var(--shadow-soft);
}
.alert-success {
border-color: rgba(22, 163, 74, 0.18);
background: #effcf5;
color: #166534;
}
.alert-warning {
border-color: rgba(183, 121, 31, 0.2);
background: #fff8e7;
color: #8a5c15;
}
.alert-danger {
border-color: rgba(194, 65, 59, 0.2);
background: #fff5f4;
color: #9f2d28;
}
.badge {
padding: 0.6rem 0.72rem;
font-weight: 700;
letter-spacing: 0.01em;
}
.badge.text-bg-success {
background: var(--mint-soft) !important;
color: #177245 !important;
}
.badge.text-bg-danger {
background: #fff1f0 !important;
color: #b42318 !important;
}
.badge.text-bg-warning {
background: var(--accent-soft) !important;
color: var(--accent-strong) !important;
}
.js-reveal {
opacity: 0;
transform: translateY(18px) scale(0.985);
transition: opacity 560ms cubic-bezier(0.22, 1, 0.36, 1), transform 560ms cubic-bezier(0.22, 1, 0.36, 1);
transition-delay: var(--reveal-delay, 0ms);
}
.js-reveal.is-visible {
opacity: 1;
transform: translateY(0) scale(1);
}
@keyframes barGrow {
from {
transform: scaleX(0.3);
opacity: 0.65;
}
to {
transform: scaleX(1);
opacity: 1;
}
}
@media (max-width: 991.98px) {
.topbar,
.page-content,
.toast-stack {
padding-left: 1rem;
padding-right: 1rem;
}
.topbar {
position: static;
background: transparent;
backdrop-filter: none;
}
.hero-panel,
.topbar,
.panel-head {
flex-direction: column;
align-items: stretch;
}
.topbar-actions,
.hero-actions {
width: 100%;
}
.topbar-actions > * {
flex: 1;
}
.tenant-switcher {
min-width: 0;
}
}
@media (max-width: 767.98px) {
.page-content {
padding-top: 1rem;
padding-bottom: 1.5rem;
}
.panel-card,
.hero-panel {
padding: 1rem;
}
.detail-grid,
.roadmap-grid {
grid-template-columns: 1fr;
}
.trend-row {
grid-template-columns: 72px 1fr 18px;
gap: 0.55rem;
font-size: 0.86rem;
}
.btn {
width: 100%;
}
}
@media (prefers-reduced-motion: reduce) {
html,
body {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation: none !important;
transition: none !important;
}
.js-reveal {
opacity: 1;
transform: none;
}
}