@tailwind base; @tailwind components; @tailwind utilities; /* Solarized Dark Theme Variables */ :root { --solarized-base03: #002b36; --solarized-base02: #073642; --solarized-base01: #586e75; --solarized-base00: #657b83; --solarized-base0: #839496; --solarized-base1: #93a1a1; --solarized-base2: #eee8d5; --solarized-base3: #fdf6e3; --solarized-blue: #268bd2; --solarized-cyan: #2aa198; --solarized-green: #859900; --solarized-yellow: #b58900; --solarized-orange: #cb4b16; --solarized-red: #dc322f; --solarized-magenta: #d33682; --solarized-violet: #6c71c4; /* Gradient Custom Properties */ --gradient-primary: linear-gradient(135deg, var(--solarized-blue), var(--solarized-cyan)); --gradient-active: linear-gradient(135deg, var(--solarized-green), var(--solarized-yellow)); --gradient-danger: linear-gradient(135deg, var(--solarized-red), var(--solarized-orange)); --gradient-preview: linear-gradient(135deg, var(--solarized-yellow), var(--solarized-orange)); --gradient-transition: linear-gradient(135deg, var(--solarized-red), var(--solarized-magenta)); --gradient-body: linear-gradient(135deg, #002b36 0%, #073642 50%, #002b36 100%); } /* Modern CSS Foundation */ * { margin: 0; padding: 0; box-sizing: border-box; } html { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; } body { background: var(--gradient-body); color: var(--solarized-base1); min-height: 100vh; line-height: 1.6; } /* Status Indicator Dots */ .status-dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; } .status-dot.connected { background-color: #859900; /* Solarized green */ } .status-dot.disconnected { background-color: #dc322f; /* Solarized red */ } .status-dot.streaming { background-color: #dc322f; /* Solarized red */ } .status-dot.idle { background-color: #586e75; /* Solarized base01 */ } /* Glass Card Component */ .glass { background: rgba(7, 54, 66, 0.4); backdrop-filter: blur(10px); border: 1px solid rgba(88, 110, 117, 0.3); border-radius: 16px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); } /* Modern Button System */ .btn { background: var(--gradient-primary); color: var(--solarized-base3); border: none; padding: 12px 24px; border-radius: 12px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; display: inline-flex; align-items: center; justify-content: center; gap: 8px; position: relative; min-height: 44px; font-size: 14px; text-decoration: none; } .btn.active, .btn-success { background: var(--gradient-active); color: var(--solarized-base3); box-shadow: 0 0 0 3px rgba(133, 153, 0, 0.5); transform: translateY(-1px); font-weight: 700; } .btn:hover { transform: translateY(-1px); box-shadow: 0 6px 20px rgba(38, 139, 210, 0.4); } .btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none; box-shadow: none; } /* Secondary Button */ .btn-secondary { background: rgba(88, 110, 117, 0.3); border: 1px solid rgba(131, 148, 150, 0.4); color: var(--solarized-base1); backdrop-filter: blur(10px); } .btn-secondary:hover { background: rgba(88, 110, 117, 0.5); border-color: rgba(131, 148, 150, 0.6); box-shadow: 0 6px 20px rgba(88, 110, 117, 0.3); } /* Danger Button */ .btn-danger { background: var(--gradient-danger); color: var(--solarized-base3); } .btn-danger:hover { background: linear-gradient(135deg, var(--solarized-orange), var(--solarized-red)); box-shadow: 0 6px 20px rgba(220, 50, 47, 0.4); } /* Small Button */ .btn-sm { padding: 8px 16px; font-size: 12px; min-height: 36px; border-radius: 8px; } /* Icon Only Button */ .btn-icon { padding: 10px; min-width: 44px; aspect-ratio: 1; } /* Button with icon spacing */ .btn .icon { flex-shrink: 0; } /* Scene Button Variants */ .btn-scene-preview { background: var(--gradient-preview); color: var(--solarized-base3); } .btn-scene-transition { background: var(--gradient-transition); color: var(--solarized-base3); min-width: 120px; } /* Form spacing fixes since Tailwind gap classes aren't working */ .form-row { display: flex; align-items: center; } .form-row > * + * { margin-left: 16px; } .button-group { display: flex; align-items: center; } .button-group > * + * { margin-left: 12px; } /* Input Styling */ .input { background: rgba(7, 54, 66, 0.6); border: 1px solid rgba(88, 110, 117, 0.4); border-radius: 12px; padding: 12px 16px; color: var(--solarized-base1); width: 100%; transition: all 0.3s ease; } .input::placeholder { color: rgba(131, 148, 150, 0.6); } .input:focus { outline: none; border-color: var(--solarized-blue); box-shadow: 0 0 0 3px rgba(38, 139, 210, 0.2); } /* Dropdown Styling */ .dropdown-button { background: rgba(7, 54, 66, 0.6); border: 1px solid rgba(88, 110, 117, 0.4); border-radius: 12px; padding: 12px 16px; color: var(--solarized-base1); width: 100%; text-align: left; cursor: pointer; transition: all 0.3s ease; display: flex; justify-content: space-between; align-items: center; } .dropdown-button:hover { background: rgba(7, 54, 66, 0.8); } .dropdown-menu { background: rgba(0, 43, 54, 0.95); backdrop-filter: blur(10px); border: 1px solid rgba(88, 110, 117, 0.4); border-radius: 12px; margin-top: 4px; overflow: hidden; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); z-index: 99999 !important; position: absolute; transform: translateZ(0); will-change: transform; max-height: 400px; overflow-y: auto; } /* Custom scrollbar for dropdown */ .dropdown-menu::-webkit-scrollbar { width: 8px; } .dropdown-menu::-webkit-scrollbar-track { background: rgba(7, 54, 66, 0.5); border-radius: 4px; } .dropdown-menu::-webkit-scrollbar-thumb { background: rgba(88, 110, 117, 0.6); border-radius: 4px; transition: background 0.2s ease; } .dropdown-menu::-webkit-scrollbar-thumb:hover { background: rgba(88, 110, 117, 0.8); } .dropdown-item { padding: 12px 16px; cursor: pointer; transition: all 0.2s ease; border-bottom: 1px solid rgba(88, 110, 117, 0.2); color: var(--solarized-base1); } .dropdown-item:last-child { border-bottom: none; } .dropdown-item:hover { background: rgba(38, 139, 210, 0.3); } .dropdown-item.active { background: rgba(38, 139, 210, 0.3); color: var(--solarized-base3); } /* Icon Sizes */ .icon-sm { width: 16px; height: 16px; } .icon-md { width: 20px; height: 20px; } .icon-lg { width: 24px; height: 24px; } /* Layout */ .container { max-width: 1200px; margin: 0 auto; padding: 0 24px; } .section { padding: 32px 0; } /* Grid Layouts */ .grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; } .grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; } .grid-4 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } @media (max-width: 768px) { .grid-2, .grid-3 { grid-template-columns: 1fr; } } /* Text Styles */ .title { font-size: 2.5rem; font-weight: 700; margin-bottom: 16px; text-align: center; } .subtitle { font-size: 1.125rem; color: rgba(131, 148, 150, 0.9); text-align: center; margin-bottom: 32px; } .card-title { font-size: 1.25rem; font-weight: 600; margin-bottom: 16px; text-align: center; } /* Utilities */ .text-center { text-align: center; } .mb-4 { margin-bottom: 16px; } .mb-6 { margin-bottom: 24px; } .mb-8 { margin-bottom: 32px; } .ml-3 { margin-left: 12px; } .mr-1 { margin-right: 4px; } .mr-2 { margin-right: 8px; } .mr-4 { margin-right: 16px; } .p-4 { padding: 16px; } .p-6 { padding: 24px; } .p-8 { padding: 32px; } /* Collapsible Group Styles */ .collapsible-group { margin-bottom: 16px; } .collapsible-header { width: 100%; background: rgba(7, 54, 66, 0.3); border: 1px solid rgba(88, 110, 117, 0.3); border-radius: 12px; padding: 16px 20px; cursor: pointer; transition: all 0.3s ease; margin-bottom: 1px; } .collapsible-header:hover { background: rgba(7, 54, 66, 0.5); border-color: rgba(131, 148, 150, 0.4); } .collapsible-header-content { display: flex; align-items: center; gap: 12px; } .collapsible-icon { flex-shrink: 0; transition: transform 0.3s ease; color: var(--solarized-base1); } .collapsible-icon.open { transform: rotate(90deg); } .collapsible-title { flex: 1; font-size: 18px; font-weight: 600; color: var(--solarized-base3); text-align: left; margin: 0; } .collapsible-count { background: rgba(38, 139, 210, 0.2); color: var(--solarized-blue); padding: 4px 12px; border-radius: 20px; font-size: 14px; font-weight: 600; } .collapsible-content { overflow: hidden; transition: all 0.3s ease; max-height: 0; opacity: 0; } .collapsible-content.open { max-height: 5000px; opacity: 1; margin-top: 12px; } .collapsible-content-inner { padding: 20px; background: rgba(7, 54, 66, 0.2); border: 1px solid rgba(88, 110, 117, 0.2); border-radius: 12px; }