scam / ui /guvi-test.css
Gankit12's picture
New commit
ed26b37
/* ================================================
GUVI Format Tester - Styles
A sleek terminal/IDE-inspired theme
================================================ */
:root {
/* Dracula-inspired dark theme */
--bg-primary: #0d1117;
--bg-secondary: #161b22;
--bg-tertiary: #21262d;
--bg-card: #1c2128;
--bg-input: #0d1117;
/* Vibrant accent colors */
--accent-cyan: #58a6ff;
--accent-green: #3fb950;
--accent-purple: #a371f7;
--accent-orange: #d29922;
--accent-pink: #f778ba;
--accent-red: #f85149;
--accent-gradient: linear-gradient(135deg, var(--accent-cyan), var(--accent-purple));
/* Status colors */
--success: #3fb950;
--warning: #d29922;
--danger: #f85149;
--info: #58a6ff;
/* Text colors */
--text-primary: #e6edf3;
--text-secondary: #8b949e;
--text-muted: #6e7681;
/* Borders */
--border-color: #30363d;
--border-focus: var(--accent-cyan);
/* Typography */
--font-sans: 'Space Grotesk', -apple-system, BlinkMacSystemFont, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
/* Spacing */
--space-xs: 4px;
--space-sm: 8px;
--space-md: 16px;
--space-lg: 24px;
--space-xl: 32px;
/* Radius */
--radius-sm: 6px;
--radius-md: 8px;
--radius-lg: 12px;
}
/* Reset */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html, body {
height: 100%;
font-family: var(--font-sans);
font-size: 14px;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.5;
}
/* App Layout */
.app {
display: flex;
height: 100vh;
overflow: hidden;
}
/* Sidebar */
.sidebar {
width: 260px;
background: var(--bg-secondary);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
}
.sidebar-header {
padding: var(--space-lg);
border-bottom: 1px solid var(--border-color);
}
.logo {
display: flex;
align-items: center;
gap: var(--space-md);
}
.logo-icon {
font-size: 32px;
}
.logo-text h1 {
font-size: 1.25rem;
font-weight: 700;
color: var(--text-primary);
}
.logo-text .subtitle {
font-size: 0.75rem;
color: var(--text-muted);
}
/* Navigation */
.sidebar-nav {
padding: var(--space-md);
flex: 1;
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.nav-item {
display: flex;
align-items: center;
gap: var(--space-md);
padding: var(--space-md);
background: transparent;
border: none;
border-radius: var(--radius-md);
color: var(--text-secondary);
font-family: var(--font-sans);
font-size: 0.9rem;
cursor: pointer;
transition: all 0.2s ease;
text-align: left;
}
.nav-item:hover {
background: var(--bg-tertiary);
color: var(--text-primary);
}
.nav-item.active {
background: var(--accent-gradient);
color: white;
}
.nav-icon {
font-size: 1.1rem;
}
/* Sidebar Footer */
.sidebar-footer {
padding: var(--space-md);
border-top: 1px solid var(--border-color);
display: flex;
flex-direction: column;
gap: var(--space-md);
}
.api-config {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.api-config label {
font-size: 0.75rem;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.api-config input {
padding: var(--space-sm) var(--space-md);
background: var(--bg-input);
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-family: var(--font-mono);
font-size: 0.8rem;
}
.api-config input:focus {
outline: none;
border-color: var(--border-focus);
}
.connection-status {
display: flex;
align-items: center;
gap: var(--space-sm);
padding: var(--space-sm);
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
font-size: 0.8rem;
}
.status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--text-muted);
}
.status-dot.connected { background: var(--success); }
.status-dot.error { background: var(--danger); }
/* Main Content */
.main {
flex: 1;
overflow-y: auto;
background: var(--bg-primary);
}
.tab-content {
display: none;
padding: var(--space-xl);
}
.tab-content.active {
display: block;
}
/* Page Header */
.page-header {
margin-bottom: var(--space-xl);
}
.page-header h2 {
font-size: 1.5rem;
font-weight: 600;
margin-bottom: var(--space-xs);
}
.page-header p {
color: var(--text-secondary);
}
/* Content Grid */
.content-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: var(--space-lg);
}
.full-width {
grid-column: 1 / -1;
}
/* Cards */
.card {
background: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
overflow: hidden;
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--space-md) var(--space-lg);
background: var(--bg-tertiary);
border-bottom: 1px solid var(--border-color);
}
.card-header h3 {
font-size: 0.9rem;
font-weight: 600;
}
.card-body {
padding: var(--space-lg);
}
.card-footer {
padding: var(--space-md) var(--space-lg);
background: var(--bg-tertiary);
border-top: 1px solid var(--border-color);
}
/* Form Elements */
.form-group {
margin-bottom: var(--space-md);
}
.form-group label {
display: block;
margin-bottom: var(--space-xs);
font-size: 0.8rem;
color: var(--text-secondary);
font-weight: 500;
}
.form-group input,
.form-group select,
.form-group textarea {
width: 100%;
padding: var(--space-sm) var(--space-md);
background: var(--bg-input);
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-family: var(--font-sans);
font-size: 0.9rem;
}
.form-group textarea {
resize: vertical;
min-height: 80px;
}
.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--border-focus);
box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.15);
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--space-md);
}
/* Buttons */
.btn {
display: inline-flex;
align-items: center;
gap: var(--space-sm);
padding: var(--space-sm) var(--space-md);
background: var(--bg-tertiary);
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-family: var(--font-sans);
font-size: 0.85rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
}
.btn:hover {
background: var(--bg-card);
border-color: var(--accent-cyan);
}
.btn-primary {
background: var(--accent-gradient);
border: none;
color: white;
}
.btn-primary:hover {
opacity: 0.9;
transform: translateY(-1px);
}
.btn-outline {
background: transparent;
border: 1px solid var(--accent-cyan);
color: var(--accent-cyan);
}
.btn-danger {
background: var(--danger);
border: none;
color: white;
}
.btn-sm {
padding: var(--space-xs) var(--space-sm);
font-size: 0.75rem;
}
.btn-xs {
padding: 2px 8px;
font-size: 0.7rem;
}
.btn-lg {
padding: var(--space-md) var(--space-xl);
font-size: 1rem;
}
.example-btns {
display: flex;
align-items: center;
gap: var(--space-sm);
margin-top: var(--space-md);
flex-wrap: wrap;
}
.example-btns span {
font-size: 0.8rem;
color: var(--text-muted);
}
/* Code Block */
.code-block {
background: var(--bg-input);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
padding: var(--space-md);
font-family: var(--font-mono);
font-size: 0.8rem;
color: var(--accent-green);
overflow-x: auto;
white-space: pre;
max-height: 300px;
overflow-y: auto;
}
/* Response */
.response-tabs {
display: flex;
gap: var(--space-xs);
margin-bottom: var(--space-md);
border-bottom: 1px solid var(--border-color);
padding-bottom: var(--space-sm);
}
.resp-tab {
padding: var(--space-sm) var(--space-md);
background: transparent;
border: none;
color: var(--text-secondary);
cursor: pointer;
font-size: 0.85rem;
border-radius: var(--radius-sm);
}
.resp-tab:hover {
color: var(--text-primary);
}
.resp-tab.active {
background: var(--bg-tertiary);
color: var(--accent-cyan);
}
.response-meta {
display: flex;
gap: var(--space-md);
font-size: 0.8rem;
}
.response-meta .response-time {
color: var(--accent-orange);
}
.response-meta .response-status {
color: var(--accent-green);
}
/* Empty State */
.empty-state {
text-align: center;
padding: var(--space-xl);
color: var(--text-muted);
}
.empty-state.small {
padding: var(--space-md);
font-size: 0.85rem;
}
.empty-icon {
font-size: 48px;
margin-bottom: var(--space-md);
display: block;
}
/* Multi-Turn Layout */
.multi-layout {
display: grid;
grid-template-columns: 1fr 380px;
gap: var(--space-lg);
}
.conversation-card {
grid-row: span 2;
display: flex;
flex-direction: column;
max-height: calc(100vh - 200px);
}
.conversation-body {
flex: 1;
overflow-y: auto;
padding: var(--space-md);
display: flex;
flex-direction: column;
gap: var(--space-md);
}
.conversation-footer {
padding: var(--space-md);
}
.input-row {
display: flex;
gap: var(--space-sm);
align-items: center;
}
.input-row .sender-label {
padding: var(--space-sm) var(--space-md);
background: linear-gradient(135deg, var(--danger), #a83232);
border-radius: var(--radius-sm);
font-weight: 600;
font-size: 0.85rem;
white-space: nowrap;
}
.input-row select {
width: auto;
padding: var(--space-sm) var(--space-md);
background: var(--bg-input);
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
color: var(--text-primary);
}
.input-row input {
flex: 1;
padding: var(--space-sm) var(--space-md);
background: var(--bg-input);
border: 1px solid var(--border-color);
border-radius: var(--radius-sm);
color: var(--text-primary);
}
/* Chat Message */
.chat-msg {
display: flex;
gap: var(--space-md);
animation: slideIn 0.3s ease;
}
@keyframes slideIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.chat-msg.scammer {
flex-direction: row;
}
.chat-msg.agent {
flex-direction: row-reverse;
}
.msg-avatar {
width: 36px;
height: 36px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
flex-shrink: 0;
}
.chat-msg.scammer .msg-avatar {
background: linear-gradient(135deg, var(--danger), #a83232);
}
.chat-msg.agent .msg-avatar {
background: linear-gradient(135deg, var(--success), #278f3f);
}
.msg-bubble {
max-width: 70%;
padding: var(--space-md);
border-radius: var(--radius-lg);
}
.chat-msg.scammer .msg-bubble {
background: var(--bg-tertiary);
border-bottom-left-radius: 4px;
}
.chat-msg.agent .msg-bubble {
background: linear-gradient(135deg, rgba(88, 166, 255, 0.15), rgba(163, 113, 247, 0.15));
border: 1px solid rgba(88, 166, 255, 0.3);
border-bottom-right-radius: 4px;
}
.msg-sender {
font-size: 0.7rem;
font-weight: 600;
color: var(--text-muted);
margin-bottom: 4px;
text-transform: uppercase;
}
.msg-text {
line-height: 1.6;
}
/* Info Grid */
.info-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: var(--space-sm);
}
.info-item {
padding: var(--space-sm);
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
}
.info-item label {
display: block;
font-size: 0.7rem;
color: var(--text-muted);
margin-bottom: 2px;
}
.info-item span {
font-weight: 500;
color: var(--accent-cyan);
}
.section-divider {
height: 1px;
background: var(--border-color);
margin: var(--space-md) 0;
}
.intel-list {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.intel-item {
display: flex;
justify-content: space-between;
padding: var(--space-xs) var(--space-sm);
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
font-size: 0.85rem;
}
.intel-item .label {
color: var(--text-secondary);
}
.intel-item .value {
font-family: var(--font-mono);
color: var(--accent-green);
}
.agent-notes {
padding: var(--space-sm);
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
font-size: 0.85rem;
color: var(--text-secondary);
font-style: italic;
}
.header-actions {
display: flex;
align-items: center;
gap: var(--space-md);
}
#turnCounter {
font-family: var(--font-mono);
font-size: 0.85rem;
color: var(--accent-orange);
}
/* Extraction Progress */
.extraction-progress {
margin-bottom: var(--space-md);
}
.progress-bar-container {
position: relative;
height: 24px;
background: var(--bg-tertiary);
border-radius: var(--radius-md);
overflow: hidden;
border: 1px solid var(--border-color);
}
.progress-bar-fill {
height: 100%;
background: linear-gradient(90deg, var(--accent-cyan), var(--success));
transition: width 0.3s ease;
}
.progress-bar-fill.high {
background: linear-gradient(90deg, var(--success), #00ff88);
animation: pulse-glow 1s infinite;
}
@keyframes pulse-glow {
0%, 100% { box-shadow: 0 0 5px var(--success); }
50% { box-shadow: 0 0 20px var(--success); }
}
.progress-label {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
font-weight: 600;
font-size: 0.75rem;
color: var(--text-primary);
}
.progress-details {
display: flex;
gap: var(--space-md);
margin-top: var(--space-sm);
flex-wrap: wrap;
}
.detail-item {
font-size: 0.75rem;
padding: 4px 8px;
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
transition: all 0.2s ease;
}
.detail-item.extracted {
background: rgba(56, 161, 105, 0.2);
color: var(--success);
}
/* Callback Status Box */
.callback-status-box {
margin-top: var(--space-md);
padding: var(--space-md);
border-radius: var(--radius-md);
background: var(--bg-tertiary);
border: 2px dashed var(--border-color);
transition: all 0.3s ease;
}
.callback-status-box.triggered {
border-color: var(--success);
border-style: solid;
background: rgba(56, 161, 105, 0.15);
animation: callback-pulse 2s ease-out;
}
@keyframes callback-pulse {
0% { box-shadow: 0 0 0 0 rgba(56, 161, 105, 0.7); }
70% { box-shadow: 0 0 0 15px rgba(56, 161, 105, 0); }
100% { box-shadow: 0 0 0 0 rgba(56, 161, 105, 0); }
}
.callback-status-header {
display: flex;
align-items: center;
gap: var(--space-sm);
}
.callback-icon {
font-size: 1.5rem;
}
.callback-text {
font-weight: 600;
font-size: 0.9rem;
}
.callback-details {
font-size: 0.75rem;
color: var(--text-muted);
margin-top: var(--space-xs);
}
/* Callback Section */
.callback-endpoint {
font-size: 0.85rem;
display: flex;
align-items: center;
gap: var(--space-sm);
}
.callback-endpoint label {
color: var(--text-muted);
}
.callback-endpoint code {
font-family: var(--font-mono);
color: var(--accent-cyan);
background: var(--bg-input);
padding: 4px 8px;
border-radius: var(--radius-sm);
}
.rules-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--space-md);
}
.rule-card {
padding: var(--space-lg);
background: var(--bg-tertiary);
border-radius: var(--radius-md);
border: 1px solid var(--border-color);
}
.rule-card.important {
border-color: var(--danger);
background: rgba(248, 81, 73, 0.1);
}
.rule-icon {
font-size: 24px;
display: block;
margin-bottom: var(--space-sm);
}
.rule-card h4 {
font-size: 0.9rem;
margin-bottom: var(--space-sm);
}
.rule-card ul {
list-style: none;
font-size: 0.85rem;
color: var(--text-secondary);
}
.rule-card li {
padding: 4px 0;
padding-left: 16px;
position: relative;
}
.rule-card li::before {
content: "•";
position: absolute;
left: 0;
color: var(--accent-cyan);
}
/* Checklist */
.checklist-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: var(--space-lg);
}
.checklist-section {
background: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
overflow: hidden;
}
.checklist-section h3 {
padding: var(--space-md) var(--space-lg);
background: var(--bg-tertiary);
font-size: 0.9rem;
border-bottom: 1px solid var(--border-color);
}
.check-item {
display: flex;
align-items: center;
gap: var(--space-md);
padding: var(--space-md) var(--space-lg);
border-bottom: 1px solid var(--border-color);
}
.check-item:last-child {
border-bottom: none;
}
.check-icon {
font-size: 20px;
width: 28px;
text-align: center;
}
.check-content {
flex: 1;
}
.check-content h4 {
font-size: 0.9rem;
font-weight: 500;
}
.check-content p {
font-size: 0.8rem;
color: var(--text-muted);
}
.check-item[data-status="pass"] .check-icon { color: var(--success); }
.check-item[data-status="fail"] .check-icon { color: var(--danger); }
.check-item[data-status="pending"] .check-icon { color: var(--text-muted); }
.manual-badge {
font-size: 0.7rem;
padding: 4px 8px;
background: var(--bg-tertiary);
border-radius: var(--radius-sm);
color: var(--text-muted);
}
.checklist-footer {
margin-top: var(--space-xl);
text-align: center;
}
.test-progress {
margin-top: var(--space-md);
}
.test-progress.hidden {
display: none;
}
.progress-bar {
height: 8px;
background: var(--bg-tertiary);
border-radius: 4px;
overflow: hidden;
margin-bottom: var(--space-sm);
}
.progress-fill {
height: 100%;
width: 0%;
background: var(--accent-gradient);
transition: width 0.3s ease;
}
.progress-text {
font-size: 0.85rem;
color: var(--text-muted);
}
/* Toast */
.toast-container {
position: fixed;
bottom: var(--space-lg);
right: var(--space-lg);
display: flex;
flex-direction: column;
gap: var(--space-sm);
z-index: 1000;
}
.toast {
padding: var(--space-md) var(--space-lg);
background: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: var(--radius-md);
color: var(--text-primary);
font-size: 0.9rem;
animation: toastIn 0.3s ease;
display: flex;
align-items: center;
gap: var(--space-md);
}
.toast.success { border-color: var(--success); }
.toast.error { border-color: var(--danger); }
.toast.info { border-color: var(--info); }
@keyframes toastIn {
from { opacity: 0; transform: translateX(100px); }
to { opacity: 1; transform: translateX(0); }
}
/* Formatted Response */
.formatted-response {
display: flex;
flex-direction: column;
gap: var(--space-md);
}
.response-section {
background: var(--bg-tertiary);
border-radius: var(--radius-md);
padding: var(--space-md);
}
.response-section h4 {
font-size: 0.85rem;
color: var(--accent-cyan);
margin-bottom: var(--space-sm);
display: flex;
align-items: center;
gap: var(--space-sm);
}
.response-row {
display: flex;
justify-content: space-between;
padding: 4px 0;
font-size: 0.85rem;
}
.response-row .label {
color: var(--text-muted);
}
.response-row .value {
font-family: var(--font-mono);
color: var(--text-primary);
}
.response-row .value.success { color: var(--success); }
.response-row .value.danger { color: var(--danger); }
.response-row .value.accent { color: var(--accent-cyan); }
.reply-box {
background: var(--bg-input);
border-radius: var(--radius-sm);
padding: var(--space-md);
border-left: 3px solid var(--accent-purple);
font-style: italic;
color: var(--text-secondary);
}
/* Scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--bg-tertiary);
}
::-webkit-scrollbar-thumb {
background: var(--border-color);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-muted);
}
/* Responsive */
@media (max-width: 1200px) {
.content-grid,
.multi-layout {
grid-template-columns: 1fr;
}
.checklist-grid {
grid-template-columns: 1fr;
}
.rules-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 768px) {
.sidebar {
display: none;
}
}