From bf3f72b62480ca24953d93b3efaa76d7319b83e5 Mon Sep 17 00:00:00 2001 From: Giuliano <308090+giulianoliker@users.noreply.github.com> Date: Sun, 18 Oct 2026 23:06:59 -0400 Subject: [PATCH] feature: themes: add cyan-sinko A navy theme with cyan accents. - navy palette, 4px spacing grid, full-height layout, styled scrollbars - Lucide line icons for the file list, function keys, menus and path bar - navy function keys with cyan labels, arrow cursor, phone layout below 600px; on narrow screens keys wrap in rows of 5, last row centered - themed dialogs (OK/Cancel kept in DOM order so Tab order matches), progress bar, upload spinner, F3 viewer, F4 editor, console, terminal, F9/context menus, F2 user menu and the settings dialog - Plus Jakarta Sans embedded (latin subset), system fonts as fallback Icons: Lucide (ISC, license in css/themes/cyan-sinko-icons-LICENSE.txt). Font: Plus Jakarta Sans (SIL OFL 1.1, license in css/themes/cyan-sinko-font-OFL.txt). Co-Authored-By: Claude Opus 5.5 --- .rspack/js.js | 2 + HELP.md | 4 +- css/themes/cyan-sinko-font-OFL.txt | 93 ++ css/themes/cyan-sinko-icons-LICENSE.txt | 15 + css/themes/cyan-sinko.css | 1374 +++++++++++++++++++++++ json/help.json | 2 +- man/cloudcmd.1 | 2 +- server/themes.spec.js | 13 + tmpl/config.hbs | 1 + 9 files changed, 1502 insertions(+), 4 deletions(-) create mode 100644 css/themes/cyan-sinko-font-OFL.txt create mode 100644 css/themes/cyan-sinko-icons-LICENSE.txt create mode 100644 css/themes/cyan-sinko.css diff --git a/.rspack/js.js b/.rspack/js.js index 487bd575d7..d5e1c22905 100644 --- a/.rspack/js.js +++ b/.rspack/js.js @@ -103,6 +103,7 @@ const splitChunks = { 'user-menu', 'help', 'themes/dark', + 'themes/cyan-sinko', 'themes/light', 'columns/name-size', 'columns/name-size-date', @@ -141,6 +142,7 @@ export default { }, entry: { 'themes/dark': `${dirThemes}/dark.css`, + 'themes/cyan-sinko': `${dirThemes}/cyan-sinko.css`, 'themes/light': `${dirThemes}/light.css`, 'columns/name-size': `${dirColumns}/name-size.css`, 'columns/name-size-date': `${dirColumns}/name-size-date.css`, diff --git a/HELP.md b/HELP.md index d377e12827..3a4fba2baf 100644 --- a/HELP.md +++ b/HELP.md @@ -101,7 +101,7 @@ Cloud Commander supports the following command-line parameters: | `--terminal-auto-restart` | restart command on exit | `--vim` | enable vim hot keys | `--columns` | set visible columns -| `--theme` | set theme 'light' or 'dark'" +| `--theme` | set theme 'light', 'dark', or 'cyan-sinko'" | `--export` | enable export of config through a server | `--export-token` | authorization token used by export server | `--import` | enable import of config @@ -445,7 +445,7 @@ Some config options can be overridden with environment variables, such as: - `CLOUDCMD_OPEN` - open web browser when server started - `CLOUDCMD_EDITOR` - set editor - `CLOUDCMD_COLUMNS` - set visible themes -- `CLOUDCMD_THEME` - set themes "light" or "dark" +- `CLOUDCMD_THEME` - set themes "light", "dark", or "cyan-sinko" - `CLOUDCMD_MENU` - set menu "supermenu" or "aleman" - `CLOUDCMD_CONTACT` - enable contact - `CLOUDCMD_CONFIG_DIALOG` - enable config dialog diff --git a/css/themes/cyan-sinko-font-OFL.txt b/css/themes/cyan-sinko-font-OFL.txt new file mode 100644 index 0000000000..ea69b0ca12 --- /dev/null +++ b/css/themes/cyan-sinko-font-OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Plus Jakarta Sans Project Authors (https://github.com/tokotype/PlusJakartaSans) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/css/themes/cyan-sinko-icons-LICENSE.txt b/css/themes/cyan-sinko-icons-LICENSE.txt new file mode 100644 index 0000000000..325e8ff0aa --- /dev/null +++ b/css/themes/cyan-sinko-icons-LICENSE.txt @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/css/themes/cyan-sinko.css b/css/themes/cyan-sinko.css new file mode 100644 index 0000000000..90d2c34746 --- /dev/null +++ b/css/themes/cyan-sinko.css @@ -0,0 +1,1374 @@ +/* + * Font: Plus Jakarta Sans (https://github.com/tokotype/PlusJakartaSans), latin subset, weights 400-700. + * Copyright 2020 The Plus Jakarta Sans Project Authors. + * Licensed under the SIL Open Font License, Version 1.1: see cyan-sinko-font-OFL.txt. + */ +@font-face { + font-family: 'Plus Jakarta Sans'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url('data:font/woff2;base64,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') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +:root { + --link-color: #e8edf7; + --selected-menu-item-color: #58bfd9; + --border-color: rgb(88 191 217 / 45%); + --background: #16213f; + --column-color: #8e9cc0; + --icon-color: #58bfd9; + --button-background: #1f2f5c; + --internal-background: #1f2f5c; + --cyan-sinko-accent: #58bfd9; + --cyan-sinko-text: #e8edf7; + --cyan-sinko-line: rgb(255 255 255 / 10%); + --cyan-sinko-field: #172246; + --cyan-sinko-key-top: #22335f; + --cyan-sinko-key-bottom: #1f2f5c; + --cyan-sinko-key-hover-top: #273a6c; + --cyan-sinko-key-hover-bottom: #233562; + --cyan-sinko-key-edge: #121b38; + --cyan-sinko-key-depth: 4px; + --cyan-sinko-selected: var(--cyan-sinko-accent); + --cyan-sinko-cursor: rgb(88 191 217 / 7%); + --cyan-sinko-cursor-solid: color-mix(in srgb, var(--cyan-sinko-accent) 7%, var(--internal-background)); + --cyan-sinko-row-gutter: 16px; + --cyan-sinko-row-pull: 16px; + --cyan-sinko-arrow-left: 4px; + --cyan-sinko-menu-gutter: 24px; + --cyan-sinko-icon-folder: #58bfd9; + --cyan-sinko-icon-file: #8e9cc0; + --cyan-sinko-gap: 16px; + --cyan-sinko-panel-padding: 20px; + --cyan-sinko-row-inset: 12px; + --cyan-sinko-row-gutter-phone: 16px; + --cyan-sinko-scrollbar-size: 8px; + --cyan-sinko-scrollbar-hit: 16px; + --cyan-sinko-scrollbar-track: rgb(255 255 255 / 8%); +} + +body { + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + word-spacing: 0.08em; + color: var(--cyan-sinko-text); +} + +.panel { + border-color: var(--cyan-sinko-line); + border-radius: 12px; + background: var(--internal-background); +} + +.panel:is(.selected-panel, :has(.selected-panel)) { + border-color: var(--cyan-sinko-accent); + box-shadow: 0 0 0 4px rgb(88 191 217 / 20%); +} + +.panel > .reduce-text { + flex-shrink: 0; + height: 20px; + line-height: 20px; +} + +.panel > .reduce-text > .path-icon { + display: inline-block; + width: 16px; + height: 20px; + margin-right: 8px; + vertical-align: top; +} + +.panel > .reduce-text > .path-icon::before { + content: ''; + display: block; + width: 16px; + height: 16px; + margin-top: 2px; + background-color: currentcolor; + mask-position: center; + mask-size: 16px 16px; + mask-repeat: no-repeat; +} + +.fm-header { + flex-shrink: 0; + margin-top: 16px; + line-height: 16px; + font-weight: 600; + font-size: 12px; + letter-spacing: 0.06em; + text-transform: uppercase; +} + +.links a { + color: var(--cyan-sinko-text); +} + +.links a:hover { + color: var(--cyan-sinko-accent); +} + +.files li { + position: relative; + padding: 0; + font-size: 14px; + line-height: 24px; +} + +.files li::after { + content: ''; + position: absolute; + top: 50%; + left: var(--cyan-sinko-arrow-left); + width: 6px; + height: 6px; + border-top: 2px solid var(--cyan-sinko-accent); + border-right: 2px solid var(--cyan-sinko-accent); + opacity: 0; + transform: translate(-8px, -50%) rotate(45deg); + transition: + opacity 0.2s ease, + transform 0.2s ease; + pointer-events: none; +} + +.current-file { + border-radius: 8px; + background: var(--cyan-sinko-cursor); + box-shadow: none; +} + +.files li.current-file::after { + opacity: 1; + transform: translate(0, -50%) rotate(45deg); +} + +.selected-file, +.selected-file > span, +.selected-file .name > a { + color: var(--cyan-sinko-selected); +} + +.path-icon:hover, +a:hover, +a:active { + color: var(--cyan-sinko-accent); +} + +.icon.loading { + margin: calc((1lh - 16px) / 2) 0 0 8px; + background: none; + vertical-align: top; +} + +.loading::before { + content: ''; + position: absolute; + inset: 2px; + border: 2px solid var(--cyan-sinko-accent); + border-top-color: transparent; + border-radius: 50%; + animation: cyan-sinko-spin 0.8s linear infinite; +} + +.loading::after { + position: absolute; + top: 0; + bottom: auto; + left: 24px; + font-size: 12px; + line-height: 16px; + white-space: nowrap; + color: var(--column-color); +} + +@keyframes cyan-sinko-spin { + to { + transform: rotate(360deg); + } +} + +.cmd-button, +.cmd-button:hover { + position: relative; + top: 0; + height: 36px; + margin-right: 4px; + margin-left: 4px; + padding: 0 4px; + border: 0; + border-radius: 8px; + background: linear-gradient(180deg, var(--cyan-sinko-key-top) 0%, var(--cyan-sinko-key-bottom) 100%); + box-shadow: + inset 0 0 0 1px var(--cyan-sinko-line), + 0 var(--cyan-sinko-key-depth) 0 var(--cyan-sinko-key-edge), + 0 8px 8px rgb(0 0 0 / 20%); + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 16px; + font-weight: 500; + line-height: 24px; + color: var(--cyan-sinko-accent); + transition: + top 0.08s ease, + box-shadow 0.08s ease, + background 0.15s ease; +} + +.cmd-button::before { + content: ''; + display: inline-block; + width: 16px; + height: 16px; + margin: calc((1lh - 16px) / 2) 8px 0 0; + background-color: currentcolor; + vertical-align: top; + mask-position: center; + mask-size: 16px 16px; + mask-repeat: no-repeat; +} + +:is(.cmd-button, .menu-item, .path-icon).icon-help::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%2710%27/%3E%3Cpath d=%27M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3%27/%3E%3Cpath d=%27M12 17h.01%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-user-menu::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M3 12h.01%27/%3E%3Cpath d=%27M3 18h.01%27/%3E%3Cpath d=%27M3 6h.01%27/%3E%3Cpath d=%27M8 12h13%27/%3E%3Cpath d=%27M8 18h13%27/%3E%3Cpath d=%27M8 6h13%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-view::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%273%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-edit::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z%27/%3E%3Cpath d=%27m15 5 4 4%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-copy::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect width=%2714%27 height=%2714%27 x=%278%27 y=%278%27 rx=%272%27 ry=%272%27/%3E%3Cpath d=%27M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-move::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27m16 3 4 4-4 4%27/%3E%3Cpath d=%27M20 7H4%27/%3E%3Cpath d=%27m8 21-4-4 4-4%27/%3E%3Cpath d=%27M4 17h16%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-directory::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 10v6%27/%3E%3Cpath d=%27M9 13h6%27/%3E%3Cpath d=%27M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-delete::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M3 6h18%27/%3E%3Cpath d=%27M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6%27/%3E%3Cpath d=%27M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2%27/%3E%3Cline x1=%2710%27 x2=%2710%27 y1=%2711%27 y2=%2717%27/%3E%3Cline x1=%2714%27 x2=%2714%27 y1=%2711%27 y2=%2717%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-menu::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%274%27 x2=%2720%27 y1=%2712%27 y2=%2712%27/%3E%3Cline x1=%274%27 x2=%2720%27 y1=%276%27 y2=%276%27/%3E%3Cline x1=%274%27 x2=%2720%27 y1=%2718%27 y2=%2718%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-config::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%273%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-console::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27m7 11 2-2-2-2%27/%3E%3Cpath d=%27M11 13h4%27/%3E%3Crect width=%2718%27 height=%2718%27 x=%273%27 y=%273%27 rx=%272%27 ry=%272%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-terminal::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpolyline points=%274 17 10 11 4 5%27/%3E%3Cline x1=%2712%27 x2=%2720%27 y1=%2719%27 y2=%2719%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-contact::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M7.9 20A9 9 0 1 0 4 16.1L2 22Z%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-new::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M5 12h14%27/%3E%3Cpath d=%27M12 5v14%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-file::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z%27/%3E%3Cpath d=%27M14 2v4a2 2 0 0 0 2 2h4%27/%3E%3Cpath d=%27M9 15h6%27/%3E%3Cpath d=%27M12 18v-6%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-rename::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M5 4h1a3 3 0 0 1 3 3 3 3 0 0 1 3-3h1%27/%3E%3Cpath d=%27M13 20h-1a3 3 0 0 1-3-3 3 3 0 0 1-3 3H5%27/%3E%3Cpath d=%27M5 16H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h1%27/%3E%3Cpath d=%27M13 8h7a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-7%27/%3E%3Cpath d=%27M9 7v10%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-cut::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%276%27 cy=%276%27 r=%273%27/%3E%3Cpath d=%27M8.12 8.12 12 12%27/%3E%3Cpath d=%27M20 4 8.12 15.88%27/%3E%3Ccircle cx=%276%27 cy=%2718%27 r=%273%27/%3E%3Cpath d=%27M14.8 14.8 20 20%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-paste::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z%27/%3E%3Cpath d=%27M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2M11 14h10%27/%3E%3Cpath d=%27m17 10 4 4-4 4%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-pack::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z%27/%3E%3Cpath d=%27M12 22V12%27/%3E%3Cpath d=%27m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7%27/%3E%3Cpath d=%27m7.5 4.27 9 5.15%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-extract::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 22v-9%27/%3E%3Cpath d=%27M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z%27/%3E%3Cpath d=%27M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13%27/%3E%3Cpath d=%27M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-download::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4%27/%3E%3Cpolyline points=%277 10 12 15 17 10%27/%3E%3Cline x1=%2712%27 x2=%2712%27 y1=%2715%27 y2=%273%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-upload::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4%27/%3E%3Cpolyline points=%2717 8 12 3 7 8%27/%3E%3Cline x1=%2712%27 x2=%2712%27 y1=%273%27 y2=%2715%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-upload-to-cloud::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 13v8%27/%3E%3Cpath d=%27M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242%27/%3E%3Cpath d=%27m8 17 4-4 4 4%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-upload-from-cloud::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 13v8l-4-4%27/%3E%3Cpath d=%27m12 21 4-4%27/%3E%3Cpath d=%27M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-toggle-file-selection::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect width=%2718%27 height=%2718%27 x=%273%27 y=%273%27 rx=%272%27/%3E%3Cpath d=%27m9 12 2 2 4-4%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-unselect-all::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27m3 17 2 2 4-4%27/%3E%3Cpath d=%27m3 7 2 2 4-4%27/%3E%3Cpath d=%27M13 6h8%27/%3E%3Cpath d=%27M13 12h8%27/%3E%3Cpath d=%27M13 18h8%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-copy-to-clipboard::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect width=%278%27 height=%274%27 x=%278%27 y=%272%27 rx=%271%27 ry=%271%27/%3E%3Cpath d=%27M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2%27/%3E%3C/svg%3E'); +} + +:is(.cmd-button, .menu-item, .path-icon).icon-refresh::before { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8%27/%3E%3Cpath d=%27M21 3v5h-5%27/%3E%3Cpath d=%27M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16%27/%3E%3Cpath d=%27M8 16H3v5%27/%3E%3C/svg%3E'); +} + +.cmd-button:hover { + background: linear-gradient(180deg, var(--cyan-sinko-key-hover-top) 0%, var(--cyan-sinko-key-hover-bottom) 100%); +} + +.cmd-button:active { + top: 2px; + color: var(--cyan-sinko-accent); + background: linear-gradient(180deg, var(--cyan-sinko-key-top) 0%, var(--cyan-sinko-key-bottom) 100%); + box-shadow: + inset 0 0 0 1px var(--cyan-sinko-line), + 0 2px 0 var(--cyan-sinko-key-edge), + 0 4px 4px rgb(0 0 0 / 20%); +} + +.cmd-button:focus-visible { + outline: 2px solid #fff; + outline-offset: 4px; +} + +.view { + background: var(--internal-background) !important; + color: var(--cyan-sinko-text) !important; +} + +.view a { + color: var(--cyan-sinko-accent) !important; +} + +.modal-main:not(.modal-autosize, :has(.config)) .modal-child { + height: calc(100% - var(--cyan-sinko-gap) * 2); +} + +.modal-main:not(:has(.config)) .modal-child { + margin: var(--cyan-sinko-gap); + border-radius: 16px; + background: var(--internal-background); + box-shadow: + 0 12px 32px rgb(0 0 0 / 28%), + 0 4px 8px rgb(0 0 0 / 16%); + overflow: hidden; +} + +.modal-main:not(:has(.config)) .view { + box-sizing: border-box; + padding: 28px 68px 28px 32px; + font-family: 'Droid Sans Mono', 'Ubuntu Mono', 'Consolas', monospace; + font-size: 14px; + line-height: 1.6; +} + +.modal-main:not(:has(.config)) .view:has(> .ace_editor) { + padding: 20px 64px 20px 20px; +} + +/* xterm's fit addon subtracts the terminal's own padding, not the view's */ +.modal-main:not(:has(.config)) .view:has(> .terminal) { + padding: 0; +} + +.modal-main:not(:has(.config)) .view > .terminal { + box-sizing: border-box; + height: 100%; + padding: 20px 64px 20px 20px; +} + +.view > .terminal .xterm-scrollable-element { + border-radius: 8px; + overflow: hidden; +} + +.view > .terminal .xterm-viewport { + background-color: transparent; +} + +.modal-main:not(:has(.config)) .view > .ace_editor { + border-radius: 8px; + background: var(--internal-background); +} + +.modal-main:not(:has(.config)) .view > .ace_editor .ace_gutter { + background: var(--internal-background); + color: var(--column-color); +} + +.modal-main:not(:has(.config)) .view > .ace_editor .ace_gutter-active-line, +.modal-main:not(:has(.config)) .view > .ace_editor .ace_marker-layer .ace_active-line { + background: var(--cyan-sinko-cursor); +} + +.modal-main:not(:has(.config)) .view > .ace_editor .ace_gutter-active-line { + color: var(--cyan-sinko-text); +} + +.modal-main:not(:has(.config)) .view > .ace_editor .ace_marker-layer .ace_selection { + background: rgb(88 191 217 / 25%); +} + +.modal-main:not(:has(.config)) .view > .ace_editor .ace_print-margin { + background: var(--cyan-sinko-line); +} + +.modal-main:not(:has(.config)) .view > .ace_editor .ace_cursor { + color: var(--cyan-sinko-accent); +} + +.modal-main:not(:has(.config)) .view > .ace_editor.normal-mode .ace_cursor { + background-color: rgb(88 191 217 / 50%); +} + +.modal-main:not(:has(.config)) .view > .ace_editor.normal-mode .ace_hidden-cursors .ace_cursor { + border-color: var(--cyan-sinko-accent); + background-color: transparent; +} + +.modal-main:has(.cloudcmd-user-menu) .modal-child { + border: 1px solid var(--cyan-sinko-line); + border-radius: 12px; +} + +.modal-main:not(:has(.config)) .view:has(> .cloudcmd-user-menu) { + padding: 8px; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; +} + +.modal-main:not(:has(.config)):has(.cloudcmd-user-menu) .modal-close { + top: 8px; + right: 8px; +} + +.view .cloudcmd-user-menu-button { + height: 32px; + margin-bottom: 4px; + padding: 0 44px 0 var(--cyan-sinko-menu-gutter); + background: none; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 16px; + font-weight: bold; + text-align: left; + color: #fff; + cursor: pointer; +} + +.view .cloudcmd-user-menu { + display: block; + min-width: 220px; + padding: 0; + background: none; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 14px; + color: var(--cyan-sinko-text); + overflow-y: auto; + field-sizing: content; + max-height: calc(10 * 32px); +} + +.view .cloudcmd-user-menu > option { + padding: 4px 16px 4px var(--cyan-sinko-menu-gutter); + line-height: 24px; + border-radius: 8px; + color: var(--cyan-sinko-text); +} + +.view .cloudcmd-user-menu > option:hover { + background-color: var(--cyan-sinko-cursor); +} + +.view .cloudcmd-user-menu > option:checked { + background: + url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 10%27%3E%3Cpath d=%27M1.5 1.5L5.5 5l-4 3.5%27 fill=%27none%27 stroke=%27%2358bfd9%27 stroke-width=%272%27 stroke-linecap=%27square%27/%3E%3C/svg%3E') var(--cyan-sinko-arrow-left) center / 8px 10px no-repeat, + linear-gradient(var(--cyan-sinko-cursor-solid), var(--cyan-sinko-cursor-solid)); + box-shadow: none; + color: var(--cyan-sinko-text); + animation: cyan-sinko-option-arrow-in 0.2s ease; +} + +@keyframes cyan-sinko-option-arrow-in { + from { + background-position: calc(var(--cyan-sinko-arrow-left) - 8px) center, 0 0; + } +} + +.modal-main:not(:has(.config)) .view:has(> .help) { + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 16px; +} + +.modal-main:not(:has(.config)) .view::selection, +.modal-main:not(:has(.config)) .view ::selection { + background: rgb(88 191 217 / 35%); + color: #fff; +} + +.modal-main:is(:not(:has(.config)), :has(.config > .list)) .modal-close { + top: 20px; + right: 20px; + width: 32px; + height: 32px; + border-radius: 8px; + background: none; + transition: background-color 0.15s ease; +} + +.modal-main:is(:not(:has(.config)), :has(.config > .list)) .modal-close::before, +.modal-main:is(:not(:has(.config)), :has(.config > .list)) .modal-close::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 20px; + height: 2px; + border-radius: 1px; + background: var(--column-color); + transform: translate(-50%, -50%) rotate(45deg); + transition: background-color 0.15s ease; +} + +.modal-main:is(:not(:has(.config)), :has(.config > .list)) .modal-close::after { + transform: translate(-50%, -50%) rotate(-45deg); +} + +.modal-main:is(:not(:has(.config)), :has(.config > .list)) .modal-close:hover::before, +.modal-main:is(:not(:has(.config)), :has(.config > .list)) .modal-close:hover::after { + background: var(--cyan-sinko-accent); +} + + +.modal-main:has(.config > .list) .modal-child { + margin: var(--cyan-sinko-gap); + border-radius: 16px; + background: var(--internal-background); + box-shadow: + 0 12px 32px rgb(0 0 0 / 28%), + 0 4px 8px rgb(0 0 0 / 16%); + overflow: hidden; +} + +.modal-main:has(.config > .list) .view { + max-height: calc(100dvh - 2 * var(--cyan-sinko-gap)); + overflow-y: auto; +} + +.config:has(> .list) { + width: 560px; + max-width: 100%; + color-scheme: dark; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 14px; + line-height: 24px; + color: var(--cyan-sinko-text); +} + +.config > ul.list { + columns: 2; + column-gap: 48px; + column-rule: 1px solid var(--cyan-sinko-line); + margin: 0; + padding: 24px 64px 20px 24px; +} + +.config > .list > li { + margin-bottom: 4px; + break-inside: avoid; +} + +/* group dividers and the column split, keyed to the existing data-name hooks */ +.config > .list > li:has(:is([data-name='js-diff'], [data-name='js-theme'], [data-name='js-editor'], [data-name='js-menu'], [data-name='js-packer'], [data-name='js-name'], [data-name='js-showDotFiles'])) { + margin-top: 12px; + padding-top: 12px; + background: linear-gradient(var(--cyan-sinko-line), var(--cyan-sinko-line)) top / 100% 1px no-repeat; +} + +.config > .list > li:has([data-name='js-oneFilePanel']) { + break-before: column; +} + +.config > .list > li > label { + display: flex; + align-items: center; + gap: 8px; + height: 32px; + padding: 0 8px; + border-radius: 8px; + cursor: pointer; +} + +.config > .list > li > label:hover { + background: var(--cyan-sinko-cursor); +} + +.config > .list input[type='checkbox'] { + width: 16px; + height: 16px; + margin: 0; + accent-color: var(--cyan-sinko-accent); + cursor: pointer; +} + +.config > .list .form-control { + box-sizing: border-box; + width: 100%; + height: 32px; + padding: 0 12px; + border: 1px solid var(--cyan-sinko-line); + border-radius: 8px; + background: var(--cyan-sinko-field); + box-shadow: none; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 14px; + color: var(--cyan-sinko-text); +} + +.config > .list .form-control:focus { + border-color: var(--cyan-sinko-accent); + box-shadow: 0 0 0 4px rgb(88 191 217 / 20%); +} + +@media (width <= 600px) { + .config:has(> .list) { + width: calc(100vw - 2 * var(--cyan-sinko-gap)); + } + + .config > ul.list { + columns: 1; + } + + .config > .list > li:has([data-name='js-oneFilePanel']) { + margin-top: 12px; + padding-top: 12px; + background: linear-gradient(var(--cyan-sinko-line), var(--cyan-sinko-line)) top / 100% 1px no-repeat; + break-before: auto; + } +} + +.smalltalk .page { + min-width: 420px; + border-radius: 16px; + background: var(--internal-background) !important; + box-shadow: + 0 12px 32px rgb(0 0 0 / 28%), + 0 4px 8px rgb(0 0 0 / 16%); + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 16px; + line-height: 24px; + color: var(--cyan-sinko-text) !important; +} + +.smalltalk .page header { + padding: 28px 68px 8px 32px; + background: none !important; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-size: 20px; + font-weight: bold; + color: #fff !important; + text-shadow: none !important; +} + +.smalltalk .page .content-area { + padding: 8px 32px; +} + +.smalltalk .page .action-area { + padding: 20px 32px 28px; +} + +.smalltalk .page input { + height: 48px; + margin-top: 12px; + padding: 0 16px; + border: 1px solid var(--cyan-sinko-line); + border-radius: 8px; + background: var(--cyan-sinko-field) !important; + font-size: 16px; + line-height: 24px; + color: var(--cyan-sinko-text) !important; + transition: + border-color 0.15s ease, + box-shadow 0.15s ease; +} + +.smalltalk .page input::selection { + background: rgb(88 191 217 / 35%); + color: #fff; +} + +.smalltalk .page input:enabled:focus { + border-color: var(--cyan-sinko-accent); + box-shadow: 0 0 0 4px rgb(88 191 217 / 20%); +} + +.smalltalk .page .progress { + height: 8px; + margin-top: 16px; + border: 0; + border-radius: 4px; + background: var(--cyan-sinko-field); + box-shadow: inset 0 0 0 1px var(--cyan-sinko-line); + overflow: hidden; + appearance: none; +} + +.smalltalk .page .progress::-webkit-progress-bar { + border-radius: 4px; + background: transparent; +} + +.smalltalk .page .progress::-webkit-progress-value { + border-radius: 4px; + background: var(--cyan-sinko-accent); + transition: inline-size 0.2s ease; +} + +.smalltalk .page .progress::-moz-progress-bar { + border-radius: 4px; + background: var(--cyan-sinko-accent); +} + +.smalltalk .page [data-name='js-counter'] { + display: block; + margin-top: 8px; + font-size: 12px; + font-variant-numeric: tabular-nums; + color: var(--column-color); + text-align: right; +} + +.smalltalk .page .button-strip > button { + min-width: 96px; + height: 40px; + margin-left: 12px; + padding: 0 20px; + border: 1px solid rgb(255 255 255 / 18%); + border-radius: 8px; + background: none !important; + box-shadow: none; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; + font-weight: 500; + color: var(--cyan-sinko-text) !important; + text-shadow: none !important; + transition: + background-color 0.15s ease, + border-color 0.15s ease; +} + +.smalltalk .page .button-strip > button:hover { + background: rgb(255 255 255 / 8%) !important; +} + +.smalltalk .page .button-strip > button[data-name='js-cancel'] { + min-width: 0; + padding: 0 12px; + border-color: transparent; + color: var(--cyan-sinko-accent) !important; + text-decoration: underline transparent; + text-underline-offset: 4px; + transition: text-decoration-color 0.15s ease; +} + +.smalltalk .page .button-strip > button[data-name='js-cancel']:hover { + background: none !important; + text-decoration-color: currentcolor; +} + +.smalltalk .page .button-strip > button[data-name='js-ok'] { + border-color: var(--cyan-sinko-accent); + background: var(--cyan-sinko-accent) !important; + color: var(--background) !important; +} + +.smalltalk .page .button-strip > button[data-name='js-ok']:hover { + background: #6fcae1 !important; +} + +.smalltalk .page .button-strip > button:focus-visible { + outline: 2px solid var(--cyan-sinko-accent); + outline-offset: 4px; +} + +.smalltalk .page .button-strip > button:enabled:focus:not(:focus-visible) { + outline: none; +} + +.smalltalk .page > .close-button { + top: 20px; + right: 20px; + width: 32px; + height: 32px; + border-radius: 8px; + background: none; + transition: background-color 0.15s ease; +} + +.smalltalk .page > .close-button::before, +.smalltalk .page > .close-button::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 20px; + height: 2px; + border-radius: 1px; + background: var(--column-color); + transform: translate(-50%, -50%) rotate(45deg); + transition: background-color 0.15s ease; +} + +.smalltalk .page > .close-button::after { + transform: translate(-50%, -50%) rotate(-45deg); +} + +.smalltalk .page > .close-button:hover::before, +.smalltalk .page > .close-button:hover::after { + background: var(--cyan-sinko-accent); +} + +.cloudcmd-user-menu, +.cloudcmd-user-menu-button, +ul.menu { + background: var(--internal-background) !important; + color: var(--cyan-sinko-text) !important; + font-family: 'Plus Jakarta Sans', system-ui, 'Segoe UI', sans-serif; +} + +ul.menu { + min-width: 180px; + padding: 8px; + border: 0; + border-radius: 12px; + box-shadow: + inset 0 0 0 1px var(--cyan-sinko-line), + 0 12px 32px rgb(0 0 0 / 28%), + 0 4px 8px rgb(0 0 0 / 16%); + font-size: 14px; +} + +li.menu-item { + padding: 4px 16px 4px calc(var(--cyan-sinko-menu-gutter) + 24px); + line-height: 24px; + border-radius: 8px; +} + +li.menu-item::before { + content: ''; + position: absolute; + top: 8px; + left: var(--cyan-sinko-menu-gutter); + width: 16px; + height: 16px; + background-color: var(--column-color); + mask-position: center; + mask-size: 16px 16px; + mask-repeat: no-repeat; + transition: background-color 0.15s ease; +} + +li.menu-item:hover::before, +li.menu-item-selected::before { + background-color: var(--cyan-sinko-accent); +} + +li.menu-item::after { + margin-left: 24px; + color: var(--column-color); +} + +li.menu-item:hover, +li.menu-item-selected { + background-color: var(--cyan-sinko-cursor); +} + +li.menu-item > label::before { + content: ''; + position: absolute; + top: 50%; + left: var(--cyan-sinko-arrow-left); + width: 6px; + height: 6px; + border-top: 2px solid var(--cyan-sinko-accent); + border-right: 2px solid var(--cyan-sinko-accent); + opacity: 0; + transform: translate(-8px, -50%) rotate(45deg); + transition: + opacity 0.2s ease, + transform 0.2s ease; + pointer-events: none; +} + +li.menu-item:hover > label::before, +li.menu-item-selected > label::before { + opacity: 1; + transform: translate(0, -50%) rotate(45deg); + animation: cyan-sinko-arrow-in 0.2s ease; +} + +@keyframes cyan-sinko-arrow-in { + from { + opacity: 0; + transform: translate(-8px, -50%) rotate(45deg); + } +} + +li.menu-submenu > label::after { + margin-top: 4px; + margin-left: 16px; + border-left-color: var(--cyan-sinko-accent); +} + +li.menu-item > ul.menu { + top: -8px; +} + +.jqconsole { + background: var(--internal-background) !important; +} + +.view .jqconsole { + padding: 20px 64px 20px 20px; +} + +.jqconsole-prompt, +.log-msg { + color: var(--cyan-sinko-text) !important; +} + +.jqconsole :is(.log-msg, .error-msg) { + margin: 8px 0; + padding: 8px 12px; + border: 1px solid var(--cyan-sinko-line); + border-radius: 8px; + background: var(--cyan-sinko-field); + font-size: 14px; + line-height: 20px; +} + +.jqconsole .error-msg { + border-color: rgb(255 122 122 / 35%); + color: #ff7a7a; +} + +.jqconsole :is(.jqconsole-prompt, .jqconsole-old-prompt) { + margin: 8px 0; + font-size: 14px; + line-height: 20px; +} + +.jqconsole .jqconsole-old-prompt { + color: var(--column-color); +} + +.jqconsole .jqconsole-cursor { + background-color: var(--cyan-sinko-accent); +} + +.mini-icon { + background-image: none; + background-color: var(--cyan-sinko-icon-file); + mask-position: center; + mask-size: 16px 16px; + mask-repeat: no-repeat; +} + +.fm-header .mini-icon { + background-color: transparent; +} + +.mini-icon.directory, +.mini-icon.directory-link { + background-color: var(--cyan-sinko-icon-folder); +} + +/* + * Icons: Lucide v0.460.0 (https://lucide.dev), ISC License: see cyan-sinko-icons-LICENSE.txt. + * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). + * All other copyright (c) for Lucide are held by Lucide Contributors 2022. + */ + +.mini-icon.directory { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z%27/%3E%3C/svg%3E'); +} + +.mini-icon.directory-link { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M2 9V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h7%27/%3E%3Cpath d=%27m8 16 3-3-3-3%27/%3E%3C/svg%3E'); +} + +.mini-icon.file { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z%27/%3E%3Cpath d=%27M14 2v4a2 2 0 0 0 2 2h4%27/%3E%3C/svg%3E'); +} + +.mini-icon.file-link { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27m10 18 3-3-3-3%27/%3E%3Cpath d=%27M14 2v4a2 2 0 0 0 2 2h4%27/%3E%3Cpath d=%27M4 11V4a2 2 0 0 1 2-2h9l5 5v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h7%27/%3E%3C/svg%3E'); +} + +.mini-icon.archive { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M10 12v-1%27/%3E%3Cpath d=%27M10 18v-2%27/%3E%3Cpath d=%27M10 7V6%27/%3E%3Cpath d=%27M14 2v4a2 2 0 0 0 2 2h4%27/%3E%3Cpath d=%27M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01%27/%3E%3Ccircle cx=%2710%27 cy=%2720%27 r=%272%27/%3E%3C/svg%3E'); +} + +.mini-icon.archive-link { + mask-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M10 12v-1%27/%3E%3Cpath d=%27M10 18v-2%27/%3E%3Cpath d=%27M10 7V6%27/%3E%3Cpath d=%27M14 2v4a2 2 0 0 0 2 2h4%27/%3E%3Cpath d=%27M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01%27/%3E%3Ccircle cx=%2710%27 cy=%2720%27 r=%272%27/%3E%3C/svg%3E'); +} + +@media (width <= 600px) { + body { + display: flex; + flex-direction: column; + box-sizing: border-box; + height: 100dvh; + padding: var(--cyan-sinko-panel-padding) 0; + background-color: var(--internal-background); + } + + .fm { + flex: 1 1 auto; + width: auto; + height: auto; + min-height: 0; + margin: 0 var(--cyan-sinko-panel-padding); + } + + .panel { + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: 0; + border: 0; + border-radius: 0; + background: none; + font-size: 16px; + } + + .panel.panel-right { + display: none; + } + + .smalltalk .page { + min-width: 0; + } + + .files { + flex: 1 1 auto; + height: auto; + min-height: 0; + margin: 8px calc(var(--cyan-sinko-row-inset) * -1) 0 calc(var(--cyan-sinko-row-gutter-phone) * -1); + } + + .files li { + display: flex; + align-items: center; + gap: 12px; + padding: 12px var(--cyan-sinko-row-inset) 12px var(--cyan-sinko-row-gutter-phone); + font-size: 16px; + } + + .files .name { + flex: 1 1 auto; + width: auto; + } + + .files .mini-icon { + flex-shrink: 0; + width: 20px; + height: 20px; + margin: 0; + padding: 0; + top: 0; + left: 0; + mask-size: 20px 20px; + } + + .files .mini-icon::before { + content: none; + } + + .keyspanel { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 16px 12px; + margin-top: 16px; + padding: 0 var(--cyan-sinko-panel-padding); + } + + .cmd-button::before { + margin-right: 4px; + } + + .keyspanel .cmd-button, + .keyspanel .cmd-button:hover { + flex: 0 0 calc((100% - 4 * 12px) / 5); + width: auto; + margin: 0; + } +} + +@media (width > 600px) { + html { + height: 100%; + } + + body { + display: flex; + flex-direction: column; + box-sizing: border-box; + height: 100dvh; + padding: var(--cyan-sinko-gap) 0 calc(var(--cyan-sinko-gap) + var(--cyan-sinko-key-depth)); + } + + .fm { + flex: 1 1 auto; + width: auto; + height: auto; + min-height: 0; + margin: 0 var(--cyan-sinko-gap); + } + + .panel { + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 100%; + height: 100%; + padding: var(--cyan-sinko-panel-padding); + } + + .files { + flex: 1 1 auto; + height: auto; + min-height: 0; + } +} + +@media (width > 600px) and (width <= 1152px) { + .panel.panel-right { + display: none; + } +} + +.keyspanel .cmd-button#f5, +.keyspanel .cmd-button#f6 { + display: inline-block; +} + +@media (width > 1152px) { + .panel { + width: calc(50% - var(--cyan-sinko-gap) / 2); + } + + .panel-single { + width: 100%; + } +} + +@media (width > 600px) { + .files li, + .fm-header { + display: flex; + align-items: center; + padding-left: var(--cyan-sinko-row-gutter); + } + + .files, + .fm-header { + margin-left: calc(var(--cyan-sinko-row-pull) * -1); + scrollbar-gutter: stable; + } + + .fm-header { + overflow-y: hidden; + } + + .files li > *, + .fm-header > * { + flex-shrink: 1; + min-width: 0; + } + + .files .mini-icon, + .fm-header .mini-icon { + flex-shrink: 0; + top: 0; + } + + .files .mode, + .fm-header .mode { + margin-left: auto; + } +} + +@media (width > 600px) { + .keyspanel { + display: flex; + justify-content: center; + flex-shrink: 0; + gap: 12px; + margin-top: var(--cyan-sinko-gap); + padding: 0 var(--cyan-sinko-gap); + } + + .keyspanel .cmd-button, + .keyspanel .cmd-button:hover { + flex: 0 1 80px; + width: auto; + min-width: 0; + margin: 0; + } +} + +@media (width > 600px) and (width <= 880px) { + .keyspanel { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 16px 12px; + } + + .keyspanel .cmd-button { + flex: 0 0 calc((100% - 4 * 12px) / 5); + } +} + +@media (width > 600px), (hover: hover) and (pointer: fine) { + .ace_editor .ace_scrollbar::-webkit-scrollbar { + width: var(--cyan-sinko-scrollbar-hit); + height: var(--cyan-sinko-scrollbar-hit); + } + + .ace_editor .ace_scrollbar::-webkit-scrollbar-track, + .ace_editor .ace_scrollbar::-webkit-scrollbar-thumb { + border: solid transparent; + border-width: 0 calc((var(--cyan-sinko-scrollbar-hit) - var(--cyan-sinko-scrollbar-size)) / 2); + border-radius: 1000px; + background-clip: padding-box; + } + + .ace_editor .ace_scrollbar::-webkit-scrollbar-track:horizontal, + .ace_editor .ace_scrollbar::-webkit-scrollbar-thumb:horizontal { + border-width: calc((var(--cyan-sinko-scrollbar-hit) - var(--cyan-sinko-scrollbar-size)) / 2) 0; + } + + .ace_editor .ace_scrollbar::-webkit-scrollbar-track { + background-color: var(--cyan-sinko-scrollbar-track); + } + + .ace_editor .ace_scrollbar::-webkit-scrollbar-thumb { + background-color: var(--cyan-sinko-accent); + } + + .ace_editor .ace_scrollbar::-webkit-scrollbar-corner { + background: transparent; + } + + @supports not selector(::-webkit-scrollbar) { + .ace_editor .ace_scrollbar { + scrollbar-width: thin; + scrollbar-color: var(--cyan-sinko-accent) transparent; + } + } +} + +@media (width > 600px), (hover: hover) and (pointer: fine) { + .files::-webkit-scrollbar, + .view:not(:has(.config))::-webkit-scrollbar, + .fm-header::-webkit-scrollbar { + width: var(--cyan-sinko-scrollbar-hit); + height: var(--cyan-sinko-scrollbar-hit); + } + + .files::-webkit-scrollbar-track, + .view:not(:has(.config))::-webkit-scrollbar-track, + .files::-webkit-scrollbar-thumb, + .view:not(:has(.config))::-webkit-scrollbar-thumb { + border: solid transparent; + border-width: 0 calc((var(--cyan-sinko-scrollbar-hit) - var(--cyan-sinko-scrollbar-size)) / 2); + border-radius: 1000px; + background-clip: padding-box; + } + + .files::-webkit-scrollbar-track:horizontal, + .view:not(:has(.config))::-webkit-scrollbar-track:horizontal, + .files::-webkit-scrollbar-thumb:horizontal, + .view:not(:has(.config))::-webkit-scrollbar-thumb:horizontal { + border-width: calc((var(--cyan-sinko-scrollbar-hit) - var(--cyan-sinko-scrollbar-size)) / 2) 0; + } + + .view:not(:has(.config))::-webkit-scrollbar-corner { + background: transparent; + } + + .files::-webkit-scrollbar-track, + .view:not(:has(.config))::-webkit-scrollbar-track { + background-color: var(--cyan-sinko-scrollbar-track); + } + + .files::-webkit-scrollbar-thumb, + .view:not(:has(.config))::-webkit-scrollbar-thumb { + background-color: var(--cyan-sinko-accent); + } + + .files::-webkit-scrollbar-button, + .view:not(:has(.config))::-webkit-scrollbar-button { + display: none; + } + + .files::-webkit-scrollbar-button:vertical:start:decrement, + .view:not(:has(.config))::-webkit-scrollbar-button:vertical:start:decrement, + .files::-webkit-scrollbar-button:vertical:end:increment, + .view:not(:has(.config))::-webkit-scrollbar-button:vertical:end:increment { + display: block; + height: 20px; + background: center / 8px 6px no-repeat; + } + + .files::-webkit-scrollbar-button:vertical:start:decrement, + .view:not(:has(.config))::-webkit-scrollbar-button:vertical:start:decrement { + background-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 6%27%3E%3Cpath d=%27M4 0l4 6H0z%27 fill=%27%2358bfd9%27/%3E%3C/svg%3E'); + } + + .files::-webkit-scrollbar-button:vertical:end:increment, + .view:not(:has(.config))::-webkit-scrollbar-button:vertical:end:increment { + background-image: url('data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 6%27%3E%3Cpath d=%27M0 0h8L4 6z%27 fill=%27%2358bfd9%27/%3E%3C/svg%3E'); + } + + @supports not selector(::-webkit-scrollbar) { + .files, + .fm-header, + .view:not(:has(.config)) { + scrollbar-width: thin; + scrollbar-color: var(--cyan-sinko-accent) transparent; + } + } +} diff --git a/json/help.json b/json/help.json index 44f792489b..39277c7bea 100644 --- a/json/help.json +++ b/json/help.json @@ -35,7 +35,7 @@ "--terminal-auto-restart ": "restart command on exit", "--vim ": "enable vim hot keys", "--columns ": "set visible columns", - "--theme ": "set theme 'light' or 'dark'", + "--theme ": "set theme 'light', 'dark', or 'cyan-sinko'", "--export ": "enable export of config through a server", "--export-token ": "authorization token used by export server", "--import ": "enable import of config", diff --git a/man/cloudcmd.1 b/man/cloudcmd.1 index dab36a2cff..ac07cf8ed3 100644 --- a/man/cloudcmd.1 +++ b/man/cloudcmd.1 @@ -58,7 +58,7 @@ programs in browser from any computer, mobile or tablet device. --terminal-auto-restart restart command on exit --vim enable vim hot keys --columns set visible columns - --theme set theme 'light' or 'dark' + --theme set theme 'light', 'dark', or 'cyan-sinko' --export enable export of config through a server --export-token authorization token used by export server --import enable import of config diff --git a/server/themes.spec.js b/server/themes.spec.js index 709896e88e..3f05848afb 100644 --- a/server/themes.spec.js +++ b/server/themes.spec.js @@ -6,6 +6,7 @@ import {getThemes, isDev} from './theme.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); +const removeQuotes = (a) => a.replace(/['"]/g, ''); test('themes: dev', (t) => { const themes = getThemes({ @@ -19,6 +20,18 @@ test('themes: dev', (t) => { t.end(); }); +test('themes: dev: cyan-sinko', (t) => { + const themes = getThemes({ + isDev: true, + }); + + const css = fs.readFileSync(`${__dirname}/../css/themes/cyan-sinko.css`, 'utf8'); + const result = removeQuotes(themes['cyan-sinko']).includes(removeQuotes(css)); + + t.ok(result); + t.end(); +}); + test('themes: no args', (t) => { const currentIsDev = isDev(); isDev(true); diff --git a/tmpl/config.hbs b/tmpl/config.hbs index 6002cd8b96..27009f05aa 100644 --- a/tmpl/config.hbs +++ b/tmpl/config.hbs @@ -47,6 +47,7 @@