feat: implementado Smart Router Multimodal via MiniMax e OpenRouter
This commit is contained in:
@@ -1898,3 +1898,208 @@ code {
|
||||
color: var(--text-muted);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
SMART ROUTER MEDIA GENERATION (Imagem, Áudio e Vídeo)
|
||||
========================================================================== */
|
||||
.media-message-card {
|
||||
background: var(--bg-secondary);
|
||||
border: 1px solid var(--border-light);
|
||||
border-radius: 16px;
|
||||
padding: 16px;
|
||||
margin: 12px 0;
|
||||
max-width: 500px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
||||
animation: fadeIn 0.3s ease-out;
|
||||
}
|
||||
|
||||
.media-img-container, .media-video-container {
|
||||
width: 100%;
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
aspect-ratio: 1/1;
|
||||
}
|
||||
|
||||
.media-video-container {
|
||||
aspect-ratio: 16/9;
|
||||
}
|
||||
|
||||
.generated-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
border-radius: 12px;
|
||||
transition: transform var(--transition-normal);
|
||||
}
|
||||
|
||||
.generated-image:hover {
|
||||
transform: scale(1.02);
|
||||
}
|
||||
|
||||
.generated-video {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.media-caption {
|
||||
font-size: 13px;
|
||||
color: var(--text-secondary);
|
||||
font-style: italic;
|
||||
line-height: 1.4;
|
||||
margin: 0;
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
.media-actions-row {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.media-download-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
background: linear-gradient(135deg, var(--brand-green) 0%, #1e7e4a 100%);
|
||||
color: #ffffff;
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
padding: 10px 16px;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
transition: opacity var(--transition-fast), transform var(--transition-fast);
|
||||
flex: 1;
|
||||
box-shadow: 0 2px 8px rgba(30, 190, 110, 0.2);
|
||||
}
|
||||
|
||||
.media-download-btn:hover {
|
||||
opacity: 0.9;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.media-download-btn:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.media-download-btn svg {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
/* Player de Áudio Customizado */
|
||||
.custom-audio-player {
|
||||
background: var(--bg-tertiary);
|
||||
border: 1px solid var(--border-light);
|
||||
border-radius: 12px;
|
||||
padding: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.audio-play-btn {
|
||||
background: var(--brand-green);
|
||||
border: none;
|
||||
color: #ffffff;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
transition: transform var(--transition-fast);
|
||||
}
|
||||
|
||||
.audio-play-btn:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.audio-play-btn svg {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
.audio-play-btn svg.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.audio-timeline-container {
|
||||
flex: 1;
|
||||
height: 6px;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.audio-timeline {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.audio-progress {
|
||||
height: 100%;
|
||||
background: var(--brand-green);
|
||||
border-radius: 3px;
|
||||
width: 0%;
|
||||
transition: width 0.1s linear;
|
||||
}
|
||||
|
||||
.audio-time {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
font-family: monospace;
|
||||
min-width: 32px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Loading de Mídia */
|
||||
.media-loading {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 24px;
|
||||
gap: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.media-spinner {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border: 3px solid rgba(30, 190, 110, 0.1);
|
||||
border-radius: 50%;
|
||||
border-top-color: var(--brand-green);
|
||||
animation: spin 1s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.media-loading-text {
|
||||
font-size: 13.5px;
|
||||
color: var(--text-secondary);
|
||||
margin: 0;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user