@tailwind base; @tailwind components; @tailwind utilities; :root { font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; font-weight: 400; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } * { box-sizing: border-box; } body, html, #root { height: 100%; margin: 0; padding: 0; } /* Gradient Backgrounds */ .gradient-bg { min-height: 100vh; display: flex; justify-content: center; align-items: center; padding: 1rem; transition: background 0.3s ease; } .gradient-bg-dark { background: linear-gradient(135deg, #7b2ff7 0%, #f107a3 100%); } .gradient-bg-light { background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%); } /* Auth Container */ .auth-container { backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); border-radius: 1.5rem; padding: 2rem; max-width: 28rem; width: 100%; display: flex; flex-direction: column; gap: 1.5rem; border: 1px solid rgba(255, 255, 255, 0.1); } .auth-container-dark { background: rgba(31, 41, 55, 0.75); } .auth-container-light { background: rgba(255, 255, 255, 0.75); } /* Auth Title */ .auth-title { font-size: 1.875rem; font-weight: 600; text-align: center; margin: 0; } /* Auth Form */ .auth-form { display: flex; flex-direction: column; gap: 1.5rem; } /* Auth Inputs */ .auth-input { padding: 0.75rem 1rem; border-radius: 0.5rem; border: 1px solid; font-size: 1rem; transition: all 0.2s ease; outline: none; } .auth-input:focus { ring: 2px; ring-offset: 2px; } .auth-input-dark { background: rgba(55, 65, 81, 0.5); border-color: rgba(75, 85, 99, 1); color: white; } .auth-input-dark::placeholder { color: rgba(156, 163, 175, 1); } .auth-input-dark:focus { ring-color: rgba(147, 51, 234, 1); border-color: rgba(147, 51, 234, 1); } .auth-input-light { background: rgba(255, 255, 255, 0.7); border-color: rgba(209, 213, 219, 1); color: rgba(17, 24, 39, 1); } .auth-input-light::placeholder { color: rgba(107, 114, 128, 1); } .auth-input-light:focus { ring-color: rgba(59, 130, 246, 1); border-color: rgba(59, 130, 246, 1); } /* Auth Buttons */ .auth-button { padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 600; font-size: 1rem; border: none; cursor: pointer; transition: all 0.2s ease; color: white; } .auth-button:disabled { opacity: 0.5; cursor: not-allowed; } .auth-button-dark { background: rgba(147, 51, 234, 1); } .auth-button-dark:hover:not(:disabled) { background: rgba(126, 34, 206, 1); } .auth-button-light { background: rgba(59, 130, 246, 1); } .auth-button-light:hover:not(:disabled) { background: rgba(37, 99, 235, 1); } /* Auth Switch */ .auth-switch { background: none; border: none; font-weight: 500; cursor: pointer; text-align: center; transition: all 0.2s ease; padding: 0.5rem; } .auth-switch:hover { text-decoration: underline; } .auth-switch-dark { color: rgba(196, 181, 253, 1); } .auth-switch-dark:hover { color: rgba(221, 214, 254, 1); } .auth-switch-light { color: rgba(59, 130, 246, 1); } .auth-switch-light:hover { color: rgba(37, 99, 235, 1); } /* Main Container */ .main-container { backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); border-radius: 1.5rem; padding: 2rem; text-align: center; max-width: 28rem; width: 100%; border: 1px solid rgba(255, 255, 255, 0.1); } .main-container-dark { background: rgba(31, 41, 55, 0.75); color: white; } .main-container-light { background: rgba(255, 255, 255, 0.75); color: rgba(17, 24, 39, 1); } .main-title { font-size: 2.25rem; font-weight: 700; margin: 0 0 1rem 0; } .main-subtitle { font-size: 1.125rem; margin: 0 0 1.5rem 0; opacity: 0.8; } /* Logout Button */ .logout-button { padding: 0.75rem 1.5rem; background: rgba(239, 68, 68, 1); color: white; border: none; border-radius: 0.5rem; font-weight: 600; cursor: pointer; transition: all 0.2s ease; } .logout-button:hover { background: rgba(220, 38, 38, 1); } /* Theme Toggle */ .theme-toggle { position: fixed; top: 1rem; right: 1rem; padding: 0.75rem; border-radius: 50%; backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.25); transition: all 0.2s ease; border: 1px solid rgba(255, 255, 255, 0.1); cursor: pointer; z-index: 50; } .theme-toggle:hover { transform: scale(1.1); } .theme-toggle-dark { background: rgba(75, 85, 99, 0.75); } .theme-toggle-light { background: rgba(255, 255, 255, 0.75); } .theme-icon { width: 1.5rem; height: 1.5rem; display: flex; align-items: center; justify-content: center; font-size: 1.125rem; } /* Messages */ .error-message { color: rgba(239, 68, 68, 1); text-align: center; font-weight: 500; background: rgba(254, 226, 226, 0.8); padding: 0.75rem; border-radius: 0.5rem; border: 1px solid rgba(239, 68, 68, 0.2); } .success-message { color: rgba(34, 197, 94, 1); text-align: center; font-weight: 500; background: rgba(220, 252, 231, 0.8); padding: 0.75rem; border-radius: 0.5rem; border: 1px solid rgba(34, 197, 94, 0.2); } /* Loading */ .loading-container { min-height: 100vh; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 1rem; background: linear-gradient(135deg, #7b2ff7 0%, #f107a3 100%); color: white; } .loading-spinner { width: 2rem; height: 2rem; border: 3px solid rgba(255, 255, 255, 0.3); border-top: 3px solid white; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* ==== NEW MAIN APP LAYOUT STYLES ==== */ /* App Container */ .app-container { min-height: 100vh; padding: 1rem; transition: background 0.3s ease; } /* App Layout */ .app-layout { display: flex; height: calc(100vh - 2rem); gap: 10px; max-width: 1400px; margin: 0 auto; } /* Sidebar */ .sidebar { width: 280px; border-radius: 1rem; backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); border: 1px solid rgba(255, 255, 255, 0.1); display: flex; flex-direction: column; padding: 1.5rem; transition: all 0.3s ease; } .sidebar-dark { background: rgba(31, 41, 55, 0.75); } .sidebar-light { background: rgba(255, 255, 255, 0.75); } /* Sidebar Title */ .sidebar-title { font-size: 2rem; font-weight: 700; letter-spacing: 0.05em; margin-bottom: 2rem; text-align: center; transition: color 0.3s; } /* Sidebar Navigation */ .sidebar-nav { display: flex; flex-direction: column; gap: 0.5rem; flex: 1; } /* Navigation Buttons */ .nav-button { display: flex; align-items: center; gap: 0.75rem; padding: 0.875rem 1rem; border: none; border-radius: 0.75rem; font-weight: 500; font-size: 0.95rem; cursor: pointer; transition: all 0.2s ease; text-align: left; width: 100%; } .nav-button:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } /* Active Navigation Buttons */ .nav-button-active-dark { background: linear-gradient(135deg, rgba(147, 51, 234, 0.8), rgba(126, 34, 206, 0.8)); color: white; box-shadow: 0 4px 20px rgba(147, 51, 234, 0.3); } .nav-button-active-light { background: linear-gradient(135deg, rgba(59, 130, 246, 0.8), rgba(37, 99, 235, 0.8)); color: white; box-shadow: 0 4px 20px rgba(59, 130, 246, 0.3); } /* Inactive Navigation Buttons */ .nav-button-inactive-dark { background: rgba(55, 65, 81, 0.3); color: rgba(209, 213, 219, 1); border: 1px solid rgba(75, 85, 99, 0.3); } .nav-button-inactive-dark:hover { background: rgba(55, 65, 81, 0.5); color: white; } .nav-button-inactive-light { background: rgba(255, 255, 255, 0.4); color: rgba(55, 65, 81, 1); border: 1px solid rgba(209, 213, 219, 0.3); } .nav-button-inactive-light:hover { background: rgba(255, 255, 255, 0.7); color: rgba(17, 24, 39, 1); } /* Sidebar Footer */ .sidebar-footer { margin-top: auto; padding-top: 1rem; } /* Logout Button in Sidebar */ .logout-button-sidebar { display: flex; align-items: center; gap: 0.75rem; padding: 0.875rem 1rem; background: rgba(239, 68, 68, 0.1); color: rgba(239, 68, 68, 1); border: 1px solid rgba(239, 68, 68, 0.2); border-radius: 0.75rem; font-weight: 500; cursor: pointer; transition: all 0.2s ease; width: 100%; } .logout-button-sidebar:hover { background: rgba(239, 68, 68, 0.9); color: white; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3); } /* Main Content Area */ .main-content { flex: 1; border-radius: 1rem; backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); border: 1px solid rgba(255, 255, 255, 0.1); padding: 2rem; overflow: hidden; position: relative; } .main-content-dark { background: rgba(31, 41, 55, 0.75); color: white; } .main-content-light { background: rgba(255, 255, 255, 0.75); color: rgba(17, 24, 39, 1); } /* Files Component */ .files-container { height: 100%; display: flex; flex-direction: column; } .files-header { display: flex; justify-content: between; align-items: center; margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .files-title { font-size: 1.75rem; font-weight: 600; margin: 0; } .files-table-container { flex: 1; overflow-y: auto; margin-bottom: 1rem; } /* Files Table */ .files-table { width: 100%; border-collapse: collapse; } .files-table thead { position: sticky; top: 0; z-index: 10; } .files-table th { padding: 1rem; text-align: left; font-weight: 600; font-size: 0.875rem; text-transform: uppercase; letter-spacing: 0.05em; border-bottom: 2px solid rgba(255, 255, 255, 0.1); } .files-table-dark th { background: rgba(55, 65, 81, 0.5); color: rgba(209, 213, 219, 1); } .files-table-light th { background: rgba(249, 250, 251, 0.8); color: rgba(55, 65, 81, 1); } .files-table td { padding: 1rem; border-bottom: 1px solid rgba(255, 255, 255, 0.05); vertical-align: middle; } .files-table tbody tr { transition: all 0.2s ease; } .files-table-dark tbody tr:hover { background: rgba(55, 65, 81, 0.3); } .files-table-light tbody tr:hover { background: rgba(249, 250, 251, 0.5); } /* File Row Actions */ .file-actions { position: relative; } .file-actions-button { padding: 0.5rem; border: none; background: none; cursor: pointer; border-radius: 0.375rem; transition: all 0.2s ease; } .file-actions-button:hover { background: rgba(107, 114, 128, 0.1); } .file-actions-menu { position: absolute; right: 0; top: 100%; background: white; border-radius: 0.5rem; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.25); border: 1px solid rgba(209, 213, 219, 1); min-width: 120px; z-index: 20; overflow: hidden; } .file-actions-menu-dark { background: rgba(55, 65, 81, 1); border-color: rgba(75, 85, 99, 1); } .file-actions-menu button { display: block; width: 100%; padding: 0.75rem 1rem; border: none; background: none; text-align: left; cursor: pointer; transition: all 0.2s ease; font-size: 0.875rem; } .file-actions-menu-dark button { color: white; } .file-actions-menu-dark button:hover { background: rgba(75, 85, 99, 1); } .file-actions-menu button:hover { background: rgba(249, 250, 251, 1); } .file-actions-menu button.delete-action { color: rgba(239, 68, 68, 1); } .file-actions-menu button.delete-action:hover { background: rgba(254, 226, 226, 1); } /* Dropdown menu custom style for FileComponent */ .custom-dropdown { background: rgba(40, 40, 60, 0.85); border-radius: 1rem; box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.25); border: 1px solid rgba(255,255,255,0.08); padding: 0.5rem 0.75rem; min-width: 160px; z-index: 100; position: absolute; right: 0; top: 110%; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); transition: all 0.2s; display: flex; flex-direction: column; gap: 0.5rem; } .dropdown-menu-light.custom-dropdown { background: rgba(255,255,255,0.95); color: #222; border: 1px solid #e0e0e0; } .dropdown-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 0.75rem; border-radius: 0.5rem; background: none; border: none; cursor: pointer; font-size: 1rem; transition: background 0.15s; } .dropdown-item-dark { color: #fff; } .dropdown-item-light { color: #222; } .dropdown-item:hover { background: rgba(147, 51, 234, 0.08); } .dropdown-item-danger { color: #ef4444; } .dropdown-item-danger:hover { background: rgba(239, 68, 68, 0.12); } .dropdown-section { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.25rem; } .dropdown-label { font-size: 0.95rem; font-weight: 500; margin-right: 0.5rem; } .dropdown-select { border-radius: 0.5rem; border: 1px solid #d1d5db; padding: 0.25rem 0.5rem; font-size: 0.95rem; background: #fff; color: #222; outline: none; transition: border 0.2s; } .dropdown-menu-dark .dropdown-select { background: #23233a; color: #fff; border: 1px solid #444; } .dropdown-menu-dark .dropdown-label { color: #fff; } .dropdown-menu-light .dropdown-label { color: #222; } /* Upload Button */ .upload-button { position: fixed; bottom: 2rem; right: 2rem; width: 60px; height: 60px; border-radius: 50%; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; color: white; backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.25); transition: all 0.2s ease; z-index: 30; } .sidebar-title { font-size: 2rem; font-weight: 700; letter-spacing: 0.05em; margin-bottom: 2rem; text-align: center; transition: color 0.3s; } .sidebar-dark .sidebar-title { color: #fff; } .sidebar-light .sidebar-title { color: #1f2937; /* gray-800 */ } .upload-button:hover { transform: scale(1.1); box-shadow: 0 15px 35px -5px rgba(0, 0, 0, 0.35); } .upload-button-dark { background: linear-gradient(135deg, rgba(147, 51, 234, 0.9), rgba(126, 34, 206, 0.9)); } .upload-button-light { background: linear-gradient(135deg, rgba(59, 130, 246, 0.9), rgba(37, 99, 235, 0.9)); } /* Empty State */ .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 4rem 2rem; text-align: center; opacity: 0.6; } .empty-state-icon { font-size: 4rem; margin-bottom: 1rem; } .empty-state h3 { font-size: 1.25rem; font-weight: 600; margin: 0 0 0.5rem 0; } .empty-state p { font-size: 0.875rem; margin: 0; opacity: 0.8; } /* Ellipsis button (3 dots) style */ .ellipsis-button { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; background: none; border: none; border-radius: 50%; cursor: pointer; transition: background 0.15s; padding: 0; } .ellipsis-button:hover { background: rgba(147, 51, 234, 0.08); } .ellipsis-dot { width: 6px; height: 6px; background: #bdbdbd; border-radius: 50%; margin: 0 1.5px; display: inline-block; } .actions-button-dark .ellipsis-dot { background: #fff; } .actions-button-light .ellipsis-dot { background: #222; } /* Migliora la larghezza delle colonne e padding */ .full-width-table { width: 100%; table-layout: fixed; } .table-header-cell, .table-cell { padding: 1rem 1.5rem; } .actions-header-cell { width: 48px; } .actions-cell { text-align: right; min-width: 48px; } /* Responsive Design */ @media (max-width: 1024px) { .app-layout { flex-direction: column; height: auto; min-height: calc(100vh - 2rem); } .sidebar { width: 100%; order: 2; } .sidebar-nav { flex-direction: row; justify-content: center; gap: 0.5rem; } .nav-button { flex: 1; justify-content: center; max-width: 120px; } .sidebar-footer { margin-top: 1rem; padding-top: 0; } .main-content { order: 1; min-height: 60vh; } } @media (max-width: 640px) { .app-container { padding: 0.5rem; } .app-layout { height: auto; min-height: calc(100vh - 1rem); } .sidebar, .main-content { padding: 1rem; } .files-table th, .files-table td { padding: 0.5rem; font-size: 0.875rem; } .upload-button { width: 50px; height: 50px; bottom: 1rem; right: 1rem; } .sidebar-nav { gap: 0.25rem; } .nav-button { padding: 0.5rem; font-size: 0.875rem; } } /* Upload progress popout styles */ .upload-progress-popout { position: fixed; right: 32px; bottom: 32px; z-index: 2000; background: rgba(34, 34, 34, 0.95); color: #fff; border-radius: 18px; box-shadow: 0 4px 24px rgba(0,0,0,0.18); padding: 18px 28px 18px 18px; min-width: 220px; min-height: 110px; display: flex; align-items: center; gap: 18px; animation: popout-fadein 0.3s; } .upload-progress-content { display: flex; flex-direction: column; align-items: center; gap: 8px; } .upload-progress-filename { font-size: 1.05rem; font-weight: 500; margin-bottom: 2px; text-align: center; max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .upload-progress-bar-container { width: 48px; height: 48px; position: relative; margin-bottom: 2px; } .upload-progress-svg { width: 48px; height: 48px; } .upload-progress-bg { fill: none; stroke: #444; stroke-width: 4; } .upload-progress-bar { fill: none; stroke: #4ade80; stroke-width: 4; stroke-linecap: round; transition: stroke-dashoffset 0.3s; } .upload-progress-text { font-size: 0.95rem; font-weight: 600; fill: #fff; dominant-baseline: middle; } .upload-progress-eta { font-size: 0.92rem; color: #b3e6c7; margin-top: 2px; text-align: center; } @media (max-width: 600px) { .upload-progress-popout { right: 8px; bottom: 8px; min-width: 150px; padding: 10px 12px 10px 10px; } .upload-progress-bar-container, .upload-progress-svg { width: 36px; height: 36px; } } @keyframes popout-fadein { from { opacity: 0; transform: translateY(30px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } }