Spaces:
Sleeping
Sleeping
VarunRS5457
Add HF Spaces deployment, batch processing, session cleanup, and UI enhancements
436fb0c | <html lang="en" class="h-full"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>{% block title %}Aseesa Ingestion Agent{% endblock %}</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://unpkg.com/htmx.org@2.0.4"></script> | |
| <script> | |
| tailwind.config = { | |
| theme: { | |
| extend: { | |
| colors: { | |
| brand: { | |
| 50: '#f0f7ff', | |
| 100: '#e0effe', | |
| 200: '#bae0fd', | |
| 300: '#7cc8fb', | |
| 400: '#36adf6', | |
| 500: '#0c93e7', | |
| 600: '#0074c5', | |
| 700: '#015da0', | |
| 800: '#065084', | |
| 900: '#0b436d', | |
| 950: '#072b49', | |
| } | |
| } | |
| } | |
| } | |
| } | |
| </script> | |
| <style> | |
| @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); | |
| body { font-family: 'Inter', sans-serif; } | |
| .drop-zone { | |
| transition: all 0.3s ease; | |
| } | |
| .drop-zone.dragover { | |
| border-color: #0c93e7; | |
| background-color: #f0f7ff; | |
| transform: scale(1.01); | |
| } | |
| .fade-in { | |
| animation: fadeIn 0.4s ease-out; | |
| } | |
| @keyframes fadeIn { | |
| from { opacity: 0; transform: translateY(10px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| .slide-up { | |
| animation: slideUp 0.5s ease-out; | |
| } | |
| @keyframes slideUp { | |
| from { opacity: 0; transform: translateY(30px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| .htmx-indicator { | |
| display: none; | |
| } | |
| .htmx-request .htmx-indicator { | |
| display: inline-flex; | |
| } | |
| .htmx-request.htmx-indicator { | |
| display: inline-flex; | |
| } | |
| .spinner { | |
| animation: spin 1s linear infinite; | |
| } | |
| @keyframes spin { | |
| from { transform: rotate(0deg); } | |
| to { transform: rotate(360deg); } | |
| } | |
| .classification-btn { | |
| transition: all 0.2s ease; | |
| } | |
| .classification-btn:hover { | |
| transform: translateY(-1px); | |
| box-shadow: 0 4px 12px rgba(0,0,0,0.1); | |
| } | |
| .classification-btn.selected { | |
| ring: 2px; | |
| transform: scale(1.02); | |
| } | |
| </style> | |
| </head> | |
| <body class="h-full bg-gray-50"> | |
| <!-- Nav --> | |
| <nav class="bg-white border-b border-gray-200 sticky top-0 z-50"> | |
| <div class="max-w-6xl mx-auto px-6 py-4 flex items-center justify-between"> | |
| <a href="/" class="flex items-center gap-3"> | |
| <div class="w-8 h-8 bg-brand-600 rounded-lg flex items-center justify-center"> | |
| <svg class="w-5 h-5 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 7v10c0 2 1 3 3 3h10c2 0 3-1 3-3V7c0-2-1-3-3-3H7C5 4 4 5 4 7z"/> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6M12 9v6"/> | |
| </svg> | |
| </div> | |
| <span class="text-lg font-semibold text-gray-900">Aseesa Ingestion Agent</span> | |
| </a> | |
| <div class="flex items-center gap-6 text-sm"> | |
| <a href="/" class="text-gray-600 hover:text-brand-600 transition-colors">Upload</a> | |
| <a href="/ui/batch" class="text-gray-600 hover:text-brand-600 transition-colors">Batch</a> | |
| <a href="/health" class="text-gray-600 hover:text-brand-600 transition-colors">API Health</a> | |
| </div> | |
| </div> | |
| </nav> | |
| <!-- Content --> | |
| <main class="{% block main_class %}max-w-6xl mx-auto px-6 py-8{% endblock %}"> | |
| {% block content %}{% endblock %} | |
| </main> | |
| <!-- Footer (hidden when page uses full-height layout) --> | |
| {% block footer %} | |
| <footer class="border-t border-gray-100 mt-auto"> | |
| <div class="max-w-6xl mx-auto px-6 py-4 text-center text-xs text-gray-400"> | |
| Aseesa Inc — Internal Tool — GxP Compliant | |
| </div> | |
| </footer> | |
| {% endblock %} | |
| {% block scripts %}{% endblock %} | |
| </body> | |
| </html> | |