@import "frappe-ui/src/style.css"; :root { --bg-base: #f1f5f9; --bg-page: #f8fafc; --bg-card: #fff; --border: #e2e8f0; --border-light: #f1f5f9; --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.06); --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.08); --shadow-press: inset 0 1px 3px rgba(0, 0, 0, 0.08); --ins-indigo: #4f46e5; --ins-indigo-light: #e0e7ff; --ins-indigo-dim: rgba(79, 70, 229, 0.08); --ins-indigo-border: rgba(79, 70, 229, 0.25); --ins-positive: #059669; --ins-positive-bg: #ecfdf5; --ins-negative: #dc2626; --ins-negative-bg: #fef2f2; --ins-warning: #d97706; --ins-warning-bg: #fffbeb; --ins-info: #2563eb; --ins-info-bg: #eff6ff; --ins-text-primary: #0f172a; --ins-text-secondary: #475569; --ins-text-tertiary: #94a3b8; --ins-radius: 12px; --ins-radius-sm: 8px; --ins-radius-xs: 6px; --ins-header-h: 56px; --ins-sidebar-w: 56px; } body { font-family: "Manrope", -apple-system, sans-serif; background: var(--bg-page); color: var(--ins-text-primary); -webkit-font-smoothing: antialiased; } /* Glassmorphism utility */ .glass { backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); background: rgba(255, 255, 255, 0.65); border: 1px solid rgba(255, 255, 255, 0.5); box-shadow: 0 4px 24px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.6); } /* Animations */ @keyframes pulseDanger { 0%, 100% { box-shadow: var(--shadow-sm), 0 0 0 0 rgba(220, 38, 38, 0.15); } 50% { box-shadow: var(--shadow-sm), 0 0 0 6px rgba(220, 38, 38, 0.06); } } @keyframes pulseWarning { 0%, 100% { box-shadow: var(--shadow-sm), 0 0 0 0 rgba(217, 119, 6, 0.15); } 50% { box-shadow: var(--shadow-sm), 0 0 0 6px rgba(217, 119, 6, 0.06); } } @keyframes donutPulse { 0%, 100% { filter: drop-shadow(0 0 8px rgba(79, 70, 229, 0.15)); } 50% { filter: drop-shadow(0 0 20px rgba(79, 70, 229, 0.35)); } } @keyframes donutBreathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.02); } } @keyframes ringSpin { from { transform: rotate(-90deg); } to { transform: rotate(270deg); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes dotPulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.5); opacity: 0.5; } } @keyframes fadeSlideIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } @keyframes timelinePulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(220, 38, 38, 0.3); } 50% { box-shadow: 0 0 0 5px rgba(220, 38, 38, 0.08); } } .animate-pulse-danger { animation: pulseDanger 3s ease-in-out infinite; } .animate-pulse-warning { animation: pulseWarning 3.5s ease-in-out infinite; } .animate-shimmer { background: linear-gradient(90deg, var(--bg-base) 25%, #e2e8f0 50%, var(--bg-base) 75%); background-size: 200% 100%; animation: shimmer 1.2s infinite; } .animate-fade-slide-in { animation: fadeSlideIn 0.45s cubic-bezier(0.22, 1, 0.36, 1); } /* Content swap states */ .content-swap { opacity: 1; transform: translateY(0); } .content-swap.fading-out { opacity: 0; transform: scale(0.97) translateY(-6px); pointer-events: none; transition: opacity 0.35s ease, transform 0.35s cubic-bezier(0.22, 1, 0.36, 1); } .content-swap.gone { display: none; } .content-swap.fading-in { opacity: 0; transform: translateY(16px); } .content-swap.revealing { opacity: 1; transform: translateY(0); transition: opacity 0.6s cubic-bezier(0.22, 1, 0.36, 1), transform 0.6s cubic-bezier(0.22, 1, 0.36, 1); } /* Staggered row reveal */ .row-stagger { opacity: 0; transform: translateY(10px); animation: fadeSlideIn 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards; } /* Inspect button */ .inspect-btn { width: 60px; height: 60px; border-radius: 50%; border: none; background: #059669; color: #fff; cursor: pointer; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; flex-shrink: 0; box-shadow: 0 4px 16px rgba(5, 150, 105, 0.3); transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.3s ease, background 0.2s ease; } .inspect-btn:hover { transform: scale(1.08); background: #047857; box-shadow: 0 6px 24px rgba(5, 150, 105, 0.4); } .inspect-btn:active { transform: scale(0.92); transition: transform 60ms ease; } .inspect-btn.loading { background: #047857; } .inspect-btn svg { display: block; flex-shrink: 0; } .inspect-btn span { font-family: 'Manrope', sans-serif; font-size: 8px; font-weight: 800; letter-spacing: 0.5px; text-transform: uppercase; line-height: 1; color: #fff; flex-shrink: 0; } /* Scrollbar */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; } /* Mono text for data values */ .font-data { font-family: "Source Code Pro", monospace; }