visionquery / style.css
Saptadip Saha
Initial deploy
070500c
/* ═══════════════════════════════════════════════════════
VisionQuery AI β€” Taipy Custom Styles
═══════════════════════════════════════════════════════ */
/* ── Fonts & Base ──────────────────────────────────────── */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
body, .taipy-gui {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
background: linear-gradient(135deg, #f0f4ff 0%, #faf5ff 100%) !important;
min-height: 100vh;
}
/* ── Navigation ─────────────────────────────────────────── */
.taipy-navbar {
background: linear-gradient(90deg, #3730a3 0%, #6d28d9 100%) !important;
box-shadow: 0 2px 20px rgba(55, 48, 163, 0.35) !important;
padding: 0.5rem 2rem !important;
}
.taipy-navbar a {
color: rgba(255,255,255,0.85) !important;
font-weight: 500 !important;
letter-spacing: 0.02em !important;
font-size: 0.95rem !important;
transition: color 0.2s ease !important;
}
.taipy-navbar a:hover,
.taipy-navbar a.active {
color: #ffffff !important;
background: rgba(255,255,255,0.15) !important;
border-radius: 6px !important;
}
/* ── Page Header ─────────────────────────────────────────── */
.page-header {
text-align: center;
padding: 2.5rem 1rem 1.5rem !important;
}
.page-header h1 {
font-size: 2.4rem !important;
font-weight: 700 !important;
background: linear-gradient(135deg, #3730a3, #7c3aed) !important;
-webkit-background-clip: text !important;
-webkit-text-fill-color: transparent !important;
background-clip: text !important;
margin-bottom: 0.3rem !important;
}
.page-header h3 {
font-size: 1rem !important;
color: #64748b !important;
font-weight: 400 !important;
}
/* ── Main Layout ─────────────────────────────────────────── */
.main-layout {
max-width: 1300px;
margin: 0 auto;
padding: 0 1.5rem 2rem !important;
}
/* ── Cards ───────────────────────────────────────────────── */
.card, .panel {
background: #ffffff !important;
border-radius: 16px !important;
padding: 1.75rem !important;
box-shadow: 0 4px 24px rgba(0,0,0,0.07) !important;
border: 1px solid rgba(226,232,240,0.8) !important;
}
/* ── Upload Area ─────────────────────────────────────────── */
.upload-btn button,
.taipy-file-selector button {
background: linear-gradient(135deg, #6366f1, #8b5cf6) !important;
color: white !important;
border: none !important;
border-radius: 10px !important;
padding: 0.65rem 1.5rem !important;
font-weight: 600 !important;
font-size: 0.95rem !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
width: 100% !important;
margin-bottom: 1rem !important;
}
.upload-btn button:hover {
transform: translateY(-1px) !important;
box-shadow: 0 6px 20px rgba(99, 102, 241, 0.4) !important;
}
/* ── Image Preview ───────────────────────────────────────── */
.preview-img img {
border-radius: 12px !important;
max-height: 280px !important;
object-fit: contain !important;
background: #f8fafc !important;
border: 1px solid #e2e8f0 !important;
width: 100% !important;
margin: 0.75rem 0 !important;
}
/* ── Label Input ─────────────────────────────────────────── */
.fullwidth,
.label-input {
width: 100% !important;
}
.label-input textarea,
.label-input .taipy-input textarea {
width: 100% !important;
border-radius: 10px !important;
border: 2px solid #e2e8f0 !important;
padding: 0.75rem 1rem !important;
font-size: 0.9rem !important;
font-family: inherit !important;
transition: border-color 0.2s ease !important;
resize: vertical !important;
}
.label-input textarea:focus {
border-color: #6366f1 !important;
outline: none !important;
}
/* ── Analyze Button ──────────────────────────────────────── */
.analyze-btn button {
background: linear-gradient(135deg, #4f46e5, #7c3aed) !important;
color: white !important;
border-radius: 10px !important;
padding: 0.8rem 1.5rem !important;
font-size: 1rem !important;
font-weight: 700 !important;
letter-spacing: 0.02em !important;
width: 100% !important;
border: none !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
margin-top: 0.5rem !important;
margin-bottom: 0.4rem !important;
}
.analyze-btn button:hover:not(:disabled) {
transform: translateY(-2px) !important;
box-shadow: 0 8px 25px rgba(79, 70, 229, 0.45) !important;
}
.analyze-btn button:disabled {
opacity: 0.65 !important;
cursor: not-allowed !important;
}
/* ── Reset Button ────────────────────────────────────────── */
.reset-btn button {
background: transparent !important;
color: #64748b !important;
border: 1.5px solid #e2e8f0 !important;
border-radius: 10px !important;
padding: 0.6rem 1.5rem !important;
font-size: 0.9rem !important;
font-weight: 500 !important;
width: 100% !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
}
.reset-btn button:hover {
border-color: #94a3b8 !important;
background: #f8fafc !important;
}
/* ── Status Text ─────────────────────────────────────────── */
.status-text p, .status-text span {
font-size: 0.9rem !important;
color: #475569 !important;
font-weight: 500 !important;
margin-top: 0.75rem !important;
}
.model-tag p, .model-tag span {
font-size: 0.78rem !important;
color: #94a3b8 !important;
font-family: 'SFMono-Regular', Consolas, monospace !important;
margin-top: 0.25rem !important;
}
/* ── Winner Card ─────────────────────────────────────────── */
.winner-card {
background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%) !important;
border-radius: 14px !important;
padding: 1.25rem 1.5rem !important;
margin-bottom: 1.25rem !important;
border: none !important;
color: white !important;
box-shadow: 0 6px 24px rgba(79, 70, 229, 0.35) !important;
}
.winner-card p,
.winner-card span,
.winner-card h1,
.winner-card h2,
.winner-card h3 {
color: white !important;
}
.winner-label p, .winner-label span {
font-size: 1.4rem !important;
font-weight: 700 !important;
color: white !important;
text-transform: capitalize !important;
}
.winner-score p, .winner-score span {
font-size: 2rem !important;
font-weight: 800 !important;
color: #fbbf24 !important;
}
/* ── Score Table ─────────────────────────────────────────── */
.score-table {
margin-top: 1rem !important;
}
.score-table .taipy-table table {
border-radius: 10px !important;
overflow: hidden !important;
font-size: 0.88rem !important;
}
.score-table .taipy-table thead th {
background: #4f46e5 !important;
color: white !important;
font-weight: 600 !important;
padding: 0.65rem 1rem !important;
}
.score-table .taipy-table tbody tr:nth-child(even) {
background: #f8fafc !important;
}
.score-table .taipy-table tbody tr:hover {
background: #eef2ff !important;
}
/* ── About Page Cards ────────────────────────────────────── */
.problem-card {
border-left: 4px solid #ef4444 !important;
}
.solution-card {
border-left: 4px solid #22c55e !important;
}
.tech-card {
border-top: 3px solid #6366f1 !important;
text-align: center !important;
}
.use-card {
border-radius: 12px !important;
border-top: 3px solid #8b5cf6 !important;
}
.use-card h3 {
font-size: 1rem !important;
margin-bottom: 0.5rem !important;
}
/* ── Tables (About page) ─────────────────────────────────── */
table {
width: 100% !important;
border-collapse: collapse !important;
}
table th {
background: #f1f5f9 !important;
font-weight: 600 !important;
padding: 0.6rem 1rem !important;
text-align: left !important;
}
table td {
padding: 0.55rem 1rem !important;
border-bottom: 1px solid #e2e8f0 !important;
}
/* ── Dividers ────────────────────────────────────────────── */
hr {
border: none !important;
border-top: 1px solid #e2e8f0 !important;
margin: 1.5rem 0 !important;
}
/* ── Headings ────────────────────────────────────────────── */
h2 { color: #1e293b !important; font-size: 1.35rem !important; font-weight: 700 !important; }
h3 { color: #334155 !important; font-size: 1.05rem !important; font-weight: 600 !important; }
h4 { color: #475569 !important; font-size: 0.9rem !important; font-weight: 600 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; }
/* ── Responsive ──────────────────────────────────────────── */
@media (max-width: 768px) {
.page-header h1 { font-size: 1.8rem !important; }
.main-layout { padding: 0 0.75rem 1.5rem !important; }
.card, .panel { padding: 1.25rem !important; }
}