/* ============================================================================ * Styles - Batman, Spider-Man, Aquaman Theme (Fully Responsive - Enhanced) * ============================================================================ */ /* CSS Variables for better maintainability */ :root { --primary-gold: #ffd700; --primary-gold-dark: #ffaa00; --primary-blue: #00ffff; --primary-red: #ff3333; --primary-red-dark: #cc0000; --primary-green: #00ff00; --primary-green-dark: #00cc00; --primary-info: #2196F3; --primary-warning: #ff9800; --primary-error: #f44336; --primary-success: #4CAF50; --bg-dark: #0a0f1e; --bg-medium: #1a1f2f; --bg-light: #0f172a; --bg-card: rgba(0, 30, 50, 0.7); --bg-overlay: rgba(0, 0, 0, 0.5); --bg-hover: rgba(255, 215, 0, 0.1); --text-primary: #fff; --text-secondary: #aaffff; --text-muted: #94a3b8; --shadow-sm: 0 2px 4px rgba(0,0,0,0.1); --shadow-md: 0 4px 6px rgba(0,0,0,0.1); --shadow-lg: 0 10px 15px rgba(0,0,0,0.1); --shadow-gold: 0 0 20px var(--primary-gold); --shadow-blue: 0 0 20px var(--primary-blue); --shadow-red: 0 0 20px var(--primary-red); --transition-fast: 0.2s ease; --transition-normal: 0.3s ease; --transition-slow: 0.5s ease; --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 12px; --spacing-lg: 16px; --spacing-xl: 20px; --spacing-xxl: 30px; --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 20px; --radius-xxl: 30px; --radius-full: 40px; --radius-circle: 50%; --font-xs: 0.75rem; --font-sm: 0.875rem; --font-md: 1rem; --font-lg: 1.125rem; --font-xl: 1.25rem; --font-xxl: 1.5rem; --font-xxxl: 2rem; --header-height: 80px; --footer-height: 50px; } /* Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } html { font-size: 16px; -webkit-text-size-adjust: 100%; scroll-behavior: smooth; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, var(--bg-dark) 0%, var(--bg-medium) 50%, var(--bg-light) 100%); color: var(--text-primary); min-height: 100vh; position: relative; overflow-x: hidden; line-height: 1.6; padding-bottom: var(--footer-height); } /* Optimized Animations */ @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes slideOut { from { transform: translateX(0); opacity: 1; } to { transform: translateX(100%); opacity: 0; } } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes batSignal { 0% { transform: rotate(0deg) scale(1); } 50% { transform: rotate(5deg) scale(1.1); } 100% { transform: rotate(0deg) scale(1); } } @keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } @keyframes oceanWaves { 0%, 100% { box-shadow: 0 0 30px rgba(0, 255, 255, 0.3), 0 0 60px rgba(255, 215, 0, 0.2); } 50% { box-shadow: 0 0 50px rgba(0, 255, 255, 0.5), 0 0 80px rgba(255, 215, 0, 0.4); } } @keyframes shine { 0% { transform: rotate(45deg) translateX(-100%); } 100% { transform: rotate(45deg) translateX(100%); } } @keyframes swingIn { 0% { transform: rotate(-10deg) scale(0.8); opacity: 0; } 50% { transform: rotate(5deg) scale(1.02); } 100% { transform: rotate(0deg) scale(1); opacity: 1; } } @keyframes wave { 0%, 100% { top: -100%; } 50% { top: 100%; } } @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes borderFlow { 0% { border-image-slice: 1; border-image-source: linear-gradient(90deg, #00ffff, #ffd700, #ff3333, #00ffff); } 100% { border-image-slice: 1; border-image-source: linear-gradient(90deg, #00ffff, #ff3333, #ffd700, #00ffff); } } @keyframes batFly { 0%, 100% { transform: scale(1) rotate(0deg); } 33% { transform: scale(1.2) rotate(10deg); } 66% { transform: scale(1.1) rotate(-10deg); } } @keyframes webSwing { 0%, 100% { transform: rotate(0deg) scale(1); } 33% { transform: rotate(10deg) scale(1.1); } 66% { transform: rotate(-10deg) scale(0.9); } } @keyframes shimmer { 0% { background-position: -1000px 0; } 100% { background-position: 1000px 0; } } /* Background Effects */ body::before { content: ''; position: fixed; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(circle at 30% 50%, rgba(10, 15, 30, 0.8) 0%, transparent 50%), repeating-linear-gradient(45deg, rgba(255, 215, 0, 0.02) 0px, rgba(255, 215, 0, 0.02) 2px, transparent 2px, transparent 8px); z-index: -1; animation: batSignal 20s linear infinite; pointer-events: none; } body::after { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: url('data:image/svg+xml;utf8,'); pointer-events: none; z-index: -1; opacity: 0.3; } /* Container */ .container { width: 100%; max-width: 1400px; margin: 0 auto; padding: var(--spacing-lg); position: relative; backdrop-filter: blur(10px); } /* Header - Enhanced for mobile */ .header { display: flex; flex-direction: column; align-items: center; text-align: center; background: linear-gradient(135deg, rgba(0, 20, 40, 0.95) 0%, rgba(0, 50, 80, 0.95) 50%, rgba(0, 30, 60, 0.95) 100%); border: 2px solid transparent; border-image: linear-gradient(45deg, var(--primary-blue), var(--primary-gold), var(--primary-red)) 1; border-radius: var(--radius-xl); padding: var(--spacing-xl); margin-bottom: var(--spacing-xl); box-shadow: 0 0 30px rgba(0, 255, 255, 0.2), 0 0 60px rgba(255, 215, 0, 0.1); position: relative; overflow: hidden; animation: oceanWaves 8s ease-in-out infinite; } @media (min-width: 768px) { .header { flex-direction: row; justify-content: space-between; text-align: left; padding: var(--spacing-xl) var(--spacing-xxl); } } .header-content { flex: 1; } .header h1 { font-size: clamp(var(--font-xxl), 5vw, var(--font-xxxl)); background: linear-gradient(45deg, var(--primary-blue), var(--primary-gold), var(--primary-red)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-size: 300% 300%; animation: gradientShift 8s ease infinite; margin-bottom: var(--spacing-xs); line-height: 1.2; word-wrap: break-word; } .header p { font-size: clamp(var(--font-sm), 2vw, var(--font-md)); opacity: 0.9; color: var(--text-secondary); } .header-actions { margin-top: var(--spacing-md); } @media (min-width: 768px) { .header-actions { margin-top: 0; margin-left: var(--spacing-xl); } } .security-badge { background: linear-gradient(135deg, #000 0%, #1a1a1a 100%); padding: var(--spacing-xs) var(--spacing-lg); border-radius: var(--radius-full); border: 2px solid var(--primary-gold); box-shadow: var(--shadow-gold); animation: pulse 2s ease-in-out infinite; font-size: clamp(var(--font-xs), 1.5vw, var(--font-sm)); font-weight: 600; display: inline-block; } /* Tabs - Enhanced for mobile */ .tabs { display: flex; flex-wrap: wrap; gap: var(--spacing-xs); margin-bottom: var(--spacing-xl); background: var(--bg-overlay); padding: var(--spacing-sm); border-radius: var(--radius-full); backdrop-filter: blur(10px); border: 1px solid rgba(255, 215, 0, 0.2); } .tab-btn { padding: var(--spacing-sm) var(--spacing-lg); background: transparent; border: none; color: var(--text-secondary); border-radius: var(--radius-full); cursor: pointer; font-size: clamp(var(--font-sm), 2vw, var(--font-md)); font-weight: 600; transition: all var(--transition-normal); flex: 1 1 auto; min-width: fit-content; white-space: nowrap; position: relative; overflow: hidden; } @media (max-width: 768px) { .tab-btn { flex: 1 1 calc(50% - var(--spacing-xs)); white-space: normal; text-align: center; padding: var(--spacing-md) var(--spacing-sm); } } @media (max-width: 480px) { .tab-btn { flex: 1 1 100%; } } .tab-btn::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: linear-gradient(45deg, transparent, rgba(255, 215, 0, 0.1), rgba(0, 255, 255, 0.1), transparent); transform: rotate(45deg); animation: shine 4s linear infinite; opacity: 0; transition: opacity 0.3s; pointer-events: none; } .tab-btn:hover::before { opacity: 1; } .tab-btn:hover { color: var(--primary-gold); transform: translateY(-1px); } .tab-btn.active { background: linear-gradient(135deg, var(--primary-gold) 0%, var(--primary-gold-dark) 100%); color: #000; box-shadow: var(--shadow-gold); border: none; } /* Tab Content */ .tab-content { display: none; background: rgba(10, 20, 30, 0.8); backdrop-filter: blur(10px); border-radius: var(--radius-xl); padding: var(--spacing-xl); border: 1px solid rgba(255, 215, 0, 0.2); animation: fadeIn var(--transition-slow); } .tab-content.active { display: block; } .tab-content h2 { font-size: clamp(var(--font-xl), 4vw, var(--font-xxl)); margin-bottom: var(--spacing-xl); color: var(--primary-gold); border-bottom: 2px solid rgba(255, 215, 0, 0.3); padding-bottom: var(--spacing-sm); } .tab-content h3 { font-size: clamp(var(--font-lg), 3vw, var(--font-xl)); margin: var(--spacing-lg) 0; color: var(--primary-blue); } .tab-content h4 { font-size: clamp(var(--font-md), 2.5vw, var(--font-lg)); color: var(--primary-red); margin-bottom: var(--spacing-sm); } /* Migration Layout - Enhanced for mobile */ .migration-layout { display: grid; grid-template-columns: 1fr; gap: var(--spacing-xl); } @media (min-width: 992px) { .migration-layout { grid-template-columns: 1fr 1fr; } } .migration-column { display: flex; flex-direction: column; gap: var(--spacing-lg); } /* Environment Layout */ .environment-layout { display: grid; grid-template-columns: 1fr; gap: var(--spacing-xl); } @media (min-width: 992px) { .environment-layout { grid-template-columns: 1fr 1fr; } } .environment-column { display: flex; flex-direction: column; gap: var(--spacing-lg); } /* Config Sections */ .config-section { background: rgba(0, 0, 0, 0.2); border-radius: var(--radius-lg); padding: var(--spacing-lg); border: 1px solid rgba(255, 215, 0, 0.1); } /* Config Cards */ .config-cards { display: grid; grid-template-columns: 1fr; gap: var(--spacing-lg); margin: var(--spacing-lg) 0; } @media (min-width: 640px) { .config-cards { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 1200px) { .config-cards { grid-template-columns: repeat(4, 1fr); } } .config-card { background: linear-gradient(135deg, rgba(20, 20, 30, 0.95) 0%, rgba(30, 30, 40, 0.95) 100%); border-radius: var(--radius-lg); padding: var(--spacing-lg); border-left: 4px solid var(--primary-red); transition: all var(--transition-normal); box-shadow: var(--shadow-md); position: relative; overflow: hidden; } .config-card::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(circle at 30% 50%, rgba(255, 51, 51, 0.1) 0%, transparent 50%); animation: webSwing 8s ease-in-out infinite; pointer-events: none; } .config-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg), 0 0 20px rgba(255, 215, 0, 0.2); border-left-color: var(--primary-gold); } .config-card h4 { background: linear-gradient(45deg, var(--primary-red), var(--primary-gold)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin-bottom: var(--spacing-md); font-size: var(--font-lg); position: relative; z-index: 1; } .config-card pre { background: rgba(0, 0, 0, 0.6); padding: var(--spacing-md); border-radius: var(--radius-md); color: var(--text-secondary); font-family: 'Courier New', monospace; font-size: var(--font-sm); overflow-x: auto; white-space: pre-wrap; word-wrap: break-word; border: 1px solid rgba(255, 215, 0, 0.2); position: relative; z-index: 1; } /* Input Groups - Enhanced for mobile */ .config-grid { display: grid; grid-template-columns: 1fr; gap: var(--spacing-md); margin-bottom: var(--spacing-lg); } @media (min-width: 480px) { .config-grid { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 768px) { .config-grid { grid-template-columns: repeat(3, 1fr); } } .config-group { background: rgba(0, 30, 50, 0.6); padding: var(--spacing-md); border-radius: var(--radius-md); border: 1px solid rgba(0, 255, 255, 0.2); transition: all var(--transition-normal); } .config-group:hover { border-color: var(--primary-blue); background: rgba(0, 50, 80, 0.7); box-shadow: var(--shadow-blue); } .config-group label { display: block; margin-bottom: var(--spacing-xs); color: var(--primary-blue); font-weight: 600; font-size: var(--font-sm); text-transform: uppercase; letter-spacing: 0.5px; } .config-group input, .config-group select, .config-group textarea { width: 100%; padding: var(--spacing-sm) var(--spacing-md); background: rgba(0, 0, 0, 0.5); border: 2px solid rgba(0, 255, 255, 0.2); border-radius: var(--radius-md); color: var(--text-primary); font-size: var(--font-md); transition: all var(--transition-normal); } .config-group input:hover, .config-group select:hover, .config-group textarea:hover { border-color: var(--primary-blue); } .config-group input:focus, .config-group select:focus, .config-group textarea:focus { outline: none; border-color: var(--primary-gold); box-shadow: var(--shadow-gold); background: rgba(0, 0, 0, 0.7); } .config-group input[type="checkbox"] { width: auto; margin-right: var(--spacing-sm); accent-color: var(--primary-gold); transform: scale(1.1); cursor: pointer; } /* URI Input Group - Enhanced */ .uri-input-group { margin: var(--spacing-lg) 0; } .uri-input-group label { display: block; color: var(--primary-blue); font-weight: 600; margin-bottom: var(--spacing-xs); } .uri-input-wrapper { display: flex; flex-direction: column; gap: var(--spacing-sm); } @media (min-width: 480px) { .uri-input-wrapper { flex-direction: row; } } .uri-input-wrapper input { flex: 1; padding: var(--spacing-md); background: rgba(0, 0, 0, 0.5); border: 2px solid rgba(0, 255, 255, 0.2); border-radius: var(--radius-md); color: var(--text-primary); font-size: var(--font-md); } .uri-input-wrapper input:focus { border-color: var(--primary-gold); box-shadow: var(--shadow-gold); outline: none; } .uri-input-wrapper button { width: 100%; } @media (min-width: 480px) { .uri-input-wrapper button { width: auto; } } /* Action Groups */ .action-group { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); margin: var(--spacing-lg) 0; } .action-group button { flex: 1 1 auto; } @media (max-width: 480px) { .action-group button { flex: 1 1 100%; } } /* Buttons - Enhanced */ button { padding: var(--spacing-sm) var(--spacing-xl); background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 100%); border: 2px solid transparent; background-clip: padding-box; color: var(--text-primary); border-radius: var(--radius-full); cursor: pointer; font-size: var(--font-md); font-weight: 600; transition: all var(--transition-normal); text-transform: uppercase; letter-spacing: 0.5px; margin: var(--spacing-xs); white-space: nowrap; position: relative; overflow: hidden; box-shadow: var(--shadow-sm); } button::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; border-radius: var(--radius-full); padding: 2px; background: linear-gradient(45deg, var(--primary-gold), var(--primary-blue)); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; opacity: 0; transition: opacity var(--transition-normal); pointer-events: none; } button:hover::after { opacity: 1; } button:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg), 0 0 20px rgba(255, 215, 0, 0.3); } button:active { transform: translateY(0); } button:focus-visible { outline: 2px solid var(--primary-gold); outline-offset: 2px; } button:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; } /* Button variants */ .btn-migrate { background: linear-gradient(135deg, var(--primary-gold) 0%, var(--primary-gold-dark) 100%); color: #000; font-size: var(--font-lg); padding: var(--spacing-md) var(--spacing-xxl); width: 100%; max-width: 100%; } @media (min-width: 768px) { .btn-migrate { max-width: 400px; } } .btn-migrate::after { background: linear-gradient(45deg, #000, #333); } .btn-warning { background: linear-gradient(135deg, var(--primary-red) 0%, var(--primary-red-dark) 100%); color: white; } .btn-success { background: linear-gradient(135deg, var(--primary-green) 0%, var(--primary-green-dark) 100%); color: white; } .btn-small { padding: var(--spacing-xs) var(--spacing-lg); font-size: var(--font-sm); } .btn-large { padding: var(--spacing-lg) var(--spacing-xxl); font-size: var(--font-lg); } .btn-secondary { background: linear-gradient(135deg, #2a2a2a 0%, #3a3a3a 100%); } .btn-test { background: linear-gradient(135deg, #2a2a2a 0%, #3a3a3a 100%); } .btn-primary { background: linear-gradient(135deg, var(--primary-blue), #00cccc); color: #000; } /* Migration Options Panel */ .migration-options-panel { margin-top: var(--spacing-xl); padding: var(--spacing-xl); background: rgba(0, 0, 0, 0.3); border-radius: var(--radius-lg); border: 1px solid rgba(255, 215, 0, 0.2); } .options-row { display: flex; flex-direction: column; gap: var(--spacing-md); margin-bottom: var(--spacing-md); } @media (min-width: 640px) { .options-row { flex-direction: row; flex-wrap: wrap; } } .options-row.full-width { flex-direction: column; } .options-row .option-item { flex: 1 1 200px; } /* Checkbox Labels */ .checkbox-label { display: flex; align-items: center; gap: var(--spacing-sm); color: var(--text-secondary); cursor: pointer; padding: var(--spacing-sm); background: rgba(0, 30, 50, 0.5); border-radius: var(--radius-md); border: 1px solid rgba(0, 255, 255, 0.2); transition: all var(--transition-fast); } .checkbox-label:hover { border-color: var(--primary-blue); background: rgba(0, 50, 80, 0.6); } .checkbox-label input[type="checkbox"] { accent-color: var(--primary-gold); width: 18px; height: 18px; cursor: pointer; } /* Config Row */ .config-row { display: flex; flex-direction: column; gap: var(--spacing-md); margin: var(--spacing-lg) 0; } @media (min-width: 480px) { .config-row { flex-direction: row; align-items: center; justify-content: space-between; } } .select-wrapper { flex: 1; } .select-wrapper select { width: 100%; padding: var(--spacing-sm) var(--spacing-md); background: rgba(0, 0, 0, 0.5); border: 2px solid rgba(0, 255, 255, 0.2); border-radius: var(--radius-md); color: var(--text-primary); font-size: var(--font-md); } /* Format Controls */ .format-controls { display: flex; flex-direction: column; gap: var(--spacing-sm); margin: var(--spacing-lg) 0; } @media (min-width: 480px) { .format-controls { flex-direction: row; } } .format-controls select { flex: 1; padding: var(--spacing-sm) var(--spacing-md); background: rgba(0, 0, 0, 0.5); border: 2px solid rgba(0, 255, 255, 0.2); border-radius: var(--radius-md); color: var(--text-primary); font-size: var(--font-md); } .format-controls button { width: 100%; } @media (min-width: 480px) { .format-controls button { width: auto; } } /* Status Messages */ .status-message { margin-top: var(--spacing-lg); padding: var(--spacing-lg); border-radius: var(--radius-lg); animation: fadeIn var(--transition-normal); overflow-x: auto; } .status-message.success { background: linear-gradient(135deg, rgba(0, 255, 0, 0.15), rgba(0, 200, 0, 0.15)); border: 1px solid var(--primary-green); box-shadow: 0 0 20px rgba(0, 255, 0, 0.2); } .status-message.error { background: linear-gradient(135deg, rgba(255, 0, 0, 0.15), rgba(200, 0, 0, 0.15)); border: 1px solid var(--primary-red); box-shadow: 0 0 20px rgba(255, 0, 0, 0.2); } .status-message p { margin: var(--spacing-xs) 0; color: var(--text-secondary); font-size: var(--font-sm); } /* Results Sections */ .results-section { margin-top: var(--spacing-xl); padding: var(--spacing-lg); background: rgba(0, 0, 0, 0.3); border-radius: var(--radius-lg); border: 1px solid rgba(255, 215, 0, 0.1); } /* Schema Cards */ .schemas-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: var(--spacing-sm); margin: var(--spacing-lg) 0; } .schema-card { background: rgba(0, 50, 80, 0.6); padding: var(--spacing-md); border-radius: var(--radius-md); border: 1px solid rgba(0, 255, 255, 0.3); text-align: center; cursor: pointer; transition: all var(--transition-normal); font-size: var(--font-sm); user-select: none; position: relative; overflow: hidden; } .schema-card::before { content: ''; position: absolute; top: -100%; left: 0; width: 100%; height: 100%; background: linear-gradient(transparent, rgba(0, 255, 255, 0.2)); animation: wave 3s ease-in-out infinite; pointer-events: none; } .schema-card:hover { transform: translateY(-2px); border-color: var(--primary-gold); box-shadow: var(--shadow-gold); background: rgba(0, 80, 120, 0.7); } .schema-card label { cursor: pointer; display: flex; align-items: center; justify-content: center; gap: var(--spacing-xs); } .schema-card input[type="checkbox"] { accent-color: var(--primary-gold); width: 16px; height: 16px; cursor: pointer; } /* Tables */ .table-group { margin-bottom: var(--spacing-xl); background: rgba(0, 0, 0, 0.3); border-radius: var(--radius-lg); padding: var(--spacing-lg); border: 1px solid rgba(255, 215, 0, 0.1); overflow-x: auto; } .group-stats { margin-bottom: var(--spacing-md); color: var(--text-secondary); font-size: var(--font-sm); display: flex; gap: var(--spacing-sm); align-items: center; flex-wrap: wrap; } .group-stats span { background: rgba(255, 215, 0, 0.1); padding: var(--spacing-xs) var(--spacing-sm); border-radius: var(--radius-full); border: 1px solid rgba(255, 215, 0, 0.2); } .table-responsive { overflow-x: auto; margin: var(--spacing-md) 0; } .tables-table { width: 100%; min-width: 600px; border-collapse: collapse; background: rgba(0, 0, 0, 0.3); border-radius: var(--radius-md); overflow: hidden; } .tables-table th { background: rgba(0, 0, 0, 0.6); padding: var(--spacing-md); text-align: left; color: var(--primary-gold); font-weight: 600; font-size: var(--font-sm); border-bottom: 2px solid var(--primary-gold); } .tables-table td { padding: var(--spacing-sm) var(--spacing-md); border-bottom: 1px solid rgba(255, 215, 0, 0.1); font-size: var(--font-sm); } .tables-table tr:hover td { background: rgba(255, 215, 0, 0.1); } .tables-table input[type="checkbox"] { accent-color: var(--primary-gold); cursor: pointer; } /* Bucket Cards */ .bucket-card { background: rgba(0, 30, 50, 0.8); padding: var(--spacing-lg); margin: var(--spacing-md) 0; border-radius: var(--radius-lg); border: 1px solid rgba(0, 255, 255, 0.3); transition: all var(--transition-normal); position: relative; overflow: hidden; } .bucket-card::before { content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: radial-gradient(circle at 30% 50%, rgba(0, 255, 255, 0.15), transparent 70%); animation: rotate 10s linear infinite; pointer-events: none; } .bucket-card:hover { transform: translateX(5px); border-color: var(--primary-gold); box-shadow: var(--shadow-gold); background: rgba(0, 50, 80, 0.9); } .bucket-name { font-size: clamp(var(--font-lg), 3vw, var(--font-xl)); color: var(--primary-gold); margin-bottom: var(--spacing-sm); font-weight: 600; position: relative; z-index: 1; word-break: break-word; } .bucket-details { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); color: var(--text-secondary); font-size: var(--font-sm); position: relative; z-index: 1; } .bucket-details span { background: rgba(0, 0, 0, 0.6); padding: var(--spacing-xs) var(--spacing-md); border-radius: var(--radius-full); border: 1px solid rgba(0, 255, 255, 0.2); word-break: break-word; } .select-bucket-btn { margin-top: var(--spacing-md); width: 100%; position: relative; z-index: 1; } /* Migration Cards */ .migration-card { background: linear-gradient(135deg, rgba(20, 20, 30, 0.95), rgba(30, 30, 40, 0.95)); padding: var(--spacing-lg); margin: var(--spacing-md) 0; border-radius: var(--radius-lg); border: 1px solid rgba(255, 215, 0, 0.2); transition: all var(--transition-normal); } .migration-card:hover { transform: translateX(5px); box-shadow: var(--shadow-gold); border-color: var(--primary-gold); } .migration-header { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); justify-content: space-between; align-items: center; margin-bottom: var(--spacing-md); } .migration-id { font-family: 'Courier New', monospace; color: var(--primary-gold); font-size: var(--font-md); font-weight: 600; word-wrap: break-word; } .migration-status { padding: var(--spacing-xs) var(--spacing-md); border-radius: var(--radius-full); font-weight: 600; text-transform: uppercase; font-size: var(--font-xs); display: inline-block; } .migration-status.running { background: rgba(255, 215, 0, 0.2); color: var(--primary-gold); border: 1px solid var(--primary-gold); animation: pulse 1.5s ease-in-out infinite; } .migration-status.completed { background: rgba(0, 255, 0, 0.2); color: var(--primary-green); border: 1px solid var(--primary-green); } .migration-status.failed { background: rgba(255, 0, 0, 0.2); color: var(--primary-red); border: 1px solid var(--primary-red); } .migration-body p { margin: var(--spacing-xs) 0; color: var(--text-secondary); font-size: var(--font-sm); } .migration-body strong { color: var(--text-primary); } .migration-actions { display: flex; flex-wrap: wrap; gap: var(--spacing-sm); margin-top: var(--spacing-md); } .migration-actions button { flex: 1 1 auto; } @media (max-width: 480px) { .migration-actions button { flex: 1 1 100%; } } /* Migration Controls Panel */ .migration-controls-panel { margin-top: var(--spacing-xl); text-align: center; } .migration-controls { margin-top: var(--spacing-xl); text-align: center; } /* Logs */ #logsContainer { max-height: 400px; overflow-y: auto; padding: var(--spacing-md); background: rgba(0, 0, 0, 0.4); border-radius: var(--radius-md); font-family: 'Courier New', monospace; border: 1px solid rgba(255, 215, 0, 0.2); } .log-entry { padding: var(--spacing-sm) var(--spacing-md); margin: var(--spacing-xs) 0; border-radius: var(--radius-sm); animation: fadeIn var(--transition-normal); font-size: var(--font-sm); word-wrap: break-word; border-left: 4px solid transparent; transition: background var(--transition-fast); } .log-entry:hover { background: rgba(255, 255, 255, 0.05); } .log-entry.info { background: rgba(0, 255, 255, 0.1); border-left-color: var(--primary-blue); } .log-entry.success { background: rgba(0, 255, 0, 0.1); border-left-color: var(--primary-green); } .log-entry.error { background: rgba(255, 0, 0, 0.1); border-left-color: var(--primary-red); } .log-entry.warning { background: rgba(255, 255, 0, 0.1); border-left-color: #ffff00; } .log-time { color: var(--primary-gold); margin-right: var(--spacing-md); font-weight: 600; display: inline-block; min-width: 80px; } .log-message { color: var(--text-primary); display: inline; } /* Notifications */ .notification { position: fixed; top: var(--spacing-xl); right: var(--spacing-xl); left: var(--spacing-xl); padding: var(--spacing-md) var(--spacing-xl); color: white; border-radius: var(--radius-lg); z-index: 9999; box-shadow: var(--shadow-lg); animation: slideIn var(--transition-normal); display: flex; align-items: center; gap: var(--spacing-md); min-width: auto; max-width: 480px; margin: 0 auto; backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); font-weight: 500; } @media (min-width: 768px) { .notification { left: auto; right: var(--spacing-xl); min-width: 320px; } } .notification.error { background: linear-gradient(135deg, var(--primary-error), #d32f2f); } .notification.success { background: linear-gradient(135deg, var(--primary-success), #388e3c); } .notification.warning { background: linear-gradient(135deg, var(--primary-warning), #f57c00); } .notification.info { background: linear-gradient(135deg, var(--primary-info), #1976d2); } .notification-icon { font-size: var(--font-xl); } .notification-message { flex: 1; font-size: var(--font-md); word-break: break-word; } .notification-close { background: none; border: none; color: white; font-size: var(--font-xl); cursor: pointer; padding: 0 var(--spacing-xs); line-height: 1; opacity: 0.7; transition: opacity var(--transition-fast); } .notification-close:hover { opacity: 1; background: none; transform: none; box-shadow: none; } .notification-close::after { display: none; } /* Status Bar */ .status-bar { position: fixed; bottom: 0; left: 0; right: 0; background: rgba(0, 20, 40, 0.98); backdrop-filter: blur(10px); padding: var(--spacing-sm) var(--spacing-xl); display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: var(--spacing-sm); border-top: 2px solid; border-image: linear-gradient(90deg, var(--primary-blue), var(--primary-gold), var(--primary-red), var(--primary-blue)) 1; animation: borderFlow 4s linear infinite; z-index: 100; font-size: var(--font-sm); } #statusInfo { color: var(--text-secondary); flex: 1; min-width: 200px; font-size: var(--font-sm); word-break: break-word; } #loading { color: var(--primary-gold); font-weight: 600; animation: spin 1s linear infinite; display: inline-flex; align-items: center; gap: var(--spacing-xs); } /* Loading Overlay */ .loading-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.9); display: none; justify-content: center; align-items: center; z-index: 99999; backdrop-filter: blur(5px); } .loading-overlay.active { display: flex; } .bat-symbol { width: min(100px, 20vw); height: min(100px, 20vw); background: linear-gradient(45deg, var(--primary-gold), var(--primary-gold-dark)); clip-path: polygon(20% 0%, 80% 0%, 100% 20%, 100% 80%, 80% 100%, 20% 100%, 0% 80%, 0% 20%); animation: batFly 2s ease-in-out infinite; box-shadow: 0 0 50px var(--primary-gold), 0 0 100px var(--primary-gold); } /* Migration Stats */ .migration-stats { margin: var(--spacing-xl) 0; padding: var(--spacing-lg); background: rgba(0, 30, 50, 0.6); border-radius: var(--radius-lg); border: 1px solid rgba(255, 215, 0, 0.2); } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--spacing-md); margin-top: var(--spacing-md); } .stat-item { background: rgba(0, 0, 0, 0.5); padding: var(--spacing-md); border-radius: var(--radius-md); text-align: center; border: 1px solid rgba(255, 215, 0, 0.1); transition: all var(--transition-fast); } .stat-item:hover { border-color: var(--primary-gold); transform: translateY(-2px); box-shadow: var(--shadow-gold); } .stat-label { color: var(--primary-blue); font-size: var(--font-sm); text-transform: uppercase; margin-bottom: var(--spacing-xs); font-weight: 500; } .stat-value { color: var(--primary-gold); font-size: var(--font-xl); font-weight: 700; } /* Option Items */ .option-item { background: rgba(0, 30, 50, 0.6); padding: var(--spacing-md); border-radius: var(--radius-md); border: 1px solid rgba(0, 255, 255, 0.2); } .option-item label { display: block; margin-bottom: var(--spacing-xs); color: var(--primary-blue); font-weight: 600; font-size: var(--font-sm); } .option-item input[type="text"], .option-item input[type="number"], .option-item select { width: 100%; padding: var(--spacing-sm); background: rgba(0, 0, 0, 0.5); border: 1px solid rgba(0, 255, 255, 0.3); border-radius: var(--radius-sm); color: var(--text-primary); font-size: var(--font-sm); transition: all var(--transition-fast); } .option-item input:focus, .option-item select:focus { border-color: var(--primary-gold); box-shadow: var(--shadow-gold); outline: none; } /* Security Info */ .security-info { background: rgba(0, 30, 50, 0.6); padding: var(--spacing-lg); border-radius: var(--radius-lg); margin: var(--spacing-lg) 0; border: 1px solid rgba(255, 215, 0, 0.2); } .security-info p { margin: var(--spacing-sm) 0; font-size: var(--font-md); display: flex; flex-direction: column; gap: var(--spacing-xs); } @media (min-width: 480px) { .security-info p { flex-direction: row; align-items: center; } } .security-info strong { color: var(--primary-blue); min-width: 120px; display: inline-block; } .security-features { background: rgba(0, 30, 50, 0.6); padding: var(--spacing-lg); border-radius: var(--radius-lg); margin: var(--spacing-lg) 0; } .security-feature { display: flex; flex-direction: column; gap: var(--spacing-xs); padding: var(--spacing-md) 0; border-bottom: 1px solid rgba(255, 215, 0, 0.2); } @media (min-width: 480px) { .security-feature { flex-direction: row; justify-content: space-between; align-items: center; } } .security-feature:last-child { border-bottom: none; } .feature-name { color: var(--primary-blue); font-weight: 500; } .feature-value { color: var(--primary-gold); font-weight: 600; } /* Cleanup Controls */ .cleanup-controls { display: flex; flex-direction: column; gap: var(--spacing-sm); margin: var(--spacing-lg) 0; } @media (min-width: 480px) { .cleanup-controls { flex-direction: row; } } .cleanup-controls input { flex: 1; padding: var(--spacing-md); background: rgba(0, 0, 0, 0.5); border: 2px solid rgba(255, 51, 51, 0.3); border-radius: var(--radius-md); color: var(--text-primary); font-size: var(--font-md); transition: all var(--transition-fast); } .cleanup-controls input:focus { outline: none; border-color: var(--primary-red); box-shadow: var(--shadow-red); } .cleanup-controls button { width: 100%; } @media (min-width: 480px) { .cleanup-controls button { width: auto; } } /* Environment Preview */ .env-preview { background: rgba(0, 0, 0, 0.6); padding: var(--spacing-lg); border-radius: var(--radius-lg); font-family: 'Courier New', monospace; font-size: var(--font-sm); overflow-x: auto; white-space: pre-wrap; word-wrap: break-word; max-height: 400px; overflow-y: auto; border: 1px solid rgba(255, 215, 0, 0.2); } /* Section Header */ .section-header { display: flex; justify-content: flex-end; margin-bottom: var(--spacing-md); } /* No Migrations / No Logs */ .no-migrations, .no-logs { text-align: center; color: var(--text-muted); padding: var(--spacing-xl); font-style: italic; font-size: var(--font-md); } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 10px; height: 10px; } /* ==================== Progress Modal Styles ==================== */ .progress-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; animation: fadeIn 0.3s ease; } .modal-content { background: white; border-radius: 12px; width: 600px; max-width: 90%; max-height: 80vh; overflow-y: auto; box-shadow: 0 10px 30px rgba(0,0,0,0.2); animation: slideUp 0.3s ease; } .modal-header { padding: 20px 24px; border-bottom: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border-radius: 12px 12px 0 0; } .modal-header h3 { margin: 0; font-size: 18px; display: flex; align-items: center; gap: 10px; } .migration-status-badge { display: inline-block; width: 10px; height: 10px; border-radius: 50%; animation: pulse 1.5s infinite; } @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.5; } 100% { opacity: 1; } } .close-modal { background: rgba(255,255,255,0.2); border: none; font-size: 24px; cursor: pointer; color: white; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: background 0.2s; } .close-modal:hover { background: rgba(255,255,255,0.3); } .modal-body { padding: 24px; } .progress-container { display: flex; flex-direction: column; gap: 20px; } .progress-bar-container { position: relative; width: 100%; height: 30px; background: #f0f0f0; border-radius: 15px; overflow: hidden; } .progress-bar-fill { position: absolute; top: 0; left: 0; height: 100%; background: linear-gradient(90deg, #4CAF50, #45a049); transition: width 0.3s ease; border-radius: 15px; } .progress-bar-label { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; font-weight: bold; text-shadow: 1px 1px 2px rgba(0,0,0,0.2); z-index: 1; } .progress-bar-text { font-family: monospace; font-size: 14px; color: #4CAF50; background: #f0f0f0; padding: 10px; border-radius: 8px; margin: 0; text-align: center; } .progress-stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 15px; background: #f8f9fa; padding: 15px; border-radius: 8px; border: 1px solid #e0e0e0; } .stat-item { display: flex; flex-direction: column; gap: 5px; } .stat-label { font-size: 12px; color: #666; text-transform: uppercase; letter-spacing: 0.5px; } .stat-value { font-size: 16px; font-weight: bold; color: #333; } .current-item { background: #e3f2fd; padding: 15px; border-radius: 8px; border-left: 4px solid #2196F3; } .current-item h4 { margin: 0 0 10px 0; color: #1976D2; font-size: 14px; } .current-object, .current-table { display: flex; align-items: center; gap: 10px; font-family: monospace; } .current-icon { font-size: 18px; } .current-name { font-weight: 500; color: #333; word-break: break-all; } .current-progress { margin-left: auto; font-size: 12px; color: #666; } .progress-logs { background: #f5f5f5; border-radius: 8px; padding: 15px; } .progress-logs h4 { margin: 0 0 10px 0; color: #333; font-size: 14px; } .logs-container { max-height: 200px; overflow-y: auto; font-family: monospace; font-size: 12px; } .log-entry { padding: 5px; border-bottom: 1px solid #e0e0e0; display: flex; gap: 10px; } .log-entry:last-child { border-bottom: none; } .log-entry.info { color: #2196F3; } .log-entry.success { color: #4CAF50; } .log-entry.error { color: #f44336; background: #ffebee; } .log-time { color: #999; min-width: 70px; } .log-message { flex: 1; word-break: break-word; } .progress-controls { display: flex; justify-content: flex-end; gap: 10px; margin-top: 10px; } .progress-history { margin-top: 20px; padding: 15px; background: #f8f9fa; border-radius: 8px; } .progress-history h4 { margin: 0 0 10px 0; color: #333; } .history-list { display: flex; flex-direction: column; gap: 5px; } .history-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; background: white; border-radius: 6px; border: 1px solid #e0e0e0; font-size: 13px; } .history-item.completed { border-left: 3px solid #4CAF50; } .history-item.failed { border-left: 3px solid #f44336; } .history-id { font-family: monospace; font-weight: bold; color: #333; } .history-type { padding: 2px 8px; background: #e0e0e0; border-radius: 12px; font-size: 11px; } .history-status { padding: 2px 8px; border-radius: 12px; font-size: 11px; text-transform: uppercase; } .history-item.completed .history-status { background: #e8f5e8; color: #4CAF50; } .history-item.failed .history-status { background: #ffebee; color: #f44336; } .history-time { margin-left: auto; color: #999; font-size: 11px; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { transform: translateY(50px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } /* تحديث أنماط بطاقات الترحيل */ .migration-card { position: relative; overflow: hidden; } .migration-card .progress-bar-container { position: absolute; bottom: 0; left: 0; width: 100%; height: 4px; background: transparent; } .migration-card .progress-bar-fill { height: 4px; border-radius: 0; } .migration-card .progress-text { display: none; } ::-webkit-scrollbar-track { background: #1a1a1a; border-radius: var(--radius-sm); } ::-webkit-scrollbar-thumb { background: linear-gradient(135deg, var(--primary-red), var(--primary-gold)); border-radius: var(--radius-sm); border: 2px solid #1a1a1a; } ::-webkit-scrollbar-thumb:hover { background: linear-gradient(135deg, var(--primary-gold), var(--primary-red)); } ::-webkit-scrollbar-corner { background: #1a1a1a; } /* Utility Classes */ .full-width { width: 100%; grid-column: 1 / -1; } .text-center { text-align: center; } .text-glow { text-shadow: 0 0 10px var(--primary-blue); } .border-glow { box-shadow: 0 0 10px var(--primary-blue), 0 0 20px var(--primary-gold); } /* Loading Skeleton Animation */ .skeleton { background: linear-gradient( 90deg, rgba(255, 255, 255, 0.05) 25%, rgba(255, 215, 0, 0.1) 50%, rgba(255, 255, 255, 0.05) 75% ); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: var(--radius-sm); } /* Print Styles */ @media print { body { background: white; color: black; } .status-bar, .loading-overlay, .notification, button, .tabs, .security-badge { display: none !important; } .tab-content { display: block !important; background: white; color: black; border: 1px solid #ccc; box-shadow: none; page-break-inside: avoid; } /* ==================== Progress Tracking Styles ==================== */ .progress-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal-content { background: white; border-radius: 8px; width: 500px; max-width: 90%; max-height: 80vh; overflow-y: auto; } .modal-header { padding: 15px 20px; border-bottom: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; } .modal-header h3 { margin: 0; color: #333; } .close-modal { background: none; border: none; font-size: 24px; cursor: pointer; color: #666; } .modal-body { padding: 20px; } .progress-container { display: flex; flex-direction: column; gap: 15px; } .progress-bar-container { width: 100%; height: 20px; background: #f0f0f0; border-radius: 10px; overflow: hidden; } .progress-bar-fill { height: 100%; background: linear-gradient(90deg, #4CAF50, #45a049); transition: width 0.3s ease; border-radius: 10px; } .progress-stats { font-family: monospace; background: #f8f9fa; padding: 10px; border-radius: 4px; border: 1px solid #e0e0e0; white-space: pre-wrap; font-size: 12px; } .progress-details { display: flex; flex-wrap: wrap; gap: 15px; padding: 10px; background: #f8f9fa; border-radius: 4px; border: 1px solid #e0e0e0; } .progress-detail { flex: 1 1 auto; min-width: 120px; } .progress-detail span { font-weight: bold; color: #555; } .progress-bar-text { font-family: monospace; font-size: 12px; color: #4CAF50; background: #f0f0f0; padding: 5px; border-radius: 4px; margin: 0; } .stop-progress-btn { background: #ff6b6b; color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer; font-size: 14px; transition: background 0.2s; } .stop-progress-btn:hover { background: #ff5252; } .progress-area { margin-top: 10px; padding: 10px; background: #f8f9fa; border-radius: 4px; border: 1px solid #e0e0e0; } .header { background: none; border: 1px solid #ccc; box-shadow: none; animation: none; } .header h1 { color: black; -webkit-text-fill-color: black; animation: none; } .config-card, .migration-card, .bucket-card { break-inside: avoid; border: 1px solid #ccc; box-shadow: none; } }