文件操作 - filemanager.css
返回文件管理
返回主菜单
删除本文件
文件: /usr/local/cwpsrv/var/services/users/cwp_theme/original/css/filemanager.css
编辑文件内容
/* ────────────────────────────────────────────────────────────── File Manager v2 - Modern CSS Material Indigo (#3F51B5) — User Panel ────────────────────────────────────────────────────────────── */ :root { --primary: #005DA0; --primary-hover: #004B82; --primary-light: rgba(0, 93, 160, 0.07); --primary-lighter: rgba(0, 93, 160, 0.03); --success: #4CAF50; --danger: #F44336; --warning: #FFC107; --bg: #F4F6F8; --bg-app: #F4F6F8; --card: #FFFFFF; --text-main: #5A6A78; --text-muted: #8994A1; --border: #EAEBED; --border-light: #F4F6F8; --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); --radius-sm: 6px; --radius-md: 8px; --radius-lg: 12px; --radius-full: 9999px; --sidebar-width: 230px; --header-height: 52px; --toolbar-height: 44px; --statusbar-height: 40px; --header-bg: #005DA0; } /* ── Base styles ───────────────────────────────────────────── */ body { background: var(--bg-app); margin: 0; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: var(--text-main); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; width: 100vw; height: 100vh; overflow: hidden; } /* ── CSS Grid Layout ──────────────────────────────────────── */ .fm-layout { display: grid; grid-template-columns: var(--sidebar-width) 1fr; grid-template-rows: var(--header-height) 1fr; grid-template-areas: "header header" "sidebar main"; height: 100vh; overflow: hidden; background: var(--bg-app); transition: grid-template-columns 0.25s cubic-bezier(0.4, 0, 0.2, 1); } .fm-layout[data-sidebar-collapsed="true"] { grid-template-columns: 0px 1fr; } .fm-layout[data-sidebar-collapsed="true"] .fm-sidebar { overflow: hidden; opacity: 0; pointer-events: none; } .fm-layout[data-sidebar-collapsed="true"] .fm-sidebar-disk { display: none; } /* ── Header ───────────────────────────────────────────────── */ .fm-header { grid-area: header; display: flex; align-items: center; justify-content: space-between; padding: 0 16px; background: var(--header-bg); color: #ffffff; border-bottom: 1px solid var(--header-bg); z-index: 100; gap: 12px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); } .fm-header-left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; overflow: hidden; } .fm-header-right { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } /* Logo CWP sobre fondo indigo: se invierte a blanco */ .fm-logo { height: 28px; width: auto; filter: brightness(0) invert(1); opacity: 0.95; transition: opacity 0.2s ease; flex-shrink: 0; } .fm-logo:hover { opacity: 1; } /* */ /* Botón hamburguesa: chip blanco visible sobre el header indigo */ .fm-sidebar-toggle { display: inline-flex !important; align-items: center; justify-content: center; width: 36px; height: 36px; border: 1px solid #ffffff !important; border-radius: var(--radius-md) !important; background: #ffffff !important; color: var(--primary) !important; cursor: pointer; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); flex-shrink: 0; padding: 0 !important; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12); outline: none; } .fm-sidebar-toggle:hover, .fm-sidebar-toggle:focus, .fm-sidebar-toggle:active { background: var(--primary) !important; color: #ffffff !important; border-color: var(--primary) !important; } .fm-sidebar-toggle i { font-size: 15px; } /* ── Breadcrumb ───────────────────────────────────────────── */ .fm-breadcrumb { flex: 1; min-width: 0; overflow: hidden; } .breadcrumb { padding: 0; margin: 0; background: rgba(255, 255, 255, 0.08) !important; border: none !important; display: flex; flex-wrap: nowrap; align-items: center; gap: 0; overflow-x: auto; scrollbar-width: none; border-radius: var(--radius-md); padding: 4px 6px !important; height: 32px; } .breadcrumb::-webkit-scrollbar { display: none; } .breadcrumb-item { display: flex; align-items: center; flex-shrink: 0; } /* Separador / entre carpetas */ .breadcrumb-item + .breadcrumb-item::before { content: '/'; color: rgba(255, 255, 255, 0.3); font-size: 11px; font-weight: 600; margin: 0 2px; flex-shrink: 0; } /* Badges de cada carpeta en la ruta */ .breadcrumb-item a, .breadcrumb-item .label, .breadcrumb-item .label-primary { background: rgba(255, 255, 255, 0.12) !important; color: rgba(255, 255, 255, 0.85) !important; padding: 3px 10px !important; border-radius: var(--radius-sm) !important; font-size: 11px !important; font-weight: 600 !important; text-decoration: none; display: inline-block; transition: all 0.15s; border: 1px solid transparent; text-shadow: none !important; } .breadcrumb-item a:hover, .breadcrumb-item .label:hover, .breadcrumb-item .label-primary:hover { background: rgba(255, 255, 255, 0.22) !important; color: #ffffff !important; border-color: rgba(255, 255, 255, 0.2); } /* Último item (carpeta actual) más destacado */ .breadcrumb-item:last-child a, .breadcrumb-item:last-child .label, .breadcrumb-item:last-child .label-primary { background: rgba(255, 255, 255, 0.2) !important; color: #ffffff !important; font-weight: 700 !important; } /* Botón back (← volver) */ .breadcrumb-item .fa { color: rgba(255, 255, 255, 0.85); font-size: 12px; } .breadcrumb-item:first-child .fa-arrow-left { color: #e6fffa; font-size: 12px; padding: 0; border-radius: var(--radius-sm); background: rgba(255, 255, 255, 0.12); border: 1px solid rgba(255, 255, 255, 0.2); display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; transition: all 0.2s; } .breadcrumb-item:first-child .fa-arrow-left:hover { color: #ffffff; background: rgba(255, 255, 255, 0.25); border-color: rgba(255, 255, 255, 0.45); } .breadcrumb-item:first-child a { display: inline-flex; align-items: center; justify-content: center; background: none !important; border: none !important; padding: 0 !important; } /* ── Search in Header ─────────────────────────────────────── */ .fm-search-select { flex-shrink: 0; } .fm-search-box { display: flex !important; flex-direction: row !important; align-items: center !important; width: 240px; height: 32px; background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: var(--radius-md); transition: all 0.25s; overflow: hidden; margin: 0 !important; } .fm-search-box:focus-within { background: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.4); box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.08); width: 280px; } /* Input inside search box */ .fm-search-box input.form-control { flex: 1 1 auto !important; width: 100% !important; border: none !important; background: transparent !important; color: rgba(255, 255, 255, 0.9) !important; font-size: 12px !important; padding: 0 10px !important; height: 32px !important; line-height: 32px !important; box-shadow: none !important; outline: none !important; float: none !important; margin: 0 !important; } .fm-search-box input.form-control::placeholder { color: rgba(255, 255, 255, 0.4); opacity: 1; } /* Button wrapper inside search box */ .fm-search-box .input-group-btn { display: flex !important; align-items: center !important; justify-content: center !important; width: auto !important; flex-shrink: 0 !important; float: none !important; margin: 0 !important; padding: 0 !important; background: transparent !important; position: relative !important; } .fm-search-box .input-group-btn .btn { border: none !important; background: transparent !important; color: rgba(255, 255, 255, 0.7) !important; height: 32px !important; width: 34px !important; padding: 0 !important; display: inline-flex !important; align-items: center !important; justify-content: center !important; border-radius: 0 !important; box-shadow: none !important; transition: color 0.2s, background 0.2s !important; margin: 0 !important; float: none !important; } .fm-search-box .input-group-btn .btn:hover { color: #ffffff !important; background: rgba(255, 255, 255, 0.15) !important; } .fm-search-box .input-group-btn .btn i { color: inherit !important; font-size: 13px !important; } /* Select dropdown in header */ .fm-search-select select.form-control { border: 1px solid rgba(255, 255, 255, 0.2); border-radius: var(--radius-md); background: rgba(255, 255, 255, 0.08); color: rgba(255, 255, 255, 0.85); font-size: 12px; padding: 0 28px 0 10px; height: 32px; line-height: 32px; cursor: pointer; appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='rgba(255,255,255,0.6)'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 8px center; background-size: 14px; } .fm-search-select select.form-control option { background: var(--card); color: var(--text-main); } .input-group .form-control { border-radius: var(--radius-md) 0 0 var(--radius-md); border-right: none; } .input-group .form-control:focus { border-right: none; } .input-group .input-group-btn { display: flex; align-items: stretch; } /* Botón de buscar — translúcido, se ilumina en hover */ .input-group .input-group-btn .btn { border-radius: 0 var(--radius-md) var(--radius-md) 0; padding: 0 14px; background: rgba(255, 255, 255, 0.15); border: none; color: rgba(255, 255, 255, 0.7); display: flex; align-items: center; justify-content: center; transition: all 0.2s; height: 32px; line-height: 32px; } .input-group .input-group-btn .btn:hover { background: rgba(255, 255, 255, 0.3); color: #ffffff; } .input-group .input-group-btn .btn i { margin: 0; font-size: 12px; color: #fff; } .btn-primary.btn-sm { background: var(--primary); border: none; color: white; } /* ── Sidebar ──────────────────────────────────────────────── */ .fm-sidebar { grid-area: sidebar; background: var(--card); border-right: 1px solid var(--border); overflow: hidden; transition: opacity 0.25s; display: flex; flex-direction: column; min-width: 0; } .treeFolder { flex: 1; min-height: 0; overflow-x: auto; overflow-y: auto; margin: 0; padding: 12px; scrollbar-width: thin; scrollbar-color: var(--border) transparent; } .treeFolder::-webkit-scrollbar { width: 6px; height: 6px; } .treeFolder::-webkit-scrollbar-track { background: transparent; } .treeFolder::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } .treeFolder::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } /* ── Sidebar Disk Info (debajo del árbol) ─────────────────── */ .fm-sidebar-disk { flex-shrink: 0; padding: 12px 14px; border-top: 1px solid var(--border-light); background: var(--bg); } .fm-sidebar-disk .fm-disk-head { display: flex; justify-content: space-between; align-items: center; font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); margin-bottom: 8px; } .fm-sidebar-disk .fm-disk-head i { color: var(--primary); margin-right: 4px; } .fm-sidebar-disk .fm-disk-value { color: var(--text-main); text-transform: none; letter-spacing: 0; font-weight: 600; } .fm-sidebar-disk .progress { height: 6px; margin: 0; } /* ── Main Content ─────────────────────────────────────────── */ .fm-main { grid-area: main; display: flex; flex-direction: column; overflow: hidden; min-width: 0; } /* ── Toolbar ──────────────────────────────────────────────── */ .fm-toolbar { display: flex; align-items: center; gap: 4px; padding: 10px 14px; background: #f8f9fa; border-bottom: 1px solid var(--border); overflow-x: auto; overflow-y: hidden; scrollbar-width: none; flex-shrink: 0; } .fm-toolbar::-webkit-scrollbar { display: none; } .fm-toolbar-group { display: flex; align-items: center; gap: 3px; flex-shrink: 0; margin: 4px 0; } .fm-toolbar-sep { padding-left: 6px; border-left: 1px solid var(--border); margin-left: 4px; } .fm-tool-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 6px 14px; margin: 4px 0; border-radius: var(--radius-full); color: var(--text-main); text-decoration: none !important; transition: all 0.2s; font-weight: 600; font-size: 12px; white-space: nowrap; background: var(--card); border: 1px solid var(--border); cursor: pointer; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06); } .fm-tool-btn, .fm-tool-btn:hover, .fm-tool-btn:focus, .fm-toolbar a, .fm-toolbar a:hover, .fileTable a, .fileTable a:hover, #user-table a, #user-table a:hover, .tdName a, .tdName a:hover { text-decoration: none !important; } /* Botones secundarios — hover gris sutil */ .fm-tool-btn:hover { background: #f0f0f0; border-color: #bdc3c7; transform: translateY(-1px); box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); text-decoration: none !important; } .fm-tool-btn i { font-size: 12px; width: 14px; display: inline-flex; align-items: center; justify-content: center; } .fm-tool-btn-danger:hover { background: var(--danger); color: #ffffff; border-color: var(--danger); box-shadow: 0 2px 6px rgba(244, 67, 54, 0.3); text-decoration: none !important; } .fm-tool-btn-danger:hover i { color: #ffffff; } /* ── Table Area ───────────────────────────────────────────── */ .fm-table-wrap { flex: 1; display: flex; flex-direction: column; overflow: hidden; background: var(--card); } .table { background: transparent; border-radius: 0; overflow: visible; margin: 0; border-collapse: collapse; border-spacing: 0; } .table.fileFixed { border-radius: 0; background: transparent; } /* ── Table Header — gris claro con letra teal ──────────────── */ .table thead { background: #f0f0f0; border-bottom: none !important; position: sticky; top: 0; z-index: 10; } .table thead th { padding: 11px 12px; font-weight: 700; font-size: 11px; text-transform: uppercase; letter-spacing: 0.6px; color: var(--primary); border: none; border-right: 1px solid var(--border); border-bottom: none !important; text-align: left; cursor: pointer; user-select: none; transition: background 0.15s; } .table thead th:last-child { border-right: none; } .table thead th:hover { background: #e2e8f0; } .table thead th:first-child { padding-left: 16px; } .fileTable { background: transparent; border-bottom: none !important; flex-shrink: 0; } .fileTable thead, .fileTable tr, .fileTable th { border-bottom: none !important; } /* ── File list container ──────────────────────────────────── */ #lisfiledos { flex: 1; overflow-y: auto; background: var(--card); padding: 0 !important; margin: 0 !important; display: block !important; } #user-table { background: var(--card); } /* ── File Rows ─────────────────────────────────────────────── */ #user-table tbody tr.tdName { transition: background 0.1s; cursor: default; border-bottom: 1px solid var(--border-light); } #user-table tbody tr.tdName:hover td { background: var(--primary-lighter); } #user-table tbody tr.tdName.selected td { background: #e2e8f0 !important; color: var(--text-main); } .table tbody tr { background: transparent; transition: background 0.1s; } .table tbody tr:hover { background: var(--primary-lighter); } .table tbody tr.selected { background: #e2e8f0 !important; } .table tbody td { padding: 6px 12px; vertical-align: middle; border: none; border-bottom: 1px solid var(--border-light); color: var(--text-main); font-size: 13px; } .table tbody tr.selected td { border-bottom-color: var(--border-light); } .table tbody td:first-child { font-weight: 600; font-size: 14px; padding-left: 16px; padding-top: 5px; padding-bottom: 5px; } /* ── File name styling ─────────────────────────────────────── */ #user-table tbody tr td:first-child label { font-weight: 600; font-size: 14px; color: var(--text-main); cursor: pointer; } #user-table tbody tr td:first-child label:hover { color: var(--primary); } #user-table tbody tr td:not(:first-child) { font-weight: 400; color: var(--text-muted); font-size: 12px; } #user-table tbody tr p { color: var(--text-muted) !important; font-size: 11px !important; font-weight: 400 !important; } /* ── File Icons ───────────────────────────────────────────── */ .table .fa-folder { color: #f59e0b; font-size: 18px; } .table .fa-folder-open { color: #fbbf24; font-size: 18px; } .table .fa-file-zip-o, .table .fa-file-text, .table .fa-file-code-o, .table .fa-file { color: var(--primary); font-size: 16px; } .table .fa-image { color: #8b5cf6; font-size: 16px; } .table .fa-video { color: #ec4899; font-size: 16px; } .table .fa-music { color: #06b6d4; font-size: 16px; } .table .fa-archive { color: #f59e0b; font-size: 16px; } .table .fa-trash { color: var(--danger); font-size: 16px; } /* ── Action Buttons ────────────────────────────────────────── */ .table tbody td a[title] { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-md); background: #e8ecf1; color: var(--primary); transition: all 0.15s; text-decoration: none; margin: 0 3px; border: 1px solid var(--border); } .table tbody td a[title]:hover { background: #e2e8f0; color: var(--primary-hover); transform: translateY(-1px); box-shadow: var(--shadow-sm); } .table tbody td a[title] i { font-size: 13px; color: var(--primary); } .table tbody td a[title="Delete"] { color: var(--text-muted); } .table tbody td a[title="Delete"] i { color: var(--text-muted); } .table tbody td a[title="Delete"]:hover { background: rgba(244, 67, 54, 0.08); color: var(--danger); } .table tbody td a[title="Delete"]:hover i { color: var(--danger); } .table tbody td a i.action { transition: all 0.15s; } .table tbody td a:hover i.action { transform: scale(1.1); } .table tbody td a[href="javascript:void(0)"] { display: flex; align-items: center; gap: 8px; } .table tbody td a[href="javascript:void(0)"] .fa { font-size: 18px !important; margin-right: 2px; } /* Input in inline edit */ #user-table tbody tr td input[style*="width: 50%"] { border: 1px solid var(--primary); border-radius: var(--radius-sm); padding: 5px 10px; font-size: 14px; outline: none; box-shadow: 0 0 0 3px rgba(63, 81, 181, 0.12); } /* Drag and drop */ .enterDrag { background: var(--primary-light) !important; border: 2px dashed var(--primary) !important; } /* ── Status Bar ───────────────────────────────────────────── */ .fm-statusbar { display: flex; align-items: center; padding: 0 16px; background: var(--card); border-top: 1px solid var(--border); height: var(--statusbar-height); flex-shrink: 0; gap: 16px; font-size: 11px; color: var(--text-muted); } .fm-statusbar-left { flex-shrink: 0; } .fm-statusbar-center { flex: 1; display: flex; align-items: center; gap: 8px; min-width: 0; } .fm-statusbar-right { flex-shrink: 0; text-align: right; } .fm-statusbar-trash { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border-radius: var(--radius-full); font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; color: var(--text-main); text-decoration: none; transition: all 0.2s; background: var(--bg); border: 1px solid var(--border); } .fm-statusbar-trash:hover { color: var(--primary); background: var(--primary-light); border-color: rgba(244, 67, 54, 0.2); } .fm-statusbar-trash i { color: var(--text-muted); transition: color 0.2s; } .fm-statusbar-trash:hover i { color: var(--primary); } .fm-disk-label { white-space: nowrap; flex-shrink: 0; } .fm-disk-label i { color: var(--primary); font-size: 11px; margin-right: 3px; } .fm-disk-bar { flex: 1; min-width: 60px; max-width: 200px; } .fm-disk-bar .progress-mini { height: 6px; margin: 0 !important; } .fm-count-info i { color: var(--primary); font-size: 11px; } /* ── Progress Bar ─────────────────────────────────────────── */ .progress { height: 8px; border-radius: var(--radius-full); background: rgba(226, 232, 240, 0.5); overflow: hidden; } .progress-bar { background: linear-gradient(90deg, #4CAF50 0%, #66BB6A 100%); transition: width 0.3s; border-radius: var(--radius-full); } .progress-mini { height: 6px; border-radius: var(--radius-full); background: rgba(226, 232, 240, 0.5); overflow: hidden; margin: 0 !important; } .progress-mini .progress-bar { background: linear-gradient(90deg, #4CAF50 0%, #66BB6A 100%); border-radius: var(--radius-full); } .progress-bar-info { background-color: var(--primary) !important; } /* ── Vue Tree ─────────────────────────────────────────────── */ .vue-tree { font-size: 13px; } .vue-tree > ul { padding: 0; list-style: none; margin: 0; } .vue-tree > ul > li { padding: 0; } .vue-tree ul ul { padding-left: 16px; margin: 0; list-style: none; border-left: 1px solid var(--border); margin-left: 7px; } .vue-tree .fa { margin-right: 0; } .vue-tree li { padding: 1px 0; list-style: none; } /* Fila contenedor de cada item en el árbol */ .vue-tree-item-row { display: flex; align-items: center; gap: 4px; min-height: 28px; border-radius: var(--radius-sm); transition: background 0.15s; user-select: none; } /* Toggle +/- icon */ .vue-tree .icon-open-state { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; flex-shrink: 0; cursor: pointer; color: var(--text-muted); font-size: 10px; transition: color 0.15s; } .vue-tree .icon-open-state:hover { color: var(--primary); } /* Spacer cuando no hay toggle +/- (carpetas sin hijos) */ .vue-tree .icon-open-spacer { display: inline-block; width: 16px; height: 16px; flex-shrink: 0; } /* Wrapper del enlace */ .vue-tree-item-label { display: flex; align-items: center; flex: 1; min-width: 0; } /* El enlace del nombre de carpeta */ .vue-tree li a { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: var(--radius-sm); color: var(--text-main); text-decoration: none; transition: all 0.15s; font-weight: 500; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100%; } .vue-tree li a > .fa { flex-shrink: 0; width: 16px; text-align: center; margin-right: 0; } .vue-tree li a.ml5 { margin-left: 0 !important; } .vue-tree li a:hover, .vue-tree-item-row:hover > .vue-tree-item-label a { background: var(--primary-light); color: var(--primary); } .vue-tree li a .fa-folder, .vue-tree li a .fa-folder-open { color: #f59e0b; } .vue-tree li a:hover .fa-folder, .vue-tree li a:hover .fa-folder-open { color: #d97706; } .vue-tree li a.active { background: var(--primary); color: #fff; } .vue-tree li a.active .fa-folder, .vue-tree li a.active .fa-folder-open { color: #fff; } .vue-tree li a:hover .fa-folder, .vue-tree li a:hover .fa-folder-open { color: #d97706; } .vue-tree li a.active { background: var(--primary-light); color: var(--primary); font-weight: 600; } /* ── Buttons (shared with modals) ─────────────────────────── */ .btn { border-radius: var(--radius-md); font-weight: 500; font-size: 12px; padding: 7px 14px; transition: all 0.2s; border: 1px solid transparent; } .btn:hover { transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn:active { transform: translateY(0); } .btn-default { background: var(--bg); border: 1px solid var(--border); color: var(--text-main); } .btn-default:hover { background: var(--border); box-shadow: var(--shadow-sm); } .btn-success { background: var(--success); border-color: var(--success); color: white; } .btn-success:hover { background: #059669; } .btn-danger { background: var(--danger); border-color: var(--danger); color: white; } .btn-danger:hover { background: #e11d48; } .btn-primary { background: var(--primary); border-color: var(--primary); color: white; } .btn-primary:hover { background: var(--primary-hover); } .btn-block { width: 100%; border-radius: var(--radius-md); } /* ── Form Controls ────────────────────────────────────────── */ .form-control { border: 1px solid var(--border); border-radius: var(--radius-md); padding: 11px 14px; font-size: 14px; transition: all 0.2s; background: #fff; color: var(--text-main); } .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(63, 81, 181, 0.12); outline: none; } .form-control::placeholder { color: var(--text-muted); opacity: 0.7; } /* ── Modals ──────────────────────────────────────────────── */ .modal { display: none; position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1050; overflow: hidden; outline: 0; align-items: center; justify-content: center; padding: 20px; } .modal.in { display: flex !important; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #0f172a; opacity: 0; transition: opacity 0.2s ease; } .modal-backdrop.in { opacity: 0.5; } .modal-dialog { position: relative; width: 90%; max-width: 480px; margin: 0; transform: scale(0.95); opacity: 0; transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease; } .modal.in .modal-dialog { transform: scale(1); opacity: 1; } #listFind .modal-dialog, #uploadModal .modal-dialog, #copymoveMultiple .modal-dialog, #movedragdrop .modal-dialog { max-width: 820px; } #changepermision .modal-dialog { max-width: 560px; } .modal-content { border-radius: 16px; border: none; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2); overflow: hidden; background: var(--card); } .modal-header { border-bottom: 1px solid var(--border); padding: 18px 24px; background: linear-gradient(135deg, var(--bg) 0%, white 100%); display: flex; align-items: center; justify-content: space-between; flex-direction: row-reverse; text-align: left; } .modal-header h4, .modal-header .modal-title { margin: 0; font-size: 16px; font-weight: 700; color: var(--text-main); text-align: left; flex: 1; } .modal-header .close { background: none; border: none; font-size: 18px; color: var(--text-muted); cursor: pointer; padding: 4px 8px; border-radius: 6px; transition: all 0.2s; opacity: 1; text-shadow: none; line-height: 1; } .modal-header .close:hover { background: var(--danger); color: #fff; } .modal-body { padding: 24px; max-height: 60vh; overflow-y: auto; background: var(--card); font-size: 13px; color: var(--text-main); } .modal-body label { font-size: 12px; font-weight: 600; color: var(--text-main); margin-bottom: 6px; display: block; } .modal-body p { font-size: 13px; color: var(--text-main); line-height: 1.5; margin: 0 0 10px; } .modal-body ul { padding-left: 0; list-style: none; margin: 0; } .modal-body ul li { padding: 4px 0; font-size: 12px; color: var(--text-muted); font-family: 'Monaco', 'Consolas', monospace; } .modal-footer { border-top: 1px solid var(--border-light); padding: 14px 24px; background: var(--bg); display: flex; justify-content: flex-end; gap: 8px; } .modal-footer .btn { border-radius: 8px; font-weight: 600; font-size: 12px; padding: 8px 16px; border: 1px solid transparent; transition: all 0.2s; } .modal-footer .btn-default { background: var(--card); border-color: var(--border); color: var(--text-main); } .modal-footer .btn-default:hover { background: var(--border); } .modal-footer .btn-danger { background: var(--danger); color: #fff; border-color: var(--danger); } .modal-footer .btn-danger:hover { background: #e11d48; } .modal-footer .btn-primary { background: var(--primary); color: #fff; border-color: var(--primary); } .modal-footer .btn-primary:hover { background: var(--primary-hover); } .modal-footer .btn-block { width: 100%; } .modal-body .form-control { border-radius: 8px; border: 1px solid var(--border); padding: 10px 12px; font-size: 13px; transition: all 0.2s; background: #fff; color: var(--text-main); } .modal-body .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(63, 81, 181, 0.12); outline: none; } .modal-body .alert { border-radius: 10px; padding: 14px 16px; font-size: 12px; border: none; margin-bottom: 12px; } .modal-body .alert-danger { background: rgba(244, 67, 54, 0.08); color: #be123c; } .modal-body .alert-info { background: rgba(63, 81, 181, 0.06); color: var(--primary); } .modal-body .alert input[type="checkbox"] { margin-right: 6px; } #listFind .modal-body, #deleteDirMultiple .modal-body { padding: 24px; max-height: 60vh; overflow-y: auto; } /* ── Context Menu ─────────────────────────────────────────── */ #context-menu, .context-menu { position: fixed; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(12px); border: 1px solid var(--border); border-radius: var(--radius-md); box-shadow: 0 10px 40px rgba(0, 0, 0, 0.12); padding: 6px; min-width: 190px; z-index: 10000; display: none; } #context-menu.visible, .context-menu.visible { display: block; animation: contextMenuFadeIn 0.15s; } @keyframes contextMenuFadeIn { from { opacity: 0; transform: translateY(-8px) scale(0.96); } to { opacity: 1; transform: translateY(0) scale(1); } } .context-menu-item { padding: 10px 14px; cursor: pointer; display: flex; align-items: center; gap: 11px; font-size: 13px; font-weight: 500; color: var(--text-main); transition: all 0.15s; border-radius: var(--radius-sm); } .context-menu-item:hover { background: var(--primary-light); color: var(--primary); } .context-menu-item i { width: 17px; text-align: center; color: var(--text-muted); font-size: 14px; } .context-menu-item:hover i { color: var(--primary); } /* ── Labels / Badges ──────────────────────────────────────── */ .label { display: inline-block; padding: 4px 10px; border-radius: var(--radius-full); font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; } .label-primary { background: var(--primary); color: white; } .label-success { background: var(--success); color: white; } .label-danger { background: var(--danger); color: white; } .label-warning { background: var(--warning); color: white; } .label-info { background: var(--primary); color: white; } .label-default { background: var(--bg); color: var(--text-muted); border: 1px solid var(--border); } /* ── File list search results ─────────────────────────────── */ li.listFind { list-style: none; padding: 8px 12px; border-radius: 6px; cursor: pointer; transition: background 0.2s; } li.listFind:hover { background: var(--bg); } li.listFind .fa { font-size: 16px; } li.listFind .fa-folder { color: #f59e0b; } li.listFind a { color: var(--text-main); text-decoration: none; font-size: 13px; } /* ── Dropzone ─────────────────────────────────────────────── */ .dropzone { border: 2px dashed var(--border); border-radius: var(--radius-lg); padding: 48px 32px; text-align: center; background: rgba(248, 250, 252, 0.5); transition: all 0.3s; cursor: pointer; } .dropzone:hover { border-color: var(--primary); background: var(--primary-lighter); } .dropzone.dragover { border-color: var(--primary); background: var(--primary-light); box-shadow: 0 0 0 4px rgba(63, 81, 181, 0.12); } .dropzone .fa-upload, .dropzone-custom-title { color: var(--primary); } .dropzone .dropzone-custom-title { font-size: 18px; font-weight: 600; margin: 0 0 6px; } .dropzone .subtitle { color: var(--text-muted); font-size: 13px; } .dropzone p { margin: 0; color: var(--text-muted); font-size: 14px; } /* ── Loading ──────────────────────────────────────────────── */ .loading-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); display: flex; align-items: center; justify-content: center; z-index: 9999; } .loading-spinner { width: 40px; height: 40px; border: 3px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ── Scrollbar ────────────────────────────────────────────── */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--bg); border-radius: 4px; } ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } /* ── Hide Bootstrap 3 container styles that conflict ─────── */ .container-fluid { height: 100vh !important; padding: 0 !important; margin: 0 !important; width: 100% !important; } .fm-layout .col-lg-2, .fm-layout .col-lg-10, .fm-layout .col-lg-9, .fm-layout .col-lg-3, .fm-layout .col-md-12, .fm-layout .col-md-2, .fm-layout .col-md-3, .fm-layout .col-md-8, .fm-layout .col-md-9, .fm-layout .col-md-10, .fm-layout .col-sm-12, .fm-layout .col-sm-8, .fm-layout .col-sm-4, .fm-layout .col-xs-12 { padding: 0 !important; margin: 0 !important; width: auto !important; float: none !important; position: static !important; min-height: 0 !important; } /* ── Responsive ───────────────────────────────────────────── */ @media (max-width: 991px) { .fm-layout { grid-template-columns: 0px 1fr; grid-template-rows: var(--header-height) 1fr; } .fm-sidebar { display: none; } .fm-search-box { width: 160px; } .fm-statusbar-center { display: none; } } @media (max-width: 768px) { :root { --header-height: 46px; --toolbar-height: 40px; } .fm-logo { display: none; } .fm-search-select { display: none; } .fm-search-box { width: 140px; } .fm-toolbar { padding: 4px 8px; gap: 3px; } .fm-tool-btn { padding: 5px 8px; font-size: 10px; } .fm-tool-btn span { display: none; } .fm-tool-btn i { font-size: 14px; width: 18px; height: 18px; } .fm-statusbar { padding: 0 10px; font-size: 10px; gap: 8px; } .fm-statusbar-right { font-size: 10px; } .table thead th { padding: 8px 10px; font-size: 10px; } .table tbody td { padding: 8px 10px; } .table tbody td:first-child { font-size: 12px; } .breadcrumb-item a { padding: 3px 8px; font-size: 10px; } .modal-dialog { margin: 0; width: 95%; } .modal { padding: 10px; } } @media (max-width: 480px) { .fm-header { padding: 0 10px; gap: 8px; } .fm-search-box { width: 110px; } .fm-sidebar-toggle { width: 30px; height: 30px; } .fm-statusbar-right { display: none; } } /* ── Override styles for #topnav li (legacy BS3 nav) ─────── */ #topnav { margin: 0 !important; padding: 0 !important; border: none !important; background: transparent !important; } #topnav ul { display: flex !important; flex-wrap: nowrap !important; gap: 3px !important; margin: 0 !important; padding: 0 !important; list-style: none !important; align-items: center; } #topnav li { float: none !important; margin: 0 !important; padding: 0 !important; flex-shrink: 0; } #topnav li a { display: inline-flex !important; align-items: center; gap: 5px; padding: 5px 10px !important; background: transparent !important; border: 1px solid transparent; border-radius: var(--radius-md); color: var(--text-main) !important; font-size: 11px !important; font-weight: 500; text-decoration: none; transition: all 0.2s; } #topnav li a:hover { background: var(--primary-light) !important; color: var(--primary) !important; border-color: rgba(63, 81, 181, 0.15); } #topnav li a i { color: var(--text-muted) !important; font-size: 12px; margin: 0 !important; } #topnav li a:hover i { color: var(--primary) !important; }
修改文件时间
将文件时间修改为当前时间的前一年
删除文件