/* ═══════════════════════════════════════════════════════ 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; } }