Spaces:
Sleeping
Sleeping
| @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap'); | |
| @tailwind base; | |
| @tailwind components; | |
| @tailwind utilities; | |
| @layer base { | |
| /* Dark mode only - no light theme */ | |
| :root { | |
| --background: 222 47% 6%; | |
| --foreground: 210 40% 98%; | |
| --card: 222 47% 9%; | |
| --card-foreground: 210 40% 98%; | |
| --popover: 222 47% 9%; | |
| --popover-foreground: 210 40% 98%; | |
| --primary: 221 83% 53%; | |
| --primary-foreground: 210 40% 98%; | |
| --secondary: 217 33% 17%; | |
| --secondary-foreground: 210 40% 98%; | |
| --muted: 217 33% 17%; | |
| --muted-foreground: 215 20% 65%; | |
| --accent: 221 83% 53%; | |
| --accent-foreground: 210 40% 98%; | |
| --destructive: 0 63% 31%; | |
| --destructive-foreground: 210 40% 98%; | |
| --success: 142 76% 36%; | |
| --success-foreground: 210 40% 98%; | |
| --warning: 38 92% 50%; | |
| --warning-foreground: 222 47% 11%; | |
| --border: 217 33% 17%; | |
| --input: 217 33% 17%; | |
| --ring: 221 83% 53%; | |
| --radius: 0.5rem; | |
| /* SWOT quadrant colors */ | |
| --strength: 142 76% 36%; | |
| --weakness: 0 84% 60%; | |
| --opportunity: 221 83% 53%; | |
| --threat: 38 92% 50%; | |
| --sidebar-background: 240 5.9% 10%; | |
| --sidebar-foreground: 240 4.8% 95.9%; | |
| --sidebar-primary: 224.3 76.3% 48%; | |
| --sidebar-primary-foreground: 0 0% 100%; | |
| --sidebar-accent: 240 3.7% 15.9%; | |
| --sidebar-accent-foreground: 240 4.8% 95.9%; | |
| --sidebar-border: 240 3.7% 15.9%; | |
| --sidebar-ring: 217.2 91.2% 59.8%; | |
| /* ProcessFlow SVG Colors - Dark theme with black containers */ | |
| /* Container styling: black bg, light gray border, gray icons/text */ | |
| --pf-idle-fill: #000000; | |
| --pf-idle-stroke: #6B7280; | |
| --pf-executing-fill: #000000; | |
| --pf-executing-stroke: #F59E0B; | |
| --pf-completed-fill: #000000; | |
| --pf-completed-stroke: #10B981; | |
| --pf-failed-fill: #000000; | |
| --pf-failed-stroke: #EF4444; | |
| --pf-partial-fill: #000000; | |
| --pf-partial-stroke: #F59E0B; | |
| /* Cache states */ | |
| --pf-cache-hit-fill: #000000; | |
| --pf-cache-hit-stroke: #10B981; | |
| --pf-cache-miss-fill: #000000; | |
| --pf-cache-miss-stroke: #EF4444; | |
| /* LLM providers */ | |
| --pf-llm-idle-fill: #000000; | |
| --pf-llm-idle-stroke: #6B7280; | |
| --pf-llm-active-fill: #000000; | |
| --pf-llm-active-stroke: #3B82F6; | |
| --pf-llm-completed-fill: #000000; | |
| --pf-llm-completed-stroke: #2563EB; | |
| --pf-llm-failed-fill: #000000; | |
| --pf-llm-failed-stroke: #EF4444; | |
| /* Connector colors */ | |
| --pf-connector-idle: #4B5563; | |
| --pf-connector-executing: #F59E0B; | |
| --pf-connector-completed: #10B981; | |
| --pf-connector-failed: #EF4444; | |
| /* Group box - unchanged */ | |
| --pf-group-fill: rgba(31, 41, 55, 0.3); | |
| --pf-group-stroke: #4B5563; | |
| /* Text and icon colors - gray */ | |
| --pf-icon-color: #9CA3AF; | |
| --pf-text-label: #9CA3AF; | |
| --pf-text-idle: #9CA3AF; | |
| --pf-text-active: #9CA3AF; | |
| --pf-text-mcp: #9CA3AF; | |
| --pf-llm-text-idle: #9CA3AF; | |
| --pf-llm-text-active: #9CA3AF; | |
| --pf-llm-text-completed: #9CA3AF; | |
| --pf-llm-text-failed: #F87171; | |
| --pf-group-label: #9CA3AF; | |
| } | |
| } | |
| @layer base { | |
| * { | |
| @apply border-border; | |
| } | |
| body { | |
| @apply bg-background text-foreground font-sans antialiased; | |
| font-family: 'Inter', system-ui, sans-serif; | |
| } | |
| code, pre { | |
| font-family: 'JetBrains Mono', monospace; | |
| } | |
| } | |
| @layer utilities { | |
| /* Fade animations */ | |
| .animate-fade-in { | |
| animation: fadeIn 0.5s ease-out forwards; | |
| } | |
| .animate-slide-up { | |
| animation: slideUp 0.4s ease-out forwards; | |
| } | |
| .animate-slide-in-left { | |
| animation: slideInLeft 0.4s ease-out forwards; | |
| } | |
| .animate-slide-in-right { | |
| animation: slideInRight 0.4s ease-out forwards; | |
| } | |
| .animate-scale-in { | |
| animation: scaleIn 0.3s ease-out forwards; | |
| } | |
| .animate-pulse-soft { | |
| animation: pulseSoft 2s ease-in-out infinite; | |
| } | |
| /* Button state colors */ | |
| .btn-amber { | |
| @apply bg-amber-500 hover:bg-amber-600 text-white; | |
| } | |
| .btn-amber-outline { | |
| @apply border border-amber-500 text-amber-500 hover:bg-amber-500/10 bg-transparent; | |
| } | |
| .btn-amber-pulse { | |
| animation: buttonPulse 1.5s ease-in-out infinite; | |
| } | |
| .btn-green { | |
| @apply bg-green-600 hover:bg-green-700 text-white; | |
| } | |
| @keyframes buttonPulse { | |
| 0%, 100% { box-shadow: 0 0 0 0 rgba(245, 158, 11, 0.7); } | |
| 50% { box-shadow: 0 0 15px 5px rgba(245, 158, 11, 0.4); } | |
| } | |
| /* Staggered animations for cards */ | |
| .stagger-1 { animation-delay: 0.1s; } | |
| .stagger-2 { animation-delay: 0.2s; } | |
| .stagger-3 { animation-delay: 0.3s; } | |
| .stagger-4 { animation-delay: 0.4s; } | |
| /* Card hover effects */ | |
| .card-hover { | |
| @apply transition-all duration-300 ease-out; | |
| } | |
| .card-hover:hover { | |
| @apply shadow-lg -translate-y-1; | |
| } | |
| /* Button hover glow */ | |
| .btn-glow { | |
| @apply transition-all duration-300; | |
| } | |
| .btn-glow:hover:not(:disabled) { | |
| box-shadow: 0 0 20px hsl(var(--primary) / 0.4); | |
| } | |
| /* Progress bar animation */ | |
| .progress-animated .progress-bar { | |
| transition: width 0.5s ease-out; | |
| } | |
| /* SWOT card borders with gradient */ | |
| .swot-strength { | |
| @apply border-l-4; | |
| border-left-color: hsl(var(--strength)); | |
| } | |
| .swot-weakness { | |
| @apply border-l-4; | |
| border-left-color: hsl(var(--weakness)); | |
| } | |
| .swot-opportunity { | |
| @apply border-l-4; | |
| border-left-color: hsl(var(--opportunity)); | |
| } | |
| .swot-threat { | |
| @apply border-l-4; | |
| border-left-color: hsl(var(--threat)); | |
| } | |
| /* Glassmorphism effect */ | |
| .glass { | |
| @apply bg-white/80 dark:bg-gray-900/80 backdrop-blur-lg; | |
| } | |
| /* Text gradient */ | |
| .text-gradient { | |
| @apply bg-clip-text text-transparent bg-gradient-to-r from-primary to-accent; | |
| } | |
| @keyframes fadeIn { | |
| from { opacity: 0; } | |
| to { opacity: 1; } | |
| } | |
| @keyframes slideUp { | |
| from { | |
| opacity: 0; | |
| transform: translateY(10px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes slideInLeft { | |
| from { | |
| opacity: 0; | |
| transform: translateX(-20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| @keyframes slideInRight { | |
| from { | |
| opacity: 0; | |
| transform: translateX(20px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| @keyframes scaleIn { | |
| from { | |
| opacity: 0; | |
| transform: scale(0.95); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| } | |
| @keyframes pulseSoft { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.7; } | |
| } | |
| } | |
| /* === ProcessFlow SVG Styles === */ | |
| /* Node base styles */ | |
| .pf-node { | |
| transition: fill 0.3s ease, stroke 0.3s ease, opacity 0.3s ease; | |
| } | |
| .pf-node:hover { | |
| filter: brightness(1.15); | |
| cursor: pointer; | |
| } | |
| /* Node states */ | |
| .pf-node-idle { | |
| fill: var(--pf-idle-fill); | |
| stroke: var(--pf-idle-stroke); | |
| } | |
| .pf-node-executing { | |
| fill: var(--pf-executing-fill); | |
| stroke: var(--pf-executing-stroke); | |
| } | |
| .pf-node-completed { | |
| fill: var(--pf-completed-fill); | |
| stroke: var(--pf-completed-stroke); | |
| } | |
| .pf-node-failed { | |
| fill: var(--pf-failed-fill); | |
| stroke: var(--pf-failed-stroke); | |
| } | |
| .pf-node-partial { | |
| fill: var(--pf-partial-fill); | |
| stroke: var(--pf-partial-stroke); | |
| } | |
| .pf-node-skipped { | |
| fill: var(--pf-idle-fill); | |
| stroke: var(--pf-idle-stroke); | |
| stroke-dasharray: 3 2; | |
| stroke-width: 1.5; | |
| opacity: 0.6; | |
| } | |
| /* Agents - thin border same as MCP servers */ | |
| .pf-agent { | |
| stroke-width: 1; | |
| } | |
| /* No border for non-agent nodes */ | |
| .pf-no-border { | |
| stroke: none ; | |
| stroke-width: 0 ; | |
| } | |
| /* Agent executing state with drop-shadow for sophistication */ | |
| .pf-agent.pf-node-executing { | |
| filter: drop-shadow(0 0 6px rgba(99, 102, 241, 0.7)); | |
| } | |
| /* Cache states */ | |
| .pf-cache-idle { | |
| fill: var(--pf-idle-fill); | |
| stroke: var(--pf-idle-stroke); | |
| } | |
| .pf-cache-checking { | |
| fill: var(--pf-executing-fill); | |
| stroke: var(--pf-executing-stroke); | |
| } | |
| .pf-cache-hit { | |
| fill: var(--pf-cache-hit-fill); | |
| stroke: var(--pf-cache-hit-stroke); | |
| } | |
| .pf-cache-miss { | |
| fill: var(--pf-cache-miss-fill); | |
| stroke: var(--pf-cache-miss-stroke); | |
| } | |
| /* Connector styles */ | |
| .pf-connector { | |
| transition: stroke 0.3s ease; | |
| } | |
| .pf-connector-idle { | |
| stroke: var(--pf-connector-idle); | |
| } | |
| .pf-connector-executing { | |
| stroke: var(--pf-connector-executing); | |
| animation: pfPulse 1.5s ease-in-out infinite; | |
| } | |
| .pf-connector-completed { | |
| stroke: var(--pf-connector-completed); | |
| } | |
| .pf-connector-failed { | |
| stroke: var(--pf-connector-failed); | |
| } | |
| /* Orchestration connector - coordinated reasoning signal */ | |
| .pf-orchestration { | |
| stroke-dasharray: 6 3; | |
| stroke-width: 2; | |
| } | |
| /* Success halo - completion confidence signal */ | |
| .pf-success-halo { | |
| stroke: rgba(34, 197, 94, 0.6); | |
| stroke-width: 2; | |
| fill: none; | |
| animation: successGlow 2s ease-in-out infinite; | |
| } | |
| @keyframes successGlow { | |
| 0%, 100% { stroke-opacity: 0.6; } | |
| 50% { stroke-opacity: 1; } | |
| } | |
| /* MCP aggregate - capability layer styling */ | |
| .pf-mcp-aggregate { | |
| stroke-width: 1.5; | |
| stroke-dasharray: 2 2; | |
| } | |
| /* MCP individual nodes - lighter treatment as data feeders */ | |
| .pf-node-mcp { | |
| stroke-width: 1.2; | |
| opacity: 0.75; | |
| } | |
| /* Group labels */ | |
| .pf-group-label { | |
| fill: var(--pf-group-label); | |
| } | |
| /* Icon styling - gray */ | |
| .pf-icon { | |
| color: var(--pf-icon-color); | |
| } | |
| /* Text label styling - gray */ | |
| .pf-text-label { | |
| fill: var(--pf-text-label); | |
| } | |
| /* Agent text styling - white, larger */ | |
| .pf-text-agent { | |
| fill: #FFFFFF; | |
| } | |
| /* LLM Provider styles */ | |
| .pf-llm { | |
| transition: fill 0.3s ease, stroke 0.3s ease, opacity 0.3s ease; | |
| } | |
| .pf-llm:hover { | |
| filter: brightness(1.1); | |
| } | |
| .pf-llm-idle { | |
| fill: var(--pf-llm-idle-fill); | |
| stroke: var(--pf-idle-stroke); | |
| } | |
| .pf-llm-executing { | |
| fill: var(--pf-llm-active-fill); | |
| stroke: var(--pf-executing-stroke); | |
| } | |
| .pf-llm-completed { | |
| fill: var(--pf-llm-completed-fill); | |
| stroke: var(--pf-completed-stroke); | |
| } | |
| .pf-llm-failed { | |
| fill: var(--pf-llm-failed-fill); | |
| stroke: var(--pf-llm-failed-stroke); | |
| } | |
| /* Group box styles */ | |
| .pf-group { | |
| fill: var(--pf-group-fill); | |
| stroke: var(--pf-group-stroke); | |
| transition: fill 0.3s ease; | |
| } | |
| /* Text styles */ | |
| .pf-text-idle { | |
| fill: var(--pf-text-idle); | |
| } | |
| .pf-text-active { | |
| fill: var(--pf-text-active); | |
| } | |
| .pf-text-mcp { | |
| fill: var(--pf-text-mcp); | |
| } | |
| .pf-llm-text-idle { | |
| fill: var(--pf-llm-text-idle); | |
| } | |
| .pf-llm-text-executing { | |
| fill: var(--pf-llm-text-active); | |
| } | |
| .pf-llm-text-completed { | |
| fill: var(--pf-llm-text-completed); | |
| } | |
| .pf-llm-text-failed { | |
| fill: var(--pf-llm-text-failed); | |
| } | |
| /* F.10 - Only pulse animation for executing nodes, no glow */ | |
| .pf-pulse { | |
| animation: pfPulse 1.5s ease-in-out infinite; | |
| } | |
| @keyframes pfPulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.6; } | |
| } | |
| /* Animation discipline: completed states = static confidence */ | |
| .pf-node-completed { | |
| animation: none ; | |
| } | |
| .pf-llm-completed { | |
| animation: none ; | |
| } | |
| /* Smooth scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 8px; | |
| height: 8px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| @apply bg-muted rounded-full; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| @apply bg-muted-foreground/30 rounded-full; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| @apply bg-muted-foreground/50; | |
| } | |
| /* Mobile touch-friendly styles */ | |
| @media (max-width: 640px) { | |
| /* Larger touch targets on mobile */ | |
| button, | |
| [role="button"], | |
| input, | |
| select, | |
| textarea { | |
| min-height: 44px; | |
| } | |
| /* Prevent text size adjustment on orientation change */ | |
| html { | |
| -webkit-text-size-adjust: 100%; | |
| } | |
| /* Better tap highlight */ | |
| * { | |
| -webkit-tap-highlight-color: transparent; | |
| } | |
| /* Improve scrolling performance */ | |
| .overflow-y-auto, | |
| .overflow-x-auto { | |
| -webkit-overflow-scrolling: touch; | |
| } | |
| } | |
| /* Safe area insets for notched devices */ | |
| @supports (padding: max(0px)) { | |
| .container { | |
| padding-left: max(1rem, env(safe-area-inset-left)); | |
| padding-right: max(1rem, env(safe-area-inset-right)); | |
| } | |
| footer { | |
| padding-bottom: max(0.75rem, env(safe-area-inset-bottom)); | |
| } | |
| } | |
| /* Improve focus states for accessibility */ | |
| @layer utilities { | |
| .focus-ring { | |
| @apply focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 focus:ring-offset-background; | |
| } | |
| } | |
| /* Print styles for PDF export */ | |
| @media print { | |
| /* Reset colors for print */ | |
| :root { | |
| --background: 0 0% 100%; | |
| --foreground: 0 0% 0%; | |
| --card: 0 0% 100%; | |
| --card-foreground: 0 0% 0%; | |
| --muted-foreground: 0 0% 30%; | |
| } | |
| /* Hide non-essential elements */ | |
| header, | |
| footer, | |
| aside, | |
| .print\:hidden, | |
| button:not(.print\:block), | |
| [role="tablist"] { | |
| display: none ; | |
| } | |
| /* Full width main content */ | |
| main { | |
| width: 100% ; | |
| max-width: 100% ; | |
| padding: 0 ; | |
| margin: 0 ; | |
| } | |
| .container { | |
| max-width: 100% ; | |
| padding: 0 ; | |
| } | |
| /* Show all tab content for print */ | |
| [role="tabpanel"] { | |
| display: block ; | |
| opacity: 1 ; | |
| } | |
| /* Compact card styles for single page fit */ | |
| .card { | |
| border: 1px solid #ddd ; | |
| box-shadow: none ; | |
| break-inside: avoid; | |
| page-break-inside: avoid; | |
| margin-bottom: 0.5rem ; | |
| } | |
| .card-header { | |
| padding: 0.5rem 0.75rem ; | |
| } | |
| .card-content { | |
| padding: 0.5rem 0.75rem ; | |
| } | |
| /* Ensure text is black - compact sizing */ | |
| body { | |
| color: black ; | |
| background: white ; | |
| font-size: 10pt; | |
| line-height: 1.3; | |
| } | |
| /* Page size: 8.27" x 11" (most restrictive common between A4 width and Letter height) */ | |
| @page { | |
| margin: 0.5in; | |
| size: 8.27in 11in; | |
| } | |
| /* Compact SWOT grid */ | |
| .grid.md\:grid-cols-2 { | |
| gap: 0.5rem ; | |
| } | |
| /* Compact list items */ | |
| ul.space-y-2 { | |
| gap: 0.25rem ; | |
| } | |
| ul.space-y-2 li { | |
| margin-bottom: 0.125rem ; | |
| } | |
| /* Source data panel compact */ | |
| .divide-y > div { | |
| padding-top: 0.25rem ; | |
| padding-bottom: 0.25rem ; | |
| } | |
| /* Prevent orphans and widows */ | |
| p, li { | |
| orphans: 3; | |
| widows: 3; | |
| } | |
| /* Hide process flow and metrics panel */ | |
| .h-\[260px\] { | |
| display: none ; | |
| } | |
| /* Compact headings */ | |
| h2 { | |
| font-size: 14pt ; | |
| margin-bottom: 0.5rem ; | |
| } | |
| h3 { | |
| font-size: 11pt ; | |
| } | |
| /* Quality evaluation compact */ | |
| .space-y-6 { | |
| gap: 0.75rem ; | |
| } | |
| } |