@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"); * { margin: 0; padding: 0; box-sizing: border-box; } /* Catppuccin Mocha Palette */ :root { --ctp-rosewater: #f5e0dc; --ctp-flamingo: #f2cdcd; --ctp-pink: #f5c2e7; --ctp-mauve: #cba6f7; --ctp-red: #f38ba8; --ctp-maroon: #eba0ac; --ctp-peach: #fab387; --ctp-yellow: #f9e2af; --ctp-green: #a6e3a1; --ctp-teal: #94e2d5; --ctp-sky: #89dceb; --ctp-sapphire: #74c7ec; --ctp-blue: #89b4fa; --ctp-lavender: #b4befe; --ctp-text: #cdd6f4; --ctp-subtext1: #bac2de; --ctp-subtext0: #a6adc8; --ctp-overlay2: #9399b2; --ctp-overlay1: #7f849c; --ctp-overlay0: #6c7086; --ctp-surface2: #585b70; --ctp-surface1: #45475a; --ctp-surface0: #313244; --ctp-base: #1e1e2e; --ctp-mantle: #181825; --ctp-crust: #11111b; } body { font-family: "JetBrains Mono", monospace; background: var(--ctp-base); color: var(--ctp-text); height: 100vh; overflow: hidden; image-rendering: pixelated; } .hidden { display: none !important; } /* ==================== LOGIN SCREEN ==================== */ .login-screen { height: 100vh; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 32px; } .login-btn { background: var(--ctp-surface0); border: 2px solid var(--ctp-surface1); color: var(--ctp-text); padding: 14px 24px; font-family: inherit; font-size: 14px; cursor: pointer; transition: border-color 0.15s ease, background 0.15s ease; user-select: none; } .login-btn:hover { border-color: var(--ctp-mauve); background: var(--ctp-surface1); } .login-btn:active { background: var(--ctp-surface2); } .login-btn:disabled { opacity: 0.5; cursor: not-allowed; } /* ==================== WELCOME SCREEN ==================== */ .welcome-screen { height: 100vh; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 32px; } .logo { font-size: 48px; font-weight: 700; letter-spacing: 4px; text-transform: uppercase; user-select: none; display: flex; gap: 4px; } .logo-dev { color: var(--ctp-overlay1); } .logo-den { color: var(--ctp-mauve); } /* ==================== INPUT STYLES ==================== */ .input-container { width: 100%; max-width: 560px; display: flex; flex-direction: column; gap: 8px; padding: 0 16px; } .input-box { display: flex; align-items: center; background: var(--ctp-surface0); border: 2px solid var(--ctp-surface1); padding: 12px 16px; transition: border-color 0.15s ease; } .input-box:focus-within { border-color: var(--ctp-mauve); } input { flex: 1; background: transparent; border: none; outline: none; color: var(--ctp-text); font-size: 14px; font-family: inherit; } input::placeholder { color: var(--ctp-overlay0); } .hint { text-align: center; font-size: 11px; color: var(--ctp-overlay0); } kbd { background: var(--ctp-surface1); color: var(--ctp-subtext1); padding: 2px 6px; font-size: 10px; font-family: inherit; } /* ==================== CHAT SCREEN ==================== */ .chat-screen { height: 100vh; display: flex; flex-direction: column; background: var(--ctp-base); } .chat-messages { flex: 1; overflow-y: auto; padding: 16px 0; } .chat-messages::-webkit-scrollbar { width: 8px; } .chat-messages::-webkit-scrollbar-track { background: var(--ctp-mantle); } .chat-messages::-webkit-scrollbar-thumb { background: var(--ctp-surface1); } .chat-messages::-webkit-scrollbar-thumb:hover { background: var(--ctp-surface2); } /* ==================== MESSAGES ==================== */ .message { font-size: 13px; line-height: 1.6; padding: 8px 16px; border-left: 3px solid transparent; opacity: 0; animation: fadeIn 0.2s ease forwards; } @keyframes fadeIn { to { opacity: 1; } } .message.user { border-left-color: var(--ctp-sapphire); background: var(--ctp-mantle); } .message.user .message-text { color: var(--ctp-text); } .message.assistant { border-left-color: var(--ctp-mauve); } .message.assistant .message-text { color: var(--ctp-subtext1); } /* ==================== CHAT INPUT ==================== */ .chat-input { padding: 16px; max-width: 100%; background: var(--ctp-mantle); border-top: 2px solid var(--ctp-surface0); } /* ==================== TYPING INDICATOR ==================== */ .typing { display: inline-flex; gap: 4px; } .typing span { width: 6px; height: 6px; background: var(--ctp-mauve); animation: blink 1s infinite step-start; } .typing span:nth-child(2) { animation-delay: 0.33s; } .typing span:nth-child(3) { animation-delay: 0.66s; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.2; } }