diff --git a/css/styles.css b/css/styles.css index a4ae0bc..e351dd8 100644 --- a/css/styles.css +++ b/css/styles.css @@ -475,6 +475,394 @@ input.invalid { } } +/* Tab Navigation */ +.tab-navigation { + display: flex; + gap: 0; + margin-top: 20px; + border-bottom: 2px solid #FFC407; +} + +.tab { + padding: 12px 24px; + background-color: transparent; + color: #000000; + text-decoration: none; + font-weight: 600; + font-size: 14px; + border: none; + border-bottom: 3px solid transparent; + cursor: pointer; + transition: all 0.3s ease; + margin-bottom: -2px; +} + +.tab:hover { + background-color: rgba(255, 196, 7, 0.1); +} + +.tab.active { + color: #FFC407; + border-bottom-color: #FFC407; + background-color: rgba(255, 196, 7, 0.05); +} + +/* Global to Local Styles */ +.g2l-container { + max-width: 1200px; + margin: 0 auto; +} + +.upload-section, +.progress-section, +.preview-section { + background-color: #ffffff; + padding: 40px; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(255, 196, 7, 0.3); + margin-bottom: 30px; +} + +.upload-section h2, +.progress-section h2, +.preview-section h2 { + color: #000000; + font-size: 22px; + margin-bottom: 10px; +} + +.section-description { + color: #666; + font-size: 14px; + margin-bottom: 30px; +} + +/* Upload Dropzone */ +.upload-dropzone { + border: 3px dashed #FFC407; + border-radius: 10px; + padding: 60px 40px; + text-align: center; + cursor: pointer; + transition: all 0.3s ease; + margin-bottom: 20px; +} + +.upload-dropzone:hover { + border-color: #000000; + background-color: rgba(255, 196, 7, 0.05); +} + +.upload-dropzone.dragover { + border-color: #000000; + background-color: rgba(255, 196, 7, 0.1); + transform: scale(1.02); +} + +.dropzone-text { + color: #000000; + font-size: 16px; + font-weight: 600; + margin-top: 20px; +} + +.dropzone-limit { + color: #999; + font-size: 12px; + margin-top: 8px; +} + +/* File Info Display */ +.file-info { + display: flex; + align-items: center; + gap: 15px; + padding: 15px; + background-color: #f9f9f9; + border: 2px solid #FFC407; + border-radius: 8px; + margin-bottom: 20px; +} + +.file-icon { + font-size: 32px; +} + +.file-details { + flex: 1; +} + +.file-name { + font-weight: 600; + color: #000000; + font-size: 14px; + margin-bottom: 4px; +} + +.file-size { + color: #666; + font-size: 12px; +} + +.remove-file-btn { + background: none; + border: none; + color: #ff4444; + font-size: 24px; + cursor: pointer; + padding: 5px 10px; + transition: transform 0.2s ease; +} + +.remove-file-btn:hover { + transform: scale(1.2); +} + +/* Progress Tracker */ +.progress-tracker { + display: flex; + flex-direction: column; + gap: 15px; +} + +.progress-step { + display: flex; + align-items: flex-start; + gap: 15px; + padding: 15px; + background-color: #f9f9f9; + border-radius: 8px; + border-left: 4px solid #ddd; + transition: all 0.3s ease; +} + +.progress-step.pending { + border-left-color: #ddd; + opacity: 0.6; +} + +.progress-step.processing { + border-left-color: #FFC407; + background-color: rgba(255, 196, 7, 0.1); + animation: pulse 2s infinite; +} + +.progress-step.success { + border-left-color: #4CAF50; + background-color: rgba(76, 175, 80, 0.05); +} + +.progress-step.warning { + border-left-color: #ff9800; + background-color: rgba(255, 152, 0, 0.05); +} + +.progress-step.error { + border-left-color: #ff4444; + background-color: rgba(255, 68, 68, 0.05); +} + +.step-icon { + font-size: 24px; + min-width: 30px; + text-align: center; +} + +.step-content { + flex: 1; +} + +.step-title { + font-weight: 700; + color: #000000; + font-size: 15px; + margin-bottom: 4px; +} + +.step-message { + color: #666; + font-size: 13px; +} + +/* Alert Cards */ +#alertsContainer { + margin-top: 30px; +} + +.alert-card { + padding: 20px; + border-radius: 8px; + margin-bottom: 15px; + border-left: 5px solid; +} + +.alert-card.error { + background-color: rgba(255, 68, 68, 0.1); + border-left-color: #ff4444; +} + +.alert-card.warning { + background-color: rgba(255, 152, 0, 0.1); + border-left-color: #ff9800; +} + +.alert-card.success { + background-color: rgba(76, 175, 80, 0.1); + border-left-color: #4CAF50; +} + +.alert-header { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 12px; +} + +.alert-icon { + font-size: 24px; +} + +.alert-title { + font-weight: 700; + font-size: 16px; + color: #000000; +} + +.alert-message { + color: #333; + font-size: 14px; + margin-bottom: 10px; + line-height: 1.5; +} + +.alert-details { + background-color: rgba(0, 0, 0, 0.05); + padding: 10px; + border-radius: 5px; + font-family: 'Courier New', monospace; + font-size: 12px; + color: #333; + margin-bottom: 10px; + overflow-x: auto; +} + +.alert-action { + color: #000000; + font-weight: 600; + font-size: 13px; + margin-top: 10px; +} + +.alert-action::before { + content: '→ '; + color: #FFC407; + font-weight: 700; +} + +/* Preview Styles */ +.preview-summary { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 20px; + margin-bottom: 30px; +} + +.summary-card { + background-color: #f9f9f9; + padding: 20px; + border-radius: 8px; + border-left: 4px solid #FFC407; +} + +.summary-label { + font-size: 12px; + color: #666; + text-transform: uppercase; + margin-bottom: 8px; + font-weight: 600; +} + +.summary-value { + font-size: 24px; + color: #000000; + font-weight: 700; +} + +.preview-table-container { + max-height: 500px; + overflow: auto; + border: 2px solid #FFC407; + border-radius: 8px; + margin-bottom: 30px; +} + +.preview-table { + width: 100%; + border-collapse: collapse; + font-size: 13px; +} + +.preview-table th { + position: sticky; + top: 0; + background-color: #000000; + color: #FFC407; + padding: 12px 10px; + text-align: left; + font-weight: 700; + border-bottom: 2px solid #FFC407; + z-index: 10; +} + +.preview-table td { + padding: 10px; + border-bottom: 1px solid #eee; + color: #000000; +} + +.preview-table tr:hover { + background-color: rgba(255, 196, 7, 0.05); +} + +.preview-actions { + display: flex; + gap: 15px; + justify-content: flex-end; +} + +.action-btn { + padding: 12px 24px; + border-radius: 5px; + font-family: 'Montserrat', sans-serif; + font-size: 14px; + font-weight: 700; + cursor: pointer; + transition: all 0.3s ease; + border: 2px solid; +} + +.download-btn { + background-color: #ffffff; + color: #000000; + border-color: #FFC407; +} + +.download-btn:hover { + background-color: #FFC407; + color: #000000; +} + +.cancel-btn { + background-color: #ffffff; + color: #ff4444; + border-color: #ff4444; +} + +.cancel-btn:hover { + background-color: #ff4444; + color: #ffffff; +} + /* Responsive Design */ @media (max-width: 1024px) { .main-container { @@ -484,6 +872,14 @@ input.invalid { .preview-column { order: -1; } + + .preview-actions { + flex-direction: column; + } + + .action-btn { + width: 100%; + } } @media (max-width: 768px) { @@ -497,4 +893,17 @@ input.invalid { .preview-column { padding: 20px; } + + .tab-navigation { + width: 100%; + } + + .tab { + flex: 1; + text-align: center; + } + + .preview-summary { + grid-template-columns: 1fr; + } } diff --git a/global-to-local.php b/global-to-local.php new file mode 100644 index 0000000..50c343a --- /dev/null +++ b/global-to-local.php @@ -0,0 +1,140 @@ +requireAuth(); + +$pageTitle = 'Global to Local - L\'Oréal Box'; + +// Include shared header +require_once __DIR__ . '/header.php'; +?> + +
Upload a global campaign CSV file to transform it into regional market CSVs.
+ + +