/* BucketPage Styles */ .bucket-container { position: relative; display: flex; overflow: hidden; padding: 1rem; height: 100vh; flex-direction: column; gap: 1rem; } /* Header Card */ .bucket-card { border: 1px solid var(--color-border-secondary); border-radius: var(--radius-xl); background: var(--color-surface); box-shadow: var(--shadow-sm); transition: var(--transition-medium); } .bucket-card:hover { border-color: var(--color-border); box-shadow: var(--shadow-md); } .header-card { flex-shrink: 0; } .card-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--color-border-secondary); padding: 0.75rem 1rem; flex-wrap: wrap; gap: 0.75rem; } .header-left { display: flex; align-items: center; gap: 1rem; flex: 1; min-width: 200px; } .custom-domain-input { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.5rem 0.75rem; width: 200px; font-size: 0.875rem; color: var(--color-text-primary); background: var(--color-surface-elevated); transition: var(--transition-fast); } .custom-domain-input:focus { border-color: var(--color-accent); outline: none; box-shadow: 0 0 0 3px var(--color-accent-soft); } .custom-domain-select { position: relative; width: 200px; } .select-input { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.5rem 2rem 0.5rem 0.75rem; width: 100%; font-size: 0.875rem; color: var(--color-text-primary); background: var(--color-surface-elevated); transition: var(--transition-fast); cursor: pointer; } .select-input:focus { border-color: var(--color-accent); outline: none; box-shadow: 0 0 0 3px var(--color-accent-soft); } .select-arrow { position: absolute; top: 50%; right: 0.75rem; width: 16px; height: 16px; color: var(--color-text-secondary); transition: var(--transition-fast); transform: translateY(-50%); pointer-events: none; } .select-dropdown { position: absolute; top: 100%; right: 0; left: 0; z-index: 1000; overflow-y: auto; margin-top: 0.25rem; border: 1px solid var(--color-border); border-radius: var(--radius-md); max-height: 200px; background: var(--color-surface); box-shadow: var(--shadow-lg); } .select-option { padding: 0.5rem 0.75rem; font-size: 0.875rem; transition: var(--transition-fast); cursor: pointer; } .select-option:hover { background: var(--color-surface-elevated); } .custom-domain-link { font-size: 0.875rem; font-weight: 500; text-decoration: none; color: var(--color-accent); transition: var(--transition-fast); cursor: pointer; } .custom-domain-link:hover { text-decoration: underline; color: var(--color-accent-hover); } .header-actions { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; } .action-button { position: relative; display: flex; justify-content: center; align-items: center; border: none; border-radius: var(--radius-md); padding: 0.5rem; font-size: 0.75rem; font-weight: 500; color: var(--color-text-primary); background: var(--color-surface-elevated); transition: var(--transition-fast); gap: 0.25rem; cursor: pointer; } .action-button:hover { color: white; background: var(--color-accent); box-shadow: var(--shadow-sm); transform: translateY(-1px); } .action-button.primary { color: white; background: var(--color-blue-common); } .action-button.primary:hover { background: var(--color-accent-hover); } .action-button.secondary { border: 1px solid var(--color-border); background: var(--color-surface-elevated); } .action-button.secondary:hover { border-color: var(--color-accent); color: var(--color-accent); } .action-button.danger { color: white; background: var(--color-error); } .action-button.danger:hover { background: var(--color-error); } .action-icon { width: 16px; height: 16px; } .search-input { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.5rem 0.75rem; width: 200px; font-size: 0.875rem; color: var(--color-text-primary); background: var(--color-surface-elevated); transition: var(--transition-fast); } .search-input:focus { border-color: var(--color-accent); outline: none; box-shadow: 0 0 0 3px var(--color-accent-soft); } /* Breadcrumb */ .breadcrumb-card { flex-shrink: 0; } .breadcrumb-container { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1rem; flex-wrap: wrap; } .breadcrumb-item { display: flex; align-items: center; border: 1px solid var(--color-border); font-size: 0.875rem; color: var(--color-text-secondary); background: var(--color-surface-elevated); transition: var(--transition-fast); gap: 0.25rem; cursor: pointer; } .breadcrumb-item:hover { color: var(--color-accent); } .breadcrumb-item.current { font-weight: 500; color: var(--color-text-primary); cursor: default; } .breadcrumb-separator { margin: 0 0.125rem; color: var(--color-text-tertiary); } /* Control Panel */ .control-panel-card { flex-shrink: 0; } .control-panel { display: flex; justify-content: space-between; align-items: center; padding: 0.75rem 1rem; gap: 1rem; flex-wrap: wrap; } .control-left { display: flex; align-items: center; gap: 1rem; flex: 1; } .file-info { display: flex; align-items: center; gap: 1rem; font-size: 0.875rem; color: var(--color-text-secondary); } .file-info-item { display: flex; align-items: center; gap: 0.25rem; } .control-center { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; } .control-right { display: flex; align-items: center; gap: 0.5rem; } .view-toggle { display: flex; overflow: hidden; border: 1px solid var(--color-border); border-radius: var(--radius-md); } .view-toggle-button { display: flex; justify-content: center; align-items: center; border: none; padding: 0.5rem; color: var(--color-text-secondary); background: var(--color-surface-elevated); transition: var(--transition-fast); cursor: pointer; } .view-toggle-button.active { color: white; background: var(--color-accent); } .view-toggle-button:not(.active):hover { background: var(--color-surface); } .dropdown { position: relative; } .dropdown-button { display: flex; align-items: center; border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.5rem 0.75rem; font-size: 0.875rem; color: var(--color-text-primary); background: var(--color-surface-elevated); transition: var(--transition-fast); gap: 0.5rem; cursor: pointer; } .dropdown-button:hover { border-color: var(--color-accent); background: var(--color-surface); } .dropdown-content { position: absolute; top: 100%; left: 0; z-index: 1000; margin-top: 0.25rem; border: 1px solid var(--color-border); border-radius: var(--radius-md); min-width: 150px; background: var(--color-background-primary); box-shadow: var(--shadow-lg); } .dropdown-item { padding: 0.5rem 0.75rem; font-size: 0.875rem; color: var(--color-text-primary); transition: var(--transition-fast); cursor: pointer; } .dropdown-item:hover { color: var(--color-accent); background: var(--color-surface-elevated); } .page-input { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.25rem 0.5rem; width: 80px; font-size: 0.875rem; text-align: center; color: var(--color-text-primary); background: var(--color-surface-elevated); } .page-input:focus { border-color: var(--color-accent); outline: none; } /* Content Area */ .content-card { flex: 1; display: flex; flex-direction: column; min-height: 0; } .content-area { position: relative; overflow: visible hidden; padding: 0.5rem; background: var(--color-background-secondary); flex: 1; } /* Virtual Scroller Container */ .virtual-scroller-container { overflow: visible; width: 100%; height: 100%; } /* File Grid Item */ .file-grid-item { position: relative; z-index: 1; display: flex; overflow: visible; border: 1px solid var(--color-border-secondary); border-radius: var(--radius-lg); height: 220px; background: var(--color-surface); transition: var(--transition-medium); flex-direction: column; cursor: pointer; } .file-grid-item:hover { z-index: 10; border-color: var(--color-border); box-shadow: var(--shadow-md); transform: translateY(-2px); } .file-grid-item.selected { z-index: 10; border-color: var(--color-accent); box-shadow: 0 0 0 2px rgb(59 130 246 / 20%); } .file-preview { position: relative; display: flex; justify-content: center; align-items: center; overflow: hidden; background: var(--color-surface-elevated); aspect-ratio: 16/9; } .file-image { width: 100%; height: 100%; object-fit: contain; transition: var(--transition-medium); } .file-icon { width: 48px; height: 48px; color: var(--color-text-tertiary); } .file-info-section { position: relative; z-index: 1; display: flex; justify-content: space-between; padding: 0.75rem; flex: 1; flex-direction: column; } .file-name { overflow: hidden; margin-bottom: 0.5rem; font-size: 0.875rem; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; color: var(--color-text-primary); cursor: pointer; } .file-name:hover { color: var(--color-accent); } .file-meta { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.75rem; font-size: 0.75rem; color: var(--color-text-secondary); } .file-actions { position: relative; z-index: 10; display: flex; justify-content: space-between; align-items: center; } .file-action-group { display: flex; gap: 0.25rem; } .file-action-button { display: flex; justify-content: center; align-items: center; border: none; border-radius: var(--radius-sm); padding: 0.375rem; width: 28px; height: 28px; color: var(--color-text-secondary); background: var(--color-surface-elevated); transition: var(--transition-fast); cursor: pointer; } .file-action-button:hover { color: var(--color-text-primary); background: var(--color-surface); transform: translateY(-1px); } .file-action-button.danger:hover { color: var(--color-error); background: rgb(239 68 68 / 10%); } .file-checkbox { position: relative; border: 2px solid var(--color-border); border-radius: var(--radius-sm); width: 16px; height: 16px; background: var(--color-surface); transition: var(--transition-fast); appearance: none; cursor: pointer; } .file-checkbox:checked { border-color: var(--color-accent); background: var(--color-accent); } .file-checkbox:checked::after { position: absolute; top: 50%; left: 50%; font-size: 10px; font-weight: bold; color: white; content: '✓'; transform: translate(-50%, -50%); } /* File List Item */ .file-list-item { display: flex; align-items: center; margin: 0; border: 1px solid var(--color-border-secondary); border-radius: var(--radius-lg); padding: 0.75rem 1rem; width: 100%; background: var(--color-surface); transition: var(--transition-medium); gap: 0.75rem; cursor: pointer; } .file-list-item:hover { border-color: var(--color-border); box-shadow: var(--shadow-sm); transform: translateY(-1px); } .file-list-item.selected { border-color: var(--color-accent); box-shadow: 0 0 0 2px rgb(59 130 246 / 20%); } .file-list-checkbox { flex-shrink: 0; margin-right: 0.25rem; } .file-list-icon { display: flex; justify-content: center; align-items: center; width: 32px; height: 32px; flex-shrink: 0; } .file-list-info { margin-right: 1rem; min-width: 0; flex: 1; } .file-list-name { overflow: hidden; margin-bottom: 0.25rem; font-size: 0.875rem; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; color: var(--color-text-primary); cursor: pointer; } .file-list-name:hover { color: var(--color-accent); } .file-list-path { overflow: hidden; margin-bottom: 0.25rem; font-size: 0.75rem; font-family: 'SF Mono', Monaco, Inconsolata, 'Fira Code', 'Fira Mono', 'Droid Sans Mono', 'Cascadia Code', 'Courier New', monospace; text-overflow: ellipsis; white-space: nowrap; color: var(--color-text-tertiary); opacity: 0.8; } .file-list-meta { display: flex; gap: 1rem; font-size: 0.75rem; color: var(--color-text-secondary); } .file-list-actions { display: flex; gap: 0.25rem; flex-shrink: 0; } /* File Actions Dropdown */ .file-actions-dropdown { position: relative; z-index: 100; } .file-actions-dropdown-content { position: absolute; top: 100%; right: 0; z-index: 3000; overflow: visible; overflow-y: auto; margin-top: 0.25rem; border: 1px solid var(--color-border); border-radius: var(--radius-md); min-width: 140px; max-width: 200px; max-height: 300px; white-space: nowrap; background: var(--color-surface); box-shadow: var(--shadow-lg); transform-origin: top right; animation: dropdown-appear 0.15s ease-out; } @keyframes dropdown-appear { from { opacity: 0; transform: scale(0.95) translateY(-5px); } to { opacity: 1; transform: scale(1) translateY(0); } } .file-actions-dropdown-content.position-left { right: auto; left: 0; transform-origin: top left; } .file-actions-dropdown-content.position-up { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 0.25rem; transform-origin: bottom right; } .file-actions-dropdown-content.position-up.position-left { transform-origin: bottom left; } .content-fullscreen .file-actions-dropdown-content { z-index: 4000; } @media (width <= 768px) { .file-actions-dropdown-content { min-width: 120px; max-width: 150px; } } .file-actions-dropdown-item { border-bottom: 1px solid var(--color-border-secondary); padding: 0.5rem 0.75rem; font-size: 0.875rem; color: var(--color-text-primary); transition: var(--transition-fast); cursor: pointer; } .file-actions-dropdown-item:last-child { border-bottom: none; } .file-actions-dropdown-item:hover { color: var(--color-accent); background: var(--color-surface-elevated); } /* Modal Overlay */ .modal-overlay { position: fixed; inset: 0; z-index: 2000; display: flex; justify-content: center; align-items: center; background: rgb(0 0 0 / 50%); } .modal-container { display: flex; overflow: hidden; border: 1px solid var(--color-border); border-radius: var(--radius-lg); max-width: 90vw; max-height: 90vh; background: var(--color-surface); box-shadow: var(--shadow-xl); flex-direction: column; } .modal-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--color-border); padding: 1rem 1.5rem; flex-shrink: 0; } .modal-title { margin: 0; font-size: 1.125rem; font-weight: 600; color: var(--color-text-primary); } .modal-close { display: flex; justify-content: center; align-items: center; border: none; border-radius: var(--radius-md); padding: 0.5rem; color: var(--color-text-secondary); background: none; transition: var(--transition-fast); cursor: pointer; } .modal-close:hover { color: var(--color-text-primary); background: var(--color-surface-elevated); } .modal-content { overflow-y: auto; padding: 1.5rem; background: var(--color-background-primary); flex: 1; } .modal-footer { display: flex; justify-content: flex-end; border-top: 1px solid var(--color-border); padding: 1rem 1.5rem; background: var(--color-background-primary); gap: 0.75rem; flex-shrink: 0; } /* Form Elements */ .form-group { margin-bottom: 1rem; } .form-label { display: block; margin-bottom: 0.5rem; font-size: 0.875rem; font-weight: 500; color: var(--color-text-primary); } .form-input { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.75rem; width: 100%; font-size: 0.875rem; color: var(--color-text-primary); background: var(--color-surface-elevated); transition: var(--transition-fast); } .form-input:focus { border-color: var(--color-accent); outline: none; box-shadow: 0 0 0 3px var(--color-accent-soft); } .form-textarea { min-height: 100px; resize: vertical; } .form-select { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.75rem 2rem 0.75rem 0.75rem; width: 100%; font-size: 0.875rem; color: var(--color-text-primary); background: var(--color-surface-elevated); cursor: pointer; appearance: none; } .form-select:focus { border-color: var(--color-accent); outline: none; box-shadow: 0 0 0 3px var(--color-accent-soft); } /* Switch */ .switch-container { display: flex; align-items: center; gap: 0.75rem; } .switch { position: relative; display: inline-block; width: 44px; height: 24px; } .switch input { width: 0; height: 0; opacity: 0; } .switch-slider { position: absolute; inset: 0; border-radius: 24px; background-color: var(--color-border); transition: 0.3s; cursor: pointer; } .switch-slider::before { position: absolute; bottom: 3px; left: 3px; border-radius: 50%; width: 18px; height: 18px; background-color: white; transition: 0.3s; content: ""; } input:checked + .switch-slider { background-color: var(--color-accent); } input:checked + .switch-slider::before { transform: translateX(20px); } .switch-label { font-size: 0.875rem; color: var(--color-text-primary); } /* Drawer */ .drawer-overlay { position: fixed; inset: 32px 0 0; z-index: 2000; display: flex; justify-content: flex-end; background: rgb(0 0 0 / 50%); } .drawer-container { display: flex; width: 60%; max-width: 800px; height: 100%; background: var(--color-background-secondary); box-shadow: var(--shadow-xl); transition: transform 0.3s ease-out; flex-direction: column; transform: translateX(100%); } .drawer-overlay.open .drawer-container { transform: translateX(0); } .drawer-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--color-border); padding: 1rem 1.5rem; flex-shrink: 0; } .drawer-title { margin: 0; font-size: 1.125rem; font-weight: 600; color: var(--color-text-primary); } .drawer-content { flex: 1; overflow-y: auto; padding: 1.5rem; } /* Upload Area */ .upload-area { border: 2px dashed var(--color-border); border-radius: var(--radius-lg); padding: 3rem 2rem; text-align: center; background: var(--color-surface-elevated); transition: var(--transition-medium); cursor: pointer; } .upload-area:hover, .upload-area.dragover { border-color: var(--color-accent); background: var(--color-accent-soft); } .upload-area-text { margin-bottom: 0.5rem; font-size: 1.125rem; color: var(--color-text-secondary); } .upload-area-subtext { font-size: 0.875rem; color: var(--color-text-tertiary); } /* Tabs */ .tabs-container { display: flex; flex-direction: column; height: 100%; } .tabs-header { display: flex; border-bottom: 1px solid var(--color-border); flex-shrink: 0; } .tab-button { position: relative; border: none; border-bottom: 2px solid transparent; padding: 0.75rem 1.5rem; font-size: 0.875rem; font-weight: 500; color: var(--color-text-secondary); background: none; transition: var(--transition-fast); cursor: pointer; } .tab-button:hover { color: var(--color-text-primary); background: var(--color-surface-elevated); } .tab-button.active { border-bottom-color: var(--color-accent); color: var(--color-accent); } .tab-badge { position: absolute; top: 0.25rem; right: 0.25rem; border-radius: 10px; padding: 0.125rem 0.375rem; min-width: 16px; font-size: 0.625rem; text-align: center; color: white; background: var(--color-accent); } .tab-content { display: flex; overflow: hidden; flex: 1; flex-direction: column; } .tab-panel { overflow-y: auto; padding: 1rem; flex: 1; } /* Progress Bar */ .progress-bar { overflow: hidden; border-radius: 4px; width: 100%; height: 8px; background: var(--color-surface-elevated); } .progress-fill { border-radius: 4px; height: 100%; background: var(--color-accent); transition: width 0.3s ease; } /* Badge */ .badge { display: inline-flex; align-items: center; border-radius: var(--radius-sm); padding: 0.25rem 0.5rem; font-size: 0.75rem; font-weight: 500; } .badge.success { color: var(--color-success); background: var(--color-success-soft); } .badge.error { color: var(--color-error); background: var(--color-error-soft); } .badge.warning { color: var(--color-warning); background: var(--color-warning-soft); } /* Tooltip */ .tooltip { position: relative; display: inline-block; } .tooltip-text { position: absolute; top: 125%; left: 50%; z-index: 1000; border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.5rem; width: max-content; max-width: 200px; font-size: 0.75rem; text-align: center; color: var(--color-text-primary); background: var(--color-surface-elevated); opacity: 0; visibility: hidden; box-shadow: var(--shadow-md); transition: opacity 0.3s; transform: translateX(-50%); } .tooltip:hover .tooltip-text { opacity: 1; visibility: visible; } /* File Actions Dropdown */ .file-actions-dropdown { position: relative; z-index: 100; } .file-actions-dropdown-content { position: absolute; top: 100%; right: 0; z-index: 3000; overflow: visible; overflow-y: auto; margin-top: 0.25rem; border: 1px solid var(--color-border); border-radius: var(--radius-md); min-width: 120px; max-width: 200px; /* Ensure dropdown is never clipped */ max-height: 300px; white-space: nowrap; background: var(--color-surface); box-shadow: var(--shadow-lg); transform-origin: top right; animation: dropdown-appear 0.15s ease-out; } .file-actions-dropdown-content.position-left { right: auto; left: 0; transform-origin: top left; } .file-actions-dropdown-content.position-up { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 0.25rem; transform-origin: bottom right; } .file-actions-dropdown-content.position-up.position-left { transform-origin: bottom left; } .content-fullscreen .file-actions-dropdown-content { z-index: 4000; } @media (width <= 768px) { .file-actions-dropdown-content { min-width: 100px; max-width: 140px; } } .file-actions-dropdown-item { display: flex; align-items: center; padding: 0.5rem 0.75rem; font-size: 0.875rem; color: var(--color-text-primary); background: var(--color-background-primary); transition: var(--transition-fast); cursor: pointer; gap: 0.5rem; } .file-actions-dropdown-item:hover { color: var(--color-blue-common); } /* Empty State */ .empty-state { display: flex; justify-content: center; align-items: center; padding: 4rem 2rem; text-align: center; flex-direction: column; } .empty-state-icon { margin-bottom: 1rem; width: 64px; height: 64px; color: var(--color-text-tertiary); } .empty-state-title { margin-bottom: 0.5rem; font-size: 1.125rem; font-weight: 600; color: var(--color-text-primary); } .empty-state-description { font-size: 0.875rem; color: var(--color-text-secondary); } /* Responsive Design */ @media (width <= 768px) { .bucket-container { padding: 0.5rem; } .card-header { flex-direction: column; align-items: stretch; } .header-left { flex-direction: column; align-items: stretch; gap: 0.5rem; } .control-panel { flex-direction: column; align-items: stretch; gap: 0.75rem; } .file-grid-item { overflow: auto; height: 240px; } .drawer-container { width: 90%; } } /* Transitions */ .fade-enter-active, .fade-leave-active { transition: opacity 0.3s ease; } .fade-enter-from, .fade-leave-to { opacity: 0; } .slide-enter-active, .slide-leave-active { transition: transform 0.3s ease; } .slide-enter-from, .slide-leave-to { transform: translateX(100%); } /* Fullscreen Styles */ .content-fullscreen { padding: 0; gap: 0; } .content-fullscreen .content-card { display: flex; border: none; border-radius: 0; box-shadow: none; flex: 1; flex-direction: column; } .fullscreen-header { z-index: 100; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--color-border-secondary); padding: 0.75rem 1rem; background: var(--color-surface); flex-shrink: 0; } .fullscreen-header-left { display: flex; align-items: center; flex: 1; min-width: 200px; } .fullscreen-header-center { display: flex; justify-content: center; align-items: center; flex: 1; } .fullscreen-header-right { display: flex; justify-content: flex-end; align-items: center; min-width: 200px; gap: 0.75rem; flex: 1; } .fullscreen-breadcrumb { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; } .content-fullscreen .content-area { flex: 1; display: flex; flex-direction: column; overflow: visible; } .content-fullscreen .virtual-scroller-container { flex: 1; overflow: visible; } /* Responsive adjustments for fullscreen */ @media (width <= 768px) { .fullscreen-header { flex-direction: column; gap: 0.75rem; padding: 1rem; } .fullscreen-header-left, .fullscreen-header-center, .fullscreen-header-right { width: 100%; min-width: unset; } .fullscreen-header-right { justify-content: space-between; } }