Spaces:
Running
Running
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; | |
| } | |
| body { | |
| background-color: #f5f5f5; | |
| color: #333; | |
| line-height: 1.6; | |
| } | |
| .container { | |
| max-width: 900px; | |
| margin: 2rem auto; | |
| padding: 2rem; | |
| background-color: #fff; | |
| border-radius: 10px; | |
| box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); | |
| } | |
| h1 { | |
| text-align: center; | |
| margin-bottom: 2rem; | |
| color: #2c3e50; | |
| } | |
| h2 { | |
| color: #3498db; | |
| margin-bottom: 1rem; | |
| } | |
| h3 { | |
| color: #2c3e50; | |
| margin-bottom: 0.8rem; | |
| } | |
| .upload-section { | |
| margin-bottom: 2rem; | |
| text-align: center; | |
| } | |
| .upload-label { | |
| display: inline-block; | |
| padding: 12px 24px; | |
| background-color: #3498db; | |
| color: white; | |
| border-radius: 5px; | |
| cursor: pointer; | |
| transition: background-color 0.3s; | |
| } | |
| .upload-label:hover { | |
| background-color: #2980b9; | |
| } | |
| input[type="file"] { | |
| display: none; | |
| } | |
| .preview-section { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 2rem; | |
| margin-bottom: 2rem; | |
| } | |
| .image-preview, .result-section { | |
| flex: 1; | |
| min-width: 300px; | |
| } | |
| #scanner-container { | |
| position: relative; | |
| max-width: 100%; | |
| margin-top: 1rem; | |
| border-radius: 5px; | |
| overflow: hidden; | |
| box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); | |
| } | |
| #preview { | |
| max-width: 100%; | |
| display: block; | |
| } | |
| #scanCanvas { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| z-index: 10; | |
| pointer-events: none; | |
| } | |
| #status { | |
| margin-bottom: 1rem; | |
| padding: 10px; | |
| background-color: #f8f9fa; | |
| border-radius: 5px; | |
| font-style: italic; | |
| } | |
| #result { | |
| padding: 15px; | |
| background-color: #e9f7fe; | |
| border-radius: 5px; | |
| border-left: 4px solid #3498db; | |
| word-break: break-all; | |
| min-height: 50px; | |
| white-space: pre-line; | |
| } | |
| .info-section, .troubleshooting-section { | |
| margin-top: 2rem; | |
| padding: 1.5rem; | |
| background-color: #f8f9fa; | |
| border-radius: 5px; | |
| } | |
| .info-section { | |
| border-left: 4px solid #2c3e50; | |
| } | |
| .troubleshooting-section { | |
| border-left: 4px solid #e74c3c; | |
| margin-top: 1.5rem; | |
| } | |
| .info-section ul, .troubleshooting-section ol { | |
| margin-left: 1.5rem; | |
| margin-top: 0.5rem; | |
| } | |
| .info-section p, .troubleshooting-section p { | |
| margin-bottom: 0.5rem; | |
| } | |
| .troubleshooting-section li { | |
| margin-bottom: 0.5rem; | |
| } | |
| .troubleshooting-section strong { | |
| color: #e74c3c; | |
| } | |
| /* Security warning */ | |
| .security-warning { | |
| background-color: #fff3cd; | |
| color: #856404; | |
| padding: 15px; | |
| margin-bottom: 20px; | |
| border-radius: 5px; | |
| border-left: 4px solid #ffc107; | |
| font-size: 0.95rem; | |
| line-height: 1.5; | |
| } | |
| .security-warning strong { | |
| color: #e67e22; | |
| } | |
| /* Camera styles */ | |
| .camera-controls { | |
| display: flex; | |
| justify-content: center; | |
| gap: 10px; | |
| margin: 1rem 0; | |
| } | |
| .camera-controls button { | |
| padding: 10px 20px; | |
| background-color: #3498db; | |
| color: white; | |
| border: none; | |
| border-radius: 5px; | |
| cursor: pointer; | |
| transition: background-color 0.3s; | |
| font-size: 1rem; | |
| } | |
| .camera-controls button:hover { | |
| background-color: #2980b9; | |
| } | |
| .camera-controls button:disabled { | |
| background-color: #95a5a6; | |
| cursor: not-allowed; | |
| } | |
| #stop-camera { | |
| background-color: #e74c3c; | |
| } | |
| #stop-camera:hover { | |
| background-color: #c0392b; | |
| } | |
| #switch-camera { | |
| background-color: #2ecc71; | |
| } | |
| #switch-camera:hover { | |
| background-color: #27ae60; | |
| } | |
| #focus-mode { | |
| background-color: #9b59b6; | |
| } | |
| #focus-mode:hover { | |
| background-color: #8e44ad; | |
| } | |
| #focus-mode.active { | |
| background-color: #e74c3c; | |
| } | |
| #focus-mode.active:hover { | |
| background-color: #c0392b; | |
| } | |
| #capture-image { | |
| background-color: #f39c12; | |
| } | |
| #capture-image:hover { | |
| background-color: #e67e22; | |
| } | |
| #retry-permission { | |
| background-color: #f39c12; | |
| margin-top: 10px; | |
| } | |
| #retry-permission:hover { | |
| background-color: #d35400; | |
| } | |
| .return-to-camera-btn { | |
| display: block; | |
| margin: 15px auto; | |
| padding: 10px 20px; | |
| background-color: #3498db; | |
| color: white; | |
| border: none; | |
| border-radius: 5px; | |
| cursor: pointer; | |
| transition: background-color 0.3s; | |
| font-size: 1rem; | |
| } | |
| .return-to-camera-btn:hover { | |
| background-color: #2980b9; | |
| } | |
| .camera-container { | |
| position: relative; | |
| width: 100%; | |
| max-width: 640px; | |
| margin: 0 auto 1rem; | |
| border-radius: 5px; | |
| overflow: hidden; | |
| box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); | |
| } | |
| #camera-feed { | |
| width: 100%; | |
| display: block; | |
| } | |
| /* Scanning indicator and animation */ | |
| .scan-indicator { | |
| position: absolute; | |
| top: 10px; | |
| right: 10px; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 50%; | |
| background-color: #e74c3c; | |
| box-shadow: 0 0 5px rgba(231, 76, 60, 0.7); | |
| z-index: 20; | |
| } | |
| .scan-indicator.pulse { | |
| animation: pulse 0.2s ease-out; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| transform: scale(1); | |
| opacity: 1; | |
| } | |
| 50% { | |
| transform: scale(1.5); | |
| opacity: 0.7; | |
| } | |
| 100% { | |
| transform: scale(1); | |
| opacity: 1; | |
| } | |
| } | |
| /* Scanning animation */ | |
| .camera-container::after { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 3px; | |
| background: linear-gradient(to right, transparent, #3498db, transparent); | |
| animation: scanner-animation 2s linear infinite; | |
| z-index: 15; | |
| opacity: 0.7; | |
| } | |
| @keyframes scanner-animation { | |
| 0% { | |
| top: 0; | |
| } | |
| 50% { | |
| top: 100%; | |
| } | |
| 50.1% { | |
| top: 0; | |
| } | |
| 100% { | |
| top: 100%; | |
| } | |
| } | |
| /* Enhancement toggle */ | |
| .enhancement-toggle-container { | |
| display: flex; | |
| align-items: center; | |
| margin-top: 10px; | |
| padding: 8px 12px; | |
| background-color: #f8f9fa; | |
| border-radius: 5px; | |
| border-left: 3px solid #3498db; | |
| } | |
| #enhancement-toggle { | |
| margin-right: 10px; | |
| width: 18px; | |
| height: 18px; | |
| cursor: pointer; | |
| } | |
| .enhancement-toggle-container label { | |
| font-size: 0.9rem; | |
| cursor: pointer; | |
| } | |
| /* Debug mode */ | |
| .debug-toggle-container { | |
| background-color: #f8f9fa; | |
| border-left: 3px solid #e74c3c; | |
| } | |
| .debug-info { | |
| margin-top: 15px; | |
| padding: 10px; | |
| background-color: #2c3e50; | |
| color: #ecf0f1; | |
| border-radius: 5px; | |
| font-family: monospace; | |
| font-size: 0.85rem; | |
| max-height: 300px; | |
| overflow-y: auto; | |
| } | |
| .debug-entry { | |
| padding: 5px 0; | |
| border-bottom: 1px solid #34495e; | |
| } | |
| .debug-entry:first-child { | |
| border-top: 1px solid #34495e; | |
| } | |
| .debug-entry strong { | |
| color: #3498db; | |
| } | |
| .debug-entry ul { | |
| margin: 5px 0 5px 20px; | |
| padding: 0; | |
| list-style-type: none; | |
| } | |
| .debug-entry li { | |
| margin: 2px 0; | |
| } | |
| /* Focus mode styles */ | |
| .focus-mode-active .camera-container { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| max-width: none; | |
| margin: 0; | |
| z-index: 1000; | |
| border-radius: 0; | |
| } | |
| .focus-mode-active #camera-feed { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| } | |
| .focus-mode-active .camera-controls { | |
| position: fixed; | |
| bottom: 20px; | |
| left: 0; | |
| right: 0; | |
| z-index: 1001; | |
| background-color: rgba(0, 0, 0, 0.5); | |
| padding: 10px; | |
| border-radius: 0; | |
| } | |
| .focus-mode-active .enhancement-toggle-container, | |
| .focus-mode-active .debug-toggle-container { | |
| display: none; | |
| } | |
| .focus-mode-active #status { | |
| position: fixed; | |
| top: 20px; | |
| left: 0; | |
| right: 0; | |
| z-index: 1001; | |
| background-color: rgba(0, 0, 0, 0.5); | |
| color: white; | |
| border-radius: 0; | |
| text-align: center; | |
| margin: 0 auto; | |
| max-width: 80%; | |
| } | |
| .focus-mode-active .scan-indicator { | |
| width: 16px; | |
| height: 16px; | |
| } | |
| .focus-mode-active .scan-indicator.pulse { | |
| animation: focus-pulse 0.2s ease-out; | |
| } | |
| @keyframes focus-pulse { | |
| 0% { | |
| transform: scale(1); | |
| opacity: 1; | |
| } | |
| 50% { | |
| transform: scale(2); | |
| opacity: 0.7; | |
| } | |
| 100% { | |
| transform: scale(1); | |
| opacity: 1; | |
| } | |
| } | |
| @media (max-width: 768px) { | |
| .container { | |
| padding: 1rem; | |
| margin: 1rem; | |
| } | |
| .preview-section { | |
| flex-direction: column; | |
| } | |
| .camera-controls { | |
| flex-direction: column; | |
| align-items: center; | |
| } | |
| .camera-controls button { | |
| width: 100%; | |
| max-width: 300px; | |
| } | |
| } |