diff --git a/src/gui/src/UI/Settings/UITabAccount.js b/src/gui/src/UI/Settings/UITabAccount.js index 95de65cf62..10a8e350fb 100644 --- a/src/gui/src/UI/Settings/UITabAccount.js +++ b/src/gui/src/UI/Settings/UITabAccount.js @@ -34,51 +34,61 @@ export default { // h += `

${i18n('account')}

`; // profile picture - h += `
`; - h += `
`; - h += `
`; + h += `
`; + const hasProfilePicture = window.user?.profile?.picture; + const profileImageUrl = hasProfilePicture ? window.user.profile.picture : window.icons['profile.svg']; + const profilePictureClass = hasProfilePicture ? 'profile-picture change-profile-picture profile-image-has-picture' : 'profile-picture change-profile-picture'; + h += `
`; + h += `
`; + // Add action buttons container + h += `
`; + // Only show remove button if user has a profile picture + if (window.user?.profile?.picture) { + h += ``; + } + h += `
`; h += `
`; // change password button - if(!window.user.is_temp){ + if (!window.user.is_temp) { h += `
`; - h += `${i18n('password')}`; - h += `
`; - h += ``; - h += `
`; + h += `${i18n('password')}`; + h += `
`; + h += ``; + h += `
`; h += `
`; } // change username button h += `
`; - h += `
`; - h += `${i18n('username')}`; - h += `${html_encode(window.user.username)}`; - h += `
`; - h += `
`; - h += ``; - h += `
` + h += `
`; + h += `${i18n('username')}`; + h += `${html_encode(window.user.username)}`; + h += `
`; + h += `
`; + h += ``; + h += `
` h += `
`; // change email button - if(window.user.email){ + if (window.user.email) { h += `
`; - h += `
`; - h += `${i18n('email')}`; - h += `${html_encode(window.user.email)}`; - h += `
`; - h += `
`; - h += ``; - h += `
`; + h += `
`; + h += `${i18n('email')}`; + h += `${html_encode(window.user.email)}`; + h += `
`; + h += `
`; + h += ``; + h += `
`; h += `
`; } // 'Delete Account' button h += `
`; - h += `${i18n("delete_account")}`; - h += `
`; - h += ``; - h += `
`; + h += `${i18n("delete_account")}`; + h += `
`; + h += ``; + h += `
`; h += `
`; return h; @@ -86,7 +96,7 @@ export default { init: ($el_window) => { $el_window.find('.change-password').on('click', function (e) { UIWindowChangePassword({ - window_options:{ + window_options: { parent_uuid: $el_window.attr('data-element_uuid'), disable_parent_window: true, parent_center: true, @@ -96,7 +106,7 @@ export default { $el_window.find('.change-username').on('click', function (e) { UIWindowChangeUsername({ - window_options:{ + window_options: { parent_uuid: $el_window.attr('data-element_uuid'), disable_parent_window: true, parent_center: true, @@ -106,7 +116,7 @@ export default { $el_window.find('.change-email').on('click', function (e) { UIWindowChangeEmail({ - window_options:{ + window_options: { parent_uuid: $el_window.attr('data-element_uuid'), disable_parent_window: true, parent_center: true, @@ -116,7 +126,7 @@ export default { $el_window.find('.manage-sessions').on('click', function (e) { UIWindowManageSessions({ - window_options:{ + window_options: { parent_uuid: $el_window.attr('data-element_uuid'), disable_parent_window: true, parent_center: true, @@ -126,7 +136,7 @@ export default { $el_window.find('.delete-account').on('click', function (e) { UIWindowConfirmUserDeletion({ - window_options:{ + window_options: { parent_uuid: $el_window.attr('data-element_uuid'), disable_parent_window: true, parent_center: true, @@ -134,6 +144,7 @@ export default { }); }); + // Handle clicking on profile picture or change button $el_window.find('.change-profile-picture').on('click', async function (e) { // open dialog UIWindow({ @@ -147,35 +158,95 @@ export default { is_dir: true, is_openFileDialog: true, selectable_body: false, - }); - }) + }); + }); + + // Handle remove profile picture button + $el_window.find('.remove-profile-picture').on('click', async function (e) { + e.preventDefault(); + e.stopPropagation(); + + // Remove profile picture without confirmation dialog + try { + await window.removeProfilePicture(window.user.username); + + // Update UI immediately after successful removal + updateProfilePictureUI($el_window); + + // Show success message + window.show_save_account_notice_message(i18n('profile_picture_removed') || 'Profile picture removed successfully'); + } catch (error) { + console.error('Error removing profile picture:', error); + // Show error message + window.show_save_account_notice_message(i18n('error_removing_profile_picture') || 'Failed to remove profile picture. Please try again.', 'error'); + } + }); + + // Function to update profile picture UI after changes + function updateProfilePictureUI($el_window) { + // Use the global profile picture update function + window.updateAllProfilePictures(); + + // Update the action buttons - hide/show remove button based on picture presence + const hasProfilePicture = window.user?.profile?.picture; + if (hasProfilePicture) { + // Show remove button if it doesn't exist + if ($el_window.find('.remove-profile-picture').length === 0) { + $el_window.find('.profile-picture-actions').append( + `` + ); + // Re-attach event handler for the new button + $el_window.find('.remove-profile-picture').on('click', async function (e) { + e.preventDefault(); + e.stopPropagation(); + + // Remove profile picture without confirmation dialog + try { + await window.removeProfilePicture(window.user.username); + updateProfilePictureUI($el_window); + window.show_save_account_notice_message(i18n('profile_picture_removed') || 'Profile picture removed successfully'); + } catch (error) { + console.error('Error removing profile picture:', error); + window.show_save_account_notice_message(i18n('error_removing_profile_picture') || 'Failed to remove profile picture. Please try again.', 'error'); + } + }); + } + } else { + // Hide remove button + $el_window.find('.remove-profile-picture').remove(); + } + } - $el_window.on('file_opened', async function(e){ + $el_window.on('file_opened', async function (e) { let selected_file = Array.isArray(e.detail) ? e.detail[0] : e.detail; // set profile picture const profile_pic = await puter.fs.read(selected_file.path) // blob to base64 const reader = new FileReader(); reader.readAsDataURL(profile_pic); - reader.onloadend = function() { + reader.onloadend = function () { // resizes the image to 150x150 const img = new Image(); img.src = reader.result; - img.onload = function() { + img.onload = function () { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = 150; canvas.height = 150; ctx.drawImage(img, 0, 0, 150, 150); const base64data = canvas.toDataURL('image/png'); - // update profile picture - $el_window.find('.profile-picture').css('background-image', 'url(' + html_encode(base64data) + ')'); - $('.profile-image').css('background-image', 'url(' + html_encode(base64data) + ')'); - $('.profile-image').addClass('profile-image-has-picture'); - // update profile picture - update_profile(window.user.username, {picture: base64data}) + // update profile picture in user object first + if (!window.user.profile) { + window.user.profile = {}; + } + window.user.profile.picture = base64data; + // update UI using the centralized function + updateProfilePictureUI($el_window); + // update profile picture in storage + update_profile(window.user.username, { picture: base64data }) } } }) + }, }; diff --git a/src/gui/src/css/style.css b/src/gui/src/css/style.css index 4c7d1637e2..e2c47fc653 100644 --- a/src/gui/src/css/style.css +++ b/src/gui/src/css/style.css @@ -18,169 +18,187 @@ */ @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-Thin.ttf') format('truetype'); - font-weight: 100; + font-family: "Inter"; + src: url("/fonts/Inter-Thin.ttf") format("truetype"); + font-weight: 100; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-ExtraLight.ttf') format('truetype'); - font-weight: 200; + font-family: "Inter"; + src: url("/fonts/Inter-ExtraLight.ttf") format("truetype"); + font-weight: 200; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-Light.ttf') format('truetype'); - font-weight: 300; + font-family: "Inter"; + src: url("/fonts/Inter-Light.ttf") format("truetype"); + font-weight: 300; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-Regular.ttf') format('truetype'); - font-weight: 400; + font-family: "Inter"; + src: url("/fonts/Inter-Regular.ttf") format("truetype"); + font-weight: 400; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-Medium.ttf') format('truetype'); - font-weight: 500; + font-family: "Inter"; + src: url("/fonts/Inter-Medium.ttf") format("truetype"); + font-weight: 500; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-SemiBold.ttf') format('truetype'); - font-weight: 600; + font-family: "Inter"; + src: url("/fonts/Inter-SemiBold.ttf") format("truetype"); + font-weight: 600; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-Bold.ttf') format('truetype'); - font-weight: 700; + font-family: "Inter"; + src: url("/fonts/Inter-Bold.ttf") format("truetype"); + font-weight: 700; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-ExtraBold.ttf') format('truetype'); - font-weight: 800; + font-family: "Inter"; + src: url("/fonts/Inter-ExtraBold.ttf") format("truetype"); + font-weight: 800; } @font-face { - font-family: 'Inter'; - src: url('/fonts/Inter-Black.ttf') format('truetype'); - font-weight: 900; + font-family: "Inter"; + src: url("/fonts/Inter-Black.ttf") format("truetype"); + font-weight: 900; } * { - font-family: "Inter", "Helvetica Neue", HelveticaNeue, Helvetica, Arial, sans-serif; - user-select: none; - font-optical-sizing: auto; - font-style: normal; - font-variation-settings: "slnt"0; + font-family: "Inter", "Helvetica Neue", HelveticaNeue, Helvetica, Arial, + sans-serif; + user-select: none; + font-optical-sizing: auto; + font-style: normal; + font-variation-settings: "slnt" 0; } pre { - font-family: "Inter", "Helvetica Neue", HelveticaNeue, Helvetica, Arial, sans-serif; + font-family: "Inter", "Helvetica Neue", HelveticaNeue, Helvetica, Arial, + sans-serif; } :root { - --primary-hue: 210; - --primary-saturation: 41.18%; - --primary-lightness: 93.33%; - --primary-alpha: 0.8; - --primary-color: #373e44; - - --window-head-hue: var(--primary-hue); - --window-head-saturation: var(--primary-saturation); - --window-head-lightness: var(--primary-lightness); - --window-head-alpha: var(--primary-alpha); - --window-head-color: var(--primary-color); - - --window-sidebar-hue: var(--primary-hue); - --window-sidebar-saturation: var(--primary-saturation); - --window-sidebar-lightness: var(--primary-lightness); - --window-sidebar-alpha: calc(min(1, 0.11 + var(--primary-alpha))); - --window-sidebar-color: var(--primary-color); - - --taskbar-hue: var(--primary-hue); - --taskbar-saturation: var(--primary-saturation); - --taskbar-lightness: var(--primary-lightness); - --taskbar-alpha: calc(0.73 * var(--primary-alpha)); - --taskbar-color: var(--primary-color); - - --select-hue: 213.05; - --select-saturation: 74.22%; - --select-lightness: 55.88%; - --select-color: hsl(var(--select-hue), var(--select-saturation), var(--select-lightness)); -} - -html, body { - /* disables two fingers back/forward swipe */ - overscroll-behavior-x: none; + --primary-hue: 210; + --primary-saturation: 41.18%; + --primary-lightness: 93.33%; + --primary-alpha: 0.8; + --primary-color: #373e44; + + --window-head-hue: var(--primary-hue); + --window-head-saturation: var(--primary-saturation); + --window-head-lightness: var(--primary-lightness); + --window-head-alpha: var(--primary-alpha); + --window-head-color: var(--primary-color); + + --window-sidebar-hue: var(--primary-hue); + --window-sidebar-saturation: var(--primary-saturation); + --window-sidebar-lightness: var(--primary-lightness); + --window-sidebar-alpha: calc(min(1, 0.11 + var(--primary-alpha))); + --window-sidebar-color: var(--primary-color); + + --taskbar-hue: var(--primary-hue); + --taskbar-saturation: var(--primary-saturation); + --taskbar-lightness: var(--primary-lightness); + --taskbar-alpha: calc(0.73 * var(--primary-alpha)); + --taskbar-color: var(--primary-color); + + --select-hue: 213.05; + --select-saturation: 74.22%; + --select-lightness: 55.88%; + --select-color: hsl( + var(--select-hue), + var(--select-saturation), + var(--select-lightness) + ); +} + +html, +body { + /* disables two fingers back/forward swipe */ + overscroll-behavior-x: none; } body { - background: no-repeat center center fixed; - background-position: center; - background-size: cover; - background-color: #3d4c74; - overflow: hidden; + background: no-repeat center center fixed; + background-position: center; + background-size: cover; + background-color: #3d4c74; + overflow: hidden; } -.embedded-in-3rd-party-website, .embedded-in-popup { - background: none !important; - background-color: #ccccccbe !important; +.embedded-in-3rd-party-website, +.embedded-in-popup { + background: none !important; + background-color: #ccccccbe !important; } .disable-user-select { - cursor: default; - -webkit-touch-callout: none !important; - -webkit-user-select: none !important; - -khtml-user-select: none !important; - -moz-user-select: none !important; - -ms-user-select: none !important; - user-select: none !important; -} - -.enable-user-select, .enable-user-select * { - cursor: initial; - -webkit-touch-callout: text !important; - -webkit-user-select: text !important; - -khtml-user-select: text !important; - -moz-user-select: text !important; - -ms-user-select: text !important; - user-select: text !important; + cursor: default; + -webkit-touch-callout: none !important; + -webkit-user-select: none !important; + -khtml-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; +} + +.enable-user-select, +.enable-user-select * { + cursor: initial; + -webkit-touch-callout: text !important; + -webkit-user-select: text !important; + -khtml-user-select: text !important; + -moz-user-select: text !important; + -ms-user-select: text !important; + user-select: text !important; } .window-container { - position: fixed; - top: 0; - left: -100000px; - width: 200000px; - height: 200000px; - z-index: -9999; -} - -input[type=text], input[type=password], input[type=email], select { - width: 100%; - padding: 8px; - border: 1px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - outline: none; - -webkit-font-smoothing: antialiased; - color: #393f46; - font-size: 14px; + position: fixed; + top: 0; + left: -100000px; + width: 200000px; + height: 200000px; + z-index: -9999; +} + +input[type="text"], +input[type="password"], +input[type="email"], +select { + width: 100%; + padding: 8px; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + outline: none; + -webkit-font-smoothing: antialiased; + color: #393f46; + font-size: 14px; } /* to prevent auto-zoom on input focus in mobile */ -.device-phone input[type=text], .device-phone input[type=password], .device-phone input[type=email], .device-phone select { - font-size: 17px; +.device-phone input[type="text"], +.device-phone input[type="password"], +.device-phone input[type="email"], +.device-phone select { + font-size: 17px; } -input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, select:focus { - border: 2px solid #01a0fd; - padding: 7px; +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +select:focus { + border: 2px solid #01a0fd; + padding: 7px; } /** @@ -188,1370 +206,1450 @@ input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, sel */ .button { - color: #666666; - background-color: #eeeeee; - border-color: #eeeeee; - font-size: 14px; - text-decoration: none; - text-align: center; - line-height: 40px; - height: 35px; - padding: 0 30px; - margin: 0; - display: inline-block; - appearance: none; - cursor: pointer; - border: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-color: #b9b9b9; - border-style: solid; - border-width: 1px; - line-height: 35px; - background: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e1e1e1)); - background: linear-gradient(#f6f6f6, #e1e1e1); - -webkit-box-shadow: inset 0px 1px 0px rgb(255 255 255 / 30%), 0 1px 2px rgb(0 0 0 / 15%); - box-shadow: inset 0px 1px 0px rgb(255 255 255 / 30%), 0 1px 2px rgb(0 0 0 / 15%); - border-radius: 4px; - outline: none; + color: #666666; + background-color: #eeeeee; + border-color: #eeeeee; + font-size: 14px; + text-decoration: none; + text-align: center; + line-height: 40px; + height: 35px; + padding: 0 30px; + margin: 0; + display: inline-block; + appearance: none; + cursor: pointer; + border: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-color: #b9b9b9; + border-style: solid; + border-width: 1px; + line-height: 35px; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#f6f6f6), + to(#e1e1e1) + ); + background: linear-gradient(#f6f6f6, #e1e1e1); + -webkit-box-shadow: + inset 0px 1px 0px rgb(255 255 255 / 30%), + 0 1px 2px rgb(0 0 0 / 15%); + box-shadow: + inset 0px 1px 0px rgb(255 255 255 / 30%), + 0 1px 2px rgb(0 0 0 / 15%); + border-radius: 4px; + outline: none; } .button:focus-visible { - border-color: rgb(118 118 118); -} - -.button:active, .button.active, .button.is-active, .button.has-open-contextmenu { - text-decoration: none; - background-color: #eeeeee; - border-color: #cfcfcf; - color: #a9a9a9; - -webkit-transition-duration: 0s; - transition-duration: 0s; - -webkit-box-shadow: inset 0 1px 3px rgb(0 0 0 / 20%); - box-shadow: inset 0px 2px 3px rgb(0 0 0 / 36%), 0px 1px 0px white; -} - -.button.disabled, .button.is-disabled, .button:disabled { - top: 0 !important; - background: #EEE !important; - border: 1px solid #DDD !important; - text-shadow: 0 1px 1px white !important; - color: #CCC !important; - cursor: default !important; - appearance: none !important; - pointer-events: none; -} - -.button-action.disabled, .button-action.is-disabled, .button-action:disabled { - background: #55a975 !important; - border: 1px solid #60ab7d !important; - text-shadow: none !important; - color: #CCC !important; -} - -.button-primary.disabled, .button-primary.is-disabled, .button-primary:disabled { - background: #8fc2e7 !important; - border: 1px solid #98adbd !important; - text-shadow: none !important; - color: #f5f5f5 !important; + border-color: rgb(118 118 118); +} + +.button:active, +.button.active, +.button.is-active, +.button.has-open-contextmenu { + text-decoration: none; + background-color: #eeeeee; + border-color: #cfcfcf; + color: #a9a9a9; + -webkit-transition-duration: 0s; + transition-duration: 0s; + -webkit-box-shadow: inset 0 1px 3px rgb(0 0 0 / 20%); + box-shadow: + inset 0px 2px 3px rgb(0 0 0 / 36%), + 0px 1px 0px white; +} + +.button.disabled, +.button.is-disabled, +.button:disabled { + top: 0 !important; + background: #eee !important; + border: 1px solid #ddd !important; + text-shadow: 0 1px 1px white !important; + color: #ccc !important; + cursor: default !important; + appearance: none !important; + pointer-events: none; +} + +.button-action.disabled, +.button-action.is-disabled, +.button-action:disabled { + background: #55a975 !important; + border: 1px solid #60ab7d !important; + text-shadow: none !important; + color: #ccc !important; +} + +.button-primary.disabled, +.button-primary.is-disabled, +.button-primary:disabled { + background: #8fc2e7 !important; + border: 1px solid #98adbd !important; + text-shadow: none !important; + color: #f5f5f5 !important; } .button-block { - width: 100%; + width: 100%; } .button-primary { - border-color: #088ef0; - background: -webkit-gradient(linear, left top, left bottom, from(#34a5f8), to(#088ef0)); - background: linear-gradient(#34a5f8, #088ef0); - color: white; + border-color: #088ef0; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#34a5f8), + to(#088ef0) + ); + background: linear-gradient(#34a5f8, #088ef0); + color: white; } .button-danger { - border-color: #f00808; - background: -webkit-gradient(linear, left top, left bottom, from(#f83434), to(#f00808)); - background: linear-gradient(#f83434, #f00808); - color: white; -} - -.button-primary:active, .button-primary.active, .button-primary.is-active, .button-primary-flat:active, .button-primary-flat.active, .button-primary-flat.is-active { - background-color: #2798eb; - border-color: #2798eb; - color: #bedef5; + border-color: #f00808; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#f83434), + to(#f00808) + ); + background: linear-gradient(#f83434, #f00808); + color: white; +} + +.button-primary:active, +.button-primary.active, +.button-primary.is-active, +.button-primary-flat:active, +.button-primary-flat.active, +.button-primary-flat.is-active { + background-color: #2798eb; + border-color: #2798eb; + color: #bedef5; } .button-action { - border-color: #08bf4e; - background: -webkit-gradient(linear, left top, left bottom, from(#29d55d), to(#1ccd60)); - background: linear-gradient(#29d55d, #1ccd60); - color: white; -} - -.button-action:active, .button-action.active, .button-action.is-active, .button-action-flat:active, .button-action-flat.active, .button-action-flat.is-active { - background-color: #27eb41; - border-color: #27eb41; - color: #bef5ca; + border-color: #08bf4e; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#29d55d), + to(#1ccd60) + ); + background: linear-gradient(#29d55d, #1ccd60); + color: white; +} + +.button-action:active, +.button-action.active, +.button-action.is-active, +.button-action-flat:active, +.button-action-flat.active, +.button-action-flat.is-active { + background-color: #27eb41; + border-color: #27eb41; + color: #bef5ca; } .button-giant { - font-size: 28px; - height: 70px; - line-height: 70px; - padding: 0 70px; + font-size: 28px; + height: 70px; + line-height: 70px; + padding: 0 70px; } .button-jumbo { - font-size: 24px; - height: 60px; - line-height: 60px; - padding: 0 60px; + font-size: 24px; + height: 60px; + line-height: 60px; + padding: 0 60px; } .button-large { - font-size: 20px; - height: 50px; - line-height: 50px; - padding: 0 50px; + font-size: 20px; + height: 50px; + line-height: 50px; + padding: 0 50px; } .button-normal { - font-size: 16px; - height: 40px; - line-height: 38px; - padding: 0 40px; + font-size: 16px; + height: 40px; + line-height: 38px; + padding: 0 40px; } .button-small { - height: 30px; - line-height: 29px; - padding: 0 30px; + height: 30px; + line-height: 29px; + padding: 0 30px; } .button-tiny { - font-size: 9.6px; - height: 24px; - line-height: 24px; - padding: 0 24px; + font-size: 9.6px; + height: 24px; + line-height: 24px; + padding: 0 24px; } .desktop { - display: none; - overflow: hidden; - height: calc(100vh - 60px); - width: 100%; - display: grid; - grid-template-rows: repeat(auto-fill, 109px); - grid-auto-flow: column; - grid-template-columns: repeat(auto-fill, 120px); + display: none; + overflow: hidden; + height: calc(100vh - 60px); + width: 100%; + display: grid; + grid-template-rows: repeat(auto-fill, 109px); + grid-auto-flow: column; + grid-template-columns: repeat(auto-fill, 120px); } .fullpage-mode .window-minimize-btn { - display: none; + display: none; } .device-phone .desktop { - height: calc(100vh - 90px) !important; - height: calc(100dvh - 90px) !important; + height: calc(100vh - 90px) !important; + height: calc(100dvh - 90px) !important; } .item-container-list { - display: grid; - overflow-x: scroll !important; - overflow-y: hidden !important; - grid-template-rows: repeat(auto-fill, 18px); - grid-auto-flow: column; - gap: 15px 70px; - padding-top: 5px; + display: grid; + overflow-x: scroll !important; + overflow-y: hidden !important; + grid-template-rows: repeat(auto-fill, 18px); + grid-auto-flow: column; + gap: 15px 70px; + padding-top: 5px; } .device-phone .item-container-list { - grid-template-rows: repeat(auto-fill, 55px); - overflow-x: hidden !important; - overflow-y: scroll !important; - grid-auto-flow: unset; + grid-template-rows: repeat(auto-fill, 55px); + overflow-x: hidden !important; + overflow-y: scroll !important; + grid-auto-flow: unset; } .item-container-details { - overflow-x: scroll !important; - overflow-y: scroll !important; - padding-top: 5px; + overflow-x: scroll !important; + overflow-y: scroll !important; + padding-top: 5px; } .item { - width: 110px; - height: 70px; - user-select: none !important; - -moz-user-select: none !important; - -webkit-user-select: none; - text-align: center; - margin: 15px 5px 30px 5px; - float: left; - position: relative; - scroll-margin: 15px 15px 100px 15px; - pointer-events: all; + width: 110px; + height: 70px; + user-select: none !important; + -moz-user-select: none !important; + -webkit-user-select: none; + text-align: center; + margin: 15px 5px 30px 5px; + float: left; + position: relative; + scroll-margin: 15px 15px 100px 15px; + pointer-events: all; } .item-disabled { - opacity: 0.7; - pointer-events: none; + opacity: 0.7; + pointer-events: none; } .item-revealed { - opacity: 0.9; + opacity: 0.9; } .item-hidden { - display: none + display: none; } .item-revealed.item-disabled { - opacity: 0.7 + opacity: 0.7; } .item-container-list .item { - height: initial; - width: max-content; - margin: 0; - pointer-events: all; + height: initial; + width: max-content; + margin: 0; + pointer-events: all; } .device-phone .item-container-list .item { - height: 50px; - width: 100%; - padding-left: 10px; + height: 50px; + width: 100%; + padding-left: 10px; } .item-container-details .item { - height: initial; - width: max-content; - margin: 0; - pointer-events: all; - width: 100vw; - margin-bottom: 20px; + height: initial; + width: max-content; + margin: 0; + pointer-events: all; + width: 100vw; + margin-bottom: 20px; } .explore-table-headers { - display: none; - width: 100vw; - height: 25px; - border-bottom: 1px solid rgb(226, 226, 226); - background-color: #fff; - margin-left: -10px; - padding-top: 0; - margin-top: -7px; - margin-bottom: 8px; - position: sticky; - top: -7px; - z-index: 1; + display: none; + width: 100vw; + height: 25px; + border-bottom: 1px solid rgb(226, 226, 226); + background-color: #fff; + margin-left: -10px; + padding-top: 0; + margin-top: -7px; + margin-bottom: 8px; + position: sticky; + top: -7px; + z-index: 1; } .device-phone .explore-table-headers { - display: none !important; + display: none !important; } .header-sort-icon { - margin-left: 7px; - pointer-events: none; + margin-left: 7px; + pointer-events: none; } span.header-sort-icon img { - margin-bottom: -1px; - width: 10px; + margin-bottom: -1px; + width: 10px; } .explore-table-headers .explore-table-headers-th { - font-size: 12px; - line-height: 25px; - margin-left: 15px; - color: #555c61; - display: inline-block; + font-size: 12px; + line-height: 25px; + margin-left: 15px; + color: #555c61; + display: inline-block; } .explore-table-headers-th-active { - font-weight: bold; + font-weight: bold; } .explore-table-headers-th--name { - width: 330px; + width: 330px; } .explore-table-headers-th--size { - width: 135px; + width: 135px; } .explore-table-headers-th--modified { - width: 135px; + width: 135px; } .item-container-details .explore-table-headers { - display: block; + display: block; } -.item-disabled .item-icon, .item-disabled .item-name { - opacity: 0.7; - pointer-events: none; +.item-disabled .item-icon, +.item-disabled .item-name { + opacity: 0.7; + pointer-events: none; } .item-icon { - display: block; - margin: 0 auto; - padding: 5px; - height: 45px; - width: 45px; - filter: drop-shadow(1px 1px 1px rgba(102, 102, 102, .5)); - display: flex; - justify-content: center; - align-items: center; + display: block; + margin: 0 auto; + padding: 5px; + height: 45px; + width: 45px; + filter: drop-shadow(1px 1px 1px rgba(102, 102, 102, 0.5)); + display: flex; + justify-content: center; + align-items: center; } .item-container-list .item-icon { - float: left; - height: 15px; - width: 15px; + float: left; + height: 15px; + width: 15px; } .device-phone .item-container-list .item-icon { - float: left; - height: 45px; - width: 45px; + float: left; + height: 45px; + width: 45px; } .item-container-details .item-icon { - float: left; - height: 15px; - width: 15px; + float: left; + height: 15px; + width: 15px; } .device-desktop .item-container-details .item-selected .item-icon { - background-color: transparent; + background-color: transparent; } .item-icon img { - max-height: 45px; - max-width: 45px; + max-height: 45px; + max-width: 45px; } .item-container-list .item-icon img { - max-height: 15px; - max-width: 15px; + max-height: 15px; + max-width: 15px; } .device-phone .item-container-list .item-icon img { - max-height: 45px; - max-width: 45px; + max-height: 45px; + max-width: 45px; } .item-container-details .item-icon img { - max-height: 15px; - max-width: 15px; + max-height: 15px; + max-width: 15px; } .item-icon-thumb { - padding: 1px; - background-color: white; - border: 1px solid #EEE; - border-radius: 3px; + padding: 1px; + background-color: white; + border: 1px solid #eee; + border-radius: 3px; } .device-desktop .item-selected .item-icon { - background-color: #d4d4d430; - border-radius: 3px; - filter: drop-shadow(0px 0px 1px rgba(102, 102, 102, 1)); + background-color: #d4d4d430; + border-radius: 3px; + filter: drop-shadow(0px 0px 1px rgba(102, 102, 102, 1)); } .item-badges { - position: absolute; - height: 15px; - width: 55px; - text-align: center; - justify-content: right; - display: flex; - top: 38px; - left: 28px; - right: 50%; + position: absolute; + height: 15px; + width: 55px; + text-align: center; + justify-content: right; + display: flex; + top: 38px; + left: 28px; + right: 50%; } .item-container-list .item-badges { - display: none; + display: none; } .item-container-details .item-badges { - display: none; + display: none; } .item-badge { - filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, .4)); - display: none; - margin: 1px; - width: 15px; - height: 15px; - box-sizing: border-box; - border-radius: 100%; + filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 0.4)); + display: none; + margin: 1px; + width: 15px; + height: 15px; + box-sizing: border-box; + border-radius: 100%; } .item-badge.item-shortcut { - border-radius: 1px; - background: white; + border-radius: 1px; + background: white; } .item-has-website-badge { - filter: drop-shadow(0px 0px 2px rgba(0, 0, 0, .4)); - display: none; - cursor: pointer; + filter: drop-shadow(0px 0px 2px rgba(0, 0, 0, 0.4)); + display: none; + cursor: pointer; } .item-has-website-url-badge { - cursor: pointer; + cursor: pointer; } .item-has-website-url-badge.has-open-contextmenu { - filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1)); + filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 1)); } -.item-name, .item-name-editor, .item-name-shadow { - font-size: 12px; - color: white; - text-shadow: 0px 0px 3px #00000082, 0px 0px 3px #00000082, 0px 0px 3px #00000082; - -webkit-font-smoothing: antialiased; - padding: 3px; - margin-top: 4px; - display: inline-block; - font-weight: bold; - border-radius: 4px; - box-sizing: border-box; - white-space: pre-wrap; - word-break: break-word; +.item-name, +.item-name-editor, +.item-name-shadow { + font-size: 12px; + color: white; + text-shadow: + 0px 0px 3px #00000082, + 0px 0px 3px #00000082, + 0px 0px 3px #00000082; + -webkit-font-smoothing: antialiased; + padding: 3px; + margin-top: 4px; + display: inline-block; + font-weight: bold; + border-radius: 4px; + box-sizing: border-box; + white-space: pre-wrap; + word-break: break-word; } .item-name { - transition: opacity 0.2s ease-in-out; - cursor: default; - max-width: 110px; + transition: opacity 0.2s ease-in-out; + cursor: default; + max-width: 110px; } .item-container-list .item-name { - margin-top: 2px; - float: left; - max-width: initial; + margin-top: 2px; + float: left; + max-width: initial; } .item-container-details .item-name { - margin-top: 2px; - float: left; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - text-align: left; - max-width: 220px; + margin-top: 2px; + float: left; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + text-align: left; + max-width: 220px; } .item-name-shadow { - display: none; - max-width: 110px; + display: none; + max-width: 110px; } .item-name-editor { - background: none; - background-color: white; - text-shadow: none; - color: black; - text-align: center; - border: none; - max-width: 100%; - padding: 1px 3px; - resize: none; - display: none; - margin: 6px auto; - user-select: initial; - position: relative; - box-sizing: border-box; - z-index: 999999999; + background: none; + background-color: white; + text-shadow: none; + color: black; + text-align: center; + border: none; + max-width: 100%; + padding: 1px 3px; + resize: none; + display: none; + margin: 6px auto; + user-select: initial; + position: relative; + box-sizing: border-box; + z-index: 999999999; } .item-container-list .item-name-editor { - width: fit-content !important; - max-width: 200px !important; - text-align: left; - background-color: white !important; + width: fit-content !important; + max-width: 200px !important; + text-align: left; + background-color: white !important; } .item-container-list .item-name-editor-active { - background-color: white !important; + background-color: white !important; } .item-container-details .item-name-editor { - width: fit-content !important; - max-width: 200px !important; - text-align: left; - background-color: white !important; - position: absolute; - left: 35px; + width: fit-content !important; + max-width: 200px !important; + text-align: left; + background-color: white !important; + position: absolute; + left: 35px; } .item-container-details .item-name-editor-active { - background-color: white !important; + background-color: white !important; } .item-name-editor-active { - display: block; + display: block; } .item-attr { - display: none; - position: absolute; - text-align: left; - font-size: 12px; - height: 25px; - line-height: 25px; - width: max-content; - color: #738c9f; + display: none; + position: absolute; + text-align: left; + font-size: 12px; + height: 25px; + line-height: 25px; + width: max-content; + color: #738c9f; } .item-container-details .item-attr { - display: inline; + display: inline; } .device-desktop .item-container-details .item-selected .item-attr { - color: white; + color: white; } .item-container-details .item-attr--modified { - left: 350px; + left: 350px; } .item-container-details .item-attr--size { - left: 500px; + left: 500px; } .item-container-details .item-attr--type { - left: 650px; + left: 650px; } .window-disabled { - pointer-events: none !important; + pointer-events: none !important; } .window-disable-mask { - width: 100%; - height: 100%; - position: absolute; - display: none; - background-color: #d1d1d18a; - pointer-events: initial; - z-index: 2; + width: 100%; + height: 100%; + position: absolute; + display: none; + background-color: #d1d1d18a; + pointer-events: initial; + z-index: 2; } -.device-phone .window-disable-mask, .device-tablet .window-disable-mask { - background-color: #626060a1; +.device-phone .window-disable-mask, +.device-tablet .window-disable-mask { + background-color: #626060a1; } .window-disable-mask .busy-indicator { - -moz-animation: three-quarters-loader 1250ms infinite linear; - -webkit-animation: three-quarters-loader 1250ms infinite linear; - animation: three-quarters-loader 1250ms infinite linear; - border: 5px solid rgb(75, 75, 75); - border-right-color: transparent; - border-radius: 100%; - box-sizing: border-box; - display: inline-block; - position: relative; - overflow: hidden; - text-indent: -9999px; - width: 45px; - height: 45px; - position: absolute; - top: calc(50% - 22px) !important; - left: calc(50% - 22px) !important; - transform: translate(-50%, -50%); - display: none; + -moz-animation: three-quarters-loader 1250ms infinite linear; + -webkit-animation: three-quarters-loader 1250ms infinite linear; + animation: three-quarters-loader 1250ms infinite linear; + border: 5px solid rgb(75, 75, 75); + border-right-color: transparent; + border-radius: 100%; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 45px; + height: 45px; + position: absolute; + top: calc(50% - 22px) !important; + left: calc(50% - 22px) !important; + transform: translate(-50%, -50%); + display: none; } .window-body .item .item-name { - color: rgb(73, 73, 73); - text-shadow: none; - font-weight: 500; - font-size: 13px; - margin-left: 3px; + color: rgb(73, 73, 73); + text-shadow: none; + font-weight: 500; + font-size: 13px; + margin-left: 3px; } .device-phone .item-container-list .item .item-name { - line-height: 42px; - border-bottom: 1px solid #e3e3e3; - padding-bottom: 15px; - width: calc(100% - 75px); - text-align: left; + line-height: 42px; + border-bottom: 1px solid #e3e3e3; + padding-bottom: 15px; + width: calc(100% - 75px); + text-align: left; } .window-body .item .item-name-editor { - font-weight: 500; - font-size: 13px; + font-weight: 500; + font-size: 13px; } -.device-desktop .item-selected>.item-name, .device-desktop .window-body .item-selected>.item-name { - background-color: #3b56ee; - color: white; +.device-desktop .item-selected > .item-name, +.device-desktop .window-body .item-selected > .item-name { + background-color: #3b56ee; + color: white; } .device-desktop .item-container-details .item-selected { - background-color: #3b56ee; - border-radius: 3px; + background-color: #3b56ee; + border-radius: 3px; } .device-desktop .item-selected.item-blurred .item-name { - background-color: #dbdada; - color: rgb(73, 73, 73); - text-shadow: none; + background-color: #dbdada; + color: rgb(73, 73, 73); + text-shadow: none; } .window-body .item-name-editor { - color: rgb(73, 73, 73); - text-shadow: none; + color: rgb(73, 73, 73); + text-shadow: none; } .window-menubar:not(.window-menubar-global):empty { - display: none !important; + display: none !important; } .window-menubar { - display: flex; - box-sizing: border-box; - overflow: hidden; - border-bottom: 1px solid #e3e3e3; - background-color: #fafafa; - --scale: 2pt; - padding: 2px 5px; + display: flex; + box-sizing: border-box; + overflow: hidden; + border-bottom: 1px solid #e3e3e3; + background-color: #fafafa; + --scale: 2pt; + padding: 2px 5px; } .window-menubar-global { - background-color: transparent; - color: white; - border-bottom: none; - flex-grow: 1; - scale: 1; - --scale: 1; - margin-left: 15px; - padding: 0; + background-color: transparent; + color: white; + border-bottom: none; + flex-grow: 1; + scale: 1; + --scale: 1; + margin-left: 15px; + padding: 0; } .window-menubar-global .window-menubar-item span { - padding: 3px 10px; - font-size: 13px; - border-radius: 3px; + padding: 3px 10px; + font-size: 13px; + border-radius: 3px; } .window-menubar-item { - padding: calc(1.4 * var(--scale)) 0; - font-size: calc(5 * var(--scale)); - overflow: hidden !important; + padding: calc(1.4 * var(--scale)) 0; + font-size: calc(5 * var(--scale)); + overflow: hidden !important; } .window-menubar-item span { - display: inline-block; - padding: calc(1.6 * var(--scale)) calc(4 * var(--scale)); - font-size: calc(5 * var(--scale)); - border-radius: calc(1.5 * var(--scale)); + display: inline-block; + padding: calc(1.6 * var(--scale)) calc(4 * var(--scale)); + font-size: calc(5 * var(--scale)); + border-radius: calc(1.5 * var(--scale)); } -.window-menubar-item.active>span { - background-color: #e2e2e2; +.window-menubar-item.active > span { + background-color: #e2e2e2; } -.window-menubar-global .window-menubar-item.active>span { - background-color: #e4e4e43a; +.window-menubar-global .window-menubar-item.active > span { + background-color: #e4e4e43a; } .explorer-empty-message { - text-align: center; - margin-top: 20px; - color: #a3a3a3; - -webkit-font-smoothing: antialiased; - display: none; + text-align: center; + margin-top: 20px; + color: #a3a3a3; + -webkit-font-smoothing: antialiased; + display: none; } .explorer-error-message { - text-align: center; - margin-top: 20px; - color: #935c5c; - -webkit-font-smoothing: antialiased; - display: none; + text-align: center; + margin-top: 20px; + color: #935c5c; + -webkit-font-smoothing: antialiased; + display: none; } .explorer-loading-spinner { - margin-top: 20px; - font-size: 13px; - display: none; + margin-top: 20px; + font-size: 13px; + display: none; } .explorer-loading-spinner-msg { - text-align: center; - margin-top: 5px; - color: #a3a3a3; - font-size: 15px; - -webkit-font-smoothing: antialiased; + text-align: center; + margin-top: 5px; + color: #a3a3a3; + font-size: 15px; + -webkit-font-smoothing: antialiased; } /* Window */ .window { - display: none; - position: absolute; - background: transparent; - padding: 0; - border: 1px solid #9a9a9a; - box-shadow: 0px 0px 15px #00000066; - overflow: hidden; - border-radius: 4px; - border: none; - transition: opacity .2s; - user-select: none !important; - -moz-user-select: none !important; - -webkit-user-select: none; + display: none; + position: absolute; + background: transparent; + padding: 0; + border: 1px solid #9a9a9a; + box-shadow: 0px 0px 15px #00000066; + overflow: hidden; + border-radius: 4px; + border: none; + transition: opacity 0.2s; + user-select: none !important; + -moz-user-select: none !important; + -webkit-user-select: none; } .window[data-is_maximized="1"] { - transform: none; - border-radius: 0; + transform: none; + border-radius: 0; } .window-cover-page { - border-radius: 0; + border-radius: 0; } .device-phone .window[data-is_maximized="1"] { - top: 0 !important; + top: 0 !important; } -.device-phone .window, .device-tablet .window { - z-index: 9999999 !important; +.device-phone .window, +.device-tablet .window { + z-index: 9999999 !important; } -.device-phone .window-alert, .device-tablet .window-alert { - min-width: 90%; - max-width: 300px; - position: absolute; - left: 50% !important; - top: 50% !important; - transform: translate(-50%, -50%); +.device-phone .window-alert, +.device-tablet .window-alert { + min-width: 90%; + max-width: 300px; + position: absolute; + left: 50% !important; + top: 50% !important; + transform: translate(-50%, -50%); } .device-tablet .window .window-scale-btn, .device-phone .window .window-scale-btn, .device-phone .window .ui-resizable-handle { - display: none !important; + display: none !important; } .window-backdrop { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - background-color: #00000080; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: #00000080; } .window.ui-resizable-resizing { - transition: none; + transition: none; } .window-dragging { - transition: none; + transition: none; } .window-head-draggable { - overflow: hidden; - flex-grow: 1; - display: flex; + overflow: hidden; + flex-grow: 1; + display: flex; } .window-head { - overflow: hidden !important; - padding: 0; - background-color: hsla(var(--window-head-hue), - var(--window-head-saturation), - var(--window-head-lightness), - calc(0.5 + 0.5 * var(--window-head-alpha))); - filter: grayscale(80%); - box-shadow: inset 0px -4px 5px -7px rgb(0 0 0 / 64%); - display: flex; - flex-flow: row; - padding-left: 5px; - margin-bottom: -1px; + overflow: hidden !important; + padding: 0; + background-color: hsla( + var(--window-head-hue), + var(--window-head-saturation), + var(--window-head-lightness), + calc(0.5 + 0.5 * var(--window-head-alpha)) + ); + filter: grayscale(80%); + box-shadow: inset 0px -4px 5px -7px rgb(0 0 0 / 64%); + display: flex; + flex-flow: row; + padding-left: 5px; + margin-bottom: -1px; } .device-phone .window-head { - /* not transparent on mobile */ - background-color: rgba(231, 238, 245); + /* not transparent on mobile */ + background-color: rgba(231, 238, 245); } -.window-head, .window-head * { - user-select: none !important; - -moz-user-select: none !important; - -webkit-user-select: none !important; - -ms-user-select: none !important; - cursor: default; +.window-head, +.window-head * { + user-select: none !important; + -moz-user-select: none !important; + -webkit-user-select: none !important; + -ms-user-select: none !important; + cursor: default; } .window-active .window-head { - filter: none !important; + filter: none !important; } .window-head-title { - float: left; - line-height: 30px; - font-size: 14px; - /* color: #666d74; */ - margin-left: 10px; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - color: var(--window-head-color); + float: left; + line-height: 30px; + font-size: 14px; + /* color: #666d74; */ + margin-left: 10px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + color: var(--window-head-color); } .window-active .window-head-title { - /* color: #373e44; */ - color: var(--window-head-color) + /* color: #373e44; */ + color: var(--window-head-color); } .window-head-icon { - float: left; - width: 16px; - height: 16px; - margin-left: 8px; - margin-top: 7px; - margin-right: -5px; - filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); + float: left; + width: 16px; + height: 16px; + margin-left: 8px; + margin-top: 7px; + margin-right: -5px; + filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); } .window-navbar { - overflow: hidden; - border-bottom: 1px solid #e3e3e3; - padding: 5px 0 5px 1px; - background-color: #fafafa; - height: 48px; - box-sizing: border-box; + overflow: hidden; + border-bottom: 1px solid #e3e3e3; + padding: 5px 0 5px 1px; + background-color: #fafafa; + height: 48px; + box-sizing: border-box; } .window-navbar-btn { - margin: 7px 6px 0; - cursor: pointer; - width: 17px; - border-radius: 100%; - padding: 3px; - transition: background-color 0.2s ease-in; + margin: 7px 6px 0; + cursor: pointer; + width: 17px; + border-radius: 100%; + padding: 3px; + transition: background-color 0.2s ease-in; } -.window-navbar-btn:hover, .window-navbar-btn.has-open-contextmenu { - background-color: #dfdfdf; +.window-navbar-btn:hover, +.window-navbar-btn.has-open-contextmenu { + background-color: #dfdfdf; } .window-navbar-btn-disabled { - pointer-events: none; - opacity: 0.5; + pointer-events: none; + opacity: 0.5; } .window-navbar-path { - overflow: hidden; - line-height: 35px; - padding-left: 10px; - font-size: 14px; - color: #41484c; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - -webkit-font-smoothing: antialiased; - border: 1px solid #e3e3e3; - border-radius: 3px; - background: #f1f3f4; - box-sizing: border-box; - - user-select: none !important; - -moz-user-select: none !important; - -webkit-user-select: none !important; - -ms-user-select: none !important; - cursor: default; + overflow: hidden; + line-height: 35px; + padding-left: 10px; + font-size: 14px; + color: #41484c; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + -webkit-font-smoothing: antialiased; + border: 1px solid #e3e3e3; + border-radius: 3px; + background: #f1f3f4; + box-sizing: border-box; + + user-select: none !important; + -moz-user-select: none !important; + -webkit-user-select: none !important; + -ms-user-select: none !important; + cursor: default; } .device-phone .window-navbar-path { - display: none; + display: none; } .window-navbar-layout-settings { - width: 30px; - height: 30px; - margin-left: 10px; - margin-top: 3px; + width: 30px; + height: 30px; + margin-left: 10px; + margin-top: 3px; } .device-phone .window-navbar-layout-settings { - float: right; - margin-right: 10px; + float: right; + margin-right: 10px; } .window-navbar-path-input { - overflow: hidden; - line-height: 17px; - padding-left: 10px; - font-size: 15px; - color: #41484c; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - /* -webkit-font-smoothing: antialiased; */ - border: 1px solid #00b6ff; - border-radius: 3px; - background: white; - display: none; - box-sizing: border-box; - padding-top: 9px; - padding-bottom: 9px; - outline: 1px solid #00b6ff; -} - -.window-navbar-path-input, .window-navbar-path { - width: calc(100% - 170px); - float: left; + overflow: hidden; + line-height: 17px; + padding-left: 10px; + font-size: 15px; + color: #41484c; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + /* -webkit-font-smoothing: antialiased; */ + border: 1px solid #00b6ff; + border-radius: 3px; + background: white; + display: none; + box-sizing: border-box; + padding-top: 9px; + padding-bottom: 9px; + outline: 1px solid #00b6ff; +} + +.window-navbar-path-input, +.window-navbar-path { + width: calc(100% - 170px); + float: left; } .window-navbar-path-dirname { - cursor: pointer; - font-weight: 500; - padding: 0px 7px; - height: 33px; - display: inline-block; - overflow: initial !important; + cursor: pointer; + font-weight: 500; + padding: 0px 7px; + height: 33px; + display: inline-block; + overflow: initial !important; } .window-navbar-path-dirname-active { - text-decoration: underline; + text-decoration: underline; } .window-navbar-path-dirname:hover { - color: #414a4e; - text-decoration: underline; + color: #414a4e; + text-decoration: underline; } .path-seperator { - width: 10px; - opacity: 0.2; + width: 10px; + opacity: 0.2; } .window-body { - width: 100%; - height: calc(100% - 77px); - background-color: white; - overflow: auto; + width: 100%; + height: calc(100% - 77px); + background-color: white; + overflow: auto; } .window-body.item-container { - box-sizing: border-box; - width: initial; - padding-left: 10px; - border: 3px solid rgba(255, 255, 255, 0); - position: relative; + box-sizing: border-box; + width: initial; + padding-left: 10px; + border: 3px solid rgba(255, 255, 255, 0); + position: relative; } .item-container-transparent-border { - border-color: transparent !important; + border-color: transparent !important; } .window-body.item-container-active { - border-color: #bcedff !important; + border-color: #bcedff !important; } - .device-phone .window-body.item-container { - padding-left: 0; + padding-left: 0; } .window-sidebar { - min-width: 170px; - height: calc(100% - 28px); - float: left; - border-right: 0.5px solid #CCC; - padding: 15px 10px; - box-sizing: border-box; - background-color: hsla(var(--window-sidebar-hue), - var(--window-sidebar-saturation), - var(--window-sidebar-lightness), - calc(0.5 + 0.5*var(--window-sidebar-alpha))); - overflow-y: scroll; - margin-top: 1px; - box-shadow: inset -4px 0 8px -8px rgba(0, 0, 0, 0.3); + min-width: 170px; + height: calc(100% - 28px); + float: left; + border-right: 0.5px solid #ccc; + padding: 15px 10px; + box-sizing: border-box; + background-color: hsla( + var(--window-sidebar-hue), + var(--window-sidebar-saturation), + var(--window-sidebar-lightness), + calc(0.5 + 0.5 * var(--window-sidebar-alpha)) + ); + overflow-y: scroll; + margin-top: 1px; + box-shadow: inset -4px 0 8px -8px rgba(0, 0, 0, 0.3); } .window-sidebar .ui-resizable-e { - right: 0; + right: 0; } .window-filedialog .window-sidebar { - height: calc(100% - 30px); + height: calc(100% - 30px); } .window-cover-page.window-filedialog .window-body { - height: calc(100% - 109px) !important; + height: calc(100% - 109px) !important; } .window-cover-page .window-sidebar { - height: 100%; + height: 100%; } .window-cover-page.window-puter-dialog { - height: 100%; - width: 100%; - top: 0 !important; + height: 100%; + width: 100%; + top: 0 !important; } .window-cover-page.window-puter-dialog .window-body { - width: 100%; - height: 100%; - padding: 0 !important; + width: 100%; + height: 100%; + padding: 0 !important; } -.window-cover-page.window-login, .window-cover-page.window-signup { - height: 100vh !important; - width: 100%; - top: 0 !important; +.window-cover-page.window-login, +.window-cover-page.window-signup { + height: 100vh !important; + width: 100%; + top: 0 !important; } .window-sidebar-title { - margin: 0; - font-weight: bold; - font-size: 13px; - color: #8f96a3; - text-shadow: 1px 1px rgb(247 247 247 / 15%); - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - padding-left: 6px; - cursor: default; - margin-top: 20px; - margin-bottom: 5px; + margin: 0; + font-weight: bold; + font-size: 13px; + color: #8f96a3; + text-shadow: 1px 1px rgb(247 247 247 / 15%); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding-left: 6px; + cursor: default; + margin-top: 20px; + margin-bottom: 5px; } .window-sidebar-title:first-child { - padding-left: 1px; - margin-top: 0px; -} - -.window-sidebar-item:hover, .window-sidebar-item.has-open-contextmenu { - background-color: rgba(243, 243, 243, 0.8); - cursor: pointer; -} - -.window-sidebar-item, .window-sidebar-item.grabbing { - margin-bottom: 6px; - margin-top: 2px; - padding: 4px; - border-radius: 3px; - color: #444444; - font-size: 13px; - cursor: pointer; - transition: 0.15s background-color; - box-sizing: border-box; - overflow-x: hidden !important; - overflow-y: hidden !important; - white-space: nowrap; - text-overflow: ellipsis; + padding-left: 1px; + margin-top: 0px; +} + +.window-sidebar-item:hover, +.window-sidebar-item.has-open-contextmenu { + background-color: rgba(243, 243, 243, 0.8); + cursor: pointer; } -.window-sidebar-item-active, .window-sidebar-item-drag-active, .window-sidebar-item-active:hover { - background-color: #fefeff; +.window-sidebar-item, +.window-sidebar-item.grabbing { + margin-bottom: 6px; + margin-top: 2px; + padding: 4px; + border-radius: 3px; + color: #444444; + font-size: 13px; + cursor: pointer; + transition: 0.15s background-color; + box-sizing: border-box; + overflow-x: hidden !important; + overflow-y: hidden !important; + white-space: nowrap; + text-overflow: ellipsis; +} + +.window-sidebar-item-active, +.window-sidebar-item-drag-active, +.window-sidebar-item-active:hover { + background-color: #fefeff; } .window-sidebar-item-placeholder { - height: 27px !important; + height: 27px !important; } .window-sidebar-item { - cursor: pointer !important; - user-select: none; + cursor: pointer !important; + user-select: none; } .window-sidebar-item:not(.window-sidebar-title):hover { - cursor: grab; + cursor: grab; } .window-sidebar-item.grabbing { - cursor: grabbing !important; + cursor: grabbing !important; } .window-sidebar-item-dragging { - background-color: #f5f5f5 !important; - opacity: 0.8; - cursor: grabbing; + background-color: #f5f5f5 !important; + opacity: 0.8; + cursor: grabbing; } .ui-sortable-helper { - background: white !important; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; + background: white !important; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1) !important; } .window-sidebar-item-icon { - width: 14px; - height: 14px; - filter: drop-shadow(0px 0px 0.2px rgb(51, 51, 51)); - margin-right: 5px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - margin-bottom: -2px; + width: 14px; + height: 14px; + filter: drop-shadow(0px 0px 0.2px rgb(51, 51, 51)); + margin-right: 5px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin-bottom: -2px; } .window[data-app="explorer"] .window-body { - height: calc(100% - 107px); + height: calc(100% - 107px); } .explorer-footer { - background: white; - overflow: auto; - height: 30px; - font-size: 13px; - line-height: 28px; - padding-left: 10px; - background-color: #fafafa; - border-top: 1px solid #e3e3e3; - color: #505050; - user-select: none !important; - -moz-user-select: none !important; - -webkit-user-select: none !important; - -ms-user-select: none !important; - cursor: default; + background: white; + overflow: auto; + height: 30px; + font-size: 13px; + line-height: 28px; + padding-left: 10px; + background-color: #fafafa; + border-top: 1px solid #e3e3e3; + color: #505050; + user-select: none !important; + -moz-user-select: none !important; + -webkit-user-select: none !important; + -ms-user-select: none !important; + cursor: default; } .device-phone .explorer-footer { - width: 100%; + width: 100%; } -.explorer-footer-seperator, .explorer-footer-selected-items-count { - display: none; +.explorer-footer-seperator, +.explorer-footer-selected-items-count { + display: none; } .explorer-footer-seperator { - margin: 15px; - color: #CCC; + margin: 15px; + color: #ccc; } .window-body-filedialog { - height: calc(100% - 137px); + height: calc(100% - 137px); } .window-body-app { - height: calc(100% - 30px); + height: calc(100% - 30px); } .fullpage-mode.device-phone .window-body-app { - height: calc(100%); + height: calc(100%); } .window-filedialog-prompt { - height: 60px; - border-top: 1px solid #dbdee3; - background-color: #f3f5f9; - padding: 0 15px; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; + height: 60px; + border-top: 1px solid #dbdee3; + background-color: #f3f5f9; + padding: 0 15px; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; } .savefiledialog-filename { - float: left; - margin-right: 10px; - padding: 5px !important; - border-width: 1px !important; - height: 31px; - flex-grow: 1; + float: left; + margin-right: 10px; + padding: 5px !important; + border-width: 1px !important; + height: 31px; + flex-grow: 1; } .window-filedialog-upload-here { - -webkit-font-smoothing: antialiased; - opacity: 0.7; - font-size: 14px; + -webkit-font-smoothing: antialiased; + opacity: 0.7; + font-size: 14px; } .window-filedialog-upload-here:hover { - cursor: pointer; - opacity: 1; + cursor: pointer; + opacity: 1; } -.savefiledialog-save-btn, .openfiledialog-open-btn { - margin-left: 10px; +.savefiledialog-save-btn, +.openfiledialog-open-btn { + margin-left: 10px; } .filedialog-cancel-btn { - margin-left: 10px; + margin-left: 10px; } .window-action-btn { - margin-right: 5px; - margin-left: 10px; - padding-bottom: 3px; - opacity: 0.6; + margin-right: 5px; + margin-left: 10px; + padding-bottom: 3px; + opacity: 0.6; } .window-active .window-action-btn { - opacity: 1; + opacity: 1; } -.window-action-btn>img { - width: 18px; - margin-top: 5px; - margin-right: 4px; - margin-left: 4px; - opacity: 0.5; - -webkit-user-drag: none; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; +.window-action-btn > img { + width: 18px; + margin-top: 5px; + margin-right: 4px; + margin-left: 4px; + opacity: 0.5; + -webkit-user-drag: none; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } -.window-action-btn:hover>img { - opacity: 1; +.window-action-btn:hover > img { + opacity: 1; } -.window-scale-btn>img { - width: 15px; - height: 15px; - margin-top: 7px +.window-scale-btn > img { + width: 15px; + height: 15px; + margin-top: 7px; } .window-app-iframe { - width: 100%; - height: 100%; - border: none; - margin: 0; - display: block; - height: calc(100%); - pointer-events: none; - overflow: hidden; + width: 100%; + height: 100%; + border: none; + margin: 0; + display: block; + height: calc(100%); + pointer-events: none; + overflow: hidden; } .window-active .window-app-iframe { - pointer-events: all; + pointer-events: all; } .window-disabled .window-app-iframe { - pointer-events: none !important; + pointer-events: none !important; } -.ui-resizable-e, .ui-resizable-w { - cursor: ew-resize; +.ui-resizable-e, +.ui-resizable-w { + cursor: ew-resize; } -.ui-resizable-n, .ui-resizable-s { - cursor: ns-resize; +.ui-resizable-n, +.ui-resizable-s { + cursor: ns-resize; } -.ui-resizable-ne, .ui-resizable-sw { - cursor: nesw-resize; +.ui-resizable-ne, +.ui-resizable-sw { + cursor: nesw-resize; } -.ui-resizable-nw, .ui-resizable-se { - cursor: nwse-resize; +.ui-resizable-nw, +.ui-resizable-se { + cursor: nwse-resize; } -.window>.ui-resizable-nw, .window>.ui-resizable-ne, .window>.ui-resizable-se, .window>.ui-resizable-sw { - width: 15px; - height: 15px; - z-index: 95 !important; +.window > .ui-resizable-nw, +.window > .ui-resizable-ne, +.window > .ui-resizable-se, +.window > .ui-resizable-sw { + width: 15px; + height: 15px; + z-index: 95 !important; } -.window-alert-message, .window-prompt-message { - font-size: 15px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - color: #414650; - text-shadow: 1px 1px #ffffff52; - margin-top: 10px; - word-break: break-word; +.window-alert-message, +.window-prompt-message { + font-size: 15px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #414650; + text-shadow: 1px 1px #ffffff52; + margin-top: 10px; + word-break: break-word; } .window-alert-message { - text-align: center; + text-align: center; } .window-alert-icon { - width: 64px; - margin: 10px auto 20px; - display: block; + width: 64px; + margin: 10px auto 20px; + display: block; } .alert-resp-button { - width: 100%; - margin-top: 10px; + width: 100%; + margin-top: 10px; } .prompt-resp-button { - margin-left: 10px; + margin-left: 10px; } .prompt-resp-btn-ok { - width: 110px; + width: 110px; } .mywebsites-card { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - position: relative; - border: 1px solid #CCC; - padding: 10px; - margin-bottom: 10px; - border-radius: 4px; - background-color: white; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + position: relative; + border: 1px solid #ccc; + padding: 10px; + margin-bottom: 10px; + border-radius: 4px; + background-color: white; } .mywebsites-address-link { - color: #0d6efd; - text-decoration: none; + color: #0d6efd; + text-decoration: none; } .mywebsites-address-link:hover { - text-decoration: underline; + text-decoration: underline; } .mywebsites-dir-path { - cursor: pointer; - font-size: 14px; - margin-bottom: 0; + cursor: pointer; + font-size: 14px; + margin-bottom: 0; } .mywebsites-dir-path img { - width: 16px; - margin-bottom: -3px; - margin-right: 5px; + width: 16px; + margin-bottom: -3px; + margin-right: 5px; } .mywebsites-dir-path:hover { - text-decoration: underline; + text-decoration: underline; } .mywebsites-dis-dir { - cursor: pointer; + cursor: pointer; } .mywebsites-dis-dir:hover { - text-decoration: underline; + text-decoration: underline; } .mywebsites-no-dir-notice { - margin-bottom: 0; - color: #7e7e7e; - font-size: 14px; + margin-bottom: 0; + color: #7e7e7e; + font-size: 14px; } .mywebsites-release-address { - color: red; - cursor: pointer; - font-size: 13px; + color: red; + cursor: pointer; + font-size: 13px; } .mywebsites-site-setting { - position: absolute; - right: 5px; - top: 5px; - cursor: pointer; - width: 20px; - height: 20px; + position: absolute; + right: 5px; + top: 5px; + cursor: pointer; + width: 20px; + height: 20px; } /*********************** @@ -1559,723 +1657,745 @@ span.header-sort-icon img { ***********************/ .context-menu { - display: none; - z-index: 9999999999; - position: absolute; - overflow: hidden; - white-space: nowrap; - font-family: sans-serif; - background: #FFF; - color: #333; - border-radius: 2px; - padding: 3px 0; - min-width: 200px; - background-color: rgba(231, 238, 245, .98); - border: 1px solid #e6e4e466; - box-shadow: 0px 0px 15px #00000066; - padding-left: 6px; - padding-right: 6px; - padding-top: 4px; - padding-bottom: 4px; + display: none; + z-index: 9999999999; + position: absolute; + overflow: hidden; + white-space: nowrap; + font-family: sans-serif; + background: #fff; + color: #333; + border-radius: 2px; + padding: 3px 0; + min-width: 200px; + background-color: rgba(231, 238, 245, 0.98); + border: 1px solid #e6e4e466; + box-shadow: 0px 0px 15px #00000066; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; } .context-menu li { - list-style-type: none; - user-select: none; - cursor: default !important; + list-style-type: none; + user-select: none; + cursor: default !important; } -.context-menu .context-menu-divider>hr { - margin-top: 0; - margin-bottom: 0; - border-bottom: none; - border-top: 1px solid #00000033; +.context-menu .context-menu-divider > hr { + margin-top: 0; + margin-bottom: 0; + border-bottom: none; + border-top: 1px solid #00000033; } .context-menu .context-menu-divider { - padding-top: 5px; - padding-bottom: 5px; + padding-top: 5px; + padding-bottom: 5px; } .context-menu .context-menu-item:not(.context-menu-divider) { - padding: 5px; - list-style-type: none; - user-select: none; - font-size: 12px; - height: 25px; - box-sizing: border-box; - position: relative; + padding: 5px; + list-style-type: none; + user-select: none; + font-size: 12px; + height: 25px; + box-sizing: border-box; + position: relative; } .context-menu .context-menu-item .ctx-item-icon { - width: 15px; - height: 15px; - position: absolute; - left: 5px; - top: 5px; - filter: drop-shadow(0px 0px 0.3px rgb(51, 51, 51)); + width: 15px; + height: 15px; + position: absolute; + left: 5px; + top: 5px; + filter: drop-shadow(0px 0px 0.3px rgb(51, 51, 51)); } .submenu-arrow { - width: 15px; - height: 15px; - float: right; + width: 15px; + height: 15px; + float: right; } .submenu-arrow-active { - display: none; + display: none; } .context-menu-item-active .submenu-arrow { - display: none; - pointer-events: none; + display: none; + pointer-events: none; } .context-menu-item-active .submenu-arrow-active { - display: inline-block; + display: inline-block; } .context-menu .context-menu-item-active-blurred .submenu-arrow { - display: inline-block; + display: inline-block; } .context-menu .context-menu-item-active-blurred .submenu-arrow-active { - display: none; - pointer-events: none; + display: none; + pointer-events: none; } .context-menu .has-open-context-menu-submenu, .context-menu .context-menu-item-active { - border-radius: 4px; + border-radius: 4px; } .context-menu .has-open-context-menu-submenu { - background-color: #dfdfdf; + background-color: #dfdfdf; } .context-menu .context-menu-item-active:not(.context-menu-divider) { - background-color: var(--select-color); - color: white; + background-color: var(--select-color); + color: white; } .context-menu .context-menu-item-active-blurred { - background-color: rgb(199, 205, 212); - color: initial; - border-radius: 4px; + background-color: rgb(199, 205, 212); + color: initial; + border-radius: 4px; } -.context-menu .context-menu-item-disabled, .context-menu .context-menu-item-disabled:hover { - opacity: 0.5; - background-color: transparent; - color: initial; - cursor: initial; +.context-menu .context-menu-item-disabled, +.context-menu .context-menu-item-disabled:hover { + opacity: 0.5; + background-color: transparent; + color: initial; + cursor: initial; } -.context-menu-item-icon, .context-menu-item-icon-active { - display: inline-block; - width: 20px; - text-align: center; - margin-right: 5px; - font-size: 14px; - line-height: 5px; +.context-menu-item-icon, +.context-menu-item-icon-active { + display: inline-block; + width: 20px; + text-align: center; + margin-right: 5px; + font-size: 14px; + line-height: 5px; } -.context-menu-item-icon-active, .contextmenu-label-active { - display: none; +.context-menu-item-icon-active, +.contextmenu-label-active { + display: none; } .context-menu .context-menu-item-active .context-menu-item-icon, .context-menu .context-menu-item-active .contextmenu-label { - display: none; + display: none; } .context-menu .context-menu-item-active .context-menu-item-icon-active { - display: inline-block; + display: inline-block; } -.context-menu .context-menu-item-active:not(.context-menu-item-disabled) .context-menu-item-icon-active { - color: white; +.context-menu + .context-menu-item-active:not(.context-menu-item-disabled) + .context-menu-item-icon-active { + color: white; } .context-menu .context-menu-item-active .contextmenu-label-active { - display: inline-block; + display: inline-block; } .draggable-count-badge { - background-color: red; - border: 2px solid white; - border-radius: 100%; - position: absolute; - display: none; - width: 22px; - height: 22px; - text-align: center; - color: white; - font-weight: bold; - z-index: 9999999999; - font-size: 12px; - line-height: 22px; + background-color: red; + border: 2px solid white; + border-radius: 100%; + position: absolute; + display: none; + width: 22px; + height: 22px; + text-align: center; + color: white; + font-weight: bold; + z-index: 9999999999; + font-size: 12px; + line-height: 22px; } .selection-area { - background-color: #afafaf36; - border: 1px solid #CCC; + background-color: #afafaf36; + border: 1px solid #ccc; } .container { - user-select: none; + user-select: none; } label { - display: block; - -webkit-font-smoothing: antialiased; - color: #3a3d40; - margin-bottom: 3px; - text-shadow: 1px 1px #ffffff61; - font-size: 14px; + display: block; + -webkit-font-smoothing: antialiased; + color: #3a3d40; + margin-bottom: 3px; + text-shadow: 1px 1px #ffffff61; + font-size: 14px; } .toolbar { - float: right; - width: 100%; - background-color: #00000040; - height: 30px; - position: relative; - z-index: 999999; - box-sizing: border-box; - display: flex; - flex-direction: row; - justify-content: flex-end; - align-content: center; - flex-wrap: wrap; - padding-right: 10px + float: right; + width: 100%; + background-color: #00000040; + height: 30px; + position: relative; + z-index: 999999; + box-sizing: border-box; + display: flex; + flex-direction: row; + justify-content: flex-end; + align-content: center; + flex-wrap: wrap; + padding-right: 10px; } .show-desktop-btn { - color: white; - font-size: 11px !important; - padding: 2px 5px 2px !important; - border: 1px solid; - border-radius: 4px; - height: 18px !important; - width: 110px !important; - margin-top: 2px; - text-decoration: none; - margin-left: 10px !important; - font-weight: 500; + color: white; + font-size: 11px !important; + padding: 2px 5px 2px !important; + border: 1px solid; + border-radius: 4px; + height: 18px !important; + width: 110px !important; + margin-top: 2px; + text-decoration: none; + margin-left: 10px !important; + font-weight: 500; } .device-phone .toolbar { - z-index: 1; + z-index: 1; } @supports ((backdrop-filter: blur())) { - .toolbar { - background-color: #00000040; - backdrop-filter: blur(10px); - } + .toolbar { + background-color: #00000040; + backdrop-filter: blur(10px); + } } .toolbar-btn { - padding: 4px; - font-size: 14px; - width: auto; - padding: 0 5px; - margin-left: 20px; - overflow-y: hidden !important; - overflow-x: hidden !important; - background-size: contain; - background-repeat: no-repeat; - background-position: center; - display: inline-block; - width: 22px; - height: 22px; - padding: 3px; - box-sizing: border-box; - background-origin: content-box; - display: flex; - justify-content: center; - align-items: center; - opacity: 0.8; + padding: 4px; + font-size: 14px; + width: auto; + padding: 0 5px; + margin-left: 20px; + overflow-y: hidden !important; + overflow-x: hidden !important; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + display: inline-block; + width: 22px; + height: 22px; + padding: 3px; + box-sizing: border-box; + background-origin: content-box; + display: flex; + justify-content: center; + align-items: center; + opacity: 0.8; } .toolbar-btn:hover { - opacity: 1; + opacity: 1; } .user-options-menu-btn.has-open-contextmenu { - background-color: rgb(255 255 255 / 35%); - border-radius: 3px; + background-color: rgb(255 255 255 / 35%); + border-radius: 3px; } .user-options-menu-username { - color: black; - margin-left: 5px; - display: block; - max-width: 70px; - text-overflow: ellipsis; - float: right; - overflow: hidden; + color: black; + margin-left: 5px; + display: block; + max-width: 70px; + text-overflow: ellipsis; + float: right; + overflow: hidden; } .user-options-menu-username:empty { - margin-left: 0; + margin-left: 0; } -.user-options-login-btn, .user-options-create-account-btn { - padding: 0 15px; +.user-options-login-btn, +.user-options-create-account-btn { + padding: 0 15px; } .toolbar-btn:hover:not(.has-open-contextmenu) { - background-color: rgb(255 255 255 / 15%); - border-radius: 3px; + background-color: rgb(255 255 255 / 15%); + border-radius: 3px; } .logout-btn { - position: absolute; - right: 7px; - top: 7px; - padding: 4px; - border-radius: 4px; - cursor: pointer; - border: 2px solid #CCC; + position: absolute; + right: 7px; + top: 7px; + padding: 4px; + border-radius: 4px; + cursor: pointer; + border: 2px solid #ccc; } .logout-btn img { - width: 20px; - margin-bottom: -5px; + width: 20px; + margin-bottom: -5px; } -.login-error-msg, .signup-error-msg, .publish-website-error-msg, .form-error-msg { - display: none; - color: red; - border: 1px solid red; - border-radius: 4px; - padding: 9px; - margin-bottom: 15px; - text-align: center; - font-size: 13px; +.login-error-msg, +.signup-error-msg, +.publish-website-error-msg, +.form-error-msg { + display: none; + color: red; + border: 1px solid red; + border-radius: 4px; + padding: 9px; + margin-bottom: 15px; + text-align: center; + font-size: 13px; } .error { - display: none; - color: red; - border: 1px solid red; - border-radius: 4px; - padding: 9px; - margin-bottom: 15px; - text-align: center; - font-size: 13px; + display: none; + color: red; + border: 1px solid red; + border-radius: 4px; + padding: 9px; + margin-bottom: 15px; + text-align: center; + font-size: 13px; } .form-success-msg { - display: none; - color: rgb(0, 129, 69); - border: 1px solid rgb(0, 201, 17); - border-radius: 4px; - padding: 9px; - margin-bottom: 15px; - text-align: center; - font-size: 13px; + display: none; + color: rgb(0, 129, 69); + border: 1px solid rgb(0, 201, 17); + border-radius: 4px; + padding: 9px; + margin-bottom: 15px; + text-align: center; + font-size: 13px; } .publish-btn { - margin-top: 20px; + margin-top: 20px; } -.window-publishWebsite-success, .window-give-item-access-success { - display: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - height: auto; +.window-publishWebsite-success, +.window-give-item-access-success { + display: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + height: auto; } .manage-your-websites-link { - color: #007cff; - text-decoration: underline; - cursor: pointer; + color: #007cff; + text-decoration: underline; + cursor: pointer; } .publishWebsite-published-link { - text-decoration: none; - color: #007cff; + text-decoration: none; + color: #007cff; } .publishWebsite-published-link:hover { - text-decoration: underline; + text-decoration: underline; } .publishWebsite-published-link-icon { - display: inline-block; - width: 12px; - margin-left: 5px; - margin-bottom: -1px; - user-select: none !important; + display: inline-block; + width: 12px; + margin-left: 5px; + margin-bottom: -1px; + user-select: none !important; } -.login-form-title, .signup-form-title { - text-align: center; - margin-top: 0; - padding-bottom: 15px; - font-size: 23px; - font-weight: 400; - margin-bottom: 10px; - color: #657489; - text-shadow: 1px 1px #ffffff1c; +.login-form-title, +.signup-form-title { + text-align: center; + margin-top: 0; + padding-bottom: 15px; + font-size: 23px; + font-weight: 400; + margin-bottom: 10px; + color: #657489; + text-shadow: 1px 1px #ffffff1c; } .signup-form-title { - margin-top: 10px; + margin-top: 10px; } -.signup-c2a-clickable, .login-c2a-clickable { - border: none; - background: none; - display: block; - margin: 0 auto; - cursor: pointer; - font-weight: 400; - -webkit-font-smoothing: antialiased; - color: #4f5a68; - font-size: 20px; +.signup-c2a-clickable, +.login-c2a-clickable { + border: none; + background: none; + display: block; + margin: 0 auto; + cursor: pointer; + font-weight: 400; + -webkit-font-smoothing: antialiased; + color: #4f5a68; + font-size: 20px; } -.signup-c2a-clickable:hover, .login-c2a-clickable:hover { - text-decoration: underline; +.signup-c2a-clickable:hover, +.login-c2a-clickable:hover { + text-decoration: underline; } -.p102xyzname, #p102xyzname { - display: none; +.p102xyzname, +#p102xyzname { + display: none; } .intro-menu-item { - text-decoration: none; - color: #398ce7; - font-weight: 400; + text-decoration: none; + color: #398ce7; + font-weight: 400; } .intro-menu-item:hover { - text-decoration: underline; + text-decoration: underline; } .bull { - margin: 10px; - color: #CCC; + margin: 10px; + color: #ccc; } .create-account-form-title { - text-align: center; - margin-top: 0; - padding-bottom: 15px; - font-size: 20px; - font-weight: 300; - margin-bottom: 10px; - color: #383e46; + text-align: center; + margin-top: 0; + padding-bottom: 15px; + font-size: 20px; + font-weight: 300; + margin-bottom: 10px; + color: #383e46; } .create-account-desc { - margin-top: 0; - margin-bottom: 30px; - text-align: center; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - color: #2f3f53; - font-size: 14px; + margin-top: 0; + margin-bottom: 30px; + text-align: center; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #2f3f53; + font-size: 14px; } .unsupported-device-notice { - position: absolute; - width: 100%; - height: 100%; - background-color: white; - z-index: 9999999; - display: none; - flex-direction: column; - justify-content: center; - text-align: center; - padding: 30px; - box-sizing: border-box; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + position: absolute; + width: 100%; + height: 100%; + background-color: white; + z-index: 9999999; + display: none; + flex-direction: column; + justify-content: center; + text-align: center; + padding: 30px; + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .item-props-tabview { - display: flex; - flex-direction: column; - height: 100%; + display: flex; + flex-direction: column; + height: 100%; } .item-props-tab-content { - display: none; - padding: 5px 10px; - flex-grow: 1; - border: 1px solid #CCC; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; - border-top-right-radius: 3px; - border-top-left-radius: 3px; - margin-top: -1px; + display: none; + padding: 5px 10px; + flex-grow: 1; + border: 1px solid #ccc; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; + margin-top: -1px; } .item-props-tab-content-selected { - display: block; - background-color: white; + display: block; + background-color: white; } .item-props-tab-btn { - display: inline-block; - padding: 10px 15px; - cursor: pointer; - margin-right: 10px; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border: 1px solid #ffffff00; - margin-bottom: -1px; - color: #374653; + display: inline-block; + padding: 10px 15px; + cursor: pointer; + margin-right: 10px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border: 1px solid #ffffff00; + margin-bottom: -1px; + color: #374653; } .item-props-tab-selected { - border: 1px solid #CCC; - margin-bottom: -1px; - border-bottom: none; - background-color: white; - position: relative; - color: black; + border: 1px solid #ccc; + margin-bottom: -1px; + border-bottom: none; + background-color: white; + position: relative; + color: black; } .item-props-tbl { - font-size: 13px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + font-size: 13px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .item-props-tbl td { - padding-bottom: 10px; - word-break: break-all; + padding-bottom: 10px; + word-break: break-all; } .item-prop-label { - text-align: left; - font-weight: 500; - white-space: nowrap; + text-align: left; + font-weight: 500; + white-space: nowrap; } -.item-prop-original-name, .item-prop-original-path { - display: none; +.item-prop-original-name, +.item-prop-original-path { + display: none; } .item-prop-version-entry:not(:last-child) { - display: inline-block; - width: 100%; - padding-bottom: 10px; - margin-bottom: 10px; - border-bottom: 1px solid #CCC; + display: inline-block; + width: 100%; + padding-bottom: 10px; + margin-bottom: 10px; + border-bottom: 1px solid #ccc; } .item-prop-val { - padding-left: 10px; + padding-left: 10px; } -.send-conf-email, .conf-email-log-out { - cursor: pointer; +.send-conf-email, +.conf-email-log-out { + cursor: pointer; } .send-conf-code { - cursor: pointer; + cursor: pointer; } .email-confirm-code-hyphen { - display: inline-block; - flex-grow: 1; - text-align: center; - font-size: 40px; - font-weight: 300; + display: inline-block; + flex-grow: 1; + text-align: center; + font-size: 40px; + font-weight: 300; } .confirm-code-hyphen { - display: inline-block; - flex-grow: 1; - text-align: center; - font-size: 40px; - font-weight: 300; + display: inline-block; + flex-grow: 1; + text-align: center; + font-size: 40px; + font-weight: 300; } -.send-conf-email:hover, .conf-email-log-out:hover { - text-decoration: underline; +.send-conf-email:hover, +.conf-email-log-out:hover { + text-decoration: underline; } .send-conf-code:hover { - text-decoration: underline; + text-decoration: underline; } -.remove-permission-link, .disassociate-website-link { - cursor: pointer; - color: red; +.remove-permission-link, +.disassociate-website-link { + cursor: pointer; + color: red; } .permission-owner-badge { - background-color: #9dacbd; + background-color: #9dacbd; } .permission-editor-badge { - background-color: #007cff; + background-color: #007cff; } .permission-viewer-badge { - background-color: #41c95d; + background-color: #41c95d; } -.permission-owner-badge, .permission-editor-badge, .permission-viewer-badge { - display: inline-block; - width: 45px; - text-align: center; - padding: 2px 4px; - border-radius: 2px; - color: white; - font-size: 12px; - margin-right: 10px; - margin-top: -2px; +.permission-owner-badge, +.permission-editor-badge, +.permission-viewer-badge { + display: inline-block; + width: 45px; + text-align: center; + padding: 2px 4px; + border-radius: 2px; + color: white; + font-size: 12px; + margin-right: 10px; + margin-top: -2px; } -.remove-permission-link:hover, .disassociate-website-link:hover { - text-decoration: underline; +.remove-permission-link:hover, +.disassociate-website-link:hover { + text-decoration: underline; } .item-perm-recipient-card { - margin-bottom: 5px; - margin-top: 15px; - padding: 11px; - background-color: white; - border-radius: 3px; - border: 1px solid #e0e0e0; - color: #65707b; - font-size: 13px; + margin-bottom: 5px; + margin-top: 15px; + padding: 11px; + background-color: white; + border-radius: 3px; + border: 1px solid #e0e0e0; + color: #65707b; + font-size: 13px; } .remove-permission-icon { - display: none; - text-decoration: none !important; - color: rgb(184, 184, 184); + display: none; + text-decoration: none !important; + color: rgb(184, 184, 184); } .remove-permission-icon:hover { - color: rgb(109, 109, 109); + color: rgb(109, 109, 109); } .item-perm-recipient-card:hover .remove-permission-icon { - display: block; + display: block; } .share-recipients { - max-height: 200px; - overflow: hidden; - overflow-y: scroll; + max-height: 200px; + overflow: hidden; + overflow-y: scroll; } .ui-menu { - margin-top: 5px; - border-radius: 5px; + margin-top: 5px; + border-radius: 5px; } .ui-menu .ui-menu-item { - padding: 5px 10px; - border-radius: 5px; + padding: 5px 10px; + border-radius: 5px; } .ui-menu .ui-menu-item .ui-menu-item-wrapper { - background: none; - border: none; - padding: 5px 10px; - font-size: 14px; + background: none; + border: none; + padding: 5px 10px; + font-size: 14px; } .ui-menu .ui-menu-item:hover .ui-menu-item-wrapper, .ui-menu .ui-menu-item:focus .ui-menu-item-wrapper, .ui-menu .ui-menu-item:active .ui-menu-item-wrapper, .ui-menu .ui-menu-item .ui-menu-item-wrapper.ui-state-active { - background-color: #4092da; - color: #fff; - border-radius: 5px; - border: 1px solid #4092da; + background-color: #4092da; + color: #fff; + border-radius: 5px; + border: 1px solid #4092da; } .feedback-sent-success { - display: none; - padding: 10px; - margin-bottom: 20px; - border: 1px solid #59d959; - border-radius: 3px; - background-color: #e4f9e4; - position: relative; + display: none; + padding: 10px; + margin-bottom: 20px; + border: 1px solid #59d959; + border-radius: 3px; + background-color: #e4f9e4; + position: relative; } .window-give-item-access-success { - display: none; - padding: 10px; - margin-bottom: 20px; - border: 1px solid #59d959; - border-radius: 3px; - background-color: #e4f9e4; - position: relative; + display: none; + padding: 10px; + margin-bottom: 20px; + border: 1px solid #59d959; + border-radius: 3px; + background-color: #e4f9e4; + position: relative; } .save-account-success { - display: none; - padding: 30px; - border-radius: 3px; - background-color: #f2fff2; - position: relative; - color: green; - -webkit-font-smoothing: antialiased; + display: none; + padding: 30px; + border-radius: 3px; + background-color: #f2fff2; + position: relative; + color: green; + -webkit-font-smoothing: antialiased; } .hide-sharing-success-alert { - position: absolute; - color: #8d8c8c; - font-size: 20px; - right: 15px; - cursor: pointer; + position: absolute; + color: #8d8c8c; + font-size: 20px; + right: 15px; + cursor: pointer; } .hide-sharing-success-alert:hover { - color: black; + color: black; } .access-recipient { - height: 40px; - background-color: white; - margin-bottom: 5px; - width: 100%; + height: 40px; + background-color: white; + margin-bottom: 5px; + width: 100%; } .item-is-shared { - cursor: pointer; + cursor: pointer; } .session-entry { - cursor: pointer; - padding: 20px; - border: 1px solid #CCC; - border-radius: 3px; - margin-bottom: 10px; - background-color: white; - font-weight: 500; - color: #394d5c; + cursor: pointer; + padding: 20px; + border: 1px solid #ccc; + border-radius: 3px; + margin-bottom: 10px; + background-color: white; + font-weight: 500; + color: #394d5c; } .session-entry:hover { - border-color: #00a6ff; + border-color: #00a6ff; } -.login-c2a-session-list, .signup-c2a-session-list { - cursor: pointer; - font-size: 15px; - color: #636363; +.login-c2a-session-list, +.signup-c2a-session-list { + cursor: pointer; + font-size: 15px; + color: #636363; } -.login-c2a-session-list:hover, .signup-c2a-session-list:hover { - text-decoration: underline; - ; +.login-c2a-session-list:hover, +.signup-c2a-session-list:hover { + text-decoration: underline; } /***************************************************** @@ -2283,69 +2403,73 @@ label { *****************************************************/ .taskbar { - position: fixed; - bottom: 0; - left: 0; - width: 100%; - background-color: hsla(var(--taskbar-hue), - var(--taskbar-saturation), - var(--taskbar-lightness), - calc(0.5 + 0.5*var(--taskbar-alpha))); - display: flex; - justify-content: center; - z-index: 99999; - overflow: hidden !important; - - height: 50px; - border-radius: 10px; - bottom: 5px; - padding-left: 7px; - padding-right: 7px; - width: auto; - left: 50%; - transform: translateX(-50%); - - /* that sweet sweet subtle shadow */ - box-shadow: + position: fixed; + bottom: 0; + left: 0; + width: 100%; + background-color: hsla( + var(--taskbar-hue), + var(--taskbar-saturation), + var(--taskbar-lightness), + calc(0.5 + 0.5 * var(--taskbar-alpha)) + ); + display: flex; + justify-content: center; + z-index: 99999; + overflow: hidden !important; + + height: 50px; + border-radius: 10px; + bottom: 5px; + padding-left: 7px; + padding-right: 7px; + width: auto; + left: 50%; + transform: translateX(-50%); + + /* that sweet sweet subtle shadow */ + box-shadow: inset 0 0 0 0.5px rgba(255, 255, 255, 0.2), 0 0 0 0.5px rgba(0, 0, 0, 0.2), 0 4px 16px rgba(0, 0, 0, 0.2); } .taskbar .taskbar-item { - float: left; - position: relative; - overflow: hidden !important; - transition: background-color 0.2s; - display: none; + float: left; + position: relative; + overflow: hidden !important; + transition: background-color 0.2s; + display: none; } -.taskbar .taskbar-item-sortable-placeholder, .taskbar .taskbar-item { - width: 40px; - height: 40px; - padding: 6px 5px 10px 5px; +.taskbar .taskbar-item-sortable-placeholder, +.taskbar .taskbar-item { + width: 40px; + height: 40px; + padding: 6px 5px 10px 5px; } .taskbar .taskbar-item .taskbar-icon { - border-radius: 3px; + border-radius: 3px; } -.taskbar .taskbar-item, .taskbar .taskbar-item * { - -webkit-user-drag: none; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; +.taskbar .taskbar-item, +.taskbar .taskbar-item * { + -webkit-user-drag: none; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; } .taskbar-item.ui-sortable-helper { - margin-left: 25px; - z-index: 999999999 !important; + margin-left: 25px; + z-index: 999999999 !important; } .taskbar .taskbar-item:hover .taskbar-icon { - background-color: rgb(255 255 255 / 40%); - transition: background-color 0.2s; + background-color: rgb(255 255 255 / 40%); + transition: background-color 0.2s; } .taskbar .taskbar-item:active .taskbar-icon, @@ -2356,209 +2480,216 @@ label { .taskbar-item.has-open-popover .taskbar-icon, .taskbar .taskbar-item.active .taskbar-icon, .taskbar-item.ui-sortable-helper .taskbar-icon { - background-color: rgb(255 255 255 / 80%) !important; - transition: background-color 0.2s; - filter: none; + background-color: rgb(255 255 255 / 80%) !important; + transition: background-color 0.2s; + filter: none; } .active-taskbar-indicator { - font-size: 18px; - position: absolute; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - bottom: -6px; - display: none; - width: 9px; - height: 3px; - background-color: #686868; - bottom: 8px; - border-radius: 3px; + font-size: 18px; + position: absolute; + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + bottom: -6px; + display: none; + width: 9px; + height: 3px; + background-color: #686868; + bottom: 8px; + border-radius: 3px; } -.device-phone .active-taskbar-indicator{ - display: none !important; +.device-phone .active-taskbar-indicator { + display: none !important; } .taskbar .taskbar-icon img { - width: 100%; - height: 100%; - filter: drop-shadow(0px 0px 0.2px rgb(51, 51, 51)); - padding: 5px; - box-sizing: border-box; + width: 100%; + height: 100%; + filter: drop-shadow(0px 0px 0.2px rgb(51, 51, 51)); + padding: 5px; + box-sizing: border-box; } .taskbar-icon { - height: 40px; + height: 40px; } #clock { - display: none; - position: absolute; - right: 15px; - color: white; - text-shadow: 0px 0px 3px #00000082, 0px 0px 3px #00000082, 0px 0px 3px #00000082; - font-size: 13px; - bottom: 5px; + display: none; + position: absolute; + right: 15px; + color: white; + text-shadow: + 0px 0px 3px #00000082, + 0px 0px 3px #00000082, + 0px 0px 3px #00000082; + font-size: 13px; + bottom: 5px; } .device-phone #clock { - display: none !important; + display: none !important; } .desktop-bg-settings-wrapper { - display: none; - overflow: hidden; + display: none; + overflow: hidden; } .desktop-bg-color-block { - width: 25px; - height: 25px; - float: left; - margin: 5px; - border: 1px solid #898989; - box-sizing: border-box; - border-radius: 2px; + width: 25px; + height: 25px; + float: left; + margin: 5px; + border: 1px solid #898989; + box-sizing: border-box; + border-radius: 2px; } @supports ((backdrop-filter: blur())) { - .taskbar { - background-color: hsla(var(--taskbar-hue), - var(--taskbar-saturation), - var(--taskbar-lightness), - var(--taskbar-alpha)); - backdrop-filter: blur(10px); - } - - .taskbar .taskbar-icon img { - filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); - } + .taskbar { + background-color: hsla( + var(--taskbar-hue), + var(--taskbar-saturation), + var(--taskbar-lightness), + var(--taskbar-alpha) + ); + backdrop-filter: blur(10px); + } + + .taskbar .taskbar-icon img { + filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); + } } @media screen and (max-width: 768px) { + .taskbar { + justify-content: center; + overflow: visible !important; + overflow-x: scroll !important; + overflow-y: hidden !important; + max-width: calc(100% - 40px); + } - .taskbar { - justify-content: center; - overflow: visible !important; - overflow-x: scroll !important; - overflow-y: hidden !important; - max-width: calc(100% - 40px); - } - - .taskbar .taskbar-item, .taskbar .taskbar-item-sortable-placeholder { - width: 40px !important; - height: 40px !important; - margin-right: 5px; - overflow: visible !important; - padding: 5px 5px 10px 5px; - } - - .taskbar-icon { - height: 40px; - width: 40px; - } - - /* Hide scrollbar for Chrome, Safari and Opera */ - .taskbar ::-webkit-scrollbar { - width: 0 !important; - display: none; - } - - /* Hide scrollbar for IE, Edge and Firefox */ - .taskbar { - -ms-overflow-style: none; - /* IE and Edge */ - scrollbar-width: none; - /* Firefox */ - } - + .taskbar .taskbar-item, + .taskbar .taskbar-item-sortable-placeholder { + width: 40px !important; + height: 40px !important; + margin-right: 5px; + overflow: visible !important; + padding: 5px 5px 10px 5px; + } + + .taskbar-icon { + height: 40px; + width: 40px; + } + + /* Hide scrollbar for Chrome, Safari and Opera */ + .taskbar ::-webkit-scrollbar { + width: 0 !important; + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + .taskbar { + -ms-overflow-style: none; + /* IE and Edge */ + scrollbar-width: none; + /* Firefox */ + } } /***************************************************** * Tooltip *****************************************************/ -.ui-tooltip, .arrow:after { - background-color: rgba(231, 238, 245, .92); - box-shadow: none; +.ui-tooltip, +.arrow:after { + background-color: rgba(231, 238, 245, 0.92); + box-shadow: none; } .ui-tooltip { - padding: 7px 11px; - border-radius: 2px; - font: 14px "Helvetica Neue", Sans-Serif; - border: none !important; - backdrop-filter: blur(3px); - filter: drop-shadow(0 0 3px rgba(0, 0, 0, .455)); + padding: 7px 11px; + border-radius: 2px; + font: + 14px "Helvetica Neue", + Sans-Serif; + border: none !important; + backdrop-filter: blur(3px); + filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.455)); } .arrow { - width: 70px; - height: 16px; - overflow: hidden; - position: absolute; - left: 50%; - margin-left: -35px; - bottom: -16px; - border-top: none; + width: 70px; + height: 16px; + overflow: hidden; + position: absolute; + left: 50%; + margin-left: -35px; + bottom: -16px; + border-top: none; } .arrow.top { - top: -16px; - bottom: auto; + top: -16px; + bottom: auto; } .arrow.left { - left: 20%; + left: 20%; } .arrow:after { - content: ""; - position: absolute; - left: 20px; - top: -20px; - width: 25px; - height: 25px; - -webkit-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); + content: ""; + position: absolute; + left: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); } .arrow.top:after { - bottom: -20px; - top: auto; + bottom: -20px; + top: auto; } /******************************************************/ .font-selector { - padding: 10px; - border-radius: 2px; - margin: 10px 0; - scroll-margin: 10px 0; + padding: 10px; + border-radius: 2px; + margin: 10px 0; + scroll-margin: 10px 0; } .font-selector-active { - color: white; - background-color: #2b62f1; + color: white; + background-color: #2b62f1; } /******************************************************/ /* Window Snapping */ /******************************************************/ .window-snap-placeholder { - display: none; - transition: all 0.2s; - position: absolute; - box-sizing: border-box; - padding: 10px; - backdrop-filter: blur(5px); + display: none; + transition: all 0.2s; + position: absolute; + box-sizing: border-box; + padding: 10px; + backdrop-filter: blur(5px); } .window-snap-placeholder-inner { - border-radius: 4px; - width: 100%; - height: 100%; - background-color: rgba(245, 245, 245, 0.7); + border-radius: 4px; + width: 100%; + height: 100%; + background-color: rgba(245, 245, 245, 0.7); } /***************************************************** @@ -2566,706 +2697,721 @@ label { *****************************************************/ .popover { - position: absolute; - display: none; - z-index: 9999999; - box-sizing: border-box; - border-radius: 4px; - overflow: hidden; - box-shadow: 0px 0px 15px #00000066; + position: absolute; + display: none; + z-index: 9999999; + box-sizing: border-box; + border-radius: 4px; + overflow: hidden; + box-shadow: 0px 0px 15px #00000066; } @supports ((backdrop-filter: blur())) { - .launch-popover { - background-color: rgba(231, 238, 245, .92); - backdrop-filter: blur(3px); - } + .launch-popover { + background-color: rgba(231, 238, 245, 0.92); + backdrop-filter: blur(3px); + } } .popover-apps-item { - clear: both; - margin-bottom: 10px; - overflow: hidden; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - padding: 5px; - + clear: both; + margin-bottom: 10px; + overflow: hidden; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding: 5px; } .popover-apps-item:hover { - background-color: #a5c8f3; - border-radius: 4px; + background-color: #a5c8f3; + border-radius: 4px; } .popover-apps-item img { - float: left; - filter: drop-shadow(0px 0px 0.75px rgb(51, 51, 51)); + float: left; + filter: drop-shadow(0px 0px 0.75px rgb(51, 51, 51)); } .popover-apps-item span { - line-height: 47px; - display: block; - float: left; - margin-left: 10px; + line-height: 47px; + display: block; + float: left; + margin-left: 10px; } .device-phone .popover { - height: calc(100vh - 65px); - height: calc(100dvh - 65px); - top: 0 !important; - left: 0 !important; - width: 100%; - padding: 0; - margin: 0; + height: calc(100vh - 65px); + height: calc(100dvh - 65px); + top: 0 !important; + left: 0 !important; + width: 100%; + padding: 0; + margin: 0; } /***************************************************** * Notification *****************************************************/ -.notification, .notification-wrapper { - width: 320px; - border-radius: 11px; +.notification, +.notification-wrapper { + width: 320px; + border-radius: 11px; } .notification { - min-height: 54px; - background: #ffffffcd; - backdrop-filter: blur(5px); - z-index: 99999999; - box-shadow: 0px 0px 17px -9px #000; - border: 1px solid #d5d5d5; - margin-bottom: 10px; - display: flex; - flex-direction: row; - pointer-events: all; + min-height: 54px; + background: #ffffffcd; + backdrop-filter: blur(5px); + z-index: 99999999; + box-shadow: 0px 0px 17px -9px #000; + border: 1px solid #d5d5d5; + margin-bottom: 10px; + display: flex; + flex-direction: row; + pointer-events: all; } .notification-wrapper { - overflow: visible; + overflow: visible; } .notification-close { - position: absolute; - background: white; - border-radius: 100%; - top: -6px; - left: -6px; - width: 13px; - padding: 2px; - filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); - z-index: 99999999; - display: none; + position: absolute; + background: white; + border-radius: 100%; + top: -6px; + left: -6px; + width: 13px; + padding: 2px; + filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); + z-index: 99999999; + display: none; } .notification:hover .notification-close { - display: block; + display: block; } .notification-icon { - width: 40px; - margin: 10px 5px 10px 15px; - border-radius: 50%; - display: flex; - justify-content: center; - align-items: center; - filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); + width: 40px; + margin: 10px 5px 10px 15px; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); } .notification-icon img { - width: 35px; - height: 35px; + width: 35px; + height: 35px; } .notification-title { - font-size: 12px; - font-weight: 600; + font-size: 12px; + font-weight: 600; } .notification-text { - font-size: 12px; - margin-top: 4px; + font-size: 12px; + margin-top: 4px; } .notification-content { - flex-grow: 1; - display: flex; - flex-direction: column; - padding: 10px; + flex-grow: 1; + display: flex; + flex-direction: column; + padding: 10px; } .notification-container { - position: absolute; - top: 40px; - right: 10px; - z-index: 1000; - padding-top: 30px; - pointer-events: none; + position: absolute; + top: 40px; + right: 10px; + z-index: 1000; + padding-top: 30px; + pointer-events: none; } .notifications-close-all { - opacity: 0; - position: absolute; - top: 0px; - right: 0px; - background-color: #d5d9dc; - padding: 3px 7px; - border-radius: 3px; - border: 1px solid #d5d5d5; - font-size: 12px; - transition: 0.15s; - pointer-events: none; - cursor: pointer; - filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); + opacity: 0; + position: absolute; + top: 0px; + right: 0px; + background-color: #d5d9dc; + padding: 3px 7px; + border-radius: 3px; + border: 1px solid #d5d5d5; + font-size: 12px; + transition: 0.15s; + pointer-events: none; + cursor: pointer; + filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); } .notifications-close-all:hover { - background-color: #dee1e3; + background-color: #dee1e3; } .notification-container.has-multiple { - pointer-events: all; + pointer-events: all; } .notification-container.has-multiple:hover .notifications-close-all { - pointer-events: all; - opacity: 1 !important; + pointer-events: all; + opacity: 1 !important; } /***************************************************** * Start *****************************************************/ .launch-popover { - width: 530px; - height: 500px; - padding: 20px 20px 20px; - border: 1px solid #bbc2c9; - border-radius: 4px; - background-color: rgba(231, 238, 245, .92); - backdrop-filter: blur(3px); - box-sizing: border-box; - overflow-y: scroll; + width: 530px; + height: 500px; + padding: 20px 20px 20px; + border: 1px solid #bbc2c9; + border-radius: 4px; + background-color: rgba(231, 238, 245, 0.92); + backdrop-filter: blur(3px); + box-sizing: border-box; + overflow-y: scroll; } .close-launch-popover { - position: absolute; - top: 2px; - right: 3px; - display: none; + position: absolute; + top: 2px; + right: 3px; + display: none; } .device-phone .close-launch-popover { - display: block; + display: block; } .device-phone .launch-popover { - width: 100vw; - height: 100vh; - height: 100dvh; - background-color: rgba(231, 238, 245); + width: 100vw; + height: 100vh; + height: 100dvh; + background-color: rgba(231, 238, 245); } .start-section-heading { - font-size: 13px; - margin: 0; - padding: 0; - height: 15px; - margin-left: 5px; - margin-right: 5px; - border-bottom: 1px solid #CCC; - padding-bottom: 10px; - color: #677a86; - clear: both; + font-size: 13px; + margin: 0; + padding: 0; + height: 15px; + margin-left: 5px; + margin-right: 5px; + border-bottom: 1px solid #ccc; + padding-bottom: 10px; + color: #677a86; + clear: both; } .start-app-card { - height: 100px; - width: 20%; - float: left; - display: flex; - flex-direction: column; - justify-content: center; - box-sizing: content-box; + height: 100px; + width: 20%; + float: left; + display: flex; + flex-direction: column; + justify-content: center; + box-sizing: content-box; } .start-app { - width: 70px; - height: 70px; - text-align: center; - overflow: hidden; - margin: 0 auto; - padding: 5px; - display: flex; - flex-direction: column; - justify-content: center; - border-radius: 4px; - transition: 0.1s background-color; + width: 70px; + height: 70px; + text-align: center; + overflow: hidden; + margin: 0 auto; + padding: 5px; + display: flex; + flex-direction: column; + justify-content: center; + border-radius: 4px; + transition: 0.1s background-color; } .start-app-icon { - filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); - display: block; - margin: 0 auto; - width: 38px; - height: 38px; - margin-top: 2px; + filter: drop-shadow(0px 0px 0.5px rgb(51, 51, 51)); + display: block; + margin: 0 auto; + width: 38px; + height: 38px; + margin-top: 2px; } .start-app.ui-draggable-dragging { - background-color: transparent !important; - width: 40px !important; - height: 40px !important; + background-color: transparent !important; + width: 40px !important; + height: 40px !important; } .start-app.ui-draggable-dragging img { - width: 26px !important; - height: 26px !important; + width: 26px !important; + height: 26px !important; } .start-app.ui-draggable-dragging .start-app-title { - display: none; + display: none; } -.start-app:hover, .launch-app-selected .start-app { - background-color: #ffffff; +.start-app:hover, +.launch-app-selected .start-app { + background-color: #ffffff; } .start-app:active { - background-color: white; + background-color: white; } .start-app-title { - font-size: 12px; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - text-overflow: ellipsis; - display: block; - margin-top: 8px; - width: 100%; - box-sizing: border-box; - white-space: nowrap; - overflow: hidden; + font-size: 12px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-overflow: ellipsis; + display: block; + margin-top: 8px; + width: 100%; + box-sizing: border-box; + white-space: nowrap; + overflow: hidden; } /* UIWindowEmailConfirmationRequired */ -fieldset[name=number-code] { - min-width: 0; - /* Fix for Firefox */ - display: flex; - justify-content: space-between; - gap: 5px; +fieldset[name="number-code"] { + min-width: 0; + /* Fix for Firefox */ + display: flex; + justify-content: space-between; + gap: 5px; } .digit-input { - min-width: 0; - /* Fix for Firefox */ - box-sizing: border-box; - flex-grow: 1; - height: 50px; - font-size: 25px; - text-align: center; - border-radius: 0.5rem; - -moz-appearance: textfield; - border: 2px solid #9b9b9b; - color: #485660; + min-width: 0; + /* Fix for Firefox */ + box-sizing: border-box; + flex-grow: 1; + height: 50px; + font-size: 25px; + text-align: center; + border-radius: 0.5rem; + -moz-appearance: textfield; + border: 2px solid #9b9b9b; + color: #485660; } .digit-input::-webkit-outer-spin-button, .digit-input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; + -webkit-appearance: none; + margin: 0; } .pulse { - display: block; - float: left; - width: 5px; - height: 5px; - border-radius: 50%; - background: #ffffff; - animation: pulse-white 1.5s infinite; - margin: 0; - margin-top: 8px; + display: block; + float: left; + width: 5px; + height: 5px; + border-radius: 50%; + background: #ffffff; + animation: pulse-white 1.5s infinite; + margin: 0; + margin-top: 8px; } .forgot-password-link { - cursor: pointer; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-size: 13px; + cursor: pointer; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-size: 13px; } .forgot-password-link:hover { - text-decoration: underline; + text-decoration: underline; } .pulse-dark { - display: block; - float: left; - width: 5px; - height: 5px; - border-radius: 50%; - background: #3f3f3f; - cursor: pointer; - animation: pulse-dark 1.5s infinite; - margin-top: -7px; - margin-left: 7px; + display: block; + float: left; + width: 5px; + height: 5px; + border-radius: 50%; + background: #3f3f3f; + cursor: pointer; + animation: pulse-dark 1.5s infinite; + margin-top: -7px; + margin-left: 7px; } .context-menu-item-icon-active .pulse { - margin-top: -7px; - margin-left: 7px; + margin-top: -7px; + margin-left: 7px; } -.qr-code-window-close-btn, .generic-close-window-button { - position: absolute; - top: 0px; - right: 0; - font-size: 20px; - cursor: pointer !important; - color: #5f626d; - opacity: 0.5; - cursor: initial; - padding: 2px 10px 0 10px; +.qr-code-window-close-btn, +.generic-close-window-button { + position: absolute; + top: 0px; + right: 0; + font-size: 20px; + cursor: pointer !important; + color: #5f626d; + opacity: 0.5; + cursor: initial; + padding: 2px 10px 0 10px; } -.qr-code-window-close-btn:hover, .generic-close-window-button { - opacity: 1; +.qr-code-window-close-btn:hover, +.generic-close-window-button { + opacity: 1; } .welcome-window-close-button { - opacity: 0.7; - font-weight: 300; - top: 5px; - right: 5px; + opacity: 0.7; + font-weight: 300; + top: 5px; + right: 5px; } .welcome-window-close-button:hover { - opacity: 1; + opacity: 1; } .otp-qr-code { - width: 100%; - display: flex; - justify-content: center; - flex-direction: column; - align-items: center; + width: 100%; + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; } .otp-qr-code img { - width: 355px; - margin-bottom: 20px; + width: 355px; + margin-bottom: 20px; } .otp-as-text { - margin: 20px 0; + margin: 20px 0; } .perm-title { - text-align: center; - margin-top: 0; - padding-bottom: 15px; - font-size: 20px; - font-weight: 400; - margin-bottom: 10px; - color: #4b586a; - text-shadow: 1px 1px #ffffff1c; + text-align: center; + margin-top: 0; + padding-bottom: 15px; + font-size: 20px; + font-weight: 400; + margin-bottom: 10px; + color: #4b586a; + text-shadow: 1px 1px #ffffff1c; } .perm-description { - text-align: center; - font-size: 15px; - -webkit-font-smoothing: antialiased; - padding: 0 10px; - color: #2d3847; - margin-top: 5px; - margin-bottom: 5px; + text-align: center; + font-size: 15px; + -webkit-font-smoothing: antialiased; + padding: 0 10px; + color: #2d3847; + margin-top: 5px; + margin-bottom: 5px; } @-webkit-keyframes pulse-white { - 0% { - -webkit-box-shadow: 0 0 0 0 rgb(255, 255, 255); - } + 0% { + -webkit-box-shadow: 0 0 0 0 rgb(255, 255, 255); + } - 70% { - -webkit-box-shadow: 0 0 0 px rgba(204, 169, 44, 0); - } + 70% { + -webkit-box-shadow: 0 0 0 px rgba(204, 169, 44, 0); + } - 100% { - -webkit-box-shadow: 0 0 0 0 rgba(204, 169, 44, 0); - } + 100% { + -webkit-box-shadow: 0 0 0 0 rgba(204, 169, 44, 0); + } } @keyframes pulse-white { - 0% { - -moz-box-shadow: 0 0 0 0 rgb(255, 255, 255); - box-shadow: 0 0 0 0 rgb(255, 255, 255); - } + 0% { + -moz-box-shadow: 0 0 0 0 rgb(255, 255, 255); + box-shadow: 0 0 0 0 rgb(255, 255, 255); + } - 70% { - -moz-box-shadow: 0 0 0 6px rgba(204, 169, 44, 0); - box-shadow: 0 0 0 6px rgba(204, 169, 44, 0); - } + 70% { + -moz-box-shadow: 0 0 0 6px rgba(204, 169, 44, 0); + box-shadow: 0 0 0 6px rgba(204, 169, 44, 0); + } - 100% { - -moz-box-shadow: 0 0 0 0 rgba(204, 169, 44, 0); - box-shadow: 0 0 0 0 rgba(204, 169, 44, 0); - } + 100% { + -moz-box-shadow: 0 0 0 0 rgba(204, 169, 44, 0); + box-shadow: 0 0 0 0 rgba(204, 169, 44, 0); + } } @-webkit-keyframes pulse-dark { - 0% { - -webkit-box-shadow: 0 0 0 0 #3f3f3f; - } + 0% { + -webkit-box-shadow: 0 0 0 0 #3f3f3f; + } - 70% { - -webkit-box-shadow: 0 0 0 6px #0267ff00; - } + 70% { + -webkit-box-shadow: 0 0 0 6px #0267ff00; + } - 100% { - -webkit-box-shadow: 0 0 0 0 #0267ff00; - } + 100% { + -webkit-box-shadow: 0 0 0 0 #0267ff00; + } } @keyframes pulse-dark { - 0% { - -moz-box-shadow: 0 0 0 0 #3f3f3f; - box-shadow: 0 0 0 0 #3f3f3f; - } + 0% { + -moz-box-shadow: 0 0 0 0 #3f3f3f; + box-shadow: 0 0 0 0 #3f3f3f; + } - 70% { - -moz-box-shadow: 0 0 0 6px #0267ff00; - box-shadow: 0 0 0 6px #0267ff00; - } + 70% { + -moz-box-shadow: 0 0 0 6px #0267ff00; + box-shadow: 0 0 0 6px #0267ff00; + } - 100% { - -moz-box-shadow: 0 0 0 0 #0267ff00; - box-shadow: 0 0 0 0 #0267ff00; - } + 100% { + -moz-box-shadow: 0 0 0 0 #0267ff00; + box-shadow: 0 0 0 0 #0267ff00; + } } .progress-bar-container { - box-sizing: border-box; - width: 100%; - height: 17px; - border: 1px solid rgb(40 109 157); - border-radius: 3px; - background-color: white; - box-shadow: inset -1px 3px 4px #dfdfdf; + box-sizing: border-box; + width: 100%; + height: 17px; + border: 1px solid rgb(40 109 157); + border-radius: 3px; + background-color: white; + box-shadow: inset -1px 3px 4px #dfdfdf; } .progress-bar { - width: 0; - height: 100%; - background-color: rgb(0 137 255); - transition: 0.4s width; - background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.05)); + width: 0; + height: 100%; + background-color: rgb(0 137 255); + transition: 0.4s width; + background-image: linear-gradient( + to bottom, + rgba(255, 255, 255, 0.3), + rgba(255, 255, 255, 0.05) + ); } /* Hide scrollbar for Chrome, Safari and Opera */ .hide-scrollbar::-webkit-scrollbar { - width: 0 !important; - display: none; + width: 0 !important; + display: none; } /* Hide scrollbar for IE, Edge and Firefox */ .hide-scrollbar { - -ms-overflow-style: none; - /* IE and Edge */ - scrollbar-width: none; - /* Firefox */ + -ms-overflow-style: none; + /* IE and Edge */ + scrollbar-width: none; + /* Firefox */ } /******************************************************/ -.allow-user-select, .allow-user-select * { - user-select: text; +.allow-user-select, +.allow-user-select * { + user-select: text; } @keyframes spin { - to { - -webkit-transform: rotate(360deg); - } + to { + -webkit-transform: rotate(360deg); + } } @-webkit-keyframes spin { - to { - -webkit-transform: rotate(360deg); - } + to { + -webkit-transform: rotate(360deg); + } } @supports ((backdrop-filter: blur())) { - .window-head { - background-color: hsla(var(--window-head-hue), - var(--window-head-saturation), - var(--window-head-lightness), - var(--window-head-alpha)); - backdrop-filter: blur(10px); - } - - .notification { - background-color: hsla(var(--window-head-hue), - var(--window-head-saturation), - var(--window-head-lightness), - var(--window-head-alpha)); - backdrop-filter: blur(10px); - } - - .device-phone .window-head { - background-color: rgba(231, 238, 245); - backdrop-filter: blur(10px); - } - - .window-sidebar { - /* background-color: var(--puter-window-background); */ - background-color: hsla(var(--window-sidebar-hue), - var(--window-sidebar-saturation), - var(--window-sidebar-lightness), - var(--window-sidebar-alpha)); - backdrop-filter: blur(10px); - } - - .window-snap-placeholder { - backdrop-filter: blur(5px); - } - - .context-menu { - background-color: rgb(255 255 255 / 92%); - backdrop-filter: blur(3px); - } - - .popover:not(.device-phone .popover) { - background-color: rgb(238, 243, 248); - backdrop-filter: blur(10px); - } + .window-head { + background-color: hsla( + var(--window-head-hue), + var(--window-head-saturation), + var(--window-head-lightness), + var(--window-head-alpha) + ); + backdrop-filter: blur(10px); + } + + .notification { + background-color: hsla( + var(--window-head-hue), + var(--window-head-saturation), + var(--window-head-lightness), + var(--window-head-alpha) + ); + backdrop-filter: blur(10px); + } + + .device-phone .window-head { + background-color: rgba(231, 238, 245); + backdrop-filter: blur(10px); + } + + .window-sidebar { + /* background-color: var(--puter-window-background); */ + background-color: hsla( + var(--window-sidebar-hue), + var(--window-sidebar-saturation), + var(--window-sidebar-lightness), + var(--window-sidebar-alpha) + ); + backdrop-filter: blur(10px); + } + + .window-snap-placeholder { + backdrop-filter: blur(5px); + } + + .context-menu { + background-color: rgb(255 255 255 / 92%); + backdrop-filter: blur(3px); + } + + .popover:not(.device-phone .popover) { + background-color: rgb(238, 243, 248); + backdrop-filter: blur(10px); + } } @-moz-keyframes three-quarters-loader { - 0% { - -moz-transform: rotate(0deg); - transform: rotate(0deg); - } + 0% { + -moz-transform: rotate(0deg); + transform: rotate(0deg); + } - 100% { - -moz-transform: rotate(360deg); - transform: rotate(360deg); - } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } } @-webkit-keyframes three-quarters-loader { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } } @keyframes three-quarters-loader { - 0% { - -moz-transform: rotate(0deg); - -ms-transform: rotate(0deg); - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } + 0% { + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } - 100% { - -moz-transform: rotate(360deg); - -ms-transform: rotate(360deg); - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } + 100% { + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } } .hidden { - display: none; + display: none; } .invisible { - visibility: hidden; + visibility: hidden; } .login-progress { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; } .dl-conf-item-attr { - width: 60px; - text-align: right; - display: inline-block; - margin-right: 10px; + width: 60px; + text-align: right; + display: inline-block; + margin-right: 10px; } .launch-search { - border-radius: 5px; - background-repeat: no-repeat; - width: 100%; - box-sizing: border-box; - background-color: white; - padding: 5px; - background-size: 20px; - background-position-y: center; - background-position-x: 5px; - padding-left: 35px; - padding-right: 35px; - border: 2px solid #CCC; + border-radius: 5px; + background-repeat: no-repeat; + width: 100%; + box-sizing: border-box; + background-color: white; + padding: 5px; + background-size: 20px; + background-position-y: center; + background-position-x: 5px; + padding-left: 35px; + padding-right: 35px; + border: 2px solid #ccc; } .launch-search-wrapper { - margin-bottom: 10px; - padding: 5px; - position: relative; + margin-bottom: 10px; + padding: 5px; + position: relative; } .device-phone .launch-search-wrapper { - margin-top: 15px; + margin-top: 15px; } .launch-search-clear { - display: none; - position: absolute; - right: 8px; - top: 8px; - height: 28px; - opacity: 0.5; + display: none; + position: absolute; + right: 8px; + top: 8px; + height: 28px; + opacity: 0.5; } .launch-search-clear:hover { - opacity: 1; + opacity: 1; } -.launch-app-selected {} - +.launch-app-selected { +} .website-badge-popover-title { - font-size: 14px; - margin: -10px; - margin-bottom: 5px; - padding: 8px 10px; - background: #e5e5e5; - color: #4b5f6f; + font-size: 14px; + margin: -10px; + margin-bottom: 5px; + padding: 8px 10px; + background: #e5e5e5; + color: #4b5f6f; } .website-badge-popover-content { - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - width: 270px; - padding: 10px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + width: 270px; + padding: 10px; } -.website-badge-popover-link, .website-badge-popover-link:visited { - color: #0073ed; - text-decoration: none; - width: 179px; +.website-badge-popover-link, +.website-badge-popover-link:visited { + color: #0073ed; + text-decoration: none; + width: 179px; } .website-badge-popover-link:hover { - text-decoration: underline; + text-decoration: underline; } /*! @@ -3276,247 +3422,246 @@ fieldset[name=number-code] { * Copyright (c) 2020 Animate.css */ :root { - --animate-duration: 1s; - --animate-delay: 1s; - --animate-repeat: 1; + --animate-duration: 1s; + --animate-delay: 1s; + --animate-repeat: 1; } .animate__animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-duration: var(--animate-duration); - animation-duration: var(--animate-duration); - -webkit-animation-fill-mode: both; - animation-fill-mode: both; + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-duration: var(--animate-duration); + animation-duration: var(--animate-duration); + -webkit-animation-fill-mode: both; + animation-fill-mode: both; } /* Zooming entrances */ @-webkit-keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } - 50% { - opacity: 1; - } + 50% { + opacity: 1; + } } @keyframes zoomIn { - from { - opacity: 0; - -webkit-transform: scale3d(0.3, 0.3, 0.3); - transform: scale3d(0.3, 0.3, 0.3); - } + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } - 50% { - opacity: 1; - } + 50% { + opacity: 1; + } } .animate__zoomIn { - -webkit-animation-name: zoomIn; - animation-name: zoomIn; + -webkit-animation-name: zoomIn; + animation-name: zoomIn; } @-webkit-keyframes fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } } @keyframes fadeInRight { - from { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } - to { - opacity: 1; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } } .animate__fadeInRight { - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; } .animate__animated.animate__slow { - -webkit-animation-duration: calc(1s * 2); - animation-duration: calc(1s * 2); - -webkit-animation-duration: calc(var(--animate-duration) * 2); - animation-duration: calc(var(--animate-duration) * 2); + -webkit-animation-duration: calc(1s * 2); + animation-duration: calc(1s * 2); + -webkit-animation-duration: calc(var(--animate-duration) * 2); + animation-duration: calc(var(--animate-duration) * 2); } @-webkit-keyframes fadeOutRight { - from { - opacity: 1; - } + from { + opacity: 1; + } - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } } @keyframes fadeOutRight { - from { - opacity: 1; - } + from { + opacity: 1; + } - to { - opacity: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } } .animate__fadeOutRight { - -webkit-animation-name: fadeOutRight; - animation-name: fadeOutRight; + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; } :root { - --animate-duration: 300ms; - /* --animate-delay: 0.9s; */ + --animate-duration: 300ms; + /* --animate-delay: 0.9s; */ } .animate__animated.animate__faster { - -webkit-animation-duration: calc(1s / 2); - animation-duration: calc(1s / 2); - -webkit-animation-duration: calc(var(--animate-duration) / 2); - animation-duration: calc(var(--animate-duration) / 2); + -webkit-animation-duration: calc(1s / 2); + animation-duration: calc(1s / 2); + -webkit-animation-duration: calc(var(--animate-duration) / 2); + animation-duration: calc(var(--animate-duration) / 2); } .antialiased { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .share-copy-link-on-social { - float: right; - width: 30px; - cursor: pointer; - margin-top: 2px; + float: right; + width: 30px; + cursor: pointer; + margin-top: 2px; } .copy-link-social-btn { - margin: 10px; - display: inline-block; - width: 20px; - height: 20px; + margin: 10px; + display: inline-block; + width: 20px; + height: 20px; } .copy-link-social-btn img { - width: 20px; - height: 20px; + width: 20px; + height: 20px; } - .puter-auth-dialog { - outline: none; - display: block; - width: 100% !important; + outline: none; + display: block; + width: 100% !important; } .puter-auth-dialog { - outline: none; + outline: none; } .puter-auth-dialog-content { - border: 1px solid #e8e8e8; - border-radius: 8px; - padding: 20px; - background: white; - box-shadow: 0 0 9px 1px rgb(0 0 0 / 21%); - padding: 80px 20px; - -webkit-font-smoothing: antialiased; - color: #575762; - position: relative; - background-image: url('data:image/webp;base64,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'); - background-repeat: no-repeat; - background-position: center center; - background-size: 100% 100%; - background-color: #fff; - height: 100%; - box-sizing: border-box; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; + border: 1px solid #e8e8e8; + border-radius: 8px; + padding: 20px; + background: white; + box-shadow: 0 0 9px 1px rgb(0 0 0 / 21%); + padding: 80px 20px; + -webkit-font-smoothing: antialiased; + color: #575762; + position: relative; + background-image: url("data:image/webp;base64,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"); + background-repeat: no-repeat; + background-position: center center; + background-size: 100% 100%; + background-color: #fff; + height: 100%; + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; } .puter-auth-dialog * { - max-width: 500px; - font-family: "Helvetica Neue", HelveticaNeue, Helvetica, Arial, sans-serif; + max-width: 500px; + font-family: "Helvetica Neue", HelveticaNeue, Helvetica, Arial, sans-serif; } .puter-auth-dialog p.about { - text-align: center; - font-size: 17px; - padding: 10px 30px; - font-weight: 400; - -webkit-font-smoothing: antialiased; - color: #404048; - box-sizing: border-box; + text-align: center; + font-size: 17px; + padding: 10px 30px; + font-weight: 400; + -webkit-font-smoothing: antialiased; + color: #404048; + box-sizing: border-box; } .puter-auth-dialog .buttons { - display: flex; - justify-content: center; - align-items: center; - flex-wrap: wrap; - margin-top: 20px; - text-align: center; - margin-bottom: 20px; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + margin-top: 20px; + text-align: center; + margin-bottom: 20px; } .launch-auth-popup-footnote { - font-size: 11px; - color: #666; - margin-top: 10px; - /* footer at the bottom */ - position: absolute; - left: 0; - right: 0; - bottom: 10px; - text-align: center; - margin: 0 10px; + font-size: 11px; + color: #666; + margin-top: 10px; + /* footer at the bottom */ + position: absolute; + left: 0; + right: 0; + bottom: 10px; + text-align: center; + margin: 0 10px; } .signup-terms { - font-size: 11px; - color: #666; - margin-top: 10px; - bottom: 10px; - text-align: center; - margin: 10px 0 15px; + font-size: 11px; + color: #666; + margin-top: 10px; + bottom: 10px; + text-align: center; + margin: 10px 0 15px; } .puter-auth-dialog .close-btn { - position: absolute; - right: 15px; - top: 10px; - font-size: 17px; - color: #8a8a8a; - cursor: pointer; + position: absolute; + right: 15px; + top: 10px; + font-size: 17px; + color: #8a8a8a; + cursor: pointer; } .puter-auth-dialog .close-btn:hover { - color: #000; + color: #000; } /** @@ -3526,92 +3671,125 @@ fieldset[name=number-code] { */ .puter-auth-dialog .button { - color: #666666; - background-color: #eeeeee; - border-color: #eeeeee; - font-size: 14px; - text-decoration: none; - text-align: center; - line-height: 40px; - height: 35px; - padding: 0 30px; - margin: 0; - display: inline-block; - appearance: none; - cursor: pointer; - border: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-color: #b9b9b9; - border-style: solid; - border-width: 1px; - line-height: 35px; - background: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e1e1e1)); - background: linear-gradient(#f6f6f6, #e1e1e1); - -webkit-box-shadow: inset 0px 1px 0px rgb(255 255 255 / 30%), 0 1px 2px rgb(0 0 0 / 15%); - box-shadow: inset 0px 1px 0px rgb(255 255 255 / 30%), 0 1px 2px rgb(0 0 0 / 15%); - border-radius: 4px; - outline: none; - -webkit-font-smoothing: antialiased; + color: #666666; + background-color: #eeeeee; + border-color: #eeeeee; + font-size: 14px; + text-decoration: none; + text-align: center; + line-height: 40px; + height: 35px; + padding: 0 30px; + margin: 0; + display: inline-block; + appearance: none; + cursor: pointer; + border: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-color: #b9b9b9; + border-style: solid; + border-width: 1px; + line-height: 35px; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#f6f6f6), + to(#e1e1e1) + ); + background: linear-gradient(#f6f6f6, #e1e1e1); + -webkit-box-shadow: + inset 0px 1px 0px rgb(255 255 255 / 30%), + 0 1px 2px rgb(0 0 0 / 15%); + box-shadow: + inset 0px 1px 0px rgb(255 255 255 / 30%), + 0 1px 2px rgb(0 0 0 / 15%); + border-radius: 4px; + outline: none; + -webkit-font-smoothing: antialiased; } .puter-auth-dialog .button:focus-visible { - border-color: rgb(118 118 118); -} - -.puter-auth-dialog .button:active, .puter-auth-dialog .button.active, .puter-auth-dialog .button.is-active, .puter-auth-dialog .button.has-open-contextmenu { - text-decoration: none; - background-color: #eeeeee; - border-color: #cfcfcf; - color: #a9a9a9; - -webkit-transition-duration: 0s; - transition-duration: 0s; - -webkit-box-shadow: inset 0 1px 3px rgb(0 0 0 / 20%); - box-shadow: inset 0px 2px 3px rgb(0 0 0 / 36%), 0px 1px 0px white; -} - -.puter-auth-dialog .button.disabled, .puter-auth-dialog .button.is-disabled, .puter-auth-dialog .button:disabled { - top: 0 !important; - background: #EEE !important; - border: 1px solid #DDD !important; - text-shadow: 0 1px 1px white !important; - color: #CCC !important; - cursor: default !important; - appearance: none !important; - pointer-events: none; -} - -.puter-auth-dialog .button-action.disabled, .puter-auth-dialog .button-action.is-disabled, .puter-auth-dialog .button-action:disabled { - background: #55a975 !important; - border: 1px solid #60ab7d !important; - text-shadow: none !important; - color: #CCC !important; -} - -.puter-auth-dialog .button-primary.disabled, .puter-auth-dialog .button-primary.is-disabled, .puter-auth-dialog .button-primary:disabled { - background: #8fc2e7 !important; - border: 1px solid #98adbd !important; - text-shadow: none !important; - color: #f5f5f5 !important; + border-color: rgb(118 118 118); +} + +.puter-auth-dialog .button:active, +.puter-auth-dialog .button.active, +.puter-auth-dialog .button.is-active, +.puter-auth-dialog .button.has-open-contextmenu { + text-decoration: none; + background-color: #eeeeee; + border-color: #cfcfcf; + color: #a9a9a9; + -webkit-transition-duration: 0s; + transition-duration: 0s; + -webkit-box-shadow: inset 0 1px 3px rgb(0 0 0 / 20%); + box-shadow: + inset 0px 2px 3px rgb(0 0 0 / 36%), + 0px 1px 0px white; +} + +.puter-auth-dialog .button.disabled, +.puter-auth-dialog .button.is-disabled, +.puter-auth-dialog .button:disabled { + top: 0 !important; + background: #eee !important; + border: 1px solid #ddd !important; + text-shadow: 0 1px 1px white !important; + color: #ccc !important; + cursor: default !important; + appearance: none !important; + pointer-events: none; +} + +.puter-auth-dialog .button-action.disabled, +.puter-auth-dialog .button-action.is-disabled, +.puter-auth-dialog .button-action:disabled { + background: #55a975 !important; + border: 1px solid #60ab7d !important; + text-shadow: none !important; + color: #ccc !important; +} + +.puter-auth-dialog .button-primary.disabled, +.puter-auth-dialog .button-primary.is-disabled, +.puter-auth-dialog .button-primary:disabled { + background: #8fc2e7 !important; + border: 1px solid #98adbd !important; + text-shadow: none !important; + color: #f5f5f5 !important; } .puter-auth-dialog .button-block { - width: 100%; + width: 100%; } .puter-auth-dialog .button-primary { - border-color: #088ef0; - background: -webkit-gradient(linear, left top, left bottom, from(#34a5f8), to(#088ef0)); - background: linear-gradient(#34a5f8, #088ef0); - color: white; + border-color: #088ef0; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#34a5f8), + to(#088ef0) + ); + background: linear-gradient(#34a5f8, #088ef0); + color: white; } .puter-auth-dialog .button-danger { - border-color: #f00808; - background: -webkit-gradient(linear, left top, left bottom, from(#f83434), to(#f00808)); - background: linear-gradient(#f83434, #f00808); - color: white; + border-color: #f00808; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#f83434), + to(#f00808) + ); + background: linear-gradient(#f83434, #f00808); + color: white; } .puter-auth-dialog .button-primary:active, @@ -3620,16 +3798,22 @@ fieldset[name=number-code] { .puter-auth-dialog .button-primary-flat:active, .puter-auth-dialog .button-primary-flat.active, .puter-auth-dialog .button-primary-flat.is-active { - background-color: #2798eb; - border-color: #2798eb; - color: #bedef5; + background-color: #2798eb; + border-color: #2798eb; + color: #bedef5; } .puter-auth-dialog .button-action { - border-color: #08bf4e; - background: -webkit-gradient(linear, left top, left bottom, from(#29d55d), to(#1ccd60)); - background: linear-gradient(#29d55d, #1ccd60); - color: white; + border-color: #08bf4e; + background: -webkit-gradient( + linear, + left top, + left bottom, + from(#29d55d), + to(#1ccd60) + ); + background: linear-gradient(#29d55d, #1ccd60); + color: white; } .puter-auth-dialog .button-action:active, @@ -3638,103 +3822,104 @@ fieldset[name=number-code] { .puter-auth-dialog .button-action-flat:active, .puter-auth-dialog .button-action-flat.active, .puter-auth-dialog .button-action-flat.is-active { - background-color: #27eb41; - border-color: #27eb41; - color: #bef5ca; + background-color: #27eb41; + border-color: #27eb41; + color: #bef5ca; } .puter-auth-dialog .button-giant { - font-size: 28px; - height: 70px; - line-height: 70px; - padding: 0 70px; + font-size: 28px; + height: 70px; + line-height: 70px; + padding: 0 70px; } .puter-auth-dialog .button-jumbo { - font-size: 24px; - height: 60px; - line-height: 60px; - padding: 0 60px; + font-size: 24px; + height: 60px; + line-height: 60px; + padding: 0 60px; } .puter-auth-dialog .button-large { - font-size: 20px; - height: 50px; - line-height: 50px; - padding: 0 50px; + font-size: 20px; + height: 50px; + line-height: 50px; + padding: 0 50px; } .puter-auth-dialog .button-normal { - font-size: 16px; - height: 40px; - line-height: 38px; - padding: 0 40px; + font-size: 16px; + height: 40px; + line-height: 38px; + padding: 0 40px; } .puter-auth-dialog .button-small { - height: 30px; - line-height: 29px; - padding: 0 30px; + height: 30px; + line-height: 29px; + padding: 0 30px; } .puter-auth-dialog .button-tiny { - font-size: 9.6px; - height: 24px; - line-height: 24px; - padding: 0 24px; + font-size: 9.6px; + height: 24px; + line-height: 24px; + padding: 0 24px; } #launch-auth-popup { - margin-left: 10px; - width: 200px; - font-weight: 500; - font-size: 15px; + margin-left: 10px; + width: 200px; + font-weight: 500; + font-size: 15px; } .puter-auth-dialog .button-auth { - margin-bottom: 10px; + margin-bottom: 10px; } -.puter-auth-dialog a, .puter-auth-dialog a:visited { - color: rgb(0 69 238); - text-decoration: none; +.puter-auth-dialog a, +.puter-auth-dialog a:visited { + color: rgb(0 69 238); + text-decoration: none; } .puter-auth-dialog a:hover { - text-decoration: underline; + text-decoration: underline; } -@media (max-width:480px) { - .puter-auth-dialog-content { - padding: 50px 20px; - } +@media (max-width: 480px) { + .puter-auth-dialog-content { + padding: 50px 20px; + } - .puter-auth-dialog .buttons { - flex-direction: column-reverse; - } + .puter-auth-dialog .buttons { + flex-direction: column-reverse; + } - .puter-auth-dialog p.about { - padding: 10px 0; - } + .puter-auth-dialog p.about { + padding: 10px 0; + } - .puter-auth-dialog .button-auth { - width: 100% !important; - margin: 0 !important; - margin-bottom: 10px !important; - } + .puter-auth-dialog .button-auth { + width: 100% !important; + margin: 0 !important; + margin-bottom: 10px !important; + } } .loading { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - background-color: #ebebebc2; - display: flex; - justify-content: center; - align-items: center; - display: none; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background-color: #ebebebc2; + display: flex; + justify-content: center; + align-items: center; + display: none; } /*! @@ -3744,544 +3929,614 @@ fieldset[name=number-code] { */ .settings-container { - display: flex; - flex-direction: column; - height: 100%; + display: flex; + flex-direction: column; + height: 100%; } .settings { - display: flex; - flex-direction: row; - -webkit-font-smoothing: antialiased; - flex-grow: 1; - position: relative; + display: flex; + flex-direction: row; + -webkit-font-smoothing: antialiased; + flex-grow: 1; + position: relative; } .settings-sidebar { - width: 200px; - background-color: #f9f9f9; - border-right: 1px solid #e0e0e0; - padding: 20px; - position: relative; - margin-top: 1px; + width: 200px; + background-color: #f9f9f9; + border-right: 1px solid #e0e0e0; + padding: 20px; + position: relative; + margin-top: 1px; } .settings-sidebar-title { - margin-bottom: 20px; - font-weight: bold; - -webkit-font-smoothing: antialiased; - margin-top: 15px; - color: #8c8c8c; - font-size: 19px; + margin-bottom: 20px; + font-weight: bold; + -webkit-font-smoothing: antialiased; + margin-top: 15px; + color: #8c8c8c; + font-size: 19px; } .settings-sidebar-item { - cursor: pointer; - border-radius: 4px; - padding: 10px; - margin-bottom: 15px; - background-repeat: no-repeat; - background-position: 10px center; - background-size: 25px; - padding-left: 45px; - font-size: 15px; + cursor: pointer; + border-radius: 4px; + padding: 10px; + margin-bottom: 15px; + background-repeat: no-repeat; + background-position: 10px center; + background-size: 25px; + padding-left: 45px; + font-size: 15px; } .settings-sidebar-item:hover { - background-color: #e8e8e8; + background-color: #e8e8e8; } .settings-sidebar-item.active { - background-color: #e0e0e0; + background-color: #e0e0e0; } .settings-content-container { - flex: 1; - padding: 20px 30px; - height: 500px; - overflow-y: auto; + flex: 1; + padding: 20px 30px; + height: 500px; + overflow-y: auto; } .settings-content { - display: none; - max-width: 800px; - margin: auto; + display: none; + max-width: 800px; + margin: auto; } .settings-content[data-settings="about"] { - height: 100%; + height: 100%; } .settings-content h1 { - font-size: 24px; - margin-bottom: 20px; - border-bottom: 1px solid #e0e0e0; - padding-bottom: 10px; - padding-left: 5px; - font-weight: 500; + font-size: 24px; + margin-bottom: 20px; + border-bottom: 1px solid #e0e0e0; + padding-bottom: 10px; + padding-left: 5px; + font-weight: 500; } .settings-content.active { - display: block; + display: block; } .settings-content .about-container { - height: 100%; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; } .settings-content[data-settings="about"] a { - color: #1663d4; - text-decoration: none; - font-size: 12px; + color: #1663d4; + text-decoration: none; + font-size: 12px; } .settings-content[data-settings="about"] a:hover { - text-decoration: underline; + text-decoration: underline; } .settings-content .logo, .settings-content .logo img { - display: block; - width: 55px; - height: 55px; - margin: 0 auto; - border-radius: 4px; + display: block; + width: 55px; + height: 55px; + margin: 0 auto; + border-radius: 4px; } .settings-content .links { - text-align: center; - font-size: 14px; - margin-top: 10px; + text-align: center; + font-size: 14px; + margin-top: 10px; } .settings-content .social-links { - text-align: center; - /* margin-top: 10px; */ + text-align: center; + /* margin-top: 10px; */ } .settings-content .social-links a { - opacity: 0.7; - transition: opacity 0.1s ease-in-out; + opacity: 0.7; + transition: opacity 0.1s ease-in-out; } .settings-content .social-links a, .settings-content .social-links a:hover { - text-decoration: none; - margin: 0 10px; - + text-decoration: none; + margin: 0 10px; } .settings-content .social-links a:hover { - opacity: 1; + opacity: 1; } .settings-content .social-links svg { - width: 20px; - height: 20px; + width: 20px; + height: 20px; } .settings-content .about { - text-align: center; - display: flex; - flex-direction: column; - justify-content: center; - padding: 20px 40px; - max-width: 500px; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + padding: 20px 40px; + max-width: 500px; } .about-container .about { - text-align: center; + text-align: center; } .settings-content .version { - font-size: 9px; - color: #343c4f; - text-align: center; - margin-bottom: 10px; - opacity: 0.3; - transition: opacity 0.1s ease-in-out; - height: 12px; + font-size: 9px; + color: #343c4f; + text-align: center; + margin-bottom: 10px; + opacity: 0.3; + transition: opacity 0.1s ease-in-out; + height: 12px; } .settings-content .version:hover { - opacity: 1; + opacity: 1; } .profile-picture { - cursor: pointer; - position: relative; - overflow: hidden; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - border: 1px solid #EEE; - width: 120px; - height: 120px; - border-radius: 50%; - margin-right: 0; - margin-top: 20px; - margin-bottom: 20px; - background-color: #c5cdd4; + cursor: pointer; + position: relative; + overflow: hidden; + background-position: center; + background-size: cover; + background-repeat: no-repeat; + border: 1px solid #eee; + width: 120px; + height: 120px; + border-radius: 50%; + margin-right: 0; + margin-top: 20px; + margin-bottom: 20px; + background-color: #c5cdd4; } .profile-picture:hover { - background-color: #a6afb7; + background-color: #a6afb7; } -.profile-image-has-picture{ - border: 1px solid white; +.profile-image-has-picture { + border: 1px solid white; } -.driver-usage { - background-color: white; - bottom: 0; + +/* Default avatar styling when no profile picture is set */ +.profile-picture:not(.profile-image-has-picture), +.profile-image:not(.profile-image-has-picture) { + background-color: #c5cdd4; + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +/* Ensure proper sizing for default avatar icon */ +.profile-picture:not(.profile-image-has-picture):hover, +.profile-image:not(.profile-image-has-picture):hover { + background-color: #a6afb7; + background-size: cover; +} + +/* Profile Picture Container and Actions */ +.profile-picture-container { + display: flex; + flex-direction: column; + align-items: center; + margin-bottom: 20px; + overflow: hidden; +} + +.profile-picture-actions { + display: flex; + gap: 10px; + margin-top: 15px; + justify-content: center; + flex-wrap: wrap; +} + +.profile-picture-actions .button { + font-size: 14px; + height: 35px; + padding: 0 15px; + min-width: 100px; +} + +.remove-profile-picture { + border-color: #f00808; + background: linear-gradient(#f83434, #f00808); + color: white; +} + +.remove-profile-picture:hover { + background: linear-gradient(#f52d2d, #e00707); + border-color: #e00707; +} + +.remove-profile-picture:active { + background-color: #d00606; + border-color: #d00606; + color: #ffcccc; +} + +/* Responsive design for smaller screens */ +@media (max-width: 480px) { + .profile-picture-actions { + flex-direction: column; + align-items: center; + gap: 8px; + } + + .profile-picture-actions .button { width: 100%; - box-sizing: border-box; - color: #3c4963; - height: 85px; + max-width: 200px; + } +} + +.driver-usage { + background-color: white; + bottom: 0; + width: 100%; + box-sizing: border-box; + color: #3c4963; + height: 85px; } .credits { - padding: 0; - border: 1px solid #bfbfbf; - box-shadow: 1px 1px 10px 0px #8a8a8a; - width: 400px; + padding: 0; + border: 1px solid #bfbfbf; + box-shadow: 1px 1px 10px 0px #8a8a8a; + width: 400px; } .credit-content a { - font-size: 15px; + font-size: 15px; } .credits .credit-content { - padding: 20px; + padding: 20px; } .credit-content { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .credit-content ul { - max-height: 300px; - overflow-y: scroll; - background: #f4f4f4; - padding: 10px; - box-shadow: 2px 2px 5px 2px inset #CCC; - + max-height: 300px; + overflow-y: scroll; + background: #f4f4f4; + padding: 10px; + box-shadow: 2px 2px 5px 2px inset #ccc; } .credit-content li { - margin-bottom: 10px; + margin-bottom: 10px; } #storage-bar-wrapper { - width: 100%; - height: 20px; - border: 1px solid #8a9096; - border-radius: 3px; - background-color: #fff; - position: relative; - display: flex; - align-items: center; + width: 100%; + height: 20px; + border: 1px solid #8a9096; + border-radius: 3px; + background-color: #fff; + position: relative; + display: flex; + align-items: center; } #storage-bar { - float: left; - height: 20px; - background: linear-gradient(#dbe3ef, #c2ccdc, #dbe3ef); - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; - width: 0; + float: left; + height: 20px; + background: linear-gradient(#dbe3ef, #c2ccdc, #dbe3ef); + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + width: 0; } #storage-bar-host { - float: left; - height: 100%; - background: linear-gradient(#dbe3ef, #c2ccdc, #dbe3ef); - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; - width: 0; + float: left; + height: 100%; + background: linear-gradient(#dbe3ef, #c2ccdc, #dbe3ef); + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + width: 0; } #storage-used-percent { - position: absolute; - text-align: center; - display: inline-block; - width: 100%; - font-size: 13px; + position: absolute; + text-align: center; + display: inline-block; + width: 100%; + font-size: 13px; } .usage-progbar-wrapper { - width: 100%; - height: 20px; - border: 1px solid #8a9096; - border-radius: 3px; - background-color: #fff; - position: relative; - display: flex; - align-items: center; + width: 100%; + height: 20px; + border: 1px solid #8a9096; + border-radius: 3px; + background-color: #fff; + position: relative; + display: flex; + align-items: center; } .usage-progbar { - float: left; - height: 20px; - background: linear-gradient(#dbe3ef, #c2ccdc, #dbe3ef); - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; - width: 0; + float: left; + height: 20px; + background: linear-gradient(#dbe3ef, #c2ccdc, #dbe3ef); + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + width: 0; } .usage-progbar-percent { - position: absolute; - left: calc(50% - 20px); - text-align: center; - display: inline-block; - width: 40px; - font-size: 13px; - line-height: 20px; + position: absolute; + left: calc(50% - 20px); + text-align: center; + display: inline-block; + width: 40px; + font-size: 13px; + line-height: 20px; } .version { - font-size: 9px; - color: #343c4f; - text-align: center; - margin-bottom: 10px; - opacity: 0.3; - transition: opacity 0.1s ease-in-out; - height: 12px; + font-size: 9px; + color: #343c4f; + text-align: center; + margin-bottom: 10px; + opacity: 0.3; + transition: opacity 0.1s ease-in-out; + height: 12px; } .version#version-placeholder { - margin-top: 10px; - margin-bottom: 0; + margin-top: 10px; + margin-bottom: 0; } .version:hover { - opacity: 1; + opacity: 1; } .language-list { - display: grid; - grid-template-columns: 33.333333333% 33.333333333% 33.333333333%; + display: grid; + grid-template-columns: 33.333333333% 33.333333333% 33.333333333%; } .language-item { - cursor: pointer; - padding: 10px; - border-radius: 4px; - margin-bottom: 10px; - margin-right: 10px; - font-size: 13px; - position: relative; + cursor: pointer; + padding: 10px; + border-radius: 4px; + margin-bottom: 10px; + margin-right: 10px; + font-size: 13px; + position: relative; } .language-item:hover { - background-color: #f6f6f6; + background-color: #f6f6f6; } .language-item .checkmark { - width: 15px; - height: 15px; - border-radius: 50%; - margin-left: 10px; - display: none; - position: absolute; - right: 10px; + width: 15px; + height: 15px; + border-radius: 50%; + margin-left: 10px; + display: none; + position: absolute; + right: 10px; } .language-item.active { - background-color: #e0e0e0; + background-color: #e0e0e0; } .language-item.active .checkmark { - display: inline-block; + display: inline-block; } .settings-card { - overflow: hidden; - padding: 10px 15px; - border: 1px solid; - border-radius: 4px; - background: #f7f7f7a1; - border: 1px solid #cccccc8f; - margin-bottom: 20px; - display: flex; - flex-direction: row; - align-items: center; - height: 45px; + overflow: hidden; + padding: 10px 15px; + border: 1px solid; + border-radius: 4px; + background: #f7f7f7a1; + border: 1px solid #cccccc8f; + margin-bottom: 20px; + display: flex; + flex-direction: row; + align-items: center; + height: 45px; } .settings-card .button { - box-shadow: none; + box-shadow: none; } .thin-card { - padding: 0 15px; + padding: 0 15px; } .settings-card strong { - font-weight: 500; + font-weight: 500; } .settings-card-danger { - border-color: #f0080866; - background: #ffecec; - color: rgb(215 2 2); + border-color: #f0080866; + background: #ffecec; + color: rgb(215 2 2); } .settings-card-success { - border-color: #08bf4e; - background: #e6ffed; - color: #03933a; + border-color: #08bf4e; + background: #e6ffed; + color: #03933a; } .settings-card-warning { - border-color: #f0a500; - background: #fff7e6; - color: #c98900; + border-color: #f0a500; + background: #fff7e6; + color: #c98900; } .error-message { - display: none; - color: rgb(215 2 2); - font-size: 14px; - margin-top: 10px; - margin-bottom: 10px; - padding: 10px; - border-radius: 4px; - border: 1px solid rgb(215 2 2); - text-align: center; + display: none; + color: rgb(215 2 2); + font-size: 14px; + margin-top: 10px; + margin-bottom: 10px; + padding: 10px; + border-radius: 4px; + border: 1px solid rgb(215 2 2); + text-align: center; } .account-deletion-confirmation-prompt { - text-align: center; - font-size: 16px; - padding: 20px; - font-weight: 400; - margin: -10px 10px 20px 10px; - -webkit-font-smoothing: antialiased; - color: #5f626d; + text-align: center; + font-size: 16px; + padding: 20px; + font-weight: 400; + margin: -10px 10px 20px 10px; + -webkit-font-smoothing: antialiased; + color: #5f626d; } .account-deletion-confirmation-icon { - width: 70px; - margin: 20px auto 20px; - display: block; - margin-bottom: 20px; + width: 70px; + margin: 20px auto 20px; + display: block; + margin-bottom: 20px; } .proceed-with-user-deletion { - margin-bottom: 20px; + margin-bottom: 20px; } .confirm-temporary-user-deletion { - width: 100%; - margin-bottom: 20px; + width: 100%; + margin-bottom: 20px; } .confirm-user-deletion-password { - width: 100%; - margin-bottom: 20px; + width: 100%; + margin-bottom: 20px; } .session-manager-list { - display: flex; - flex-direction: column; - gap: 10px; - padding: 10px; - box-sizing: border-box; - height: 100% !important; + display: flex; + flex-direction: column; + gap: 10px; + padding: 10px; + box-sizing: border-box; + height: 100% !important; } .session-widget { - display: flex; - flex-direction: column; - padding: 10px; - border: 1px solid #e0e0e0; - border-radius: 4px; - gap: 4px; + display: flex; + flex-direction: column; + padding: 10px; + border: 1px solid #e0e0e0; + border-radius: 4px; + gap: 4px; } .current-session.session-widget { - background-color: #f0f0f0; + background-color: #f0f0f0; } .session-widget-uuid { - font-size: 12px; - font-weight: 600; - color: #9c185b; + font-size: 12px; + font-weight: 600; + color: #9c185b; } .session-widget-meta { - display: flex; - flex-direction: column; - gap: 10px; - max-height: 100px; - overflow-y: scroll; + display: flex; + flex-direction: column; + gap: 10px; + max-height: 100px; + overflow-y: scroll; } .session-widget-meta-entry { - display: flex; - flex-direction: row; - align-items: center; + display: flex; + flex-direction: row; + align-items: center; } .session-widget-meta-key { - font-size: 12px; - color: #666; - flex-basis: 40%; - flex-shrink: 0; + font-size: 12px; + color: #666; + flex-basis: 40%; + flex-shrink: 0; } .session-widget-meta-value { - font-size: 12px; - color: #666; - flex-grow: 1; + font-size: 12px; + color: #666; + flex-grow: 1; } .session-widget-actions { - display: flex; - flex-direction: row; - gap: 10px; - justify-content: flex-end; + display: flex; + flex-direction: row; + gap: 10px; + justify-content: flex-end; } /* Extra small devices (phones, less than 576px) */ @media (max-width: 575.98px) { - .hidden-xs { - display: none !important; - } + .hidden-xs { + display: none !important; + } } /* Small devices (landscape phones, 576px and up) */ @media (min-width: 576px) and (max-width: 767.98px) { - .hidden-sm { - display: none !important; - } + .hidden-sm { + display: none !important; + } } /* Medium devices (tablets, 768px and up) */ @media (min-width: 768px) and (max-width: 991.98px) { - .hidden-md { - display: none !important; - } + .hidden-md { + display: none !important; + } } /* Large devices (desktops, 992px and up) */ @media (min-width: 992px) and (max-width: 1199.98px) { - .hidden-lg { - display: none !important; - } + .hidden-lg { + display: none !important; + } } /* Extra large devices (large desktops, 1200px and up) */ @media (min-width: 1200px) { - .hidden-xl { - display: none !important; - } + .hidden-xl { + display: none !important; + } } /* Visible classes */ @@ -4290,97 +4545,97 @@ fieldset[name=number-code] { .visible-md, .visible-lg, .visible-xl { - display: none !important; + display: none !important; } @media (max-width: 575.98px) { - .visible-xs { - display: block !important; - } + .visible-xs { + display: block !important; + } - .settings-sidebar { - display: none; - position: fixed; - height: 100%; - z-index: 9; - } + .settings-sidebar { + display: none; + position: fixed; + height: 100%; + z-index: 9; + } } @media (min-width: 576px) and (max-width: 767.98px) { - .visible-sm { - display: block !important; - } + .visible-sm { + display: block !important; + } - .settings-sidebar { - display: none; - position: fixed; - height: 100%; - z-index: 9; - } + .settings-sidebar { + display: none; + position: fixed; + height: 100%; + z-index: 9; + } } @media (min-width: 768px) and (max-width: 991.98px) { - .visible-md { - display: block !important; - } + .visible-md { + display: block !important; + } } @media (min-width: 992px) and (max-width: 1199.98px) { - .visible-lg { - display: block !important; - } + .visible-lg { + display: block !important; + } } @media (min-width: 1200px) { - .visible-xl { - display: block !important; - } + .visible-xl { + display: block !important; + } } .sidebar-toggle { - position: absolute; - z-index: 9999999999; - left: 2px; - border: 0; - padding-top: 5px; - padding-bottom: 5px; - top: 3px; + position: absolute; + z-index: 9999999999; + left: 2px; + border: 0; + padding-top: 5px; + padding-bottom: 5px; + top: 3px; } .sidebar-toggle .sidebar-toggle-button { - height: 20px; - width: 20px; + height: 20px; + width: 20px; } .sidebar-toggle span:nth-child(1) { - margin-top: 5px; + margin-top: 5px; } .sidebar-toggle span { - border-bottom: 2px solid #858585; - display: block; - margin-bottom: 5px; - width: 100%; + border-bottom: 2px solid #858585; + display: block; + margin-bottom: 5px; + width: 100%; } .settings-sidebar.active { - display: block; + display: block; } .welcome-window-footer { - position: absolute; - bottom: 20px; + position: absolute; + bottom: 20px; } .welcome-window-footer a { - color: #727c8d; - text-decoration: none; - font-size: 12px; - -webkit-font-smoothing: antialiased; + color: #727c8d; + text-decoration: none; + font-size: 12px; + -webkit-font-smoothing: antialiased; } .welcome-window-footer a:hover { - color: #1d1e23; + color: #1d1e23; } /* @@ -4389,311 +4644,314 @@ fieldset[name=number-code] { * ------------------------------------ */ .search-input-wrapper { - width: 100%; - border-radius: 5px; - padding-bottom: 10px; - padding-top: 20px; - position: absolute; - padding-left: 15px; - padding-right: 15px; - box-sizing: border-box; - background: #f1f6fc; + width: 100%; + border-radius: 5px; + padding-bottom: 10px; + padding-top: 20px; + position: absolute; + padding-left: 15px; + padding-right: 15px; + box-sizing: border-box; + background: #f1f6fc; } .search-input { - padding-left: 33px !important; - background-repeat: no-repeat; - background-position: 5px center; - background-size: 20px; + padding-left: 33px !important; + background-repeat: no-repeat; + background-position: 5px center; + background-size: 20px; } .search-results { - padding-right: 15px; - margin-top: 70px; - padding-left: 15px; - padding-right: 15px; - padding-bottom: 5px; - display: none; + padding-right: 15px; + margin-top: 70px; + padding-left: 15px; + padding-right: 15px; + padding-bottom: 5px; + display: none; } .search-result { - padding: 10px; - cursor: pointer; - font-size: 13px; - display: flex; - align-items: center; + padding: 10px; + cursor: pointer; + font-size: 13px; + display: flex; + align-items: center; } .search-result-active { - background-color: #4092da; - color: #fff; - border-radius: 5px; + background-color: #4092da; + color: #fff; + border-radius: 5px; } .search-results .search-result:last-child { - margin-bottom: 0; + margin-bottom: 0; } -.device-phone .window:not(.window-alert), .device-tablet .window:not(.window-alert) { - transform: none; - width: 100%; +.device-phone .window:not(.window-alert), +.device-tablet .window:not(.window-alert) { + transform: none; + width: 100%; } -.device-phone .window.window-explore{ - border-radius: 0; - height: 100dvh !important; +.device-phone .window.window-explore { + border-radius: 0; + height: 100dvh !important; } -.device-phone .window.window-search{ - left: 50% !important; - transform: translateX(-50%) !important; - width: calc(100% - 40px); - max-width: calc(100% - 40px); - max-height: fit-content; - border-radius: 5px; - +.device-phone .window.window-search { + left: 50% !important; + transform: translateX(-50%) !important; + width: calc(100% - 40px); + max-width: calc(100% - 40px); + max-height: fit-content; + border-radius: 5px; } -.device-phone .window.window-qr, .device-phone .window.window-progress, .device-phone .window.window-login-progress{ - left: 50% !important; - transform: translate(-50%) !important; - height: initial !important; - max-width: calc(100% - 30px); +.device-phone .window.window-qr, +.device-phone .window.window-progress, +.device-phone .window.window-login-progress { + left: 50% !important; + transform: translate(-50%) !important; + height: initial !important; + max-width: calc(100% - 30px); } -.device-phone .window.window-refer-friend{ - left: 50% !important; - transform: translate(-50%) !important; - height: initial !important; - max-width: calc(100% - 30px); +.device-phone .window.window-refer-friend { + left: 50% !important; + transform: translate(-50%) !important; + height: initial !important; + max-width: calc(100% - 30px); } .device-phone .window.window-task-manager { - height: initial !important; + height: initial !important; } -.device-phone .window.window-feedback{ - height: initial !important; +.device-phone .window.window-feedback { + height: initial !important; } -.device-phone .window.window-filedialog{ - transform: none; - width: 100% !important; - left: 0 !important; - min-height: 100dvh; - height: 100dvh; - top: 0 !important; - border-radius: 0 !important; +.device-phone .window.window-filedialog { + transform: none; + width: 100% !important; + left: 0 !important; + min-height: 100dvh; + height: 100dvh; + top: 0 !important; + border-radius: 0 !important; } -.device-phone .window.window-app{ - transform: none; - width: 100%; - left: 0; - height: 100dvh; - min-height: 100dvh; - top: 0 !important; - border-radius: 0; +.device-phone .window.window-app { + transform: none; + width: 100%; + left: 0; + height: 100dvh; + min-height: 100dvh; + top: 0 !important; + border-radius: 0; } -.device-phone .window.window-login-2fa{ - left: 50% !important; - transform: translate(-50%) !important; - height: initial !important; - max-width: calc(100% - 30px); +.device-phone .window.window-login-2fa { + left: 50% !important; + transform: translate(-50%) !important; + height: initial !important; + max-width: calc(100% - 30px); } -.device-phone .window.window-explorer{ - transform: none; - width: 100%; - left: 0; - min-height: 100dvh; - height: 100dvh; - top: 0 !important; - border-radius: 0 !important; +.device-phone .window.window-explorer { + transform: none; + width: 100%; + left: 0; + min-height: 100dvh; + height: 100dvh; + top: 0 !important; + border-radius: 0 !important; } -.device-phone .window.window-settings{ - transform: none; - width: 100% !important; - left: 0 !important; - height: 100dvh; - top: 0 !important; - border-radius: 0; +.device-phone .window.window-settings { + transform: none; + width: 100% !important; + left: 0 !important; + height: 100dvh; + top: 0 !important; + border-radius: 0; } -.device-phone .window-signup{ - transform: none; - width: 100% ; - left: 0; - top: 50%; - transform: translateY(-50%); - border-radius: 0; +.device-phone .window-signup { + transform: none; + width: 100%; + left: 0; + top: 50%; + transform: translateY(-50%); + border-radius: 0; } -.device-phone .send-feedback-btn{ - width: 100%; +.device-phone .send-feedback-btn { + width: 100%; } /* Taskbar container */ .device-phone .taskbar { - /* Enable smooth scrolling */ - -webkit-overflow-scrolling: touch; - /* Allow horizontal touch scrolling */ - touch-action: pan-x; - /* Enable horizontal scroll */ - overflow-x: auto; - /* Hide scrollbars while keeping functionality */ - scrollbar-width: none; - -ms-overflow-style: none; - - /* Base styling */ - display: flex; - justify-content: left; + /* Enable smooth scrolling */ + -webkit-overflow-scrolling: touch; + /* Allow horizontal touch scrolling */ + touch-action: pan-x; + /* Enable horizontal scroll */ + overflow-x: auto; + /* Hide scrollbars while keeping functionality */ + scrollbar-width: none; + -ms-overflow-style: none; + + /* Base styling */ + display: flex; + justify-content: left; } /* Hide scrollbar while keeping functionality */ .device-phone .taskbar::-webkit-scrollbar { - display: none; + display: none; } /* Taskbar items */ .device-phone .taskbar .taskbar-item { - /* Allow dragging while preventing unwanted touch actions */ - touch-action: pan-x pinch-zoom; - /* Ensure items can be dragged */ - user-select: none; - -webkit-user-select: none; - cursor: grab; - - /* Base styling */ - display: flex; - align-items: center; - justify-content: center; -} -.device-phone .popover-launcher, .device-phone .launch-popover{ - border-radius: 0; + /* Allow dragging while preventing unwanted touch actions */ + touch-action: pan-x pinch-zoom; + /* Ensure items can be dragged */ + user-select: none; + -webkit-user-select: none; + cursor: grab; + + /* Base styling */ + display: flex; + align-items: center; + justify-content: center; +} +.device-phone .popover-launcher, +.device-phone .launch-popover { + border-radius: 0; } /* Main launcher container */ .device-phone .launch-popover { - /* Enable smooth scrolling on iOS */ - -webkit-overflow-scrolling: touch; + /* Enable smooth scrolling on iOS */ + -webkit-overflow-scrolling: touch; - /* Allow vertical touch scrolling while preventing horizontal */ - touch-action: pan-y; + /* Allow vertical touch scrolling while preventing horizontal */ + touch-action: pan-y; - /* Base dimensions */ - width: 100%; - height: 100%; - - /* Scrolling behavior */ - overflow-y: scroll; - overflow-x: hidden; + /* Base dimensions */ + width: 100%; + height: 100%; - /* Background and styling */ - background-color: rgba(231, 238, 245); - padding: 0; - margin: 0; + /* Scrolling behavior */ + overflow-y: scroll; + overflow-x: hidden; - /* Hide scrollbars while keeping functionality */ - scrollbar-width: none; - -ms-overflow-style: none; + /* Background and styling */ + background-color: rgba(231, 238, 245); + padding: 0; + margin: 0; - padding-left: 10px; - padding-right: 10px; + /* Hide scrollbars while keeping functionality */ + scrollbar-width: none; + -ms-overflow-style: none; + + padding-left: 10px; + padding-right: 10px; } /* Hide scrollbar while keeping functionality */ .device-phone .launch-popover::-webkit-scrollbar { - display: none; + display: none; } /* Ensure content can receive touch events */ .device-phone .launch-popover * { - touch-action: pan-y; + touch-action: pan-y; } /* Make sure the search wrapper doesn't interfere with scrolling */ .launch-search-wrapper { - position: sticky; - top: -20px; - z-index: 1; - background: rgba(231, 238, 245); - padding-top: 7px; + position: sticky; + top: -20px; + z-index: 1; + background: rgba(231, 238, 245); + padding-top: 7px; } .device-phone .launch-search-wrapper { - top: 0; + top: 0; } -.device-phone .popover-launcher{ - left: 50% !important; - border-radius: 10px; - top: 5px !important; - transform: translateX(-50%); - width: calc(100% - 25px); - height: calc(100vh - 65px); - height: calc(100dvh - 65px); +.device-phone .popover-launcher { + left: 50% !important; + border-radius: 10px; + top: 5px !important; + transform: translateX(-50%); + width: calc(100% - 25px); + height: calc(100vh - 65px); + height: calc(100dvh - 65px); } -.device-phone .start-app-card{ - width: 25%; +.device-phone .start-app-card { + width: 25%; } -.device-phone .start-app-icon{ - width: 50px; - height: 50px; +.device-phone .start-app-icon { + width: 50px; + height: 50px; } -.device-phone .start-app-title{ - margin-top: 5px; +.device-phone .start-app-title { + margin-top: 5px; } -.device-phone .desktop{ - position: relative; +.device-phone .desktop { + position: relative; - /* Enable smooth scrolling on iOS */ - -webkit-overflow-scrolling: touch; + /* Enable smooth scrolling on iOS */ + -webkit-overflow-scrolling: touch; - /* Allow vertical touch scrolling while preventing horizontal */ - touch-action: pan-x; + /* Allow vertical touch scrolling while preventing horizontal */ + touch-action: pan-x; - /* Hide scrollbars while keeping functionality */ - scrollbar-width: none; - -ms-overflow-style: none; + /* Hide scrollbars while keeping functionality */ + scrollbar-width: none; + -ms-overflow-style: none; - /* Scrolling behavior */ - overflow-y: visible !important; - overflow-x: scroll; + /* Scrolling behavior */ + overflow-y: visible !important; + overflow-x: scroll; - padding-bottom: 60px; + padding-bottom: 60px; } .device-phone .desktop * { - touch-action: pan-x; + touch-action: pan-x; } .device-phone .desktop::-webkit-scrollbar { - display: none; + display: none; } -.device-phone .window-body.item-container{ - /* Enable smooth scrolling on iOS */ - -webkit-overflow-scrolling: touch; +.device-phone .window-body.item-container { + /* Enable smooth scrolling on iOS */ + -webkit-overflow-scrolling: touch; - /* Allow vertical touch scrolling while preventing horizontal */ - touch-action: pan-y; - - /* Base dimensions */ - width: 100%; - height: 100%; - - /* Scrolling behavior */ - overflow-y: scroll; - overflow-x: hidden; + /* Allow vertical touch scrolling while preventing horizontal */ + touch-action: pan-y; - /* Hide scrollbars while keeping functionality */ - scrollbar-width: none; - -ms-overflow-style: none; + /* Base dimensions */ + width: 100%; + height: 100%; + + /* Scrolling behavior */ + overflow-y: scroll; + overflow-x: hidden; + + /* Hide scrollbars while keeping functionality */ + scrollbar-width: none; + -ms-overflow-style: none; } .device-phone .window-body.item-container * { - touch-action: pan-y; + touch-action: pan-y; } diff --git a/src/gui/src/helpers.js b/src/gui/src/helpers.js index f855fa62e6..58003e7646 100644 --- a/src/gui/src/helpers.js +++ b/src/gui/src/helpers.js @@ -731,6 +731,76 @@ window.show_save_account_notice_if_needed = function(message){ }); } +/** + * Shows a temporary success or error message for account-related operations. + * + * This function displays a styled notification message that automatically fades out after a few seconds. + * It's specifically designed for account operations like profile picture changes, password updates, etc. + * + * @param {string} message - The message to display to the user + * @param {string} [type='success'] - The type of message ('success' or 'error') + * @global + * @function window.show_save_account_notice_message + */ +window.show_save_account_notice_message = function(message, type = 'success') { + // Remove any existing notice + $('.account-notice-message').remove(); + + // Create the notice element + const noticeClass = type === 'error' ? 'account-notice-error' : 'account-notice-success'; + const iconSrc = type === 'error' ? window.icons['warning-sign.svg'] : window.icons['c-check.svg']; + + const noticeHtml = ` +
+ + ${html_encode(message)} +
+ `; + + // Add to DOM + $('body').append(noticeHtml); + + // Animate in + setTimeout(() => { + $('.account-notice-message').css({ + opacity: '1', + transform: 'translateX(0)' + }); + }, 10); + + // Auto-hide after 4 seconds + setTimeout(() => { + $('.account-notice-message').css({ + opacity: '0', + transform: 'translateX(100%)' + }); + + // Remove from DOM after animation + setTimeout(() => { + $('.account-notice-message').remove(); + }, 300); + }, 4000); +} + window.onpopstate = (event) => { if(event.state !== null && event.state.window_id !== null){ $(`.window[data-id="${event.state.window_id}"]`).focusWindow(); @@ -2626,30 +2696,67 @@ window.detectHostOS = function(){ } } -window.update_profile = function(username, key_vals){ - puter.fs.read('/'+username+'/Public/.profile').then((blob)=>{ - blob.text() - .then(text => { - const profile = JSON.parse(text); +window.update_profile = function(username, key_vals, options = {}){ + return new Promise((resolve, reject) => { + puter.fs.read('/'+username+'/Public/.profile').then((blob)=>{ + blob.text() + .then(text => { + try { + const profile = JSON.parse(text); + + for (const key in key_vals) { + if (key_vals[key] === undefined && options.deleteUndefined) { + // Delete the property if value is undefined and deleteUndefined is true + delete profile[key]; + if (window.user && window.user.profile) { + delete window.user.profile[key]; + } + } else { + profile[key] = key_vals[key]; + // update window.user.profile + if (window.user && window.user.profile) { + window.user.profile[key] = key_vals[key]; + } + } + } - for (const key in key_vals) { - profile[key] = key_vals[key]; - // update window.user.profile - window.user.profile[key] = key_vals[key]; + puter.fs.write('/'+username+'/Public/.profile', JSON.stringify(profile)) + .then(() => resolve()) + .catch(error => { + console.error('Error writing profile file:', error); + reject(error); + }); + } catch (parseError) { + console.error('Error parsing profile JSON:', parseError); + reject(parseError); + } + }) + .catch(error => { + console.error('Error converting Blob to JSON:', error); + reject(error); + }); + }).catch((e)=>{ + if(e?.code === "subject_does_not_exist"){ + // create .profile file + puter.fs.write('/'+username+'/Public/.profile', JSON.stringify(key_vals)) + .then(() => { + // update window.user.profile + if (window.user && window.user.profile) { + for (const key in key_vals) { + window.user.profile[key] = key_vals[key]; + } + } + resolve(); + }) + .catch(error => { + console.error('Error creating profile file:', error); + reject(error); + }); + } else { + console.log(e); + reject(e); } - - puter.fs.write('/'+username+'/Public/.profile', JSON.stringify(profile)); - }) - .catch(error => { - console.error('Error converting Blob to JSON:', error); }); - }).catch((e)=>{ - if(e?.code === "subject_does_not_exist"){ - // create .profile file - puter.fs.write('/'+username+'/Public/.profile', JSON.stringify({})); - } - // Ignored - console.log(e); }); } @@ -2680,4 +2787,232 @@ window.get_profile_picture = async function(username){ } return icon; -} \ No newline at end of file +} + +window.removeProfilePicture = function(username) { + return new Promise((resolve, reject) => { + // Store original profile state for rollback + let originalProfile = null; + let originalUserProfile = null; + + // Handle edge case where window.user doesn't exist + if (!window.user) { + reject(new Error('User not authenticated')); + return; + } + + // Ensure window.user.profile exists + if (!window.user.profile) { + window.user.profile = {}; + } + + puter.fs.read('/' + username + '/Public/.profile') + .then((blob) => { + blob.text() + .then(text => { + try { + originalProfile = JSON.parse(text); + + // Check if profile picture exists + if (!originalProfile.picture) { + reject(new Error('No profile picture to remove')); + return; + } + + // Store original user profile state for rollback + originalUserProfile = { ...window.user.profile }; + + // Create updated profile without picture + const updatedProfile = { ...originalProfile }; + delete updatedProfile.picture; + + // Update window.user.profile immediately for synchronization + delete window.user.profile.picture; + + // Update the profile file + puter.fs.write('/' + username + '/Public/.profile', JSON.stringify(updatedProfile)) + .then(() => { + try { + // Ensure profile state is synchronized across all components + // Use the centralized profile picture update function + window.updateAllProfilePictures(); + + // Trigger any profile update listeners + if (typeof window.onProfileUpdated === 'function') { + window.onProfileUpdated(window.user.profile); + } + + // Dispatch custom event for profile picture removal + window.dispatchEvent(new CustomEvent('profile-picture-removed', { + detail: { username: username } + })); + + resolve(); + } catch (updateError) { + console.error('Error updating user profile state:', updateError); + // Rollback user profile state + if (originalUserProfile) { + window.user.profile = originalUserProfile; + } + // Rollback file changes + puter.fs.write('/' + username + '/Public/.profile', JSON.stringify(originalProfile)) + .then(() => { + reject(new Error('Failed to update profile state, changes rolled back')); + }) + .catch(rollbackError => { + console.error('Error during rollback:', rollbackError); + reject(new Error('Failed to update profile and rollback failed')); + }); + } + }) + .catch(error => { + console.error('Error writing profile file:', error); + // Rollback user profile state + if (originalUserProfile) { + window.user.profile = originalUserProfile; + } + reject(new Error('Failed to update profile file')); + }); + } catch (parseError) { + console.error('Error parsing profile JSON:', parseError); + reject(new Error('Invalid profile data')); + } + }) + .catch(error => { + console.error('Error converting Blob to text:', error); + reject(new Error('Failed to read profile data')); + }); + }) + .catch((e) => { + console.error('Error reading profile file:', e); + if (e?.code === "subject_does_not_exist") { + // Handle case where profile file doesn't exist + // Reset to default avatar and ensure user profile is clean + window.resetToDefaultAvatar(); + + // Create empty profile file + puter.fs.write('/' + username + '/Public/.profile', JSON.stringify({})) + .then(() => { + // Update all profile pictures to show default avatar + window.updateAllProfilePictures(); + resolve(); + }) + .catch(createError => { + console.error('Error creating profile file:', createError); + reject(new Error('Profile file does not exist and could not be created')); + }); + } else { + reject(new Error('Failed to access profile file')); + } + }); + }); +} +/** + * U +pdates all profile picture displays across the application with proper fallback logic + * Ensures consistent profile picture display and handles default avatar fallback + */ +window.updateAllProfilePictures = function() { + const defaultAvatar = window.icons['profile.svg']; + const hasProfilePicture = window.user?.profile?.picture; + const profileImageUrl = hasProfilePicture ? window.user.profile.picture : defaultAvatar; + + // Update all profile picture elements with proper fallback + $('.profile-picture').css('background-image', 'url(' + html_encode(profileImageUrl) + ')'); + $('.profile-image').css('background-image', 'url(' + html_encode(profileImageUrl) + ')'); + + // Handle profile-image-has-picture class for custom styling + if (hasProfilePicture) { + $('.profile-image').addClass('profile-image-has-picture'); + $('.profile-picture').addClass('profile-image-has-picture'); + } else { + $('.profile-image').removeClass('profile-image-has-picture'); + $('.profile-picture').removeClass('profile-image-has-picture'); + + // Reset to standard sizing for default avatar + $('.profile-image, .profile-picture').css({ + 'background-size': 'cover', // Standard size for consistency + 'background-position': 'center', + 'background-repeat': 'no-repeat' + }); + } + + // Update any other profile-related elements that might exist + $('[data-profile-image]').each(function() { + $(this).css('background-image', 'url(' + html_encode(profileImageUrl) + ')'); + if (hasProfilePicture) { + $(this).addClass('profile-image-has-picture'); + } else { + $(this).removeClass('profile-image-has-picture'); + } + }); + + // Update img elements that show profile pictures + $('img[src*="profile"]').each(function() { + if ($(this).attr('data-is-profile-image') === 'true') { + $(this).attr('src', profileImageUrl); + } + }); + + // Dispatch event for other components that might need to update + window.dispatchEvent(new CustomEvent('profile-pictures-updated', { + detail: { + hasProfilePicture: hasProfilePicture, + profileImageUrl: profileImageUrl, + defaultAvatar: defaultAvatar + } + })); +}; + +/** + * Ensures proper default avatar fallback when profile picture is removed + * Removes any custom styling that was applied to uploaded pictures + */ +window.resetToDefaultAvatar = function() { + const defaultAvatar = window.icons['profile.svg']; + + // Remove profile picture from user object if it exists + if (window.user?.profile?.picture) { + delete window.user.profile.picture; + } + + // Update all profile displays to show default avatar + $('.profile-picture, .profile-image').css('background-image', 'url(' + html_encode(defaultAvatar) + ')'); + $('.profile-picture, .profile-image').removeClass('profile-image-has-picture'); + + // Remove any custom styling that might have been applied to uploaded pictures + $('.profile-picture, .profile-image').css({ + 'border-radius': '', // Reset to default + 'border': '', // Reset to default + 'box-shadow': '', // Reset to default + 'background-size': 'cover', // Standard size for consistency + 'background-position': 'center', + 'background-repeat': 'no-repeat' + }); + + // Update all profile-related elements + $('[data-profile-image]').each(function() { + $(this).css('background-image', 'url(' + html_encode(defaultAvatar) + ')'); + $(this).removeClass('profile-image-has-picture'); + }); + + // Update img elements + $('img[data-is-profile-image="true"]').attr('src', defaultAvatar); + + // Dispatch event + window.dispatchEvent(new CustomEvent('profile-reset-to-default', { + detail: { defaultAvatar: defaultAvatar } + })); +}; + +// Global event listener for profile picture removal to ensure all components update +window.addEventListener('profile-picture-removed', function(event) { + // Update all profile pictures across the application + window.updateAllProfilePictures(); +}); + +// Global event listener for profile reset to default +window.addEventListener('profile-reset-to-default', function(event) { + // Ensure all profile displays show the default avatar + window.resetToDefaultAvatar(); +}); \ No newline at end of file diff --git a/src/gui/src/i18n/translations/en.js b/src/gui/src/i18n/translations/en.js index 613120afc0..22986f960f 100644 --- a/src/gui/src/i18n/translations/en.js +++ b/src/gui/src/i18n/translations/en.js @@ -70,6 +70,7 @@ const en = { confirm_new_password: "Confirm New Password", confirm_delete_user: "Are you sure you want to delete your account? All your files and data will be permanently deleted. This action cannot be undone.", confirm_delete_user_title: "Delete Account?", + confirm_remove_profile_picture: "Are you sure you want to remove your profile picture?", confirm_session_revoke: "Are you sure you want to revoke this session?", confirm_your_email_address: "Confirm Your Email Address", contact_us: "Contact Us", @@ -129,6 +130,7 @@ const en = { enlarged_qr_code: "Enlarged QR Code", enter_password_to_confirm_delete_user: "Enter your password to confirm account deletion", error_message_is_missing: "Error message is missing.", + error_removing_profile_picture: "Failed to remove profile picture. Please try again.", error_unknown_cause: "An unknown error occurred.", error_uploading_files: "Failed to upload files", favorites: "Favorites", @@ -211,6 +213,7 @@ const en = { picture: "Picture", pictures: 'Pictures', plural_suffix: 's', + profile_picture_removed: "Profile picture removed successfully", powered_by_puter_js: `Powered by {{link=docs}}Puter.js{{/link}}`, preparing: "Preparing...", preparing_for_upload: "Preparing for upload...", @@ -238,6 +241,7 @@ const en = { refresh: 'Refresh', release_address_confirmation: `Are you sure you want to release this address?`, remove_from_taskbar:'Remove from Taskbar', + remove_profile_picture:'Remove Profile Picture', rename: 'Rename', repeat: 'Repeat', replace: 'Replace',