Added kando

This commit is contained in:
Nicole 2026-02-04 18:05:27 +01:00
parent c09ffcb130
commit b90d78e850
131 changed files with 5962 additions and 0 deletions

View file

@ -0,0 +1 @@
1840225582167052180

1
.config/kando/SingletonLock Symbolic link
View file

@ -0,0 +1 @@
nixos-5403

View file

@ -0,0 +1 @@
/tmp/scoped_dirSpGAv4/SingletonSocket

52
.config/kando/config.json Normal file
View file

@ -0,0 +1,52 @@
{
"locale": "auto",
"showIntroductionDialog": false,
"menuTheme": "default",
"darkMenuTheme": "default",
"menuThemeColors": {
"neon-lights": {
"glow-color": "rgb(203 166 247 / 0.75)",
"connector-color": "rgb(180 190 254 / 0.75)"
},
"default": {
"background-color": "rgb(30 30 46)",
"text-color": "rgb(205 214 244)",
"border-color": "rgb(69 71 90)",
"hover-color": "rgb(180 190 254)"
}
},
"darkMenuThemeColors": {},
"enableDarkModeForMenuThemes": false,
"soundTheme": "simple-clicks",
"soundVolume": 0.5,
"ignoreWriteProtectedConfigFiles": false,
"settingsWindowColorScheme": "system",
"settingsWindowFlavor": "sakura-system",
"trayIconFlavor": "color",
"lazyInitialization": false,
"enableVersionCheck": true,
"zoomFactor": 1.3,
"centerDeadZone": 50,
"minParentDistance": 150,
"dragThreshold": 15,
"fadeInDuration": 150,
"fadeOutDuration": 200,
"keepInputFocus": false,
"enableMarkingMode": true,
"enableTurboMode": true,
"warpMouse": true,
"hoverModeNeedsConfirmation": false,
"gestureMinStrokeLength": 250,
"gestureMinStrokeAngle": 20,
"gestureJitterThreshold": 10,
"gesturePauseTimeout": 10,
"fixedStrokeLength": 0,
"rmbSelectsParent": false,
"enableGamepad": true,
"gamepadBackButton": 1,
"gamepadCloseButton": 2,
"sameShortcutBehavior": "nothing",
"useDefaultOsShowSettingsHotkey": true,
"hideSettingsButton": true,
"settingsButtonPosition": "bottom-right"
}

View file

@ -0,0 +1,10 @@
# SPDX-FileCopyrightText: Nils277 <https://github.com/Nils277>
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["preview.jpg"]
precedence = "aggregate"
SPDX-FileCopyrightText = "Nils277 <https://github.com/Nils277>"
SPDX-License-Identifier = "CC0-1.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View file

@ -0,0 +1,213 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-FileCopyrightText: Nils277 <https://github.com/Nils277> */
/* SPDX-License-Identifier: CC0-1.0 */
.menu-node {
/* Center */
--center-size: 64px;
/* Children */
--child-size: 42px;
--child-distance: 72px;
/* Labels */
--label-height: 34px;
/* Grandchildren */
--grandchild-size: 32px;
--grandchild-distance: 0px;
/* Connector */
--connector-width: 6px;
/* Transitions */
--menu-transition: transform 200ms ease, left 200ms ease, top 200ms ease, width 200ms ease, height 200ms ease, margin 180ms ease, padding 180ms ease, opacity 160ms ease;
--label-transition: opacity 200ms ease;
--connector-transition: width 100ms ease, opacity 200ms ease;
--color-transition: background-color 160ms ease, border 160ms ease, color 160ms ease, box-shadow 160ms ease, outline 160ms ease;
--label-tooltop-delay: 400ms;
/* Calculation of label position (reduce the angle in the horizontal to 50%) */
/* This calculation could be simplified with the abs() and sign() methods but this version of css does not support it */
--angle_signed: calc(var(--angle) - 180deg);
--angle_signed_pos: calc(max(0deg, ((var(--angle_signed) - 90deg) * 0.5) + min( 90deg, 90 * var(--angle_signed))));
--angle_signed_neg: calc(min(0deg, ((var(--angle_signed) + 90deg) * 0.5) + max(-90deg, 90 * var(--angle_signed))));
--angle_label: 90deg + var(--angle_signed_pos) + var(--angle_signed_neg);
--label-x: calc(cos(var(--angle_label)));
--label-y: calc(sin(var(--angle_label)));
transition: var(--menu-transition);
/* Positioning ---------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
/* Grandchild items are positioned around the child items. */
&.grandchild {
transform: translate(calc(var(--grandchild-distance) * var(--dir-x)),
calc(var(--grandchild-distance) * var(--dir-y)));
}
/* Theme Layers --------------------------------------------------------------------- */
/* We hide all icons by default. They will be shown further down in this
file for the the child items. */
.icon-container {
position: relative;
opacity: 0;
width: 100%;
clip-path: circle(45% at 50% 50%);
transition: var(--menu-transition);
}
.label-layer,
.icon-layer {
position: absolute;
box-shadow: 0 0 16px rgba(0, 0, 0, 0.5);
}
.label-layer {
transform: translate(calc(var(--child-size) * var(--label-x)), calc(var(--child-size) * var(--label-y)));
opacity: 0;
background-color: var(--label-background);
color: var(--label-text);
white-space: nowrap;
height: var(--label-height);
border-radius: var(--label-height);
border: 1px solid color-mix(in lab, var(--label-background) 66%, #808080 100%);
top: calc(-1 * var(--label-height) / 2);
padding: 7px 12px;
font-size: 15px;
box-shadow: none;
transition-delay: 0;
transition: var(--label-transition);
}
&.right>.label-layer {
left: calc(-0.35 * var(--child-size));
}
&.left>.label-layer {
right: calc(-0.35 * var(--child-size));
}
&.top>.label-layer {
bottom: calc(0.65 * var(--child-size));
top: inherit;
transform: translateX(-50%);
}
&.bottom>.label-layer {
top: calc(0.65 * var(--child-size));
transform: translateX(-50%);
}
.icon-layer {
top: calc(-0.5 * var(--child-size));
left: calc(-0.5 * var(--child-size));
width: var(--child-size);
height: var(--child-size);
border-radius: 50%;
background-color: var(--circle-background);
color: var(--icon);
z-index: 1;
padding: 3px;
transition: var(--color-transition), var(--menu-transition);
}
&.hovered>.icon-layer {
background-color: var(--circle-background-hovered);
color: var(--icon-hovered);
}
&.active>.icon-layer {
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
box-shadow: 0 0 12px rgba(0, 0, 0, 0.3);
color: var(--icon);
background-color: var(--center-background-hovered);
transition: var(--menu-transition), var(--color-transition);
}
&.active:has(>.hovered)>.icon-layer {
background-color: var(--center-background);
}
&.grandchild>.icon-layer {
top: calc(-0.50 * var(--grandchild-size));
left: calc(-0.50 * var(--grandchild-size));
width: var(--grandchild-size);
height: var(--grandchild-size);
box-shadow: none;
background-color: transparent ;
}
/* When the center is hovered, set the color of the parent too */
&.type-submenu.parent:not(.active).hovered>.icon-layer {
background-color: var(--center-background-hovered);
color: var(--icon);
}
/* The active menu item is the center of the menu. */
&.child.hovered>.label-layer {
transition: var(--label-transition);
transition-delay: var(--label-tooltop-delay);
opacity: 1;
}
/* Show the icons of the parent and child items. */
&.active>.icon-layer>.icon-container,
&.parent>.icon-layer>.icon-container,
&.child>.icon-layer>.icon-container {
transition: var(--menu-transition);
opacity: 1;
}
/* We disable any transition for dragged submenu items. */
&.dragged.type-submenu {
transition: none;
}
/* Connectors ----------------------------------------------------------------------- */
.connector {
transition: var(--connector-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
background-color: var(--connector);
opacity: 0;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
&:has(>.parent).hovered>.connector,
&:has(>.active.type-submenu).hovered>.connector,
&:has(>.dragged.type-submenu).hovered>.connector {
background-color: color-mix(in srgb, var(--connector) 100%, var(--center-background-hovered) 90%);
}
&:has(>.dragged)>.connector,
&:has(>.clicked)>.connector {
transition: none;
}
&:has(>.parent)>.connector,
&:has(>.active.type-submenu)>.connector,
&:has(>.dragged.type-submenu)>.connector {
opacity: 1;
}
}
/* Center Text ------------------------------------------------------------------------ */
.center-text {
display: none;
}

View file

@ -0,0 +1,52 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-FileCopyrightText: Nils277 <https://github.com/Nils277>
// SPDX-License-Identifier: CC0-1.0
{
name: 'Adwaita Circles',
author: 'Simon Schneegans, Nils277',
license: 'CC0-1.0',
themeVersion: '1.0',
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 128,
// These colors can be configured by the user and are vailable in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
//center
'center-background' : '#F5F5F5',
'center-background-hovered' : '#D0D0D0',
// Circle
'circle-background' : '#F5F5F5',
'circle-background-hovered': '#3584E4',
// Icons
'icon': '#222226',
'icon-hovered': '#FFFFFF',
// Label
'label-background': '#030408',
'label-text': '#FFFFFF',
// Connector
'connector': '#FFFFFF'
},
// This theme uses two layers, one for the icon and the background and one
// for the texts which appear next to the hovered item.
layers: [
{ class: 'icon-layer', content: 'icon' },
{ class: 'label-layer', content: 'name' },
],
}

View file

@ -0,0 +1,10 @@
# SPDX-FileCopyrightText: EVNTech Vache <https://discord.com/users/569168465030676497>
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["*.jpg", "*.png"]
precedence = "aggregate"
SPDX-FileCopyrightText = "EVNTech Vache <https://discord.com/users/569168465030676497>"
SPDX-License-Identifier = "CC0-1.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View file

@ -0,0 +1,177 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: EVNTech Vache <https://discord.com/users/569168465030676497> */
/* SPDX-License-Identifier: CC0-1.0 */
.menu-node {
--child-distance: 90px;
--grandchild-distance: 25px;
--grandchild-size: 16px;
--center-size: 80px;
--icon-size: 40px;
--connector-width: 10px;
--menu-transition: transform 200ms ease, opacity 200ms ease;
--connector-transition: width 200ms ease, opacity 200ms ease;
transition: var(--menu-transition);
/* Positioning ---------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child.type-submenu {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
&.child:not(.type-submenu) {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))) !important;
}
/* Grandchild items are positioned around the child items. */
&.grandchild {
transform: translate(calc(var(--grandchild-distance) * var(--dir-x)),
calc(var(--grandchild-distance) * var(--dir-y)));
}
/* Theme Layers --------------------------------------------------------------------- */
/* We hide all icons by default. They will be shown further down in this file for the
the child items. */
.icon-container {
position: relative;
top: 0px;
left: 0;
width: 100%;
opacity: 90%;
clip-path: circle(45% at 50% 50%);
transition: var(--menu-transition);
color: var(--accent-color);
}
.label-layer,
.icon-layer {
position: absolute;
transition: var(--menu-transition);
}
.label-layer {
transform: translate(calc(45px * var(--dir-x)), calc(45px * var(--dir-y)));
opacity: 0;
background-color: var(--label-background-color);
color: var(--text-color);
border: 1px solid var(--border-color);
white-space: nowrap;
height: var(--icon-size);
border-radius: var(--icon-size);
top: calc(-1 * var(--icon-size) / 2);
padding: calc(var(--icon-size) / 5) calc(var(--icon-size) / 3);
font-size: calc(var(--icon-size) / 2.7);
}
/* The active menu item is the center of the menu. */
&.child>.label-layer {
box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
opacity: 1;
}
&.hovered>.label-layer {
color: var(--hover-color);
border-color: var(--hover-color);
box-shadow: 0 0 10px var(--hover-color);
}
&.right>.label-layer {
left: calc(-1 * var(--icon-size)/2);
}
&.left>.label-layer {
right: calc(-1 * var(--icon-size)/2);
}
&.top>.label-layer {
bottom: calc(0.4 * var(--icon-size));
top: inherit;
transform: translate(-50%, -10px);
}
&.bottom>.label-layer {
top: calc(0.4 * var(--icon-size));
transform: translate(-50%, 10px);
}
.icon-layer {
top: calc(-1 * var(--icon-size) / 2);
left: calc(-1 * var(--icon-size) / 2);
width: var(--icon-size);
height: var(--icon-size);
border-radius: 50%;
box-shadow: 0px 0 3px rgba(0, 0, 0, 0.6);
background-color: var(--circle-color);
z-index: 1;
}
&.active>.icon-layer {
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
}
&.grandchild>.icon-layer {
top: calc(-1 * var(--grandchild-size) / 2);
left: calc(-1 * var(--grandchild-size) / 2);
width: var(--grandchild-size);
height: var(--grandchild-size);
box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.6);
opacity: 90%;
background-color: var(--border-color);
}
/* Show the icons of the parent and child items. */
&.parent>.icon-layer>.icon-container,
&.child>.icon-layer>.icon-container {
opacity: 1;
}
/* We disable any transition for dragged submenu items. */
&.dragged.type-submenu {
transition: none;
}
/* Connectors ----------------------------------------------------------------------- */
.connector {
transition: var(--connector-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
background-color: var(--connector-color);
opacity: 0;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.5);
}
&:has(>.dragged)>.connector,
&:has(>.clicked)>.connector {
transition: none;
}
&:has(>.parent)>.connector,
&:has(>.active.type-submenu)>.connector,
&:has(>.dragged.type-submenu)>.connector {
opacity: 1;
}
}
/* Center Text ------------------------------------------------------------------------ */
.center-text {
display: none;
}

View file

@ -0,0 +1,46 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: EVNTech Vache <https://discord.com/users/569168465030676497> */
// SPDX-License-Identifier: CC0-1.0
{
name: "EVNTech Vache",
author: "EVNTech Vache",
license: "CC0-1.0",
themeVersion: "1.0",
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 160,
// This theme draws child items below their parent items.
drawChildrenBelow: false,
// These colors can be configured by the user and are vailable in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
"accent-color": "#007AFF",
"hover-color": "#54c474",
"connector-color": "#f5f5f5",
"circle-color": "#f5f5f5",
"border-color": "#f5f5f5",
"label-background-color": "#f5f5f5",
"text-color": "#1F1F1F",
},
// This theme uses two layers, one for the icon and the background and one for the arrow
// which points to the hovered item.
layers: [
{ class: "icon-layer", content: "icon" },
{ class: "label-layer", content: "name" },
],
}

View file

@ -0,0 +1,16 @@
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = "preview.jpg"
precedence = "aggregate"
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
path = "border.svg"
precedence = "aggregate"
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
SPDX-License-Identifier = "CC0-1.0"

View file

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="64"
height="64"
viewBox="0 0 16.933333 16.933333"
version="1.1"
id="svg689"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="border.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview691"
pagecolor="#ffffff"
bordercolor="#111111"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="20.70196"
inkscape:cx="37.460221"
inkscape:cy="35.358971"
inkscape:window-width="3840"
inkscape:window-height="2123"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs686">
<filter
inkscape:collect="always"
style="color-interpolation-filters:sRGB"
id="filter851"
x="-0.072925616"
y="-0.064715923"
width="1.1458512"
height="1.1294318">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.18183391"
id="feGaussianBlur853" />
</filter>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
sodipodi:type="star"
style="mix-blend-mode:normal;fill:none;fill-opacity:0.809856;stroke:#000000;stroke-width:0.165901;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter851);stop-color:#000000"
id="path849"
inkscape:flatsided="true"
sodipodi:sides="6"
sodipodi:cx="0"
sodipodi:cy="0"
sodipodi:r1="4.1116958"
sodipodi:r2="3.560833"
sodipodi:arg1="0.52359878"
sodipodi:arg2="1.0471976"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 3.560833,2.0558479 -1.8098456e-8,4.1116958 -3.560833,2.0558479 l 0,-4.1116958 L 1.8098456e-8,-4.1116958 3.560833,-2.0558479 Z"
transform="matrix(0,1.8223353,-1.8223353,0,8.4666667,8.4666667)" />
<path
sodipodi:type="star"
style="fill:none;fill-opacity:0.809856;stroke:#000000;stroke-width:0.165901;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path2364"
inkscape:flatsided="true"
sodipodi:sides="6"
sodipodi:cx="0"
sodipodi:cy="0"
sodipodi:r1="4.1116958"
sodipodi:r2="3.560833"
sodipodi:arg1="0.52359878"
sodipodi:arg2="1.0471976"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 3.560833,2.0558479 -1.8098456e-8,4.1116958 -3.560833,2.0558479 l 0,-4.1116958 L 1.8098456e-8,-4.1116958 3.560833,-2.0558479 Z"
transform="matrix(0,1.8223353,-1.8223353,0,8.4666667,8.4666667)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View file

@ -0,0 +1,153 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-License-Identifier: CC0-1.0 */
/**
* This theme is a hexagonal menu with a glowing effect. It is kind of a special theme
* because it only works up to 6 items. Also, if you have fewer, you should ensure that
* all items are arranged in the six cardinal directions. Otherwise, the menu will look
* weird.
*/
.menu-node {
--tile-size: 130px;
--tile-offset: calc(var(--tile-size) * 0.5 * 1.732050808);
--hexagon: 0% 50%, 25% 6.7%, 75% 6.7%, 100% 50%, 75% 93.3%, 25% 93.3%, 0% 50%;
--menu-transition: all 200ms ease;
transition: var(--menu-transition);
/* Positioning ---------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child {
transform: translate(calc(var(--tile-offset) * var(--dir-x)), calc(var(--tile-offset) * var(--dir-y)));
}
/* Grandchild items are positioned around the child items. */
&.grandchild {
transform: translate(calc(var(--tile-offset) * var(--dir-x) / 3), calc(var(--tile-offset) * var(--dir-y) / 3));
}
/* Theme Layers --------------------------------------------------------------------- */
.icon-container {
color: var(--text-color);
transition: var(--menu-transition);
margin: 15%;
width: 70% !important;
height: 70% !important;
}
.icon-layer,
.glow-layer {
position: absolute;
transition: var(--menu-transition);
}
.icon-layer {
clip-path: polygon(var(--hexagon));
background-color: var(--background-color);
}
.glow-layer {
transform: scale(1.13);
filter: drop-shadow(0 0 5px var(--glow-color));
z-index: 10;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
mask: url('border.svg') no-repeat center / contain;
background: var(--line-color)
}
}
&.active>.icon-layer,
&.active>.glow-layer {
top: calc(-1 * var(--tile-size) / 2);
left: calc(-1 * var(--tile-size) / 2);
width: var(--tile-size);
height: var(--tile-size);
}
&.active>.icon-layer>.icon-container {
opacity: 0.2;
}
/* Hovered nodes are highlighted. If a child is highlighted, we also highlight all of
its grandchildren. If the parent is highlighted, we also highlight all of its non-
active children. */
&.active.hovered>.icon-layer,
&.parent.hovered>.icon-layer,
&.parent.hovered>.grandchild>.icon-layer,
&.child.hovered .icon-layer {
background-color: var(--hover-color);
}
/* Child items are displayed around the active node. The parent node of the active
node is displayed in a similar style. */
&.parent>.icon-layer,
&.parent>.glow-layer,
&.child>.icon-layer,
&.child>.glow-layer {
top: calc(-1 * var(--tile-size) / 2);
left: calc(-1 * var(--tile-size) / 2);
width: var(--tile-size);
height: var(--tile-size);
}
&.parent.type-submenu>.icon-layer,
&.parent.type-submenu>.glow-layer,
&.child.type-submenu>.icon-layer,
&.child.type-submenu>.glow-layer,
&.grandchild>.icon-layer,
&.grandchild>.glow-layer {
top: calc(-1 * var(--tile-size) / 6);
left: calc(-1 * var(--tile-size) / 6);
width: calc(var(--tile-size) / 3);
height: calc(var(--tile-size) / 3);
}
/* We disable any transition for dragged items. */
&.dragged {
transition: none;
}
/* Connectors ----------------------------------------------------------------------- */
.connector {
transition: var(--menu-transition);
height: 14px;
background: var(--line-color);
top: -7px;
box-shadow: 0 0 5px var(--line-color), 0 0 15px var(--glow-color);
}
&:has(.dragged)>.connector {
transition: none;
}
}
/* Center Text ------------------------------------------------------------------------ */
.center-text {
color: var(--text-color);
transition: var(--opacity-transition);
font-size: 16px;
font-weight: bold;
text-shadow: 0 0 5px var(--glow-color);
line-height: 22px;
}

View file

@ -0,0 +1,43 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-License-Identifier: CC0-1.0
{
name: 'Hexperiment',
author: 'Simon Schneegans',
license: 'CC0-1.0',
themeVersion: '1.0',
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 160,
// The width at which the center text is wrapped.
centerTextWrapWidth: 90,
// This theme draws child items below their parent items.
drawChildrenBelow: false,
// These colors can be configured by the user and are vailable in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
'background-color': 'rgb(0, 0, 0)',
'text-color': 'rgb(255, 255, 255)',
'line-color': 'rgb(255, 227, 233)',
'glow-color': 'rgba(255, 30, 195, 0.85)',
'hover-color': 'rgb(60, 28, 64)',
},
// This theme is very simple and only uses one layer for the menu items.
layers: [{ class: 'glow-layer' }, { class: 'icon-layer', content: 'icon' }],
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: yar2000T <https://github.com/yar2000T>
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["*.jpg", "*.png"]
precedence = "aggregate"
SPDX-FileCopyrightText = "yar2000T <https://github.com/yar2000T>"
SPDX-License-Identifier = "CC-BY-4.0"
# Font downloaded from: https://www.nerdfonts.com/font-downloads
[[annotations]]
path = ["0xProtoNerdFontPropo-Regular.otf"]
precedence = "aggregate"
SPDX-FileCopyrightText = "(c) 2023, 0xType Project Authors (https://github.com/0xType)"
SPDX-License-Identifier = "OFL-1.1"

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 844 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -0,0 +1,170 @@
/* SPDX-FileCopyrightText: yar2000T <https://github.com/yar2000T> */
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-License-Identifier: CC-BY-4.0 */
@font-face {
font-family: 'ProtoNerdPropo-Regular';
src: url('0xProtoNerdFontPropo-Regular.otf');
}
#kando-menu {
.menu-node {
color: transparent;
--child-distance: 100px;
--child-size: 60px;
--fade-distance: 80px;
--fade-size: 45px;
--connector-width: 10px;
--center-size: 120px;
--menu-transition: 150ms ease;
transition: var(--menu-transition);
&.active {
--center-size: 100px;
}
&.child {
transform: translate(
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))
);
}
&.grandchild {
transform: translate(
calc(var(--fade-distance) * var(--dir-x)),
calc(var(--fade-distance) * var(--dir-y))
);
}
&.active:has(.hovered) > .child {
transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15))
translate(
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))
);
&.hovered {
transform: scale(1.15)
translate(
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))
);
}
}
.icon-container {
color: var(--text-color);
margin: 10px;
width: calc(100% - 20px);
image-rendering: pixelated;
}
&.hovered.clicked > .icon-layer {
transform: scale(0.95);
}
&.active > .icon-layer {
position: absolute;
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
background-image: url('icon.png');
background-size: contain;
image-rendering: high-quality;
box-shadow: 0 0 8px var(--hover-color);
}
&.parent > .icon-layer,
&.child > .icon-layer {
position: absolute;
top: calc(-1 * var(--child-size) / 2);
left: calc(-1 * var(--child-size) / 2);
width: var(--child-size);
height: var(--child-size);
background-image: url('icon.png');
background-size: contain;
image-rendering: high-quality;
}
&.grandchild > .icon-layer {
position: absolute;
top: calc(-1 * var(--fade-size) / 2);
left: calc(-1 * var(--fade-size) / 2);
width: var(--fade-size);
height: var(--fade-size);
background-image: url('icon.png');
background-size: contain;
image-rendering: high-quality;
}
&.parent.hovered > .icon-layer,
&.child.hovered > .icon-layer {
background-image: url('icon-highlight.png');
image-rendering: high-quality;
}
&.grandchild {
opacity: 0;
}
&.dragged {
transition: none;
}
.connector {
transition: var(--menu-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
border-width: 5px 60px 5px 60px;
border-style: solid;
border-image: url('connector.png');
border-image-slice: 5 60 5 60;
border-image-repeat: round;
image-rendering: high-quality;
opacity: 0;
}
&:has(.dragged) > .connector,
&:has(.clicked) > .connector {
transition: none;
}
&.parent > .connector,
&:has(.dragged) > .connector,
&:has(.clicked) > .connector {
opacity: 1;
}
}
.center-text {
font-family: 'ProtoNerdPropo-Regular', sans-serif;
text-shadow: 2px 2px 0px black;
color: var(--text-color);
font-size: 18px;
line-height: 20px;
}
.selection-wedges {
mask: radial-gradient(circle at var(--center-x) var(--center-y), black 100px, transparent 50%);
&.hovered {
--width: calc(var(--end-angle) - var(--start-angle));
background: conic-gradient(
from calc(var(--start-angle)) at var(--center-x) var(--center-y),
var(--wedge-highlight-color) var(--width),
var(--wedge-color) var(--width)
);
}
background: var(--wedge-color);
}
}

View file

@ -0,0 +1,28 @@
// SPDX-FileCopyrightText: yar2000T <https://github.com/yar2000T>
// SPDX-License-Identifier: CC0-1.0
{
name: "KnightForge",
author: "yar2000T",
license: "CC-BY-4.0",
themeVersion: "1.0",
engineVersion: 1,
maxMenuRadius: 160,
centerTextWrapWidth: 120,
drawChildrenBelow: true,
drawSelectionWedges: true,
colors: {
"text-color": "rgb(255, 255, 255)",
"wedge-highlight-color": "rgba(0, 0, 0, 0.1)",
"wedge-color": "rgba(0, 0, 0, 0.2)",
},
layers: [{ class: 'label-layer', content: 'name' },
],
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["*.jpg", "*.png"]
precedence = "aggregate"
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
SPDX-License-Identifier = "CC-BY-4.0"
# Font downloaded from: https://www.fontspace.com/minecraft-font-f28180
[[annotations]]
path = ["MinecraftRegular-Bmg3.otf"]
precedence = "aggregate"
SPDX-FileCopyrightText = "JDGraphics"
SPDX-License-Identifier = "CC0-1.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View file

@ -0,0 +1,141 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-License-Identifier: CC-BY-4.0 */
@font-face {
font-family: 'Minecraft';
src: url(MinecraftRegular-Bmg3.otf);
}
#kando-menu {
.menu-node {
--child-distance: 100px;
--child-size: 60px;
--fade-distance: 80px;
--fade-size: 45px;
--connector-width: 10px;
--menu-transition: 150ms ease;
transition: var(--menu-transition);
/* Positioning -------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
/* Grandchild items are positioned around the child items. They are not visible in
this theme, but we still need to position them so that child items can be properly
faded in and out. */
&.grandchild {
transform: translate(calc(var(--fade-distance) * var(--dir-x)),
calc(var(--fade-distance) * var(--dir-y)));
}
/* Theme Layers ------------------------------------------------------------------- */
/* This theme comes with only one layer. This contains the icon of the menu item. */
/* Icons are drawn pixelated. */
.icon-container {
color: var(--text-color);
margin: 10px;
width: calc(100% - 20px);
image-rendering: pixelated;
}
/* If a node is clicked, we scale it down a bit. */
&.hovered.clicked>.icon-layer {
transform: scale(0.95);
}
/* Child items are displayed around the active node. The parent node of the active
node is displayed in a similar style. */
&.active>.icon-layer,
&.parent>.icon-layer,
&.child>.icon-layer,
&.grandchild>.icon-layer {
position: absolute;
top: calc(-1 * var(--child-size) / 2);
left: calc(-1 * var(--child-size) / 2);
width: var(--child-size);
height: var(--child-size);
background-image: url('icon.png');
background-size: contain;
image-rendering: pixelated;
}
&.grandchild>.icon-layer {
top: calc(-1 * var(--fade-size) / 2);
left: calc(-1 * var(--fade-size) / 2);
width: var(--fade-size);
height: var(--fade-size);
}
/* Hovered child or parent items are highlighted. */
&.parent.hovered>.icon-layer,
&.child.hovered>.icon-layer {
background-image: url('icon-highlight.png');
}
/* Grandchild items are transparent. */
&.grandchild {
opacity: 0;
}
/* We disable any transition for dragged items. */
&.dragged {
transition: none;
}
/* Connectors --------------------------------------------------------------------- */
.connector {
transition: var(--menu-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
border-width: 5px 60px 5px 60px;
border-style: solid;
border-image: url('connector.png');
border-image-slice: 5 60 5 60;
border-image-repeat: round;
image-rendering: pixelated;
opacity: 0;
}
&:has(.dragged)>.connector,
&:has(.clicked)>.connector {
transition: none;
}
&.parent>.connector,
&:has(.dragged)>.connector,
&:has(.clicked)>.connector {
opacity: 1;
}
}
/* Center Text ---------------------------------------------------------------------- */
.center-text {
font-family: 'Minecraft', sans-serif;
text-shadow: 2px 2px 0px black;
color: var(--text-color);
font-size: 18px;
line-height: 20px;
}
}

View file

@ -0,0 +1,39 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-License-Identifier: CC0-1.0
{
name: "Minecraft",
author: "Simon Schneegans",
license: "CC-BY-4.0",
themeVersion: "1.0",
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 160,
// The width at which the center text is wrapped.
centerTextWrapWidth: 120,
// This theme draws child items below their parent items.
drawChildrenBelow: true,
// These colors can be configured by the user and are vailable in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
"text-color": "rgb(255, 255, 255)",
},
// This theme is very simple and only uses one layer for the menu items.
layers: [{ class: "icon-layer", content: "icon" }],
}

View file

@ -0,0 +1,6 @@
<!--
SPDX-FileCopyrightText: reass <https://github.com/reassDev>
SPDX-License-Identifier: CC-BY-4.0
-->
Modified version of Bent Photon by Neigh to include text and icon color customization.

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: reass <https://github.com/reassDev>
# SPDX-License-Identifier: CC-BY-4.0
version = 1
[[annotations]]
path = ["*.jpg", "*.png"]
precedence = "aggregate"
SPDX-FileCopyrightText = "reass <https://github.com/reassDev>"
SPDX-License-Identifier = "CC-BY-4.0"
# Font from: https://fonts.google.com/specimen/Space+Grotesk
[[annotations]]
path = ["SpaceGrotesk-Bold.otf"]
precedence = "aggregate"
SPDX-FileCopyrightText = "Copyright 2020 The Space Grotesk Project Authors (https://github.com/floriankarsten/space-grotesk)"
SPDX-License-Identifier = "OFL-1.1"

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View file

@ -0,0 +1,314 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: reass <https://github.com/reassDev> */
/* SPDX-FileCopyrightText: Copyright (c) 2024 NeighNeighNeigh */
/* SPDX-License-Identifier: MIT */
@font-face {
font-family: 'SpaceGrotesk-Bold';
src: url('SpaceGrotesk-Bold.otf') format('opentype');
}
#kando-menu {
--dots-spacing: 3px;
--dots-size: 1px;
background-color: var(--canvas-color);
background-image: radial-gradient(var(--dots-color) var(--dots-size), transparent 0);
background-size: var(--dots-spacing) var(--dots-spacing);
background-position: calc(var(--dots-spacing)-var(--dots-size)) calc(var(--dots-spacing)-var(--dots-size));
}
.menu-node {
--child-distance: 90px;
--grandchild-distance: 60px;
--center-size: 140px;
--icon-size: 32px;
--connector-width: 10px;
--menu-transition: transform 120ms ease-out, opacity 120ms ease-out;
--number-padding-left: 20px;
--box-height: 36px;
transform-origin: left top;
transition: var(--menu-transition);
display: flex;
flex-direction: row;
/* Positioning ---------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
/* Grandchild items are positioned around the child items. */
&.grandchild {
transform: translate(calc(var(--grandchild-distance) * var(--dir-x)),
calc(var(--grandchild-distance) * var(--dir-y)));
}
/* If there is a hovered child node, we scale all children up a bit to create a cool
zoom effect. The hovered child itself is scaled up even more. */
&.active:has(.hovered)>.child {
transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
&.hovered {
transform: scale(1.15) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
}
/* Theme Layers --------------------------------------------------------------------- */
/* We hide all icons by default. They will be shown further down in this file for the
the child items. */
.icon-container {
position: relative;
top: 0;
left: 0;
width: 100%;
opacity: 0;
transition: var(--menu-transition);
color: var(--icon-color);
}
.label-layer,
.icon-layer {
position: relative;
transition: var(--menu-transition);
}
.icon-layer {
width: var(--icon-size);
height: var(--icon-size);
margin-top: 2px;
z-index: 1;
}
.label-layer {
opacity: 0;
background-color: var(--lowlight-color);
color: var(--text-color);
font-size: 14px;
letter-spacing: 0.12em; /* Adjust this value as needed */
font-family: SpaceGrotesk-Bold;
line-height: var(--box-height);
border-radius: 5px;
white-space: nowrap;
height: var(--box-height);
padding: 0px 12px 0px var(--icon-size);
/* box-shadow: 0 2px 5px color-mix(in srgb, var(--lowlight-color) 50%, transparent);*/
text-transform: uppercase;
-webkit-font-smoothing: antialiased;
&::after {
padding-left: var(--number-padding-left);
color: var(--number-unhovered-color);
/* mix-blend-mode: overlay;*/
}
}
&:nth-last-child(4)>.label-layer::after {
content: "1";
}
&:nth-last-child(5)>.label-layer::after {
content: "2";
}
&:nth-last-child(6)>.label-layer::after {
content: "3";
}
&:nth-last-child(7)>.label-layer::after {
content: "4";
}
&:nth-last-child(8)>.label-layer::after {
content: "5";
}
&:nth-last-child(9)>.label-layer::after {
content: "6";
}
&:nth-last-child(10)>.label-layer::after {
content: "7";
}
&:nth-last-child(11)>.label-layer::after {
content: "8";
}
&:nth-last-child(12)>.label-layer::after {
content: "9";
}
&:nth-last-child(13)>.label-layer::after {
content: "a";
}
&:nth-last-child(14)>.label-layer::after {
content: "b";
}
&:nth-last-child(15)>.label-layer::after {
content: "c";
}
&.left>.label-layer {
top: calc(-1 * var(--icon-size) / 2);
left: -100%;
}
&.left>.icon-layer {
top: calc(-1 * var(--icon-size) / 2);
left: calc(-100% + var(--icon-size));
}
&.top>.label-layer {
top: calc(-2 * var(--icon-size) / 2);
left: calc(-50% - var(--icon-size) / 2);
}
&.top>.icon-layer {
top: calc(-2 * var(--icon-size) / 2);
left: calc(-50% + var(--icon-size) / 2);
}
&.bottom>.label-layer {
top: 0;
left: calc(-50% - var(--icon-size) / 2);
}
&.bottom>.icon-layer {
top: 0;
left: calc(-50% + var(--icon-size) / 2);
}
&.right>.label-layer {
top: calc(-1 * var(--icon-size) / 2);
left: calc(-1 * var(--icon-size));
}
&.right>.icon-layer {
top: calc(-1 * var(--icon-size) / 2);
left: 0;
}
&.active>.icon-layer {
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
}
/* The active menu item is the center of the menu. */
&.child>.label-layer {
opacity: 1;
}
&.parent>.icon-layer {
top: calc(-1 * var(--icon-size) / 2);
left: calc(-1 * var(--icon-size) / 2);
opacity: 0;
transform: scale(0);
}
/* Show the icons of the parent and child items. */
&.active>.icon-layer>.icon-container,
&.parent>.icon-layer>.icon-container,
&.child>.icon-layer>.icon-container {
opacity: 1;
}
/* We disable any transition for dragged submenu items. */
&.dragged {
transition: none;
}
&.grandchild {
opacity: 0;
}
&.hovered>.label-layer {
background-color: var(--highlight-color);
color: var(--text-color);
/* box-shadow: 0 3px 6px rgba(0, 0, 0, 0.35);*/
&::after {
padding-left: var(--number-padding-left);
color: color-mix(in srgb, var(--text-color) 50%, transparent);
}
}
&.hovered>.icon-layer>.icon-container {
color: var(--text-color)
}
/* Connectors ----------------------------------------------------------------------- */
.connector {
transition: var(--menu-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
background: transparent;
opacity: 1;
border-radius: var(--connector-width);
position: relative;
overflow: hidden;
}
.connector::before {
content: '';
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: calc(100% - (var(--center-size)*1)); /* Adjust how close the connector gets to the icon */
height: 100%;
background: linear-gradient(to right, color-mix(in srgb, var(--highlight-color) 0%, transparent) 0%, var(--highlight-color) 100%);
border-radius: calc(var(--connector-width) / 2);
opacity: 1;
transition: var(--menu-transition);
}
&:has(>.dragged)>.connector,
&:has(>.clicked)>.connector {
transition: none;
}
&:has(>.parent)>.connector,
&:has(>.active)>.connector,
&:has(>.dragged)>.connector {
opacity: 1;
}
}
/* Center Text ------------------------------------------------------------------------ */
.center-text {
display: none;
}

View file

@ -0,0 +1,46 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: reass <https://github.com/reassDev>
// SPDX-FileCopyrightText: Copyright (c) 2024 NeighNeighNeigh
// SPDX-License-Identifier: MIT
{
name: "Bent Photon Modified",
author: "reass and Neigh",
license: "CC0-1.0",
themeVersion: "1.0",
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 160,
// This theme draws child items below their parent items.
drawChildrenBelow: true,
// These colors can be configured by the user and are vailable in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
'lowlight-color': 'oklch(63.11% 0.2546 22.82 / 56%)',
'highlight-color': 'oklch(57.52% 0.2358 28.95)',
'text-color': 'oklch(84.38% 0.0173 45.4)',
'icon-color': 'oklch(84.38% 0.0173 45.4)',
'number-unhovered-color': 'oklch(91.11% 0.0295 4.56 / 84%)',
'canvas-color': 'oklch(50.76% 0.2933 286.69 / 7%)',
'dots-color': 'oklch(100% 0% 0deg / 0%)',
},
layers: [
{ class: "label-layer", content: "name" },
{ class: "icon-layer", content: "icon" },
],
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
# SPDX-FileCopyrightText: 2025 Rena and LCG
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["theme.css", "theme.json5"]
precedence = "aggregate"
SPDX-FileCopyrightText = ["Simon Schneegans <code@simonschneegans.de>", "2025 Rena and LCG"]
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
path = "preview.jpg"
precedence = "aggregate"
SPDX-FileCopyrightText = "2025 Rena and LCG"
SPDX-License-Identifier = "CC0-1.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

View file

@ -0,0 +1,678 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-FileCopyrightText: 2025 Rena and LCG */
/* SPDX-License-Identifier: CC0-1.0 */
/* 🧭 Navigation Theme - Modern minimalist ring navigation theme */
/* 🔧 v6.4: Simplified sector effects, removed sector-glow, retained core visuals */
/* === 🌈 New: Dual Background Layer System === */
/* 🌟 Left half screen background layer */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 50%;
height: 100%;
background: var(--background-layer-left);
pointer-events: none;
z-index: -10;
}
/* 🌟 Right half screen background layer */
body::after {
content: '';
position: fixed;
top: 0;
left: 50%;
width: 50%;
height: 100%;
background: var(--background-layer-right);
pointer-events: none;
z-index: -10;
}
/* === 🎨 Canvas Gradient Background === */
#kando-menu canvas {
background: linear-gradient(135deg,
#8B5CF6 0%, /* Blue-purple */
#A855F7 20%, /* Purple */
#EC4899 40%, /* Pink */
#F97316 60%, /* Orange */
#EAB308 80%, /* Yellow */
#F59E0B 100% /* Golden yellow */
) !important;
/* Disable all transition animations */
transition: none !important;
}
/* === 🎯 Menu Container Position Control: Disable Position Movement Animation === */
/* Solution: Disable unnecessary position movement animations when returning from submenu to parent */
#kando-menu {
/* 🚫 Disable menu container position movement animation, implementing "jump" instead of "move" */
transition: none !important;
}
/* 🔧 More precise control: disable main menu node position animations */
.menu-node.active {
/* 🚫 Disable menu node position movement animation */
transition: none !important;
}
/* 🔧 Globally disable menu node transform animations (except child icons) */
.menu-node:not(.child) {
/* 🚫 Disable transform animations for non-child icons */
transition: none !important;
}
/* === 🎨 Background Color Overlay === */
#kando-menu::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: var(--canvas-bg);
pointer-events: none;
z-index: -1;
/* Disable all transition animations */
transition: none !important;
}
/* === 📐 Core Layout Parameters === */
.menu-node {
--child-distance: 110px; /* Ring center radius - compact for tighter icon spacing */
--child-size: 60px; /* Icon container size */
--ring-inner-radius: 70px; /* Ring inner radius - continue shrinking for thick ring */
--ring-outer-radius: 150px; /* Ring outer radius */
--ring-width: 80px; /* Ring width - continue increasing for thick ring */
--menu-transition: transform 200ms cubic-bezier(0.4, 0.0, 0.2, 1);
/* 🚫 Default disable menu node transform animations (child icons will be overridden separately) */
transition: none !important;
}
/* === 🎯 Submenu Icon Layout === */
.menu-node.child {
/* Ring position - ensure icons are on ring centerline */
transform: translate(
calc(var(--child-distance) * var(--dir-x)),
calc(var(--child-distance) * var(--dir-y))
) !important;
/* ✅ Maintain icon expand animation (override to ensure priority) - Natural sway: like falling leaves natural sway */
transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1.2) !important;
}
/* === 🎨 Icon Layer Styles === */
.menu-node .icon-layer {
position: absolute;
border-radius: 50%;
transition: var(--menu-transition);
background: transparent;
}
/* === 🕳️ Center Area - Complete Void === */
.menu-node.active > .icon-layer {
background: transparent;
width: 0;
height: 0;
top: 0;
left: 0;
}
/* === ⭕ Submenu Icon Container === */
.menu-node.child > .icon-layer {
/* 🔧 Fix 1: Precise center alignment */
top: calc(-1 * var(--child-size) / 2);
left: calc(-1 * var(--child-size) / 2);
width: var(--child-size);
height: var(--child-size);
background: transparent;
position: relative;
z-index: 10;
/* 🎯 Ensure transform center point is at geometric center */
transform-origin: center center;
}
/* === 🎯 Sector Highlight Background - 🔧 Layered Solution === */
/* 🌌 Glow layer - below sector, responsible for sector-glow effect */
.menu-node.child.hovered::after {
content: '';
position: absolute;
/* Same position and size as sector */
top: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-y));
left: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-x));
width: calc(var(--ring-outer-radius) * 2);
height: calc(var(--ring-outer-radius) * 2);
border-radius: 50%;
background: transparent;
/* 🌟 Glow layer has removed sector-glow effect */
/* Preserve basic structure for future expansion */
opacity: 0;
z-index: 4; /* Below sector */
pointer-events: none;
transform-origin: center;
transition: opacity 200ms ease-out;
/* Use same mask to cut into sector shape, but glow will overflow */
mask:
radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)),
conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg);
mask-composite: intersect;
-webkit-mask:
radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)),
conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg);
-webkit-mask-composite: source-in;
}
/* 🎯 Sector main body - responsible for precise sector shape and background color */
.menu-node.child.hovered::before {
content: '';
position: absolute;
/* 🔧 Key fix: correctly calculate sector position, ensure concentric with ring */
/* From each child position, offset back to menu center, then position sector */
top: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-y));
left: calc(-1 * var(--ring-outer-radius) - var(--child-distance) * var(--dir-x));
width: calc(var(--ring-outer-radius) * 2);
height: calc(var(--ring-outer-radius) * 2);
/* 🌨️ Sector background and inner glow effect */
background: var(--sector-highlight);
/* 🌟 Only preserve inner glow, outer glow handled by ::after layer */
box-shadow:
/* Inner glow - using sector-inner-glow */
inset 0 0 15px var(--sector-inner-glow),
inset 0 0 30px var(--sector-inner-glow),
inset 0 0 45px var(--sector-inner-glow),
inset 0 0 60px var(--sector-inner-glow),
inset 0 0 75px var(--sector-inner-glow);
border-radius: 50%;
z-index: 5; /* 🔧 Restore normal level, sector-glow verified effective */
pointer-events: none;
/* Transform center point */
transform-origin: center;
/* Add animation transition - modified to 200ms sync */
transition: opacity 200ms ease-out;
/* Create sector: use mask to hollow inner circle and limit angle - ✅ Sector main body restore mask */
mask:
/* Outer circle - precisely match ring inner radius, no gap */
radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)),
/* Sector angle limit - solid sector */
conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg);
mask-composite: intersect;
-webkit-mask:
radial-gradient(circle at center, transparent calc(var(--ring-inner-radius) - 1px), black var(--ring-inner-radius)),
conic-gradient(from calc(var(--angle) - 22.5deg), black 0deg, black 45deg, transparent 45deg);
-webkit-mask-composite: source-in;
}
/* 🌟 Enhanced glow effect on hover - precise control version */
.menu-node.child.hovered:hover::before {
/* Enhanced glow on hover, expand inner glow range to middle position */
box-shadow:
/* Enhanced inner glow - sector-inner-glow, greatly expanded range */
inset 0 0 12px var(--sector-inner-glow),
inset 0 0 24px var(--sector-inner-glow),
inset 0 0 36px var(--sector-inner-glow),
inset 0 0 48px var(--sector-inner-glow),
inset 0 0 60px var(--sector-inner-glow),
inset 0 0 72px var(--sector-inner-glow),
inset 0 0 84px var(--sector-inner-glow);
opacity: 0.9;
}
/* 🚑 Fix: immediately hide sector highlight when not hovering */
.menu-node.child:not(.hovered)::before {
display: none !important;
}
/* === 🔵 Ring Background - 🌟 Add Multi-layer Glow Effects === */
.menu-node.active::after {
content: '';
position: absolute;
/* 🔧 Fix 4: Ring position precisely centered */
top: calc(-1 * var(--ring-outer-radius));
left: calc(-1 * var(--ring-outer-radius));
width: calc(var(--ring-outer-radius) * 2);
height: calc(var(--ring-outer-radius) * 2);
border-radius: 50%;
background: var(--ring-color);
/* 🌟 Ring inner glow effect (only preserve inset) */
box-shadow:
/* Inner glow - soft glow along ring inner edge */
inset 0 0 8px var(--ring-glow-inner),
inset 0 0 16px var(--ring-glow-inner),
inset 0 0 24px var(--ring-glow-inner);
z-index: -2; /* Ensure ring body is below icons */
pointer-events: none;
/* ✅ Enable ring body ripple effect - expanding from center outward */
transition: transform 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
animation: ring-ripple-expand 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
/* 🔧 Fix 5: Ensure transform center point is precisely centered */
transform-origin: 50% 50%;
/* Use mask to hollow inner circle creating ring */
mask: radial-gradient(circle at center, transparent var(--ring-inner-radius), black calc(var(--ring-inner-radius) + 1px));
-webkit-mask: radial-gradient(circle at center, transparent var(--ring-inner-radius), black calc(var(--ring-inner-radius) + 1px));
}
/* 🌟 Ring outer glow effect - separate element to avoid mask interference */
.menu-node.active::before {
content: '';
position: absolute;
/* Same position and size as ring */
top: calc(-1 * var(--ring-outer-radius));
left: calc(-1 * var(--ring-outer-radius));
width: calc(var(--ring-outer-radius) * 2);
height: calc(var(--ring-outer-radius) * 2);
border-radius: 50%;
background: transparent;
/* 🌟 Main glow and outer diffuse glow - not affected by mask */
box-shadow:
/* Main glow - primary glow effect around ring */
0 0 6px var(--ring-glow),
0 0 12px var(--ring-glow),
0 0 18px var(--ring-glow),
0 0 24px var(--ring-glow),
/* Outer diffuse glow - greatly enhanced visibility */
0 0 40px var(--ring-glow-outer),
0 0 60px var(--ring-glow-outer),
0 0 80px var(--ring-glow-outer),
0 0 120px var(--ring-glow-outer);
z-index: -3; /* Below ring body */
pointer-events: none;
/* ✅ Ring outer glow ripple effect animation - synchronized expansion with ring body */
transition: transform 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
opacity 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94),
box-shadow 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
animation: ring-ripple-glow-expand 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
transform-origin: 50% 50%;
}
/* 🍳 Ring inner hole glow effect - new element */
.menu-node.active > .icon-layer::before {
content: '';
position: absolute;
/* Inner hole position and size */
top: calc(-1 * var(--ring-inner-radius));
left: calc(-1 * var(--ring-inner-radius));
width: calc(var(--ring-inner-radius) * 2);
height: calc(var(--ring-inner-radius) * 2);
border-radius: 50%;
background: transparent;
/* 🌟 Ring inner hole multi-layer glow effect - converging toward center */
box-shadow:
/* Inner glow - main effect converging from edge to center */
inset 0 0 8px var(--ring-inner-hole-glow),
inset 0 0 16px var(--ring-inner-hole-glow),
inset 0 0 24px var(--ring-inner-hole-glow),
inset 0 0 32px var(--ring-inner-hole-glow),
/* Inner glow depth enhancement - enhance center convergence effect */
inset 0 0 40px var(--ring-inner-hole-glow-inner),
inset 0 0 50px var(--ring-inner-hole-glow-inner),
inset 0 0 60px var(--ring-inner-hole-glow-inner),
/* Slight outer boundary glow - only at edge position */
0 0 4px var(--ring-inner-hole-glow-outer),
0 0 8px var(--ring-inner-hole-glow-outer);
z-index: -1; /* Below center text, but above ring */
pointer-events: none;
/* ✅ Ring inner hole glow ripple effect animation - synchronized expansion with ring body */
transition: transform 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
animation: ring-ripple-inner-glow 600ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
transform-origin: 50% 50%;
}
/* === 🎯 Add Parent Direction Indicator on Ring - 🔧 v3.3 Fixed Version: Strictly Limit Display Range === */
/* Only display parent direction indicator on non-root menu main containers, not on child icons */
/* 🔧 Key fix: use more precise selector to avoid display in submenus */
.menu-node.active:not(.level-0):not(.child) > .icon-layer::after {
content: '';
position: absolute;
/* 🔧 Simplified positioning logic, use fixed position */
top: calc(-1 * var(--child-distance) - 8px);
left: calc(-8px);
/* 📝 Simple arrow design: CSS-drawn arrow pointing to parent */
width: 0;
height: 0;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
border-bottom: 12px solid var(--parent-indicator-color);
/* Arrow glow effect */
filter: drop-shadow(0 0 4px var(--parent-indicator-glow))
drop-shadow(0 0 8px var(--parent-indicator-glow));
/* Animation effect */
transition: var(--menu-transition);
z-index: 25;
pointer-events: none;
/* 🔧 Ensure arrow transform center point is correct */
transform-origin: 8px calc(var(--child-distance) + 8px);
/* 🎯 Key: rotate arrow to point to parent direction */
transform: rotate(calc(var(--angle, 0deg) + 180deg));
}
/* Enhanced effect on hover */
.menu-node.active:not(.level-0):not(.child):hover > .icon-layer::after {
border-bottom-color: var(--parent-indicator-color);
filter: drop-shadow(0 0 6px var(--parent-indicator-glow))
drop-shadow(0 0 12px var(--parent-indicator-glow))
drop-shadow(0 0 18px var(--parent-indicator-glow));
transform: rotate(calc(var(--angle, 0deg) + 180deg)) scale(1.2);
}
/* === 🎨 Icon Styles === */
.menu-node .icon-container {
position: relative;
/* 🔧 Fix 6: Icon container precisely centered */
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
color: var(--icon-color);
font-size: 32px;
opacity: 1;
transition: all 200ms ease-out;
z-index: 15;
/* 🌟 Icon basic glow effect */
filter:
drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5))
drop-shadow(0 0 4px var(--icon-glow))
drop-shadow(0 0 8px var(--icon-glow))
drop-shadow(0 0 12px var(--icon-glow-outer));
/* 🎯 Ensure icon transform center point is at geometric center */
transform-origin: center center;
}
/* 🚑 Fix icon glow issue during expansion - prevent sector color during expansion, but preserve beautiful glow */
.menu-node.child .icon-container {
/* Default state: complete glow effect, but no sector color */
filter:
drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5))
drop-shadow(0 0 4px var(--icon-glow))
drop-shadow(0 0 8px var(--icon-glow))
drop-shadow(0 0 12px var(--icon-glow-outer)) !important;
color: var(--icon-color) !important;
}
/* ✅ Final version Kando hover effect - using .hovered class */
.menu-node.child.hovered .icon-container {
transform: scale(1.2) !important;
color: var(--icon-hover-color) !important; /* ✅ Fully effective: using Kando native hover mechanism */
/* Enhanced glow effect on hover */
filter:
drop-shadow(0 2px 4px rgba(0, 0, 0, 0.7))
drop-shadow(0 0 6px var(--icon-glow))
drop-shadow(0 0 12px var(--icon-glow))
drop-shadow(0 0 18px var(--icon-glow))
drop-shadow(0 0 24px var(--icon-glow-outer))
drop-shadow(0 0 32px var(--icon-glow-outer)) !important;
}
/* 🚑 Final protection strategy: only limit glow, don't interfere with color and transform */
.menu-node.child.hovered:not(:hover) .icon-container {
/* When Kando adds .hovered class but mouse is not truly hovering, only limit complex glow effects */
filter:
drop-shadow(0 1px 2px rgba(0, 0, 0, 0.5))
drop-shadow(0 0 4px var(--icon-glow))
drop-shadow(0 0 8px var(--icon-glow)) !important;
/* ✅ No longer force override color and transform, allow .hovered effect to work normally */
}
/* === 🔤 Center Text Minimal Configuration for Kando 2.0 === */
.center-text {
/* 🎯 Only essential visual properties - let Kando 2.0 handle all sizing and layout */
color: var(--text-color);
/* 🌟 Center text glow effect - preserved visual identity */
text-shadow:
0 1px 2px rgba(0, 0, 0, 0.5),
0 0 4px var(--text-glow),
0 0 8px var(--text-glow),
0 0 12px var(--text-glow),
0 0 16px var(--text-glow-outer),
0 0 24px var(--text-glow-outer);
/* 🎯 Keep z-index for layering */
z-index: 20;
}
/* === 🔗 Connector Control: Completely Hide Connectors === */
/* Default hide all connectors */
.connector {
opacity: 0 !important;
display: none !important;
}
/* Hide hovered item connectors */
.menu-node.child.hovered .connector {
opacity: 0 !important;
display: none !important;
}
/* Hide connectors pointing to hovered icon direction (green) */
.menu-node.active:not(.child) .connector {
opacity: 0 !important;
display: none !important;
}
/* Also hide parent connectors */
.menu-node.parent .connector {
opacity: 0 !important;
display: none !important;
}
/* === 🎭 Hide Grandchild Menus === */
.menu-node.grandchild {
opacity: 0 !important;
pointer-events: none !important;
}
/* === 🌿 Ring Natural Sway Animation Definitions === */
/* Ring body natural sway - synchronized with icons */
@keyframes ring-natural-sway {
0% {
transform: scale(0.85) rotate(-2deg);
opacity: 0;
}
50% {
transform: scale(1.02) rotate(1deg);
opacity: 0.7;
}
80% {
transform: scale(0.99) rotate(-0.5deg);
opacity: 0.9;
}
100% {
transform: scale(1) rotate(0deg);
opacity: 1;
}
}
/* === 🌊 Ring Ripple Effect Animation Definitions === */
/* Ring body ripple expansion - like water ripples expanding from center outward */
@keyframes ring-ripple-expand {
0% {
transform: scale(0.5);
opacity: 0;
}
30% {
transform: scale(0.8);
opacity: 0.5;
}
60% {
transform: scale(1.03);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* Ring outer glow synchronized animation */
@keyframes ring-outer-glow-sync {
0% {
transform: scale(0.9);
opacity: 0;
}
60% {
transform: scale(1.05);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* Ring outer glow ripple expansion animation - synchronized expansion with main body */
@keyframes ring-ripple-glow-expand {
0% {
transform: scale(0.6);
opacity: 0;
box-shadow:
0 0 0px var(--ring-glow),
0 0 0px var(--ring-glow-outer);
}
25% {
transform: scale(0.85);
opacity: 0.3;
box-shadow:
0 0 4px var(--ring-glow),
0 0 8px var(--ring-glow),
0 0 16px var(--ring-glow-outer),
0 0 32px var(--ring-glow-outer);
}
50% {
transform: scale(1.02);
opacity: 0.6;
box-shadow:
0 0 8px var(--ring-glow),
0 0 16px var(--ring-glow),
0 0 24px var(--ring-glow),
0 0 40px var(--ring-glow-outer),
0 0 60px var(--ring-glow-outer),
0 0 80px var(--ring-glow-outer);
}
80% {
transform: scale(1.05);
opacity: 0.9;
box-shadow:
0 0 10px var(--ring-glow),
0 0 20px var(--ring-glow),
0 0 30px var(--ring-glow),
0 0 40px var(--ring-glow),
0 0 50px var(--ring-glow-outer),
0 0 70px var(--ring-glow-outer),
0 0 100px var(--ring-glow-outer),
0 0 140px var(--ring-glow-outer);
}
100% {
transform: scale(1);
opacity: 1;
box-shadow:
0 0 6px var(--ring-glow),
0 0 12px var(--ring-glow),
0 0 18px var(--ring-glow),
0 0 24px var(--ring-glow),
0 0 40px var(--ring-glow-outer),
0 0 60px var(--ring-glow-outer),
0 0 80px var(--ring-glow-outer),
0 0 120px var(--ring-glow-outer);
}
}
/* Ring inner hole glow ripple animation - converging from outside to inside */
@keyframes ring-ripple-inner-glow {
0% {
transform: scale(0.7);
opacity: 0;
}
40% {
transform: scale(0.92);
opacity: 0.4;
}
70% {
transform: scale(1.04);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* Ring inner hole glow synchronized animation */
@keyframes ring-inner-hole-glow-sync {
0% {
transform: scale(0.88);
opacity: 0;
}
55% {
transform: scale(1.03);
opacity: 0.7;
}
100% {
transform: scale(1);
opacity: 1;
}
}

View file

@ -0,0 +1,69 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-FileCopyrightText: 2025 Rena and LCG
// SPDX-License-Identifier: CC0-1.0
{
name: 'Navigation',
author: 'Rena and LCG',
license: 'CC0-1.0',
themeVersion: '6.4',
description: 'Modern minimalist ring navigation theme with dynamic ripple animations. Features smooth icon expansion with natural sway motion and synchronized ring ripple effects.',
engineVersion: 1,
maxMenuRadius: 180,
centerTextWrapWidth: 140, // Precisely matches inner circle diameter (70px radius × 2)
drawChildrenBelow: true,
childTransitionTime: 200,
colors: {
// === 🔤 Text Color Configuration ===
'text-color': 'rgb(255 255 255 / 0.9)', // Center text primary color
'text-glow': 'rgb(255 255 255 / 0.5)', // Text glow effect
'text-glow-outer': 'rgb(85 85 85 / 0.3)', // Text outer glow - gray tones
// === 🎨 Icon Color Configuration ===
'icon-color': 'rgb(255 255 255 / 0.9)', // Icon base color
'icon-hover-color': 'rgb(255 255 255 / 1.0)', // Icon color on hover
'icon-glow': 'rgb(255 255 255 / 0.5)', // Icon glow effect
'icon-glow-outer': 'rgba(255, 255, 255, 0.3)', // Icon outer glow
// === ⭕ Ring Color Configuration ===
'ring-color': 'rgb(71 71 71 / 0.34)', // Ring main body color - dark gray
'ring-glow': 'rgba(255, 255, 255, 0.3)', // Ring primary glow
'ring-glow-inner': 'rgb(212 212 212 / 0.25)', // Ring inner glow - light gray
'ring-glow-outer': 'rgba(255, 255, 255, 0.4)', // Ring outer glow
'ring-inner-hole-glow': 'rgb(254 254 254 / 0.2)', // Ring inner hole glow
'ring-inner-hole-glow-inner': 'rgb(255 255 255 / 0.3)', // Inner hole inner glow
'ring-inner-hole-glow-outer': 'rgba(255, 255, 255, 0.1)', // Inner hole outer glow
// === 🎯 Sector Highlight Configuration ===
'sector-highlight': 'rgb(34 104 234 / 0.6)', // Sector highlight main color - blue tones
'sector-inner-glow': 'rgb(42 235 199 / 0.86)', // Sector inner glow - cyan high opacity
// === 🔗 Parent Indicator Configuration ===
'parent-indicator-color': 'rgba(255, 255, 255, 0.8)', // Parent arrow color
'parent-indicator-glow': 'rgba(255, 255, 255, 0.4)', // Arrow glow effect
// === 🌫️ Background Configuration ===
'canvas-bg': 'rgba(0, 0, 0, 0)', // Canvas background mask - fully transparent
// === 🌈 Dual Background Layer Configuration ===
'background-layer-left': 'rgba(255, 255, 255, 1.0)', // Left half screen background - pure white
'background-layer-right': 'rgba(0, 0, 0, 1.0)' // Right half screen background - pure black
},
layers: [
{
class: 'icon-layer',
content: 'icon'
}
]
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
# SPDX-FileCopyrightText: 2025 Rena & 小光
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["theme.css", "theme.json5"]
precedence = "aggregate"
SPDX-FileCopyrightText = ["Simon Schneegans <code@simonschneegans.de>", "2025 Rena & 小光"]
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
path = "preview.jpg"
precedence = "aggregate"
SPDX-FileCopyrightText = "2025 Rena & 小光"
SPDX-License-Identifier = "CC0-1.0"

View file

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> -->
<!-- SPDX-License-Identifier: CC0-1.0 -->
<svg
width="100"
height="100"
id="svg2"
version="1.1"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="arrow.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4">
<linearGradient
id="linearGradient3007">
<stop
id="stop3009"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="0.3680203"
id="stop3011" />
<stop
id="stop3013"
offset="0.57677984"
style="stop-color:#ffffff;stop-opacity:0.66666667;" />
<stop
style="stop-color:#ffffff;stop-opacity:0.45490196;"
offset="0.66058904"
id="stop3015" />
<stop
style="stop-color:#ffffff;stop-opacity:0.34901961;"
offset="0.70194155"
id="stop3017" />
<stop
style="stop-color:#ffffff;stop-opacity:0.25490196;"
offset="0.74285865"
id="stop3019" />
<stop
style="stop-color:#ffffff;stop-opacity:0.1254902;"
offset="0.8251282"
id="stop3021" />
<stop
style="stop-color:#ffffff;stop-opacity:0.05490196;"
offset="0.90009141"
id="stop3023" />
<stop
id="stop3025"
offset="1"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3007"
id="radialGradient3005"
gradientUnits="userSpaceOnUse"
cx="50.002552"
cy="49.744911"
fx="50.002552"
fy="49.744911"
r="49.750011" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#1d1d1d"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="22.4"
inkscape:cx="44.397321"
inkscape:cy="15.424107"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:showpageshadow="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="2058"
inkscape:window-height="1194"
inkscape:window-x="35"
inkscape:window-y="32"
inkscape:window-maximized="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#1d1d1d" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.58558;marker:none;enable-background:accumulate"
d="m 34.649194,963.56105 0.821697,1.1952 3.734982,-1.61115 10.794147,-6.57394 10.644641,6.57394 3.734982,1.61115 0.821696,-1.15785 -14.192933,-9.93505 -1.008386,-0.70965 -1.045795,0.70965 z"
id="path3054"
inkscape:connector-curvature="0"
inkscape:transform-center-x="0.0747335"
inkscape:transform-center-y="-43.507208"
sodipodi:nodetypes="ccccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> -->
<!-- SPDX-License-Identifier: CC0-1.0 -->
<svg
width="100"
height="100"
id="svg2"
version="1.1"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="ring-mask.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4">
<linearGradient
id="linearGradient3007">
<stop
id="stop3009"
offset="0"
style="stop-color:#ff0000;stop-opacity:0;" />
<stop
style="stop-color:#ff87bd;stop-opacity:0;"
offset="0.3680203"
id="stop3011" />
<stop
id="stop3013"
offset="0.57677984"
style="stop-color:#ffabdf;stop-opacity:0.66666669;" />
<stop
style="stop-color:#ffa4e1;stop-opacity:0.45490196;"
offset="0.66058904"
id="stop3015" />
<stop
style="stop-color:#dbaaaa;stop-opacity:0.1254902;"
offset="0.8251282"
id="stop3021" />
<stop
style="stop-color:#b4b4b4;stop-opacity:0.05490196;"
offset="0.90009141"
id="stop3023" />
<stop
id="stop3025"
offset="1"
style="stop-color:#b4b4b4;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3767">
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0"
id="stop3769" />
<stop
id="stop4739"
offset="0.3680203"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
style="stop-color:#ffffff;stop-opacity:0.66666667;"
offset="0.59831607"
id="stop4703" />
<stop
id="stop4713"
offset="0.66058904"
style="stop-color:#ffffff;stop-opacity:0.45490196;" />
<stop
id="stop4711"
offset="0.70194155"
style="stop-color:#ffffff;stop-opacity:0.34901961;" />
<stop
id="stop4709"
offset="0.74285865"
style="stop-color:#ffffff;stop-opacity:0.25490196;" />
<stop
id="stop4707"
offset="0.8251282"
style="stop-color:#ffffff;stop-opacity:0.1254902;" />
<stop
id="stop4705"
offset="0.90009141"
style="stop-color:#ffffff;stop-opacity:0.05490196;" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3771" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3767"
id="radialGradient3775"
cx="50.002552"
cy="49.744911"
fx="50.002552"
fy="49.744911"
r="49.750011"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#1d1d1d"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="11.313708"
inkscape:cx="80.035652"
inkscape:cy="48.436817"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:showpageshadow="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="3072"
inkscape:window-height="1691"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#1d1d1d">
<sodipodi:guide
orientation="0,1"
position="14.9375,50"
id="guide3006"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<path
id="path2267"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.996;stroke-dasharray:3.984, 0.996;paint-order:stroke fill markers;stop-color:#000000"
d="M 50 1002.3622 L 54.271484 1052.3622 L 100 1052.3622 L 100 952.36218 L 54.271484 952.36218 L 50 1002.3622 z " />
<path
id="path2265"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.996;stroke-dasharray:3.984, 0.996;paint-order:stroke fill markers;stop-color:#000000"
d="M 0 952.36218 L 0 1052.3622 L 45.728516 1052.3622 L 50 1002.3622 L 45.728516 952.36218 L 0 952.36218 z " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View file

@ -0,0 +1,415 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-FileCopyrightText: 2025 Rena and LCG */
/* SPDX-License-Identifier: CC0-1.0 */
/* Neo Ring Theme - Enhanced neon ring effects with glassmorphism background */
@keyframes neon-pulse {
0%, 100% {
opacity: 0.6;
transform: translate(-50%, -50%) scale(0.9);
}
50% {
opacity: 1;
transform: translate(-50%, -50%) scale(1.1);
}
}
@keyframes neon-hover-pulse {
0%, 100% {
opacity: 0.8;
transform: translate(-50%, -50%) scale(1.1);
}
50% {
opacity: 1;
transform: translate(-50%, -50%) scale(1.3);
}
}
.menu-node {
--child-distance: 100px;
--grandchild-distance: 16px;
--grandchild-size: 15px;
--center-size: 100px;
--child-size: 50px;
--connector-width: 3px;
--menu-transition: all 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
--opacity-transition: opacity 300ms ease;
transition: var(--menu-transition);
/* Positioning ---------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
/* Grandchild items are positioned around the child items. */
&.grandchild {
transform: translate(calc(var(--grandchild-distance) * var(--dir-x)),
calc(var(--grandchild-distance) * var(--dir-y)));
}
/* If there is a hovered child node, we scale all children up a bit to create a cool
zoom effect. The hovered child itself is scaled up even more. */
&.active:has(>.hovered)>.child {
transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
&.hovered {
transform: scale(1.15) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
}
/* Theme Layers --------------------------------------------------------------------- */
/* Icon container styling with enhanced glow effects */
.icon-container {
opacity: 0;
color: var(--icon-color);
transition: var(--opacity-transition);
text-shadow:
0 0 5px var(--glow-color),
0 0 10px var(--glow-color),
0 0 20px var(--glow-color);
}
/* Layer positioning and basic styling */
.arrow-layer,
.outer-neon-ring,
.inner-neon-ring,
.icon-layer {
position: absolute;
transition: var(--menu-transition);
}
/* Active menu item (center) layer sizing */
&.active>.arrow-layer,
&.active>.outer-neon-ring,
&.active>.inner-neon-ring,
&.active>.icon-layer {
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
}
/* Child and parent item layer sizing */
&.parent>.icon-layer,
&.child>.icon-layer {
top: calc(-1 * var(--child-size) / 2);
left: calc(-1 * var(--child-size) / 2);
width: var(--child-size);
height: var(--child-size);
}
&.parent>.outer-neon-ring,
&.parent>.inner-neon-ring,
&.child>.outer-neon-ring,
&.child>.inner-neon-ring {
top: calc(-1 * var(--child-size) / 2);
left: calc(-1 * var(--child-size) / 2);
width: var(--child-size);
height: var(--child-size);
}
/* Neon Ring Effects ---------------------------------------------------------------- */
/* Outer neon ring with cyan glow */
.outer-neon-ring {
opacity: 0;
border-radius: 50%;
background: transparent;
pointer-events: none;
z-index: 3;
&::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: calc(100% + 12px);
height: calc(100% + 12px);
transform: translate(-50%, -50%);
border-radius: 50%;
border: 2px solid rgb(0, 255, 255);
box-shadow:
0 0 10px rgba(0, 255, 255, 0.8),
inset 0 0 5px rgba(0, 255, 255, 0.6);
animation: neon-pulse 3s ease-in-out infinite;
}
}
/* Inner neon ring with magenta glow */
.inner-neon-ring {
opacity: 0;
border-radius: 50%;
background: transparent;
pointer-events: none;
z-index: 2;
&::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: calc(100% + 4px);
height: calc(100% + 4px);
transform: translate(-50%, -50%);
border-radius: 50%;
border: 2px solid rgb(255, 0, 128);
box-shadow:
0 0 8px rgba(255, 0, 128, 0.8),
inset 0 0 4px rgba(255, 0, 128, 0.6);
animation: neon-pulse 2.5s ease-in-out infinite;
}
}
/* Neon ring visibility logic */
&.active>.outer-neon-ring,
&.active>.inner-neon-ring,
&.child.hovered>.outer-neon-ring,
&.child.hovered>.inner-neon-ring,
&.parent.hovered>.outer-neon-ring,
&.parent.hovered>.inner-neon-ring {
opacity: 1;
}
&.child:not(.hovered)>.outer-neon-ring,
&.child:not(.hovered)>.inner-neon-ring,
&.parent:not(.hovered)>.outer-neon-ring,
&.parent:not(.hovered)>.inner-neon-ring {
opacity: 0;
}
/* Icon layer - transparent background with enhanced layering */
.icon-layer {
border-radius: 50%;
background: transparent !important;
border: none !important;
opacity: 1;
z-index: 8;
}
/* Arrow layer for directional indication */
.arrow-layer {
background: var(--glow-color);
mask: url(assets/arrow.svg) no-repeat center;
mask-size: contain;
-webkit-mask: url(assets/arrow.svg) no-repeat center;
-webkit-mask-size: contain;
transform: scale(1.0) rotate(var(--hovered-child-angle));
opacity: 0;
filter: drop-shadow(0 0 5px var(--glow-color));
z-index: 9;
}
/* Hover Effects -------------------------------------------------------------------- */
/* Enhanced scaling effects on hover */
&.child.hovered>.icon-layer {
transform: scale(2.0) !important;
z-index: 15 !important;
background: transparent !important;
border: none !important;
}
&.parent.hovered>.icon-layer {
transform: scale(2.0) !important;
z-index: 15 !important;
background: transparent !important;
border: none !important;
}
&.active.hovered>.icon-layer {
transform: scale(1.1) !important;
background: transparent !important;
border: none !important;
}
/* Enhanced neon ring effects on hover */
&.child.hovered>.outer-neon-ring::before,
&.parent.hovered>.outer-neon-ring::before {
border-width: 4px !important;
width: calc(200% + 32px) !important;
height: calc(200% + 32px) !important;
animation: neon-hover-pulse 1.5s ease-in-out infinite !important;
box-shadow:
0 0 25px rgba(0, 255, 255, 1.0),
inset 0 0 15px rgba(0, 255, 255, 0.8) !important;
}
&.child.hovered>.inner-neon-ring::before,
&.parent.hovered>.inner-neon-ring::before {
border-width: 4px !important;
width: calc(200% + 16px) !important;
height: calc(200% + 16px) !important;
animation: neon-hover-pulse 1.3s ease-in-out infinite !important;
box-shadow:
0 0 20px rgba(255, 0, 128, 1.0),
inset 0 0 12px rgba(255, 0, 128, 0.8) !important;
}
/* Center item hover effects */
&.active.hovered>.outer-neon-ring::before {
border-width: 3px !important;
width: calc(100% + 16px) !important;
height: calc(100% + 16px) !important;
animation: neon-pulse 2s ease-in-out infinite !important;
box-shadow:
0 0 18px rgba(0, 255, 255, 1.0),
inset 0 0 10px rgba(0, 255, 255, 0.8) !important;
}
&.active.hovered>.inner-neon-ring::before {
border-width: 3px !important;
width: calc(100% + 8px) !important;
height: calc(100% + 8px) !important;
animation: neon-pulse 1.8s ease-in-out infinite !important;
box-shadow:
0 0 15px rgba(255, 0, 128, 1.0),
inset 0 0 8px rgba(255, 0, 128, 0.8) !important;
}
/* Default pulsing animation for non-hovered center items */
&.active:not(.hovered)>.outer-neon-ring::before {
animation: neon-pulse 3s ease-in-out infinite !important;
}
&.active:not(.hovered)>.inner-neon-ring::before {
animation: neon-pulse 2.5s ease-in-out infinite !important;
}
/* Arrow Display Logic -------------------------------------------------------------- */
&.active:has(.hovered)>.arrow-layer {
opacity: 1;
transform: scale(1.8) rotate(var(--hovered-child-angle));
}
&:has(.dragged)>.arrow-layer {
transform: scale(1.8) rotate(var(--pointer-angle));
transition: none;
}
&.active:has(.hovered.dragged)>.arrow-layer {
transform: scale(1.8) rotate(var(--pointer-angle));
}
/* Icon Visibility Logic ------------------------------------------------------------ */
/* Hide center icon when text label is present */
&.active>.icon-layer>.icon-container {
opacity: 0 !important;
}
/* Show icons for parent and child items */
&.parent>.icon-layer>.icon-container,
&.child>.icon-layer>.icon-container {
opacity: 1;
}
/* Click Effects -------------------------------------------------------------------- */
&.parent.hovered.clicked>.icon-layer,
&.child.hovered.clicked>.icon-layer {
transform: scale(0.85);
}
/* Grandchild Items ----------------------------------------------------------------- */
&.grandchild>.icon-layer {
top: calc(-1 * var(--grandchild-size) / 2);
left: calc(-1 * var(--grandchild-size) / 2);
width: var(--grandchild-size);
height: var(--grandchild-size);
opacity: 0;
}
/* Disable transitions for dragged items */
&.dragged {
transition: none;
}
/* Connectors ----------------------------------------------------------------------- */
.connector {
transition: var(--menu-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
background: linear-gradient(to right,
transparent 60px,
rgba(0, 255, 255, 0.2) 45%,
var(--connector-color) 50%,
rgba(0, 255, 255, 0.2) 55%,
transparent calc(100% - 60px));
box-shadow:
0 0 6px rgba(0, 255, 255, 0.4),
0 0 12px rgba(0, 255, 255, 0.2);
border-radius: 2px;
}
&:has(.dragged)>.connector,
&:has(.clicked)>.connector {
transition: none;
}
}
/* Center Text ------------------------------------------------------------------------ */
.center-text {
color: var(--label-color, var(--icon-color)) !important;
transition: var(--opacity-transition);
/* Enhanced glow effects for center text */
text-shadow:
0 0 calc(5px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))),
0 0 calc(10px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))),
0 0 calc(15px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))),
0 0 calc(25px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))),
0 0 calc(35px * 6) var(--label-glow-color, var(--label-color, var(--icon-color)));
font-size: 16px;
line-height: 22px;
font-family: 'Courier New', monospace;
font-weight: 900;
letter-spacing: 1px;
overflow: visible;
z-index: 20;
/* Additional filter effects for enhanced glow */
filter:
drop-shadow(0 0 calc(10px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))))
drop-shadow(0 0 calc(20px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))))
drop-shadow(0 0 calc(30px * 6) var(--label-glow-color, var(--label-color, var(--icon-color))));
}
/* Canvas Background ------------------------------------------------------------------ */
#kando-menu {
background-color: var(--canvas-color) !important;
}
.selection-wedges {
mask: radial-gradient(circle at var(--center-x) var(--center-y), transparent 50px, black 52px);
-webkit-mask: radial-gradient(circle at var(--center-x) var(--center-y), transparent 50px, black 52px);
&.hovered {
--width: calc(var(--end-angle) - var(--start-angle));
background: conic-gradient(from calc(var(--start-angle)) at var(--center-x) var(--center-y),
var(--wedge-highlight-color) var(--width),
var(--wedge-color) var(--width));
}
background: var(--wedge-color);
}

View file

@ -0,0 +1,73 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-FileCopyrightText: 2025 Rena and LCG
// SPDX-License-Identifier: CC0-1.0
{
name: 'Neo Ring',
author: 'Rena and LCG',
license: 'CC0-1.0',
themeVersion: '1.0',
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 160,
// The width at which the center text is wrapped.
centerTextWrapWidth: 90,
// This theme draws child items below their parent items.
drawChildrenBelow: true,
// Draw the thin lines between adjacent menu items.
drawSelectionWedges: true,
// These colors can be configured by the user and are available in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
'glow-color': 'rgb(0, 255, 255)',
'connector-color': 'rgba(0, 255, 255, 0.8)',
'canvas-color': 'rgba(0, 40, 40, 0.6)',
'icon-color': 'rgb(0, 255, 255)',
'label-color': 'rgb(255, 255, 255)',
'label-glow-color': 'rgb(255, 255, 255)',
'wedge-highlight-color': 'rgba(0, 255, 255, 0.1)',
'wedge-color': 'rgba(0, 255, 255, 0.2)',
},
// This theme uses multiple layers to create enhanced neon ring effects.
// The layers are rendered in the order specified below, with the first layer
// being drawn at the bottom and the last layer at the top.
layers: [
{
// Inner neon ring layer - provides secondary glow effect
class: 'inner-neon-ring',
content: 'none'
},
{
// Outer neon ring layer - provides primary glow effect
class: 'outer-neon-ring',
content: 'none'
},
{
// Icon layer - contains the actual menu item icons
class: 'icon-layer',
content: 'icon'
},
{
// Arrow layer - provides directional indication for navigation
class: 'arrow-layer',
content: 'none'
}
]
}

View file

@ -0,0 +1,23 @@
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
# SPDX-FileCopyrightText: 2025 Rena and LCG
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["theme.css", "theme.json5"]
precedence = "aggregate"
SPDX-FileCopyrightText = ["Simon Schneegans <code@simonschneegans.de>", "2025 Rena and LCG"]
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
path = "preview.jpg"
precedence = "aggregate"
SPDX-FileCopyrightText = "2025 Rena and LCG"
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
path = ["assets/arrow.svg", "assets/ring-mask.svg"]
precedence = "aggregate"
SPDX-FileCopyrightText = ["Simon Schneegans <code@simonschneegans.de>", "2025 Rena and LCG"]
SPDX-License-Identifier = "CC0-1.0"

View file

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> -->
<!-- SPDX-License-Identifier: CC0-1.0 -->
<svg
width="100"
height="100"
id="svg2"
version="1.1"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="arrow.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4">
<linearGradient
id="linearGradient3007">
<stop
id="stop3009"
offset="0"
style="stop-color:#ffffff;stop-opacity:0" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="0.3680203"
id="stop3011" />
<stop
id="stop3013"
offset="0.57677984"
style="stop-color:#ffffff;stop-opacity:0.66666667;" />
<stop
style="stop-color:#ffffff;stop-opacity:0.45490196;"
offset="0.66058904"
id="stop3015" />
<stop
style="stop-color:#ffffff;stop-opacity:0.34901961;"
offset="0.70194155"
id="stop3017" />
<stop
style="stop-color:#ffffff;stop-opacity:0.25490196;"
offset="0.74285865"
id="stop3019" />
<stop
style="stop-color:#ffffff;stop-opacity:0.1254902;"
offset="0.8251282"
id="stop3021" />
<stop
style="stop-color:#ffffff;stop-opacity:0.05490196;"
offset="0.90009141"
id="stop3023" />
<stop
id="stop3025"
offset="1"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3007"
id="radialGradient3005"
gradientUnits="userSpaceOnUse"
cx="50.002552"
cy="49.744911"
fx="50.002552"
fy="49.744911"
r="49.750011" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#1d1d1d"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="22.4"
inkscape:cx="44.397321"
inkscape:cy="15.424107"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:showpageshadow="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="2058"
inkscape:window-height="1194"
inkscape:window-x="35"
inkscape:window-y="32"
inkscape:window-maximized="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#1d1d1d" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3.58558;marker:none;enable-background:accumulate"
d="m 34.649194,963.56105 0.821697,1.1952 3.734982,-1.61115 10.794147,-6.57394 10.644641,6.57394 3.734982,1.61115 0.821696,-1.15785 -14.192933,-9.93505 -1.008386,-0.70965 -1.045795,0.70965 z"
id="path3054"
inkscape:connector-curvature="0"
inkscape:transform-center-x="0.0747335"
inkscape:transform-center-y="-43.507208"
sodipodi:nodetypes="ccccccccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> -->
<!-- SPDX-License-Identifier: CC0-1.0 -->
<svg
width="100"
height="100"
id="svg2"
version="1.1"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="ring-mask.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4">
<linearGradient
id="linearGradient3007">
<stop
id="stop3009"
offset="0"
style="stop-color:#ff0000;stop-opacity:0;" />
<stop
style="stop-color:#ff87bd;stop-opacity:0;"
offset="0.3680203"
id="stop3011" />
<stop
id="stop3013"
offset="0.57677984"
style="stop-color:#ffabdf;stop-opacity:0.66666669;" />
<stop
style="stop-color:#ffa4e1;stop-opacity:0.45490196;"
offset="0.66058904"
id="stop3015" />
<stop
style="stop-color:#dbaaaa;stop-opacity:0.1254902;"
offset="0.8251282"
id="stop3021" />
<stop
style="stop-color:#b4b4b4;stop-opacity:0.05490196;"
offset="0.90009141"
id="stop3023" />
<stop
id="stop3025"
offset="1"
style="stop-color:#b4b4b4;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3767">
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="0"
id="stop3769" />
<stop
id="stop4739"
offset="0.3680203"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
style="stop-color:#ffffff;stop-opacity:0.66666667;"
offset="0.59831607"
id="stop4703" />
<stop
id="stop4713"
offset="0.66058904"
style="stop-color:#ffffff;stop-opacity:0.45490196;" />
<stop
id="stop4711"
offset="0.70194155"
style="stop-color:#ffffff;stop-opacity:0.34901961;" />
<stop
id="stop4709"
offset="0.74285865"
style="stop-color:#ffffff;stop-opacity:0.25490196;" />
<stop
id="stop4707"
offset="0.8251282"
style="stop-color:#ffffff;stop-opacity:0.1254902;" />
<stop
id="stop4705"
offset="0.90009141"
style="stop-color:#ffffff;stop-opacity:0.05490196;" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3771" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3767"
id="radialGradient3775"
cx="50.002552"
cy="49.744911"
fx="50.002552"
fy="49.744911"
r="49.750011"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#1d1d1d"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="11.313708"
inkscape:cx="80.035652"
inkscape:cy="48.436817"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:showpageshadow="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="3072"
inkscape:window-height="1691"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#1d1d1d">
<sodipodi:guide
orientation="0,1"
position="14.9375,50"
id="guide3006"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-952.36218)">
<path
id="path2267"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.996;stroke-dasharray:3.984, 0.996;paint-order:stroke fill markers;stop-color:#000000"
d="M 50 1002.3622 L 54.271484 1052.3622 L 100 1052.3622 L 100 952.36218 L 54.271484 952.36218 L 50 1002.3622 z " />
<path
id="path2265"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.996;stroke-dasharray:3.984, 0.996;paint-order:stroke fill markers;stop-color:#000000"
d="M 0 952.36218 L 0 1052.3622 L 45.728516 1052.3622 L 50 1002.3622 L 45.728516 952.36218 L 0 952.36218 z " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

View file

@ -0,0 +1,489 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-FileCopyrightText: 2025 Rena and LCG */
/* SPDX-License-Identifier: CC0-1.0 */
/* === 🎨 Neon Lights Enhanced Color Theme - Optimized v3.0 === */
/* === 📊 Configuration Options: 31 → 21 options (32% reduction) === */
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes neon-pulse {
0%, 100% { opacity: 0.6; filter: brightness(1) saturate(1); }
50% { opacity: 1; filter: brightness(1.3) saturate(1.5); }
}
@keyframes neon-hover-pulse {
0%, 100% { opacity: 0.8; transform: translate(-50%, -50%) scale(1.0); }
50% { opacity: 1; transform: translate(-50%, -50%) scale(1.2); }
}
.menu-node {
--child-distance: 100px;
--grandchild-distance: 16px;
--grandchild-size: 15px;
--center-size: 100px;
--child-size: 50px;
--connector-width: 5px;
--menu-transition: all 250ms cubic-bezier(0.775, 1.325, 0.535, 1);
--opacity-transition: opacity 250ms ease;
transition: var(--menu-transition);
/* Positioning ---------------------------------------------------------------------- */
&.child {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
&.active:has(>.hovered)>.child {
transform: scale(calc(1.5 - pow(var(--angle-diff) / 180, 0.25) * 0.5)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
&.hovered {
transform: scale(1.5) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
&.grandchild {
opacity: 0 !important;
pointer-events: none !important;
transform: translate(calc(var(--grandchild-distance) * var(--dir-x)),
calc(var(--grandchild-distance) * var(--dir-y)));
}
}
/* === 🎯 Icon System === */
.icon-container {
opacity: 0;
transition: var(--opacity-transition);
color: var(--icon-color) !important;
filter: drop-shadow(0 0 8px var(--icon-glow));
}
&.active>.icon-layer>.icon-container {
opacity: 0 !important;
}
&.parent>.icon-layer>.icon-container,
&.child>.icon-layer>.icon-container {
opacity: 1 !important;
color: var(--icon-color) !important;
filter: drop-shadow(0 0 8px var(--icon-glow)) !important;
animation: none !important;
}
&.child.hovered>.icon-layer>.icon-container,
&.parent.hovered>.icon-layer>.icon-container {
color: var(--icon-hover) !important;
filter:
drop-shadow(0 0 12px var(--icon-hover-glow))
drop-shadow(0 0 20px var(--icon-hover-glow))
drop-shadow(0 0 30px var(--icon-hover-glow)) !important;
animation: neon-pulse 2s ease-in-out infinite !important;
}
.icon-glow-layer {
position: absolute;
transition: var(--menu-transition);
opacity: 0;
z-index: 1;
.icon-container {
color: var(--icon-glow) !important;
filter: blur(15px) brightness(2);
opacity: 1;
}
}
/* === 🌈 Neon Glow Ring System === */
.outer-glow-ring {
position: absolute;
opacity: 0;
border-radius: 50%;
background: transparent;
pointer-events: none;
z-index: 2;
transition: var(--menu-transition);
&::before {
content: '';
position: absolute;
top: 50%; left: 50%;
width: calc(100% + 16px);
height: calc(100% + 16px);
transform: translate(-50%, -50%);
border-radius: 50%;
border: 3px solid var(--primary-glow);
box-shadow:
0 0 15px var(--primary-glow),
0 0 25px var(--primary-glow),
inset 0 0 10px var(--primary-glow);
animation: neon-pulse 3s ease-in-out infinite;
}
}
.inner-glow-ring {
position: absolute;
opacity: 0;
border-radius: 50%;
background: transparent;
pointer-events: none;
z-index: 3;
transition: var(--menu-transition);
&::before {
content: '';
position: absolute;
top: 50%; left: 50%;
width: calc(100% + 8px);
height: calc(100% + 8px);
transform: translate(-50%, -50%);
border-radius: 50%;
border: 2px solid var(--secondary-glow);
box-shadow:
0 0 12px var(--secondary-glow),
0 0 20px var(--secondary-glow),
inset 0 0 8px var(--secondary-glow);
animation: neon-pulse 2.5s ease-in-out infinite;
}
}
/* Layer positioning */
.arrow-layer, .outer-glow-ring, .inner-glow-ring, .ring-slow-layer, .ring-slow-layer::before,
.ring-fast-layer, .ring-fast-layer::before, .icon-glow-layer, .icon-layer {
position: absolute;
transition: var(--menu-transition);
}
/* Active menu item sizing */
&.active>.arrow-layer, &.active>.outer-glow-ring, &.active>.inner-glow-ring,
&.active>.ring-slow-layer, &.active>.ring-fast-layer, &.active>.icon-glow-layer,
&.active>.icon-layer {
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
}
&.active>.ring-slow-layer::before, &.active>.ring-fast-layer::before {
top: 0; left: 0;
width: var(--center-size);
height: var(--center-size);
}
/* === 🎯 Icon Layer === */
.icon-layer {
border-radius: 50%;
background: transparent !important;
border: none !important;
opacity: 1;
z-index: 10;
}
.arrow-layer {
background: url(assets/arrow.svg) no-repeat center;
transform: scale(1.0) rotate(var(--hovered-child-angle));
opacity: 0;
filter:
drop-shadow(0 0 10px var(--accent-glow))
drop-shadow(0 0 20px var(--accent-glow));
}
&:has(.dragged)>.arrow-layer {
transform: scale(1.6) rotate(var(--pointer-angle));
transition: none;
filter:
drop-shadow(0 0 15px var(--active-glow))
drop-shadow(0 0 25px var(--active-glow));
}
/* === 🌟 Rotating Ring System === */
.ring-slow-layer {
animation: rotate 10s linear infinite;
opacity: 0;
border-radius: 50%;
overflow: hidden;
clip-path: circle(75% at 50% 50%);
&::before {
content: '';
width: 100%;
height: 100%;
mask-image: url(assets/ring-mask.svg);
-webkit-mask-image: url(assets/ring-mask.svg);
mask-size: 100% 100%;
-webkit-mask-size: 100% 100%;
mask-repeat: no-repeat;
-webkit-mask-repeat: no-repeat;
mask-position: center;
-webkit-mask-position: center;
background-image: radial-gradient(circle,
transparent 20%,
color-mix(in srgb, var(--ring-slow) 10%, transparent) 27%,
color-mix(in srgb, var(--ring-slow) 20%, transparent) 30%,
color-mix(in srgb, var(--ring-slow) 60%, transparent) 33%,
var(--ring-slow) 34%,
var(--ring-slow) 36%,
color-mix(in srgb, var(--ring-slow) 60%, transparent) 37%,
color-mix(in srgb, var(--ring-slow) 20%, transparent) 40%,
color-mix(in srgb, var(--ring-slow) 10%, transparent) 47%,
transparent 60%);
filter: drop-shadow(0 0 10px var(--ring-slow));
}
}
.ring-fast-layer {
animation: rotate 2s linear infinite;
opacity: 0;
border-radius: 50%;
overflow: hidden;
clip-path: circle(75% at 50% 50%);
background-image: radial-gradient(circle, var(--backdrop-shadow) 60%, transparent 70%);
&::before {
content: '';
width: 100%;
height: 100%;
mask-image: url(assets/ring-mask.svg);
-webkit-mask-image: url(assets/ring-mask.svg);
mask-size: 100% 100%;
-webkit-mask-size: 100% 100%;
mask-repeat: no-repeat;
-webkit-mask-repeat: no-repeat;
mask-position: center;
-webkit-mask-position: center;
background-image: radial-gradient(circle,
transparent 20%,
color-mix(in srgb, var(--ring-fast) 10%, transparent) 27%,
color-mix(in srgb, var(--ring-fast) 20%, transparent) 30%,
color-mix(in srgb, var(--ring-fast) 60%, transparent) 33%,
var(--ring-inner) 34%,
var(--ring-inner) 36%,
color-mix(in srgb, var(--ring-fast) 60%, transparent) 37%,
color-mix(in srgb, var(--ring-fast) 20%, transparent) 40%,
color-mix(in srgb, var(--ring-fast) 10%, transparent) 47%,
transparent 60%);
filter:
drop-shadow(0 0 15px var(--ring-fast))
drop-shadow(0 0 25px var(--ring-fast));
}
}
/* === ✨ Glow Ring Display Logic === */
&.active>.outer-glow-ring, &.active>.inner-glow-ring,
&.child.hovered>.outer-glow-ring, &.child.hovered>.inner-glow-ring,
&.parent.hovered>.outer-glow-ring, &.parent.hovered>.inner-glow-ring {
opacity: 1;
}
&.child>.icon-glow-layer, &.parent>.icon-glow-layer { opacity: 0.6; }
&.child.hovered>.icon-glow-layer, &.parent.hovered>.icon-glow-layer { opacity: 1; }
/* === ✨ Special State Effects === */
&.active:has(>.hovered)>.ring-fast-layer {
opacity: 1;
animation: rotate 1s linear infinite, neon-pulse 3s ease-in-out infinite;
&::before {
transform: scale(2.0);
filter:
drop-shadow(0 0 20px var(--hover-glow))
drop-shadow(0 0 30px var(--hover-glow));
}
}
&.parent>.active:not(:has(.hovered))>.ring-slow-layer,
&.active.hovered>.ring-slow-layer {
opacity: 1;
&::before {
transform: scale(1.0);
filter:
drop-shadow(0 0 12px var(--primary-glow))
drop-shadow(0 0 20px var(--primary-glow));
}
}
&.active:has(.hovered)>.arrow-layer {
opacity: 1;
transform: scale(1.6) rotate(var(--hovered-child-angle));
filter:
drop-shadow(0 0 15px var(--accent-glow))
drop-shadow(0 0 25px var(--accent-glow));
}
&.active:has(.hovered.dragged)>.arrow-layer {
transform: scale(1.6) rotate(var(--pointer-angle));
filter:
drop-shadow(0 0 20px var(--active-glow))
drop-shadow(0 0 30px var(--active-glow))
drop-shadow(0 0 40px var(--active-glow));
}
/* === 🎭 Enhanced Hover Effects === */
&.child.hovered>.icon-layer, &.parent.hovered>.icon-layer {
transform: scale(1.5) !important;
z-index: 15 !important;
background: transparent !important;
border: none !important;
}
&.active.hovered>.icon-layer {
transform: scale(1.1) !important;
background: transparent !important;
border: none !important;
}
&.child.hovered>.outer-glow-ring::before, &.parent.hovered>.outer-glow-ring::before {
border-width: 4px !important;
width: calc(150% + 24px) !important;
height: calc(150% + 24px) !important;
animation: neon-hover-pulse 1.5s ease-in-out infinite !important;
box-shadow:
0 0 20px var(--hover-glow),
0 0 30px var(--hover-glow),
inset 0 0 15px var(--hover-glow) !important;
}
&.child.hovered>.inner-glow-ring::before, &.parent.hovered>.inner-glow-ring::before {
border-width: 3px !important;
width: calc(150% + 12px) !important;
height: calc(150% + 12px) !important;
animation: neon-hover-pulse 1.3s ease-in-out infinite !important;
box-shadow:
0 0 15px var(--secondary-glow),
0 0 25px var(--secondary-glow),
inset 0 0 12px var(--secondary-glow) !important;
}
&.parent.hovered.clicked>.icon-layer, &.child.hovered.clicked>.icon-layer {
transform: scale(0.8);
}
&.parent>.icon-layer, &.parent>.icon-glow-layer, &.parent>.outer-glow-ring, &.parent>.inner-glow-ring,
&.child>.icon-layer, &.child>.icon-glow-layer, &.child>.outer-glow-ring, &.child>.inner-glow-ring {
top: calc(-1 * var(--child-size) / 2);
left: calc(-1 * var(--child-size) / 2);
width: var(--child-size);
height: var(--child-size);
}
&.grandchild>.icon-layer {
top: calc(-1 * var(--grandchild-size) / 2);
left: calc(-1 * var(--grandchild-size) / 2);
width: var(--grandchild-size);
height: var(--grandchild-size);
opacity: 0;
}
&.dragged { transition: none; }
/* === ⚡ Connector System === */
.connector {
transition: var(--menu-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
filter:
drop-shadow(0 0 8px var(--connector-glow))
drop-shadow(0 0 15px var(--connector-glow));
}
&:has(.dragged)>.connector, &:has(.clicked)>.connector {
transition: none;
filter:
drop-shadow(0 0 12px var(--active-glow))
drop-shadow(0 0 20px var(--active-glow))
drop-shadow(0 0 30px var(--active-glow));
}
&:has(.hovered)>.connector {
filter:
drop-shadow(0 0 10px var(--connector-hover-glow))
drop-shadow(0 0 18px var(--connector-hover-glow));
animation: neon-pulse 2s ease-in-out infinite;
}
.connector {
background: linear-gradient(to right,
var(--connector-edge) 80px,
var(--connector-center) 50%,
var(--connector-edge) calc(100% - 80px));
&::before {
content: '';
position: absolute;
top: -1px; left: 0; right: 0;
height: calc(var(--connector-width) + 2px);
background: linear-gradient(to right,
transparent 70px,
var(--connector-color) 45%,
var(--connector-color) 55%,
transparent calc(100% - 70px));
filter: blur(2px);
z-index: -1;
}
}
}
/* === 🔤 Center Text Neon Effects === */
.center-text {
font-size: 22px !important;
line-height: 26px !important;
font-family: 'Arial', 'Microsoft YaHei', 'Segoe UI', sans-serif;
font-weight: 600;
letter-spacing: 0.3px;
max-width: 160px !important;
min-width: 120px !important;
max-height: 60px !important;
word-wrap: break-word !important;
word-break: break-all !important;
white-space: normal !important;
text-align: center !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
padding: 6px 8px !important;
will-change: color, text-shadow !important;
backface-visibility: hidden !important;
z-index: 20;
color: var(--text-color) !important;
transition: var(--opacity-transition);
text-shadow:
0 0 5px var(--text-glow),
0 0 10px var(--text-glow),
0 0 15px var(--text-glow),
0 0 20px var(--text-glow);
filter: drop-shadow(0 0 8px var(--text-glow));
}
/* === 🌃 Background Canvas Effects === */
#kando-menu {
background-color: var(--canvas-color) !important;
backdrop-filter: blur(20px);
&::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
background:
radial-gradient(circle at 20% 30%, var(--primary-glow) 0%, transparent 50%),
radial-gradient(circle at 80% 70%, var(--secondary-glow) 0%, transparent 50%),
radial-gradient(circle at 50% 50%, var(--accent-glow) 0%, transparent 70%);
opacity: 0.03;
mix-blend-mode: screen;
animation: neon-pulse 8s ease-in-out infinite;
pointer-events: none;
z-index: -1;
}
}

View file

@ -0,0 +1,91 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-FileCopyrightText: 2025 Rena and LCG
// SPDX-License-Identifier: CC0-1.0
{
"name": "neon-lights-color",
"author": "Rena and LCG",
"license": "CC0-1.0",
"themeVersion": "3.0",
"engineVersion": 1,
"maxMenuRadius": 160,
"centerTextWrapWidth": 160,
"drawChildrenBelow": true,
"colors": {
// === 🎯 Icon System (5 options) ===
"icon-color": "rgba(255, 255, 255, 0.95)", // Base icon color
"icon-glow": "rgb(255, 140, 210)", // Icon glow effect
"icon-hover": "rgba(255, 255, 140, 1.0)", // Icon color on hover
"icon-hover-glow": "rgb(255, 255, 140)", // Icon glow on hover
// === 🔤 Text System (2 options) ===
"text-color": "rgba(255, 255, 255, 0.95)", // Center text color
"text-glow": "rgb(255, 140, 210)", // Text glow effect
// === 🌈 Ring Glow System (3 options) ===
"primary-glow": "rgb(255, 140, 210)", // Primary neon ring color
"secondary-glow": "rgb(140, 200, 255)", // Secondary neon ring color
"accent-glow": "rgb(255, 255, 140)", // Accent glow (arrows, etc.)
// === 🌟 Rotating Ring System (3 options) ===
"ring-inner": "rgb(255, 255, 255)", // Rotating ring inner color
"ring-slow": "rgb(120, 120, 120)", // Slow rotating ring color
"ring-fast": "rgb(255, 140, 210)", // Fast rotating ring color
// === ⚡ Connector System (5 options) ===
"connector-color": "rgba(255, 140, 210, 0.4)", // Connector base color (track)
"connector-center": "rgba(255, 200, 255, 0.75)", // Connector center color
"connector-edge": "rgba(255, 140, 210, 0.3)", // Connector edge color
"connector-glow": "rgba(255, 140, 210, 0.5)", // Connector glow effect
"connector-hover-glow": "rgb(255, 255, 140)", // Connector glow on hover
// === 🎭 Interaction State System (2 options) ===
"hover-glow": "rgb(255, 255, 140)", // Hover glow effect
"active-glow": "rgb(140, 255, 140)", // Active glow effect
// === 🌃 Background System (2 options) ===
"canvas-color": "rgba(10, 10, 20, 0.8)", // Main background color
"backdrop-shadow": "rgba(0, 0, 0, 0.6)" // Background shadow effect
},
"layers": [
{
"type": "canvas",
"color": "#0a0a14cc"
},
{
"class": "inner-glow-ring",
"content": "none"
},
{
"class": "outer-glow-ring",
"content": "none"
},
{
"class": "icon-layer",
"content": "icon"
},
{
"class": "icon-glow-layer",
"content": "icon"
},
{
"class": "ring-fast-layer",
"content": "none"
},
{
"class": "ring-slow-layer",
"content": "none"
},
{
"class": "arrow-layer",
"content": "none"
}
]
}

View file

@ -0,0 +1,13 @@
<!--
SPDX-FileCopyrightText: Elfi Ox <https://github.com/elfi-ox>
SPDX-License-Identifier: CC-BY-4.0
-->
With its dark and classy colors, this theme features labels on your items and submenus and a sleek overall appearance. If however, your style is more bright or flashy, you can fully customize this theme with its 10 colors options.
<p align="center">
<img src="banner.png" />
</p>
This theme is a Modified version of the "Rainbow Labels" theme made by Simon Schneegans.

View file

@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: Elfi Ox <https://github.com/elfi-ox>
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["*.jpg", "*.png"]
precedence = "aggregate"
SPDX-FileCopyrightText = "Elfi Ox <https://github.com/elfi-ox>"
SPDX-License-Identifier = "CC0-1.0"
# Font from: https://fonts.google.com/specimen/Plus+Jakarta+Sans
[[annotations]]
path = ["PlusJakartaSans-Medium.ttf"]
precedence = "aggregate"
SPDX-FileCopyrightText = "Copyright 2020 The Plus Jakarta Sans Project Authors (https://github.com/tokotype/PlusJakartaSans)"
SPDX-License-Identifier = "OFL-1.1"

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 KiB

View file

@ -0,0 +1,237 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-FileCopyrightText: Elfi Ox <https://github.com/elfi-ox> */
/* SPDX-License-Identifier: CC0-1.0 */
@font-face {
font-family: 'PlusJakartaSans-Medium';
src: url('PlusJakartaSans-Medium.ttf') format('opentype');
}
.menu-node {
--child-distance: 80px;
--grandchild-distance: 16px;
--grandchild-size: 13px;
--center-size: 80px;
--icon-size: 40px;
--connector-width: 10px;
--menu-transition: transform 175ms ease, left 200ms ease, top 200ms ease, width 200ms ease, height 200ms ease, margin 180ms ease, padding 180ms ease, opacity 200ms ease;
--connector-transition: width 100ms ease, opacity 200ms ease;
--color-transition: background-color 200ms ease, border 60ms ease, color 100ms ease, box-shadow 100ms ease, outline 100ms ease;
transition: var(--menu-transition);
/* Positioning ---------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child {
transform: translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y)));
}
/* Grandchild items are positioned around the child items. */
&.grandchild {
transform: translate(calc(var(--grandchild-distance) * var(--dir-x)),
calc(var(--grandchild-distance) * var(--dir-y)));
}
/* If there is a hovered child node, we scale all children up a bit to create a cool
zoom effect. The hovered child itself is scaled up even more. */
&.active:has(.hovered)>.child {
transform: scale(calc(1.15 - pow(var(--angle-diff) / 180, 0.25) * 0.15)) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))) ;
z-index: 1 !important;
&.hovered:not(.type-submenu) {
z-index: 10 !important;
transform: scale(1.15) translate(calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-x)),
calc(max(var(--child-distance), 10px * var(--sibling-count)) * var(--dir-y))) !important;
}
}
/* Theme Layers --------------------------------------------------------------------- */
/* We hide all icons by default. They will be shown further down in this file for the
the child items. */
.icon-container {
position: relative;
opacity: 0;
width: 100%;
clip-path: circle(45% at 50% 50%);
transition: var(--menu-transition);
color: var(--accent-color);
}
&.hovered:not(.parent):not(.level-0)>.icon-layer {
padding: 2px;
}
.label-layer,
.icon-layer {
position: absolute;
transition: var(--menu-transition);
}
.label-layer {
font-family: PlusJakartaSans-Medium;
opacity: 0;
background-color: var(--label-background-color);
color: var(--text-color);
border: 2px solid var(--border-color);
white-space: nowrap;
height: var(--icon-size);
border-radius: var(--icon-size);
top: calc(-1 * var(--icon-size) / 2);
padding: calc(var(--icon-size) / 4.6) calc(var(--icon-size) / 3);
font-size: calc(var(--icon-size) / 3);
transition: var(--color-transition);
box-shadow: 0 0 12px rgba(0, 0, 0, 0.4);
}
&.hovered>.label-layer {
color: var(--hover-color);
border-color: var(--hover-color);
box-shadow: 0 0 8px var(--hover-color) inset;
}
&.right>.label-layer {
left: calc(-1 * var(--icon-size)/2);
padding-left: calc(var(--icon-size) + 5px);
transition: var(--menu-transition);
}
&.left>.label-layer {
right: calc(-1 * var(--icon-size)/2);
padding-right: calc(var(--icon-size) + 5px);
transition: var(--menu-transition);
}
&.top>.label-layer {
bottom: calc(0.4 * var(--icon-size));
top: inherit;
transform: translateX(-50%);
margin-bottom: -5px;
transition: var(--menu-transition);
}
&.hovered.top>.label-layer {
margin-bottom: 3px;
}
&.bottom>.label-layer {
top: calc(0.4 * var(--icon-size));
transform: translateX(-50%);
margin-top: -5px;
transition: var(--menu-transition);
}
&.hovered.bottom>.label-layer {
margin-top: 3px;
}
.icon-layer {
top: calc(-0.46 * var(--icon-size));
left: calc(-0.46 * var(--icon-size));
width: calc(0.92 * var(--icon-size));
height: calc(0.92 * var(--icon-size));
border-radius: 50%;
background-color: var(--circle-color);
z-index: 1;
}
&.active>.icon-layer {
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
box-shadow: 0 0 12px rgba(0, 0, 0, 0.4);
transition: var(--menu-transition), var(--color-transition);
}
&.grandchild>.icon-layer {
top: calc(-1 * var(--grandchild-size) / 2);
left: calc(-1 * var(--grandchild-size) / 2);
width: var(--grandchild-size);
height: var(--grandchild-size);
box-shadow: none;
background-color: var(--submenu-items-color);
transition: var(--color-transition), var(--menu-transition);
}
&.hovered>.grandchild>.icon-layer {
background-color: var(--submenu-items-hover-color);
top: calc(-0.55 * var(--grandchild-size));
left: calc(-0.55 * var(--grandchild-size));
width: calc(1.1 * var(--grandchild-size));
height: calc(1.1 * var(--grandchild-size));
}
&.hovered.type-submenu:has(>.label-layer):not(.level-0)>.icon-layer {
outline: 1.8px solid var(--submenu-items-hover-color);
transition: var(--color-transition);
}
&.type-submenu.parent:not(.active)>.grandchild>.icon-layer {
background-color: var(--shrinked-outline-color);
top: calc(-0.55 * var(--grandchild-size));
left: calc(-0.55 * var(--grandchild-size));
width: calc(1.1 * var(--grandchild-size));
height: calc(1.1 * var(--grandchild-size));
}
&.type-submenu.parent:not(.active)>.icon-layer {
outline: 1.8px solid var(--shrinked-outline-color);
transition: var(--color-transition);
}
/* The active menu item is the center of the menu. */
&.child>.label-layer {
transition: var(--menu-transition);
opacity: 1;
}
/* Show the icons of the parent and child items. */
&.active>.icon-layer>.icon-container,
&.parent>.icon-layer>.icon-container,
&.child>.icon-layer>.icon-container {
transition: var(--menu-transition);
opacity: 1;
}
/* We disable any transition for dragged submenu items. */
&.dragged.type-submenu {
transition: none;
}
/* Connectors ----------------------------------------------------------------------- */
.connector {
transition: var(--connector-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
background-color: var(--connector-color);
opacity: 0;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
&:has(>.dragged)>.connector,
&:has(>.clicked)>.connector {
transition: none;
}
&:has(>.parent)>.connector,
&:has(>.active.type-submenu)>.connector,
&:has(>.dragged.type-submenu)>.connector {
opacity: 1;
}
}
/* Center Text ------------------------------------------------------------------------ */
.center-text {
display: none;
}

View file

@ -0,0 +1,50 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-FileCopyrightText: Elfi Ox <https://github.com/elfi-ox> */
// SPDX-License-Identifier: CC0-1.0
{
name: 'Nether Labels',
author: 'Simon Schneegans, Elfi Ox',
license: 'CC0-1.0',
themeVersion: '1.0',
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 160,
// This theme draws child items below their parent items.
drawChildrenBelow: false,
// These colors can be configured by the user and are vailable in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
'accent-color': '#D3ADFF',
'hover-color': '#D3ADFF',
'connector-color': '#D3ADFF',
'circle-color' : '#131219',
'border-color': '#131219',
'label-background-color': '#0A0A0A',
'text-color' : '#FFFFFF',
'shrinked-outline-color' : '#D3ADFF',
'submenu-items-hover-color' : '#D3ADFF',
'submenu-items-color' : '#131219',
},
// This theme uses two layers, one for the icon and the background and one for the arrow
// which points to the hovered item.
layers: [
{ class: 'icon-layer', content: 'icon' },
{ class: 'label-layer', content: 'name' },
],
}

View file

@ -0,0 +1,10 @@
# SPDX-FileCopyrightText: Elfi Ox <https://github.com/elfi-ox>
# SPDX-License-Identifier: CC0-1.0
version = 1
[[annotations]]
path = ["preview.jpg"]
precedence = "aggregate"
SPDX-FileCopyrightText = "Ba Nyar Naing <https://github.com/devnyar>"
SPDX-License-Identifier = "CC0-1.0"

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

View file

@ -0,0 +1,191 @@
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* _ _ ____ _ _ ___ ____ */
/* |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform */
/* | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando */
/* */
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de> */
/* SPDX-FileCopyrightText: Elfi Ox <https://github.com/elfi-ox> */
/* SPDX-License-Identifier: CC0-1.0 */
.menu-node {
--child-distance: 80px;
--grandchild-distance: 16px;
--center-size: 80px;
--icon-size: 40px;
--connector-width: 10px;
--menu-transition: transform 200ms ease, opacity 200ms ease;
--connector-transition: width 200ms ease, opacity 200ms ease;
transition: var(--menu-transition);
/* Positioning ---------------------------------------------------------------------- */
/* Child items are positioned around the active node. */
&.child.type-submenu {
transform: translate(
calc(
max(var(--child-distance), 10px * var(--sibling-count)) *
var(--dir-x)
),
calc(
max(var(--child-distance), 10px * var(--sibling-count)) *
var(--dir-y)
)
);
}
&.child:not(.type-submenu) {
transform: translate(
calc(
max(var(--child-distance), 10px * var(--sibling-count)) *
var(--dir-x)
),
calc(
max(var(--child-distance), 10px * var(--sibling-count)) *
var(--dir-y)
)
) !important;
}
/* Grandchild items are positioned around the child items. */
&.grandchild {
transform: translate(
calc(var(--grandchild-distance) * var(--dir-x)),
calc(var(--grandchild-distance) * var(--dir-y))
);
}
/* Theme Layers --------------------------------------------------------------------- */
/* We hide all icons by default. They will be shown further down in this file for the
the child items. */
.icon-container {
position: relative;
top: 0;
left: 0;
width: 100%;
opacity: 0;
clip-path: circle(45% at 50% 50%);
transition: var(--menu-transition);
color: var(--accent-color);
}
.label-layer,
.icon-layer {
position: absolute;
transition: var(--menu-transition);
}
.label-layer {
opacity: 0;
background-color: var(--label-background-color);
color: var(--text-color);
border: 2px solid var(--border-color);
white-space: nowrap;
height: var(--icon-size);
border-radius: var(--icon-size);
top: calc(-1 * var(--icon-size) / 2);
padding: calc(var(--icon-size) / 5) calc(var(--icon-size) / 3);
font-size: calc(var(--icon-size) / 2.7);
}
&.hovered > .label-layer {
color: var(--hover-color);
border-color: var(--hover-color);
box-shadow: 0 0 6px var(--hover-color) inset;
}
&.right > .label-layer {
left: calc(-1 * var(--icon-size) / 2);
padding-left: calc(var(--icon-size) + 5px);
}
&.left > .label-layer {
right: calc(-1 * var(--icon-size) / 2);
padding-right: calc(var(--icon-size) + 5px);
}
&.top > .label-layer {
bottom: calc(0.4 * var(--icon-size));
top: inherit;
transform: translateX(-50%);
}
&.bottom > .label-layer {
top: calc(0.4 * var(--icon-size));
transform: translateX(-50%);
}
.icon-layer {
top: calc(-1 * var(--icon-size) / 2);
left: calc(-1 * var(--icon-size) / 2);
width: var(--icon-size);
height: var(--icon-size);
border-radius: 50%;
box-shadow: 0 0 12px rgba(0, 0, 0, 0.4);
background-color: var(--circle-color);
z-index: 1;
}
&.active > .icon-layer {
top: calc(-1 * var(--center-size) / 2);
left: calc(-1 * var(--center-size) / 2);
width: var(--center-size);
height: var(--center-size);
}
&.grandchild > .icon-layer {
top: calc(-1 * var(--grandchild-size) / 2);
left: calc(-1 * var(--grandchild-size) / 2);
width: var(--grandchild-size);
height: var(--grandchild-size);
box-shadow: none;
}
/* The active menu item is the center of the menu. */
&.child > .label-layer {
opacity: 1;
}
/* Show the icons of the parent and child items. */
&.active > .icon-layer > .icon-container,
&.parent > .icon-layer > .icon-container,
&.child > .icon-layer > .icon-container {
opacity: 1;
}
/* We disable any transition for dragged submenu items. */
&.dragged.type-submenu {
transition: none;
}
/* Connectors ----------------------------------------------------------------------- */
.connector {
transition: var(--connector-transition);
height: var(--connector-width);
top: calc(-1 * var(--connector-width) / 2);
background-color: var(--connector-color);
opacity: 0;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
}
&:has(> .dragged) > .connector,
&:has(> .clicked) > .connector {
transition: none;
}
&:has(> .parent) > .connector,
&:has(> .active.type-submenu) > .connector,
&:has(> .dragged.type-submenu) > .connector {
opacity: 1;
}
}
/* Center Text ------------------------------------------------------------------------ */
.center-text {
display: none;
}

View file

@ -0,0 +1,48 @@
//////////////////////////////////////////////////////////////////////////////////////////
// _ _ ____ _ _ ___ ____ //
// |_/ |__| |\ | | \ | | This file belongs to Kando, the cross-platform //
// | \_ | | | \| |__/ |__| pie menu. Read more on github.com/kando-menu/kando //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
// SPDX-FileCopyrightText: Elfi Ox <https://github.com/elfi-ox> */
// SPDX-FileCopyrightText: Ba Nyar Naing <https://github.com/devnyar> */
// SPDX-License-Identifier: CC0-1.0
{
name: 'Nord',
author: 'Simon Schneegans, Elfi Ox, Ba Nyar Naing',
license: 'CC0-1.0',
themeVersion: '1.0',
// This theme was created for Kando's theme engine version 1. Kando will use this to
// check if the theme is compatible with the current version of Kando.
engineVersion: 1,
// When a menu is opened too close to a screen's edge, it is moved away from the edge
// by this amount of pixels.
maxMenuRadius: 160,
// This theme draws child items below their parent items.
drawChildrenBelow: false,
// These colors can be configured by the user and are vailable in the CSS file as CSS
// variables. The default values are used if the user does not provide any values.
colors: {
'accent-color': '#D8DEE9',
'hover-color': '#D8DEE9',
'connector-color': '#3B4252',
'circle-color' : '#4C566A',
'border-color': '#3B4252',
'label-background-color': '#434C5E',
'text-color' : '#ECEFF4'
},
// This theme uses two layers, one for the icon and the background and one for the arrow
// which points to the hovered item.
layers: [
{ class: 'icon-layer', content: 'icon' },
{ class: 'label-layer', content: 'name' },
],
}

734
.config/kando/menus.json Normal file
View file

@ -0,0 +1,734 @@
{
"menus": [
{
"shortcut": "Control+Space",
"shortcutID": "example-menu",
"centered": false,
"root": {
"type": "submenu",
"name": "Example Menu",
"icon": "award_star",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "submenu",
"name": "Apps",
"icon": "apps",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "command",
"data": {
"command": "x-www-browser"
},
"name": "Web Browser",
"icon": "globe",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-email"
},
"name": "E-Mail",
"icon": "mail",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "gimp"
},
"name": "GIMP",
"icon": "gimp",
"iconTheme": "simple-icons"
},
{
"type": "command",
"data": {
"command": "xdg-open ~"
},
"name": "File Browser",
"icon": "folder_shared",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "x-terminal-emulator"
},
"name": "Terminal",
"icon": "terminal",
"iconTheme": "material-symbols-rounded"
}
]
},
{
"type": "submenu",
"name": "Web Links",
"icon": "public",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "uri",
"data": {
"uri": "https://www.google.com"
},
"name": "Google",
"icon": "google",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://github.com/kando-menu/kando"
},
"name": "Kando on GitHub",
"icon": "github",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://ko-fi.com/schneegans"
},
"name": "Kando on Ko-fi",
"icon": "kofi",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://www.youtube.com/@simonschneegans"
},
"name": "Kando on YouTube",
"icon": "youtube",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://discord.gg/hZwbVSDkhy"
},
"name": "Kando on Discord",
"icon": "discord",
"iconTheme": "simple-icons"
}
]
},
{
"type": "command",
"name": "Next Workspace",
"icon": "arrow_circle_right",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-down",
"detached": true,
"isolated": false,
"delayed": false
}
},
{
"type": "submenu",
"name": "Clipboard",
"icon": "assignment",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"data": {
"hotkey": "ControlLeft+KeyV",
"delayed": true
},
"name": "Paste",
"icon": "content_paste_go",
"iconTheme": "material-symbols-rounded",
"angle": 90
},
{
"type": "hotkey",
"data": {
"hotkey": "ControlLeft+KeyC",
"delayed": true
},
"name": "Copy",
"icon": "content_copy",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "ControlLeft+KeyX",
"delayed": true
},
"name": "Cut",
"icon": "cut",
"iconTheme": "material-symbols-rounded"
}
]
},
{
"type": "submenu",
"name": "Audio",
"icon": "play_circle",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"data": {
"hotkey": "MediaTrackNext",
"delayed": false
},
"name": "Next Track",
"icon": "skip_next",
"iconTheme": "material-symbols-rounded",
"angle": 90
},
{
"type": "hotkey",
"data": {
"hotkey": "MediaPlayPause",
"delayed": false
},
"name": "Play / Pause",
"icon": "play_pause",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "AudioVolumeMute",
"delayed": false
},
"name": "Mute",
"icon": "music_off",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "MediaTrackPrevious",
"delayed": false
},
"name": "Previous Track",
"icon": "skip_previous",
"iconTheme": "material-symbols-rounded",
"angle": 270
}
]
},
{
"type": "submenu",
"name": "Windows",
"icon": "select_window",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"data": {
"hotkey": "MetaLeft+ArrowUp",
"delayed": true
},
"name": "Toggle Maximize",
"icon": "open_in_full",
"iconTheme": "material-symbols-rounded",
"angle": 0
},
{
"type": "hotkey",
"data": {
"hotkey": "MetaLeft+ArrowRight",
"delayed": true
},
"name": "Tile Right",
"icon": "text_select_jump_to_end",
"iconTheme": "material-symbols-rounded",
"angle": 90
},
{
"type": "hotkey",
"data": {
"hotkey": "AltLeft+F4",
"delayed": true
},
"name": "Close Window",
"icon": "cancel_presentation",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "MetaLeft+ArrowLeft",
"delayed": true
},
"name": "Tile Left",
"icon": "text_select_jump_to_beginning",
"iconTheme": "material-symbols-rounded",
"angle": 270
}
]
},
{
"type": "command",
"name": "Previous Workspace",
"icon": "arrow_circle_left",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
}
},
{
"type": "submenu",
"name": "Bookmarks",
"icon": "folder_special",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir DOWNLOAD)\""
},
"name": "Downloads",
"icon": "download",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir VIDEOS)\""
},
"name": "Videos",
"icon": "video_camera_front",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir PICTURES)\""
},
"name": "Pictures",
"icon": "imagesmode",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir DOCUMENTS)\""
},
"name": "Documents",
"icon": "text_ad",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir DESKTOP)\""
},
"name": "Desktop",
"icon": "desktop_windows",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open ~"
},
"name": "Home",
"icon": "home",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir MUSIC)\""
},
"name": "Music",
"icon": "music_note",
"iconTheme": "material-symbols-rounded"
}
]
}
]
},
"anchored": false,
"hoverMode": false,
"conditions": {}
},
{
"shortcut": "",
"shortcutID": "default-menu",
"centered": false,
"anchored": false,
"hoverMode": false,
"tags": [],
"root": {
"type": "submenu",
"name": "Default Menu",
"icon": "nixos",
"iconTheme": "simple-icons-colored",
"children": [
{
"type": "hotkey",
"name": "Toggle Float",
"icon": "float_landscape_2",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MetaLeft+ShiftLeft+KeyT",
"delayed": true
}
},
{
"type": "command",
"name": "Up",
"icon": "arrow_circle_up",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 0
},
{
"type": "submenu",
"name": "Media",
"icon": "headphones",
"iconTheme": "material-symbols-rounded",
"data": {},
"children": [
{
"type": "hotkey",
"name": "Next",
"icon": "skip_next",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MediaTrackNext",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Play|Pause",
"icon": "play_pause",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MediaPlayPause",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Previous",
"icon": "skip_previous",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MediaTrackPrevious",
"delayed": true
}
}
],
"angle": 90
},
{
"type": "command",
"name": "Down",
"icon": "arrow_circle_down",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-down",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 180
}
]
}
},
{
"shortcut": "",
"shortcutID": "zen-browser",
"centered": false,
"anchored": false,
"hoverMode": false,
"tags": [],
"root": {
"type": "submenu",
"name": "Zen Browser",
"icon": "zenbrowser",
"iconTheme": "simple-icons-colored",
"children": [
{
"type": "hotkey",
"name": "Split V",
"icon": "split_scene_up",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+AltLeft+KeyH",
"delayed": true
}
},
{
"type": "command",
"name": "Up",
"icon": "arrow_circle_up",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 0
},
{
"type": "hotkey",
"name": "Unsplit",
"icon": "tab",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+AltLeft+KeyU",
"delayed": true
},
"angle": 90
},
{
"type": "command",
"name": "Down",
"icon": "arrow_circle_down",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-down",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 180
},
{
"type": "hotkey",
"name": "Split H",
"icon": "split_scene_left",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+AltLeft+KeyV",
"delayed": true
}
}
]
}
},
{
"shortcut": "",
"shortcutID": "gimp-menu",
"centered": false,
"anchored": false,
"hoverMode": false,
"tags": [],
"root": {
"type": "submenu",
"name": "GIMP",
"icon": "gimp",
"iconTheme": "simple-icons-colored",
"children": [
{
"type": "command",
"name": "Up",
"icon": "arrow_circle_up",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 0
},
{
"type": "submenu",
"name": "Layers",
"icon": "layers",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"name": "New Layer",
"icon": "add",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ShiftLeft+ControlLeft+KeyN",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Duplicate Layer",
"icon": "content_copy",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ShiftLeft+ControlLeft+KeyD",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Merge Down",
"icon": "merge_type",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+KeyE",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Merge Visible",
"icon": "layers_clear",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ShiftLeft+ControlLeft+KeyM",
"delayed": true
}
},
{
"type": "hotkey",
"name": "New from Visible",
"icon": "auto_fix_high",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ShiftLeft+ControlLeft+AltLeft+KeyN",
"delayed": true
}
}
]
},
{
"type": "submenu",
"name": "Tools",
"icon": "brush",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"name": "Paintbrush",
"icon": "brush",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "KeyP",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Eraser",
"icon": "cleaning_services",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ShiftLeft+KeyE",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Move",
"icon": "open_with",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "KeyM",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Rectangle Select",
"icon": "rectangle",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "KeyR",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Ellipse Select",
"icon": "lens",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "KeyE",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Color Picker",
"icon": "colorize",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "KeyO",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Zoom",
"icon": "zoom_in",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "KeyZ",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Text",
"icon": "text_fields",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "KeyT",
"delayed": true
}
}
]
},
{
"type": "command",
"name": "Down",
"icon": "arrow_circle_down",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 180
},
{
"type": "hotkey",
"name": "Ruler",
"icon": "align_flex_end",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+ShiftLeft+KeyR",
"delayed": true
}
}
]
}
}
],
"collections": [
{
"name": "Favorites",
"icon": "favorite",
"iconTheme": "material-symbols-rounded",
"tags": [
"favs"
]
}
]
}

View file

@ -0,0 +1,536 @@
{
"menus": [
{
"shortcut": "Control+Space",
"shortcutID": "example-menu",
"centered": false,
"root": {
"type": "submenu",
"name": "Example Menu",
"icon": "award_star",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "submenu",
"name": "Apps",
"icon": "apps",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "command",
"data": {
"command": "x-www-browser"
},
"name": "Web Browser",
"icon": "globe",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-email"
},
"name": "E-Mail",
"icon": "mail",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "gimp"
},
"name": "GIMP",
"icon": "gimp",
"iconTheme": "simple-icons"
},
{
"type": "command",
"data": {
"command": "xdg-open ~"
},
"name": "File Browser",
"icon": "folder_shared",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "x-terminal-emulator"
},
"name": "Terminal",
"icon": "terminal",
"iconTheme": "material-symbols-rounded"
}
]
},
{
"type": "submenu",
"name": "Web Links",
"icon": "public",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "uri",
"data": {
"uri": "https://www.google.com"
},
"name": "Google",
"icon": "google",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://github.com/kando-menu/kando"
},
"name": "Kando on GitHub",
"icon": "github",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://ko-fi.com/schneegans"
},
"name": "Kando on Ko-fi",
"icon": "kofi",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://www.youtube.com/@simonschneegans"
},
"name": "Kando on YouTube",
"icon": "youtube",
"iconTheme": "simple-icons"
},
{
"type": "uri",
"data": {
"uri": "https://discord.gg/hZwbVSDkhy"
},
"name": "Kando on Discord",
"icon": "discord",
"iconTheme": "simple-icons"
}
]
},
{
"type": "command",
"name": "Next Workspace",
"icon": "arrow_circle_right",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-down",
"detached": true,
"isolated": false,
"delayed": false
}
},
{
"type": "submenu",
"name": "Clipboard",
"icon": "assignment",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"data": {
"hotkey": "ControlLeft+KeyV",
"delayed": true
},
"name": "Paste",
"icon": "content_paste_go",
"iconTheme": "material-symbols-rounded",
"angle": 90
},
{
"type": "hotkey",
"data": {
"hotkey": "ControlLeft+KeyC",
"delayed": true
},
"name": "Copy",
"icon": "content_copy",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "ControlLeft+KeyX",
"delayed": true
},
"name": "Cut",
"icon": "cut",
"iconTheme": "material-symbols-rounded"
}
]
},
{
"type": "submenu",
"name": "Audio",
"icon": "play_circle",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"data": {
"hotkey": "MediaTrackNext",
"delayed": false
},
"name": "Next Track",
"icon": "skip_next",
"iconTheme": "material-symbols-rounded",
"angle": 90
},
{
"type": "hotkey",
"data": {
"hotkey": "MediaPlayPause",
"delayed": false
},
"name": "Play / Pause",
"icon": "play_pause",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "AudioVolumeMute",
"delayed": false
},
"name": "Mute",
"icon": "music_off",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "MediaTrackPrevious",
"delayed": false
},
"name": "Previous Track",
"icon": "skip_previous",
"iconTheme": "material-symbols-rounded",
"angle": 270
}
]
},
{
"type": "submenu",
"name": "Windows",
"icon": "select_window",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "hotkey",
"data": {
"hotkey": "MetaLeft+ArrowUp",
"delayed": true
},
"name": "Toggle Maximize",
"icon": "open_in_full",
"iconTheme": "material-symbols-rounded",
"angle": 0
},
{
"type": "hotkey",
"data": {
"hotkey": "MetaLeft+ArrowRight",
"delayed": true
},
"name": "Tile Right",
"icon": "text_select_jump_to_end",
"iconTheme": "material-symbols-rounded",
"angle": 90
},
{
"type": "hotkey",
"data": {
"hotkey": "AltLeft+F4",
"delayed": true
},
"name": "Close Window",
"icon": "cancel_presentation",
"iconTheme": "material-symbols-rounded"
},
{
"type": "hotkey",
"data": {
"hotkey": "MetaLeft+ArrowLeft",
"delayed": true
},
"name": "Tile Left",
"icon": "text_select_jump_to_beginning",
"iconTheme": "material-symbols-rounded",
"angle": 270
}
]
},
{
"type": "command",
"name": "Previous Workspace",
"icon": "arrow_circle_left",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
}
},
{
"type": "submenu",
"name": "Bookmarks",
"icon": "folder_special",
"iconTheme": "material-symbols-rounded",
"children": [
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir DOWNLOAD)\""
},
"name": "Downloads",
"icon": "download",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir VIDEOS)\""
},
"name": "Videos",
"icon": "video_camera_front",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir PICTURES)\""
},
"name": "Pictures",
"icon": "imagesmode",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir DOCUMENTS)\""
},
"name": "Documents",
"icon": "text_ad",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir DESKTOP)\""
},
"name": "Desktop",
"icon": "desktop_windows",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open ~"
},
"name": "Home",
"icon": "home",
"iconTheme": "material-symbols-rounded"
},
{
"type": "command",
"data": {
"command": "xdg-open \"$(xdg-user-dir MUSIC)\""
},
"name": "Music",
"icon": "music_note",
"iconTheme": "material-symbols-rounded"
}
]
}
]
},
"anchored": false,
"hoverMode": false,
"conditions": {}
},
{
"shortcut": "",
"shortcutID": "default-menu",
"centered": false,
"anchored": false,
"hoverMode": false,
"tags": [],
"root": {
"type": "submenu",
"name": "Default Menu",
"icon": "nixos",
"iconTheme": "simple-icons-colored",
"children": [
{
"type": "hotkey",
"name": "Toggle Float",
"icon": "float_landscape_2",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MetaLeft+ShiftLeft+KeyT",
"delayed": true
}
},
{
"type": "command",
"name": "Up",
"icon": "arrow_circle_up",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 0
},
{
"type": "submenu",
"name": "Media",
"icon": "headphones",
"iconTheme": "material-symbols-rounded",
"data": {},
"children": [
{
"type": "hotkey",
"name": "Next",
"icon": "skip_next",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MediaTrackNext",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Play|Pause",
"icon": "play_pause",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MediaPlayPause",
"delayed": true
}
},
{
"type": "hotkey",
"name": "Previous",
"icon": "skip_previous",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "MediaTrackPrevious",
"delayed": true
}
}
],
"angle": 90
},
{
"type": "command",
"name": "Down",
"icon": "arrow_circle_down",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-down",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 180
}
]
}
},
{
"shortcut": "",
"shortcutID": "zen-browser",
"centered": false,
"anchored": false,
"hoverMode": false,
"tags": [],
"root": {
"type": "submenu",
"name": "Zen Browser",
"icon": "zenbrowser",
"iconTheme": "simple-icons-colored",
"children": [
{
"type": "hotkey",
"name": "Split V",
"icon": "split_scene_up",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+AltLeft+KeyH",
"delayed": true
}
},
{
"type": "command",
"name": "Up",
"icon": "arrow_circle_up",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-up",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 0
},
{
"type": "hotkey",
"name": "Unsplit",
"icon": "tab",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+AltLeft+KeyU",
"delayed": true
},
"angle": 90
},
{
"type": "command",
"name": "Down",
"icon": "arrow_circle_down",
"iconTheme": "material-symbols-rounded",
"data": {
"command": "niri msg action focus-workspace-down",
"detached": true,
"isolated": false,
"delayed": false
},
"angle": 180
},
{
"type": "hotkey",
"name": "Split H",
"icon": "split_scene_left",
"iconTheme": "material-symbols-rounded",
"data": {
"hotkey": "ControlLeft+AltLeft+KeyV",
"delayed": true
}
}
]
}
}
],
"collections": [
{
"name": "Favorites",
"icon": "favorite",
"iconTheme": "material-symbols-rounded",
"tags": [
"favs"
]
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.config/kando/session/DIPS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1 @@
MANIFEST-000001

View file

@ -0,0 +1,3 @@
2026/02/04-18:01:58.808 1593 Reusing MANIFEST /home/nicole/.config/kando/session/Local Storage/leveldb/MANIFEST-000001
2026/02/04-18:01:58.810 1593 Recovering log #3
2026/02/04-18:01:58.810 1593 Reusing old log /home/nicole/.config/kando/session/Local Storage/leveldb/000003.log

View file

@ -0,0 +1,3 @@
2026/02/04-15:27:15.910 c528 Reusing MANIFEST /home/nicole/.config/kando/session/Local Storage/leveldb/MANIFEST-000001
2026/02/04-15:27:15.912 c528 Recovering log #3
2026/02/04-15:27:15.913 c528 Reusing old log /home/nicole/.config/kando/session/Local Storage/leveldb/000003.log

Some files were not shown because too many files have changed in this diff Show more