* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; padding: 20px; } .container { max-width: 1200px; margin: 0 auto; background: white; border-radius: 16px; box-shadow: 0 20px 60px rgba(0,0,0,0.3); overflow: hidden; } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; } .header h1 { font-size: 2em; margin-bottom: 10px; } .content { padding: 30px; } .upload-section { border: 3px dashed #667eea; border-radius: 12px; padding: 40px; text-align: center; margin-bottom: 30px; background: #f8f9ff; transition: all 0.3s; } .upload-section:hover { border-color: #764ba2; background: #f0f2ff; } .upload-section input[type="file"] { display: none; } .upload-button { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px 40px; border: none; border-radius: 8px; font-size: 1.1em; cursor: pointer; transition: transform 0.2s; } .upload-button:hover:not(:disabled) { transform: translateY(-2px); } .upload-button:disabled { opacity: 0.5; cursor: not-allowed; background: #ccc; } .status { margin: 20px 0; padding: 15px; border-radius: 8px; text-align: center; font-weight: 500; } .status.waiting { background: #fff3cd; color: #856404; } .status.ready { background: #d4edda; color: #155724; } .status.signed { background: #d1ecf1; color: #0c5460; } .connection-status { text-align: center; margin: 20px 0; padding: 20px; background: #f8f9fa; border-radius: 12px; } .status-indicator { display: inline-block; width: 12px; height: 12px; border-radius: 50%; margin-right: 8px; animation: pulse 2s infinite; } .status-indicator.connected { background: #28a745; } .status-indicator.disconnected { background: #dc3545; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .page-navigation { display: flex; justify-content: center; align-items: center; gap: 20px; margin: 20px 0; padding: 15px; background: linear-gradient(135deg, #667eea15 0%, #764ba215 100%); border-radius: 12px; border: 2px solid #667eea; flex-wrap: wrap; } .nav-button { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; padding: 10px 20px; border-radius: 8px; cursor: pointer; font-size: 1em; font-weight: 500; transition: all 0.2s; } .nav-button:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4); } .nav-button:disabled { opacity: 0.3; cursor: not-allowed; } #pageInfo { font-weight: bold; font-size: 1.2em; color: #667eea; min-width: 150px; text-align: center; } .page-jump { display: flex; align-items: center; gap: 8px; margin-left: 10px; padding-left: 15px; border-left: 2px solid rgba(102, 126, 234, 0.3); } #jumpToPageInput { width: 60px; padding: 8px; border: 2px solid #667eea; border-radius: 6px; text-align: center; font-size: 1em; font-weight: 500; color: #667eea; } #jumpToPageInput:focus { outline: none; border-color: #764ba2; box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2); } .page-selector label { display: inline-flex; align-items: center; gap: 5px; padding: 8px 12px; background: white; border-radius: 6px; border: 2px solid #667eea; transition: all 0.2s; } .page-selector label:hover { background: #667eea15; } .page-selector input[type="checkbox"] { width: 18px; height: 18px; cursor: pointer; } .pdf-preview { margin-top: 30px; border: 2px solid #e0e0e0; border-radius: 12px; overflow: hidden; position: relative; } .pdf-preview.scrollable { max-height: 70vh; overflow-y: auto; } .pdf-preview canvas { width: 100%; display: block; margin: 10px 0; } .pdf-page-separator { text-align: center; margin: 15px 0; padding: 8px; background: linear-gradient(135deg, #667eea15 0%, #764ba215 100%); border-radius: 6px; font-weight: bold; color: #667eea; font-size: 0.9em; } .signature-placeholder { background: white; border: 2px dashed #667eea; border-radius: 8px; padding: 12px; margin-bottom: 15px; text-align: center; box-shadow: 0 2px 8px rgba(0,0,0,0.1); max-width: 400px; margin-left: auto; margin-right: auto; } .placeholder-content { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; } .placeholder-icon { font-size: 1.8em; opacity: 0.7; } .placeholder-text { font-size: 0.9em; color: #667eea; font-weight: 500; } #placeholderSignatureImage { max-width: 200px; max-height: 80px; width: auto; height: auto; margin-top: 8px; } .signature-overlay { position: absolute; border: 3px dashed #667eea; background: rgba(255, 255, 255, 0.9); padding: 10px; cursor: move; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.2); display: none; z-index: 10; } .signature-overlay.show { display: block; } .signature-overlay img { display: block; max-width: 300px; height: auto; pointer-events: none; } .signature-overlay .text-overlay-content { position: absolute; top: 5px; left: 5px; font-size: 14px; color: #333; background: rgba(255, 255, 255, 0.9); padding: 5px 10px; border-radius: 4px; pointer-events: none; max-width: calc(100% - 20px); word-wrap: break-word; z-index: 11; } .signature-overlay .handle { position: absolute; top: -10px; right: -10px; background: #667eea; color: white; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 18px; } .signature-overlay .resize-handle { position: absolute; bottom: 5px; right: 5px; width: 20px; height: 20px; background: #667eea; cursor: nwse-resize; border-radius: 3px; } .text-input-section { margin-bottom: 30px; padding: 20px; background: #f8f9ff; border-radius: 12px; border: 2px solid #667eea; } .signature-controls { margin-top: 20px; padding: 15px; background: #f8f9fa; border-radius: 8px; display: none; } .signature-controls.show { display: block; } .signature-controls p { margin-bottom: 15px; color: #666; } .download-button { background: #28a745; color: white; padding: 15px 40px; border: none; border-radius: 8px; font-size: 1.1em; cursor: pointer; margin-top: 20px; transition: transform 0.2s; } .download-button:hover { transform: translateY(-2px); } .download-button:disabled { background: #ccc; cursor: not-allowed; } .discard-button { background: #dc3545; color: white; padding: 15px 40px; border: none; border-radius: 8px; font-size: 1.1em; cursor: pointer; margin-top: 20px; transition: transform 0.2s; } .discard-button:hover { transform: translateY(-2px); background: #c82333; }