Files
Oxicloud/static/css/style.css
T
Dionisio 9290aea591 fix(#107): trash/recent/favorites list view rendering bugs
Trash view:
- Fix 'Invalid Date': use item.trashed_at (ISO 8601) instead of item.deleted_at * 1000
- Fix literal i18n key 'files.file_types.file': determine type from file extension
  (pdf, image, video, audio, text, document) since trash DTO has no mime_type
- Fix column alignment: remove checkbox from trash header (not applicable),
  add .trash-header CSS class matching the 5-column grid layout

Recent view:
- Fix header/row column misalignment: add empty placeholder div for indicator
  column and .recent-header CSS class matching the 5-column grid
- Fix missing i18n key: use 'recent.accessed' instead of 'files.last_accessed'
- Fix default typeLabel not internationalized: use i18n.t('files.file_types.document')

Favorites view:
- Fix header/row column misalignment: add empty placeholder div for indicator
  column and .favorites-header CSS class matching the 5-column grid
- Fix default typeLabel not internationalized: use i18n.t('files.file_types.document')

Bump SW cache to v11.
2026-02-14 11:06:29 +01:00

4570 lines
92 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Reset and base styles */
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}
body {
display: flex;
height: 100vh;
background-color: #f5f7fa;
overflow: hidden;
}
/* Custom scrollbar styling */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, 0.2);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background-color: rgba(0, 0, 0, 0.3);
}
/* Firefox scrollbar */
* {
scrollbar-width: thin;
scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
}
/* Global select styling */
select {
padding: 8px 32px 8px 12px;
border: 1px solid #e2e8f0;
border-radius: 8px;
background-color: white;
font-size: 14px;
color: #2d3748;
cursor: pointer;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23718096' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 10px center;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
font-family: inherit;
}
select:hover {
border-color: #cbd5e0;
}
select:focus {
outline: none;
border-color: #ff5e3a;
box-shadow: 0 0 0 3px rgba(255, 94, 58, 0.1);
}
/* Sidebar */
.sidebar {
width: 250px;
background: linear-gradient(180deg, #2a3042 0%, #232838 100%);
color: #fff;
display: flex;
flex-direction: column;
height: 100%;
flex-shrink: 0;
box-shadow: 2px 0 12px rgba(0,0,0,0.15);
}
.logo-container {
padding: 22px 20px;
display: flex;
align-items: center;
border-bottom: 1px solid rgba(255,255,255,0.07);
margin-bottom: 8px;
}
.logo {
width: 40px;
height: 40px;
background: linear-gradient(135deg, #ff5e3a 0%, #ff8a5c 100%);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 12px;
box-shadow: 0 3px 10px rgba(255,94,58,0.35);
transition: transform 0.2s, box-shadow 0.2s;
[dir='rtl'] & {
margin-left: 12px;
margin-right: unset;
}
}
.logo:hover {
transform: scale(1.05);
box-shadow: 0 4px 14px rgba(255,94,58,0.45);
}
.logo svg {
width: 22px;
height: 22px;
fill: white;
}
.app-name {
font-size: 19px;
font-weight: 700;
color: white;
letter-spacing: 0.3px;
}
.nav-menu {
display: flex;
flex-direction: column;
flex-grow: 1;
padding: 8px 12px;
gap: 2px;
}
.nav-item {
display: flex;
align-items: center;
padding: 11px 14px;
border-radius: 10px;
cursor: pointer;
color: rgba(255,255,255,0.65);
font-size: 14.5px;
font-weight: 500;
transition: all 0.2s ease;
position: relative;
border-left: 3px solid transparent;
[dir='rtl'] & {
border-left: none;
border-right: 3px solid transparent;
}
}
.nav-item:hover {
background-color: rgba(255,255,255,0.06);
color: rgba(255,255,255,0.9);
}
.nav-item.active {
background-color: rgba(255,94,58,0.12);
color: #fff;
border-left-color: #ff5e3a;
font-weight: 600;
[dir='rtl'] & {
border-left-color: transparent;
border-right-color: #ff5e3a;
}
}
.nav-item i {
margin-right: 14px;
width: 20px;
text-align: center;
font-size: 16px;
transition: color 0.2s, transform 0.2s;
[dir='rtl'] & {
margin-left: 14px;
margin-right: unset;
}
}
/* Colored icons per section */
.nav-item:nth-child(1) i { color: #ffa94d; } /* Files - orange */
.nav-item:nth-child(2) i { color: #74b9ff; } /* Shared - blue */
.nav-item:nth-child(3) i { color: #81ecec; } /* Recent - teal */
.nav-item:nth-child(4) i { color: #ffd43b; } /* Favorites - gold */
.nav-item:nth-child(5) i { color: #ff7675; } /* Trash - red */
.nav-item.active:nth-child(1) i { color: #ff5e3a; }
.nav-item.active:nth-child(2) i { color: #0984e3; }
.nav-item.active:nth-child(3) i { color: #00cec9; }
.nav-item.active:nth-child(4) i { color: #f0c800; }
.nav-item.active:nth-child(5) i { color: #e74c3c; }
.nav-item:hover i {
transform: scale(1.1);
}
/* Storage indicator */
.storage-container {
margin: auto 12px 16px 12px;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.07);
border-radius: 12px;
padding: 16px;
}
.storage-title {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
margin-bottom: 12px;
font-size: 13px;
font-weight: 600;
color: rgba(255,255,255,0.8);
letter-spacing: 0.3px;
}
.storage-bar {
height: 6px;
background-color: rgba(255,255,255,0.1);
border-radius: 3px;
overflow: hidden;
margin-bottom: 10px;
}
.storage-fill {
height: 100%;
background: linear-gradient(90deg, #ff5e3a 0%, #ff8a5c 100%);
border-radius: 3px;
width: 0%;
transition: width 0.8s ease;
}
.storage-info {
text-align: center;
font-size: 11.5px;
color: rgba(255,255,255,0.5);
font-weight: 400;
}
/* Main content */
.main-content {
flex-grow: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
/* Top bar */
.top-bar {
height: 70px;
min-height: 70px;
max-height: 70px;
background-color: white;
border-bottom: 1px solid #e6e6e6;
display: flex;
align-items: center;
padding: 0 30px;
justify-content: space-between;
flex-shrink: 0;
}
.search-container {
flex-grow: 1;
max-width: 600px;
position: relative;
margin-right: 20px;
display: flex;
align-items: center;
[dir='rtl'] & {
margin-left: 20px;
margin-right: unset;
}
}
.search-container input {
width: 100%;
padding: 12px 50px 12px 44px;
border-radius: 12px;
border: 2px solid #e2e8f0;
background-color: #f8fafc;
font-size: 14px;
height: 46px;
color: #1a202c;
transition: all 0.2s ease;
}
.search-container input:hover {
border-color: #cbd5e0;
background-color: #fff;
}
.search-container input:focus {
outline: none;
border-color: #ff5e3a;
background-color: #fff;
box-shadow: 0 0 0 4px rgba(255, 94, 58, 0.1);
}
.search-container input::placeholder {
color: #a0aec0;
}
.search-icon {
position: absolute;
left: 16px;
top: 50%;
transform: translateY(-50%);
color: #a0aec0;
font-size: 16px;
pointer-events: none;
transition: color 0.2s ease;
[dir='rtl'] & {
right: 16px;
left: unset;
}
}
.search-container input:focus + .search-icon,
.search-container:focus-within .search-icon {
color: #ff5e3a;
}
.search-button {
position: absolute;
right: 6px;
top: 50%;
transform: translateY(-50%);
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
color: white;
border: none;
border-radius: 10px;
width: 36px;
height: 36px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
box-shadow: 0 2px 8px rgba(255, 94, 58, 0.3);
[dir='rtl'] & {
left: 6px;
right: unset;
}
}
.search-button:hover {
transform: translateY(-50%) scale(1.05);
box-shadow: 0 4px 12px rgba(255, 94, 58, 0.4);
}
.search-button:active {
transform: translateY(-50%) scale(0.98);
}
.search-button i {
font-size: 14px;
}
/* Styles for search results */
.search-results-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
margin-bottom: 15px;
border-bottom: 1px solid #eee;
width: 100%;
}
.search-results-header h3 {
margin: 0;
font-size: 16px;
color: #555;
}
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 40px;
text-align: center;
color: #888;
width: 100%;
}
.user-controls {
display: flex;
align-items: center;
gap: 12px;
}
/* User Menu */
.user-menu-wrapper {
position: relative;
}
.user-avatar-btn {
background: none;
border: 2px solid transparent;
border-radius: 50%;
padding: 2px;
cursor: pointer;
transition: all 0.25s ease;
display: flex;
align-items: center;
justify-content: center;
}
.user-avatar-btn:hover {
border-color: rgba(255, 94, 58, 0.4);
transform: scale(1.05);
}
.user-avatar-btn:hover .user-avatar {
box-shadow: 0 0 0 2px rgba(255, 94, 58, 0.2);
}
.user-menu-wrapper.open .user-avatar-btn {
border-color: #ff5e3a;
}
.user-avatar {
width: 38px;
height: 38px;
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: 700;
font-size: 14px;
letter-spacing: 0.5px;
user-select: none;
}
.user-menu {
display: none;
position: absolute;
top: calc(100% + 10px);
right: 0;
width: 300px;
background: white;
border-radius: 16px;
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);
z-index: 2000;
overflow: hidden;
animation: userMenuIn 0.2s ease-out;
}
.user-menu-wrapper.open .user-menu {
display: block;
}
@keyframes userMenuIn {
from {
opacity: 0;
transform: translateY(-8px) scale(0.97);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.user-menu-header {
display: flex;
align-items: center;
gap: 14px;
padding: 20px 20px 16px;
background: linear-gradient(135deg, #fef5f3 0%, #fdf2f8 100%);
border-bottom: 1px solid #fce7e1;
}
.user-menu-avatar {
width: 48px;
height: 48px;
min-width: 48px;
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-weight: 700;
font-size: 17px;
letter-spacing: 0.5px;
box-shadow: 0 4px 12px rgba(255, 94, 58, 0.3);
}
.user-menu-info {
overflow: hidden;
}
.user-menu-name {
font-weight: 600;
font-size: 15px;
color: #1e293b;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user-menu-email {
font-size: 12.5px;
color: #94a3b8;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-top: 2px;
}
.user-menu-storage {
padding: 14px 20px;
}
.user-menu-storage-label {
display: flex;
align-items: center;
gap: 8px;
font-size: 12px;
font-weight: 600;
color: #64748b;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 8px;
}
.user-menu-storage-label i {
font-size: 11px;
color: #94a3b8;
}
.user-menu-storage-bar {
height: 6px;
background: #f1f5f9;
border-radius: 3px;
overflow: hidden;
margin-bottom: 6px;
}
.user-menu-storage-fill {
height: 100%;
background: linear-gradient(90deg, #ff5e3a, #ff2d55);
border-radius: 3px;
width: 0%;
transition: width 0.5s ease;
}
.user-menu-storage-text {
font-size: 11.5px;
color: #94a3b8;
}
.user-menu-divider {
height: 1px;
background: #f1f5f9;
margin: 4px 0;
}
.user-menu-item {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
padding: 12px 20px;
border: none;
background: none;
color: #334155;
font-size: 14px;
cursor: pointer;
transition: background 0.15s ease;
text-align: left;
}
.user-menu-item:hover {
background: #f8fafc;
}
.user-menu-item i {
width: 20px;
text-align: center;
font-size: 15px;
color: #64748b;
}
.user-menu-item .theme-toggle-pill {
margin-left: auto;
width: 40px;
height: 22px;
background: #e2e8f0;
border-radius: 11px;
position: relative;
transition: background 0.3s ease;
}
.user-menu-item .theme-toggle-pill.active {
background: #ff5e3a;
}
.user-menu-item .theme-toggle-knob {
width: 18px;
height: 18px;
background: white;
border-radius: 50%;
position: absolute;
top: 2px;
left: 2px;
transition: transform 0.3s ease;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
}
.user-menu-item .theme-toggle-pill.active .theme-toggle-knob {
transform: translateX(18px);
}
.user-menu-admin {
color: #1d4ed8;
}
.user-menu-admin i {
color: #3b82f6;
}
.user-menu-admin:hover {
background: #eff6ff;
}
.user-menu-role-badge {
padding: 0 20px 4px;
}
.role-badge {
display: inline-flex;
align-items: center;
gap: 4px;
font-size: 11px;
font-weight: 600;
padding: 2px 10px;
border-radius: 10px;
}
.role-badge-admin {
background: #dbeafe;
color: #1d4ed8;
}
.role-badge i {
font-size: 10px;
}
.user-menu-logout {
color: #ef4444;
margin-bottom: 4px;
}
.user-menu-logout i {
color: #ef4444;
}
.user-menu-logout:hover {
background: #fef2f2;
}
/* About Modal */
.about-modal-overlay {
display: none;
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(4px);
z-index: 3000;
justify-content: center;
align-items: center;
}
.about-modal-overlay.show {
display: flex;
}
.about-modal {
background: white;
border-radius: 20px;
padding: 40px;
max-width: 400px;
width: 90%;
text-align: center;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
animation: userMenuIn 0.25s ease-out;
}
.about-modal-logo {
width: 72px;
height: 72px;
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
border-radius: 20px;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 20px;
box-shadow: 0 8px 24px rgba(255, 94, 58, 0.3);
}
.about-modal-logo i {
font-size: 32px;
color: white;
}
.about-modal h2 {
font-size: 22px;
font-weight: 700;
color: #1e293b;
margin-bottom: 6px;
}
.about-modal .about-version {
font-size: 13px;
color: #94a3b8;
margin-bottom: 20px;
}
.about-modal .about-description {
font-size: 14px;
color: #64748b;
line-height: 1.6;
margin-bottom: 24px;
}
.about-modal .about-tech {
display: flex;
justify-content: center;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 24px;
}
.about-modal .about-tech-badge {
padding: 4px 12px;
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 20px;
font-size: 12px;
color: #64748b;
font-weight: 500;
}
.about-modal .about-links {
display: flex;
justify-content: center;
gap: 16px;
margin-bottom: 24px;
}
.about-modal .about-link {
display: flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: #ff5e3a;
text-decoration: none;
font-weight: 500;
transition: opacity 0.2s;
}
.about-modal .about-link:hover {
opacity: 0.8;
}
.about-modal .about-close-btn {
padding: 10px 32px;
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
color: white;
border: none;
border-radius: 10px;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
box-shadow: 0 4px 15px rgba(255, 94, 58, 0.3);
}
.about-modal .about-close-btn:hover {
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(255, 94, 58, 0.4);
}
/* Language Selector - Custom Dropdown */
.language-selector {
position: relative;
margin-right: 15px;
}
.language-selector-toggle {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 14px;
background-color: #f0f3f7;
border: 1px solid #e2e8f0;
border-radius: 50px;
cursor: pointer;
font-size: 14px;
font-weight: 500;
color: #4a5568;
transition: all 0.2s ease;
user-select: none;
}
.language-selector-toggle:hover {
background-color: #e2e8f0;
border-color: #cbd5e0;
}
.language-selector-toggle i {
font-size: 14px;
color: #718096;
}
.language-selector-toggle .lang-code {
font-weight: 600;
color: #2d3748;
}
.language-selector-toggle .dropdown-arrow {
font-size: 10px;
color: #718096;
transition: transform 0.2s ease;
margin-left: 2px;
}
.language-selector.open .dropdown-arrow {
transform: rotate(180deg);
}
.language-selector-dropdown {
position: absolute;
top: calc(100% + 8px);
right: 0;
min-width: 160px;
background-color: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
border: 1px solid #e2e8f0;
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: all 0.2s ease;
z-index: 1000;
overflow: hidden;
}
.language-selector.open .language-selector-dropdown {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.language-option {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 16px;
cursor: pointer;
font-size: 14px;
color: #4a5568;
transition: background-color 0.15s ease;
}
.language-option:hover {
background-color: #f7fafc;
}
.language-option.active {
background-color: #fff5f3;
color: #ff5e3a;
}
.language-option .lang-flag {
font-size: 18px;
line-height: 1;
}
.language-option .lang-name {
flex: 1;
}
.language-option .lang-check {
color: #ff5e3a;
font-size: 12px;
opacity: 0;
}
.language-option.active .lang-check {
opacity: 1;
}
/* Content area */
.content-area {
flex-grow: 1;
padding: 20px;
overflow-y: scroll;
scrollbar-gutter: stable;
}
.page-title {
font-size: 24px;
font-weight: bold;
margin-bottom: 20px;
color: #2d3748;
}
.actions-bar {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}
.action-buttons {
display: flex;
gap: 12px;
}
.btn {
padding: 12px 24px;
border-radius: 12px;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: 500;
gap: 8px;
transition: all 0.2s ease;
}
.btn i {
font-size: 15px;
}
.btn-primary {
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
color: white;
box-shadow: 0 4px 15px rgba(255, 94, 58, 0.3);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(255, 94, 58, 0.4);
}
.btn-primary:active {
transform: translateY(0);
box-shadow: 0 2px 10px rgba(255, 94, 58, 0.3);
}
/* Upload Dropdown */
.upload-dropdown {
position: relative;
display: inline-block;
}
.upload-dropdown .btn-primary {
display: flex;
align-items: center;
gap: 6px;
}
.upload-dropdown-menu {
display: none;
position: absolute;
top: calc(100% + 6px);
left: 0;
min-width: 200px;
background: white;
border-radius: 12px;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15);
border: 1px solid #e2e8f0;
z-index: 1000;
overflow: hidden;
animation: dropdownFadeIn 0.15s ease-out;
}
.upload-dropdown-menu.show {
display: block;
}
@keyframes dropdownFadeIn {
from {
opacity: 0;
transform: translateY(-8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.upload-dropdown-item {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
padding: 12px 16px;
border: none;
background: none;
color: #334155;
font-size: 14px;
cursor: pointer;
transition: background 0.15s ease;
text-align: left;
}
.upload-dropdown-item:hover {
background: #f1f5f9;
}
.upload-dropdown-item:active {
background: #e2e8f0;
}
.upload-dropdown-item i {
width: 20px;
text-align: center;
color: #64748b;
font-size: 15px;
}
.upload-dropdown-item:first-child {
border-bottom: 1px solid #f1f5f9;
}
.btn-secondary {
background-color: #f8fafc;
color: #4a5568;
border: 2px solid #e2e8f0;
}
.btn-secondary:hover {
background-color: #edf2f7;
border-color: #cbd5e0;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.btn-secondary:active {
transform: translateY(0);
background-color: #e2e8f0;
}
.btn-danger {
background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
color: white;
box-shadow: 0 4px 15px rgba(239, 68, 68, 0.3);
}
.btn-danger:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(239, 68, 68, 0.4);
}
.btn-danger:active {
transform: translateY(0);
box-shadow: 0 2px 10px rgba(239, 68, 68, 0.3);
}
/* View Toggle Buttons */
.view-toggle {
display: flex;
gap: 6px;
padding: 4px;
background-color: #f0f3f7;
border-radius: 12px;
border: 1px solid #e2e8f0;
}
.toggle-btn {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 36px;
background-color: transparent;
border: none;
border-radius: 8px;
cursor: pointer;
color: #64748b;
font-size: 16px;
transition: all 0.2s ease;
}
.toggle-btn:hover {
background-color: #e2e8f0;
color: #4a5568;
}
.toggle-btn.active {
background-color: white;
color: #ff5e3a;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.toggle-btn i {
pointer-events: none;
}
/* Files grid */
.files-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 240px));
gap: 20px;
justify-content: start;
position: relative;
}
/* Rubber band / lasso selection rectangle */
.selection-rect {
position: fixed;
border: 1.5px solid var(--primary-color, #e67e22);
background-color: rgba(230, 126, 34, 0.08);
pointer-events: none;
z-index: 1000;
border-radius: 3px;
display: none;
}
.file-card {
background-color: white;
border-radius: 12px;
border: 2px solid #e2e8f0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s, border-color 0.2s;
width: 100%;
min-height: 180px;
position: relative;
}
.file-card:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0,0,0,0.08);
border-color: #cbd5e0;
}
.file-card.selected {
border-color: #ff5e3a;
background: #fff8f6;
box-shadow: 0 0 0 1px rgba(255, 94, 58, 0.15), 0 4px 12px rgba(255, 94, 58, 0.1);
}
.file-card.selected:hover {
border-color: #ff5e3a;
box-shadow: 0 0 0 1px rgba(255, 94, 58, 0.2), 0 6px 18px rgba(255, 94, 58, 0.15);
}
/* Selection checkbox */
.file-card-checkbox {
position: absolute;
top: 10px;
left: 10px;
width: 22px;
height: 22px;
border-radius: 6px;
border: 2px solid #cbd5e0;
background: white;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity 0.15s, background 0.15s, border-color 0.15s;
z-index: 10;
cursor: pointer;
}
.file-card:hover .file-card-checkbox {
opacity: 1;
}
.file-card.selected .file-card-checkbox {
opacity: 1;
background: #ff5e3a;
border-color: #ff5e3a;
}
.file-card.selected .file-card-checkbox i {
color: white;
font-size: 11px;
}
/* More actions button (three dots) */
.file-card-more {
position: absolute;
top: 8px;
right: 8px;
width: 30px;
height: 30px;
border-radius: 8px;
border: none;
background: transparent;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity 0.15s, background 0.15s;
z-index: 10;
cursor: pointer;
color: #64748b;
font-size: 16px;
}
.file-card:hover .file-card-more {
opacity: 1;
}
.file-card-more:hover {
background: #f1f5f9;
color: #334155;
}
.file-card.dragging {
opacity: 0.5;
transform: scale(0.95);
box-shadow: none;
}
.file-card.drop-target {
background-color: rgba(255, 193, 7, 0.1);
border: 2px dashed #ffc107;
}
/* Styles for folders as in the mockup */
.file-icon.folder-icon {
width: 100px;
height: 70px;
background-color: #ffeaa7; /* Light yellow color */
border-radius: 8px;
position: relative;
margin-bottom: 10px;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.folder-icon::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 20px;
background-color: #fdcb6e; /* Darker yellow color for the tab */
border-radius: 8px 8px 0 0;
}
.file-icon.folder-icon i {
display: none; /* Hide Font Awesome icon */
}
/* Style for documents */
.file-icon.doc-icon {
width: 100px;
height: 70px;
background-color: #e2e8f0; /* Light gray background */
border-radius: 4px;
position: relative;
margin-bottom: 10px;
}
.file-icon.doc-icon::before {
content: "";
position: absolute;
top: 15px;
left: 20px;
right: 20px;
height: 4px;
background-color: #a0aec0;
border-radius: 2px;
}
.file-icon.doc-icon::after {
content: "";
position: absolute;
top: 25px;
left: 20px;
right: 30px;
height: 4px;
background-color: #a0aec0;
border-radius: 2px;
}
/* Style for PDF files */
.file-icon.pdf-icon {
width: 100px;
height: 70px;
background-color: #fee2e2;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #e53e3e;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.pdf-icon i {
font-size: 28px;
color: #e53e3e;
opacity: 0.7;
}
/* Style for document files (doc, docx, txt, rtf, odt) */
.file-icon.doc-icon {
width: 100px;
height: 70px;
background-color: #ebf5fb;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #2b6cb0;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.doc-icon i {
font-size: 28px;
color: #2b6cb0;
opacity: 0.7;
}
/* Style for shell/script files */
.file-icon.script-icon {
width: 100px;
height: 70px;
background-color: #e8f5e9;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #4eaa25;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.script-icon i {
font-size: 28px;
color: #4eaa25;
opacity: 0.7;
}
/* Style for config files */
.file-icon.config-icon {
width: 100px;
height: 70px;
background-color: #f1f3f5;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #718096;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.config-icon i {
font-size: 28px;
color: #718096;
opacity: 0.7;
}
/* Style for images */
.file-icon.image-icon {
width: 100px;
height: 70px;
background-color: #74b9ff; /* Light blue background */
border-radius: 4px;
position: relative;
margin-bottom: 10px;
overflow: hidden;
}
.file-icon.image-icon::before {
content: "";
position: absolute;
top: 10px;
left: 15px;
width: 20px;
height: 20px;
background-color: #ffda79; /* Yellow circle like a sun */
border-radius: 50%;
}
/* Style for videos */
.file-icon.video-icon {
width: 100px;
height: 70px;
background: linear-gradient(135deg, #e0e7ff 0%, #ede9fe 50%, #fce7f3 100%);
border-radius: 10px;
position: relative;
margin-bottom: 10px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid rgba(139, 92, 246, 0.15);
}
.file-icon.video-icon::before {
content: "";
width: 36px;
height: 36px;
background: linear-gradient(135deg, #8b5cf6 0%, #a855f7 100%);
border-radius: 50%;
position: absolute;
box-shadow: 0 3px 10px rgba(139, 92, 246, 0.35);
}
.file-icon.video-icon::after {
content: "";
width: 0;
height: 0;
border-top: 7px solid transparent;
border-bottom: 7px solid transparent;
border-left: 11px solid white;
position: absolute;
margin-left: 3px;
}
/* Styles for code files */
.file-icon.code-icon {
width: 100px;
height: 70px;
background-color: #e2e8f0; /* Light gray background */
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #556ee6; /* Blue top border */
overflow: hidden;
}
/* Lines that simulate code */
.file-icon.code-icon::before,
.file-icon.code-icon::after {
content: "";
position: absolute;
left: 10px;
right: 10px;
height: 2px;
background-color: #556ee6; /* Blue color for code */
}
.file-icon.code-icon::before {
top: 15px;
width: 80%;
}
.file-icon.code-icon::after {
top: 25px;
width: 60%;
}
/* Add additional lines to simulate code */
.file-icon.code-icon .code-line-1,
.file-icon.code-icon .code-line-2,
.file-icon.code-icon .code-line-3 {
position: absolute;
left: 10px;
height: 2px;
background-color: #a0aec0; /* Gray color for code */
}
.file-icon.code-icon .code-line-1 {
top: 35px;
width: 70%;
}
.file-icon.code-icon .code-line-2 {
top: 45px;
width: 85%;
}
.file-icon.code-icon .code-line-3 {
top: 55px;
width: 50%;
}
/* Specific colors for different code file types */
.file-icon.json-icon {
border-top-color: #ffb86c; /* Orange for JSON */
}
.file-icon.json-icon::before,
.file-icon.json-icon::after {
background-color: #ffb86c;
}
.file-icon.js-icon {
border-top-color: #ffd43b; /* Yellow for JavaScript */
}
.file-icon.js-icon::before,
.file-icon.js-icon::after {
background-color: #ffd43b;
}
.file-icon.html-icon {
border-top-color: #e34c26; /* Red for HTML */
}
.file-icon.html-icon::before,
.file-icon.html-icon::after {
background-color: #e34c26;
}
.file-icon.css-icon {
border-top-color: #2965f1; /* Blue for CSS */
}
.file-icon.css-icon::before,
.file-icon.css-icon::after {
background-color: #2965f1;
}
.file-icon.py-icon {
border-top-color: #3776ab; /* Dark blue for Python */
}
.file-icon.py-icon::before,
.file-icon.py-icon::after {
background-color: #3776ab;
}
/* TypeScript */
.file-icon.ts-icon { border-top-color: #3178c6; }
.file-icon.ts-icon::before, .file-icon.ts-icon::after { background-color: #3178c6; }
/* Rust */
.file-icon.rust-icon { border-top-color: #dea584; }
.file-icon.rust-icon::before, .file-icon.rust-icon::after { background-color: #dea584; }
/* Go */
.file-icon.go-icon { border-top-color: #00add8; }
.file-icon.go-icon::before, .file-icon.go-icon::after { background-color: #00add8; }
/* Java */
.file-icon.java-icon { border-top-color: #e76f00; }
.file-icon.java-icon::before, .file-icon.java-icon::after { background-color: #e76f00; }
/* C / C++ */
.file-icon.c-icon { border-top-color: #555; }
.file-icon.c-icon::before, .file-icon.c-icon::after { background-color: #555; }
/* C# */
.file-icon.cs-icon { border-top-color: #68217a; }
.file-icon.cs-icon::before, .file-icon.cs-icon::after { background-color: #68217a; }
/* PHP */
.file-icon.php-icon { border-top-color: #8892be; }
.file-icon.php-icon::before, .file-icon.php-icon::after { background-color: #8892be; }
/* Ruby */
.file-icon.ruby-icon { border-top-color: #cc342d; }
.file-icon.ruby-icon::before, .file-icon.ruby-icon::after { background-color: #cc342d; }
/* Swift */
.file-icon.swift-icon { border-top-color: #fa7343; }
.file-icon.swift-icon::before, .file-icon.swift-icon::after { background-color: #fa7343; }
/* Kotlin */
.file-icon.kotlin-icon { border-top-color: #7f52ff; }
.file-icon.kotlin-icon::before, .file-icon.kotlin-icon::after { background-color: #7f52ff; }
/* SQL */
.file-icon.sql-icon { border-top-color: #e38c00; }
.file-icon.sql-icon::before, .file-icon.sql-icon::after { background-color: #e38c00; }
/* YAML / YML */
.file-icon.yaml-icon { border-top-color: #cb171e; }
.file-icon.yaml-icon::before, .file-icon.yaml-icon::after { background-color: #cb171e; }
/* TOML */
.file-icon.toml-icon { border-top-color: #9c4221; }
.file-icon.toml-icon::before, .file-icon.toml-icon::after { background-color: #9c4221; }
/* Markdown */
.file-icon.md-icon { border-top-color: #083fa1; }
.file-icon.md-icon::before, .file-icon.md-icon::after { background-color: #083fa1; }
/* Shell / Script */
.file-icon.script-icon { border-top-color: #4eaa25; }
.file-icon.script-icon::before, .file-icon.script-icon::after { background-color: #4eaa25; }
/* Config files */
.file-icon.config-icon { border-top-color: #718096; }
.file-icon.config-icon::before, .file-icon.config-icon::after { background-color: #718096; }
/* Spreadsheet (xlsx, xls, csv, ods) */
.file-icon.spreadsheet-icon {
width: 100px;
height: 70px;
background-color: #e6f4ea;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #0d904f;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.spreadsheet-icon i { display: none; }
.file-icon.spreadsheet-icon::before {
content: "";
position: absolute;
top: 12px; left: 18px;
width: 64px; height: 44px;
background:
repeating-linear-gradient(to bottom, #0d904f 0px, #0d904f 1px, transparent 1px, transparent 11px),
repeating-linear-gradient(to right, #0d904f 0px, #0d904f 1px, transparent 1px, transparent 22px);
opacity: 0.35;
}
/* Presentation (pptx, ppt, odp, key) */
.file-icon.presentation-icon {
width: 100px;
height: 70px;
background-color: #fef3e2;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #d04423;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.presentation-icon i { display: none; }
.file-icon.presentation-icon::before {
content: "";
position: absolute;
top: 14px; left: 22px;
width: 56px; height: 38px;
border: 2px solid #d04423;
border-radius: 4px;
opacity: 0.4;
}
.file-icon.presentation-icon::after {
content: "";
position: absolute;
top: 24px; left: 38px;
width: 0; height: 0;
border-top: 10px solid transparent;
border-bottom: 10px solid transparent;
border-left: 14px solid #d04423;
opacity: 0.5;
}
/* Audio files */
.file-icon.audio-icon {
width: 100px;
height: 70px;
background-color: #fff3e0;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #f57c00;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.audio-icon i { display: none; }
.file-icon.audio-icon::before {
content: "♪";
font-size: 28px;
color: #f57c00;
opacity: 0.6;
}
/* Archive (zip, rar, tar, gz, 7z) */
.file-icon.archive-icon {
width: 100px;
height: 70px;
background-color: #f5f0eb;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #8d6e63;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.archive-icon i { display: none; }
.file-icon.archive-icon::before {
content: "";
position: absolute;
top: 10px; left: 45px;
width: 10px; height: 46px;
background: repeating-linear-gradient(to bottom, #8d6e63 0px, #8d6e63 5px, #f5f0eb 5px, #f5f0eb 10px);
opacity: 0.5;
}
/* Installer (exe, msi, dmg, deb, rpm, appimage) */
.file-icon.installer-icon {
width: 100px;
height: 70px;
background-color: #f3e8ff;
border-radius: 4px;
position: relative;
margin-bottom: 10px;
border-top: 3px solid #7c3aed;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.file-icon.installer-icon i { display: none; }
.file-icon.installer-icon::before {
content: "⬇";
font-size: 24px;
color: #7c3aed;
opacity: 0.5;
}
/* List view icon colors for new types */
.file-item .file-icon.spreadsheet-icon { background-color: #e6f4ea; width: 36px; height: 36px; margin-bottom: 0; border-top: none; }
.file-item .file-icon.spreadsheet-icon i { color: #0d904f; display: flex; }
.file-item .file-icon.spreadsheet-icon::before { display: none; }
.file-item .file-icon.presentation-icon { background-color: #fef3e2; width: 36px; height: 36px; margin-bottom: 0; border-top: none; }
.file-item .file-icon.presentation-icon i { color: #d04423; display: flex; }
.file-item .file-icon.presentation-icon::before, .file-item .file-icon.presentation-icon::after { display: none; }
.file-item .file-icon.audio-icon { background-color: #fff3e0; width: 36px; height: 36px; margin-bottom: 0; border-top: none; }
.file-item .file-icon.audio-icon i { color: #f57c00; display: flex; }
.file-item .file-icon.audio-icon::before { display: none; }
.file-item .file-icon.archive-icon { background-color: #f5f0eb; width: 36px; height: 36px; margin-bottom: 0; border-top: none; }
.file-item .file-icon.archive-icon i { color: #8d6e63; display: flex; }
.file-item .file-icon.archive-icon::before { display: none; }
.file-item .file-icon.installer-icon { background-color: #f3e8ff; width: 36px; height: 36px; margin-bottom: 0; border-top: none; }
.file-item .file-icon.installer-icon i { color: #7c3aed; display: flex; }
.file-item .file-icon.installer-icon::before { display: none; }
.file-item .file-icon.script-icon { background-color: #e8f5e9; }
.file-item .file-icon.script-icon i { color: #4eaa25; }
.file-item .file-icon.config-icon { background-color: #f1f3f5; }
.file-item .file-icon.config-icon i { color: #718096; }
.file-name {
font-size: 14px;
font-weight: 500;
text-align: center;
margin-bottom: 5px;
color: #2d3748;
}
.file-info {
font-size: 12px;
color: #718096;
text-align: center;
}
/* File list - Improved style */
.files-list-view {
display: flex;
flex-direction: column;
width: 100%;
border-radius: 10px;
overflow: hidden;
background-color: white;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
}
.list-header {
display: grid;
grid-template-columns: 36px minmax(200px, 2fr) 100px 110px 160px;
padding: 15px;
font-weight: 600;
color: #2d3748;
background-color: #f8f9fa;
border-bottom: 1px solid #e0e6ed;
align-items: center;
}
.file-item {
display: grid;
grid-template-columns: 36px minmax(200px, 2fr) 100px 110px 160px;
padding: 12px 15px;
border-bottom: 1px solid #f0f0f0;
align-items: center;
cursor: pointer;
transition: background-color 0.2s;
background-color: white;
}
.file-item.selected {
background-color: #fff8f6;
}
.file-item.selected:hover {
background-color: #fff0ec;
}
/* For trash mode, adjust columns (5 cols: name, type, path, date, actions) */
.list-header.trash-header {
grid-template-columns: minmax(180px, 1.5fr) 0.5fr 1fr 140px 100px;
}
.trash-item.file-item {
grid-template-columns: minmax(180px, 1.5fr) 0.5fr 1fr 140px 100px;
}
.file-item:hover {
background-color: #f0f8ff;
}
.file-item .name-cell {
display: flex;
align-items: center;
gap: 12px;
}
.file-item .file-icon {
width: 36px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
font-size: 20px;
margin-bottom: 0;
}
.file-item .file-icon.folder-icon {
background-color: #ffeaa7;
position: relative;
width: 36px;
height: 36px;
margin-bottom: 0;
}
.file-item .file-icon.folder-icon::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 8px;
background-color: #fdcb6e;
border-radius: 8px 8px 0 0;
}
.file-item .file-icon.folder-icon i {
display: none;
}
/* Specific icons for files in list view */
.file-item .file-icon.pdf-icon {
background-color: #fee2e2;
}
.file-item .file-icon.pdf-icon i {
color: #e53e3e;
}
.file-item .file-icon.image-icon {
background-color: #e0f2fe;
}
.file-item .file-icon.image-icon i {
color: #3b82f6;
}
.file-item .file-icon.video-icon {
background: linear-gradient(135deg, #ede9fe, #fce7f3);
}
.file-item .file-icon.video-icon i {
color: #8b5cf6;
}
.file-item .file-icon.audio-icon {
background-color: #fef3c7;
}
.file-item .file-icon.audio-icon i {
color: #f59e0b;
}
.file-item .file-icon.text-icon {
background-color: #f3f4f6;
}
.file-item .file-icon.text-icon i {
color: #6b7280;
}
.file-item .date-cell {
color: #718096;
font-size: 14px;
}
.file-item .size-cell {
color: #718096;
font-size: 14px;
text-align: right;
}
.file-item .type-cell {
color: #4b5563;
font-weight: 500;
font-size: 14px;
}
.file-item.dragging {
opacity: 0.5;
background-color: #f9fafb;
}
.file-item.drop-target {
background-color: rgba(255, 193, 7, 0.1);
border: 2px dashed #ffc107;
}
/* Breadcrumb */
.breadcrumb {
display: flex;
align-items: center;
margin-bottom: 15px;
font-size: 14px;
color: #666;
}
.breadcrumb-item {
cursor: pointer;
}
.breadcrumb-item:hover {
text-decoration: underline;
}
.breadcrumb-separator {
margin: 0 8px;
}
/* Context menu */
.context-menu {
position: absolute;
background: white;
border: 1px solid #e2e8f0;
border-radius: 14px;
box-shadow: 0 10px 36px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(0, 0, 0, 0.04);
padding: 6px;
min-width: 200px;
z-index: 2000;
display: none;
animation: contextMenuIn 0.15s ease-out;
}
@keyframes contextMenuIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
.context-menu-item {
padding: 10px 14px;
cursor: pointer;
display: flex;
align-items: center;
gap: 12px;
color: #334155;
font-size: 14px;
border-radius: 8px;
transition: background 0.12s ease;
}
.context-menu-item:hover {
background: #f1f5f9;
}
.context-menu-item:active {
background: #e2e8f0;
}
.context-menu-item i {
width: 18px;
text-align: center;
font-size: 14px;
color: #64748b;
[dir='rtl'] & {
margin-left: 0;
margin-right: 0;
}
}
.context-menu-item-danger {
color: #ef4444;
}
.context-menu-item-danger:hover {
background: #fef2f2;
}
.context-menu-item-danger i {
color: #ef4444;
}
.context-menu-separator {
height: 1px;
background: #f1f5f9;
margin: 4px 8px;
}
/* Dialog (Rename / Move / Confirm) — Modern Style */
.rename-dialog {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.45);
display: none;
align-items: center;
justify-content: center;
z-index: 3000;
backdrop-filter: blur(2px);
animation: modalFadeIn 0.2s ease;
}
@keyframes modalFadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes modalSlideIn {
from { transform: scale(0.95) translateY(-10px); opacity: 0; }
to { transform: scale(1) translateY(0); opacity: 1; }
}
.rename-dialog-content {
background-color: white;
border-radius: 16px;
width: 420px;
max-width: 90%;
box-shadow: 0 20px 60px rgba(0,0,0,0.25);
overflow: hidden;
animation: modalSlideIn 0.25s ease;
}
.rename-dialog-header {
font-size: 17px;
font-weight: 600;
color: #1a202c;
padding: 20px 24px;
border-bottom: 1px solid #e2e8f0;
display: flex;
align-items: center;
gap: 12px;
}
.rename-dialog-body {
padding: 24px;
}
.rename-dialog input {
width: 100%;
padding: 12px 16px;
border: 2px solid #e2e8f0;
border-radius: 10px;
font-size: 15px;
background: #f8fafc;
color: #1a202c;
transition: all 0.15s ease;
outline: none;
}
.rename-dialog input:focus {
border-color: #ff5e3a;
background: white;
box-shadow: 0 0 0 3px rgba(255, 94, 58, 0.1);
}
.rename-dialog-buttons {
display: flex;
justify-content: flex-end;
gap: 12px;
padding: 16px 24px;
background: #f8fafc;
border-top: 1px solid #e2e8f0;
}
/* Dropzone */
.dropzone {
border: 2px dashed #ddd;
border-radius: 8px;
padding: 20px;
text-align: center;
margin: 20px 0;
color: #666;
display: none;
}
.dropzone.active {
border-color: #ff5e3a;
background-color: rgba(255, 94, 58, 0.05);
}
.upload-progress {
margin-top: 15px;
width: 100%;
display: none;
}
.progress-bar {
background-color: #f0f0f0;
height: 6px;
border-radius: 3px;
overflow: hidden;
}
.progress-fill {
height: 100%;
background-color: #ff5e3a;
width: 0%;
transition: width 0.3s;
}
/* Notification */
.notification {
position: absolute;
top: 70px;
right: 20px;
background-color: white;
width: 250px;
border-radius: 8px;
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
padding: 15px;
border-left: 4px solid #ff5e3a;
z-index: 1000;
display: none;
[dir='rtl'] & {
left: 20px;
border-right: 4px solid #ff5e3a;
right: unset;
border-left: unset;
}
}
.notification-title {
font-weight: bold;
font-size: 14px;
margin-bottom: 5px;
color: #2d3748;
}
.notification-message {
font-size: 12px;
color: #718096;
}
/* Modern Modal Overlay */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: none;
justify-content: center;
align-items: center;
z-index: 3000;
opacity: 0;
transition: opacity 0.2s ease;
}
.modal-overlay.active {
display: flex;
opacity: 1;
}
.modal-container {
background-color: white;
border-radius: 16px;
width: 420px;
max-width: 90%;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
transform: scale(0.9) translateY(-20px);
transition: transform 0.2s ease;
overflow: hidden;
}
.modal-overlay.active .modal-container {
transform: scale(1) translateY(0);
}
.modal-header {
display: flex;
align-items: center;
padding: 20px 24px;
border-bottom: 1px solid #e2e8f0;
position: relative;
}
.modal-icon {
width: 44px;
height: 44px;
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
[dir='rtl'] & {
margin-left: 14px;
margin-right: unset;
}
}
.modal-icon i {
color: white;
font-size: 20px;
}
.modal-header h3 {
font-size: 18px;
font-weight: 600;
color: #1a202c;
margin: 0;
flex: 1;
}
.modal-close-btn {
position: absolute;
top: 16px;
right: 16px;
width: 32px;
height: 32px;
border: none;
background: #f0f3f7;
border-radius: 8px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: #64748b;
transition: all 0.15s ease;
[dir='rtl'] & {
left: 16px;
right: unset;
}
}
.modal-close-btn:hover {
background: #e2e8f0;
color: #1a202c;
}
.modal-body {
padding: 24px;
}
.modal-body label {
display: block;
font-size: 14px;
font-weight: 500;
color: #4a5568;
margin-bottom: 8px;
}
.modal-input {
width: 100%;
padding: 12px 16px;
font-size: 15px;
border: 2px solid #e2e8f0;
border-radius: 10px;
background: #f8fafc;
color: #1a202c;
transition: all 0.15s ease;
outline: none;
}
.modal-input:focus {
border-color: #ff5e3a;
background: white;
box-shadow: 0 0 0 3px rgba(255, 94, 58, 0.1);
}
.modal-input::placeholder {
color: #a0aec0;
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 12px;
padding: 16px 24px;
background: #f8fafc;
border-top: 1px solid #e2e8f0;
}
.modal-footer .btn {
padding: 10px 20px;
font-size: 14px;
font-weight: 500;
border-radius: 10px;
cursor: pointer;
transition: all 0.15s ease;
}
.modal-footer .btn-secondary {
background: white;
border: 1px solid #e2e8f0;
color: #4a5568;
}
.modal-footer .btn-secondary:hover {
background: #f0f3f7;
border-color: #cbd5e0;
}
.modal-footer .btn-primary {
background: linear-gradient(135deg, #ff5e3a 0%, #ff2d55 100%);
border: none;
color: white;
box-shadow: 0 2px 8px rgba(255, 94, 58, 0.3);
}
.modal-footer .btn-primary:hover {
box-shadow: 0 4px 12px rgba(255, 94, 58, 0.4);
transform: translateY(-1px);
}
.modal-footer .btn-primary:active {
transform: translateY(0);
}
/* Share Dialog — Modern Style */
.share-dialog {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.45);
display: none;
justify-content: center;
align-items: center;
z-index: 3000;
backdrop-filter: blur(2px);
animation: modalFadeIn 0.2s ease;
}
.share-dialog-content {
background-color: white;
border-radius: 16px;
width: 480px;
max-width: 90%;
box-shadow: 0 20px 60px rgba(0,0,0,0.25);
overflow: hidden;
animation: modalSlideIn 0.25s ease;
max-height: 85vh;
overflow-y: auto;
}
.share-dialog-header {
font-size: 17px;
font-weight: 600;
color: #1a202c;
padding: 20px 24px;
border-bottom: 1px solid #e2e8f0;
display: flex;
align-items: center;
gap: 12px;
}
.share-dialog input, .share-dialog textarea {
width: 100%;
padding: 10px 14px;
border: 2px solid #e2e8f0;
border-radius: 10px;
font-size: 14px;
background: #f8fafc;
color: #1a202c;
transition: all 0.15s ease;
outline: none;
}
.share-dialog input:focus, .share-dialog textarea:focus {
border-color: #ff5e3a;
background: white;
box-shadow: 0 0 0 3px rgba(255,94,58,0.1);
}
.share-dialog-buttons {
display: flex;
justify-content: flex-end;
gap: 12px;
padding: 16px 24px;
background: #f8fafc;
border-top: 1px solid #e2e8f0;
}
/* Share dialog specific styles */
.shared-item-info {
padding: 12px 24px;
background: #f8fafc;
border-bottom: 1px solid #e2e8f0;
font-size: 14px;
}
.share-options {
padding: 20px 24px 0;
}
.share-options h3, #existing-shares-section h3, #new-share-section h3 {
font-size: 13px;
font-weight: 600;
margin-bottom: 10px;
color: #4a5568;
text-transform: uppercase;
letter-spacing: 0.5px;
}
#existing-shares-section, #new-share-section {
padding: 0 24px;
}
.form-group {
margin-bottom: 15px;
padding: 0 24px;
}
.share-dialog .form-group {
padding: 0;
}
/* Folder select items in move dialog */
.folder-select-item {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 14px;
border-radius: 8px;
cursor: pointer;
transition: all 0.15s ease;
color: #4a5568;
font-size: 14px;
}
.folder-select-item:hover {
background-color: #f0f3f7;
}
.folder-select-item.selected {
background-color: rgba(255,94,58,0.1);
color: #ff5e3a;
font-weight: 600;
}
.folder-select-item i {
color: #ffa94d;
font-size: 16px;
}
.folder-select-item.selected i {
color: #ff5e3a;
}
/* Custom confirm dialog */
.confirm-dialog {
position: fixed;
top: 0; left: 0;
width: 100%; height: 100%;
background-color: rgba(0,0,0,0.45);
display: none;
align-items: center;
justify-content: center;
z-index: 4000;
backdrop-filter: blur(2px);
animation: modalFadeIn 0.2s ease;
}
.confirm-dialog.active {
display: flex;
opacity: 1;
}
.confirm-dialog-content {
background: white;
border-radius: 16px;
width: 400px;
max-width: 90%;
box-shadow: 0 20px 60px rgba(0,0,0,0.25);
overflow: hidden;
animation: modalSlideIn 0.25s ease;
text-align: center;
}
.confirm-dialog-icon {
padding: 28px 24px 12px;
}
.confirm-dialog-icon i {
font-size: 40px;
color: #f56565;
}
.confirm-dialog-title {
font-size: 17px;
font-weight: 600;
color: #1a202c;
padding: 0 24px 8px;
}
.confirm-dialog-message {
font-size: 14px;
color: #718096;
padding: 0 24px 20px;
line-height: 1.5;
}
.confirm-dialog-buttons {
display: flex;
gap: 12px;
padding: 16px 24px;
background: #f8fafc;
border-top: 1px solid #e2e8f0;
justify-content: flex-end;
}
.confirm-dialog-buttons .btn-danger {
background: linear-gradient(135deg, #f56565 0%, #e53e3e 100%);
color: white;
border: none;
padding: 10px 20px;
border-radius: 10px;
font-weight: 500;
cursor: pointer;
transition: all 0.15s ease;
box-shadow: 0 2px 8px rgba(229,62,62,0.3);
}
.confirm-dialog-buttons .btn-danger:hover {
box-shadow: 0 4px 12px rgba(229,62,62,0.4);
transform: translateY(-1px);
}
/* Loading spinner overlay */
.files-loading-spinner {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 80px 20px;
gap: 16px;
grid-column: 1 / -1;
}
.files-loading-spinner .spinner {
width: 36px;
height: 36px;
border: 3px solid #e2e8f0;
border-top-color: #ff5e3a;
border-radius: 50%;
animation: spin 0.7s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.files-loading-spinner span {
font-size: 14px;
color: #a0aec0;
font-weight: 500;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: 500;
}
.permission-options {
display: flex;
gap: 15px;
margin-top: 5px;
}
.permission-option {
display: flex;
align-items: center;
gap: 5px;
}
.existing-share-item {
background-color: #f8f9fa;
border-radius: 4px;
padding: 10px;
margin-bottom: 10px;
}
.share-url {
font-size: 12px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-bottom: 5px;
color: #1565c0;
}
.share-info {
font-size: 11px;
display: flex;
gap: 15px;
margin-bottom: 10px;
color: #757575;
}
.share-protected {
color: #1565c0;
}
.share-expiration {
color: #b71c1c;
}
.share-actions {
display: flex;
gap: 5px;
justify-content: flex-end;
}
.share-link-actions {
display: flex;
gap: 10px;
margin-top: 5px;
}
.btn-small {
font-size: 12px;
padding: 5px 10px;
}
#notification-message {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
resize: vertical;
}
/* Shared Resources Page Styles */
/* Header styles for shared page */
header {
background-color: white;
border-bottom: 1px solid #e6e6e6;
padding: 15px 20px;
}
.header-container {
display: flex;
justify-content: space-between;
align-items: center;
max-width: 1280px;
margin: 0 auto;
}
.header-actions {
display: flex;
align-items: center;
gap: 15px;
}
.header-button {
padding: 8px 15px;
background-color: #f0f3f7;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.2s;
}
.header-button:hover {
background-color: #e6e9ed;
}
/* Shared page container */
.shared-page-container {
max-width: 1280px;
margin: 20px auto;
padding: 0 20px;
}
.shared-header {
margin-bottom: 25px;
}
.shared-header h2 {
font-size: 24px;
color: #2d3748;
margin-bottom: 8px;
}
.shared-header p {
color: #718096;
font-size: 16px;
}
/* Filters and search */
.shared-filters {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 25px;
flex-wrap: wrap;
gap: 15px;
}
.filter-group {
display: flex;
align-items: center;
gap: 10px;
}
.filter-group label {
font-size: 14px;
color: #4a5568;
font-weight: 500;
}
.filter-group select {
padding: 8px 32px 8px 12px;
border: 1px solid #e2e8f0;
border-radius: 8px;
background-color: white;
font-size: 14px;
color: #2d3748;
cursor: pointer;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23718096' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 10px center;
transition: border-color 0.15s ease, box-shadow 0.15s ease;
[dir='rtl'] & {
background-position: left 10px center;
}
}
.filter-group select:hover {
border-color: #cbd5e0;
}
.filter-group select:focus {
outline: none;
border-color: #ff5e3a;
box-shadow: 0 0 0 3px rgba(255, 94, 58, 0.1);
}
.search-box {
display: flex;
gap: 10px;
}
.search-box input {
padding: 8px 15px;
border: 1px solid #e2e8f0;
border-radius: 6px;
font-size: 14px;
width: 250px;
}
.search-box button {
padding: 8px 15px;
background-color: #ff5e3a;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
transition: background-color 0.2s;
}
.search-box button:hover {
background-color: #e64a29;
}
/* Shared items list */
.shared-list-container {
background-color: white;
border-radius: 10px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
overflow: hidden;
}
.shared-list {
width: 100%;
border-collapse: collapse;
}
.shared-list thead th {
padding: 15px;
text-align: left;
font-weight: 600;
color: #2d3748;
background-color: #f8f9fa;
border-bottom: 1px solid #e0e6ed;
}
.shared-list tbody td {
padding: 15px;
border-bottom: 1px solid #f0f0f0;
vertical-align: middle;
}
.shared-item-name {
display: flex;
align-items: center;
gap: 10px;
}
.shared-item-actions {
display: flex;
gap: 10px;
}
.action-btn {
width: 32px;
height: 32px;
border: 1px solid #e2e8f0;
border-radius: 6px;
background-color: white;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s;
}
.action-btn:hover {
background-color: #f0f8ff;
border-color: #90cdf4;
}
.action-icon {
font-size: 14px;
}
/* Empty state */
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
background-color: white;
border-radius: 10px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
}
.empty-state-icon {
font-size: 40px;
margin-bottom: 20px;
color: #a0aec0;
}
.empty-state h3 {
font-size: 18px;
color: #2d3748;
margin-bottom: 10px;
}
.empty-state p {
color: #718096;
margin-bottom: 20px;
text-align: center;
}
/* Dialog styles */
.dialog {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: none;
align-items: center;
justify-content: center;
z-index: 1000;
}
.dialog.active {
display: flex;
}
.dialog-content {
background-color: white;
border-radius: 10px;
box-shadow: 0 10px 25px rgba(0,0,0,0.1);
width: 500px;
max-width: 90%;
max-height: 90vh;
overflow-y: auto;
}
.dialog-header {
padding: 15px 20px;
border-bottom: 1px solid #e2e8f0;
display: flex;
align-items: center;
justify-content: space-between;
}
.dialog-header h3 {
font-size: 18px;
color: #2d3748;
margin: 0;
}
.close-dialog-btn {
background: none;
border: none;
font-size: 24px;
cursor: pointer;
color: #a0aec0;
}
.dialog-body {
padding: 20px;
}
/* Share dialog specific styles */
.share-item-info {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 20px;
}
.item-icon {
font-size: 24px;
}
.item-name {
font-size: 16px;
font-weight: 500;
color: #2d3748;
}
.share-link-section {
margin-bottom: 20px;
}
.share-link-container {
display: flex;
gap: 10px;
}
.share-link-container input {
flex-grow: 1;
padding: 10px;
border: 1px solid #e2e8f0;
border-radius: 6px;
font-size: 14px;
}
.share-link-container button {
padding: 0 15px;
background-color: #4a5568;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
transition: background-color 0.2s;
}
.share-link-container button:hover {
background-color: #2d3748;
}
.share-settings {
margin-bottom: 20px;
}
.share-setting {
margin-bottom: 15px;
}
.share-setting label {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: #4a5568;
}
.permissions-options {
display: flex;
gap: 20px;
}
.permissions-options label {
font-weight: normal;
display: flex;
align-items: center;
gap: 5px;
}
.password-setting, .expiration-setting {
display: flex;
align-items: center;
gap: 10px;
}
.password-setting input[type="checkbox"], .expiration-setting input[type="checkbox"] {
width: auto;
}
.password-setting input[type="password"], .expiration-setting input[type="date"] {
flex-grow: 1;
padding: 8px 10px;
border: 1px solid #e2e8f0;
border-radius: 6px;
font-size: 14px;
}
.password-setting button {
padding: 8px 12px;
background-color: #4a5568;
color: white;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 12px;
transition: background-color 0.2s;
}
.password-setting button:hover {
background-color: #2d3748;
}
.share-actions {
display: flex;
justify-content: flex-end;
gap: 10px;
}
/* Form styles */
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: #4a5568;
}
.form-group input, .form-group textarea {
width: 100%;
padding: 10px;
border: 1px solid #e2e8f0;
border-radius: 6px;
font-size: 14px;
}
.form-group textarea {
resize: vertical;
min-height: 80px;
}
/* Button styles */
.button {
padding: 8px 16px;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.2s;
}
.primary {
background-color: #ff5e3a;
color: white;
}
.primary:hover {
background-color: #e64a29;
}
.secondary {
background-color: #e2e8f0;
color: #4a5568;
}
.secondary:hover {
background-color: #cbd5e0;
}
.danger {
background-color: #f56565;
color: white;
}
.danger:hover {
background-color: #e53e3e;
}
/* Notification banner */
.notification-banner {
position: fixed;
top: 20px;
right: 20px;
padding: 15px 20px;
background-color: white;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
display: flex;
align-items: center;
justify-content: space-between;
max-width: 400px;
z-index: 2000;
transform: translateY(-100px);
opacity: 0;
transition: transform 0.3s, opacity 0.3s;
}
.notification-banner.active {
transform: translateY(0);
opacity: 1;
}
.notification-banner.success {
border-left: 4px solid #48bb78;
}
.notification-banner.error {
border-left: 4px solid #f56565;
}
.close-notification-btn {
background: none;
border: none;
font-size: 18px;
cursor: pointer;
color: #a0aec0;
margin-left: 10px;
}
/* Folder selection for move dialog */
.folder-select-item {
padding: 8px 10px;
margin-bottom: 5px;
border-radius: 4px;
cursor: pointer;
display: flex;
align-items: center;
}
.folder-select-item:hover {
background-color: #f0f8ff;
}
.folder-select-item.selected {
background-color: #e6f7ff;
border-left: 3px solid #1890ff;
[dir='rtl'] & {
border-right: 3px solid #1890ff;
border-left: unset;
}
}
.folder-select-item i {
margin-right: 8px;
color: #ffc107;
[dir='rtl'] & {
margin-left: 8px;
margin-right: unset;
}
}
/* Styles for trash */
.trash-item {
position: relative;
}
.trash-actions {
position: absolute;
top: 10px;
right: 10px;
display: none;
gap: 8px;
}
.file-card.trash-item:hover .trash-actions,
.file-item.trash-item:hover .actions-cell {
display: flex;
}
.trash-actions button,
.actions-cell button {
background: #fff;
border: 1px solid #ddd;
border-radius: 4px;
padding: 4px 8px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
transition: all 0.2s;
}
.trash-actions button:hover,
.actions-cell button:hover {
background: #f0f0f0;
}
.btn-restore {
color: #4CAF50;
}
.btn-delete {
color: #f44336;
}
.actions-cell {
display: flex;
gap: 8px;
justify-content: flex-start;
align-items: center;
}
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 300px;
width: 100%;
color: #666;
grid-column: 1 / -1;
}
/* Danger button for emptying trash */
.btn-danger {
background-color: #f44336;
color: white;
}
/* Responsive */
@media (max-width: 768px) {
.sidebar {
width: 64px;
padding: 0;
}
.logo-container {
justify-content: center;
padding: 16px 0;
}
.logo {
margin-right: 0;
}
.app-name, .storage-title, .storage-info {
display: none;
}
.nav-menu {
padding: 8px 8px;
}
.nav-item {
justify-content: center;
padding: 12px 0;
border-left-width: 0;
border-bottom: 3px solid transparent;
}
.nav-item.active {
border-left-color: transparent;
border-bottom-color: #ff5e3a;
}
.nav-item i {
margin-right: 0;
font-size: 18px;
}
.nav-item span {
display: none;
}
.storage-container {
margin: auto 8px 12px 8px;
padding: 10px 6px;
}
/* Responsive styles for shared page */
.shared-filters {
flex-direction: column;
align-items: flex-start;
}
.shared-list thead th:nth-child(4),
.shared-list thead th:nth-child(5),
.shared-list tbody td:nth-child(4),
.shared-list tbody td:nth-child(5) {
display: none;
}
.dialog-content {
width: 95%;
}
}
/* Specific styles for the Shared page */
.page-description {
color: #718096;
font-size: 16px;
margin-top: -15px;
margin-bottom: 25px;
}
/* Improvements for the Shared page filters */
.shared-filters {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 25px;
flex-wrap: wrap;
gap: 15px;
background-color: white;
border-radius: 10px;
padding: 15px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
}
.filter-group {
display: flex;
align-items: center;
gap: 10px;
}
.filter-group label {
font-size: 14px;
color: #4a5568;
font-weight: 500;
}
.filter-group select {
padding: 8px 12px;
border: 1px solid #e2e8f0;
border-radius: 6px;
background-color: white;
font-size: 14px;
min-width: 120px;
}
.search-box {
display: flex;
gap: 10px;
}
.search-box input {
padding: 8px 15px;
border: 1px solid #e2e8f0;
border-radius: 6px;
font-size: 14px;
width: 250px;
}
/* Improvements in the shared items table */
.shared-list-container {
background-color: white;
border-radius: 10px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
overflow: hidden;
margin-bottom: 25px;
}
.shared-list {
width: 100%;
border-collapse: collapse;
}
.shared-list thead th {
padding: 15px;
text-align: left;
font-weight: 600;
color: #2d3748;
background-color: #f8f9fa;
border-bottom: 1px solid #e0e6ed;
}
.shared-list tbody td {
padding: 15px;
border-bottom: 1px solid #f0f0f0;
vertical-align: middle;
}
/* Improved empty state */
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 60px 20px;
background-color: white;
border-radius: 10px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
text-align: center;
}
.empty-state-icon {
font-size: 48px;
margin-bottom: 20px;
color: #ffc107;
}
.empty-state h3 {
font-size: 18px;
color: #2d3748;
margin-bottom: 10px;
}
.empty-state p {
color: #718096;
margin-bottom: 20px;
text-align: center;
}
.button.primary {
padding: 8px 16px;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
background-color: #ff5e3a;
color: white;
text-decoration: none;
display: inline-block;
transition: background-color 0.2s;
}
.button.primary:hover {
background-color: #e64a29;
}
html[dir='rtl'] .fa-arrow-left::before {
content: "\f061";
}
html[dir='rtl'] .fa-sign-out-alt {
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
/* ============================================================================
Notification Bell
============================================================================ */
.notif-wrapper {
position: relative;
}
.notif-bell-btn {
background: none;
border: none;
cursor: pointer;
font-size: 18px;
color: #64748b;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s ease;
position: relative;
}
.notif-bell-btn:hover {
background: rgba(255, 94, 58, 0.08);
color: #ff5e3a;
}
.notif-bell-btn.active {
color: #ff5e3a;
background: rgba(255, 94, 58, 0.1);
}
/* Badge counter on bell */
.notif-badge {
position: absolute;
top: 4px;
right: 4px;
min-width: 16px;
height: 16px;
line-height: 16px;
border-radius: 8px;
background: #ff3b30;
color: #fff;
font-size: 10px;
font-weight: 700;
text-align: center;
padding: 0 4px;
pointer-events: none;
}
/* Animated wiggle for new notifications */
@keyframes bellRing {
0%, 100% { transform: rotate(0deg); }
15% { transform: rotate(14deg); }
30% { transform: rotate(-14deg); }
45% { transform: rotate(8deg); }
60% { transform: rotate(-8deg); }
75% { transform: rotate(3deg); }
}
.notif-bell-btn.ring i {
animation: bellRing 0.6s ease;
}
/* Dropdown panel */
.notif-panel {
display: none;
position: absolute;
top: calc(100% + 10px);
right: -40px;
width: 380px;
max-height: 480px;
background: #fff;
border-radius: 16px;
box-shadow: 0 12px 40px rgba(0,0,0,0.15), 0 0 0 1px rgba(0,0,0,0.05);
z-index: 2000;
overflow: hidden;
animation: notifPanelIn 0.2s ease-out;
}
.notif-wrapper.open .notif-panel {
display: flex;
flex-direction: column;
}
@keyframes notifPanelIn {
from { opacity: 0; transform: translateY(-8px) scale(0.97); }
to { opacity: 1; transform: translateY(0) scale(1); }
}
.notif-panel-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 14px 16px;
border-bottom: 1px solid #f0f0f0;
}
.notif-panel-title {
font-weight: 600;
font-size: 15px;
color: #1e293b;
}
.notif-clear-btn {
background: none;
border: none;
cursor: pointer;
color: #94a3b8;
font-size: 14px;
padding: 4px 8px;
border-radius: 6px;
transition: all 0.15s;
}
.notif-clear-btn:hover {
color: #ff5e3a;
background: rgba(255, 94, 58, 0.08);
}
.notif-panel-body {
flex: 1;
overflow-y: auto;
max-height: 400px;
}
.notif-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 40px 20px;
color: #94a3b8;
gap: 8px;
}
.notif-empty i {
font-size: 28px;
opacity: 0.5;
}
.notif-empty span {
font-size: 14px;
}
/* Individual notification items */
.notif-item {
display: flex;
align-items: flex-start;
padding: 12px 16px;
gap: 12px;
border-bottom: 1px solid #f5f5f5;
transition: background 0.15s;
cursor: default;
}
.notif-item:last-child {
border-bottom: none;
}
.notif-item:hover {
background: #f8fafc;
}
.notif-item-icon {
width: 32px;
height: 32px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
font-size: 14px;
}
.notif-item-icon.upload {
background: rgba(255, 94, 58, 0.1);
color: #ff5e3a;
}
.notif-item-icon.success {
background: rgba(52, 199, 89, 0.1);
color: #34c759;
}
.notif-item-icon.error {
background: rgba(255, 59, 48, 0.1);
color: #ff3b30;
}
.notif-item-body {
flex: 1;
min-width: 0;
}
.notif-item-title {
font-size: 13px;
font-weight: 600;
color: #1e293b;
margin-bottom: 2px;
}
.notif-item-text {
font-size: 12px;
color: #64748b;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.notif-item-time {
font-size: 11px;
color: #94a3b8;
margin-top: 3px;
}
/* Upload progress inside notification */
.notif-upload-progress {
margin-top: 6px;
}
.notif-upload-bar {
height: 3px;
background: #eee;
border-radius: 2px;
overflow: hidden;
}
.notif-upload-fill {
height: 100%;
background: #ff5e3a;
width: 0%;
transition: width 0.2s ease;
border-radius: 2px;
}
.notif-upload-fill.done {
background: #34c759;
}
.notif-upload-fill.error {
background: #ff3b30;
}
.notif-upload-detail {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 3px;
}
.notif-upload-pct {
font-size: 11px;
color: #94a3b8;
}
.notif-upload-stats {
font-size: 11px;
color: #94a3b8;
}
/* ============================================================================
Upload Progress Toast (legacy — hidden, kept for compat)
============================================================================ */
.upload-toast {
position: fixed;
bottom: 24px;
right: 24px;
width: 360px;
max-height: 400px;
background: #fff;
border-radius: 12px;
box-shadow: 0 8px 30px rgba(0,0,0,0.15);
z-index: 10000;
display: none;
flex-direction: column;
overflow: hidden;
font-family: inherit;
animation: uploadToastSlideIn 0.3s ease-out;
}
.upload-toast.visible {
display: flex;
}
@keyframes uploadToastSlideIn {
from { transform: translateY(20px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
.upload-toast-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 16px;
background: #ff5e3a;
color: #fff;
}
.upload-toast-title {
font-weight: 600;
font-size: 14px;
}
.upload-toast-close {
background: none;
border: none;
color: #fff;
font-size: 20px;
cursor: pointer;
line-height: 1;
padding: 0 4px;
opacity: 0.8;
}
.upload-toast-close:hover { opacity: 1; }
.upload-toast-body {
flex: 1;
overflow-y: auto;
padding: 8px 0;
max-height: 260px;
}
.upload-toast-file {
display: flex;
align-items: center;
padding: 6px 16px;
gap: 10px;
}
.upload-toast-file-icon {
font-size: 16px;
color: #999;
flex-shrink: 0;
width: 20px;
text-align: center;
}
.upload-toast-file-icon.done { color: #34c759; }
.upload-toast-file-icon.error { color: #ff3b30; }
.upload-toast-file-info {
flex: 1;
min-width: 0;
}
.upload-toast-file-name {
font-size: 13px;
color: #333;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.upload-toast-file-bar {
height: 3px;
background: #eee;
border-radius: 2px;
margin-top: 4px;
overflow: hidden;
}
.upload-toast-file-fill {
height: 100%;
background: #ff5e3a;
width: 0%;
transition: width 0.2s ease;
border-radius: 2px;
}
.upload-toast-file-fill.done { background: #34c759; }
.upload-toast-file-fill.error { background: #ff3b30; }
.upload-toast-file-pct {
font-size: 12px;
color: #999;
flex-shrink: 0;
width: 38px;
text-align: right;
}
.upload-toast-footer {
padding: 10px 16px;
border-top: 1px solid #f0f0f0;
}
.upload-toast-overall-bar {
height: 4px;
background: #eee;
border-radius: 2px;
overflow: hidden;
margin-bottom: 6px;
}
.upload-toast-overall-fill {
height: 100%;
background: #ff5e3a;
width: 0%;
transition: width 0.25s ease;
border-radius: 2px;
}
.upload-toast-stats {
font-size: 12px;
color: #888;
}
/* ═══════════════════════════════════════════════════════════
Multi-Select – checkboxes & batch action bar
═══════════════════════════════════════════════════════════ */
/* -- List-view checkbox column -- */
.list-header-checkbox,
.list-item-checkbox {
display: flex;
align-items: center;
justify-content: center;
}
.list-header-checkbox input[type="checkbox"],
.list-item-checkbox input[type="checkbox"] {
width: 17px;
height: 17px;
cursor: pointer;
accent-color: #ff5e3a;
border-radius: 4px;
}
/* Sync checkbox state visually with .selected */
.file-item.selected .item-checkbox {
/* Checked via JS */
}
/* -- Batch action bar -- */
.batch-action-bar {
display: flex;
align-items: center;
justify-content: space-between;
background: #1e293b;
color: #fff;
padding: 10px 20px;
border-radius: 12px;
margin: 0 0 12px;
opacity: 0;
max-height: 0;
overflow: hidden;
transform: translateY(-8px);
transition: opacity 0.2s, max-height 0.25s, transform 0.2s, margin 0.2s, padding 0.2s;
pointer-events: none;
}
.batch-action-bar.visible {
opacity: 1;
max-height: 60px;
transform: translateY(0);
pointer-events: auto;
padding: 10px 20px;
margin: 0 0 12px;
}
.batch-bar-left {
display: flex;
align-items: center;
gap: 12px;
}
.batch-bar-close {
background: none;
border: none;
color: rgba(255,255,255,0.7);
cursor: pointer;
font-size: 14px;
padding: 4px 6px;
border-radius: 6px;
transition: background 0.15s, color 0.15s;
}
.batch-bar-close:hover {
background: rgba(255,255,255,0.1);
color: #fff;
}
.batch-bar-count {
font-size: 14px;
font-weight: 600;
white-space: nowrap;
}
.batch-bar-actions {
display: flex;
align-items: center;
gap: 6px;
}
.batch-btn {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 14px;
border: none;
border-radius: 8px;
background: rgba(255,255,255,0.1);
color: #fff;
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: background 0.15s;
white-space: nowrap;
}
.batch-btn:hover {
background: rgba(255,255,255,0.2);
}
.batch-btn-danger {
background: rgba(239,68,68,0.25);
color: #fca5a5;
}
.batch-btn-danger:hover {
background: rgba(239,68,68,0.4);
color: #fff;
}
/* Responsive: hide button text on small screens */
@media (max-width: 640px) {
.batch-btn span {
display: none;
}
.batch-btn {
padding: 7px 10px;
}
}
/* ============================================================
DARK MODE
============================================================ */
[data-theme="dark"] body {
background-color: #0f172a;
}
/* Scrollbars */
[data-theme="dark"] ::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.15);
}
[data-theme="dark"] ::-webkit-scrollbar-thumb:hover {
background-color: rgba(255, 255, 255, 0.25);
}
[data-theme="dark"] * {
scrollbar-color: rgba(255, 255, 255, 0.15) transparent;
}
/* Selects */
[data-theme="dark"] select {
background-color: #1e293b;
border-color: #334155;
color: #e2e8f0;
}
[data-theme="dark"] select:hover {
border-color: #475569;
}
[data-theme="dark"] select:focus {
border-color: #ff5e3a;
background-color: #1e293b;
}
/* Sidebar — already dark, minor tweaks */
[data-theme="dark"] .sidebar {
background: linear-gradient(180deg, #0f172a 0%, #0c1322 100%);
}
/* Top bar */
[data-theme="dark"] .top-bar {
background-color: #1e293b;
border-bottom-color: #334155;
}
/* Search container */
[data-theme="dark"] .search-container input {
background-color: #1e293b;
border-color: #334155;
color: #e2e8f0;
}
[data-theme="dark"] .search-container input:hover {
background-color: #1e293b;
border-color: #475569;
}
[data-theme="dark"] .search-container input:focus {
background-color: #1e293b;
border-color: #ff5e3a;
}
[data-theme="dark"] .search-container input::placeholder {
color: #64748b;
}
[data-theme="dark"] .search-icon {
color: #64748b;
}
/* User menu dropdown */
[data-theme="dark"] .user-menu {
background: #1e293b;
border-color: #334155;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .user-menu-header {
background: linear-gradient(135deg, #1a2332 0%, #1e2940 100%);
border-bottom-color: #334155;
}
[data-theme="dark"] .user-menu-name {
color: #f1f5f9;
}
[data-theme="dark"] .user-menu-email {
color: #64748b;
}
[data-theme="dark"] .user-menu-storage-label {
color: #94a3b8;
}
[data-theme="dark"] .user-menu-storage-bar {
background: #334155;
}
[data-theme="dark"] .user-menu-storage-text {
color: #64748b;
}
[data-theme="dark"] .user-menu-divider {
background: #334155;
}
[data-theme="dark"] .user-menu-item {
color: #cbd5e1;
}
[data-theme="dark"] .user-menu-item:hover {
background: #334155;
}
[data-theme="dark"] .user-menu-item i {
color: #94a3b8;
}
[data-theme="dark"] .theme-toggle-pill {
background: #475569;
}
[data-theme="dark"] .user-menu-admin {
color: #60a5fa;
}
[data-theme="dark"] .user-menu-admin:hover {
background: rgba(59, 130, 246, 0.1);
}
[data-theme="dark"] .role-badge-admin {
background: rgba(59, 130, 246, 0.15);
color: #60a5fa;
}
[data-theme="dark"] .user-menu-logout:hover {
background: rgba(239, 68, 68, 0.1);
}
/* About modal */
[data-theme="dark"] .about-modal {
background: #1e293b;
}
[data-theme="dark"] .about-modal h2 {
color: #f1f5f9;
}
[data-theme="dark"] .about-modal .about-version {
color: #94a3b8;
}
[data-theme="dark"] .about-modal .about-description {
color: #94a3b8;
}
[data-theme="dark"] .about-modal .about-tech-badge {
background: #334155;
border-color: #475569;
color: #cbd5e1;
}
/* Language selector */
[data-theme="dark"] .language-selector-toggle {
background-color: #1e293b;
border-color: #334155;
color: #cbd5e1;
}
[data-theme="dark"] .language-selector-toggle:hover {
background-color: #334155;
}
[data-theme="dark"] .language-selector-dropdown {
background-color: #1e293b;
border-color: #334155;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .language-option {
color: #cbd5e1;
}
[data-theme="dark"] .language-option:hover {
background-color: #334155;
}
[data-theme="dark"] .language-option.active {
background-color: rgba(255, 94, 58, 0.1);
color: #ff5e3a;
}
/* Content area / page title */
[data-theme="dark"] .page-title {
color: #f1f5f9;
}
/* Breadcrumb */
[data-theme="dark"] .breadcrumb {
color: #94a3b8;
}
[data-theme="dark"] .breadcrumb a {
color: #94a3b8;
}
[data-theme="dark"] .breadcrumb a:hover {
color: #ff5e3a;
}
/* Action bar buttons */
[data-theme="dark"] .btn-secondary {
background-color: #1e293b;
color: #cbd5e1;
border-color: #334155;
}
[data-theme="dark"] .btn-secondary:hover {
background-color: #334155;
border-color: #475569;
}
[data-theme="dark"] .btn-secondary:active {
background-color: #475569;
}
/* Upload dropdown */
[data-theme="dark"] .upload-dropdown-menu {
background: #1e293b;
border-color: #334155;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .upload-dropdown-item {
color: #cbd5e1;
}
[data-theme="dark"] .upload-dropdown-item:hover {
background: #334155;
}
[data-theme="dark"] .upload-dropdown-item:active {
background: #475569;
}
[data-theme="dark"] .upload-dropdown-item i {
color: #94a3b8;
}
/* View toggle */
[data-theme="dark"] .view-toggle {
background-color: #1e293b;
border-color: #334155;
}
[data-theme="dark"] .toggle-btn {
color: #94a3b8;
}
[data-theme="dark"] .toggle-btn:hover {
background-color: #334155;
}
[data-theme="dark"] .toggle-btn.active {
background-color: #334155;
color: #ff5e3a;
}
/* File cards (grid view) */
[data-theme="dark"] .file-card {
background-color: #1e293b;
border-color: #334155;
}
[data-theme="dark"] .file-card:hover {
border-color: #475569;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
[data-theme="dark"] .file-card.selected {
border-color: #ff5e3a;
background: #1a1520;
}
[data-theme="dark"] .file-card-checkbox {
background: #1e293b;
border-color: #475569;
}
[data-theme="dark"] .file-card-more {
color: #94a3b8;
}
[data-theme="dark"] .file-card-more:hover {
background: #334155;
color: #e2e8f0;
}
[data-theme="dark"] .file-card-name {
color: #e2e8f0;
}
[data-theme="dark"] .file-card-type {
color: #94a3b8;
}
[data-theme="dark"] .file-card.drop-target {
background-color: rgba(255, 193, 7, 0.05);
}
/* File list (table view) */
[data-theme="dark"] .files-list-view {
background-color: #1e293b;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}
[data-theme="dark"] .list-header {
background-color: #162032;
color: #94a3b8;
border-bottom-color: #334155;
}
[data-theme="dark"] .file-item {
background-color: #1e293b;
border-bottom-color: #293548;
}
[data-theme="dark"] .file-item:hover {
background-color: #253345;
}
[data-theme="dark"] .file-item.selected {
background-color: #1a1520;
}
[data-theme="dark"] .file-item.selected:hover {
background-color: #231a2a;
}
[data-theme="dark"] .file-item .name-cell {
color: #e2e8f0;
}
[data-theme="dark"] .file-item .date-cell {
color: #64748b;
}
[data-theme="dark"] .file-item .size-cell {
color: #64748b;
}
[data-theme="dark"] .file-item .type-cell {
color: #94a3b8;
}
[data-theme="dark"] .file-item.dragging {
background-color: #334155;
}
[data-theme="dark"] .file-item.drop-target {
background-color: rgba(255, 193, 7, 0.05);
}
/* Context menu */
[data-theme="dark"] .context-menu {
background: #1e293b;
border-color: #334155;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .context-menu-item {
color: #cbd5e1;
}
[data-theme="dark"] .context-menu-item:hover {
background: #334155;
}
[data-theme="dark"] .context-menu-item:active {
background: #475569;
}
[data-theme="dark"] .context-menu-item i {
color: #94a3b8;
}
[data-theme="dark"] .context-menu-item-danger:hover {
background: rgba(239, 68, 68, 0.1);
}
[data-theme="dark"] .context-menu-separator {
background: #334155;
}
/* Rename dialog */
[data-theme="dark"] .rename-dialog-content {
background-color: #1e293b;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .rename-dialog-header {
color: #f1f5f9;
border-bottom-color: #334155;
}
[data-theme="dark"] .rename-dialog input {
background: #0f172a;
color: #e2e8f0;
border-color: #334155;
}
[data-theme="dark"] .rename-dialog input:focus {
border-color: #ff5e3a;
background: #0f172a;
}
[data-theme="dark"] .rename-dialog-buttons {
background: #162032;
border-top-color: #334155;
}
/* Modal dialogs */
[data-theme="dark"] .modal-overlay {
background-color: rgba(0, 0, 0, 0.7);
}
[data-theme="dark"] .modal-container {
background-color: #1e293b;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .modal-header {
border-bottom-color: #334155;
}
[data-theme="dark"] .modal-header h3 {
color: #f1f5f9;
}
[data-theme="dark"] .modal-close-btn {
background: #334155;
color: #94a3b8;
}
[data-theme="dark"] .modal-close-btn:hover {
background: #475569;
color: #e2e8f0;
}
[data-theme="dark"] .modal-body label {
color: #94a3b8;
}
[data-theme="dark"] .modal-input {
border-color: #334155;
background: #0f172a;
color: #e2e8f0;
}
[data-theme="dark"] .modal-input:focus {
border-color: #ff5e3a;
background: #0f172a;
}
[data-theme="dark"] .modal-input::placeholder {
color: #475569;
}
[data-theme="dark"] .modal-footer {
background: #162032;
border-top-color: #334155;
}
[data-theme="dark"] .modal-footer .btn-secondary {
background: #334155;
border-color: #475569;
color: #cbd5e1;
}
[data-theme="dark"] .modal-footer .btn-secondary:hover {
background: #475569;
}
/* Notifications */
[data-theme="dark"] .notification {
background-color: #1e293b;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}
[data-theme="dark"] .notification-title {
color: #f1f5f9;
}
[data-theme="dark"] .notification-message {
color: #94a3b8;
}
[data-theme="dark"] .notification-banner {
background-color: #1e293b;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}
/* Upload toast */
[data-theme="dark"] .upload-toast {
background: #1e293b;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .upload-toast-file-name {
color: #e2e8f0;
}
[data-theme="dark"] .upload-toast-file-bar {
background: #334155;
}
[data-theme="dark"] .upload-toast-file-pct {
color: #64748b;
}
[data-theme="dark"] .upload-toast-footer {
border-top-color: #334155;
}
/* Notification bell */
[data-theme="dark"] .notif-bell-btn {
color: #94a3b8;
}
[data-theme="dark"] .notif-bell-btn:hover,
[data-theme="dark"] .notif-bell-btn.active {
color: #ff5e3a;
background: rgba(255, 94, 58, 0.15);
}
[data-theme="dark"] .notif-panel {
background: #1e293b;
box-shadow: 0 12px 40px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.06);
}
[data-theme="dark"] .notif-panel-header {
border-bottom-color: #334155;
}
[data-theme="dark"] .notif-panel-title {
color: #f1f5f9;
}
[data-theme="dark"] .notif-clear-btn {
color: #64748b;
}
[data-theme="dark"] .notif-clear-btn:hover {
color: #ff5e3a;
background: rgba(255, 94, 58, 0.12);
}
[data-theme="dark"] .notif-empty {
color: #64748b;
}
[data-theme="dark"] .notif-item {
border-bottom-color: #1a2536;
}
[data-theme="dark"] .notif-item:hover {
background: #162032;
}
[data-theme="dark"] .notif-item-title {
color: #e2e8f0;
}
[data-theme="dark"] .notif-item-text {
color: #94a3b8;
}
[data-theme="dark"] .notif-upload-bar {
background: #334155;
}
/* Dropzone */
[data-theme="dark"] .dropzone {
border-color: #475569;
color: #94a3b8;
background-color: #0f172a;
}
/* Progress bar */
[data-theme="dark"] .progress-bar {
background-color: #334155;
}
/* Empty state */
[data-theme="dark"] .empty-state {
color: #64748b;
}
[data-theme="dark"] .empty-state i {
color: #334155 !important;
}
[data-theme="dark"] .empty-state p {
color: #64748b;
}
/* Confirm dialog */
[data-theme="dark"] .confirm-dialog-content {
background-color: #1e293b;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
}
[data-theme="dark"] .confirm-dialog-header {
color: #f1f5f9;
}
[data-theme="dark"] .confirm-dialog-message {
color: #94a3b8;
}
[data-theme="dark"] .confirm-dialog-buttons {
background: #162032;
border-top-color: #334155;
}
/* Move dialog / folder tree */
[data-theme="dark"] .move-dialog-content {
background-color: #1e293b;
}
[data-theme="dark"] .move-dialog-header {
color: #f1f5f9;
border-bottom-color: #334155;
}
[data-theme="dark"] .move-dialog .folder-tree {
background: #0f172a;
border-color: #334155;
}
[data-theme="dark"] .move-dialog .folder-tree-item {
color: #cbd5e1;
}
[data-theme="dark"] .move-dialog .folder-tree-item:hover {
background: #334155;
}
[data-theme="dark"] .move-dialog .folder-tree-item.selected {
background: rgba(255, 94, 58, 0.1);
color: #ff5e3a;
}
[data-theme="dark"] .move-dialog-buttons {
background: #162032;
border-top-color: #334155;
}
/* Share dialog */
[data-theme="dark"] .share-dialog-content {
background-color: #1e293b;
}
[data-theme="dark"] .share-dialog-header {
color: #f1f5f9;
border-bottom-color: #334155;
}
[data-theme="dark"] .share-dialog-body label {
color: #94a3b8;
}
[data-theme="dark"] .share-dialog-body input {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
[data-theme="dark"] .share-dialog-body input:focus {
border-color: #ff5e3a;
background: #0f172a;
}
[data-theme="dark"] .share-link-container {
background: #0f172a;
border-color: #334155;
}
[data-theme="dark"] .share-link-container input {
color: #e2e8f0;
}
[data-theme="dark"] .share-dialog-buttons {
background: #162032;
border-top-color: #334155;
}
/* Checkbox accent */
[data-theme="dark"] .list-header-checkbox input,
[data-theme="dark"] .list-item-checkbox input,
[data-theme="dark"] .file-card-checkbox input {
accent-color: #ff5e3a;
}
/* Search results header */
[data-theme="dark"] .search-results-header h3 {
color: #f1f5f9;
}