Initial commit: Anvil Lounge chat application
- React frontend with Vite + TypeScript - Cloudflare Worker backend with Durable Objects - AI-powered chat moderation via OpenAI - WebSocket-based real-time messaging - XSS prevention, rate limiting, input validation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
79
frontend/src/components/MessageInput.css
Normal file
79
frontend/src/components/MessageInput.css
Normal file
@@ -0,0 +1,79 @@
|
||||
.message-input {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
padding: 16px;
|
||||
background: #16213e;
|
||||
border-top: 1px solid #0f3460;
|
||||
}
|
||||
|
||||
.message-input .input-wrapper {
|
||||
flex: 1;
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.message-input .char-count {
|
||||
position: absolute;
|
||||
right: 12px;
|
||||
bottom: -18px;
|
||||
font-size: 11px;
|
||||
color: #666;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
|
||||
.message-input .char-count.warning {
|
||||
color: #e94560;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.message-input textarea {
|
||||
flex: 1;
|
||||
padding: 12px 16px;
|
||||
border: 2px solid #0f3460;
|
||||
border-radius: 24px;
|
||||
background: #1a1a2e;
|
||||
color: #eee;
|
||||
font-size: 15px;
|
||||
font-family: inherit;
|
||||
resize: none;
|
||||
min-height: 44px;
|
||||
max-height: 120px;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
|
||||
.message-input textarea:focus {
|
||||
outline: none;
|
||||
border-color: #e94560;
|
||||
}
|
||||
|
||||
.message-input textarea::placeholder {
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.message-input textarea:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.message-input button {
|
||||
padding: 12px 24px;
|
||||
border: none;
|
||||
border-radius: 24px;
|
||||
background: #e94560;
|
||||
color: white;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, opacity 0.2s;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.message-input button:hover:not(:disabled) {
|
||||
background: #d63a52;
|
||||
}
|
||||
|
||||
.message-input button:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
Reference in New Issue
Block a user