/*! * elFinder-Material-Theme (Gray) v2.1.15 (https://github.com/RobiNN1/elFinder-Material-Theme) * Copyright 2016-2023 Róbert Kelčák * Licensed under MIT (https://github.com/RobiNN1/elFinder-Material-Theme/blob/master/LICENSE) */ .elfinder { color: #546e7a; font-family: -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .elfinder.ui-widget.ui-widget-content { font-family: -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif; box-shadow: 0 1px 8px rgba(0, 0, 0, 0.6); border-radius: 0; border: 0; } .elfinder * { outline: 0 !important; } /** * Loading */ .elfinder-info-spinner, .elfinder-navbar-spinner, .elfinder-button-icon-spinner { background: url("../../material/images/loading.svg") center center no-repeat !important; width: 16px; height: 16px; } /** * Progress Bar */ @-webkit-keyframes progress-animation { from { background-position: 1rem 0; } to { background-position: 0 0; } } @keyframes progress-animation { from { background-position: 1rem 0; } to { background-position: 0 0; } } .elfinder-notify-progressbar { border: 0; } .elfinder-notify-progress, .elfinder-notify-progressbar { border-radius: 0; } .elfinder-notify-progress, .elfinder-resize-spinner { background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; -webkit-animation: progress-animation 1s linear infinite; animation: progress-animation 1s linear infinite; background-color: #0275d8; height: 1rem; } /** * Toast Notification */ .elfinder .elfinder-toast > div { background-color: #323232 !important; color: #d6d6d6; box-shadow: none; opacity: inherit; padding: 10px 60px; } .elfinder .elfinder-toast > div button.ui-button { color: #fff; } .elfinder .elfinder-toast > .toast-info button.ui-button { background-color: #3498db; } .elfinder .elfinder-toast > .toast-error button.ui-button { background-color: #f44336; } .elfinder .elfinder-toast > .toast-success button.ui-button { background-color: #4caf50; } .elfinder .elfinder-toast > .toast-warning button.ui-button { background-color: #ff9800; } .elfinder-toast-msg { font-family: -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif; font-size: 17px; } /** * For Ace Editor */ #ace_settingsmenu { font-family: -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif; box-shadow: 0 1px 30px rgba(0, 0, 0, 0.6) !important; background-color: #1d2736 !important; color: #e6e6e6 !important; } #ace_settingsmenu, #kbshortcutmenu { padding: 0; } .ace_optionsMenuEntry { padding: 5px 10px; } .ace_optionsMenuEntry:hover { background-color: #111721; } .ace_optionsMenuEntry label { font-size: 13px; } #ace_settingsmenu input[type="text"], #ace_settingsmenu select { margin: 1px 2px 2px; padding: 2px 5px; border-radius: 3px; border: 0; background: rgba(9, 53, 121, 0.75); color: white !important; } /** * Icons */ @font-face { font-family: material; src: url("../../material/icons/material.eot?91804974"); src: url("../../material/icons/material.eot?91804974#iefix") format("embedded-opentype"), url("../../material/icons/material.woff2?91804974") format("woff2"), url("../../material/icons/material.woff?91804974") format("woff"), url("../../material/icons/material.ttf?91804974") format("truetype"), url("../../material/icons/material.svg?91804974#material") format("svg"); font-weight: normal; font-style: normal; } @media screen and (-webkit-min-device-pixel-ratio: 0) { @font-face { font-family: material; src: url("../../material/icons/material.svg?91804974#material") format("svg"); } } .elfinder .ui-icon, .elfinder-button-icon, .ui-widget-header .ui-icon, .ui-widget-content .ui-icon { font: normal normal normal 14px/1 material; background-image: inherit; text-indent: inherit; } .elfinder .ui-button-icon-only .ui-icon { font: normal normal normal 14px/1 material; background-image: inherit !important; text-indent: 0; font-size: 16px; } .elfinder-button-icon { background: inherit; } .elfinder-button-icon-home:before { content: '\e800'; } .elfinder-button-icon-back:before { content: '\e801'; } .elfinder-button-icon-forward:before { content: '\e802'; } .elfinder-button-icon-up:before { content: '\e803'; } .elfinder-button-icon-dir:before { content: '\e804'; } .elfinder-button-icon-opendir:before { content: '\e805'; } .elfinder-button-icon-reload:before { content: '\e806'; } .elfinder-button-icon-open:before { content: '\e807'; } .elfinder-button-icon-mkdir:before { content: '\e808'; } .elfinder-button-icon-mkfile:before { content: '\e809'; } .elfinder-button-icon-rm:before { content: '\e80a'; } .elfinder-button-icon-trash:before { content: '\e80b'; } .elfinder-button-icon-restore:before { content: '\e80c'; } .elfinder-button-icon-copy:before { content: '\e80d'; } .elfinder-button-icon-cut:before { content: '\e80e'; } .elfinder-button-icon-paste:before { content: '\e80f'; } .elfinder-button-icon-getfile:before { content: '\e810'; } .elfinder-button-icon-duplicate:before { content: '\e811'; } .elfinder-button-icon-rename:before { content: '\e812'; } .elfinder-button-icon-edit:before { content: '\e813'; } .elfinder-button-icon-quicklook:before { content: '\e814'; } .elfinder-button-icon-upload:before { content: '\e815'; } .elfinder-button-icon-download:before { content: '\e816'; } .elfinder-button-icon-info:before { content: '\e817'; } .elfinder-button-icon-extract:before { content: '\e818'; } .elfinder-button-icon-archive:before { content: '\e819'; } .elfinder-button-icon-view:before { content: '\e81a'; } .elfinder-button-icon-view-list:before { content: '\e81b'; } .elfinder-button-icon-help:before { content: '\e81c'; } .elfinder-button-icon-resize:before { content: '\e81d'; } .elfinder-button-icon-link:before { content: '\e81e'; } .elfinder-button-icon-search:before { content: '\e81f'; } .elfinder-button-icon-sort:before { content: '\e820'; } .elfinder-button-icon-rotate-r:before { content: '\e821'; } .elfinder-button-icon-rotate-l:before { content: '\e822'; } .elfinder-button-icon-netmount:before { content: '\e823'; } .elfinder-button-icon-netunmount:before { content: '\e824'; } .elfinder-button-icon-places:before { content: '\e825'; } .elfinder-button-icon-chmod:before { content: '\e826'; } .elfinder-button-icon-accept:before { content: '\e827'; } .elfinder-button-icon-menu:before { content: '\e828'; } .elfinder-button-icon-colwidth:before { content: '\e829'; } .elfinder-button-icon-fullscreen:before { content: '\e82a'; } .elfinder-button-icon-unfullscreen:before { content: '\e82b'; } .elfinder-button-icon-empty:before { content: '\e82c'; } .elfinder-button-icon-undo:before { content: '\e82d'; } .elfinder-button-icon-redo:before { content: '\e82e'; } .elfinder-button-icon-preference:before { content: '\e82f'; } .elfinder-button-icon-mkdirin:before { content: '\e830'; } .elfinder-button-icon-selectall:before { content: '\e831'; } .elfinder-button-icon-selectnone:before { content: '\e832'; } .elfinder-button-icon-selectinvert:before { content: '\e833'; } .elfinder-button-icon-logout:before { content: '\e85a'; } .elfinder-button-icon-opennew:before { content: '\e85b'; } .elfinder-button-icon-hide:before { content: '\e85d'; } .elfinder-button-search .ui-icon.ui-icon-search { font-size: 17px; } .elfinder-button-search .ui-icon:hover { opacity: 1; } .elfinder-navbar-icon { font: normal normal normal 16px/1 material; background-image: inherit !important; } .elfinder-navbar-icon:before { content: '\e804'; } .elfinder-droppable-active .elfinder-navbar-icon:before, .elfinder .ui-state-active .elfinder-navbar-icon:before, .elfinder .ui-state-hover .elfinder-navbar-icon:before { content: '\e805'; } .elfinder-navbar-root-local .elfinder-navbar-icon:before { content: '\e83d' !important; } .elfinder-navbar-root-ftp .elfinder-navbar-icon:before { content: '\e823' !important; } .elfinder-navbar-root-sql .elfinder-navbar-icon:before { content: '\e83e' !important; } .elfinder-navbar-root-dropbox .elfinder-navbar-icon:before { content: '\e83f' !important; } .elfinder-navbar-root-googledrive .elfinder-navbar-icon:before { content: '\e840' !important; } .elfinder-navbar-root-onedrive .elfinder-navbar-icon:before { content: '\e841' !important; } .elfinder-navbar-root-box .elfinder-navbar-icon:before { content: '\e842' !important; } .elfinder-navbar-root-trash .elfinder-navbar-icon:before { content: '\e80b' !important; } .elfinder-navbar-root-zip .elfinder-navbar-icon:before { content: '\e85c' !important; } .elfinder-navbar-root-network .elfinder-navbar-icon:before { content: '\e823' !important; } .elfinder-places .elfinder-navbar-root .elfinder-navbar-icon:before { content: '\e825' !important; } .elfinder-navbar-arrow { background-image: inherit !important; font: normal normal normal 14px/1 material; font-size: 10px; padding-top: 3px; padding-left: 2px; color: #a9a9a9; } .elfinder .ui-state-active .elfinder-navbar-arrow { color: #fff; } .elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow:before { content: '\e857'; } .elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow:before { content: '\e858'; } .elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow:before, .elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow:before { content: '\e851'; } .elfinder .elfinder-cwd table thead td.ui-state-hover{ color: #000 !important; } .elfinder .elfinder-cwd table thead td.ui-state-active { background: #737f86 !important; color: #fff !important; } .elfinder .elfinder-cwd table thead td { padding: 6px 12px !important; background: #d7d7d7 !important; } .elfinder-ltr .elfinder-cwd table td { text-align: left; } .elfinder .elfinder-cwd table td { padding: 4px 12px !important; } .elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-filename { padding-left: 23px; } div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon { font-size: 8px; margin-top: 5px; margin-right: 5px; } div.elfinder-cwd-wrapper-list .ui-icon-grip-dotted-vertical { margin: 2px; } .elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon, .elfinder-navbar-root-local .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon, .elfinder-navbar-root-ftp .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon, .elfinder-navbar-root-sql .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon, .elfinder-navbar-root-dropbox .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon, .elfinder-navbar-root-googledrive .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon, .elfinder-navbar-root-onedrive .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon, .elfinder-navbar-root-box .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon, .elfinder-navbar-root-trash .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon, .elfinder-navbar-root-zip .elfinder-cwd-icon, .elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon, .elfinder-navbar-root-network .elfinder-cwd-icon { background-image: inherit; } .elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon:before, .elfinder-navbar-root-local .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon:before, .elfinder-navbar-root-ftp .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon:before, .elfinder-navbar-root-sql .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-dropbox td .elfinder-cwd-icon:before, .elfinder-navbar-root-dropbox .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-googledrive td .elfinder-cwd-icon:before, .elfinder-navbar-root-googledrive .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-onedrive td .elfinder-cwd-icon:before, .elfinder-navbar-root-onedrive .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-box td .elfinder-cwd-icon:before, .elfinder-navbar-root-box .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon:before, .elfinder-navbar-root-trash .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon:before, .elfinder-navbar-root-zip .elfinder-cwd-icon:before, .elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon:before, .elfinder-navbar-root-network .elfinder-cwd-icon:before { font-family: material; background-color: transparent; color: #525252; font-size: 55px; position: relative; top: -10px !important; padding: 0; display: contents !important; } .elfinder-cwd-view-list .elfinder-navbar-root-local td .elfinder-cwd-icon:before, .elfinder-navbar-root-local .elfinder-cwd-icon:before { content: '\e83d'; } .elfinder-cwd-view-list .elfinder-navbar-root-ftp td .elfinder-cwd-icon:before, .elfinder-navbar-root-ftp .elfinder-cwd-icon:before { content: '\e823'; } .elfinder-cwd-view-list .elfinder-navbar-root-sql td .elfinder-cwd-icon:before, .elfinder-navbar-root-sql .elfinder-cwd-icon:before { content: '\e83e'; } .elfinder-cwd-view-list .elfinder-navbar-roor-dropbox td .elfinder-cwd-icon:before, .elfinder-navbar-roor-dropbox .elfinder-cwd-icon:before { content: '\e83f'; } .elfinder-cwd-view-list .elfinder-navbar-roor-googledrive td .elfinder-cwd-icon:before, .elfinder-navbar-roor-googledrive .elfinder-cwd-icon:before { content: '\e840'; } .elfinder-cwd-view-list .elfinder-navbar-roor-onedrive td .elfinder-cwd-icon:before, .elfinder-navbar-roor-onedrive .elfinder-cwd-icon:before { content: '\e841'; } .elfinder-cwd-view-list .elfinder-navbar-roor-box td .elfinder-cwd-icon:before, .elfinder-navbar-roor-box .elfinder-cwd-icon:before { content: '\e842'; } .elfinder-cwd-view-list .elfinder-navbar-root-trash td .elfinder-cwd-icon:before, .elfinder-navbar-root-trash .elfinder-cwd-icon:before { content: '\e80b'; } .elfinder-cwd-view-list .elfinder-navbar-root-zip td .elfinder-cwd-icon:before, .elfinder-navbar-root-zip .elfinder-cwd-icon:before { content: '\e85c'; } .elfinder-cwd-view-list .elfinder-navbar-root-network td .elfinder-cwd-icon:before, .elfinder-navbar-root-network .elfinder-cwd-icon:before { content: '\e823'; } .elfinder-dialog-icon { font: normal normal normal 14px/1 material; background: inherit; color: #524949; font-size: 37px; } .elfinder-dialog-icon:before { content: '\e843'; } .elfinder-dialog-icon-mkdir:before { content: '\e808'; } .elfinder-dialog-icon-mkfile:before { content: '\e809'; } .elfinder-dialog-icon-copy:before { content: '\e80d'; } .elfinder-dialog-icon-prepare:before, .elfinder-dialog-icon-move:before { content: '\e844'; } .elfinder-dialog-icon-upload:before, .elfinder-dialog-icon-chunkmerge:before { content: '\e815'; } .elfinder-dialog-icon-rm:before { content: '\e80a'; } .elfinder-dialog-icon-open:before, .elfinder-dialog-icon-readdir:before, .elfinder-dialog-icon-file:before { content: '\e807'; } .elfinder-dialog-icon-reload:before { content: '\e806'; } .elfinder-dialog-icon-download:before { content: '\e816'; } .elfinder-dialog-icon-save:before { content: '\e845'; } .elfinder-dialog-icon-rename:before { content: '\e812'; } .elfinder-dialog-icon-zipdl:before, .elfinder-dialog-icon-archive:before { content: '\e819'; } .elfinder-dialog-icon-extract:before { content: '\e818'; } .elfinder-dialog-icon-search:before { content: '\e81f'; } .elfinder-dialog-icon-loadimg:before { content: '\e846'; } .elfinder-dialog-icon-url:before { content: '\e81e'; } .elfinder-dialog-icon-resize:before { content: '\e81d'; } .elfinder-dialog-icon-netmount:before { content: '\e823'; } .elfinder-dialog-icon-netunmount:before { content: '\e824'; } .elfinder-dialog-icon-chmod:before { content: '\e826'; } .elfinder-dialog-icon-preupload:before, .elfinder-dialog-icon-dim:before { content: '\e847'; } .elfinder-contextmenu .elfinder-contextmenu-item span.elfinder-contextmenu-icon { font-size: 16px; } .elfinder-contextmenu .elfinder-contextmenu-item .elfinder-contextsubmenu-item .ui-icon { font-size: 15px; } .elfinder-contextmenu .elfinder-contextmenu-item .elfinder-button-icon-link:before { content: '\e837'; } .elfinder .elfinder-contextmenu-extra-icon { margin-top: -6px; } .elfinder .elfinder-contextmenu-extra-icon a { padding: 5px; margin: -16px; } .elfinder-button-icon-link:before { content: '\e81e' !important; } .elfinder .elfinder-contextmenu-arrow { font: normal normal normal 14px/1 material; background-image: inherit; font-size: 10px !important; padding-top: 3px; } .elfinder .elfinder-contextmenu-arrow:before { content: '\e857'; } .elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow { background-image: inherit; } .elfinder-quicklook .ui-resizable-se { background: inherit; } .elfinder-quicklook-navbar-icon { background: transparent; font: normal normal normal 14px/1 material; font-size: 24px; width: 24px; height: 24px; color: #fff; } .elfinder-quicklook-titlebar-icon { margin-top: -8px; } .elfinder-quicklook-titlebar-icon .ui-icon { border: 0; opacity: 0.8; font-size: 15px; padding: 1px; } .elfinder-quicklook-titlebar .ui-icon-circle-close, .elfinder-quicklook .ui-icon-gripsmall-diagonal-se { color: #f1f1f1; } .elfinder-quicklook-navbar-icon-prev:before { content: '\e848'; } .elfinder-quicklook-navbar-icon-next:before { content: '\e849'; } .elfinder-quicklook-navbar-icon-fullscreen:before { content: '\e84a'; } .elfinder-quicklook-navbar-icon-fullscreen-off:before { content: '\e84b'; } .elfinder-quicklook-navbar-icon-close:before { content: '\e84c'; } .elfinder .ui-button-icon { background-image: inherit; } .elfinder .ui-icon-search:before { content: '\e81f'; } .elfinder .ui-icon-closethick:before, .elfinder .ui-icon-close:before { content: '\e839'; } .elfinder .ui-icon-circle-close:before { content: '\e84c'; } .elfinder .ui-icon-gear:before { content: '\e82f'; } .elfinder .ui-icon-gripsmall-diagonal-se:before { content: '\e838'; } .elfinder .ui-icon-locked:before { content: '\e834'; } .elfinder .ui-icon-unlocked:before { content: '\e836'; } .elfinder .ui-icon-arrowrefresh-1-n:before { content: '\e821'; } .elfinder .ui-icon-plusthick:before { content: '\e83a'; } .elfinder .ui-icon-arrowreturnthick-1-s:before { content: '\e83b'; } .elfinder .ui-icon-minusthick:before { content: '\e83c'; } .elfinder .ui-icon-pin-s:before { content: '\e84d'; } .elfinder .ui-icon-check:before { content: '\e84e'; } .elfinder .ui-icon-arrowthick-1-s:before { content: '\e84f'; } .elfinder .ui-icon-arrowthick-1-n:before { content: '\e850'; } .elfinder .ui-icon-triangle-1-s:before { content: '\e851'; } .elfinder .ui-icon-triangle-1-n:before { content: '\e852'; } .elfinder .ui-icon-grip-dotted-vertical:before { content: '\e853'; } .elfinder-lock, .elfinder-perms, .elfinder-symlink { background-image: inherit; font: normal normal normal 18px/1 material; color: #4d4d4d; } .elfinder-na .elfinder-perms:before { content: '\e824'; } .elfinder-ro .elfinder-perms:before { content: '\e835'; } .elfinder-wo .elfinder-perms:before { content: '\e854'; } .elfinder-group .elfinder-perms:before { content: '\e800'; } .elfinder-lock:before { content: '\e84d'; } .elfinder-symlink:before { content: '\e837'; } .elfinder .elfinder-toast > div { font: normal normal normal 14px/1 material; } .elfinder .elfinder-toast > div:before { font-size: 45px; position: absolute; left: 5px; top: 15px; } .elfinder .elfinder-toast > .toast-info, .elfinder .elfinder-toast > .toast-error, .elfinder .elfinder-toast > .toast-success, .elfinder .elfinder-toast > .toast-warning { background-image: inherit !important; } .elfinder .elfinder-toast > .toast-info:before { content: '\e817'; color: #3498db; } .elfinder .elfinder-toast > .toast-error:before { content: '\e855'; color: #f44336; } .elfinder .elfinder-toast > .toast-success:before { content: '\e84e'; color: #4caf50; } .elfinder .elfinder-toast > .toast-warning:before { content: '\e856'; color: #ff9800; } .elfinder-drag-helper-icon-status { font: normal normal normal 14px/1 material; background: inherit; } .elfinder-drag-helper-icon-status:before { content: '\e824'; } .elfinder-drag-helper-move .elfinder-drag-helper-icon-status { -webkit-transform: rotate(180deg); transform: rotate(180deg); } .elfinder-drag-helper-move .elfinder-drag-helper-icon-status:before { content: '\e854'; } .elfinder-drag-helper-plus .elfinder-drag-helper-icon-status { -webkit-transform: rotate(90deg); transform: rotate(90deg); } .elfinder-drag-helper-plus .elfinder-drag-helper-icon-status:before { content: '\e84c'; } /** * MIME Types */ .elfinder-cwd-view-list td .elfinder-cwd-icon { background-image: url("../../material/images/icons-small.svg"); } .elfinder-cwd-icon { background: url("../../material/images/icons-big.svg") 0 0 no-repeat; border-radius: 0; } .elfinder-cwd-icon:before { font-size: 10px; position: relative; top: 27px; left: inherit; padding: 1px; background-color: transparent; } .elfinder-cwd-icon-directory { background-position: 0 -50px; } .elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon { background-position: 0 -100px; } .elfinder-cwd-icon-group { background-position: 0 -150px; } .elfinder-cwd-icon-application { background-position: 0 -200px; } .elfinder-cwd-icon-rtf, .elfinder-cwd-icon-rtfd, .elfinder-cwd-icon-text { background-position: 0 -250px; } .elfinder-cwd-icon-image { background-position: 0 -300px; } .elfinder-cwd-icon-audio { background-position: 0 -350px; } .elfinder-cwd-icon-video, .elfinder-cwd-icon-flash-video, .elfinder-cwd-icon-dash-xml, .elfinder-cwd-icon-vnd-apple-mpegurl, .elfinder-cwd-icon-x-mpegurl { background-position: 0 -400px; } .elfinder-cwd-icon-plain, .elfinder-cwd-icon-x-empty { background-position: 0 -450px; } .elfinder-cwd-icon-pdf { background-position: 0 -500px; } .elfinder-cwd-icon-vnd-ms-office { background-position: 0 -550px; } .elfinder-cwd-icon-x-msaccess { background-position: 0 -600px; } .elfinder-cwd-icon-x-msaccess:before { content: none !important; } .elfinder-cwd-icon-ms-excel, .elfinder-cwd-icon-vnd-ms-excel, .elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12 { background-position: 0 -650px; } .elfinder-cwd-icon-ms-excel:before, .elfinder-cwd-icon-vnd-ms-excel:before, .elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12:before { content: none !important; } .elfinder-cwd-icon-vnd-ms-powerpoint, .elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12 { background-position: 0 -700px; } .elfinder-cwd-icon-vnd-ms-powerpoint:before, .elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12:before { content: none !important; } .elfinder-cwd-icon-msword, .elfinder-cwd-icon-vnd-ms-word, .elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12, .elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12 { background-position: 0 -750px; } .elfinder-cwd-icon-msword:before, .elfinder-cwd-icon-vnd-ms-word:before, .elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12:before, .elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12:before { content: none !important; } .elfinder-cwd-icon-vnd-oasis-opendocument-base, .elfinder-cwd-icon-vnd-oasis-opendocument-chart, .elfinder-cwd-icon-vnd-oasis-opendocument-database, .elfinder-cwd-icon-vnd-oasis-opendocument-formula, .elfinder-cwd-icon-vnd-oasis-opendocument-graphics, .elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template, .elfinder-cwd-icon-vnd-oasis-opendocument-image, .elfinder-cwd-icon-vnd-openofficeorg-extension { background-position: 0 -800px; } .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet, .elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template { background-position: 0 -850px; } .elfinder-cwd-icon-vnd-oasis-opendocument-presentation, .elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template { background-position: 0 -900px; } .elfinder-cwd-icon-vnd-oasis-opendocument-text, .elfinder-cwd-icon-vnd-oasis-opendocument-text-master, .elfinder-cwd-icon-vnd-oasis-opendocument-text-template, .elfinder-cwd-icon-vnd-oasis-opendocument-text-web, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document, .elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template { background-position: 0 -950px; } .elfinder-cwd-icon-zip, .elfinder-cwd-icon-x-zip, .elfinder-cwd-icon-x-xz, .elfinder-cwd-icon-x-7z-compressed, .elfinder-cwd-icon-x-gzip, .elfinder-cwd-icon-x-tar, .elfinder-cwd-icon-x-bzip, .elfinder-cwd-icon-x-bzip2, .elfinder-cwd-icon-x-rar, .elfinder-cwd-icon-x-rar-compressed { background-position: 0 -1000px; } .elfinder-cwd-icon-postscript { background-position: 0 -1050px; } .elfinder-cwd-icon-vnd-adobe-photoshop { background-position: 0 -1100px; } .elfinder-cwd-icon-vnd-adobe-photoshop:before { content: none !important; } .elfinder-cwd-icon-x-shockwave-flash { background-position: 0 -1150px; } .elfinder-cwd-icon-vnd-android-package-archive { background-position: 0 -1200px; } .elfinder-cwd-icon-vnd-android-package-archive:before { content: none !important; } .elfinder-cwd-icon-x-c, .elfinder-cwd-icon-x-csrc, .elfinder-cwd-icon-x-chdr, .elfinder-cwd-icon-x-c--, .elfinder-cwd-icon-x-c--src, .elfinder-cwd-icon-x-c--hdr { background-position: 0 -1250px; } .elfinder-cwd-icon-css { background-position: 0 -1300px; } .elfinder-cwd-icon-html { background-position: 0 -1350px; } .elfinder-cwd-icon-x-jar, .elfinder-cwd-icon-x-java, .elfinder-cwd-icon-x-java-source { background-position: 0 -1400px; } .elfinder-cwd-icon-x-jar:before, .elfinder-cwd-icon-x-java:before, .elfinder-cwd-icon-x-java-source:before { content: none !important; } .elfinder-cwd-icon-javascript, .elfinder-cwd-icon-x-javascript { background-position: 0 -1450px; } .elfinder-cwd-icon-json { background-position: 0 -1500px; } .elfinder-cwd-icon-json:before { content: none !important; } .elfinder-cwd-icon-markdown, .elfinder-cwd-icon-x-markdown { background-position: 0 -1550px; } .elfinder-cwd-icon-markdown:before, .elfinder-cwd-icon-x-markdown:before { content: none !important; } .elfinder-cwd-icon-x-perl { background-position: 0 -1600px; } .elfinder-cwd-icon-x-php { background-position: 0 -1650px; } .elfinder-cwd-icon-x-python:after, .elfinder-cwd-icon-x-python { background-position: 0 -1700px; } .elfinder-cwd-icon-x-ruby { background-position: 0 -1750px; } .elfinder-cwd-icon-x-sh, .elfinder-cwd-icon-x-shellscript { background-position: 0 -1800px; } .elfinder-cwd-icon-sql, .elfinder-cwd-icon-x-sql, .elfinder-cwd-icon-x-sqlite3 { background-position: 0 -1850px; } .elfinder-cwd-icon-x-eps, .elfinder-cwd-icon-svg, .elfinder-cwd-icon-svg-xml { background-position: 0 -1900px; } .elfinder-cwd-icon-xml:after, .elfinder-cwd-icon-xml { background-position: 0 -1950px; } .elfinder-cwd-icon-zip:before, .elfinder-cwd-icon-x-zip:before { content: 'zip' !important; } .elfinder-cwd-icon-x-xz:before { content: 'xz' !important; } .elfinder-cwd-icon-x-7z-compressed:before { content: '7z' !important; } .elfinder-cwd-icon-x-gzip:before { content: 'gzip' !important; } .elfinder-cwd-icon-x-tar:before { content: 'tar' !important; } .elfinder-cwd-icon-x-bzip:before, .elfinder-cwd-icon-x-bzip2:before { content: 'bzip' !important; } .elfinder-cwd-icon-x-rar:before, .elfinder-cwd-icon-x-rar-compressed:before { content: 'rar' !important; } /** * Toolbar */ .elfinder-toolbar { background: #3b4047; border-radius: 0; border: 0; padding: 5px 0; } .elfinder-toolbar .elfinder-button-icon { font-size: 20px; color: #ddd; margin-top: -2px; } .elfinder-buttonset { border-radius: 0; border: 0; margin: 0 5px; height: 24px; } .elfinder .elfinder-button { background: transparent; border-radius: 0; cursor: pointer; color: #efefef; } .elfinder .elfinder-button-text { top: -3px; margin-left: 6px; } .elfinder-toolbar-button-separator { border: 0; } .elfinder-button-menu { border-radius: 2px; box-shadow: 0 1px 6px rgba(0, 0, 0, 0.3); border: none; margin-top: 5px; } .elfinder-button-menu-item { color: #666; padding: 6px 19px; } .elfinder-button-menu-item.ui-state-hover { color: #141414; background-color: #f5f4f4; } .elfinder-button-menu-item-separated { border-top: 1px solid #e5e5e5; } .elfinder-button-menu-item-separated.ui-state-hover { border-top: 1px solid #e5e5e5; } .elfinder .elfinder-button-search { margin: 0 10px; min-height: inherit; overflow: hidden; } .elfinder .elfinder-button-search .ui-icon { color: #fff !important; } .elfinder .elfinder-button-search input { background: rgba(40, 42, 45, 0.79); border-radius: 2px; box-sizing: content-box; border: 0; margin: 0; padding: 0 23px; height: 24px !important; color: #fff; } .elfinder .elfinder-button-search .elfinder-button-menu { margin-top: 4px; border: none; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); } .elfinder .elfinder-button-search-menu { border-radius: 0; top: 30px !important; } .elfinder .elfinder-button-search-menu .ui-button { padding: 0.4em 1em !important; } /** * Navbar */ .elfinder .elfinder-navbar { background: #535e64; box-shadow: 0 1px 8px rgba(0, 0, 0, 0.6); border: none; } .elfinder .elfinder-navbar .elfinder-lock, .elfinder .elfinder-navbar .elfinder-perms, .elfinder .elfinder-navbar .elfinder-symlink { color: #1d1d1d; opacity: 0.8; } .elfinder-navbar-dir { color: #e6e6e6; cursor: pointer; border-radius: 2px; padding: 5px; border: none; } .elfinder-navbar-dir .elfinder-navbar-icon { color: #fff; } .elfinder-navbar-dir.ui-state-hover, .elfinder-navbar-dir.ui-state-active.ui-state-hover { background: #3c4448; color: #e6e6e6; border: none; } .elfinder-navbar-dir.ui-state-hover .elfinder-navbar-icon, .elfinder-navbar-dir.ui-state-active.ui-state-hover .elfinder-navbar-icon { color: #fff; } .elfinder-navbar .ui-state-active, .elfinder-disabled .elfinder-navbar .ui-state-active { background: #41494e; color: #e8e8e8 !important; border: none; } .elfinder-navbar .ui-state-active.elfinder-navbar-dir .elfinder-navbar-icon, .elfinder-disabled .elfinder-navbar .ui-state-active.elfinder-navbar-dir .elfinder-navbar-icon { color: #e8e8e8 !important; } /** * Workzone */ .elfinder-workzone { background: #cdcfd4; } .elfinder-cwd-file { color: #555; } .elfinder-cwd-file.ui-state-hover, .elfinder-cwd-file.ui-selected.ui-state-hover { background: #4c5961; color: #ddd; } .elfinder-cwd-file.ui-selected { background: #455158; color: #555; } .elfinder-cwd-filename input, .elfinder-cwd-filename textarea { padding: 2px; border-radius: 2px !important; background: #fff; color: #222; } .elfinder-cwd-filename input:focus, .elfinder-cwd-filename textarea:focus { outline: none; border: 1px solid #555; } .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover, .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, .elfinder-disabled .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, .elfinder-disabled .elfinder-cwd table td.ui-state-hover, .elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-active { background: transparent; color: #ddd; } .elfinder-cwd table { padding: 0; } .elfinder-cwd table thead td { padding: 5px 14px !important; } .elfinder-cwd table tr { border: 0 !important; } .elfinder-cwd table tr.ui-state-default, .elfinder-cwd table tr.ui-widget-content .ui-state-default { background: none; } .elfinder-cwd table tr .ui-state-hover { background: #4c5961; color: #ddd; } .elfinder-cwd.elfinder-table-header-sticky table { border: 0; } .elfinder-cwd .elfinder-lock, .elfinder-cwd .elfinder-perms, .elfinder-cwd .elfinder-symlink { color: #4d4d4d; } .elfinder-cwd-view-icons .elfinder-lock { top: 0; } .elfinder-cwd-view-list thead td .ui-resizable-handle { top: 3px; } .elfinder-cwd-view-list .elfinder-lock, .elfinder-cwd-view-list .elfinder-perms, .elfinder-cwd-view-list .elfinder-symlink { font-size: 14px; opacity: 0.7; } .elfinder-cwd-view-list .elfinder-perms { left: inherit; } #elfinder-elfinder-cwd-thead td, .elfinder-cwd-wrapper-empty .elfinder-cwd-view-list td { background: #353b42; color: #ddd !important; height: 18px; } #elfinder-elfinder-cwd-thead td.ui-state-hover, .elfinder-cwd-wrapper-empty .elfinder-cwd-view-list td.ui-state-hover, #elfinder-elfinder-cwd-thead td.ui-state-active, .elfinder-cwd-wrapper-empty .elfinder-cwd-view-list td.ui-state-active { background: #2a2e34 !important; } #elfinder-elfinder-cwd-thead td.ui-state-active.ui-state-hover, .elfinder-cwd-wrapper-empty .elfinder-cwd-view-list td.ui-state-active.ui-state-hover { background: #2e333a !important; } .elfinder .ui-selectable-helper { border: 1px solid #3b4047; background-color: rgba(104, 111, 121, 0.5); } .elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash { background-color: #e4e4e4; } .elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash .elfinder-cwd-file { color: #333; } .elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash .elfinder-cwd-file.ui-state-hover, .elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash .elfinder-cwd-file.ui-selected.ui-state-hover { background: #4c5961; color: #ddd; } .elfinder-cwd-wrapper.elfinder-cwd-wrapper-trash .elfinder-cwd-file.ui-selected { background: #455158; color: #555; } .elfinder-info-title .elfinder-cwd-icon:before { top: 32px; display: block; margin: 0 auto; } .elfinder-info-title .elfinder-cwd-icon.elfinder-cwd-bgurl:before { background-color: #313131 !important; } .elfinder-cwd-view-icons .elfinder-cwd-icon.elfinder-cwd-bgurl:before { left: inherit; background-color: #313131; } .elfinder-cwd-icon:before, .elfinder-quicklook .elfinder-cwd-icon:before, .elfinder-cwd-size1 .elfinder-cwd-icon:before, .elfinder-cwd-size2 .elfinder-cwd-icon:before, .elfinder-cwd-size3 .elfinder-cwd-icon:before, .elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before, .elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before, .elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before { top: 35px; left: 50% !important; position: relative !important; display: block !important; -webkit-transform: translateX(-50%); transform: translateX(-50%); max-width: 52px; color: #fff; } .elfinder .elfinder-cwd-view-icons .elfinder-cwd-bgurl:after, .elfinder .elfinder-quicklook-info-wrapper .elfinder-cwd-bgurl:after { display: none; } .elfinder-cwd-size1 .elfinder-cwd-icon.elfinder-cwd-bgurl:before { top: 53px; -webkit-transform: scale(1.32) translateX(-50%); transform: scale(1.32) translateX(-50%); } .elfinder-cwd-size2 .elfinder-cwd-icon.elfinder-cwd-bgurl:before { top: 74px; -webkit-transform: scale(1.53) translateX(-50%); transform: scale(1.53) translateX(-50%); } .elfinder-cwd-size3 .elfinder-cwd-icon.elfinder-cwd-bgurl:before { top: 87px; -webkit-transform: scale(2.22) translateX(-50%); transform: scale(2.22) translateX(-50%); } /** * Status Bar */ .elfinder .elfinder-statusbar { background: #3b4047; border-radius: 0; border: 0; color: #cfd2d4; padding-top: 5px; } .elfinder-path, .elfinder-stat-size { margin: 0 15px; } /** * Input & Select */ .elfinder input, .elfinder select { padding: 4px; color: #666; background: #fff; border-radius: 3px; font-weight: normal; border-color: #888; box-shadow: none !important; } .elfinder input.ui-state-hover, .elfinder select.ui-state-hover { background: #fff !important; color: #666 !important; } .elfinder input[type="checkbox"] { position: relative; height: initial; } .elfinder input[type="checkbox"]:after, .elfinder input[type="checkbox"]:focus:after { content: ""; display: block; width: 12px; height: 12px; border: 1px solid #707070; background-color: #fff; border-radius: 2px; } .elfinder input[type="checkbox"]:checked:before { content: ""; position: absolute; top: -3px; left: 6px; display: table; width: 4px; height: 12px; border: 2px solid #707070; border-top-width: 0; border-left-width: 0; -webkit-transform: rotate(45deg); transform: rotate(45deg); } /** * Buttons */ .elfinder .ui-button, .elfinder .ui-button:active, .elfinder .ui-button.ui-state-default { display: inline-block; font-weight: normal; text-align: center; vertical-align: middle; cursor: pointer; white-space: nowrap; border-radius: 3px; text-transform: uppercase; box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.4) !important; transition: all 0.4s; background: #fff; color: #222; border: none; padding: 7px 6px; } .elfinder .ui-button .ui-icon, .elfinder .ui-button:active .ui-icon, .elfinder .ui-button.ui-state-default .ui-icon { color: #222; } .elfinder .ui-button:hover, .elfinder a.ui-button:active, .elfinder .ui-button:active, .elfinder .ui-button:focus, .elfinder .ui-button.ui-state-hover, .elfinder .ui-button.ui-state-active { background: #3498db !important; color: #fff !important; border: none; } .elfinder .ui-button:hover .ui-icon, .elfinder a.ui-button:active .ui-icon, .elfinder .ui-button:active .ui-icon, .elfinder .ui-button:focus .ui-icon, .elfinder .ui-button.ui-state-hover .ui-icon, .elfinder .ui-button.ui-state-active .ui-icon { color: #fff; } .elfinder .ui-button.ui-state-active:hover { background: #217dbb; color: #fff; border: none; } .elfinder .ui-button:focus { outline: none !important; } .elfinder .ui-controlgroup-horizontal .ui-button { border-radius: 0; border: 0; } .elfinder input:not([type="checkbox"]), .elfinder .elfinder-resize-preset-container .ui-button { height: 21px; } /** * Context Menu */ .elfinder .elfinder-contextmenu, .elfinder .elfinder-contextmenu-sub { border-radius: 2px; box-shadow: 0 1px 6px rgba(0, 0, 0, 0.3); border: none; } .elfinder .elfinder-contextmenu-separator, .elfinder .elfinder-contextmenu-sub-separator { border-top: 1px solid #e5e5e5; } .elfinder .elfinder-contextmenu-item { color: #666; padding: 5px 30px; } .elfinder .elfinder-contextmenu-item.ui-state-hover { background-color: #f5f4f4; color: #141414; } .elfinder .elfinder-contextmenu-item.ui-state-active { background-color: #2196f3; color: #fff; } /** * Dialogs */ .elfinder .elfinder-dialog { border-radius: 0; border: 0; box-shadow: 0 1px 30px rgba(0, 0, 0, 0.6); } .elfinder .elfinder-dialog .ui-dialog-content[id*="edit-elfinder-elfinder-"] { padding: 0; } .elfinder .elfinder-dialog .ui-tabs { border-radius: 0; border: 0; padding: 0; } .elfinder .elfinder-dialog .ui-tabs-nav { border-radius: 0; border: 0; background: transparent; border-bottom: 1px solid #ddd; } .elfinder .elfinder-dialog .ui-tabs-nav li { border: 0; font-weight: normal; background: transparent; margin: 0; padding: 0; } .elfinder .elfinder-dialog .ui-tabs-nav li a { padding: 7px 9px; } .elfinder .elfinder-dialog .ui-tabs-nav .ui-tabs-selected a, .elfinder .elfinder-dialog .ui-tabs-nav .ui-state-active a, .elfinder .elfinder-dialog .ui-tabs-nav li:hover a { box-shadow: inset 0 -2px 0 #3498db; color: #3498db; } .elfinder .elfinder-dialog .ui-tabs .elfinder-tabstop.ui-state-hover { background: transparent; box-shadow: inset 0 -2px 0 #3498db; color: #3498db; } .elfinder .elfinder-dialog label.ui-state-hover { background: transparent; } .elfinder .elfinder-dialog .ui-resizable-se { display: none; } .std42-dialog .ui-dialog-titlebar { background: #353b44; border-radius: 0; border: 0; } .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-button .ui-icon { border-color: inherit; transition: 0.2s ease-out; opacity: 0.8; color: #fff; width: auto; height: auto; font-size: 12px; padding: 3px; } .std42-dialog, .std42-dialog .ui-dialog-content, .std42-dialog.elfinder-bg-translucent, .std42-dialog.elfinder-bg-translucent .ui-widget-content { background-color: #fff; } .std42-dialog .ui-dialog-buttonpane button { margin: -1px 2px 2px; padding: 7px 6px; } .std42-dialog .ui-dialog-buttonpane button span.ui-icon { padding: 0; } .std42-dialog .ui-dialog-buttonpane .ui-dialog-buttonset.elfinder-edit-extras select { margin-top: 0; } .std42-dialog, .std42-dialog .ui-widget-content { background-color: #fff; } .elfinder-mobile .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-icon, .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover .ui-icon { background-color: #f44336; } .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full .ui-icon, .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full:hover .ui-icon { background-color: #4caf50; } .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize .ui-icon, .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize:hover .ui-icon { background-color: #ff9800; } .elfinder-dialog-title { color: #f1f1f1; } .elfinder .ui-widget-content { font-family: -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif; color: #546e7a; } .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect { width: inherit; height: inherit; padding: 7px; margin-left: 5px; color: #222; box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.4); background: #fff; bottom: 4px; border-radius: 2px; } .elfinder-upload-dialog-wrapper .elfinder-upload-dirselect.ui-state-hover { background: #3498db !important; color: #fff !important; outline: none; } .elfinder-upload-dialog-wrapper .ui-button { padding: 0.4em 3px; margin: 0 -15px 0 19px; } .elfinder-upload-dropbox { border: 2px dashed #bbb; } .elfinder-upload-dropbox:focus { outline: none; } .elfinder-upload-dropbox.ui-state-hover { background: #f1f1f1; border: 2px dashed #bbb; } .elfinder-dialog-resize .elfinder-resize-control-panel { margin-left: -5px; } .elfinder-dialog-resize .elfinder-resize-control-panel .ui-button { height: inherit; margin-bottom: 5px; } .elfinder-help * { color: #546e7a; } .elfinder-help a { color: #3498db; } .elfinder-help a:hover { color: #217dbb; } .elfinder .ui-slider.ui-slider-horizontal { height: 2px; border: 0; background-color: #bababa !important; } .elfinder .ui-slider .ui-slider-handle { background-image: none; background-color: #5d5858; border-radius: 50%; border: 0; margin-top: -3px; } .elfinder .ui-slider .ui-slider-handle.ui-state-hover { background: #5d5858 !important; box-shadow: none !important; border-radius: 50%; cursor: pointer; } /** * Quick Look */ .elfinder-quicklook { background: #232323; border-radius: 2px; } .elfinder-quicklook-navbar { height: 27px; } .elfinder-quicklook-titlebar { background: inherit; } .elfinder-quicklook-titlebar-icon, .elfinder-quicklook-titlebar-icon .ui-icon { background: transparent; color: #fff; } .elfinder-quicklook-fullscreen .elfinder-quicklook-navbar { border: inherit; opacity: inherit; border-radius: 4px; background: rgba(66, 66, 66, 0.73); } .elfinder .elfinder-navdock { border: 0; } .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close:hover .ui-icon, .elfinder-mobile .std42-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-icon, .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close:hover, .elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-close, .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize:hover .ui-icon, .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-minimize .ui-icon, .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize:hover, .elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-minimize, .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full:hover .ui-icon, .elfinder-mobile .std42-dialog .ui-dialog-titlebar .elfinder-titlebar-full .ui-icon, .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full:hover, .elfinder-mobile .elfinder-quicklook-titlebar-icon .ui-icon.elfinder-icon-full { background-image: none; } Gestion de multiples portefeuilles professionnels dans Trezor Suite : séparation des actifs, audit trail et conformité – Crafted Web Campus

Un gestionnaire de fonds ou un trader institutionnel doit justifier chaque mouvement de capital, documenter les autorisations et démontrer que les actifs restent isolés selon leurs bénéficiaires ou leurs destinations stratégiques. Utiliser un seul portefeuille logiciel partagé crée rapidement des risques : confusion des enregistrements, impossibilité de retracer qui a signé quelle transaction, absence de preuve cryptographique du contrôle à un moment précis. Trezor Suite offre une approche fondamentalement différente : chaque dispositif hardware wallet peut générer plusieurs portefeuilles dérivés, chacun auditable, chacun avec son propre ledger d’opérations.

La question concrète devient alors : comment structurer plusieurs identités Trezor Suite sur des appareils distincts de manière à ce que l’audit trail soit complet, que les actifs restent effectivement séparés, et que le contrôle des clés privées reste vérifiable en permanence sans dépendre d’une autorité centrale ? Cette architecture ne se construit pas par accident. Elle exige une compréhension précise de ce que Trezor Suite protège, où la responsabilité commence et où elle s’arrête, et comment les phénomènes de dérive de configuration peuvent progressivement affaiblir l’intégrité du système.

Trezor Suite interface montrant la gestion de plusieurs portefeuilles avec historique de transactions et séparation des identités

Architecture multi-dispositifs et isolation physique des clés privées

Trezor Suite fonctionne en tant qu’application de gestion : elle affiche les soldes, construit les transactions, mais ne détient jamais les clés privées. Chaque hardware wallet Trezor (Model One, Model T, Safe 3, Safe 5) génère et conserve les clés de signature dans son propre circuit fermé. Lorsqu’une transaction doit être signée, la demande quitte le navigateur ou l’application desktop, le dispositif affiche les détails sur son écran de confirmation, l’utilisateur approuve physiquement, et seule la signature retourne à l’application. Les clés ne franchissent jamais la barrière du dispositif.

Pour une organisation professionnelle, cette séparation physique signifie qu’on peut confier à différents membres l’accès à différents Trezor. Un trader senior peut avoir un device pour les mouvements de liquidité rapides. Un compliance officer peut tenir un second device réservé aux transferts de retraite ou aux opérations soumises à des délais de révision. Une cellule de trésorerie peut gérer un troisième Trezor pour les positions de couverture long terme. Tant que chaque device reste dans une enveloppe de sécurité physique appropriée, aucun logiciel malveillant ne peut accéder au portefeuille du trader sans accès physique au button de confirmation du device.

La clé de cette approche est que Trezor Suite n’a pas besoin de savoir que les trois devices contiennent des clés distinctes. L’application desktop fonctionne de la même manière qu’on branchez un Trezor ou dix. Elle affiche la liste des portefeuilles disponibles, mémorise les adresses publiques (qui peuvent être stockées sans risque puisqu’elles ne révèlent que les destinations publiques), et demande au device approprié de signer quand une instruction arrive. Chaque device gère sa propre graine de récupération (recovery seed), que l’administrateur doit stocker selon ses propres normes.

La conformité commence ici : chaque device devient un point de contrôle physique, et chaque signature demeure une décision humaine explicite, enregistrée dans Trezor Suite avec un horodatage de la machine et une adresse de destination.

Gestion des identités dérivées et des structures de portefeuille

Au sein d’un seul device Trezor, le protocole HD (Hierarchical Deterministic) permet de générer des milliers d’adresses dérivées à partir d’une seule graine. Trezor Suite expose cette capacité par des chemins de dérivation standard (BIP-44, BIP-49, BIP-84 pour Bitcoin, par exemple). En pratique, cela signifie qu’un gestionnaire de fonds peut ouvrir plusieurs portefeuilles logiques à partir d’un seul Trezor physique. Le premier portefeuille peut accumuler des Bitcoin long-terme. Le second portefeuille, utilisant un chemin différent ou un compte numéroté distinct, peut gérer les liquidités Ethereum courtes et moyennes. Un troisième peut être réservé à des stablecoin pour les opérations de la trésorerie.

Du point de vue de l’audit trail, cet arrangement crée un problème et une opportunité. Le problème : si tous les portefeuilles dérivés du même device sont contrôlés par la même personne, ils ne sont pas vraiment isolés du risque de contrôle. Si un attaquant obtient la recovery seed du device, il peut restaurer tous les portefeuilles sur sa propre machine. L’opportunité : si l’organisation utilise une phrase de secours à plusieurs signatures (multisig), ou si elle partage des portefeuilles dérivés entre plusieurs responsables sous un schéma de validation partagée, elle peut mettre en place des vérifications de consensus avant qu’une transaction ne soit signée.

Trezor Suite supporte directement les configurations multisig : un Bitcoin addressable peut exiger 2-of-3 signatures, par exemple, avec une clé signée par Trezor A, une par Trezor B, et une par une solution tierce. Lors d’une transaction multisig, Trezor Suite construit la transaction et demande à chaque device impliqué de signer. Cela crée une traçabilité naturelle : le journal des transactions enregistre non seulement le résultat final, mais aussi quels dispositifs ont participé, dans quel ordre, et à quel moment. Les délais entre demandes et approbations deviennent des preuves d’intention distribuée.

Audit trail et conformité réglementaire : de la signature à la documentation

Une question critique pour les professionnels est : que reste-t-il quand un auditeur pose la question « prouvez-moi que cette transaction a été approuvée par la personne autorisée » ? Avec Trezor Suite, la chaîne de preuves s’étend du crypto jusqu’à la friction physique. Chaque transaction dans Trezor Suite enregistre : le timestamp de la machine, l’adresse de destination, le montant exact, les frais, le device utilisé, et le hash de la transaction finale signée. Cette information peut être exportée sous forme de rapport CSV ou extraite directement de la blockchain.

Cependant, un audit complet ne se termine pas à la blockchain. Un régulateur ou un commissaire aux comptes demandera également : qui pouvait accéder au device ? Quels logs d’accès physique existent ? L’utilisateur pourrait-il avoir été contraint ? Pour les opérations de haut montant, une organisation devrait documenter : la date de réception du device, les procédures de vérification de l’intégrité du firmware Trezor à la connexion (vérification cryptographique automatique que Trezor Suite effectue), les personnes ayant accès physique, les procédures de transport et de stockage de la seed recovery, et les résultats des tests de récupération périodiques.

L’accès au site officiel devient un point de décision documenté : chaque téléchargement de Trezor Suite doit provenir de sources authentifiées et vérifiées pour que le rapport de conformité reste défendable. Si Trezor Suite n’est jamais téléchargé sur une machine compromise, aucun malware n’aura la possibilité d’enregistrer une phrase de récupération au moment du setup. Si chaque firmware Trezor est mis à jour via les canaux officiels, les vulnérabilités corrigées par SatoshiLabs sont appliquées rapidement. Ces décisions documentées deviennent l’épine dorsale d’une piste d’audit conformité.

Séparation des actifs : cloisonnement logique vs. ségrégation réglementaire

Une institution de gestion de patrimoine doit parfois séparer les actifs des clients de manière légalement défendable. Si un client A confie 10 Bitcoin à la gestion et un client B 5 Bitcoin, ces deux ensembles ne doivent jamais être mélangés de manière à créer une ambiguïté de propriété. Trezor Suite permet cette séparation via deux approches : soit deux devices physiques distincts (un pour chaque client), soit deux portefeuilles dérivés du même device assignés à des identificateurs réglementaires différents.

La première approche est plus conservatrice. Un device Trezor Safe 5 pour le client A, un second pour le client B. Chaque device a sa propre seed recovery, stockée selon les exigences du client. Chaque portefeuille a ses propres adresses publiques, totalement indépendantes. Aucun service cloud ou système de synchronisation ne lie les deux portefeuilles. Du point de vue réglementaire, c’est la plus claire : deux clients, deux dispositifs, deux histoires de transactions, zéro risque de confusion.

La deuxième approche, moins complexe à gérer en matériel mais plus exigeante en documentation, repose sur des portefeuilles dérivés avec des comptes numérotés distincts ou des chemins BIP-44 différents au sein d’un même device. Cela fonctionne techniquement, mais un auditeur devra alors vérifier que le système de gestion inclut des contrôles logiciels, des alertes et des blocages configurés dans Trezor Suite (si disponibles) ou dans une couche de système d’information supérieure, pour s’assurer qu’un opérateur ne peut pas transférer un Bitcoin du compte du client A vers le compte du client B par inadvertance. La séparation techniquement possible devient conformément défendable seulement avec des contrôles supplémentaires documentés.

Vérification d’intégrité du firmware et mitigation des risques de malveillance

Trezor Suite applique automatiquement une vérification cryptographique de l’intégrité du firmware Trezor à chaque connexion. Quand un device Trezor se connecte à l’application desktop, la première interaction entraîne une demande d’information device, incluant la version du firmware. Trezor Suite télécharge alors la signature attendue pour cette version depuis les serveurs de SatoshiLabs, la compare avec la signature du device, et alerte l’utilisateur si une divergence est détectée. Ce mécanisme empêche un malware ou un dispositif physiquement altéré de passer inaperçu.

Pour les opérations professionnelles, cette vérification ne doit pas être un détail technique ignoré. Elle doit faire partie d’une liste de contrôle d’initialisation : avant de signer la première transaction d’importance, un trader ou un auditeur interne doit vérifier que Trezor Suite a confirmé l’intégrité du firmware. Aucun message d’avertissement ne doit être ignoré. Si un device affiche une divergence de firmware, c’est un signal d’arrêt : il ne doit pas être utilisé pour les portefeuilles critiques jusqu’à ce qu’une enquête soit conclue et que le firmware soit restauré depuis des sources sûres.

Le firmware Trezor lui-même est ouvert. SatoshiLabs publie le code source sur GitHub, ce qui signifie qu’un auditeur déterminé peut compiler lui-même le firmware, vérifier qu’il n’y a pas de backdoor injecté, et installer la version vérifiée sur le device. Pour les institutions très sensibles au risque de supply chain compromise, cette possibilité d’audit des sources est un attrait fondamental. Trezor Suite simplifie la gestion en automatisant les vérifications, mais elle ne le rend pas optionnel pour le personnel réduisant les risques.

Protection contre le phishing et les attaques par malware côté application

Un trader peut vérifier correctement l’intégrité du hardware wallet, puis faire une erreur simple : copier une adresse de destination à partir d’un email phishing, la coller dans Trezor Suite, et approuver une transaction vers une adresse appartenant à un attaquant. Trezor Suite offre plusieurs mitigation : affichage de l’adresse de destination sur l’écran du device lui-même (écran non-compromissible du device, pas de l’ordinateur), demande explicite d’approbation avant la signature, et un délai pendant lequel l’utilisateur peut examiner les détails. Aucun de ces mécanismes n’est infaillible, mais ensemble ils élèvent le coût d’une attaque par phishing : l’attaquant devrait non seulement falsifier l’email, mais aussi comprendre que l’adresse affichée sur le device du trader diffère de celle fournie dans le phishing.

Un malware exécuté sur la machine desktop exécutant Trezor Suite peut afficher des fausses fenêtres de confirmation, intercepter des clics, ou surveiller les déplacements de souris. Cependant, il ne peut pas modifier la transaction que le device a reçue et affiche sur son écran interne. C’est précisément pourquoi l’écran du device est critique : il crée une rupture de contrôle entre le logiciel compromis et le flux de signature. Une organisation professionnelle devrait donc appliquer une procédure simple : jamais approuver une transaction Trezor sans d’abord vérifier que les détails sur l’écran du device correspondent exactement à ce qui a été demandé dans Trezor Suite.

Intégration avec les systèmes de gestion d’accès et les contrôles organisationnels

Trezor Suite est une application, pas un système d’identité ou de gestion des accès (IAM). Elle ne contrôle pas qui peut utiliser un device. Cette responsabilité revient entièrement à l’organisation. Une banque ou un gestionnaire de fonds doit entourer les Trezor de contrôles non-technique : accès physique limité à des personnes autorisées, procédures d’approbation des transactions, trails d’audit du transport de device, logs des tentatives d’utilisation, testing périodique de l’accès aux seed recovery.

Une architecture recommandée pour une opération multi-desk combine Trezor Suite avec des procédures de workflow : un requérant prépare une transaction dans Trezor Suite, la soumet pour révision. Un approuveur vérifie les détails, puis se rend physiquement à l’endroit où le device approprié est stocké, branche le device, se reconnecte à Trezor Suite (qui affichera le portefeuille attendu, avec le solde attendu), et signe la transaction après une vérification finale sur l’écran du device. Cette friction n’est pas une inefficacité à éliminer : c’est un contrôle de compensation qui rend une mauvaise transaction ou une compromission moins probable.

Les versions disponibles de Trezor Suite—desktop pour Windows 10+, macOS Monterey+, et Linux, plus web et mobile—signifient qu’une organisation doit documenter laquelle elle utilise et pourquoi. Une machine Linux dédiée et air-gappée pour la signature de transactions critiques offre une assurance plus forte qu’une version web. Une application mobile Trezor Suite peut être pratique pour superviser les soldes et préparer les transactions en déplacement, mais elle ne doit jamais devenir la source de vérité pour l’approbation finale : le dispositif hardware wallet reste l’autorité.

Tests périodiques et procédures d’incident

Une organisation responsable ne doit pas découvrir son processus de récupération uniquement quand elle en a besoin. Elle doit le tester régulièrement, documenter les résultats, et s’assurer que les détenteurs de seed recovery savent comment activer une restauration d’urgence. Trezor Suite simplifie cela : créez un Trezor supplémentaire, importez la seed recovery du Trezor opérationnel, vérifiez que Trezor Suite affiche les mêmes portefeuilles et les mêmes adresses dérivées, puis détruisez ce Trezor de test (ou stockez-le comme backup). Si ce processus n’a jamais été exécuté avant une crise réelle, c’est un point de vulnérabilité.

Les procédures d’incident devraient couvrir : la perte physique d’un device (plan d’activation du backup), la détection d’une transaction non autorisée (processus de révision, escalade, possible restauration depuis une sauvegarde antérieure de l’état du portefeuille), et la suspect d’une compromission du firmware Trezor (procédure de test, possible de réinitialisation du device sur des sources vérifiées).

Pour un trader ou une cellule de trésorerie, le déploiement de Trezor Suite n’est que le début. La véritable valeur arrive lorsque la technologie hardware wallet devient un élément de routine dans une procédure professionnelle, auditée régulièrement et mise à jour quand les meilleures pratiques évoluent. L’isolement physique des clés privées, la verification d’intégrité du firmware, et l’enregistrement minutieux des transactions forment une fondation, mais c’est la discipline organisationnelle qui transforme cette fondation en un système d’audit trail durable et défendable.

Foire aux questions

Puis-je gérer plusieurs clients ou portefeuilles complètement séparés avec un seul Trezor ?

Oui, via des portefeuilles dérivés avec des comptes numérotés distincts ou des chemins BIP-44 différents. Cependant, pour une séparation réglementairement plus défendable, deux clients nécessitent deux devices physiques distincts, chacun avec sa propre seed recovery. La première approche fonctionne techniquement ; la seconde offre plus de clarté auditeur et moins de risque de confusion accidentelle.

Trezor Suite offre-t-il un contrôle d’accès ou des rôles d’utilisateur intégrés ?

Non. Trezor Suite affiche et signe les transactions, mais ne gère pas les permissions ou l’authentification des utilisateurs. L’organisation doit implémenter ces contrôles elle-même : accès physique au device, procédures d’approbation, logs de l’utilisation, et vérification d’identité avant chaque signature. Le device Trezor lui-même demande une confirmation sur son écran, ce qui crée un contrôle d’intention, mais pas un contrôle d’identité.

Comment vérifier que la version de Trezor Suite téléchargée est authentique ?

Trezor Suite doit toujours être téléchargée depuis le site officiel trezor.io ou depuis les dépôts de source vérifiés. SatoshiLabs publie les empreintes de hash et les signatures cryptographiques pour chaque version. Avant l’installation, vérifiez que le hash du fichier téléchargé correspond à celui annoncé officiellement. Utilisez une machine propre, préférablement une machine dédiée si les transactions sont critiques.

Post a Comment

Your email address will not be published. Required fields are marked *