Spaces:
Running
Running
| @import "tailwindcss"; | |
| @import "tw-animate-css"; | |
| @import "./styles/theme.css"; | |
| @import "highlight.js/styles/github.css"; | |
| /* Tailwind base layer for compatibility */ | |
| @layer base { | |
| *, | |
| ::after, | |
| ::before, | |
| ::backdrop, | |
| ::file-selector-button { | |
| border-color: var(--color-gray-200, currentColor); | |
| } | |
| } | |
| /* Custom variant for dark mode */ | |
| @custom-variant dark (&:is(.dark *)); | |
| /* CSS Variables for theming */ | |
| :root { | |
| --radius: 0.625rem; | |
| --background: oklch(1 0 0); | |
| --foreground: oklch(0.145 0 0); | |
| --card: oklch(1 0 0); | |
| --card-foreground: oklch(0.145 0 0); | |
| --popover: oklch(1 0 0); | |
| --popover-foreground: oklch(0.145 0 0); | |
| --primary: oklch(0.205 0 0); | |
| --primary-foreground: oklch(0.985 0 0); | |
| --secondary: oklch(0.97 0 0); | |
| --secondary-foreground: oklch(0.205 0 0); | |
| --muted: oklch(0.97 0 0); | |
| --muted-foreground: oklch(0.556 0 0); | |
| --accent: oklch(0.97 0 0); | |
| --accent-foreground: oklch(0.205 0 0); | |
| --destructive: oklch(0.577 0.245 27.325); | |
| --destructive-foreground: oklch(1 0 0); | |
| --border: oklch(0.922 0 0); | |
| --input: oklch(0.922 0 0); | |
| --ring: oklch(0.708 0 0); | |
| --chart-1: oklch(0.646 0.222 41.116); | |
| --chart-2: oklch(0.6 0.118 184.704); | |
| --chart-3: oklch(0.398 0.07 227.392); | |
| --chart-4: oklch(0.828 0.189 84.429); | |
| --chart-5: oklch(0.769 0.188 70.08); | |
| --sidebar: oklch(0.985 0 0); | |
| --sidebar-foreground: oklch(0.145 0 0); | |
| --sidebar-primary: oklch(0.205 0 0); | |
| --sidebar-primary-foreground: oklch(0.985 0 0); | |
| --sidebar-accent: oklch(0.97 0 0); | |
| --sidebar-accent-foreground: oklch(0.205 0 0); | |
| --sidebar-border: oklch(0.922 0 0); | |
| --sidebar-ring: oklch(0.708 0 0); | |
| } | |
| .dark { | |
| --background: oklch(0.145 0 0); | |
| --foreground: oklch(0.985 0 0); | |
| --card: oklch(0.205 0 0); | |
| --card-foreground: oklch(0.985 0 0); | |
| --popover: oklch(0.205 0 0); | |
| --popover-foreground: oklch(0.985 0 0); | |
| --primary: oklch(0.922 0 0); | |
| --primary-foreground: oklch(0.205 0 0); | |
| --secondary: oklch(0.269 0 0); | |
| --secondary-foreground: oklch(0.985 0 0); | |
| --muted: oklch(0.269 0 0); | |
| --muted-foreground: oklch(0.708 0 0); | |
| --accent: oklch(0.269 0 0); | |
| --accent-foreground: oklch(0.985 0 0); | |
| --destructive: oklch(0.704 0.191 22.216); | |
| --destructive-foreground: oklch(1 0 0); | |
| --border: oklch(1 0 0 / 10%); | |
| --input: oklch(1 0 0 / 15%); | |
| --ring: oklch(0.556 0 0); | |
| --chart-1: oklch(0.488 0.243 264.376); | |
| --chart-2: oklch(0.696 0.17 162.48); | |
| --chart-3: oklch(0.769 0.188 70.08); | |
| --chart-4: oklch(0.627 0.265 303.9); | |
| --chart-5: oklch(0.645 0.246 16.439); | |
| --sidebar: oklch(0.205 0 0); | |
| --sidebar-foreground: oklch(0.985 0 0); | |
| --sidebar-primary: oklch(0.488 0.243 264.376); | |
| --sidebar-primary-foreground: oklch(0.985 0 0); | |
| --sidebar-accent: oklch(0.269 0 0); | |
| --sidebar-accent-foreground: oklch(0.985 0 0); | |
| --sidebar-border: oklch(1 0 0 / 10%); | |
| --sidebar-ring: oklch(0.556 0 0); | |
| } | |
| @theme inline { | |
| /* Custom breakpoints */ | |
| --breakpoint-xs: 480px; | |
| --radius-sm: calc(var(--radius) - 4px); | |
| --radius-md: calc(var(--radius) - 2px); | |
| --radius-lg: var(--radius); | |
| --radius-xl: calc(var(--radius) + 4px); | |
| --color-background: var(--background); | |
| --color-foreground: var(--foreground); | |
| --color-card: var(--card); | |
| --color-card-foreground: var(--card-foreground); | |
| --color-popover: var(--popover); | |
| --color-popover-foreground: var(--popover-foreground); | |
| --color-primary: var(--primary); | |
| --color-primary-foreground: var(--primary-foreground); | |
| --color-secondary: var(--secondary); | |
| --color-secondary-foreground: var(--secondary-foreground); | |
| --color-muted: var(--muted); | |
| --color-muted-foreground: var(--muted-foreground); | |
| --color-accent: var(--accent); | |
| --color-accent-foreground: var(--accent-foreground); | |
| --color-destructive: var(--destructive); | |
| --color-destructive-foreground: var(--destructive-foreground); | |
| --color-border: var(--border); | |
| --color-input: var(--input); | |
| --color-ring: var(--ring); | |
| --color-chart-1: var(--chart-1); | |
| --color-chart-2: var(--chart-2); | |
| --color-chart-3: var(--chart-3); | |
| --color-chart-4: var(--chart-4); | |
| --color-chart-5: var(--chart-5); | |
| --color-sidebar: var(--sidebar); | |
| --color-sidebar-foreground: var(--sidebar-foreground); | |
| --color-sidebar-primary: var(--sidebar-primary); | |
| --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); | |
| --color-sidebar-accent: var(--sidebar-accent); | |
| --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); | |
| --color-sidebar-border: var(--sidebar-border); | |
| --color-sidebar-ring: var(--sidebar-ring); | |
| --animate-accordion-down: accordion-down 0.2s ease-out; | |
| --animate-accordion-up: accordion-up 0.2s ease-out; | |
| @keyframes accordion-down { | |
| from { | |
| height: 0; | |
| } | |
| to { | |
| height: var(--radix-accordion-content-height); | |
| } | |
| } | |
| @keyframes accordion-up { | |
| from { | |
| height: var(--radix-accordion-content-height); | |
| } | |
| to { | |
| height: 0; | |
| } | |
| } | |
| } | |
| @layer base { | |
| * { | |
| @apply border-border outline-ring/50; | |
| } | |
| body { | |
| @apply bg-background text-foreground; | |
| font-family: var(--font-inter, 'Inter'), 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Ubuntu', ui-sans-serif, system-ui, sans-serif; | |
| overflow: hidden; | |
| touch-action: none; | |
| user-select: none; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| } | |
| /* Glassmorphism utilities */ | |
| .glass { | |
| background: rgba(255, 255, 255, 0.75); | |
| backdrop-filter: blur(25px) saturate(180%); | |
| -webkit-backdrop-filter: blur(25px) saturate(180%); | |
| border: 1px solid rgba(255, 255, 255, 0.3); | |
| box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.07); | |
| } | |
| .glass-dark { | |
| background: rgba(20, 20, 20, 0.75); | |
| backdrop-filter: blur(25px) saturate(180%); | |
| -webkit-backdrop-filter: blur(25px) saturate(180%); | |
| border: 1px solid rgba(255, 255, 255, 0.08); | |
| box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.3); | |
| } | |
| .dock-glass { | |
| background: rgba(255, 255, 255, 0.4); | |
| backdrop-filter: blur(20px) saturate(180%); | |
| -webkit-backdrop-filter: blur(20px) saturate(180%); | |
| border: 1px solid rgba(255, 255, 255, 0.2); | |
| box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15); | |
| } | |
| /* App Icon Styles */ | |
| .app-icon { | |
| transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); | |
| } | |
| .app-icon:hover { | |
| transform: scale(1.15) translateY(-8px); | |
| } | |
| .app-icon:active { | |
| transform: scale(0.95); | |
| } | |
| /* Window Animations */ | |
| .window-transition { | |
| transition: opacity 0.2s ease-out; | |
| } | |
| .window-hidden { | |
| opacity: 0; | |
| transform: scale(0.95); | |
| pointer-events: none; | |
| } | |
| /* Traffic Lights */ | |
| .traffic-light { | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 50%; | |
| margin-right: 8px; | |
| position: relative; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); | |
| z-index: 10; | |
| } | |
| .traffic-close { | |
| background-color: #ff5f56; | |
| border: 1px solid #e0443e; | |
| } | |
| .traffic-min { | |
| background-color: #ffbd2e; | |
| border: 1px solid #dea123; | |
| } | |
| .traffic-max { | |
| background-color: #27c93f; | |
| border: 1px solid #1aab29; | |
| } | |
| .traffic-light:hover::after { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 8px; | |
| color: rgba(0, 0, 0, 0.5); | |
| font-weight: bold; | |
| } | |
| .traffic-close:hover::after { | |
| content: '×'; | |
| } | |
| .traffic-min:hover::after { | |
| content: '−'; | |
| } | |
| .traffic-max:hover::after { | |
| content: '+'; | |
| } | |
| /* Text Selection Styling */ | |
| ::selection { | |
| background: rgba(59, 130, 246, 0.3); | |
| color: inherit; | |
| } | |
| ::-moz-selection { | |
| background: rgba(59, 130, 246, 0.3); | |
| color: inherit; | |
| } | |
| /* Enable text selection for specific elements */ | |
| .select-text { | |
| user-select: text ; | |
| -webkit-user-select: text ; | |
| -moz-user-select: text ; | |
| cursor: text; | |
| } | |
| /* Custom Scrollbar */ | |
| ::-webkit-scrollbar { | |
| width: 10px; | |
| height: 10px; | |
| } | |
| ::-webkit-scrollbar-track { | |
| background: transparent; | |
| } | |
| ::-webkit-scrollbar-thumb { | |
| background: rgba(0, 0, 0, 0.15); | |
| border-radius: 5px; | |
| border: 2px solid transparent; | |
| background-clip: content-box; | |
| } | |
| ::-webkit-scrollbar-thumb:hover { | |
| background-color: rgba(0, 0, 0, 0.25); | |
| } | |
| /* Desktop Icon Grid */ | |
| .desktop-icon { | |
| @apply flex flex-col items-center gap-1.5 cursor-pointer transition-all; | |
| } | |
| .desktop-icon:hover { | |
| background-color: rgba(255, 255, 255, 0.15); | |
| border-radius: 8px; | |
| box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.15); | |
| } | |
| .desktop-icon-label { | |
| @apply text-xs text-white font-medium px-2 py-0.5 rounded; | |
| text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8); | |
| } | |
| .desktop-icon:hover .desktop-icon-label { | |
| background: rgba(0, 0, 0, 0.5); | |
| } | |
| /* macOS style window */ | |
| .macos-window { | |
| @apply rounded-xl shadow-2xl overflow-hidden; | |
| background: #f5f5f5; | |
| border: 1px solid rgba(0, 0, 0, 0.1); | |
| box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); | |
| } | |
| .macos-window-header { | |
| @apply h-10 flex items-center px-4 justify-between; | |
| background: linear-gradient(to bottom, #f6f6f6, #e8e8e8); | |
| border-bottom: 1px solid rgba(0, 0, 0, 0.1); | |
| } | |
| /* Dock styles */ | |
| .dock-container { | |
| @apply fixed bottom-4 left-0 right-0 flex justify-center z-50; | |
| } | |
| .dock-item { | |
| @apply relative flex flex-col items-center gap-1; | |
| } | |
| .dock-dot { | |
| @apply w-1 h-1 rounded-full mt-1 opacity-0 transition-opacity; | |
| background: rgba(0, 0, 0, 0.6); | |
| } | |
| .dock-item:hover .dock-dot { | |
| @apply opacity-100; | |
| } | |
| /* Mobile & Tablet Responsive Styles */ | |
| @media (max-width: 1024px) { | |
| body { | |
| touch-action: pan-x pan-y; | |
| user-select: auto; | |
| } | |
| /* Don't force windows to be full screen - keep them contained */ | |
| .macos-window { | |
| @apply rounded-lg shadow-xl; | |
| max-height: calc(100vh - 140px) ; | |
| } | |
| /* Adjust dock for mobile */ | |
| .dock-container { | |
| @apply bottom-0 px-2; | |
| } | |
| .dock-glass { | |
| @apply rounded-t-2xl rounded-b-none; | |
| padding: 0.5rem 0.75rem; | |
| max-height: 70px; | |
| } | |
| /* Dock icons smaller on mobile */ | |
| .dock-item { | |
| @apply w-10 h-10 sm:w-12 sm:h-12; | |
| } | |
| /* Desktop icons visible on mobile now */ | |
| .desktop-icon { | |
| display: flex ; | |
| @apply w-16 h-16 sm:w-20 sm:h-20; | |
| } | |
| /* Desktop icon labels smaller on mobile */ | |
| .desktop-icon-label { | |
| @apply text-[9px] sm:text-[10px]; | |
| } | |
| /* Adjust traffic lights for touch - make them clickable */ | |
| .traffic-light { | |
| width: 24px; | |
| height: 24px; | |
| margin-right: 8px; | |
| @apply cursor-pointer; | |
| } | |
| /* Ensure traffic lights are always on top and show symbols */ | |
| .traffic-light::after { | |
| font-size: 14px; | |
| opacity: 1; | |
| } | |
| } | |
| /* Landscape mobile optimization */ | |
| @media (max-width: 1024px) and (orientation: landscape) { | |
| /* Top bar more compact */ | |
| .macos-window-header { | |
| @apply h-10 px-3; | |
| } | |
| /* Keep traffic lights larger for touch in landscape */ | |
| .traffic-light { | |
| width: 20px; | |
| height: 20px; | |
| margin-right: 8px; | |
| } | |
| /* Dock compact in landscape */ | |
| .dock-container { | |
| @apply bottom-0; | |
| } | |
| .dock-glass { | |
| padding: 0.25rem 0.75rem; | |
| max-height: 60px; | |
| } | |
| /* Windows should leave space for dock and topbar in landscape */ | |
| .macos-window { | |
| max-height: calc(100vh - 100px) ; | |
| } | |
| /* Scrollbars thinner on mobile */ | |
| ::-webkit-scrollbar { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| } | |
| /* Portrait mobile optimization */ | |
| @media (max-width: 768px) and (orientation: portrait) { | |
| /* Stack dock items more compactly */ | |
| .dock-item { | |
| @apply gap-0; | |
| } | |
| /* Adjust font sizes for mobile */ | |
| .desktop-icon-label { | |
| @apply text-[10px]; | |
| } | |
| } | |
| /* Touch-friendly improvements */ | |
| @media (hover: none) and (pointer: coarse) { | |
| /* Larger touch targets - 44px is Apple's recommended minimum */ | |
| .traffic-light { | |
| min-width: 32px; | |
| min-height: 32px; | |
| width: 32px; | |
| height: 32px; | |
| margin-right: 10px; | |
| touch-action: manipulation; | |
| } | |
| /* Always show traffic light symbols on touch devices */ | |
| .traffic-close::after { | |
| content: '×' ; | |
| opacity: 0.7; | |
| } | |
| .traffic-min::after { | |
| content: '−' ; | |
| opacity: 0.7; | |
| } | |
| .traffic-max::after { | |
| content: '+' ; | |
| opacity: 0.7; | |
| } | |
| /* Better tap feedback */ | |
| .app-icon:active { | |
| transform: scale(0.90); | |
| } | |
| .dock-item:active { | |
| transform: scale(0.95); | |
| } | |
| /* Remove hover effects on touch devices */ | |
| .app-icon:hover { | |
| transform: none; | |
| } | |
| .desktop-icon:hover { | |
| background-color: transparent; | |
| box-shadow: none; | |
| } | |
| /* Ensure windows are touch-scrollable */ | |
| .macos-window { | |
| -webkit-overflow-scrolling: touch; | |
| } | |
| } | |
| /* Markdown Content Styles */ | |
| .markdown-content { | |
| @apply text-sm leading-relaxed; | |
| } | |
| .markdown-content>* { | |
| @apply mb-3; | |
| } | |
| .markdown-content>*:last-child { | |
| @apply mb-0; | |
| } | |
| /* Headings */ | |
| .markdown-content h1 { | |
| @apply text-xl font-bold mb-3 mt-4; | |
| } | |
| .markdown-content h2 { | |
| @apply text-lg font-bold mb-2 mt-3; | |
| } | |
| .markdown-content h3 { | |
| @apply text-base font-bold mb-2 mt-3; | |
| } | |
| .markdown-content h4, | |
| .markdown-content h5, | |
| .markdown-content h6 { | |
| @apply text-sm font-bold mb-2 mt-2; | |
| } | |
| /* Paragraphs */ | |
| .markdown-content p { | |
| @apply mb-3 whitespace-pre-wrap; | |
| } | |
| /* Lists */ | |
| .markdown-content ul { | |
| @apply list-disc list-inside mb-3 space-y-1; | |
| } | |
| .markdown-content ol { | |
| @apply list-decimal list-inside mb-3 space-y-1; | |
| } | |
| .markdown-content li { | |
| @apply ml-2; | |
| } | |
| .markdown-content li>ul, | |
| .markdown-content li>ol { | |
| @apply ml-4 mt-1; | |
| } | |
| /* Links */ | |
| .markdown-content a { | |
| @apply text-blue-600 hover:text-blue-800 underline; | |
| } | |
| /* Code */ | |
| .markdown-content code { | |
| @apply px-1.5 py-0.5 rounded text-xs font-mono; | |
| background: rgba(0, 0, 0, 0.05); | |
| } | |
| .markdown-content pre { | |
| @apply p-3 rounded-lg overflow-x-auto mb-3 text-xs; | |
| background: rgba(0, 0, 0, 0.05); | |
| } | |
| .markdown-content pre code { | |
| @apply p-0 bg-transparent; | |
| } | |
| /* Blockquotes */ | |
| .markdown-content blockquote { | |
| @apply pl-4 border-l-4 border-gray-300 italic mb-3; | |
| color: rgba(0, 0, 0, 0.7); | |
| } | |
| /* Tables */ | |
| .markdown-content table { | |
| @apply w-full border-collapse mb-3 text-xs; | |
| } | |
| .markdown-content th, | |
| .markdown-content td { | |
| @apply border border-gray-300 px-2 py-1 text-left; | |
| } | |
| .markdown-content th { | |
| @apply bg-gray-100 font-bold; | |
| } | |
| /* Horizontal Rule */ | |
| .markdown-content hr { | |
| @apply my-4 border-t border-gray-300; | |
| } | |
| /* Images */ | |
| .markdown-content img { | |
| @apply max-w-full h-auto rounded-lg mb-3; | |
| } | |
| /* Strong and Emphasis */ | |
| .markdown-content strong { | |
| @apply font-bold; | |
| } | |
| .markdown-content em { | |
| @apply italic; | |
| } | |
| /* Strikethrough */ | |
| .markdown-content del { | |
| @apply line-through; | |
| } | |
| /* User message markdown (white text on blue background) */ | |
| .bg-blue-600 .markdown-content code { | |
| background: rgba(255, 255, 255, 0.2); | |
| } | |
| .bg-blue-600 .markdown-content pre { | |
| background: rgba(255, 255, 255, 0.1); | |
| } | |
| .bg-blue-600 .markdown-content a { | |
| @apply text-white underline; | |
| } | |
| .bg-blue-600 .markdown-content blockquote { | |
| @apply border-white/30; | |
| color: rgba(255, 255, 255, 0.9); | |
| } | |
| /* Messages app markdown styles (iMessage-style bubbles) */ | |
| .message-bubble-sent .markdown-content code { | |
| background: rgba(255, 255, 255, 0.2); | |
| } | |
| .message-bubble-sent .markdown-content pre { | |
| background: rgba(255, 255, 255, 0.15); | |
| } | |
| .message-bubble-sent .markdown-content a { | |
| @apply text-white underline; | |
| } | |
| .message-bubble-sent .markdown-content blockquote { | |
| @apply border-white/30; | |
| color: rgba(255, 255, 255, 0.95); | |
| } | |
| .message-bubble-sent .markdown-content th, | |
| .message-bubble-sent .markdown-content td { | |
| @apply border-white/20; | |
| } | |
| .message-bubble-sent .markdown-content th { | |
| background: rgba(255, 255, 255, 0.1); | |
| } | |
| /* Dark message bubbles (received messages) */ | |
| .message-bubble-received .markdown-content code { | |
| background: rgba(255, 255, 255, 0.1); | |
| } | |
| .message-bubble-received .markdown-content pre { | |
| background: rgba(0, 0, 0, 0.3); | |
| } | |
| .message-bubble-received .markdown-content a { | |
| @apply text-blue-400 underline; | |
| } | |
| .message-bubble-received .markdown-content blockquote { | |
| @apply border-gray-500; | |
| color: rgba(255, 255, 255, 0.8); | |
| } | |
| .message-bubble-received .markdown-content th, | |
| .message-bubble-received .markdown-content td { | |
| @apply border-gray-600; | |
| } | |
| .message-bubble-received .markdown-content th { | |
| background: rgba(255, 255, 255, 0.05); | |
| } |