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; | |
} | |
} |